<?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>149393</bug_id>
          
          <creation_ts>2015-09-20 18:14:51 -0700</creation_ts>
          <short_desc>Pass JSC::ExecState to the custom bindings by reference</short_desc>
          <delta_ts>2015-09-20 19:42:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Bindings</component>
          <version>WebKit 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="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>darin</cc>
    
    <cc>kling</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1127543</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-09-20 18:14:51 -0700</bug_when>
    <thetext>Pass JSC::ExecState to the custom bindings by reference instead of by pointer as it is expected to be non-null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127544</commentid>
    <comment_count>1</comment_count>
      <attachid>261619</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-09-20 18:19:30 -0700</bug_when>
    <thetext>Created attachment 261619
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127546</commentid>
    <comment_count>2</comment_count>
      <attachid>261620</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-09-20 18:27:45 -0700</bug_when>
    <thetext>Created attachment 261620
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127547</commentid>
    <comment_count>3</comment_count>
      <attachid>261621</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-09-20 18:31:38 -0700</bug_when>
    <thetext>Created attachment 261621
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127548</commentid>
    <comment_count>4</comment_count>
      <attachid>261622</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-09-20 18:48:21 -0700</bug_when>
    <thetext>Created attachment 261622
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127549</commentid>
    <comment_count>5</comment_count>
      <attachid>261623</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-09-20 19:01:19 -0700</bug_when>
    <thetext>Created attachment 261623
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127550</commentid>
    <comment_count>6</comment_count>
      <attachid>261623</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-09-20 19:40:58 -0700</bug_when>
    <thetext>Comment on attachment 261623
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127551</commentid>
    <comment_count>7</comment_count>
      <attachid>261623</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-09-20 19:42:47 -0700</bug_when>
    <thetext>Comment on attachment 261623
Patch

Clearing flags on attachment: 261623

Committed r190036: &lt;http://trac.webkit.org/changeset/190036&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127552</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-09-20 19:42:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261619</attachid>
            <date>2015-09-20 18:19:30 -0700</date>
            <delta_ts>2015-09-20 18:27:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149393-20150920181915.patch</filename>
            <type>text/plain</type>
            <size>222013</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwMDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzhjYWVkYmY4N2EwMjcx
ZGUzY2Y0NDA4NzMzNzAzOWRiODUxODdlOC4uOTYxNGE4MjE5OTAwYTU3OTQ0YzE1M2U1OWZmZTI2
YzhlNmQzNmI4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1IEBACiAyMDE1LTA5LTIwICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgUGFzcyBKU0M6OkV4ZWNTdGF0
ZSB0byB0aGUgY3VzdG9tIGJpbmRpbmdzIGJ5IHJlZmVyZW5jZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5MzkzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGFzcyBKU0M6OkV4ZWNTdGF0ZSB0byB0aGUg
Y3VzdG9tIGJpbmRpbmdzIGJ5IHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGJ5CisgICAgICAgIHBvaW50
ZXIgYXMgaXQgaXMgZXhwZWN0ZWQgdG8gYmUgbm9uLW51bGwuCisKKzIwMTUtMDktMjAgIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwogICAgICAgICBSZWdyZXNzaW9uKHIxOTAwMjMp
OiBmYXN0L2RvbS9uYXZpZ2F0aW9uLXdpdGgtc2lkZWVmZmVjdHMtY3Jhc2guaHRtbCBpcyBjcmFz
aGluZwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5
MzkyCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1Rp
bWVQbHVnaW5SZXBsYWNlbWVudC5tbSBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9R
dWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQppbmRleCBmMmFhZWU2M2NmYmI5YzU1OGYwNTdl
OGY0NjNhYmM1NTJmOGYxZWY3Li4xNmJiMThiYTViMjZlMTY5ZmJjZWZhYzVlNDZhYzZlMTIzODk1
NWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5z
L1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCkBAIC0zNjYsNyArMzY2LDcgQEAgc3RhdGlj
IEpTVmFsdWUgKmpzVmFsdWVXaXRoQVZNZXRhZGF0YUl0ZW1JbkNvbnRleHQoQVZNZXRhZGF0YUl0
ZW1UeXBlICppdGVtLCBKU0MKIH0KICNlbmRpZgogCi1KU0M6OkpTVmFsdWUgSlNRdWlja1RpbWVQ
bHVnaW5SZXBsYWNlbWVudDo6dGltZWRNZXRhRGF0YShKU0M6OkV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKK0pTQzo6SlNWYWx1ZSBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Ojp0aW1lZE1ldGFE
YXRhKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICNpZiBQTEFURk9STShJT1MpCiAg
ICAgSFRNTFZpZGVvRWxlbWVudCogcGFyZW50ID0gaW1wbCgpLnBhcmVudEVsZW1lbnQoKTsKQEAg
LTM4NCwxNCArMzg0LDE0IEBAIEpTQzo6SlNWYWx1ZSBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2Vt
ZW50Ojp0aW1lZE1ldGFEYXRhKEpTQzo6RXhlY1N0YXRlKiBleGVjKSBjCiAgICAgSlNDb250ZXh0
ICpqc0NvbnRleHQgPSBmcmFtZS0+c2NyaXB0KCkuamF2YVNjcmlwdENvbnRleHQoKTsKICAgICBK
U1ZhbHVlICptZXRhRGF0YVZhbHVlID0ganNWYWx1ZVdpdGhWYWx1ZUluQ29udGV4dChtZXRhRGF0
YSwganNDb250ZXh0KTsKICAgICAKLSAgICByZXR1cm4gdG9KUyhleGVjLCBbbWV0YURhdGFWYWx1
ZSBKU1ZhbHVlUmVmXSk7CisgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBbbWV0YURhdGFWYWx1ZSBK
U1ZhbHVlUmVmXSk7CiAjZWxzZQotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwogI2VuZGlmCiB9CiAKLUpT
Qzo6SlNWYWx1ZSBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjphY2Nlc3NMb2coSlNDOjpF
eGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU0M6OkpTVmFsdWUgSlNRdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudDo6YWNjZXNzTG9nKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICNpZiBQ
TEFURk9STShJT1MpCiAgICAgSFRNTFZpZGVvRWxlbWVudCogcGFyZW50ID0gaW1wbCgpLnBhcmVu
dEVsZW1lbnQoKTsKQEAgLTQwNiwxNCArNDA2LDE0IEBAIEpTQzo6SlNWYWx1ZSBKU1F1aWNrVGlt
ZVBsdWdpblJlcGxhY2VtZW50OjphY2Nlc3NMb2coSlNDOjpFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
CiAgICAgU3RyaW5nIGFjY2Vzc0xvZ1N0cmluZyA9IHBhcmVudC0+cGxheWVyKCktPmFjY2Vzc0xv
ZygpOwogICAgIFtkaWN0aW9uYXJ5IHNldFZhbHVlOnN0YXRpY19jYXN0PE5TU3RyaW5nICo+KGFj
Y2Vzc0xvZ1N0cmluZykgZm9yUHJvcGVydHk6KE5TU3RyaW5nICopQ0ZTVFIoImV4dGVuZGVkTG9n
IildOwogCi0gICAgcmV0dXJuIHRvSlMoZXhlYywgW2RpY3Rpb25hcnkgSlNWYWx1ZVJlZl0pOwor
ICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgW2RpY3Rpb25hcnkgSlNWYWx1ZVJlZl0pOwogI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBy
ZXR1cm4gSlNDOjpqc051bGwoKTsKICNlbmRpZgogfQogCi1KU0M6OkpTVmFsdWUgSlNRdWlja1Rp
bWVQbHVnaW5SZXBsYWNlbWVudDo6ZXJyb3JMb2coSlNDOjpFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
CitKU0M6OkpTVmFsdWUgSlNRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6ZXJyb3JMb2coSlND
OjpFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewogI2lmIFBMQVRGT1JNKElPUykKICAgICBIVE1M
VmlkZW9FbGVtZW50KiBwYXJlbnQgPSBpbXBsKCkucGFyZW50RWxlbWVudCgpOwpAQCAtNDI4LDkg
KzQyOCw5IEBAIEpTQzo6SlNWYWx1ZSBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjplcnJv
ckxvZyhKU0M6OkV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICBTdHJpbmcgZXJyb3JMb2dTdHJp
bmcgPSBwYXJlbnQtPnBsYXllcigpLT5lcnJvckxvZygpOwogICAgIFtkaWN0aW9uYXJ5IHNldFZh
bHVlOnN0YXRpY19jYXN0PE5TU3RyaW5nICo+KGVycm9yTG9nU3RyaW5nKSBmb3JQcm9wZXJ0eToo
TlNTdHJpbmcgKilDRlNUUigiZXh0ZW5kZWRMb2ciKV07CiAKLSAgICByZXR1cm4gdG9KUyhleGVj
LCBbZGljdGlvbmFyeSBKU1ZhbHVlUmVmXSk7CisgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBbZGlj
dGlvbmFyeSBKU1ZhbHVlUmVmXSk7CiAjZWxzZQotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwogI2VuZGlm
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVy
U291cmNlTm9kZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlv
QnVmZmVyU291cmNlTm9kZUN1c3RvbS5jcHAKaW5kZXggZjNkOWRiZjM3MGJmMWM5YWE1NjFjNzIx
ZmZkOTUzZDM3YTY5ODk2OC4uMWM5YzMyOGIxMjEyNWQ5YmJlMzkyY2UzMWUyNjM4MTZlMmYxMzRl
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0J1ZmZlclNv
dXJjZU5vZGVDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVk
aW9CdWZmZXJTb3VyY2VOb2RlQ3VzdG9tLmNwcApAQCAtMzksMTYgKzM5LDE2IEBAIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0F1ZGlvQnVmZmVy
U291cmNlTm9kZTo6c2V0QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3Zv
aWQgSlNBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OnNldEJ1ZmZlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQogewogICAgIEF1ZGlvQnVmZmVyKiBidWZmZXIgPSBKU0F1ZGlvQnVmZmVy
Ojp0b1dyYXBwZWQodmFsdWUpOwogICAgIGlmICghYnVmZmVyKSB7Ci0gICAgICAgIGV4ZWMtPnZt
KCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJWYWx1ZSBpcyBu
b3Qgb2YgdHlwZSBBdWRpb0J1ZmZlciIpKTsKKyAgICAgICAgc3RhdGUudm0oKS50aHJvd0V4Y2Vw
dGlvbigmc3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJWYWx1ZSBpcyBub3Qgb2YgdHlw
ZSBBdWRpb0J1ZmZlciIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAo
IWltcGwoKS5zZXRCdWZmZXIoYnVmZmVyKSkKLSAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2Vw
dGlvbihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkF1ZGlvQnVmZmVyIHVuc3VwcG9ydGVk
IG51bWJlciBvZiBjaGFubmVscyIpKTsKKyAgICAgICAgc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlv
bigmc3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJBdWRpb0J1ZmZlciB1bnN1cHBvcnRl
ZCBudW1iZXIgb2YgY2hhbm5lbHMiKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCmlu
ZGV4IDQ0MDA1NzllMzY0OTc3MTc3NmM2NWQ2YTQ2ZjVkODNiMmVhODZjYzYuLjM2ZjMxZDlkNjJl
Y2Q3OGZkMWFhZjE5MWMyMmI5YTU1MDAyMjc3M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcApAQCAtNDAsMjggKzQwLDI4IEBAIHZv
aWQgSlNBdWRpb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmaW1wbCgpKSk7CiB9CiAKLXZv
aWQgSlNBdWRpb1RyYWNrOjpzZXRLaW5kKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkK
K3ZvaWQgSlNBdWRpb1RyYWNrOjpzZXRLaW5kKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFs
dWUpCiB7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKLSAgICBhdXRvJiBzdHJpbmcgPSB2YWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZz
dGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAg
ICAgaW1wbCgpLnNldEtpbmQoc3RyaW5nKTsKICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGV4ZWMp
OworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKICNl
bmRpZgogfQogCi12b2lkIEpTQXVkaW9UcmFjazo6c2V0TGFuZ3VhZ2UoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU0F1ZGlvVHJhY2s6OnNldExhbmd1YWdlKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKLSAg
ICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3Ry
aW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm47CiAgICAgaW1wbCgpLnNldExhbmd1YWdlKHN0cmluZyk7CiAjZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh2YWx1ZSk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQmlxdWFkRmlsdGVyTm9kZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0JpcXVhZEZpbHRlck5vZGVDdXN0b20uY3BwCmluZGV4IGY4YzEz
ODUzMDlkODIwMDRlNjJlZmUwZmE0OTJlZjUwZDJmZjM1YTEuLmY2ZmE4NmY1YzM3NGZlYmJjMGI4
MWJmZmNhZmM1ZWVkY2E0MWIzMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQmlxdWFkRmlsdGVyTm9kZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNCaXF1YWRGaWx0ZXJOb2RlQ3VzdG9tLmNwcApAQCAtMzcsMjYgKzM3LDI2IEBA
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0Jp
cXVhZEZpbHRlck5vZGU6OnNldFR5cGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQor
dm9pZCBKU0JpcXVhZEZpbHRlck5vZGU6OnNldFR5cGUoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSkKIHsKICNpZiBFTkFCTEUoTEVHQUNZX1dFQl9BVURJTykKICAgICBpZiAodmFsdWUu
aXNOdW1iZXIoKSkgewotICAgICAgICB1aW50MzJfdCB0eXBlID0gdmFsdWUudG9VSW50MzIoZXhl
Yyk7CisgICAgICAgIHVpbnQzMl90IHR5cGUgPSB2YWx1ZS50b1VJbnQzMigmc3RhdGUpOwogICAg
ICAgICBpZiAoIWltcGwoKS5zZXRUeXBlKHR5cGUpKQotICAgICAgICAgICAgZXhlYy0+dm0oKS50
aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIklsbGVnYWwgQmlxdWFk
RmlsdGVyTm9kZSB0eXBlIikpOworICAgICAgICAgICAgc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlv
bigmc3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJJbGxlZ2FsIEJpcXVhZEZpbHRlck5v
ZGUgdHlwZSIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgogCiAgICAgaWYgKHZh
bHVlLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgU3RyaW5nIHR5cGUgPSB2YWx1ZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAgIFN0cmluZyB0eXBlID0gdmFsdWUudG9TdHJpbmco
JnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKICAgICAgICAgaWYgKHR5cGUgPT0gImxvd3Bhc3MiIHx8
IHR5cGUgPT0gImhpZ2hwYXNzIiB8fCB0eXBlID09ICJiYW5kcGFzcyIgfHwgdHlwZSA9PSAibG93
c2hlbGYiIHx8IHR5cGUgPT0gImhpZ2hzaGVsZiIgfHwgdHlwZSA9PSAicGVha2luZyIgfHwgdHlw
ZSA9PSAibm90Y2giIHx8IHR5cGUgPT0gImFsbHBhc3MiKSB7CiAgICAgICAgICAgICBpbXBsKCku
c2V0VHlwZSh0eXBlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KICAg
ICAKLSAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCAiSWxsZWdhbCBCaXF1YWRGaWx0ZXJOb2RlIHR5cGUiKSk7CisgICAgc3RhdGUudm0oKS50
aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJJbGxlZ2FsIEJp
cXVhZEZpbHRlck5vZGUgdHlwZSIpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9u
Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJh
dGlvbkN1c3RvbS5jcHAKaW5kZXggZTk5ZGUyMWE3NWQ3MzljMzk0YWE0MmJkZDE4Yjc1OWM4OTgw
MTAwNy4uZGUyZjkwNzM0NWE3NjhmNWNlZjM2ODg0OTYyN2NiNDJkNWU0NTFlYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9t
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRp
b25DdXN0b20uY3BwCkBAIC0zNDcsMTAgKzM0NywxMCBAQCBib29sIEpTQ1NTU3R5bGVEZWNsYXJh
dGlvbjo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YQogICAgIHJldHVybiB0cnVlOwogfQogCi1KU1ZhbHVlIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6
Z2V0UHJvcGVydHlDU1NWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ1NTU3R5bGVE
ZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShFeGVjU3RhdGUmIHN0YXRlKQogewotICAg
IGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBj
b25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSA9IHN0YXRlLmFyZ3VtZW50KDApLnRvU3RyaW5nKCZz
dGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFs
dWUgPSBpbXBsKCkuZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eU5hbWUpOwpAQCAtMzU4LDcg
KzM1OCw3IEBAIEpTVmFsdWUgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1Zh
bHVlKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCiAgICAgZ2xv
YmFsT2JqZWN0KCktPndvcmxkKCkubV9jc3NWYWx1ZVJvb3RzLmFkZChjc3NWYWx1ZS5nZXQoKSwg
cm9vdCgmaW1wbCgpKSk7IC8vIEJhbGFuY2VkIGJ5IEpTQ1NTVmFsdWVPd25lcjo6ZmluYWxpemUo
KS4KLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoY3Nz
VmFsdWUpKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBXVEY6Omdl
dFB0cihjc3NWYWx1ZSkpOwogfQogCiB2b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQ3VzdG9tLmNwcAppbmRleCBlZmE1MzlmYjU0Yjg2OTRiZGQzYmM5Zjc0NGYyYTY1
NDIxMDZmMjZkLi5kYzViNTFlOGI5N2VmNTllMjViN2ZiYmY3MDIwNTI4YjM3MDM5ODc5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCkBAIC01OSwzNyArNTksMzcgQEAgc3RhdGljIENh
bnZhc1N0eWxlIHRvSFRNTENhbnZhc1N0eWxlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgdmFsdWUpCiAg
ICAgcmV0dXJuIENhbnZhc1N0eWxlKCk7CiB9CiAKLUpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnN0cm9rZVN0eWxlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVN0eWxlKEV4ZWNTdGF0ZSYgc3RhdGUpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGltcGwoKS5zdHJv
a2VTdHlsZSgpKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBpbXBs
KCkuc3Ryb2tlU3R5bGUoKSk7CiB9CiAKLXZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnNldFN0cm9rZVN0eWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZVN0eWxlKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEJiBjb250ZXh0
ID0gaW1wbCgpOwogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIGNvbnRleHQu
c2V0U3Ryb2tlQ29sb3IoYXNTdHJpbmcodmFsdWUpLT52YWx1ZShleGVjKSk7CisgICAgICAgIGNv
bnRleHQuc2V0U3Ryb2tlQ29sb3IoYXNTdHJpbmcodmFsdWUpLT52YWx1ZSgmc3RhdGUpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKHRvSFRNTENh
bnZhc1N0eWxlKGV4ZWMsIHZhbHVlKSk7CisgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZSh0b0hU
TUxDYW52YXNTdHlsZSgmc3RhdGUsIHZhbHVlKSk7CiB9CiAKLUpTVmFsdWUgSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmZpbGxTdHlsZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVl
IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsU3R5bGUoRXhlY1N0YXRlJiBzdGF0ZSkg
Y29uc3QKIHsKLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgpLmZp
bGxTdHlsZSgpKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBpbXBs
KCkuZmlsbFN0eWxlKCkpOwogfQogCi12b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
ZXRGaWxsU3R5bGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbFN0eWxlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgdmFsdWUpCiB7CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEJiBjb250ZXh0ID0gaW1w
bCgpOwogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIGNvbnRleHQuc2V0Rmls
bENvbG9yKGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUoZXhlYykpOworICAgICAgICBjb250ZXh0LnNl
dEZpbGxDb2xvcihhc1N0cmluZyh2YWx1ZSktPnZhbHVlKCZzdGF0ZSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIGNvbnRleHQuc2V0RmlsbFN0eWxlKHRvSFRNTENhbnZhc1N0eWxlKGV4
ZWMsIHZhbHVlKSk7CisgICAgY29udGV4dC5zZXRGaWxsU3R5bGUodG9IVE1MQ2FudmFzU3R5bGUo
JnN0YXRlLCB2YWx1ZSkpOwogfQogCi1KU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Ojp3ZWJraXRMaW5lRGFzaChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjp3ZWJraXRMaW5lRGFzaChFeGVjU3RhdGUmIHN0YXRlKSBjb25z
dAogewogICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGRhc2ggPSBpbXBsKCkuZ2V0TGluZURhc2go
KTsKIApAQCAtOTcsMTAgKzk3LDEwIEBAIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OndlYmtpdExpbmVEYXNoKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICBWZWN0b3I8Zmxv
YXQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBkYXNoLmVuZCgpOwogICAgIGZvciAoVmVjdG9yPGZs
b2F0Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXNoLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
ICAgICAgICAgbGlzdC5hcHBlbmQoSlNWYWx1ZSgqaXQpKTsKLSAgICByZXR1cm4gY29uc3RydWN0
QXJyYXkoZXhlYywgMCwgZ2xvYmFsT2JqZWN0KCksIGxpc3QpOworICAgIHJldHVybiBjb25zdHJ1
Y3RBcnJheSgmc3RhdGUsIDAsIGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKIH0KIAotdm9pZCBKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0V2Via2l0TGluZURhc2goRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0V2Vi
a2l0TGluZURhc2goRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAo
IWlzSlNBcnJheSh2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwOCw3ICsxMDgsNyBAQCB2
b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRXZWJraXRMaW5lRGFzaChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdmFsdQogICAgIFZlY3RvcjxmbG9hdD4gZGFzaDsKICAgICBKU0Fy
cmF5KiB2YWx1ZUFycmF5ID0gYXNBcnJheSh2YWx1ZSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZhbHVlQXJyYXktPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgZmxvYXQgZWxlbSA9
IHZhbHVlQXJyYXktPmdldEluZGV4KGV4ZWMsIGkpLnRvRmxvYXQoZXhlYyk7CisgICAgICAgIGZs
b2F0IGVsZW0gPSB2YWx1ZUFycmF5LT5nZXRJbmRleCgmc3RhdGUsIGkpLnRvRmxvYXQoJnN0YXRl
KTsKICAgICAgICAgaWYgKGVsZW0gPD0gMCB8fCAhc3RkOjppc2Zpbml0ZShlbGVtKSkKICAgICAg
ICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDaGFyYWN0ZXJEYXRhQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q2hhcmFjdGVyRGF0YUN1c3RvbS5jcHAKaW5kZXggNzY0MzQ0ZGRjMTc3ZTczMTAyZGE5MjQ1MWIz
N2JkZjVlYTlhMTMyYy4uY2I4MzFkMDRjZmI4ZWY4NTY4NDc2YmQ4ZmRlM2Y4ZjgyZTlhN2M5MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDaGFyYWN0ZXJEYXRhQ3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NoYXJhY3RlckRhdGFD
dXN0b20uY3BwCkBAIC0zMywyOSArMzMsMjkgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTQ2hhcmFjdGVyRGF0YTo6YmVmb3JlKEV4ZWNT
dGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ2hhcmFjdGVyRGF0YTo6YmVmb3JlKEV4ZWNTdGF0ZSYg
c3RhdGUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wbCgpLmJlZm9yZSh0
b05vZGVPclN0cmluZ1ZlY3Rvcigqc3RhdGUpLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKHN0
YXRlLCBlYyk7CisgICAgaW1wbCgpLmJlZm9yZSh0b05vZGVPclN0cmluZ1ZlY3RvcihzdGF0ZSks
IGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0NoYXJhY3RlckRhdGE6OmFmdGVyKEV4ZWNTdGF0
ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ2hhcmFjdGVyRGF0YTo6YWZ0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCkuYWZ0ZXIodG9Ob2Rl
T3JTdHJpbmdWZWN0b3IoKnN0YXRlKSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwg
ZWMpOworICAgIGltcGwoKS5hZnRlcih0b05vZGVPclN0cmluZ1ZlY3RvcihzdGF0ZSksIGVjKTsK
KyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0NoYXJhY3RlckRhdGE6OnJlcGxhY2VXaXRoKEV4ZWNTdGF0
ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ2hhcmFjdGVyRGF0YTo6cmVwbGFjZVdpdGgoRXhlY1N0YXRl
JiBzdGF0ZSkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCkucmVwbGFj
ZVdpdGgodG9Ob2RlT3JTdHJpbmdWZWN0b3IoKnN0YXRlKSwgZWMpOwotICAgIHNldERPTUV4Y2Vw
dGlvbihzdGF0ZSwgZWMpOworICAgIGltcGwoKS5yZXBsYWNlV2l0aCh0b05vZGVPclN0cmluZ1Zl
Y3RvcihzdGF0ZSksIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9tLmNwcAppbmRleCA4ZDJkMDIw
NjRlNTdlYWE0NzgxODBiYjhlNDViZDMwMDRlOGYzMTdiLi5iMDY1ZDVjZmYxY2YxYjUwNjQ3NDU5
NjJiZGNkOGQ2MWRmNzY3ZjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NvbW1hbmRMaW5lQVBJSG9zdEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDb21tYW5kTGluZUFQSUhvc3RDdXN0b20uY3BwCkBAIC01NSwyMyArNTUsMjMg
QEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVl
IEpTQ29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0ZWRPYmplY3QoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NvbW1hbmRMaW5lQVBJSG9zdDo6aW5zcGVjdGVkT2JqZWN0KEV4ZWNTdGF0ZSYg
c3RhdGUpCiB7CiAgICAgQ29tbWFuZExpbmVBUElIb3N0OjpJbnNwZWN0YWJsZU9iamVjdCogb2Jq
ZWN0ID0gaW1wbCgpLmluc3BlY3RlZE9iamVjdCgpOwogICAgIGlmICghb2JqZWN0KQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwot
ICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHNjcmlwdFZhbHVlID0gb2JqZWN0LT5nZXQoZXhl
Yyk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soJnN0YXRlKTsKKyAgICBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSBzY3JpcHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSk7CiAgICAgaWYgKHNjcmlw
dFZhbHVlLmhhc05vVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAg
ICByZXR1cm4gc2NyaXB0VmFsdWUuanNWYWx1ZSgpOwogfQogCi1zdGF0aWMgSlNBcnJheSogZ2V0
SlNMaXN0ZW5lckZ1bmN0aW9ucyhFeGVjU3RhdGUqIGV4ZWMsIERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgRXZlbnRMaXN0ZW5lckluZm8mIGxpc3RlbmVySW5mbykKK3N0YXRpYyBKU0FycmF5KiBn
ZXRKU0xpc3RlbmVyRnVuY3Rpb25zKEV4ZWNTdGF0ZSYgc3RhdGUsIERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgRXZlbnRMaXN0ZW5lckluZm8mIGxpc3RlbmVySW5mbykKIHsKLSAgICBKU0FycmF5
KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpOworICAgIEpTQXJy
YXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoJnN0YXRlLCBudWxscHRyKTsKICAgICBz
aXplX3QgaGFuZGxlcnNDb3VudCA9IGxpc3RlbmVySW5mby5ldmVudExpc3RlbmVyVmVjdG9yLnNp
emUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMCwgb3V0cHV0SW5kZXggPSAwOyBpIDwgaGFuZGxl
cnNDb3VudDsgKytpKSB7CiAgICAgICAgIGNvbnN0IEpTRXZlbnRMaXN0ZW5lcioganNMaXN0ZW5l
ciA9IEpTRXZlbnRMaXN0ZW5lcjo6Y2FzdChsaXN0ZW5lckluZm8uZXZlbnRMaXN0ZW5lclZlY3Rv
cltpXS5saXN0ZW5lci5nZXQoKSk7CkBAIC04MSwyNyArODEsMjcgQEAgc3RhdGljIEpTQXJyYXkq
IGdldEpTTGlzdGVuZXJGdW5jdGlvbnMoRXhlY1N0YXRlKiBleGVjLCBEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnMKICAgICAgICAgfQogCiAgICAgICAgIC8vIEhpZGUgbGlzdGVuZXJzIGZyb20gb3Ro
ZXIgY29udGV4dHMuCi0gICAgICAgIGlmICgmanNMaXN0ZW5lci0+aXNvbGF0ZWRXb3JsZCgpICE9
ICZjdXJyZW50V29ybGQoZXhlYykpCisgICAgICAgIGlmICgmanNMaXN0ZW5lci0+aXNvbGF0ZWRX
b3JsZCgpICE9ICZjdXJyZW50V29ybGQoJnN0YXRlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
CiAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzTGlzdGVuZXItPmpzRnVuY3Rpb24oZG9j
dW1lbnQpOwogICAgICAgICBpZiAoIWZ1bmN0aW9uKQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgSlNPYmplY3QqIGxpc3RlbmVyRW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChl
eGVjKTsKLSAgICAgICAgbGlzdGVuZXJFbnRyeS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImxpc3RlbmVyIiksIGZ1bmN0aW9uKTsKLSAgICAgICAg
bGlzdGVuZXJFbnRyeS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgInVzZUNhcHR1cmUiKSwganNCb29sZWFuKGxpc3RlbmVySW5mby5ldmVudExpc3Rl
bmVyVmVjdG9yW2ldLnVzZUNhcHR1cmUpKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRl
eChleGVjLCBvdXRwdXRJbmRleCsrLCBKU1ZhbHVlKGxpc3RlbmVyRW50cnkpKTsKKyAgICAgICAg
SlNPYmplY3QqIGxpc3RlbmVyRW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwor
ICAgICAgICBsaXN0ZW5lckVudHJ5LT5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUsICJsaXN0ZW5lciIpLCBmdW5jdGlvbik7CisgICAgICAgIGxpc3Rl
bmVyRW50cnktPnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZSwgInVzZUNhcHR1cmUiKSwganNCb29sZWFuKGxpc3RlbmVySW5mby5ldmVudExpc3RlbmVy
VmVjdG9yW2ldLnVzZUNhcHR1cmUpKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleCgm
c3RhdGUsIG91dHB1dEluZGV4KyssIEpTVmFsdWUobGlzdGVuZXJFbnRyeSkpOwogICAgIH0KICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlIEpTQ29tbWFuZExpbmVBUElIb3N0OjpnZXRF
dmVudExpc3RlbmVycyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ29tbWFuZExpbmVBUElI
b3N0OjpnZXRFdmVudExpc3RlbmVycyhFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPCAxKQorICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPCAx
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIEpTVmFsdWUgdmFsdWUgPSBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gc3RhdGUudW5j
aGVja2VkQXJndW1lbnQoMCk7CiAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpIHx8IHZhbHVlLmlz
TnVsbCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIApAQCAtMTEyLDQ5ICsxMTIs
NDkgQEAgSlNWYWx1ZSBKU0NvbW1hbmRMaW5lQVBJSG9zdDo6Z2V0RXZlbnRMaXN0ZW5lcnMoRXhl
Y1N0YXRlKiBleGVjKQogICAgIFZlY3RvcjxFdmVudExpc3RlbmVySW5mbz4gbGlzdGVuZXJzQXJy
YXk7CiAgICAgaW1wbCgpLmdldEV2ZW50TGlzdGVuZXJzSW1wbChub2RlLCBsaXN0ZW5lcnNBcnJh
eSk7CiAKLSAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7
CisgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0ZW5lcnNBcnJheS5zaXplKCk7ICsraSkgewot
ICAgICAgICBKU0FycmF5KiBsaXN0ZW5lcnMgPSBnZXRKU0xpc3RlbmVyRnVuY3Rpb25zKGV4ZWMs
ICZub2RlLT5kb2N1bWVudCgpLCBsaXN0ZW5lcnNBcnJheVtpXSk7CisgICAgICAgIEpTQXJyYXkq
IGxpc3RlbmVycyA9IGdldEpTTGlzdGVuZXJGdW5jdGlvbnMoc3RhdGUsICZub2RlLT5kb2N1bWVu
dCgpLCBsaXN0ZW5lcnNBcnJheVtpXSk7CiAgICAgICAgIGlmICghbGlzdGVuZXJzLT5sZW5ndGgo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBBdG9taWNTdHJpbmcgZXZlbnRUeXBl
ID0gbGlzdGVuZXJzQXJyYXlbaV0uZXZlbnRUeXBlOwotICAgICAgICByZXN1bHQtPnB1dERpcmVj
dChleGVjLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIGV2ZW50VHlwZS5pbXBs
KCkpLCBKU1ZhbHVlKGxpc3RlbmVycykpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdChzdGF0
ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgZXZlbnRUeXBlLmltcGwoKSks
IEpTVmFsdWUobGlzdGVuZXJzKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
SlNWYWx1ZSBKU0NvbW1hbmRMaW5lQVBJSG9zdDo6aW5zcGVjdChFeGVjU3RhdGUqIGV4ZWMpCitK
U1ZhbHVlIEpTQ29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7
Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7Ci0gICAgICAgIERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlIG9iamVjdChleGVjLT52bSgpLCBleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7Ci0gICAgICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGhpbnRzKGV4ZWMtPnZtKCks
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKLSAgICAgICAgaW1wbCgpLmluc3BlY3RJbXBs
KG9iamVjdC50b0luc3BlY3RvclZhbHVlKGV4ZWMpLCBoaW50cy50b0luc3BlY3RvclZhbHVlKGV4
ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID49IDIpIHsKKyAgICAgICAgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUgb2JqZWN0KHN0YXRlLnZtKCksIHN0YXRlLnVuY2hlY2tlZEFy
Z3VtZW50KDApKTsKKyAgICAgICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgaGludHMoc3RhdGUu
dm0oKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgICAgICBpbXBsKCkuaW5zcGVj
dEltcGwob2JqZWN0LnRvSW5zcGVjdG9yVmFsdWUoJnN0YXRlKSwgaGludHMudG9JbnNwZWN0b3JW
YWx1ZSgmc3RhdGUpKTsKICAgICB9CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAot
SlNWYWx1ZSBKU0NvbW1hbmRMaW5lQVBJSG9zdDo6ZGF0YWJhc2VJZChFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTQ29tbWFuZExpbmVBUElIb3N0OjpkYXRhYmFzZUlkKEV4ZWNTdGF0ZSYgc3Rh
dGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgaWYgKHN0YXRl
LmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0g
ICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gSlNEYXRhYmFzZTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApKTsKKyAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSBKU0RhdGFiYXNlOjp0
b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmIChkYXRhYmFzZSkK
LSAgICAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGltcGwoKS5kYXRhYmFzZUlk
SW1wbChkYXRhYmFzZSkpOworICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRl
LCBpbXBsKCkuZGF0YWJhc2VJZEltcGwoZGF0YWJhc2UpKTsKIAogICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTQ29tbWFuZExpbmVBUElIb3N0OjpzdG9yYWdlSWQoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NvbW1hbmRMaW5lQVBJSG9zdDo6c3RvcmFnZUlkKEV4
ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisg
ICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogCi0gICAgU3RvcmFnZSogc3RvcmFnZSA9IEpTU3RvcmFnZTo6dG9XcmFwcGVkKGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBTdG9yYWdlKiBzdG9yYWdlID0gSlNTdG9y
YWdlOjp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmIChzdG9y
YWdlKQotICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgaW1wbCgpLnN0b3Jh
Z2VJZEltcGwoc3RvcmFnZSkpOworICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoJnN0
YXRlLCBpbXBsKCkuc3RvcmFnZUlkSW1wbChzdG9yYWdlKSk7CiAKICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5
cHRvQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQ3VzdG9t
LmNwcAppbmRleCAxNThiMzU2Y2QxZjEwOTk3NWUxOTZhZWY2ZGZiNmE5ZGRjM2JkYjc0Li5kMDdi
ZWFjYTE1YTU0NzJiNDY5MGFhYzQ1YzFhZDc1NGNmNWQ5YTM5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDcnlwdG9DdXN0b20uY3BwCkBAIC0zNSwyMSArMzUsMjEgQEAgdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTQ3J5
cHRvOjpnZXRSYW5kb21WYWx1ZXMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NyeXB0bzo6
Z2V0UmFuZG9tVmFsdWVzKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9u
KGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3Rh
dGUuYXJndW1lbnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dF
eGNlcHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsK
IAotICAgIEpTVmFsdWUgYnVmZmVyID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgSlNWYWx1ZSBi
dWZmZXIgPSBzdGF0ZS5hcmd1bWVudCgwKTsKICAgICBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBh
cnJheUJ1ZmZlclZpZXcgPSB0b0FycmF5QnVmZmVyVmlldyhidWZmZXIpOwogICAgIGlmICghYXJy
YXlCdWZmZXJWaWV3KQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAg
ICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CiAgICAgaW1wbCgpLmdldFJhbmRvbVZhbHVlcyhhcnJheUJ1ZmZlclZpZXcuZ2V0KCks
IGVjKTsKIAogICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDcnlwdG9LZXlDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDcnlwdG9LZXlDdXN0b20uY3BwCmluZGV4IGIyNGFlMGNjMGUxMjY0ZmRhMzc4NzFmMGJmZDcx
M2YwODJlMTY4YmUuLmFkODFlNGQ0NWIxZTYxZWFlMTg3MGFhZWM3M2RlM2FlNWRiYzg5ZjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5Q3VzdG9tLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleUN1c3RvbS5jcHAK
QEAgLTM1LDkgKzM1LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1KU1ZhbHVlIEpTQ3J5cHRvS2V5OjphbGdvcml0aG0oSlNDOjpFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0CitKU1ZhbHVlIEpTQ3J5cHRvS2V5OjphbGdvcml0aG0oSlNDOjpFeGVjU3RhdGUm
IHN0YXRlKSBjb25zdAogewotICAgIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlciBidWlsZGVyKGV4
ZWMpOworICAgIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlciBidWlsZGVyKCZzdGF0ZSk7CiAgICAg
aW1wbCgpLmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oYnVpbGRlcik7CiAgICAgcmV0dXJuIGJ1
aWxkZXIucmVzdWx0KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUZvcm1EYXRhQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NRm9ybURhdGFDdXN0b20uY3BwCmluZGV4IDdlYzI0OTVkZGViZmM0YTM1MjZhZDZjM2YzOGUy
NDQ5NmI0YWNiMGEuLjEzZmRiNTJkNmMyNTMxOWMxOTM4YTc0MjkyMjQyMjA2YWNmZWM2NzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRm9ybURhdGFDdXN0b20u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRm9ybURhdGFDdXN0b20u
Y3BwCkBAIC01NSwxOCArNTUsMTggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
dHJ1Y3RKU0RPTUZvcm1EYXRhKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGFzT2JqZWN0KHRvSlMoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCks
IGRvbUZvcm1EYXRhLmdldCgpKSkpOwogfQogCi1KU1ZhbHVlIEpTRE9NRm9ybURhdGE6OmFwcGVu
ZChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTRE9NRm9ybURhdGE6OmFwcGVuZChFeGVjU3Rh
dGUmIHN0YXRlKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgewotICAg
ICAgICBTdHJpbmcgbmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpOworICAg
IGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPj0gMikgeworICAgICAgICBTdHJpbmcgbmFtZSA9
IHN0YXRlLmFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBzdGF0ZS5hcmd1bWVudCgxKTsKICAgICAgICAgaWYgKHZhbHVl
LmluaGVyaXRzKEpTQmxvYjo6aW5mbygpKSkgewogICAgICAgICAgICAgU3RyaW5nIGZpbGVuYW1l
OwotICAgICAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAzICYmICFleGVjLT5h
cmd1bWVudCgyKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgICAgIGZpbGVuYW1l
ID0gZXhlYy0+YXJndW1lbnQoMikudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgICAg
ICAgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+PSAzICYmICFzdGF0ZS5hcmd1bWVudCgy
KS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gc3RhdGUu
YXJndW1lbnQoMikudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKICAgICAgICAgICAg
IGltcGwoKS5hcHBlbmQobmFtZSwgSlNCbG9iOjp0b1dyYXBwZWQodmFsdWUpLCBmaWxlbmFtZSk7
CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaW1wbCgpLmFwcGVuZChuYW1lLCB2YWx1ZS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAgICAgICAgICAgaW1wbCgpLmFwcGVuZChu
YW1lLCB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpKTsKICAgICB9CiAKICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NVG9rZW5MaXN0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NVG9rZW5MaXN0Q3VzdG9tLmNwcAppbmRleCAwYTE5ZmM2ZDc4YWJiZmUyZGRjNWNk
NGYyMmRiOTNiZDIzNzgyMWRhLi5iZGQ0ODc3ODQ5ZWNhN2NjYzkxYmI2ZGE1YmM0M2QxNjYyOGRk
ZGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVRva2VuTGlz
dEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Ub2tlbkxp
c3RDdXN0b20uY3BwCkBAIC0zNCwyMyArMzQsMjMgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTRE9NVG9rZW5MaXN0Ojp0b2dnbGUoRXhl
Y1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNET01Ub2tlbkxpc3Q6OnRvZ2dsZShFeGVjU3RhdGUm
IHN0YXRlKQogewotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
Ci0gICAgICAgIHJldHVybiBzdGF0ZS0+dm0oKS50aHJvd0V4Y2VwdGlvbihzdGF0ZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUu
YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiBzdGF0ZS52bSgpLnRocm93RXhj
ZXB0aW9uKCZzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBTdHJpbmcgdG9rZW4gPSBzdGF0ZS0+YXJn
dW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgU3RyaW5nIHRva2VuID0gc3RhdGUuYXJndW1l
bnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFko
c3RhdGUuaGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAog
ICAgIC8vIHRvZ2dsZSgpIG5lZWRzIHRvIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2ggdW5kZWZpbmVk
L21pc3NpbmcgZnJvbSB0aGUgZmFsc2UgdmFsdWUgZm9yIHRoZSAnZm9yY2UnIHBhcmFtZXRlci4K
LSAgICBPcHRpb25hbDxib29sPiBmb3JjZSA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5l
ZCgpID8gTnVsbG9wdCA6IE9wdGlvbmFsPGJvb2w+KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgx
KS50b0Jvb2xlYW4oc3RhdGUpKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBPcHRpb25hbDxib29sPiBmb3JjZSA9IHN0YXRlLmFyZ3VtZW50KDEpLmlzVW5k
ZWZpbmVkKCkgPyBOdWxsb3B0IDogT3B0aW9uYWw8Ym9vbD4oc3RhdGUudW5jaGVja2VkQXJndW1l
bnQoMSkudG9Cb29sZWFuKCZzdGF0ZSkpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIEpTVmFsdWUgcmVz
dWx0ID0ganNCb29sZWFuKGltcGwoKS50b2dnbGUodG9rZW4sIGZvcmNlLCBlYykpOwogCi0gICAg
c2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwg
ZWMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAppbmRleCA0OGE4NmM0OGRlODdjOGI1ZmI5ODM2
NTMwMmJiZWE2MTA4YmQyMjY2Li4yNTdhOTU4NjM5ZWRlNzdjMGJhMmExYTE2ZjQ4ZWE3OTM1MDlk
ZGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1
c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0
b20uY3BwCkBAIC00NjksNzYgKzQ2OSw3NiBAQCBib29sIEpTRE9NV2luZG93OjpkZWZpbmVPd25Q
cm9wZXJ0eShKU0M6OkpTT2JqZWN0KiBvYmplY3QsIEpTQzo6RXhlY1N0YXRlKiBleGVjLAogCiAv
LyBDdXN0b20gQXR0cmlidXRlcwogCi12b2lkIEpTRE9NV2luZG93OjpzZXRMb2NhdGlvbihFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit2b2lkIEpTRE9NV2luZG93OjpzZXRMb2NhdGlv
bihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogI2lmIEVOQUJMRShEQVNIQk9B
UkRfU1VQUE9SVCkKICAgICAvLyBUbyBhdm9pZCBicmVha2luZyBvbGQgd2lkZ2V0cywgbWFrZSAi
dmFyIGxvY2F0aW9uID0iIGluIGEgdG9wLWxldmVsIGZyYW1lIGNyZWF0ZQogICAgIC8vIGEgcHJv
cGVydHkgbmFtZWQgImxvY2F0aW9uIiBpbnN0ZWFkIG9mIHBlcmZvcm1pbmcgYSBuYXZpZ2F0aW9u
ICg8cmRhcjovL3Byb2JsZW0vNTY4ODAzOT4pLgotICAgIGlmIChGcmFtZSogYWN0aXZlRnJhbWUg
PSBhY3RpdmVET01XaW5kb3coZXhlYykuZnJhbWUoKSkgeworICAgIGlmIChGcmFtZSogYWN0aXZl
RnJhbWUgPSBhY3RpdmVET01XaW5kb3coJnN0YXRlKS5mcmFtZSgpKSB7CiAgICAgICAgIGlmIChh
Y3RpdmVGcmFtZS0+c2V0dGluZ3MoKS51c2VzRGFzaGJvYXJkQmFja3dhcmRDb21wYXRpYmlsaXR5
TW9kZSgpICYmICFhY3RpdmVGcmFtZS0+dHJlZSgpLnBhcmVudCgpKSB7Ci0gICAgICAgICAgICBp
ZiAoQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGV4ZWMsIGlt
cGwoKSkpCi0gICAgICAgICAgICAgICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoZXhlYywgImxvY2F0aW9uIiksIHZhbHVlKTsKKyAgICAgICAgICAgIGlmIChC
aW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coJnN0YXRlLCBpbXBs
KCkpKQorICAgICAgICAgICAgICAgIHB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgImxvY2F0aW9uIiksIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgogCi0gICAgU3RyaW5nIGxvY2F0aW9uU3RyaW5n
ID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBTdHJpbmcgbG9jYXRpb25TdHJpbmcgPSB2YWx1ZS50b1N0cmluZygm
c3RhdGUpLT52YWx1ZSgmc3RhdGUpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKExvY2F0aW9uKiBsb2NhdGlvbiA9IGltcGwoKS5sb2Nh
dGlvbigpKQotICAgICAgICBsb2NhdGlvbi0+c2V0SHJlZihhY3RpdmVET01XaW5kb3coZXhlYyks
IGZpcnN0RE9NV2luZG93KGV4ZWMpLCBsb2NhdGlvblN0cmluZyk7CisgICAgICAgIGxvY2F0aW9u
LT5zZXRIcmVmKGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpLCBmaXJzdERPTVdpbmRvdygmc3RhdGUp
LCBsb2NhdGlvblN0cmluZyk7CiB9CiAKLUpTVmFsdWUgSlNET01XaW5kb3c6OmV2ZW50KEV4ZWNT
dGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgSlNET01XaW5kb3c6OmV2ZW50KEV4ZWNTdGF0ZSYg
c3RhdGUpIGNvbnN0CiB7CiAgICAgRXZlbnQqIGV2ZW50ID0gY3VycmVudEV2ZW50KCk7CiAgICAg
aWYgKCFldmVudCkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJuIHRv
SlMoZXhlYywgY29uc3RfY2FzdDxKU0RPTVdpbmRvdyo+KHRoaXMpLCBldmVudCk7CisgICAgcmV0
dXJuIHRvSlMoJnN0YXRlLCBjb25zdF9jYXN0PEpTRE9NV2luZG93Kj4odGhpcyksIGV2ZW50KTsK
IH0KIAotSlNWYWx1ZSBKU0RPTVdpbmRvdzo6aW1hZ2UoRXhlY1N0YXRlKiBleGVjKSBjb25zdAor
SlNWYWx1ZSBKU0RPTVdpbmRvdzo6aW1hZ2UoRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKLSAg
ICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNJbWFnZUNvbnN0cnVjdG9yPihleGVjLT52bSgp
LCB0aGlzKTsKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNJbWFnZUNvbnN0cnVjdG9y
PihzdGF0ZS52bSgpLCB0aGlzKTsKIH0KIAogI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQot
SlNWYWx1ZSBKU0RPTVdpbmRvdzo6dG91Y2goRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1
ZSBKU0RPTVdpbmRvdzo6dG91Y2goRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKLSAgICByZXR1
cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUb3VjaENvbnN0cnVjdG9yPihleGVjLT52bSgpLCB0aGlz
KTsKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUb3VjaENvbnN0cnVjdG9yPihzdGF0
ZS52bSgpLCB0aGlzKTsKIH0KIAotSlNWYWx1ZSBKU0RPTVdpbmRvdzo6dG91Y2hMaXN0KEV4ZWNT
dGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgSlNET01XaW5kb3c6OnRvdWNoTGlzdChFeGVjU3Rh
dGUmIHN0YXRlKSBjb25zdAogewotICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1RvdWNo
TGlzdENvbnN0cnVjdG9yPihleGVjLT52bSgpLCB0aGlzKTsKKyAgICByZXR1cm4gZ2V0RE9NQ29u
c3RydWN0b3I8SlNUb3VjaExpc3RDb25zdHJ1Y3Rvcj4oc3RhdGUudm0oKSwgdGhpcyk7CiB9CiAj
ZW5kaWYKIAogLy8gQ3VzdG9tIGZ1bmN0aW9ucwogCi1KU1ZhbHVlIEpTRE9NV2luZG93OjpvcGVu
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNET01XaW5kb3c6Om9wZW4oRXhlY1N0YXRlJiBz
dGF0ZSkKIHsKLSAgICBTdHJpbmcgdXJsU3RyaW5nID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmlu
ZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIFN0cmluZyB1cmxTdHJpbmcgPSB2YWx1ZVRvU3RyaW5nV2l0aFVu
ZGVmaW5lZE9yTnVsbENoZWNrKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCkpOworICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAg
QXRvbWljU3RyaW5nIGZyYW1lTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JO
dWxsKCkgPyAiX2JsYW5rIiA6IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgQXRvbWljU3RyaW5n
IGZyYW1lTmFtZSA9IHN0YXRlLmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkgPyAiX2Js
YW5rIiA6IHN0YXRlLmFyZ3VtZW50KDEpLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7
CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLSAgICBTdHJpbmcgd2luZG93RmVhdHVyZXNTdHJpbmcgPSB2YWx1ZVRvU3RyaW5nV2l0
aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgU3RyaW5nIHdpbmRvd0ZlYXR1cmVzU3RyaW5nID0g
dmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygmc3RhdGUsIHN0YXRlLmFyZ3Vt
ZW50KDIpKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCi0gICAgUmVmUHRyPERPTVdpbmRvdz4gb3BlbmVkV2luZG93ID0gaW1w
bCgpLm9wZW4odXJsU3RyaW5nLCBmcmFtZU5hbWUsIHdpbmRvd0ZlYXR1cmVzU3RyaW5nLCBhY3Rp
dmVET01XaW5kb3coZXhlYyksIGZpcnN0RE9NV2luZG93KGV4ZWMpKTsKKyAgICBSZWZQdHI8RE9N
V2luZG93PiBvcGVuZWRXaW5kb3cgPSBpbXBsKCkub3Blbih1cmxTdHJpbmcsIGZyYW1lTmFtZSwg
d2luZG93RmVhdHVyZXNTdHJpbmcsIGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpLCBmaXJzdERPTVdp
bmRvdygmc3RhdGUpKTsKICAgICBpZiAoIW9wZW5lZFdpbmRvdykKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgb3BlbmVkV2luZG93LmdldCgpKTsK
KyAgICByZXR1cm4gdG9KUygmc3RhdGUsIG9wZW5lZFdpbmRvdy5nZXQoKSk7CiB9CiAKIGNsYXNz
IERpYWxvZ0hhbmRsZXIgewogcHVibGljOgotICAgIGV4cGxpY2l0IERpYWxvZ0hhbmRsZXIoRXhl
Y1N0YXRlKiBleGVjKQorICAgIGV4cGxpY2l0IERpYWxvZ0hhbmRsZXIoRXhlY1N0YXRlJiBleGVj
KQogICAgICAgICA6IG1fZXhlYyhleGVjKQogICAgIHsKICAgICB9CkBAIC01NDcsNyArNTQ3LDcg
QEAgcHVibGljOgogICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUoKSBjb25zdDsKIAogcHJpdmF0ZToK
LSAgICBFeGVjU3RhdGUqIG1fZXhlYzsKKyAgICBFeGVjU3RhdGUmIG1fZXhlYzsKICAgICBSZWZQ
dHI8RnJhbWU+IG1fZnJhbWU7CiB9OwogCkBAIC01NTcsNDIgKzU1Nyw0MiBAQCBpbmxpbmUgdm9p
ZCBEaWFsb2dIYW5kbGVyOjpkaWFsb2dDcmVhdGVkKERPTVdpbmRvdyYgZGlhbG9nKQogICAgIAog
ICAgIC8vIEZJWE1FOiBUaGlzIGxvb2tzIGxpa2UgYSBsZWFrIGJldHdlZW4gdGhlIG5vcm1hbCB3
b3JsZCBhbmQgYW4gaXNvbGF0ZWQKICAgICAvLyAgICAgICAgd29ybGQgaWYgZGlhbG9nQXJndW1l
bnRzIGNvbWVzIGZyb20gYW4gaXNvbGF0ZWQgd29ybGQuCi0gICAgSlNET01XaW5kb3cqIGdsb2Jh
bE9iamVjdCA9IHRvSlNET01XaW5kb3cobV9mcmFtZS5nZXQoKSwgbm9ybWFsV29ybGQobV9leGVj
LT52bSgpKSk7Ci0gICAgaWYgKEpTVmFsdWUgZGlhbG9nQXJndW1lbnRzID0gbV9leGVjLT5hcmd1
bWVudCgxKSkKLSAgICAgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3QobV9leGVjLT52bSgpLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKG1fZXhlYywgImRpYWxvZ0FyZ3VtZW50cyIpLCBkaWFsb2dB
cmd1bWVudHMpOworICAgIEpTRE9NV2luZG93KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NV2luZG93
KG1fZnJhbWUuZ2V0KCksIG5vcm1hbFdvcmxkKG1fZXhlYy52bSgpKSk7CisgICAgaWYgKEpTVmFs
dWUgZGlhbG9nQXJndW1lbnRzID0gbV9leGVjLmFyZ3VtZW50KDEpKQorICAgICAgICBnbG9iYWxP
YmplY3QtPnB1dERpcmVjdChtX2V4ZWMudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmbV9l
eGVjLCAiZGlhbG9nQXJndW1lbnRzIiksIGRpYWxvZ0FyZ3VtZW50cyk7CiB9CiAKIGlubGluZSBK
U1ZhbHVlIERpYWxvZ0hhbmRsZXI6OnJldHVyblZhbHVlKCkgY29uc3QKIHsKLSAgICBKU0RPTVdp
bmRvdyogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTVdpbmRvdyhtX2ZyYW1lLmdldCgpLCBub3JtYWxX
b3JsZChtX2V4ZWMtPnZtKCkpKTsKKyAgICBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqZWN0ID0gdG9K
U0RPTVdpbmRvdyhtX2ZyYW1lLmdldCgpLCBub3JtYWxXb3JsZChtX2V4ZWMudm0oKSkpOwogICAg
IGlmICghZ2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBJ
ZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKG1fZXhlYywgInJl
dHVyblZhbHVlIik7CisgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmbV9leGVjLCAicmV0dXJuVmFsdWUiKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChn
bG9iYWxPYmplY3QpOwotICAgIGlmICghSlNHbG9iYWxPYmplY3Q6OmdldE93blByb3BlcnR5U2xv
dChnbG9iYWxPYmplY3QsIG1fZXhlYywgaWRlbnRpZmllciwgc2xvdCkpCisgICAgaWYgKCFKU0ds
b2JhbE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KGdsb2JhbE9iamVjdCwgJm1fZXhlYywgaWRl
bnRpZmllciwgc2xvdCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHJldHVy
biBzbG90LmdldFZhbHVlKG1fZXhlYywgaWRlbnRpZmllcik7CisgICAgcmV0dXJuIHNsb3QuZ2V0
VmFsdWUoJm1fZXhlYywgaWRlbnRpZmllcik7CiB9CiAKLUpTVmFsdWUgSlNET01XaW5kb3c6OnNo
b3dNb2RhbERpYWxvZyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTRE9NV2luZG93OjpzaG93
TW9kYWxEaWFsb2coRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBTdHJpbmcgdXJsU3RyaW5nID0g
dmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVu
dCgwKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIFN0cmluZyB1cmxTdHJp
bmcgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKCZzdGF0ZSwgc3RhdGUu
YXJndW1lbnQoMCkpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgU3RyaW5nIGRpYWxvZ0ZlYXR1cmVzU3RyaW5nID0gdmFs
dWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgy
KSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIFN0cmluZyBkaWFsb2dGZWF0
dXJlc1N0cmluZyA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRl
LCBzdGF0ZS5hcmd1bWVudCgyKSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIERpYWxvZ0hhbmRsZXIgaGFuZGxlcihl
eGVjKTsKKyAgICBEaWFsb2dIYW5kbGVyIGhhbmRsZXIoc3RhdGUpOwogCi0gICAgaW1wbCgpLnNo
b3dNb2RhbERpYWxvZyh1cmxTdHJpbmcsIGRpYWxvZ0ZlYXR1cmVzU3RyaW5nLCBhY3RpdmVET01X
aW5kb3coZXhlYyksIGZpcnN0RE9NV2luZG93KGV4ZWMpLCBbJmhhbmRsZXJdKERPTVdpbmRvdyYg
ZGlhbG9nKSB7CisgICAgaW1wbCgpLnNob3dNb2RhbERpYWxvZyh1cmxTdHJpbmcsIGRpYWxvZ0Zl
YXR1cmVzU3RyaW5nLCBhY3RpdmVET01XaW5kb3coJnN0YXRlKSwgZmlyc3RET01XaW5kb3coJnN0
YXRlKSwgWyZoYW5kbGVyXShET01XaW5kb3cmIGRpYWxvZykgewogICAgICAgICBoYW5kbGVyLmRp
YWxvZ0NyZWF0ZWQoZGlhbG9nKTsKICAgICB9KTsKIAogICAgIHJldHVybiBoYW5kbGVyLnJldHVy
blZhbHVlKCk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlIGhhbmRsZVBvc3RNZXNzYWdlKERPTVdpbmRv
dyogaW1wbCwgRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTVmFsdWUgaGFuZGxlUG9zdE1lc3Nh
Z2UoRE9NV2luZG93JiBpbXBsLCBFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIE1lc3NhZ2VQb3J0
QXJyYXkgbWVzc2FnZVBvcnRzOwogICAgIEFycmF5QnVmZmVyQXJyYXkgYXJyYXlCdWZmZXJzOwpA
QCAtNjA0LDEwMiArNjA0LDEwMiBAQCBzdGF0aWMgSlNWYWx1ZSBoYW5kbGVQb3N0TWVzc2FnZShE
T01XaW5kb3cqIGltcGwsIEV4ZWNTdGF0ZSogZXhlYykKICAgICAvLyBMZWdhY3kgbm9uLXN0YW5k
YXJkIGltcGxlbWVudGF0aW9ucyBpbiB3ZWJraXQgYWxsb3dlZDoKICAgICAvLyAgIHBvc3RNZXNz
YWdlKG1lc3NhZ2UsIHtzZXF1ZW5jZSBvZiB0cmFuc2ZlcnJhYmxlc30sIHRhcmdldE9yaWdpbik7
CiAgICAgaW50IHRhcmdldE9yaWdpbkFyZ0luZGV4ID0gMTsKLSAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpID4gMikgeworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPiAyKSB7CiAg
ICAgICAgIGludCB0cmFuc2ZlcmFibGVzQXJnSW5kZXggPSAyOwotICAgICAgICBpZiAoZXhlYy0+
YXJndW1lbnQoMikuaXNTdHJpbmcoKSkgeworICAgICAgICBpZiAoc3RhdGUuYXJndW1lbnQoMiku
aXNTdHJpbmcoKSkgewogICAgICAgICAgICAgdGFyZ2V0T3JpZ2luQXJnSW5kZXggPSAyOwogICAg
ICAgICAgICAgdHJhbnNmZXJhYmxlc0FyZ0luZGV4ID0gMTsKICAgICAgICAgfQotICAgICAgICBm
aWxsTWVzc2FnZVBvcnRBcnJheShleGVjLCBleGVjLT5hcmd1bWVudCh0cmFuc2ZlcmFibGVzQXJn
SW5kZXgpLCBtZXNzYWdlUG9ydHMsIGFycmF5QnVmZmVycyk7CisgICAgICAgIGZpbGxNZXNzYWdl
UG9ydEFycmF5KHN0YXRlLCBzdGF0ZS5hcmd1bWVudCh0cmFuc2ZlcmFibGVzQXJnSW5kZXgpLCBt
ZXNzYWdlUG9ydHMsIGFycmF5QnVmZmVycyk7CiAgICAgfQotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCi0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2Fn
ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDAp
LAorICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3NhZ2UgPSBTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OmNyZWF0ZSgmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDApLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZtZXNzYWdlUG9ydHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFycmF5QnVmZmVycyk7CiAK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIFN0cmluZyB0YXJnZXRP
cmlnaW4gPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMt
PmFyZ3VtZW50KHRhcmdldE9yaWdpbkFyZ0luZGV4KSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIFN0cmluZyB0YXJnZXRPcmlnaW4gPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVm
aW5lZE9yTnVsbENoZWNrKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQodGFyZ2V0T3JpZ2luQXJnSW5k
ZXgpKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wbC0+cG9zdE1l
c3NhZ2UobWVzc2FnZS5yZWxlYXNlKCksICZtZXNzYWdlUG9ydHMsIHRhcmdldE9yaWdpbiwgYWN0
aXZlRE9NV2luZG93KGV4ZWMpLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
KyAgICBpbXBsLnBvc3RNZXNzYWdlKG1lc3NhZ2UucmVsZWFzZSgpLCAmbWVzc2FnZVBvcnRzLCB0
YXJnZXRPcmlnaW4sIGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpLCBlYyk7CisgICAgc2V0RE9NRXhj
ZXB0aW9uKCZzdGF0ZSwgZWMpOwogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpT
VmFsdWUgSlNET01XaW5kb3c6OnBvc3RNZXNzYWdlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUg
SlNET01XaW5kb3c6OnBvc3RNZXNzYWdlKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJu
IGhhbmRsZVBvc3RNZXNzYWdlKCZpbXBsKCksIGV4ZWMpOworICAgIHJldHVybiBoYW5kbGVQb3N0
TWVzc2FnZShpbXBsKCksIHN0YXRlKTsKIH0KIAotSlNWYWx1ZSBKU0RPTVdpbmRvdzo6c2V0VGlt
ZW91dChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTRE9NV2luZG93OjpzZXRUaW1lb3V0KEV4
ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgQ29udGVudFNlY3VyaXR5UG9saWN5KiBjb250ZW50U2Vj
dXJpdHlQb2xpY3kgPSBpbXBsKCkuZG9jdW1lbnQoKSA/IGltcGwoKS5kb2N1bWVudCgpLT5jb250
ZW50U2VjdXJpdHlQb2xpY3koKSA6IDA7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFNjaGVkdWxlZEFj
dGlvbj4gYWN0aW9uID0gU2NoZWR1bGVkQWN0aW9uOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0
KCktPndvcmxkKCksIGNvbnRlbnRTZWN1cml0eVBvbGljeSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIENvbnRlbnRTZWN1cml0eVBvbGljeSogY29udGVudFNlY3VyaXR5UG9s
aWN5ID0gaW1wbCgpLmRvY3VtZW50KCkgPyBpbXBsKCkuZG9jdW1lbnQoKS0+Y29udGVudFNlY3Vy
aXR5UG9saWN5KCkgOiBudWxscHRyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rp
b24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0
KCktPndvcmxkKCksIGNvbnRlbnRTZWN1cml0eVBvbGljeSk7CisgICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGlmICghYWN0
aW9uKQogICAgICAgICByZXR1cm4ganNOdW1iZXIoMCk7CiAKLSAgICBpbnQgZGVsYXkgPSBleGVj
LT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOworICAgIGludCBkZWxheSA9IHN0YXRlLmFyZ3Vt
ZW50KDEpLnRvSW50MzIoJnN0YXRlKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAg
IGludCByZXN1bHQgPSBpbXBsKCkuc2V0VGltZW91dChXVEY6Om1vdmUoYWN0aW9uKSwgZGVsYXks
IGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHNldERPTUV4Y2VwdGlv
bigmc3RhdGUsIGVjKTsKIAogICAgIHJldHVybiBqc051bWJlcihyZXN1bHQpOwogfQogCi1KU1Zh
bHVlIEpTRE9NV2luZG93OjpzZXRJbnRlcnZhbChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
RE9NV2luZG93OjpzZXRJbnRlcnZhbChFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIENvbnRlbnRT
ZWN1cml0eVBvbGljeSogY29udGVudFNlY3VyaXR5UG9saWN5ID0gaW1wbCgpLmRvY3VtZW50KCkg
PyBpbXBsKCkuZG9jdW1lbnQoKS0+Y29udGVudFNlY3VyaXR5UG9saWN5KCkgOiAwOwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6
Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCgpLT53b3JsZCgpLCBjb250ZW50U2VjdXJpdHlQb2xp
Y3kpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBDb250ZW50U2VjdXJpdHlQ
b2xpY3kqIGNvbnRlbnRTZWN1cml0eVBvbGljeSA9IGltcGwoKS5kb2N1bWVudCgpID8gaW1wbCgp
LmRvY3VtZW50KCktPmNvbnRlbnRTZWN1cml0eVBvbGljeSgpIDogbnVsbHB0cjsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0aW9uPiBhY3Rpb24gPSBTY2hlZHVsZWRBY3Rpb246OmNy
ZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLT53b3JsZCgpLCBjb250ZW50U2VjdXJpdHlQb2xp
Y3kpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgaW50IGRlbGF5ID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVj
KTsKKyAgICBpbnQgZGVsYXkgPSBzdGF0ZS5hcmd1bWVudCgxKS50b0ludDMyKCZzdGF0ZSk7CiAK
ICAgICBpZiAoIWFjdGlvbikKICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKDApOwogCiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaW50IHJlc3VsdCA9IGltcGwoKS5zZXRJbnRlcnZhbChX
VEY6Om1vdmUoYWN0aW9uKSwgZGVsYXksIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywg
ZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKIAogICAgIHJldHVybiBqc051
bWJlcihyZXN1bHQpOwogfQogCi1KU1ZhbHVlIEpTRE9NV2luZG93OjphZGRFdmVudExpc3RlbmVy
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNET01XaW5kb3c6OmFkZEV2ZW50TGlzdGVuZXIo
RXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCkuZnJhbWUoKTsK
ICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIEpT
VmFsdWUgbGlzdGVuZXIgPSBleGVjLT5hcmd1bWVudCgxKTsKKyAgICBKU1ZhbHVlIGxpc3RlbmVy
ID0gc3RhdGUuYXJndW1lbnQoMSk7CiAgICAgaWYgKCFsaXN0ZW5lci5pc09iamVjdCgpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIGltcGwoKS5hZGRFdmVudExpc3RlbmVy
KGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT50b0F0b21pY1N0cmluZyhleGVjKSwg
SlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwg
Z2xvYmFsT2JqZWN0KCktPndvcmxkKCkpLCBleGVjLT5hcmd1bWVudCgyKS50b0Jvb2xlYW4oZXhl
YykpOworICAgIGltcGwoKS5hZGRFdmVudExpc3RlbmVyKHN0YXRlLmFyZ3VtZW50KDApLnRvU3Ry
aW5nKCZzdGF0ZSktPnRvQXRvbWljU3RyaW5nKCZzdGF0ZSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3Jl
YXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgdGhpcywgZmFsc2UsIGdsb2JhbE9iamVjdCgpLT53b3Js
ZCgpKSwgc3RhdGUuYXJndW1lbnQoMikudG9Cb29sZWFuKCZzdGF0ZSkpOwogICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTRE9NV2luZG93OjpyZW1vdmVFdmVudExpc3Rl
bmVyKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlz
dGVuZXIoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCkuZnJh
bWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAot
ICAgIEpTVmFsdWUgbGlzdGVuZXIgPSBleGVjLT5hcmd1bWVudCgxKTsKKyAgICBKU1ZhbHVlIGxp
c3RlbmVyID0gc3RhdGUuYXJndW1lbnQoMSk7CiAgICAgaWYgKCFsaXN0ZW5lci5pc09iamVjdCgp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIGltcGwoKS5yZW1vdmVFdmVu
dExpc3RlbmVyKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT50b0F0b21pY1N0cmlu
ZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlz
LCBmYWxzZSwgZ2xvYmFsT2JqZWN0KCktPndvcmxkKCkpLnB0cigpLCBleGVjLT5hcmd1bWVudCgy
KS50b0Jvb2xlYW4oZXhlYykpOworICAgIGltcGwoKS5yZW1vdmVFdmVudExpc3RlbmVyKHN0YXRl
LmFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnRvQXRvbWljU3RyaW5nKCZzdGF0ZSksIEpT
RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgdGhpcywgZmFsc2UsIGds
b2JhbE9iamVjdCgpLT53b3JsZCgpKS5wdHIoKSwgc3RhdGUuYXJndW1lbnQoMikudG9Cb29sZWFu
KCZzdGF0ZSkpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFDdWVDdXN0b20uY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNEYXRhQ3VlQ3VzdG9tLmNwcAppbmRleCAyYTNjOWE4YjNiMzIw
NTQ2YzcxOGIwNWIwNDc3N2ZkMzI0NzJkMzFlLi43YWIzMjQ1ZDBiYmMyYmQ3ZGY1N2YyYjc1OWIz
NGIwNDgwZjMzNWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Rh
dGFDdWVDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YUN1
ZUN1c3RvbS5jcHAKQEAgLTM2LDE0ICszNiwxNCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgRU5BQkxFKERBVEFDVUVfVkFMVUUpCi1KU1ZhbHVlIEpT
RGF0YUN1ZTo6dmFsdWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU0RhdGFDdWU6
OnZhbHVlKEV4ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGltcGwoKS52YWx1
ZShleGVjKTsKKyAgICByZXR1cm4gaW1wbCgpLnZhbHVlKCZzdGF0ZSk7CiB9CiAKLXZvaWQgSlNE
YXRhQ3VlOjpzZXRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit2b2lkIEpT
RGF0YUN1ZTo6c2V0VmFsdWUoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAg
ICBpbXBsKCkuc2V0VmFsdWUoZXhlYywgdmFsdWUpOworICAgIGltcGwoKS5zZXRWYWx1ZSgmc3Rh
dGUsIHZhbHVlKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RhdGFUcmFuc2ZlckN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RhdGFUcmFuc2ZlckN1c3RvbS5jcHAKaW5kZXggNzkxOGY0MGU3MDA3YzY0NWZiYjdk
YzIwMDNjZDVmM2EyZTcwNzc1My4uMGIwZmE5MDc2MDE2NTY3MTMxY2I4ZDcwMzNjOWM4NjE4YzBh
MWRlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhVHJhbnNm
ZXJDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YVRyYW5z
ZmVyQ3VzdG9tLmNwcApAQCAtMzUsMTAgKzM1LDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSBKU0RhdGFUcmFuc2Zlcjo6dHlwZXMoRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU0RhdGFUcmFuc2Zlcjo6dHlwZXMoRXhlY1N0
YXRlJiBzdGF0ZSkgY29uc3QKIHsKICAgICBWZWN0b3I8U3RyaW5nPiB0eXBlcyA9IGltcGwoKS50
eXBlcygpOwotICAgIHJldHVybiB0eXBlcy5pc0VtcHR5KCkgPyBqc051bGwoKSA6IGpzQXJyYXko
ZXhlYywgZ2xvYmFsT2JqZWN0KCksIHR5cGVzKTsKKyAgICByZXR1cm4gdHlwZXMuaXNFbXB0eSgp
ID8ganNOdWxsKCkgOiBqc0FycmF5KCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHR5cGVzKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNw
cAppbmRleCBlYTYyZTI4ZWRjNjBkMWJmN2U2ODUxZTdkMTM0Y2E0MTA0NmE4MWQ1Li44Mzg5ZDYx
ZTU4MzEzODU0ZjU1NjMzYzJjOTNkNTExNzMwYzNlYTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNj
b3BlQ3VzdG9tLmNwcApAQCAtMzksOSArMzksOSBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTQzo6SlNWYWx1ZSBKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlOjpwb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK0pTQzo6SlNWYWx1ZSBK
U0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOjpwb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUpCiB7Ci0gICAgcmV0dXJuIGhhbmRsZVBvc3RNZXNzYWdlKGV4ZWMsICZpbXBsKCkpOwor
ICAgIHJldHVybiBoYW5kbGVQb3N0TWVzc2FnZShzdGF0ZSwgJmltcGwoKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRGljdGlvbmFyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25h
cnkuY3BwCmluZGV4IGY2N2MyMzQ4NWZmNDQ0MDNmOGVlZTM4YWVlMzYwYzgwZDhjZWFhODEuLmUw
OTQ5NDQzNDg3NjBhNGFkYjM3NWY5MGQ3ZTc0NWQwNmFlZjliOWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcApAQCAtMTc2LDcgKzE3Niw3IEBAIHZvaWQg
SlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoRXhlY1N0YXRlKiwgSlNWYWx1ZSB2YWx1ZSwgUmVm
UHRyPFN0b3JhZ2U+JiByZXN1CiB2b2lkIEpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVlKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgTWVzc2FnZVBvcnRBcnJheSYgcmVzdWx0KQogewog
ICAgIEFycmF5QnVmZmVyQXJyYXkgYXJyYXlCdWZmZXJzOwotICAgIGZpbGxNZXNzYWdlUG9ydEFy
cmF5KGV4ZWMsIHZhbHVlLCByZXN1bHQsIGFycmF5QnVmZmVycyk7CisgICAgZmlsbE1lc3NhZ2VQ
b3J0QXJyYXkoKmV4ZWMsIHZhbHVlLCByZXN1bHQsIGFycmF5QnVmZmVycyk7CiB9CiAKICNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RvY3VtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9j
dW1lbnRDdXN0b20uY3BwCmluZGV4IDQ0ODJiY2JiZGU5NGU5ZjM5MjI1YTdmYTFiYThiMDU4NTBi
NjIyODAuLmQxMjhiMzViMjRhMTdiMzNmZjY4OTAzNTYwZTIzODJjYjI5NGFlY2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCkBAIC0xMDAs
MjAgKzEwMCwyMCBAQCBKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRG9jdQogICAgIHJldHVybiBkb2N1bWVu
dCA/IGNyZWF0ZU5ld0RvY3VtZW50V3JhcHBlcigqc3RhdGUsICpnbG9iYWxPYmplY3QsICpkb2N1
bWVudCkgOiBqc051bGwoKTsKIH0KIAotSlNWYWx1ZSBKU0RvY3VtZW50OjpwcmVwZW5kKEV4ZWNT
dGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTRG9jdW1lbnQ6OnByZXBlbmQoRXhlY1N0YXRlJiBzdGF0
ZSkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCkucHJlcGVuZCh0b05v
ZGVPclN0cmluZ1ZlY3Rvcigqc3RhdGUpLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRl
LCBlYyk7CisgICAgaW1wbCgpLnByZXBlbmQodG9Ob2RlT3JTdHJpbmdWZWN0b3Ioc3RhdGUpLCBl
Yyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogCiAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNEb2N1bWVudDo6YXBwZW5kKEV4ZWNTdGF0ZSogc3Rh
dGUpCitKU1ZhbHVlIEpTRG9jdW1lbnQ6OmFwcGVuZChFeGVjU3RhdGUmIHN0YXRlKQogewogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGltcGwoKS5hcHBlbmQodG9Ob2RlT3JTdHJpbmdW
ZWN0b3IoKnN0YXRlKSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOworICAg
IGltcGwoKS5hcHBlbmQodG9Ob2RlT3JTdHJpbmdWZWN0b3Ioc3RhdGUpLCBlYyk7CisgICAgc2V0
RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50RnJhZ21l
bnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEZyYWdt
ZW50Q3VzdG9tLmNwcAppbmRleCBjNmEyYTNhOWNkOGQwYzQzZTUxOGNlNGI5ZTNhMTAxOTZlNDll
NGJjLi5jMzUyZDVkYjk3YmJjZGUwYzZjZmM5NjFkYmFlYTQ4MWNiNzIxNWM1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50RnJhZ21lbnRDdXN0b20uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRGcmFnbWVudEN1c3Rv
bS5jcHAKQEAgLTM0LDIwICszNCwyMCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNEb2N1bWVudEZyYWdtZW50OjpwcmVwZW5kKEV4ZWNT
dGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTRG9jdW1lbnRGcmFnbWVudDo6cHJlcGVuZChFeGVjU3Rh
dGUmIHN0YXRlKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGltcGwoKS5wcmVw
ZW5kKHRvTm9kZU9yU3RyaW5nVmVjdG9yKCpzdGF0ZSksIGVjKTsKLSAgICBzZXRET01FeGNlcHRp
b24oc3RhdGUsIGVjKTsKKyAgICBpbXBsKCkucHJlcGVuZCh0b05vZGVPclN0cmluZ1ZlY3Rvcihz
dGF0ZSksIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0RvY3VtZW50RnJhZ21lbnQ6OmFwcGVu
ZChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0RvY3VtZW50RnJhZ21lbnQ6OmFwcGVuZChF
eGVjU3RhdGUmIHN0YXRlKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGltcGwo
KS5hcHBlbmQodG9Ob2RlT3JTdHJpbmdWZWN0b3IoKnN0YXRlKSwgZWMpOwotICAgIHNldERPTUV4
Y2VwdGlvbihzdGF0ZSwgZWMpOworICAgIGltcGwoKS5hcHBlbmQodG9Ob2RlT3JTdHJpbmdWZWN0
b3Ioc3RhdGUpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogCiAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RvY3VtZW50VHlwZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RvY3VtZW50VHlwZUN1c3RvbS5jcHAKaW5kZXggMzdhZjI2ZmVkZDM2NmQ2NjY1YWNk
Mzg3YjAxYWQ2NmQyNjRhNzk3NC4uODMzMzg3MjAxYmJmNjAyYjU1NTM2MDhiZWI1NTEwNjI5Y2Vj
Yjk1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudFR5
cGVDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRU
eXBlQ3VzdG9tLmNwcApAQCAtMzMsMjkgKzMzLDI5IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSBKU0RvY3VtZW50VHlwZTo6YmVmb3JlKEV4
ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTRG9jdW1lbnRUeXBlOjpiZWZvcmUoRXhlY1N0YXRl
JiBzdGF0ZSkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCkuYmVmb3Jl
KHRvTm9kZU9yU3RyaW5nVmVjdG9yKCpzdGF0ZSksIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24o
c3RhdGUsIGVjKTsKKyAgICBpbXBsKCkuYmVmb3JlKHRvTm9kZU9yU3RyaW5nVmVjdG9yKHN0YXRl
KSwgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKIAogICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTRG9jdW1lbnRUeXBlOjphZnRlcihFeGVjU3Rh
dGUqIHN0YXRlKQorSlNWYWx1ZSBKU0RvY3VtZW50VHlwZTo6YWZ0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCkuYWZ0ZXIodG9Ob2Rl
T3JTdHJpbmdWZWN0b3IoKnN0YXRlKSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwg
ZWMpOworICAgIGltcGwoKS5hZnRlcih0b05vZGVPclN0cmluZ1ZlY3RvcihzdGF0ZSksIGVjKTsK
KyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0RvY3VtZW50VHlwZTo6cmVwbGFjZVdpdGgoRXhlY1N0YXRl
KiBzdGF0ZSkKK0pTVmFsdWUgSlNEb2N1bWVudFR5cGU6OnJlcGxhY2VXaXRoKEV4ZWNTdGF0ZSYg
c3RhdGUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wbCgpLnJlcGxhY2VX
aXRoKHRvTm9kZU9yU3RyaW5nVmVjdG9yKCpzdGF0ZSksIGVjKTsKLSAgICBzZXRET01FeGNlcHRp
b24oc3RhdGUsIGVjKTsKKyAgICBpbXBsKCkucmVwbGFjZVdpdGgodG9Ob2RlT3JTdHJpbmdWZWN0
b3Ioc3RhdGUpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogCiAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0VsZW1lbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNFbGVtZW50Q3VzdG9tLmNwcAppbmRleCA4ZWIwZWRhOTJjMzVhYWFiYzgxMTMyZjZjZTQ0YTcw
MjAxOWIwNGFhLi43MmRkMzhlZWNjZDgxZWM2ZmI0OWJkZGMzMTNiNTE0NzdlNDkyMTFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0VsZW1lbnRDdXN0b20uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRWxlbWVudEN1c3RvbS5jcHAKQEAgLTY3
LDQ3ICs2Nyw0NyBAQCBKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoRXhlY1N0YXRlKiwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRWxlbWVudCogZQogICAgIHJldHVybiB3cmFwcGVy
OyAgICAKIH0KIAotSlNWYWx1ZSBKU0VsZW1lbnQ6OmJlZm9yZShFeGVjU3RhdGUqIHN0YXRlKQor
SlNWYWx1ZSBKU0VsZW1lbnQ6OmJlZm9yZShFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwotICAgIGltcGwoKS5iZWZvcmUodG9Ob2RlT3JTdHJpbmdWZWN0b3Io
KnN0YXRlKSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOworICAgIGltcGwo
KS5iZWZvcmUodG9Ob2RlT3JTdHJpbmdWZWN0b3Ioc3RhdGUpLCBlYyk7CisgICAgc2V0RE9NRXhj
ZXB0aW9uKCZzdGF0ZSwgZWMpOwogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpT
VmFsdWUgSlNFbGVtZW50OjphZnRlcihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0VsZW1l
bnQ6OmFmdGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgaW1wbCgpLmFmdGVyKHRvTm9kZU9yU3RyaW5nVmVjdG9yKCpzdGF0ZSksIGVjKTsKLSAg
ICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKKyAgICBpbXBsKCkuYWZ0ZXIodG9Ob2RlT3JT
dHJpbmdWZWN0b3Ioc3RhdGUpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMp
OwogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNFbGVtZW50Ojpy
ZXBsYWNlV2l0aChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0VsZW1lbnQ6OnJlcGxhY2VX
aXRoKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAg
aW1wbCgpLnJlcGxhY2VXaXRoKHRvTm9kZU9yU3RyaW5nVmVjdG9yKCpzdGF0ZSksIGVjKTsKLSAg
ICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKKyAgICBpbXBsKCkucmVwbGFjZVdpdGgodG9O
b2RlT3JTdHJpbmdWZWN0b3Ioc3RhdGUpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0
ZSwgZWMpOwogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNFbGVt
ZW50OjpwcmVwZW5kKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTRWxlbWVudDo6cHJlcGVu
ZChFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGlt
cGwoKS5wcmVwZW5kKHRvTm9kZU9yU3RyaW5nVmVjdG9yKCpzdGF0ZSksIGVjKTsKLSAgICBzZXRE
T01FeGNlcHRpb24oc3RhdGUsIGVjKTsKKyAgICBpbXBsKCkucHJlcGVuZCh0b05vZGVPclN0cmlu
Z1ZlY3RvcihzdGF0ZSksIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAK
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0VsZW1lbnQ6OmFwcGVu
ZChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0VsZW1lbnQ6OmFwcGVuZChFeGVjU3RhdGUm
IHN0YXRlKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGltcGwoKS5hcHBlbmQo
dG9Ob2RlT3JTdHJpbmdWZWN0b3IoKnN0YXRlKSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihz
dGF0ZSwgZWMpOworICAgIGltcGwoKS5hcHBlbmQodG9Ob2RlT3JTdHJpbmdWZWN0b3Ioc3RhdGUp
LCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogCiAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0
b20uY3BwCmluZGV4IGFmN2MzYjAxMTA4ZmViMzVlMDA2Y2FhNTllZTUyOTg1NTkxOGE3NjMuLjUx
ZTlmMGQ5MzBmNmM5ZjY5OGZkMjBhY2E5YjgwMWE2ODdhZjg3ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCkBAIC00NCw5ICs0NCw5IEBAIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSBKU0V2ZW50
OjpjbGlwYm9hcmREYXRhKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgSlNFdmVudDo6
Y2xpcGJvYXJkRGF0YShFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewotICAgIHJldHVybiBpbXBs
KCkuaXNDbGlwYm9hcmRFdmVudCgpID8gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgp
LmNsaXBib2FyZERhdGEoKSkgOiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBpbXBsKCkuaXND
bGlwYm9hcmRFdmVudCgpID8gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBpbXBsKCkuY2xp
cGJvYXJkRGF0YSgpKSA6IGpzVW5kZWZpbmVkKCk7CiB9CiAKICNkZWZpbmUgVFJZX1RPX1dSQVBf
V0lUSF9JTlRFUkZBQ0UoaW50ZXJmYWNlTmFtZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAKaW5kZXggYjFlOWM3NWU5OGQ4ZWYwN2E0
MzRlMGM4MDE4YTlmZGVmNjk2MTQzYy4uNTFmYmY0ZmExODJmNGMzYmM0NmJhNThmYmRlMDdjNWVm
NThmMTA2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlUmVh
ZGVyQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVSZWFk
ZXJDdXN0b20uY3BwCkBAIC00MSwxMiArNDEsMTIgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTRmlsZVJlYWRlcjo6cmVzdWx0KEV4ZWNT
dGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgSlNGaWxlUmVhZGVyOjpyZXN1bHQoRXhlY1N0YXRl
JiBzdGF0ZSkgY29uc3QKIHsKICAgICBGaWxlUmVhZGVyJiBpbXAgPSBpbXBsKCk7CiAgICAgaWYg
KGltcC5yZWFkVHlwZSgpID09IEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRBc0FycmF5QnVmZmVyKQot
ICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1w
LmFycmF5QnVmZmVyUmVzdWx0KCkpKTsKLSAgICByZXR1cm4ganNPd25lZFN0cmluZ09yTnVsbChl
eGVjLCBpbXAuc3RyaW5nUmVzdWx0KCkpOworICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsIGds
b2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXAuYXJyYXlCdWZmZXJSZXN1bHQoKSkpOworICAg
IHJldHVybiBqc093bmVkU3RyaW5nT3JOdWxsKCZzdGF0ZSwgaW1wLnN0cmluZ1Jlc3VsdCgpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcAppbmRleCAxMjcwMjQ3NzRjMTlhMDMzZThk
ZWQwODcwMjhhZGU4YWUwNmUzZGJjLi41MjdkMjEzZDcyMzUzMTNlY2FmYjZlZTcyMzdiNzRhZWE2
OTA1NWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0dlb2xvY2F0
aW9uQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0dlb2xvY2F0
aW9uQ3VzdG9tLmNwcApAQCAtOTYsMjEgKzk2LDIxIEBAIHN0YXRpYyBSZWZQdHI8UG9zaXRpb25P
cHRpb25zPiBjcmVhdGVQb3NpdGlvbk9wdGlvbnMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZh
CiAgICAgcmV0dXJuIG9wdGlvbnM7CiB9CiAKLUpTVmFsdWUgSlNHZW9sb2NhdGlvbjo6Z2V0Q3Vy
cmVudFBvc2l0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNHZW9sb2NhdGlvbjo6Z2V0
Q3VycmVudFBvc2l0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgLy8gQXJndW1lbnRzOiBQ
b3NpdGlvbkNhbGxiYWNrLCAob3B0aW9uYWwpUG9zaXRpb25FcnJvckNhbGxiYWNrLCAob3B0aW9u
YWwpUG9zaXRpb25PcHRpb25zCiAKLSAgICBSZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4gcG9zaXRp
b25DYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTUG9zaXRpb25DYWxsYmFj
az4oZXhlYywgZ2xvYmFsT2JqZWN0KCksIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+IHBvc2l0aW9u
Q2FsbGJhY2sgPSBjcmVhdGVGdW5jdGlvbk9ubHlDYWxsYmFjazxKU1Bvc2l0aW9uQ2FsbGJhY2s+
KCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHN0YXRlLmFyZ3VtZW50KDApKTsKKyAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIEFT
U0VSVChwb3NpdGlvbkNhbGxiYWNrKTsKIAotICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJh
Y2s+IHBvc2l0aW9uRXJyb3JDYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpT
UG9zaXRpb25FcnJvckNhbGxiYWNrPihleGVjLCBnbG9iYWxPYmplY3QoKSwgZXhlYy0+YXJndW1l
bnQoMSksIENhbGxiYWNrQWxsb3dVbmRlZmluZWQgfCBDYWxsYmFja0FsbG93TnVsbCk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJh
Y2s+IHBvc2l0aW9uRXJyb3JDYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpT
UG9zaXRpb25FcnJvckNhbGxiYWNrPigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBzdGF0ZS5hcmd1
bWVudCgxKSwgQ2FsbGJhY2tBbGxvd1VuZGVmaW5lZCB8IENhbGxiYWNrQWxsb3dOdWxsKTsKKyAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCi0gICAgUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gcG9zaXRpb25PcHRpb25zID0gY3JlYXRl
UG9zaXRpb25PcHRpb25zKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gcG9zaXRpb25PcHRp
b25zID0gY3JlYXRlUG9zaXRpb25PcHRpb25zKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMikpOwor
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgQVNTRVJUKHBvc2l0aW9uT3B0aW9ucyk7CiAKQEAgLTExOCwyMSArMTE4LDIxIEBA
IEpTVmFsdWUgSlNHZW9sb2NhdGlvbjo6Z2V0Q3VycmVudFBvc2l0aW9uKEV4ZWNTdGF0ZSogZXhl
YykKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0dlb2xvY2F0aW9u
Ojp3YXRjaFBvc2l0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNHZW9sb2NhdGlvbjo6
d2F0Y2hQb3NpdGlvbihFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIC8vIEFyZ3VtZW50czogUG9z
aXRpb25DYWxsYmFjaywgKG9wdGlvbmFsKVBvc2l0aW9uRXJyb3JDYWxsYmFjaywgKG9wdGlvbmFs
KVBvc2l0aW9uT3B0aW9ucwogCi0gICAgUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+IHBvc2l0aW9u
Q2FsbGJhY2sgPSBjcmVhdGVGdW5jdGlvbk9ubHlDYWxsYmFjazxKU1Bvc2l0aW9uQ2FsbGJhY2s+
KGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIFJlZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBwb3NpdGlvbkNh
bGxiYWNrID0gY3JlYXRlRnVuY3Rpb25Pbmx5Q2FsbGJhY2s8SlNQb3NpdGlvbkNhbGxiYWNrPigm
c3RhdGUsIGdsb2JhbE9iamVjdCgpLCBzdGF0ZS5hcmd1bWVudCgwKSk7CisgICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBBU1NF
UlQocG9zaXRpb25DYWxsYmFjayk7CiAKLSAgICBSZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNr
PiBwb3NpdGlvbkVycm9yQ2FsbGJhY2sgPSBjcmVhdGVGdW5jdGlvbk9ubHlDYWxsYmFjazxKU1Bv
c2l0aW9uRXJyb3JDYWxsYmFjaz4oZXhlYywgZ2xvYmFsT2JqZWN0KCksIGV4ZWMtPmFyZ3VtZW50
KDEpLCBDYWxsYmFja0FsbG93VW5kZWZpbmVkIHwgQ2FsbGJhY2tBbGxvd051bGwpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBSZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNr
PiBwb3NpdGlvbkVycm9yQ2FsbGJhY2sgPSBjcmVhdGVGdW5jdGlvbk9ubHlDYWxsYmFjazxKU1Bv
c2l0aW9uRXJyb3JDYWxsYmFjaz4oJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgc3RhdGUuYXJndW1l
bnQoMSksIENhbGxiYWNrQWxsb3dVbmRlZmluZWQgfCBDYWxsYmFja0FsbG93TnVsbCk7CisgICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IAotICAgIFJlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IHBvc2l0aW9uT3B0aW9ucyA9IGNyZWF0ZVBv
c2l0aW9uT3B0aW9ucyhleGVjLCBleGVjLT5hcmd1bWVudCgyKSk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIFJlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IHBvc2l0aW9uT3B0aW9u
cyA9IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIpKTsKKyAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgIEFTU0VSVChwb3NpdGlvbk9wdGlvbnMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCmluZGV4IDc1
Y2ZlNWY2NmNiZDBiMzE0MTU4NjMzMzQxMjI0NTcwMjYyYmQzNzMuLjI1OTJmNDY3MmU4YTIxNzBl
YmZmZWEyMmQ4MzM1NTgxMzM5ZjIxZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCkBAIC0zNiwxOCArMzYs
MTggQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0
aWMgSlNWYWx1ZSBuYW1lZEl0ZW1zKEV4ZWNTdGF0ZSogZXhlYywgSlNIVE1MQWxsQ29sbGVjdGlv
biogY29sbGVjdGlvbiwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3N0YXRpYyBKU1ZhbHVl
IG5hbWVkSXRlbXMoRXhlY1N0YXRlJiBzdGF0ZSwgSlNIVE1MQWxsQ29sbGVjdGlvbiogY29sbGVj
dGlvbiwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBWZWN0b3I8UmVmPEVsZW1l
bnQ+PiBuYW1lZEl0ZW1zID0gY29sbGVjdGlvbi0+aW1wbCgpLm5hbWVkSXRlbXMocHJvcGVydHlO
YW1lVG9BdG9taWNTdHJpbmcocHJvcGVydHlOYW1lKSk7CiAKICAgICBpZiAobmFtZWRJdGVtcy5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGlmIChuYW1lZEl0
ZW1zLnNpemUoKSA9PSAxKQotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBjb2xsZWN0aW9uLT5n
bG9iYWxPYmplY3QoKSwgbmFtZWRJdGVtc1swXS5wdHIoKSk7CisgICAgICAgIHJldHVybiB0b0pT
KCZzdGF0ZSwgY29sbGVjdGlvbi0+Z2xvYmFsT2JqZWN0KCksIG5hbWVkSXRlbXNbMF0ucHRyKCkp
OwogCiAgICAgLy8gRklYTUU6IEhUTUw1IHNwZWNpZmljYXRpb24gc2F5cyB0aGlzIHNob3VsZCBi
ZSBhIEhUTUxDb2xsZWN0aW9uLgogICAgIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93
ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL2NvbW1vbi1kb20taW50ZXJmYWNlcy5odG1s
I2h0bWxhbGxjb2xsZWN0aW9uCi0gICAgcmV0dXJuIHRvSlMoZXhlYywgY29sbGVjdGlvbi0+Z2xv
YmFsT2JqZWN0KCksIFN0YXRpY0VsZW1lbnRMaXN0OjphZG9wdChuYW1lZEl0ZW1zKS5nZXQoKSk7
CisgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBjb2xsZWN0aW9uLT5nbG9iYWxPYmplY3QoKSwgU3Rh
dGljRWxlbWVudExpc3Q6OmFkb3B0KG5hbWVkSXRlbXMpLmdldCgpKTsKIH0KIAogLy8gSFRNTEFs
bENvbGxlY3Rpb25zIGFyZSBzdHJhbmdlIG9iamVjdHMsIHRoZXkgc3VwcG9ydCBib3RoIGdldCBh
bmQgY2FsbC4KQEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY2FsbEhUTUxBbGxDb2xsZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUyhleGVjLCBqc0NvbGxlY3Rpb24tPmdsb2JhbE9i
amVjdCgpLCBjb2xsZWN0aW9uLml0ZW0oaW5kZXgudmFsdWUoKSkpKTsKIAogICAgICAgICAvLyBT
dXBwb3J0IGZvciBkb2N1bWVudC5pbWFnZXMoJzxuYW1lPicpIGV0Yy4KLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShuYW1lZEl0ZW1zKGV4ZWMsIGpzQ29sbGVjdGlvbiwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyhleGVjLCBzdHJpbmcpKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUobmFtZWRJdGVtcygqZXhlYywganNDb2xsZWN0aW9uLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKGV4ZWMsIHN0cmluZykpKTsKICAgICB9CiAKICAgICAvLyBUaGUgc2Vjb25kIGFyZywgaWYg
c2V0LCBpcyB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gd2Ugd2FudApAQCAtODgsOSArODgsOSBAQCBD
YWxsVHlwZSBKU0hUTUxBbGxDb2xsZWN0aW9uOjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0
YSYgY2FsbERhdGEpCiAgICAgcmV0dXJuIENhbGxUeXBlSG9zdDsKIH0KIAotYm9vbCBKU0hUTUxB
bGxDb2xsZWN0aW9uOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSYgdmFsdWUpCitib29sIEpTSFRNTEFsbENvbGxlY3Rpb246Om5h
bWVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSYgdmFsdWUpCiB7Ci0gICAgSlNWYWx1ZSBpdGVtcyA9IG5hbWVkSXRlbXMoZXhlYywgdGhp
cywgcHJvcGVydHlOYW1lKTsKKyAgICBKU1ZhbHVlIGl0ZW1zID0gbmFtZWRJdGVtcygqc3RhdGUs
IHRoaXMsIHByb3BlcnR5TmFtZSk7CiAgICAgaWYgKGl0ZW1zLmlzVW5kZWZpbmVkKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIApAQCAtOTgsMTYgKzk4LDE2IEBAIGJvb2wgSlNIVE1MQWxsQ29s
bGVjdGlvbjo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUpTVmFsdWUgSlNIVE1MQWxsQ29sbGVjdGlv
bjo6aXRlbShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTSFRNTEFsbENvbGxlY3Rpb246Oml0
ZW0oRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4
ID0gcGFyc2VJbmRleCgqZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpLmltcGwoKSkpCi0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBp
bXBsKCkuaXRlbShpbmRleC52YWx1ZSgpKSk7Ci0gICAgcmV0dXJuIG5hbWVkSXRlbXMoZXhlYywg
dGhpcywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKKyAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGlu
ZGV4ID0gcGFyc2VJbmRleCgqc3RhdGUuYXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dmFs
dWUoJnN0YXRlKS5pbXBsKCkpKQorICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9i
amVjdCgpLCBpbXBsKCkuaXRlbShpbmRleC52YWx1ZSgpKSk7CisgICAgcmV0dXJuIG5hbWVkSXRl
bXMoc3RhdGUsIHRoaXMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCBzdGF0ZS5hcmd1
bWVudCgwKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpKSk7CiB9CiAKLUpTVmFsdWUg
SlNIVE1MQWxsQ29sbGVjdGlvbjo6bmFtZWRJdGVtKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUg
SlNIVE1MQWxsQ29sbGVjdGlvbjo6bmFtZWRJdGVtKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAg
SlNWYWx1ZSB2YWx1ZSA9IG5hbWVkSXRlbXMoZXhlYywgdGhpcywgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyhleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykp
KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gbmFtZWRJdGVtcyhzdGF0ZSwgdGhpcywgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSkt
PnZhbHVlKCZzdGF0ZSkpKTsKICAgICByZXR1cm4gdmFsdWUuaXNVbmRlZmluZWQoKSA/IGpzTnVs
bCgpIDogdmFsdWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKaW5kZXggMmZjY2NmZmJmNWViNDAzZGQz
ZThmMTg1YzA4OGU0NDMzZjZjMjU3MS4uZTZlYzhkYzNjZWFmNGZhZjEzM2U0OGU5NDU5Yjk4YTYy
ODhkYzY4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2Fu
dmFzRWxlbWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNI
VE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKQEAgLTQ0LDE0ICs0NCwxNCBAQCB1c2luZyBuYW1l
c3BhY2UgSlNDOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgRU5BQkxFKFdFQkdMKQotc3Rh
dGljIHZvaWQgZ2V0M0RDb250ZXh0QXR0cmlidXRlcyhFeGVjU3RhdGUqIGV4ZWMsIFJlZlB0cjxD
YW52YXNDb250ZXh0QXR0cmlidXRlcz4mIGF0dHJzKQorc3RhdGljIHZvaWQgZ2V0M0RDb250ZXh0
QXR0cmlidXRlcyhFeGVjU3RhdGUmIHN0YXRlLCBSZWZQdHI8Q2FudmFzQ29udGV4dEF0dHJpYnV0
ZXM+JiBhdHRycykKIHsKLSAgICBKU1ZhbHVlIGluaXRpYWxpemVyVmFsdWUgPSBleGVjLT5hcmd1
bWVudCgxKTsKKyAgICBKU1ZhbHVlIGluaXRpYWxpemVyVmFsdWUgPSBzdGF0ZS5hcmd1bWVudCgx
KTsKICAgICBpZiAoaW5pdGlhbGl6ZXJWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAg
ICByZXR1cm47CiAgICAgCi0gICAgSlNPYmplY3QqIGluaXRpYWxpemVyT2JqZWN0ID0gaW5pdGlh
bGl6ZXJWYWx1ZS50b09iamVjdChleGVjKTsKLSAgICBKU0RpY3Rpb25hcnkgZGljdGlvbmFyeShl
eGVjLCBpbml0aWFsaXplck9iamVjdCk7CisgICAgSlNPYmplY3QqIGluaXRpYWxpemVyT2JqZWN0
ID0gaW5pdGlhbGl6ZXJWYWx1ZS50b09iamVjdCgmc3RhdGUpOworICAgIEpTRGljdGlvbmFyeSBk
aWN0aW9uYXJ5KCZzdGF0ZSwgaW5pdGlhbGl6ZXJPYmplY3QpOwogICAgIAogICAgIEdyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzIGdyYXBoaWNzQXR0cnM7CiAgICAgCkBAIC02NiwxNiArNjYs
MTYgQEAgc3RhdGljIHZvaWQgZ2V0M0RDb250ZXh0QXR0cmlidXRlcyhFeGVjU3RhdGUqIGV4ZWMs
IFJlZlB0cjxDYW52YXNDb250ZXh0QXR0cmlidXQKIH0KICNlbmRpZgogCi1KU1ZhbHVlIEpTSFRN
TENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0hU
TUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgSFRN
TENhbnZhc0VsZW1lbnQmIGNhbnZhcyA9IGltcGwoKTsKLSAgICBjb25zdCBTdHJpbmcmIGNvbnRl
eHRJZCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAg
ICBjb25zdCBTdHJpbmcmIGNvbnRleHRJZCA9IHN0YXRlLmFyZ3VtZW50KDApLnRvU3RyaW5nKCZz
dGF0ZSktPnZhbHVlKCZzdGF0ZSk7CiAgICAgCiAgICAgUmVmUHRyPENhbnZhc0NvbnRleHRBdHRy
aWJ1dGVzPiBhdHRyczsKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgaWYgKEhUTUxDYW52YXNFbGVt
ZW50OjppczNkVHlwZShjb250ZXh0SWQpKSB7Ci0gICAgICAgIGdldDNEQ29udGV4dEF0dHJpYnV0
ZXMoZXhlYywgYXR0cnMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIGdldDNEQ29udGV4dEF0dHJpYnV0ZXMoc3RhdGUsIGF0dHJzKTsKKyAgICAgICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgfQogI2VuZGlmCkBAIC04MywyMyArODMsMjMgQEAgSlNWYWx1ZSBKU0hUTUxDYW52YXNFbGVt
ZW50OjpnZXRDb250ZXh0KEV4ZWNTdGF0ZSogZXhlYykKICAgICBDYW52YXNSZW5kZXJpbmdDb250
ZXh0KiBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoY29udGV4dElkLCBhdHRycy5nZXQoKSk7
CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgcmV0dXJu
IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGNvbnRleHQpKTsKKyAgICBy
ZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihjb250ZXh0KSk7
CiB9CiAKLUpTVmFsdWUgSlNIVE1MQ2FudmFzRWxlbWVudDo6cHJvYmFibHlTdXBwb3J0c0NvbnRl
eHQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50Ojpwcm9iYWJs
eVN1cHBvcnRzQ29udGV4dChFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIEhUTUxDYW52YXNFbGVt
ZW50JiBjYW52YXMgPSBpbXBsKCk7Ci0gICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisg
ICAgaWYgKCFzdGF0ZS5hcmd1bWVudENvdW50KCkpCiAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4o
ZmFsc2UpOwotICAgIGNvbnN0IFN0cmluZyYgY29udGV4dElkID0gZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBjb25zdCBTdHJpbmcmIGNvbnRleHRJZCA9IHN0YXRlLnVuY2hlY2tl
ZEFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAK
ICAgICBSZWZQdHI8Q2FudmFzQ29udGV4dEF0dHJpYnV0ZXM+IGF0dHJzOwogI2lmIEVOQUJMRShX
RUJHTCkKICAgICBpZiAoSFRNTENhbnZhc0VsZW1lbnQ6OmlzM2RUeXBlKGNvbnRleHRJZCkpIHsK
LSAgICAgICAgZ2V0M0RDb250ZXh0QXR0cmlidXRlcyhleGVjLCBhdHRycyk7Ci0gICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgZ2V0M0RDb250ZXh0QXR0cmlidXRlcyhz
dGF0ZSwgYXR0cnMpOworICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAjZW5kaWYKQEAgLTEwNywyNCArMTA3
LDI0IEBAIEpTVmFsdWUgSlNIVE1MQ2FudmFzRWxlbWVudDo6cHJvYmFibHlTdXBwb3J0c0NvbnRl
eHQoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBqc0Jvb2xlYW4oY2FudmFzLnByb2JhYmx5
U3VwcG9ydHNDb250ZXh0KGNvbnRleHRJZCwgYXR0cnMuZ2V0KCkpKTsKIH0KIAotSlNWYWx1ZSBK
U0hUTUxDYW52YXNFbGVtZW50Ojp0b0RhdGFVUkwoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBK
U0hUTUxDYW52YXNFbGVtZW50Ojp0b0RhdGFVUkwoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBI
VE1MQ2FudmFzRWxlbWVudCYgY2FudmFzID0gaW1wbCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwogCi0gICAgY29uc3QgU3RyaW5nJiB0eXBlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmlu
ZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAgY29uc3QgU3RyaW5n
JiB0eXBlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygmc3RhdGUsIHN0
YXRlLmFyZ3VtZW50KDApKTsKICAgICBkb3VibGUgcXVhbGl0eTsKICAgICBkb3VibGUqIHF1YWxp
dHlQdHIgPSAwOwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAxKSB7Ci0gICAgICAg
IEpTVmFsdWUgdiA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOworICAgIGlmIChzdGF0ZS5h
cmd1bWVudENvdW50KCkgPiAxKSB7CisgICAgICAgIEpTVmFsdWUgdiA9IHN0YXRlLnVuY2hlY2tl
ZEFyZ3VtZW50KDEpOwogICAgICAgICBpZiAodi5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICBx
dWFsaXR5ID0gdi50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIHF1YWxpdHkgPSB2LnRvTnVt
YmVyKCZzdGF0ZSk7CiAgICAgICAgICAgICBxdWFsaXR5UHRyID0gJnF1YWxpdHk7CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQzo6anNTdHJpbmcoZXhlYywgY2Fu
dmFzLnRvRGF0YVVSTCh0eXBlLCBxdWFsaXR5UHRyLCBlYykpOwotICAgIHNldERPTUV4Y2VwdGlv
bihleGVjLCBlYyk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6OmpzU3RyaW5nKCZzdGF0ZSwg
Y2FudmFzLnRvRGF0YVVSTCh0eXBlLCBxdWFsaXR5UHRyLCBlYykpOworICAgIHNldERPTUV4Y2Vw
dGlvbigmc3RhdGUsIGVjKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAKaW5kZXggMDUy
YTU0NjU3ZTBkNjdhNTg0YjU3NjhkN2E5YjYzOWIxOTlhYTk5MC4uNDMxNzQyODU0NjhhZWFmNzE4
NzFlMDk2NGY0MjYxMTJlYzVhNjAwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcApAQCAtMTA4LDI2ICsxMDgsMjYgQEAgYm9v
bCBKU0hUTUxEb2N1bWVudDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIEpTVmEKIAogLy8gQ3VzdG9tIGF0dHJpYnV0ZXMKIAotSlNWYWx1ZSBK
U0hUTUxEb2N1bWVudDo6YWxsKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgSlNIVE1M
RG9jdW1lbnQ6OmFsbChFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewogICAgIC8vIElmICJhbGwi
IGhhcyBiZWVuIG92ZXJ3cml0dGVuLCByZXR1cm4gdGhlIG92ZXJ3cml0dGVuIHZhbHVlCi0gICAg
SlNWYWx1ZSB2ID0gZ2V0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmco
ZXhlYywgImFsbCIpKTsKKyAgICBKU1ZhbHVlIHYgPSBnZXREaXJlY3Qoc3RhdGUudm0oKSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJhbGwiKSk7CiAgICAgaWYgKHYpCiAgICAgICAg
IHJldHVybiB2OwogCi0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGltcGwo
KS5hbGwoKSk7CisgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgp
LmFsbCgpKTsKIH0KIAotdm9pZCBKU0hUTUxEb2N1bWVudDo6c2V0QWxsKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNIVE1MRG9jdW1lbnQ6OnNldEFsbChFeGVjU3RhdGUm
IHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIC8vIEFkZCAiYWxsIiB0byB0aGUgcHJvcGVy
dHkgbWFwLgotICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KGV4ZWMsICJhbGwiKSwgdmFsdWUpOworICAgIHB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImFsbCIpLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBEb2N1
bWVudCogZmluZENhbGxpbmdEb2N1bWVudChFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgRG9jdW1l
bnQqIGZpbmRDYWxsaW5nRG9jdW1lbnQoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBDYWxsZXJG
dW5jdG9yIGZ1bmN0b3I7Ci0gICAgZXhlYy0+aXRlcmF0ZShmdW5jdG9yKTsKKyAgICBzdGF0ZS5p
dGVyYXRlKGZ1bmN0b3IpOwogICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBmdW5jdG9yLmNh
bGxlckZyYW1lKCk7CiAgICAgaWYgKCFjYWxsZXJGcmFtZSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CkBAIC0xMzcsMTkgKzEzNywxOSBAQCBzdGF0aWMgRG9jdW1lbnQqIGZpbmRDYWxsaW5nRG9j
dW1lbnQoRXhlY1N0YXRlKiBleGVjKQogCiAvLyBDdXN0b20gZnVuY3Rpb25zCiAKLUpTVmFsdWUg
SlNIVE1MRG9jdW1lbnQ6Om9wZW4oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0hUTUxEb2N1
bWVudDo6b3BlbihFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIC8vIEZvciBjb21wYXRpYmlsaXR5
IHdpdGggb3RoZXIgYnJvd3NlcnMsIHBhc3Mgb3BlbiBjYWxscyB3aXRoIG1vcmUgdGhhbiAyIHBh
cmFtZXRlcnMgdG8gdGhlIHdpbmRvdy4KLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4g
MikgeworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPiAyKSB7CiAgICAgICAgIGlmIChG
cmFtZSogZnJhbWUgPSBpbXBsKCkuZnJhbWUoKSkgewotICAgICAgICAgICAgSlNET01XaW5kb3dT
aGVsbCogd3JhcHBlciA9IHRvSlNET01XaW5kb3dTaGVsbChmcmFtZSwgY3VycmVudFdvcmxkKGV4
ZWMpKTsKKyAgICAgICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHdyYXBwZXIgPSB0b0pTRE9NV2lu
ZG93U2hlbGwoZnJhbWUsIGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsKICAgICAgICAgICAgIGlmICh3
cmFwcGVyKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IHdyYXBwZXItPmdl
dChleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJvcGVuIikpOworICAgICAgICAg
ICAgICAgIEpTVmFsdWUgZnVuY3Rpb24gPSB3cmFwcGVyLT5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZSwgIm9wZW4iKSk7CiAgICAgICAgICAgICAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CiAgICAgICAgICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSA6OmdldENhbGxE
YXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgICAgICAgICAgICAgaWYgKGNhbGxUeXBlID09
IENhbGxUeXBlTm9uZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9y
KGV4ZWMpOwotICAgICAgICAgICAgICAgIHJldHVybiBKU0M6OmNhbGwoZXhlYywgZnVuY3Rpb24s
IGNhbGxUeXBlLCBjYWxsRGF0YSwgd3JhcHBlciwgQXJnTGlzdChleGVjKSk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOworICAgICAgICAgICAgICAg
IHJldHVybiBKU0M6OmNhbGwoJnN0YXRlLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB3
cmFwcGVyLCBBcmdMaXN0KCZzdGF0ZSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtMTU3LDcgKzE1Nyw3IEBAIEpTVmFsdWUgSlNI
VE1MRG9jdW1lbnQ6Om9wZW4oRXhlY1N0YXRlKiBleGVjKQogCiAgICAgLy8gZG9jdW1lbnQub3Bl
biBjbG9iYmVycyB0aGUgc2VjdXJpdHkgY29udGV4dCBvZiB0aGUgZG9jdW1lbnQgYW5kCiAgICAg
Ly8gYWxpYXNlcyBpdCB3aXRoIHRoZSBhY3RpdmUgc2VjdXJpdHkgY29udGV4dC4KLSAgICBEb2N1
bWVudCogYWN0aXZlRG9jdW1lbnQgPSBhc0pTRE9NV2luZG93KGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSktPmltcGwoKS5kb2N1bWVudCgpOworICAgIERvY3VtZW50KiBhY3RpdmVEb2N1bWVu
dCA9IGFzSlNET01XaW5kb3coc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+aW1wbCgpLmRv
Y3VtZW50KCk7CiAKICAgICAvLyBJbiB0aGUgY2FzZSBvZiB0d28gcGFyYW1ldGVycyBvciBmZXdl
ciwgZG8gYSBub3JtYWwgZG9jdW1lbnQgb3Blbi4KICAgICBpbXBsKCkub3BlbihhY3RpdmVEb2N1
bWVudCk7CkBAIC0xNjYsMjEgKzE2NiwyMSBAQCBKU1ZhbHVlIEpTSFRNTERvY3VtZW50OjpvcGVu
KEV4ZWNTdGF0ZSogZXhlYykKIAogZW51bSBOZXdsaW5lUmVxdWlyZW1lbnQgeyBEb05vdEFkZE5l
d2xpbmUsIERvQWRkTmV3bGluZSB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgZG9jdW1lbnRXcml0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTSFRNTERvY3VtZW50KiB0aGlzRG9jdW1lbnQsIE5ld2xpbmVS
ZXF1aXJlbWVudCBhZGROZXdsaW5lKQorc3RhdGljIGlubGluZSB2b2lkIGRvY3VtZW50V3JpdGUo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNIVE1MRG9jdW1lbnQqIHRoaXNEb2N1bWVudCwgTmV3bGluZVJl
cXVpcmVtZW50IGFkZE5ld2xpbmUpCiB7CiAgICAgSFRNTERvY3VtZW50KiBkb2N1bWVudCA9ICZ0
aGlzRG9jdW1lbnQtPmltcGwoKTsKICAgICAvLyBET00gb25seSBzcGVjaWZpZXMgc2luZ2xlIHN0
cmluZyBhcmd1bWVudCwgYnV0IGJyb3dzZXJzIGFsbG93IG11bHRpcGxlIG9yIG5vIGFyZ3VtZW50
cy4KIAotICAgIHNpemVfdCBzaXplID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgIHNpemVf
dCBzaXplID0gc3RhdGUuYXJndW1lbnRDb3VudCgpOwogCi0gICAgU3RyaW5nIGZpcnN0U3RyaW5n
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIFN0
cmluZyBmaXJzdFN0cmluZyA9IHN0YXRlLmFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZh
bHVlKCZzdGF0ZSk7CiAgICAgU2VnbWVudGVkU3RyaW5nIHNlZ21lbnRlZFN0cmluZyA9IGZpcnN0
U3RyaW5nOwogICAgIGlmIChzaXplICE9IDEpIHsKICAgICAgICAgaWYgKCFzaXplKQogICAgICAg
ICAgICAgc2VnbWVudGVkU3RyaW5nLmNsZWFyKCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgICAgICBT
dHJpbmcgc3Vic2VxdWVudFN0cmluZyA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc3Vic2VxdWVu
dFN0cmluZyA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvU3RyaW5nKCZzdGF0ZSktPnZh
bHVlKCZzdGF0ZSk7CiAgICAgICAgICAgICAgICAgc2VnbWVudGVkU3RyaW5nLmFwcGVuZChTZWdt
ZW50ZWRTdHJpbmcoc3Vic2VxdWVudFN0cmluZykpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CkBAIC0xODgsMTkgKzE4OCwxOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZG9jdW1lbnRXcml0ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTSFRNTERvY3VtZW50KiB0aGlzRG9jdW1lbnQsCiAgICAgaWYgKGFk
ZE5ld2xpbmUpCiAgICAgICAgIHNlZ21lbnRlZFN0cmluZy5hcHBlbmQoU2VnbWVudGVkU3RyaW5n
KFN0cmluZygmbmV3bGluZUNoYXJhY3RlciwgMSkpKTsKIAotICAgIERvY3VtZW50KiBhY3RpdmVE
b2N1bWVudCA9IGZpbmRDYWxsaW5nRG9jdW1lbnQoZXhlYyk7CisgICAgRG9jdW1lbnQqIGFjdGl2
ZURvY3VtZW50ID0gZmluZENhbGxpbmdEb2N1bWVudChzdGF0ZSk7CiAgICAgZG9jdW1lbnQtPndy
aXRlKHNlZ21lbnRlZFN0cmluZywgYWN0aXZlRG9jdW1lbnQpOwogfQogCi1KU1ZhbHVlIEpTSFRN
TERvY3VtZW50Ojp3cml0ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTSFRNTERvY3VtZW50
Ojp3cml0ZShFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGRvY3VtZW50V3JpdGUoZXhlYywgdGhp
cywgRG9Ob3RBZGROZXdsaW5lKTsKKyAgICBkb2N1bWVudFdyaXRlKHN0YXRlLCB0aGlzLCBEb05v
dEFkZE5ld2xpbmUpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpT
SFRNTERvY3VtZW50Ojp3cml0ZWxuKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNIVE1MRG9j
dW1lbnQ6OndyaXRlbG4oRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBkb2N1bWVudFdyaXRlKGV4
ZWMsIHRoaXMsIERvQWRkTmV3bGluZSk7CisgICAgZG9jdW1lbnRXcml0ZShzdGF0ZSwgdGhpcywg
RG9BZGROZXdsaW5lKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlv
bkN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGb3JtQ29udHJv
bHNDb2xsZWN0aW9uQ3VzdG9tLmNwcAppbmRleCBlYzdmN2RiYjZiODQxZTFjMmU0MGUwZjkyNDE2
MjdkYzkwM2VhZGRiLi44YjU1ZmE3ZGUzNmU1YzYwNzg4OWM5YjFlOWE1MWMzZWM4YTY4Yjc2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGb3JtQ29udHJvbHND
b2xsZWN0aW9uQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uQ3VzdG9tLmNwcApAQCAtMzAsNyArMzAsNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBKU1ZhbHVl
IG5hbWVkSXRlbXMoRXhlY1N0YXRlKiBleGVjLCBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9u
KiBjb2xsZWN0aW9uLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorc3RhdGljIEpTVmFsdWUg
bmFtZWRJdGVtcyhFeGVjU3RhdGUmIHN0YXRlLCBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9u
KiBjb2xsZWN0aW9uLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSA9IHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFt
ZSk7CiAgICAgVmVjdG9yPFJlZjxFbGVtZW50Pj4gbmFtZWRJdGVtcyA9IGNvbGxlY3Rpb24tPmlt
cGwoKS5uYW1lZEl0ZW1zKG5hbWUpOwpAQCAtMzgsMTUgKzM4LDE1IEBAIHN0YXRpYyBKU1ZhbHVl
IG5hbWVkSXRlbXMoRXhlY1N0YXRlKiBleGVjLCBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9u
KiBjb2xsZWN0CiAgICAgaWYgKG5hbWVkSXRlbXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICBpZiAobmFtZWRJdGVtcy5zaXplKCkgPT0gMSkKLSAgICAgICAg
cmV0dXJuIHRvSlMoZXhlYywgY29sbGVjdGlvbi0+Z2xvYmFsT2JqZWN0KCksIG5hbWVkSXRlbXNb
MF0ucHRyKCkpOworICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsIGNvbGxlY3Rpb24tPmdsb2Jh
bE9iamVjdCgpLCBuYW1lZEl0ZW1zWzBdLnB0cigpKTsKIAogICAgIEFTU0VSVChjb2xsZWN0aW9u
LT5pbXBsKCkudHlwZSgpID09IEZvcm1Db250cm9scyk7Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywg
Y29sbGVjdGlvbi0+Z2xvYmFsT2JqZWN0KCksIGNvbGxlY3Rpb24tPmltcGwoKS5vd25lck5vZGUo
KS5yYWRpb05vZGVMaXN0KG5hbWUpLmdldCgpKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGNv
bGxlY3Rpb24tPmdsb2JhbE9iamVjdCgpLCBjb2xsZWN0aW9uLT5pbXBsKCkub3duZXJOb2RlKCku
cmFkaW9Ob2RlTGlzdChuYW1lKS5nZXQoKSk7CiB9CiAKLWJvb2wgSlNIVE1MRm9ybUNvbnRyb2xz
Q29sbGVjdGlvbjo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUmIHZhbHVlKQorYm9vbCBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0
aW9uOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUmIHZhbHVlKQogewotICAgIGF1dG8gaXRlbXMgPSBuYW1lZEl0ZW1zKGV4ZWMs
IHRoaXMsIHByb3BlcnR5TmFtZSk7CisgICAgYXV0byBpdGVtcyA9IG5hbWVkSXRlbXMoKnN0YXRl
LCB0aGlzLCBwcm9wZXJ0eU5hbWUpOwogICAgIGlmIChpdGVtcy5pc1VuZGVmaW5lZCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTU0LDkgKzU0LDkgQEAgYm9vbCBKU0hUTUxGb3JtQ29u
dHJvbHNDb2xsZWN0aW9uOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3AKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotSlNWYWx1ZSBKU0hUTUxGb3JtQ29udHJvbHND
b2xsZWN0aW9uOjpuYW1lZEl0ZW0oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0hUTUxGb3Jt
Q29udHJvbHNDb2xsZWN0aW9uOjpuYW1lZEl0ZW0oRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBK
U1ZhbHVlIHZhbHVlID0gbmFtZWRJdGVtcyhleGVjLCB0aGlzLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkp
OworICAgIEpTVmFsdWUgdmFsdWUgPSBuYW1lZEl0ZW1zKHN0YXRlLCB0aGlzLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+
dmFsdWUoJnN0YXRlKSkpOwogICAgIHJldHVybiB2YWx1ZS5pc1VuZGVmaW5lZCgpID8ganNOdWxs
KCkgOiB2YWx1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNIVE1MRnJhbWVFbGVtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSFRNTEZyYW1lRWxlbWVudEN1c3RvbS5jcHAKaW5kZXggYTRlZDQzMGQzMmI0ZDg1ZTJhMjkz
NmU5M2U3ZmRiNjY1NjNlNjMxMS4uYWIwMDBmNzEzMDE5ZTliOGEwYmY1OGUyMzVkNzQxM2E5YWNi
OTU0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRnJhbWVF
bGVtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxG
cmFtZUVsZW1lbnRDdXN0b20uY3BwCkBAIC00MSwyMiArNDEsMjIgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1zdGF0aWMgaW5saW5lIGJvb2wg
YWxsb3dTZXR0aW5nSmF2YXNjcmlwdFVSTChFeGVjU3RhdGUqIGV4ZWMsIEhUTUxGcmFtZUVsZW1l
bnQqIGltcCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBhbGxvd1Nl
dHRpbmdKYXZhc2NyaXB0VVJMKEV4ZWNTdGF0ZSYgc3RhdGUsIEhUTUxGcmFtZUVsZW1lbnQqIGlt
cCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAocHJvdG9jb2xJc0phdmFTY3JpcHQo
c3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHZhbHVlKSkpIHsKICAgICAgICAgRG9j
dW1lbnQqIGNvbnRlbnREb2N1bWVudCA9IGltcC0+Y29udGVudERvY3VtZW50KCk7Ci0gICAgICAg
IGlmIChjb250ZW50RG9jdW1lbnQgJiYgIXNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKGV4ZWMsIGNv
bnRlbnREb2N1bWVudCkpCisgICAgICAgIGlmIChjb250ZW50RG9jdW1lbnQgJiYgIXNob3VsZEFs
bG93QWNjZXNzVG9Ob2RlKCZzdGF0ZSwgY29udGVudERvY3VtZW50KSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSlNIVE1MRnJh
bWVFbGVtZW50OjpzZXRMb2NhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit2
b2lkIEpTSFRNTEZyYW1lRWxlbWVudDo6c2V0TG9jYXRpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKIHsKICAgICBIVE1MRnJhbWVFbGVtZW50JiBpbXAgPSBpbXBsKCk7Ci0gICAg
U3RyaW5nIGxvY2F0aW9uVmFsdWUgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2
YWx1ZSk7CisgICAgU3RyaW5nIGxvY2F0aW9uVmFsdWUgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxD
aGVjaygmc3RhdGUsIHZhbHVlKTsKIAotICAgIGlmICghYWxsb3dTZXR0aW5nSmF2YXNjcmlwdFVS
TChleGVjLCAmaW1wLCBsb2NhdGlvblZhbHVlKSkKKyAgICBpZiAoIWFsbG93U2V0dGluZ0phdmFz
Y3JpcHRVUkwoc3RhdGUsICZpbXAsIGxvY2F0aW9uVmFsdWUpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBpbXAuc2V0TG9jYXRpb24obG9jYXRpb25WYWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRDdXN0b20uY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50Q3VzdG9tLmNwcAppbmRleCA0
MmViYWQzMTU5NDI0ZDdhZDk5NmFjYzk5ZjJkZTM2NDBjNGZkYTA5Li44ZjQyZGJlZjUyNGZkNmZk
OGNlM2RhYTExMTlkZGZkYjNiOWIwMTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSFRNTElucHV0RWxlbWVudEN1c3RvbS5jcHAKQEAgLTMzLDcxICszMyw3
MSBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFs
dWUgSlNIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25TdGFydChFeGVjU3RhdGUqIGV4ZWMpIGNv
bnN0CitKU1ZhbHVlIEpTSFRNTElucHV0RWxlbWVudDo6c2VsZWN0aW9uU3RhcnQoRXhlY1N0YXRl
JiBzdGF0ZSkgY29uc3QKIHsKICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGltcGwoKTsK
ICAgICBpZiAoIWlucHV0LmNhbkhhdmVTZWxlY3Rpb24oKSkKLSAgICAgICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsK
IAogICAgIHJldHVybiBqc051bWJlcihpbnB1dC5zZWxlY3Rpb25TdGFydCgpKTsKIH0KIAotdm9p
ZCBKU0hUTUxJbnB1dEVsZW1lbnQ6OnNldFNlbGVjdGlvblN0YXJ0KEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25TdGFy
dChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIEhUTUxJbnB1dEVsZW1l
bnQmIGlucHV0ID0gaW1wbCgpOwogICAgIGlmICghaW5wdXQuY2FuSGF2ZVNlbGVjdGlvbigpKQot
ICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0
YXRlKTsKIAotICAgIGlucHV0LnNldFNlbGVjdGlvblN0YXJ0KHZhbHVlLnRvSW50MzIoZXhlYykp
OworICAgIGlucHV0LnNldFNlbGVjdGlvblN0YXJ0KHZhbHVlLnRvSW50MzIoJnN0YXRlKSk7CiB9
CiAKLUpTVmFsdWUgSlNIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25FbmQoRXhlY1N0YXRlKiBl
eGVjKSBjb25zdAorSlNWYWx1ZSBKU0hUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGlvbkVuZChFeGVj
U3RhdGUmIHN0YXRlKSBjb25zdAogewogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gaW1w
bCgpOwogICAgIGlmICghaW5wdXQuY2FuSGF2ZVNlbGVjdGlvbigpKQotICAgICAgICByZXR1cm4g
dGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3Rh
dGUpOwogCiAgICAgcmV0dXJuIGpzTnVtYmVyKGlucHV0LnNlbGVjdGlvbkVuZCgpKTsKIH0KIAot
dm9pZCBKU0hUTUxJbnB1dEVsZW1lbnQ6OnNldFNlbGVjdGlvbkVuZChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgdmFsdWUpCit2b2lkIEpTSFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uRW5k
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgSFRNTElucHV0RWxlbWVu
dCYgaW5wdXQgPSBpbXBsKCk7CiAgICAgaWYgKCFpbnB1dC5jYW5IYXZlU2VsZWN0aW9uKCkpCi0g
ICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3Rh
dGUpOwogCi0gICAgaW5wdXQuc2V0U2VsZWN0aW9uRW5kKHZhbHVlLnRvSW50MzIoZXhlYykpOwor
ICAgIGlucHV0LnNldFNlbGVjdGlvbkVuZCh2YWx1ZS50b0ludDMyKCZzdGF0ZSkpOwogfQogCi1K
U1ZhbHVlIEpTSFRNTElucHV0RWxlbWVudDo6c2VsZWN0aW9uRGlyZWN0aW9uKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKK0pTVmFsdWUgSlNIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25EaXJlY3Rp
b24oRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1
dCA9IGltcGwoKTsKICAgICBpZiAoIWlucHV0LmNhbkhhdmVTZWxlY3Rpb24oKSkKLSAgICAgICAg
cmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJy
b3IoJnN0YXRlKTsKIAotICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBpbnB1dC5z
ZWxlY3Rpb25EaXJlY3Rpb24oKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0
ZSwgaW5wdXQuc2VsZWN0aW9uRGlyZWN0aW9uKCkpOwogfQogCi12b2lkIEpTSFRNTElucHV0RWxl
bWVudDo6c2V0U2VsZWN0aW9uRGlyZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSkKK3ZvaWQgSlNIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25EaXJlY3Rpb24oRXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1
dCA9IGltcGwoKTsKICAgICBpZiAoIWlucHV0LmNhbkhhdmVTZWxlY3Rpb24oKSkgewotICAgICAg
ICB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlucHV0LnNldFNlbGVjdGlvbkRpcmVjdGlv
bih2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAgIGlucHV0LnNldFNlbGVj
dGlvbkRpcmVjdGlvbih2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpKTsKIH0K
IAotSlNWYWx1ZSBKU0hUTUxJbnB1dEVsZW1lbnQ6OnNldFNlbGVjdGlvblJhbmdlKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25SYW5nZShF
eGVjU3RhdGUmIHN0YXRlKQogewogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gaW1wbCgp
OwogICAgIGlmICghaW5wdXQuY2FuSGF2ZVNlbGVjdGlvbigpKQotICAgICAgICByZXR1cm4gdGhy
b3dUeXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUp
OwogCi0gICAgaW50IHN0YXJ0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKLSAg
ICBpbnQgZW5kID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKLSAgICBTdHJpbmcg
ZGlyZWN0aW9uID0gZXhlYy0+YXJndW1lbnQoMikudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
OworICAgIGludCBzdGFydCA9IHN0YXRlLmFyZ3VtZW50KDApLnRvSW50MzIoJnN0YXRlKTsKKyAg
ICBpbnQgZW5kID0gc3RhdGUuYXJndW1lbnQoMSkudG9JbnQzMigmc3RhdGUpOworICAgIFN0cmlu
ZyBkaXJlY3Rpb24gPSBzdGF0ZS5hcmd1bWVudCgyKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgm
c3RhdGUpOwogCiAgICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCwgZGlyZWN0
aW9uKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTE1lZGlhRWxlbWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxNZWRpYUVsZW1lbnRDdXN0b20uY3BwCmluZGV4IDIwN2Fi
NzFkYWJlMzNmNzYwZjMwNWRjYmQzOWQwZmQ5Y2IzMjhiYzQuLjQ0MDA5NzYxZDEzOWQxMzE4NjQ2
YjVjOGU1MWUyNWJhZDBlYjE0MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSFRNTE1lZGlhRWxlbWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MTWVkaWFFbGVtZW50Q3VzdG9tLmNwcApAQCAtMzQsNyArMzQsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNIVE1M
TWVkaWFFbGVtZW50OjpzZXRDb250cm9sbGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUgdmFsdWUpCit2
b2lkIEpTSFRNTE1lZGlhRWxlbWVudDo6c2V0Q29udHJvbGxlcihFeGVjU3RhdGUmLCBKU1ZhbHVl
IHZhbHVlKQogewogICAgIC8vIDQuOC4xMC4xMS4yIE1lZGlhIGNvbnRyb2xsZXJzOiBjb250cm9s
bGVyIGF0dHJpYnV0ZS4KICAgICAvLyBPbiBzZXR0aW5nLCBpdCBtdXN0IGZpcnN0IHJlbW92ZSB0
aGUgZWxlbWVudCdzIG1lZGlhZ3JvdXAgYXR0cmlidXRlLCBpZiBhbnksIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20u
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb25D
dXN0b20uY3BwCmluZGV4IGZiMzc1ZWY5OTdkODI0ODFjMGUwYTNiY2IxZmMxYTVlNmM2ZjVjY2Eu
LjkxNWUwMjg3Yzc4Y2RjMDk1ZGIxYWRlMzM1ZDc2MGNkM2I1ODNlN2QgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPcHRpb25zQ29sbGVjdGlv
bkN1c3RvbS5jcHAKQEAgLTQ3LDExICs0NywxMSBAQCBib29sIEpTSFRNTE9wdGlvbnNDb2xsZWN0
aW9uOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5Tgog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjpzZXRM
ZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU0hUTUxPcHRpb25z
Q29sbGVjdGlvbjo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgdW5zaWduZWQgbmV3TGVuZ3RoID0gMDsK
LSAgICBkb3VibGUgbGVuZ3RoVmFsdWUgPSB2YWx1ZS50b051bWJlcihleGVjKTsKKyAgICBkb3Vi
bGUgbGVuZ3RoVmFsdWUgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwogICAgIGlmICghc3RkOjpp
c25hbihsZW5ndGhWYWx1ZSkgJiYgIXN0ZDo6aXNpbmYobGVuZ3RoVmFsdWUpKSB7CiAgICAgICAg
IGlmIChsZW5ndGhWYWx1ZSA8IDAuMCkKICAgICAgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7
CkBAIC02Miw3ICs2Miw3IEBAIHZvaWQgSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb246OnNldExlbmd0
aChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiAgICAgfQogICAgIGlmICghZWMpCiAg
ICAgICAgIGltcGwoKS5zZXRMZW5ndGgobmV3TGVuZ3RoLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiB9CiAKIHZv
aWQgSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb246OmluZGV4U2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUpCkBAIC03MCwxNCArNzAsMTQgQEAgdm9pZCBK
U0hUTUxPcHRpb25zQ29sbGVjdGlvbjo6aW5kZXhTZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBpbmRleCwgSlNWYWwKICAgICBzZWxlY3RJbmRleFNldHRlcigmaW1wbCgpLnNlbGVjdEVs
ZW1lbnQoKSwgZXhlYywgaW5kZXgsIHZhbHVlKTsKIH0KIAotSlNWYWx1ZSBKU0hUTUxPcHRpb25z
Q29sbGVjdGlvbjo6cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNIVE1MT3B0aW9u
c0NvbGxlY3Rpb246OnJlbW92ZShFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIC8vIFRoZSBhcmd1
bWVudCBjYW4gYmUgYW4gSFRNTE9wdGlvbkVsZW1lbnQgb3IgYW4gaW5kZXguCi0gICAgSlNWYWx1
ZSBhcmd1bWVudCA9IGV4ZWMtPmFyZ3VtZW50KDApOworICAgIEpTVmFsdWUgYXJndW1lbnQgPSBz
dGF0ZS5hcmd1bWVudCgwKTsKICAgICBpZiAoSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IEpT
SFRNTE9wdGlvbkVsZW1lbnQ6OnRvV3JhcHBlZChhcmd1bWVudCkpCiAgICAgICAgIGltcGwoKS5y
ZW1vdmUob3B0aW9uKTsKICAgICBlbHNlCi0gICAgICAgIGltcGwoKS5yZW1vdmUoYXJndW1lbnQu
dG9JbnQzMihleGVjKSk7CisgICAgICAgIGltcGwoKS5yZW1vdmUoYXJndW1lbnQudG9JbnQzMigm
c3RhdGUpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcApp
bmRleCAxNDZlMjQyYTA1ZDhkOGI1NGUxZTI5YjE3MGUyNDQyMzM3MmM5NzI4Li5iM2RmMTNmNzJl
YWE4ZmJhYTA3ODYwNWY0NzYzMzkyN2ViZTAyY2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcApAQCAtMzIs
MjEgKzMyLDIxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1KU1ZhbHVlIEpTSFRNTFNlbGVjdEVsZW1lbnQ6
OnJlbW92ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTSFRNTFNlbGVjdEVsZW1lbnQ6OnJl
bW92ZShFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIEhUTUxTZWxlY3RFbGVtZW50JiBzZWxlY3Qg
PSBpbXBsKCk7CiAKLSAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgeworICAgIGlmICgh
c3RhdGUuYXJndW1lbnRDb3VudCgpKSB7CiAgICAgICAgIC8vIFdoZW4gY2FsbGVkIHdpdGggbm8g
YXJndW1lbnQsIHdlIHNob3VsZCBjYWxsIEVsZW1lbnQ6OnJlbW92ZSgpIHRvIGRldGFjaC4KICAg
ICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgICAgIHNlbGVjdC5yZW1vdmUoZWMpOwot
ICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBzZXRET01FeGNlcHRp
b24oJnN0YXRlLCBlYyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gVGhlIEhUTUxTZWxlY3RF
bGVtZW50OjpyZW1vdmUoKSBmdW5jdGlvbiBjYW4gdGFrZSBlaXRoZXIgYW4gb3B0aW9uIG9iamVj
dCBvciB0aGUgaW5kZXggb2YgYW4gb3B0aW9uLgotICAgICAgICBpZiAoSFRNTE9wdGlvbkVsZW1l
bnQqIG9wdGlvbiA9IEpTSFRNTE9wdGlvbkVsZW1lbnQ6OnRvV3JhcHBlZChleGVjLT5hcmd1bWVu
dCgwKSkpCisgICAgICAgIGlmIChIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uID0gSlNIVE1MT3B0
aW9uRWxlbWVudDo6dG9XcmFwcGVkKHN0YXRlLmFyZ3VtZW50KDApKSkKICAgICAgICAgICAgIHNl
bGVjdC5yZW1vdmUob3B0aW9uKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2VsZWN0LnJl
bW92ZUJ5SW5kZXgoZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKSk7CisgICAgICAgICAg
ICBzZWxlY3QucmVtb3ZlQnlJbmRleChzdGF0ZS5hcmd1bWVudCgwKS50b0ludDMyKCZzdGF0ZSkp
OwogICAgIH0KIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHAK
aW5kZXggZTEyMTk5ZjFiNTQ3N2RmNWNiMTU4ODc3OTc1M2RhYmJlNWUwZmZkZi4uMWJiODZkZjg4
YzlkZWVhYjA5YmEwNmYzMjVkZTdiZGY2NmQ0NDhhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3BwCkBA
IC00Myw5ICs0Myw5IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotSlNWYWx1ZSBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OmNvbnRlbnQoRXhlY1N0YXRlKiBl
eGVjKSBjb25zdAorSlNWYWx1ZSBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OmNvbnRlbnQoRXhlY1N0
YXRlJiBzdGF0ZSkgY29uc3QKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jaygmc3RhdGUpOwogCiAgICAgRG9jdW1lbnRGcmFnbWVudCogY29udGVu
dCA9IGltcGwoKS5jb250ZW50KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hpc3RvcnlDdXN0b20uY3BwCmluZGV4IGQ0MDczNTE4NjQxMmQ4OTQ2NmY0ZGE1YzhmM2M3ZWE2
OTEzZWM3OWQuLjc3N2ZlMDZjNGEzMmQxMzAxYTRjMGYwZTQ3YzY0Nzc2OGZjNTZjMjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcApAQCAtMTA1
LDcgKzEwNSw3IEBAIHZvaWQgSlNIaXN0b3J5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOCiAgICAgQmFzZTo6Z2V0T3duUHJv
cGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAot
SlNWYWx1ZSBKU0hpc3Rvcnk6OnN0YXRlKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QKK0pTVmFsdWUg
SlNIaXN0b3J5OjpzdGF0ZShFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewogICAgIEhpc3Rvcnkm
IGhpc3RvcnkgPSBpbXBsKCk7CiAKQEAgLTExNCw2MyArMTE0LDYzIEBAIEpTVmFsdWUgSlNIaXN0
b3J5OjpzdGF0ZShFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0CiAgICAgICAgIHJldHVybiBjYWNoZWRW
YWx1ZTsKIAogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWQgPSBo
aXN0b3J5LnN0YXRlKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBzZXJpYWxpemVkID8gc2VyaWFs
aXplZC0+ZGVzZXJpYWxpemUoZXhlYywgZ2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7Ci0g
ICAgY29uc3RfY2FzdDxKU0hpc3RvcnkqPih0aGlzKS0+bV9zdGF0ZS5zZXQoZXhlYy0+dm0oKSwg
dGhpcywgcmVzdWx0KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHNlcmlhbGl6ZWQgPyBzZXJpYWxp
emVkLT5kZXNlcmlhbGl6ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpOwor
ICAgIGNvbnN0X2Nhc3Q8SlNIaXN0b3J5Kj4odGhpcyktPm1fc3RhdGUuc2V0KHN0YXRlLnZtKCks
IHRoaXMsIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSBKU0hpc3Rv
cnk6OnB1c2hTdGF0ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTSGlzdG9yeTo6cHVzaFN0
YXRlKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKCFzaG91bGRBbGxvd0FjY2Vzc1RvRnJh
bWUoZXhlYywgaW1wbCgpLmZyYW1lKCkpKQorICAgIGlmICghc2hvdWxkQWxsb3dBY2Nlc3NUb0Zy
YW1lKCZzdGF0ZSwgaW1wbCgpLmZyYW1lKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIAotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGhpc3RvcnlTdGF0ZSA9IFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCAwLCAw
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gaGlzdG9yeVN0YXRlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUo
JnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwgMCwgMCk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIFN0cmluZyB0aXRs
ZSA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJn
dW1lbnQoMSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBTdHJpbmcgdGl0
bGUgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKCZzdGF0ZSwgc3RhdGUu
YXJndW1lbnQoMSkpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIAorCiAgICAgU3RyaW5nIHVybDsKLSAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMikgewotICAgICAgICB1cmwgPSB2YWx1ZVRvU3RyaW5n
V2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpKTsKLSAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50
KCkgPiAyKSB7CisgICAgICAgIHVybCA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxs
Q2hlY2soJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgyKSk7CisgICAgICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGltcGwoKS5zdGF0ZU9iamVjdEFkZGVkKGhp
c3RvcnlTdGF0ZS5yZWxlYXNlKCksIHRpdGxlLCB1cmwsIEhpc3Rvcnk6OlN0YXRlT2JqZWN0VHlw
ZTo6UHVzaCwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgc2V0RE9N
RXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogCiAgICAgbV9zdGF0ZS5jbGVhcigpOwogCiAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNIaXN0b3J5OjpyZXBsYWNlU3RhdGUo
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0hpc3Rvcnk6OnJlcGxhY2VTdGF0ZShFeGVjU3Rh
dGUmIHN0YXRlKQogewotICAgIGlmICghc2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKGV4ZWMsIGlt
cGwoKS5mcmFtZSgpKSkKKyAgICBpZiAoIXNob3VsZEFsbG93QWNjZXNzVG9GcmFtZSgmc3RhdGUs
IGltcGwoKS5mcmFtZSgpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBoaXN0b3J5U3RhdGUgPSBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgMCwgMCk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IGhpc3RvcnlTdGF0ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCZzdGF0ZSwgc3Rh
dGUuYXJndW1lbnQoMCksIDAsIDApOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBTdHJpbmcgdGl0bGUgPSB2YWx1ZVRv
U3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgU3RyaW5nIHRpdGxlID0gdmFsdWVU
b1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDEp
KTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotICAgICAgICAKKwogICAgIFN0cmluZyB1cmw7Ci0gICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA+IDIpIHsKLSAgICAgICAgdXJsID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmlu
ZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgyKSk7Ci0gICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID4gMikgewor
ICAgICAgICB1cmwgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKCZzdGF0
ZSwgc3RhdGUuYXJndW1lbnQoMikpOworICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICBpbXBsKCkuc3RhdGVPYmplY3RBZGRlZChoaXN0b3J5U3RhdGUu
cmVsZWFzZSgpLCB0aXRsZSwgdXJsLCBIaXN0b3J5OjpTdGF0ZU9iamVjdFR5cGU6OlJlcGxhY2Us
IGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHNldERPTUV4Y2VwdGlv
bigmc3RhdGUsIGVjKTsKIAogICAgIG1fc3RhdGUuY2xlYXIoKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJEYXRhYmFzZUN1c3RvbS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcAppbmRleCBhMjVkY2E5
OTE4YzNhZTJlZTc2YTE4MDVhMjBkMGIxMGJkYWYxOWQzLi5lNTM1MDhmMWI2NWQzYWFhYzg2Y2Mz
ZTU0OTBjMGE5M2U4M2E0MGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcApAQCAtNDQsNDAgKzQ0LDQwIEBAIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSBKU0lEQkRhdGFiYXNl
OjpjcmVhdGVPYmplY3RTdG9yZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTSURCRGF0YWJh
c2U6OmNyZWF0ZU9iamVjdFN0b3JlKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhj
ZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBp
ZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCku
dGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3Rh
dGUpKTsKIAotICAgIFN0cmluZyBuYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBTdHJp
bmcgbmFtZSA9IHN0YXRlLmFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0
ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIAotICAgIEpTVmFsdWUgb3B0aW9uc1ZhbHVlID0gZXhlYy0+YXJndW1lbnQoMSk7
CisgICAgSlNWYWx1ZSBvcHRpb25zVmFsdWUgPSBzdGF0ZS5hcmd1bWVudCgxKTsKICAgICBpZiAo
IW9wdGlvbnNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICFvcHRpb25zVmFsdWUuaXNPYmpl
Y3QoKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMsICJOb3QgYW4gb2JqZWN0
LiIpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCAiTm90IGFuIG9iamVj
dC4iKTsKIAogICAgIElEQktleVBhdGgga2V5UGF0aDsKICAgICBib29sIGF1dG9JbmNyZW1lbnQg
PSBmYWxzZTsKICAgICBpZiAoIW9wdGlvbnNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0g
ICAgICAgIEpTVmFsdWUga2V5UGF0aFZhbHVlID0gb3B0aW9uc1ZhbHVlLmdldChleGVjLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJrZXlQYXRoIikpOwotICAgICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIEpTVmFsdWUga2V5UGF0aFZhbHVlID0gb3B0aW9uc1Zh
bHVlLmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAia2V5UGF0aCIp
KTsKKyAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgaWYgKCFrZXlQYXRoVmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkgewotICAgICAgICAgICAga2V5UGF0aCA9IGlkYktleVBhdGhGcm9tVmFsdWUoZXhl
Yywga2V5UGF0aFZhbHVlKTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgIGtleVBhdGggPSBpZGJLZXlQYXRoRnJvbVZhbHVlKCZzdGF0ZSwga2V5UGF0
aFZhbHVlKTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG9J
bmNyZW1lbnQgPSBvcHRpb25zVmFsdWUuZ2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
ZXhlYywgImF1dG9JbmNyZW1lbnQiKSkudG9Cb29sZWFuKGV4ZWMpOwotICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGF1dG9JbmNyZW1lbnQgPSBvcHRpb25zVmFsdWUu
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJhdXRvSW5jcmVtZW50
IikpLnRvQm9vbGVhbigmc3RhdGUpOworICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0KCksIGltcGwoKS5jcmVhdGVPYmplY3RTdG9yZShuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVt
ZW50LCBlYykuZ2V0KCkpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgSlNW
YWx1ZSByZXN1bHQgPSB0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIGltcGwoKS5jcmVhdGVP
YmplY3RTdG9yZShuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50LCBlYykuZ2V0KCkpOworICAg
IHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3Vz
dG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0
b20uY3BwCmluZGV4IDg1MDdlNDk0YTM3NmRiNzk5ZTU2ZmJlZThiZDFjYzZkOWQxNjc4MjguLjAx
Mjg4YzZlYWNhZjc1Nzg0MzRjNDEyMTg1ZDA1NGQ1NjgyOGI5ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCkBAIC00
Myw0MiArNDMsNDIgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1KU1ZhbHVlIEpTSURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUgSlNJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgoRXhlY1N0YXRlJiBzdGF0
ZSkKIHsKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0ganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4g
ZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVSZWZlcmVuY2VFcnJvcihleGVj
LCAiSURCT2JqZWN0U3RvcmUgc2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxl
IikpOworICAgICAgICByZXR1cm4gc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNy
ZWF0ZVJlZmVyZW5jZUVycm9yKCZzdGF0ZSwgIklEQk9iamVjdFN0b3JlIHNjcmlwdCAmc3RhdGV1
dGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIikpOwogCi0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA8IDIpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4
ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3RhdGUu
YXJndW1lbnRDb3VudCgpIDwgMikKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNl
cHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAot
ICAgIFN0cmluZyBuYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBTdHJpbmcgbmFtZSA9
IHN0YXRlLmFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IAotICAgIElEQktleVBhdGgga2V5UGF0aCA9IGlkYktleVBhdGhGcm9tVmFsdWUoZXhlYywgZXhl
Yy0+YXJndW1lbnQoMSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBJREJL
ZXlQYXRoIGtleVBhdGggPSBpZGJLZXlQYXRoRnJvbVZhbHVlKCZzdGF0ZSwgc3RhdGUuYXJndW1l
bnQoMSkpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKLSAgICBKU1ZhbHVlIG9wdGlvbnNWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50
KDIpOworICAgIEpTVmFsdWUgb3B0aW9uc1ZhbHVlID0gc3RhdGUuYXJndW1lbnQoMik7CiAgICAg
aWYgKCFvcHRpb25zVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSAmJiAhb3B0aW9uc1ZhbHVlLmlz
T2JqZWN0KCkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCAiTm90IGFuIG9i
amVjdC4iKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgIk5vdCBhbiBv
YmplY3QuIik7CiAKICAgICBib29sIHVuaXF1ZSA9IGZhbHNlOwogICAgIGJvb2wgbXVsdGlFbnRy
eSA9IGZhbHNlOwogICAgIGlmICghb3B0aW9uc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsK
LSAgICAgICAgdW5pcXVlID0gb3B0aW9uc1ZhbHVlLmdldChleGVjLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKGV4ZWMsICJ1bmlxdWUiKSkudG9Cb29sZWFuKGV4ZWMpOwotICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHVuaXF1ZSA9IG9wdGlvbnNWYWx1ZS5nZXQoJnN0
YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInVuaXF1ZSIpKS50b0Jvb2xlYW4o
JnN0YXRlKTsKKyAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICAgICAgbXVsdGlFbnRyeSA9IG9wdGlvbnNWYWx1
ZS5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAibXVsdGlFbnRyeSIpKS50
b0Jvb2xlYW4oZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgbXVsdGlFbnRyeSA9IG9wdGlvbnNWYWx1ZS5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgIm11bHRpRW50cnkiKSkudG9Cb29sZWFuKCZzdGF0ZSk7CisgICAgICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIH0KIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgpLmNyZWF0ZUluZGV4KGNvbnRl
eHQsIG5hbWUsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSwgZWMpLmdldCgpKTsKLSAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUygmc3Rh
dGUsIGdsb2JhbE9iamVjdCgpLCBpbXBsKCkuY3JlYXRlSW5kZXgoY29udGV4dCwgbmFtZSwga2V5
UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5LCBlYykuZ2V0KCkpOworICAgIHNldERPTUV4Y2VwdGlv
bigmc3RhdGUsIGVjKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3Rv
bS5jcHAKaW5kZXggODdiYjI3NzRmMjZlYjk2M2U5NWJhYzIzOTNlODdkM2UwZTJhN2YzMS4uZTI2
YmJlNzhkOWZiYmM0OTIwY2UxZWZjYjRjMzUwZmQ3YTEzMjRiOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3Vz
dG9tLmNwcApAQCAtOTEsMTYgKzkxLDE2IEBAIHN0YXRpYyB2b2lkIHBvcHVsYXRlQ29udGV4dE1l
bnVJdGVtcyhFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCBDb250ZXh0TWVuCiB9CiAj
ZW5kaWYKIAotSlNWYWx1ZSBKU0luc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0NvbnRleHRNZW51
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dD
b250ZXh0TWVudShFeGVjU3RhdGUmIHN0YXRlKQogewogI2lmIEVOQUJMRShDT05URVhUX01FTlVT
KQotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAyKQorICAgIGlmIChzdGF0ZS5hcmd1
bWVudENvdW50KCkgPCAyKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBFdmVu
dCogZXZlbnQgPSBKU0V2ZW50Ojp0b1dyYXBwZWQoZXhlYy0+YXJndW1lbnQoMCkpOworICAgIEV2
ZW50KiBldmVudCA9IEpTRXZlbnQ6OnRvV3JhcHBlZChzdGF0ZS5hcmd1bWVudCgwKSk7CiAKLSAg
ICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkoZXhlYy0+YXJndW1lbnQoMSkpOworICAgIEpTQXJy
YXkqIGFycmF5ID0gYXNBcnJheShzdGF0ZS5hcmd1bWVudCgxKSk7CiAgICAgQ29udGV4dE1lbnUg
bWVudTsKLSAgICBwb3B1bGF0ZUNvbnRleHRNZW51SXRlbXMoZXhlYywgYXJyYXksIG1lbnUpOwor
ICAgIHBvcHVsYXRlQ29udGV4dE1lbnVJdGVtcygmc3RhdGUsIGFycmF5LCBtZW51KTsKIAogI2lm
ICFVU0UoQ1JPU1NfUExBVEZPUk1fQ09OVEVYVF9NRU5VUykKICAgICBWZWN0b3I8Q29udGV4dE1l
bnVJdGVtPiBpdGVtcyA9IGNvbnRleHRNZW51SXRlbVZlY3RvcihtZW51LnBsYXRmb3JtRGVzY3Jp
cHRpb24oKSk7CkBAIC0xMDksNyArMTA5LDcgQEAgSlNWYWx1ZSBKU0luc3BlY3RvckZyb250ZW5k
SG9zdDo6c2hvd0NvbnRleHRNZW51KEV4ZWNTdGF0ZSogZXhlYykKICNlbmRpZgogICAgIGltcGwo
KS5zaG93Q29udGV4dE1lbnUoZXZlbnQsIGl0ZW1zKTsKICNlbHNlCi0gICAgVU5VU0VEX1BBUkFN
KGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAjZW5kaWYKICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TG9jYXRpb25DdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlv
bkN1c3RvbS5jcHAKaW5kZXggMmE2OGJiNWE5OTI5NzQ1MDFjYmQ0YjZjOGZjZDdlZTg1NTU2ZDll
Mi4uMTMxZTI4NzBiZGI1OWQ2MDUzNmE5MTBhNzcxZGQ1MDc3MmMwNmU0OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAKQEAgLTEzMiwxMyAr
MTMyLDEzIEBAIGJvb2wgSlNMb2NhdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hCiAgICAgcmV0dXJuIEJhc2U6OmRlZmlu
ZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJv
d0V4Y2VwdGlvbik7CiB9CiAKLUpTVmFsdWUgSlNMb2NhdGlvbjo6dG9TdHJpbmdGdW5jdGlvbihF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTTG9jYXRpb246OnRvU3RyaW5nRnVuY3Rpb24oRXhl
Y1N0YXRlJiBzdGF0ZSkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCkuZnJhbWUoKTsKLSAg
ICBpZiAoIWZyYW1lIHx8ICFzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoZXhlYywgZnJhbWUpKQor
ICAgIGlmICghZnJhbWUgfHwgIXNob3VsZEFsbG93QWNjZXNzVG9GcmFtZSgmc3RhdGUsIGZyYW1l
KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICByZXR1cm4ganNTdHJpbmdX
aXRoQ2FjaGUoZXhlYywgaW1wbCgpLnRvU3RyaW5nKCkpOworICAgIHJldHVybiBqc1N0cmluZ1dp
dGhDYWNoZSgmc3RhdGUsIGltcGwoKS50b1N0cmluZygpKTsKIH0KIAogYm9vbCBKU0xvY2F0aW9u
UHJvdG90eXBlOjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lZGlhU291cmNlU3RhdGVzQ3VzdG9tLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVkaWFTb3VyY2VTdGF0ZXNDdXN0b20uY3BwCmluZGV4
IGNhMzRhYzEwNjA2ZmY5MDVlMTRjOWY0NjFhNDU2YTIzM2E5NzIyZjkuLjgwMThiMjYzM2I3OGU5
Y2UxZGUyOTEzM2Q5ZDk0ZTY3MDJlYTM1MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTWVkaWFTb3VyY2VTdGF0ZXNDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTWVkaWFTb3VyY2VTdGF0ZXNDdXN0b20uY3BwCkBAIC0zNSw3ICsz
NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNW
YWx1ZSBKU01lZGlhU291cmNlU3RhdGVzOjp3aWR0aChFeGVjU3RhdGUqKSBjb25zdAorSlNWYWx1
ZSBKU01lZGlhU291cmNlU3RhdGVzOjp3aWR0aChFeGVjU3RhdGUmKSBjb25zdAogewogICAgIGlm
ICghaW1wbCgpLmhhc1ZpZGVvU291cmNlKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwpAQCAtNDMsNyArNDMsNyBAQCBKU1ZhbHVlIEpTTWVkaWFTb3VyY2VTdGF0ZXM6OndpZHRoKEV4
ZWNTdGF0ZSopIGNvbnN0CiAgICAgcmV0dXJuIGpzTnVtYmVyKGltcGwoKS53aWR0aCgpKTsKIH0K
IAotSlNWYWx1ZSBKU01lZGlhU291cmNlU3RhdGVzOjpoZWlnaHQoRXhlY1N0YXRlKikgY29uc3QK
K0pTVmFsdWUgSlNNZWRpYVNvdXJjZVN0YXRlczo6aGVpZ2h0KEV4ZWNTdGF0ZSYpIGNvbnN0CiB7
CiAgICAgaWYgKCFpbXBsKCkuaGFzVmlkZW9Tb3VyY2UoKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CkBAIC01MSw3ICs1MSw3IEBAIEpTVmFsdWUgSlNNZWRpYVNvdXJjZVN0YXRlczo6
aGVpZ2h0KEV4ZWNTdGF0ZSopIGNvbnN0CiAgICAgcmV0dXJuIGpzTnVtYmVyKGltcGwoKS5oZWln
aHQoKSk7CiB9CiAKLUpTVmFsdWUgSlNNZWRpYVNvdXJjZVN0YXRlczo6ZnJhbWVSYXRlKEV4ZWNT
dGF0ZSopIGNvbnN0CitKU1ZhbHVlIEpTTWVkaWFTb3VyY2VTdGF0ZXM6OmZyYW1lUmF0ZShFeGVj
U3RhdGUmKSBjb25zdAogewogICAgIGlmICghaW1wbCgpLmhhc1ZpZGVvU291cmNlKCkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtNTksNyArNTksNyBAQCBKU1ZhbHVlIEpTTWVk
aWFTb3VyY2VTdGF0ZXM6OmZyYW1lUmF0ZShFeGVjU3RhdGUqKSBjb25zdAogICAgIHJldHVybiBq
c051bWJlcihpbXBsKCkuZnJhbWVSYXRlKCkpOwogfQogCi1KU1ZhbHVlIEpTTWVkaWFTb3VyY2VT
dGF0ZXM6OmFzcGVjdFJhdGlvKEV4ZWNTdGF0ZSopIGNvbnN0CitKU1ZhbHVlIEpTTWVkaWFTb3Vy
Y2VTdGF0ZXM6OmFzcGVjdFJhdGlvKEV4ZWNTdGF0ZSYpIGNvbnN0CiB7CiAgICAgaWYgKCFpbXBs
KCkuaGFzVmlkZW9Tb3VyY2UoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC02
Nyw3ICs2Nyw3IEBAIEpTVmFsdWUgSlNNZWRpYVNvdXJjZVN0YXRlczo6YXNwZWN0UmF0aW8oRXhl
Y1N0YXRlKikgY29uc3QKICAgICByZXR1cm4ganNOdW1iZXIoaW1wbCgpLmFzcGVjdFJhdGlvKCkp
OwogfQogCi1KU1ZhbHVlIEpTTWVkaWFTb3VyY2VTdGF0ZXM6OmZhY2luZ01vZGUoRXhlY1N0YXRl
KiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU01lZGlhU291cmNlU3RhdGVzOjpmYWNpbmdNb2RlKEV4
ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0CiB7CiAgICAgaWYgKCFpbXBsKCkuaGFzVmlkZW9Tb3VyY2Uo
KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC03NiwxMCArNzYsMTAgQEAgSlNW
YWx1ZSBKU01lZGlhU291cmNlU3RhdGVzOjpmYWNpbmdNb2RlKEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKICAgICBpZiAobW9kZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgIAotICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBpbXBsKCkuZmFjaW5n
TW9kZSgpKTsKKyAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsKCkuZmFj
aW5nTW9kZSgpKTsKIH0KIAotSlNWYWx1ZSBKU01lZGlhU291cmNlU3RhdGVzOjp2b2x1bWUoRXhl
Y1N0YXRlKikgY29uc3QKK0pTVmFsdWUgSlNNZWRpYVNvdXJjZVN0YXRlczo6dm9sdW1lKEV4ZWNT
dGF0ZSYpIGNvbnN0CiB7CiAgICAgaWYgKGltcGwoKS5oYXNWaWRlb1NvdXJjZSgpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAppbmRleCBiZTY0NWMwZWI4MjU4Zjc4NmRkOTQ5
MDZlOTQxOTM1OTliNGM1MDA3Li5jYjg3ZDg5NTFmOTczNGU5YWQwODNkMDNjOTg2MzRjZGZiMDg2
ZWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVu
dEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZl
bnRDdXN0b20uY3BwCkBAIC00NCwxMSArNDQsMTEgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTTWVzc2FnZUV2ZW50OjpkYXRhKEV4ZWNT
dGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgSlNNZXNzYWdlRXZlbnQ6OmRhdGEoRXhlY1N0YXRl
JiBzdGF0ZSkgY29uc3QKIHsKICAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IG1fZGF0YS5n
ZXQoKSkgewogICAgICAgICAvLyBXZSBjYW5ub3QgdXNlIGEgY2FjaGVkIG9iamVjdCBpZiB3ZSBh
cmUgaW4gYSBkaWZmZXJlbnQgd29ybGQgdGhhbiB0aGUgb25lIGl0IHdhcyBjcmVhdGVkIGluLgot
ICAgICAgICBpZiAoIWNhY2hlZFZhbHVlLmlzT2JqZWN0KCkgfHwgJndvcmxkRm9yRE9NT2JqZWN0
KGNhY2hlZFZhbHVlLmdldE9iamVjdCgpKSA9PSAmY3VycmVudFdvcmxkKGV4ZWMpKQorICAgICAg
ICBpZiAoIWNhY2hlZFZhbHVlLmlzT2JqZWN0KCkgfHwgJndvcmxkRm9yRE9NT2JqZWN0KGNhY2hl
ZFZhbHVlLmdldE9iamVjdCgpKSA9PSAmY3VycmVudFdvcmxkKCZzdGF0ZSkpCiAgICAgICAgICAg
ICByZXR1cm4gY2FjaGVkVmFsdWU7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
IH0KQEAgLTY0LDEwICs2NCwxMCBAQCBKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50OjpkYXRhKEV4ZWNT
dGF0ZSogZXhlYykgY29uc3QKICAgICAgICAgICAgIEpTVmFsdWUgZGF0YVZhbHVlID0gc2NyaXB0
VmFsdWUuanNWYWx1ZSgpOwogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgTWVz
c2FnZUV2ZW50cyBkbyBub3QgbGVhayBvYmplY3RzIGluIHRoZWlyIHN0YXRlIHByb3BlcnR5IGFj
cm9zcyBpc29sYXRlZCBET00gd29ybGRzLgogICAgICAgICAgICAgLy8gSWRlYWxseSwgd2Ugd291
bGQgY2hlY2sgdGhhdCB0aGUgd29ybGRzIGhhdmUgZGlmZmVyZW50IHByaXZpbGVnZXMgYnV0IHRo
YXQncyBub3QgcG9zc2libGUgeWV0LgotICAgICAgICAgICAgaWYgKGRhdGFWYWx1ZS5pc09iamVj
dCgpICYmICZ3b3JsZEZvckRPTU9iamVjdChkYXRhVmFsdWUuZ2V0T2JqZWN0KCkpICE9ICZjdXJy
ZW50V29ybGQoZXhlYykpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBldmVudC50cnlTZXJpYWxpemVEYXRhKGV4ZWMpOwor
ICAgICAgICAgICAgaWYgKGRhdGFWYWx1ZS5pc09iamVjdCgpICYmICZ3b3JsZEZvckRPTU9iamVj
dChkYXRhVmFsdWUuZ2V0T2JqZWN0KCkpICE9ICZjdXJyZW50V29ybGQoJnN0YXRlKSkgeworICAg
ICAgICAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1
ZSA9IGV2ZW50LnRyeVNlcmlhbGl6ZURhdGEoJnN0YXRlKTsKICAgICAgICAgICAgICAgICBpZiAo
c2VyaWFsaXplZFZhbHVlKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzZXJpYWxpemVk
VmFsdWUtPmRlc2VyaWFsaXplKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBudWxscHRyKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VyaWFsaXplZFZhbHVlLT5kZXNlcmlhbGl6ZSgmc3Rh
dGUsIGdsb2JhbE9iamVjdCgpLCBudWxscHRyKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpzTnVsbCgpOwogICAgICAgICAgICAgfSBlbHNlCkBA
IC04MCw2NCArODAsNjQgQEAgSlNWYWx1ZSBKU01lc3NhZ2VFdmVudDo6ZGF0YShFeGVjU3RhdGUq
IGV4ZWMpIGNvbnN0CiAgICAgICAgIGlmIChSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBz
ZXJpYWxpemVkVmFsdWUgPSBldmVudC5kYXRhQXNTZXJpYWxpemVkU2NyaXB0VmFsdWUoKSkgewog
ICAgICAgICAgICAgTWVzc2FnZVBvcnRBcnJheSBwb3J0cyA9IGltcGwoKS5wb3J0cygpOwogICAg
ICAgICAgICAgLy8gRklYTUU6IFdoeSBkb2VzIHRoaXMgc3VwcHJlc3MgZXhjZXB0aW9ucz8KLSAg
ICAgICAgICAgIHJlc3VsdCA9IHNlcmlhbGl6ZWRWYWx1ZS0+ZGVzZXJpYWxpemUoZXhlYywgZ2xv
YmFsT2JqZWN0KCksICZwb3J0cywgTm9uVGhyb3dpbmcpOworICAgICAgICAgICAgcmVzdWx0ID0g
c2VyaWFsaXplZFZhbHVlLT5kZXNlcmlhbGl6ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCAmcG9y
dHMsIE5vblRocm93aW5nKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXN1bHQgPSBq
c051bGwoKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE1lc3NhZ2VFdmVudDo6RGF0YVR5
cGVTdHJpbmc6Ci0gICAgICAgIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGV2ZW50
LmRhdGFBc1N0cmluZygpKTsKKyAgICAgICAgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0
YXRlLCBldmVudC5kYXRhQXNTdHJpbmcoKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBN
ZXNzYWdlRXZlbnQ6OkRhdGFUeXBlQmxvYjoKLSAgICAgICAgcmVzdWx0ID0gdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QoKSwgZXZlbnQuZGF0YUFzQmxvYigpKTsKKyAgICAgICAgcmVzdWx0ID0gdG9K
Uygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBldmVudC5kYXRhQXNCbG9iKCkpOwogICAgICAgICBi
cmVhazsKIAogICAgIGNhc2UgTWVzc2FnZUV2ZW50OjpEYXRhVHlwZUFycmF5QnVmZmVyOgotICAg
ICAgICByZXN1bHQgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBldmVudC5kYXRhQXNBcnJh
eUJ1ZmZlcigpKTsKKyAgICAgICAgcmVzdWx0ID0gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgp
LCBldmVudC5kYXRhQXNBcnJheUJ1ZmZlcigpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAg
ICAgLy8gU2F2ZSB0aGUgcmVzdWx0IHNvIHdlIGRvbid0IGhhdmUgdG8gZGVzZXJpYWxpemUgdGhl
IHZhbHVlIGFnYWluLgotICAgIGNvbnN0X2Nhc3Q8SlNNZXNzYWdlRXZlbnQqPih0aGlzKS0+bV9k
YXRhLnNldChleGVjLT52bSgpLCB0aGlzLCByZXN1bHQpOworICAgIGNvbnN0X2Nhc3Q8SlNNZXNz
YWdlRXZlbnQqPih0aGlzKS0+bV9kYXRhLnNldChzdGF0ZS52bSgpLCB0aGlzLCByZXN1bHQpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBKU0M6OkpTVmFsdWUgaGFuZGxlSW5pdE1l
c3NhZ2VFdmVudChKU01lc3NhZ2VFdmVudCoganNFdmVudCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMp
CitzdGF0aWMgSlNDOjpKU1ZhbHVlIGhhbmRsZUluaXRNZXNzYWdlRXZlbnQoSlNNZXNzYWdlRXZl
bnQqIGpzRXZlbnQsIEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBjb25zdCBTdHJpbmcm
IHR5cGVBcmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
Ci0gICAgYm9vbCBjYW5CdWJibGVBcmcgPSBleGVjLT5hcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhl
Yyk7Ci0gICAgYm9vbCBjYW5jZWxhYmxlQXJnID0gZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFu
KGV4ZWMpOwotICAgIGNvbnN0IFN0cmluZyBvcmlnaW5BcmcgPSBleGVjLT5hcmd1bWVudCg0KS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgY29uc3QgU3RyaW5nIGxhc3RFdmVudElk
QXJnID0gZXhlYy0+YXJndW1lbnQoNSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAg
IERPTVdpbmRvdyogc291cmNlQXJnID0gSlNET01XaW5kb3c6OnRvV3JhcHBlZChleGVjLT5hcmd1
bWVudCg2KSk7CisgICAgY29uc3QgU3RyaW5nJiB0eXBlQXJnID0gc3RhdGUuYXJndW1lbnQoMCku
dG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKKyAgICBib29sIGNhbkJ1YmJsZUFyZyA9
IHN0YXRlLmFyZ3VtZW50KDEpLnRvQm9vbGVhbigmc3RhdGUpOworICAgIGJvb2wgY2FuY2VsYWJs
ZUFyZyA9IHN0YXRlLmFyZ3VtZW50KDIpLnRvQm9vbGVhbigmc3RhdGUpOworICAgIGNvbnN0IFN0
cmluZyBvcmlnaW5BcmcgPSBzdGF0ZS5hcmd1bWVudCg0KS50b1N0cmluZygmc3RhdGUpLT52YWx1
ZSgmc3RhdGUpOworICAgIGNvbnN0IFN0cmluZyBsYXN0RXZlbnRJZEFyZyA9IHN0YXRlLmFyZ3Vt
ZW50KDUpLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgRE9NV2luZG93KiBz
b3VyY2VBcmcgPSBKU0RPTVdpbmRvdzo6dG9XcmFwcGVkKHN0YXRlLmFyZ3VtZW50KDYpKTsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZVBvcnRBcnJheT4gbWVzc2FnZVBvcnRzOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckFycmF5PiBhcnJheUJ1ZmZlcnM7Ci0gICAgaWYgKCFl
eGVjLT5hcmd1bWVudCg3KS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgaWYgKCFzdGF0ZS5h
cmd1bWVudCg3KS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAgIG1lc3NhZ2VQb3J0cyA9
IHN0ZDo6bWFrZV91bmlxdWU8TWVzc2FnZVBvcnRBcnJheT4oKTsKICAgICAgICAgYXJyYXlCdWZm
ZXJzID0gc3RkOjptYWtlX3VuaXF1ZTxBcnJheUJ1ZmZlckFycmF5PigpOwotICAgICAgICBmaWxs
TWVzc2FnZVBvcnRBcnJheShleGVjLCBleGVjLT5hcmd1bWVudCg3KSwgKm1lc3NhZ2VQb3J0cywg
KmFycmF5QnVmZmVycyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgZmlsbE1lc3NhZ2VQb3J0QXJyYXkoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDcpLCAqbWVzc2Fn
ZVBvcnRzLCAqYXJyYXlCdWZmZXJzKTsKKyAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQotICAgIERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlIGRhdGFBcmcgPSBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZShleGVjLT52
bSgpLCBleGVjLT5hcmd1bWVudCgzKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRhdGFBcmcgPSBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZShzdGF0ZS52bSgpLCBzdGF0ZS5hcmd1bWVudCgzKSk7CisgICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIE1lc3NhZ2VF
dmVudCYgZXZlbnQgPSBqc0V2ZW50LT5pbXBsKCk7CiAgICAgZXZlbnQuaW5pdE1lc3NhZ2VFdmVu
dCh0eXBlQXJnLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIGRhdGFBcmcsIG9yaWdpbkFy
ZywgbGFzdEV2ZW50SWRBcmcsIHNvdXJjZUFyZywgV1RGOjptb3ZlKG1lc3NhZ2VQb3J0cykpOwot
ICAgIGpzRXZlbnQtPm1fZGF0YS5zZXQoZXhlYy0+dm0oKSwganNFdmVudCwgZGF0YUFyZy5qc1Zh
bHVlKCkpOworICAgIGpzRXZlbnQtPm1fZGF0YS5zZXQoc3RhdGUudm0oKSwganNFdmVudCwgZGF0
YUFyZy5qc1ZhbHVlKCkpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU0M6OkpT
VmFsdWUgSlNNZXNzYWdlRXZlbnQ6OmluaXRNZXNzYWdlRXZlbnQoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMpCitKU0M6OkpTVmFsdWUgSlNNZXNzYWdlRXZlbnQ6OmluaXRNZXNzYWdlRXZlbnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlKQogewotICAgIHJldHVybiBoYW5kbGVJbml0TWVzc2FnZUV2ZW50KHRo
aXMsIGV4ZWMpOworICAgIHJldHVybiBoYW5kbGVJbml0TWVzc2FnZUV2ZW50KHRoaXMsIHN0YXRl
KTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50Ojp3ZWJraXRJbml0TWVzc2FnZUV2
ZW50KEpTQzo6RXhlY1N0YXRlKiBleGVjKQorSlNDOjpKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50Ojp3
ZWJraXRJbml0TWVzc2FnZUV2ZW50KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1
cm4gaGFuZGxlSW5pdE1lc3NhZ2VFdmVudCh0aGlzLCBleGVjKTsKKyAgICByZXR1cm4gaGFuZGxl
SW5pdE1lc3NhZ2VFdmVudCh0aGlzLCBzdGF0ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRD
dXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3Rv
bS5jcHAKaW5kZXggOThhNzRiNTE5MWIyNGM1MmEwOWVmOWVlMjhkMDczNzIwNTFiMzFiZi4uMjM5
ZjQ3YWZkNmRhNWViZTUxOTBlN2NiYjU5M2UzM2JlYmY5MWUxZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAKQEAgLTUyLDEyICs1
MiwxMiBAQCB2b2lkIEpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QocG9ydCk7CiB9
CiAKLUpTQzo6SlNWYWx1ZSBKU01lc3NhZ2VQb3J0Ojpwb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0
ZSogZXhlYykKK0pTQzo6SlNWYWx1ZSBKU01lc3NhZ2VQb3J0Ojpwb3N0TWVzc2FnZShKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIGhhbmRsZVBvc3RNZXNzYWdlKGV4ZWMsICZp
bXBsKCkpOworICAgIHJldHVybiBoYW5kbGVQb3N0TWVzc2FnZShzdGF0ZSwgJmltcGwoKSk7CiB9
CiAKLXZvaWQgZmlsbE1lc3NhZ2VQb3J0QXJyYXkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgTWVzc2FnZVBvcnRBcnJheSYgcG9ydEFycmF5LCBBcnJheUJ1ZmZlckFy
cmF5JiBhcnJheUJ1ZmZlcnMpCit2b2lkIGZpbGxNZXNzYWdlUG9ydEFycmF5KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBNZXNzYWdlUG9ydEFycmF5JiBwb3J0QXJy
YXksIEFycmF5QnVmZmVyQXJyYXkmIGFycmF5QnVmZmVycykKIHsKICAgICAvLyBDb252ZXJ0IGZy
b20gdGhlIHBhc3NlZC1pbiBKUyBhcnJheS1saWtlIG9iamVjdCB0byBhIE1lc3NhZ2VQb3J0QXJy
YXkuCiAgICAgLy8gQWxzbyB2YWxpZGF0ZXMgdGhlIGVsZW1lbnRzIHBlciBzZWN0aW9ucyA0LjEu
MTMgYW5kIDQuMS4xNSBvZiB0aGUgV2ViSURMIHNwZWMgYW5kIHNlY3Rpb24gOC4zLjMgb2YgdGhl
IEhUTUw1IHNwZWMuCkBAIC02OSwxNyArNjksMTcgQEAgdm9pZCBmaWxsTWVzc2FnZVBvcnRBcnJh
eShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlLCBNZXNzYWdlUG9ydEEK
IAogICAgIC8vIFZhbGlkYXRpb24gb2Ygc2VxdWVuY2UgdHlwZXMsIHBlciBXZWJJREwgc3BlYyA0
LjEuMTMuCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKLSAgICBKU09iamVjdCogb2JqZWN0ID0g
dG9KU1NlcXVlbmNlKGV4ZWMsIHZhbHVlLCBsZW5ndGgpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBKU09iamVjdCogb2JqZWN0ID0gdG9KU1NlcXVlbmNlKCZzdGF0ZSwgdmFs
dWUsIGxlbmd0aCk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1
cm47CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwIDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBpKTsKLSAgICAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQo
JnN0YXRlLCBpKTsKKyAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAvLyBWYWxpZGF0aW9uIG9mIG5vbi1udWxsIG9iamVjdHMsIHBl
ciBIVE1MNSBzcGVjIDEwLjMuMy4KICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpIHsKLSAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBJTlZBTElEX1NUQVRFX0VS
Uik7CisgICAgICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBJTlZBTElEX1NUQVRFX0VS
Uik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtODgsNyArODgsNyBAQCB2
b2lkIGZpbGxNZXNzYWdlUG9ydEFycmF5KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIE1lc3NhZ2VQb3J0QQogICAgICAgICBpZiAocG9ydCkgewogICAgICAgICAgICAg
Ly8gQ2hlY2sgZm9yIGR1cGxpY2F0ZSBwb3J0cy4KICAgICAgICAgICAgIGlmIChwb3J0QXJyYXku
Y29udGFpbnMocG9ydCkpIHsKLSAgICAgICAgICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywg
SU5WQUxJRF9TVEFURV9FUlIpOworICAgICAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3Rh
dGUsIElOVkFMSURfU1RBVEVfRVJSKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBwb3J0QXJyYXkuYXBwZW5kKHBvcnQucmVsZWFzZSgpKTsKQEAg
LTk3LDcgKzk3LDcgQEAgdm9pZCBmaWxsTWVzc2FnZVBvcnRBcnJheShKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlLCBNZXNzYWdlUG9ydEEKICAgICAgICAgICAgIGlmIChh
cnJheUJ1ZmZlcikKICAgICAgICAgICAgICAgICBhcnJheUJ1ZmZlcnMuYXBwZW5kKGFycmF5QnVm
ZmVyKTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9y
KGV4ZWMpOworICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmggYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmgKaW5kZXggZTQ1MmJhMWRl
ZDc5MzRiYTIxOWZkNmNkOWFkOTljNzEzNDY3ZmZkZS4uN2JkOWRmMzUxNWY5MzUyMzVjMjkwYThl
MzRiZTUyZDNmMjBlNWQzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNNZXNzYWdlUG9ydEN1c3RvbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TWVzc2FnZVBvcnRDdXN0b20uaApAQCAtNDMsMjIgKzQzLDIyIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggcHVsbHMgdGhlIHZhbHVlcyBvdXQgb2Yg
YSBKUyBzZXF1ZW5jZSBhbmQgaW50byBhIE1lc3NhZ2VQb3J0QXJyYXkuCiAgICAgLy8gQWxzbyB2
YWxpZGF0ZXMgdGhlIGVsZW1lbnRzIHBlciBzZWN0aW9ucyA0LjEuMTMgYW5kIDQuMS4xNSBvZiB0
aGUgV2ViSURMIHNwZWMgYW5kIHNlY3Rpb24gOC4zLjMgb2YgdGhlIEhUTUw1IHNwZWMuCiAgICAg
Ly8gTWF5IGdlbmVyYXRlIGFuIGV4Y2VwdGlvbiB2aWEgdGhlIHBhc3NlZCBFeGVjU3RhdGUuCi0g
ICAgdm9pZCBmaWxsTWVzc2FnZVBvcnRBcnJheShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSwgTWVzc2FnZVBvcnRBcnJheSYsIEFycmF5QnVmZmVyQXJyYXkmKTsKKyAgICB2b2lkIGZpbGxN
ZXNzYWdlUG9ydEFycmF5KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBNZXNzYWdlUG9y
dEFycmF5JiwgQXJyYXlCdWZmZXJBcnJheSYpOwogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRv
IGNvbnZlcnQgZnJvbSBKUyBwb3N0TWVzc2FnZSBhcmd1bWVudHMgdG8gV2ViQ29yZSBwb3N0TWVz
c2FnZSBhcmd1bWVudHMuCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIEpT
Qzo6SlNWYWx1ZSBoYW5kbGVQb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgVCogaW1w
bCkKKyAgICBpbmxpbmUgSlNDOjpKU1ZhbHVlIGhhbmRsZVBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgVCogaW1wbCkKICAgICB7CiAgICAgICAgIE1lc3NhZ2VQb3J0QXJyYXkgcG9y
dEFycmF5OwogICAgICAgICBBcnJheUJ1ZmZlckFycmF5IGFycmF5QnVmZmVyQXJyYXk7Ci0gICAg
ICAgIGZpbGxNZXNzYWdlUG9ydEFycmF5KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpLCBwb3J0QXJy
YXksIGFycmF5QnVmZmVyQXJyYXkpOwotICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBtZXNzYWdlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgZXhlYy0+
YXJndW1lbnQoMCksICZwb3J0QXJyYXksICZhcnJheUJ1ZmZlckFycmF5KTsKLSAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBmaWxsTWVzc2FnZVBvcnRBcnJheShzdGF0
ZSwgc3RhdGUuYXJndW1lbnQoMSksIHBvcnRBcnJheSwgYXJyYXlCdWZmZXJBcnJheSk7CisgICAg
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3NhZ2UgPSBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZSgmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDApLCAmcG9ydEFycmF5LCAm
YXJyYXlCdWZmZXJBcnJheSk7CisgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CiAgICAgICAgIGltcGwtPnBvc3RNZXNzYWdlKG1lc3NhZ2UucmVsZWFzZSgp
LCAmcG9ydEFycmF5LCBlYyk7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Cisg
ICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICAgICAgcmV0dXJuIEpTQzo6
anNVbmRlZmluZWQoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAppbmRleCAyYWYzNTYzOGQyMTFlNjY0NzBmOTU1MmVmYWIz
YmNmZmI1MTdhNTA4Li4zZDVmZTEyNDg2NDg2MzRhNjRhMWQ4OTc1YzRhYzFiYzNkMWJkOWI4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3Bw
CkBAIC00Miw0MSArNDIsNDEgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1KU1ZhbHVlIEpTTmF2aWdhdG9yOjp3ZWJraXRHZXRVc2VyTWVkaWEoRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU05hdmlnYXRvcjo6d2Via2l0R2V0VXNlck1lZGlhKEV4ZWNT
dGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDMpIHsKLSAg
ICAgICAgdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4
ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpIDwgMykgeworICAgICAgICB0aHJv
d1ZNRXJyb3IoJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgRGljdGlvbmFyeSBv
cHRpb25zKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgRGljdGlvbmFyeSBvcHRpb25zKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCkp
OworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAKICAgICBpZiAoIW9wdGlvbnMuaXNPYmplY3QoKSkgewotICAgICAgICB0aHJvd1ZN
RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJGaXJzdCBhcmd1bWVudCBvZiB3ZWJr
aXRHZXRVc2VyTWVkaWEgbXVzdCBiZSBhIHZhbGlkIERpY3Rpb25hcnkiKSk7CisgICAgICAgIHRo
cm93Vk1FcnJvcigmc3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJGaXJzdCBhcmd1bWVu
dCBvZiB3ZWJraXRHZXRVc2VyTWVkaWEgbXVzdCBiZSBhIHZhbGlkIERpY3Rpb25hcnkiKSk7CiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIGlmICghZXhlYy0+YXJn
dW1lbnQoMSkuaXNGdW5jdGlvbigpKSB7Ci0gICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYywg
IkFyZ3VtZW50IDIgKCdzdWNjZXNzQ2FsbGJhY2snKSB0byBOYXZpZ2F0b3Iud2Via2l0R2V0VXNl
ck1lZGlhIG11c3QgYmUgYSBmdW5jdGlvbiIpOworICAgIGlmICghc3RhdGUuYXJndW1lbnQoMSku
aXNGdW5jdGlvbigpKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCAiQXJndW1l
bnQgMiAoJ3N1Y2Nlc3NDYWxsYmFjaycpIHRvIE5hdmlnYXRvci53ZWJraXRHZXRVc2VyTWVkaWEg
bXVzdCBiZSBhIGZ1bmN0aW9uIik7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IH0KIAotICAgIGlmICghZXhlYy0+YXJndW1lbnQoMikuaXNGdW5jdGlvbigpKSB7Ci0gICAgICAg
IHRocm93Vk1UeXBlRXJyb3IoZXhlYywgIkFyZ3VtZW50IDMgKCdlcnJvckNhbGxiYWNrJykgdG8g
TmF2aWdhdG9yLndlYmtpdEdldFVzZXJNZWRpYSBtdXN0IGJlIGEgZnVuY3Rpb24iKTsKKyAgICBp
ZiAoIXN0YXRlLmFyZ3VtZW50KDIpLmlzRnVuY3Rpb24oKSkgeworICAgICAgICB0aHJvd1ZNVHlw
ZUVycm9yKCZzdGF0ZSwgIkFyZ3VtZW50IDMgKCdlcnJvckNhbGxiYWNrJykgdG8gTmF2aWdhdG9y
LndlYmtpdEdldFVzZXJNZWRpYSBtdXN0IGJlIGEgZnVuY3Rpb24iKTsKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgaWYgKCFpbXBsKCkuZnJhbWUoKSkgewotICAg
ICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRFRF9FUlIpOworICAgICAgICBz
ZXRET01FeGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VSUik7CiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIHByb3Rl
Y3QgdGhlIGNvbnRleHQgKGkuZS4gZG9jdW1lbnQpIGhlcmUgYXMgVXNlck1lZGlhUmVxdWVzdCBp
cyBvYnNlcnZpbmcgY29udGV4dCBkZXN0cnVjdGlvbiBhbmQgd2lsbCBjaGVjayB2YWxpZGl0eSBi
ZWZvcmUgcmVzb2x2aW5nL3JlamVjdGluZyBwcm9taXNlLgogICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IGltcGwoKS5mcmFtZSgpLT5kb2N1bWVudCgpOwogCi0gICAgUmVmUHRyPE5hdmlnYXRvclVz
ZXJNZWRpYVN1Y2Nlc3NDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrID0gSlNOYXZpZ2F0b3JVc2Vy
TWVkaWFTdWNjZXNzQ2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChleGVjLT51bmNoZWNrZWRBcmd1
bWVudCgxKSksIGdsb2JhbE9iamVjdCgpKTsKKyAgICBSZWZQdHI8TmF2aWdhdG9yVXNlck1lZGlh
U3VjY2Vzc0NhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2sgPSBKU05hdmlnYXRvclVzZXJNZWRpYVN1
Y2Nlc3NDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEp
KSwgZ2xvYmFsT2JqZWN0KCkpOwogICAgIGF1dG8gcmVzb2x2ZUNhbGxiYWNrID0gW3N1Y2Nlc3ND
YWxsYmFjaywgZG9jdW1lbnRdKGNvbnN0IFJlZlB0cjxNZWRpYVN0cmVhbT4mIHN0cmVhbSkgbXV0
YWJsZSB7CiAgICAgICAgIFJlZlB0cjxNZWRpYVN0cmVhbT4gcHJvdGVjdGVkU3RyZWFtID0gc3Ry
ZWFtOwogICAgICAgICBkb2N1bWVudC0+cG9zdFRhc2soW3N1Y2Nlc3NDYWxsYmFjaywgcHJvdGVj
dGVkU3RyZWFtXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgewpAQCAtODQsNyArODQsNyBAQCBK
U1ZhbHVlIEpTTmF2aWdhdG9yOjp3ZWJraXRHZXRVc2VyTWVkaWEoRXhlY1N0YXRlKiBleGVjKQog
ICAgICAgICB9KTsKICAgICB9OwogCi0gICAgUmVmUHRyPE5hdmlnYXRvclVzZXJNZWRpYUVycm9y
Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2sgPSBKU05hdmlnYXRvclVzZXJNZWRpYUVycm9yQ2FsbGJh
Y2s6OmNyZWF0ZShhc09iamVjdChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKSksIGdsb2JhbE9i
amVjdCgpKTsKKyAgICBSZWZQdHI8TmF2aWdhdG9yVXNlck1lZGlhRXJyb3JDYWxsYmFjaz4gZXJy
b3JDYWxsYmFjayA9IEpTTmF2aWdhdG9yVXNlck1lZGlhRXJyb3JDYWxsYmFjazo6Y3JlYXRlKGFz
T2JqZWN0KHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpKSwgZ2xvYmFsT2JqZWN0KCkpOwogICAg
IGF1dG8gcmVqZWN0Q2FsbGJhY2sgPSBbZXJyb3JDYWxsYmFjaywgZG9jdW1lbnRdKGNvbnN0IFJl
ZlB0cjxOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvcj4mIGVycm9yKSBtdXRhYmxlIHsKICAgICAgICAg
UmVmUHRyPE5hdmlnYXRvclVzZXJNZWRpYUVycm9yPiBwcm90ZWN0ZWRFcnJvciA9IGVycm9yOwog
ICAgICAgICBkb2N1bWVudC0+cG9zdFRhc2soW2Vycm9yQ2FsbGJhY2ssIHByb3RlY3RlZEVycm9y
XShTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgewpAQCAtOTQsNyArOTQsNyBAQCBKU1ZhbHVlIEpT
TmF2aWdhdG9yOjp3ZWJraXRHZXRVc2VyTWVkaWEoRXhlY1N0YXRlKiBleGVjKQogCiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgVXNlck1lZGlhUmVxdWVzdDo6c3RhcnQoZG9jdW1lbnQs
IG9wdGlvbnMsIE1lZGlhRGV2aWNlczo6UHJvbWlzZShXVEY6Om1vdmUocmVzb2x2ZUNhbGxiYWNr
KSwgV1RGOjptb3ZlKHJlamVjdENhbGxiYWNrKSksIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNOb2RlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1
c3RvbS5jcHAKaW5kZXggYWVhYzA4N2Q5ZGNmYTUxMTA3OTNkMmZmMmM5YWZjMjNlMTJiODE1Mi4u
ZGVlZTY3NWE5MjUxMjEwNTRmMTcyMzI3ZTUzNmFhNGRmOGU1Zjc1OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCkBAIC0xMTMsNDMgKzExMyw0MyBAQCBi
b29sIEpTTm9kZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkpTQ2VsbCYg
Y2VsbCwgdm9pZCosIFNsb3RWaXNpdAogICAgIHJldHVybiBpc1JlYWNoYWJsZUZyb21ET00oanNO
b2RlLmltcGwoKSwgdmlzaXRvcik7CiB9CiAKLUpTVmFsdWUgSlNOb2RlOjppbnNlcnRCZWZvcmUo
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU05vZGU6Omluc2VydEJlZm9yZShFeGVjU3RhdGUm
IHN0YXRlKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGJvb2wgb2sgPSBpbXBs
KCkuaW5zZXJ0QmVmb3JlKEpTTm9kZTo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDApKSwgSlNO
b2RlOjp0b1dyYXBwZWQoZXhlYy0+YXJndW1lbnQoMSkpLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIGVjKTsKKyAgICBib29sIG9rID0gaW1wbCgpLmluc2VydEJlZm9yZShKU05vZGU6
OnRvV3JhcHBlZChzdGF0ZS5hcmd1bWVudCgwKSksIEpTTm9kZTo6dG9XcmFwcGVkKHN0YXRlLmFy
Z3VtZW50KDEpKSwgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICBp
ZiAob2spCi0gICAgICAgIHJldHVybiBleGVjLT5hcmd1bWVudCgwKTsKKyAgICAgICAgcmV0dXJu
IHN0YXRlLmFyZ3VtZW50KDApOwogICAgIHJldHVybiBqc051bGwoKTsKIH0KIAotSlNWYWx1ZSBK
U05vZGU6OnJlcGxhY2VDaGlsZChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTTm9kZTo6cmVw
bGFjZUNoaWxkKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgYm9vbCBvayA9IGltcGwoKS5yZXBsYWNlQ2hpbGQoSlNOb2RlOjp0b1dyYXBwZWQoZXhl
Yy0+YXJndW1lbnQoMCkpLCBKU05vZGU6OnRvV3JhcHBlZChleGVjLT5hcmd1bWVudCgxKSksIGVj
KTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIGJvb2wgb2sgPSBpbXBsKCku
cmVwbGFjZUNoaWxkKEpTTm9kZTo6dG9XcmFwcGVkKHN0YXRlLmFyZ3VtZW50KDApKSwgSlNOb2Rl
Ojp0b1dyYXBwZWQoc3RhdGUuYXJndW1lbnQoMSkpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9u
KCZzdGF0ZSwgZWMpOwogICAgIGlmIChvaykKLSAgICAgICAgcmV0dXJuIGV4ZWMtPmFyZ3VtZW50
KDEpOworICAgICAgICByZXR1cm4gc3RhdGUuYXJndW1lbnQoMSk7CiAgICAgcmV0dXJuIGpzTnVs
bCgpOwogfQogCi1KU1ZhbHVlIEpTTm9kZTo6cmVtb3ZlQ2hpbGQoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU05vZGU6OnJlbW92ZUNoaWxkKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYm9vbCBvayA9IGltcGwoKS5yZW1vdmVDaGlsZChKU05v
ZGU6OnRvV3JhcHBlZChleGVjLT5hcmd1bWVudCgwKSksIGVjKTsKLSAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpOworICAgIGJvb2wgb2sgPSBpbXBsKCkucmVtb3ZlQ2hpbGQoSlNOb2RlOjp0
b1dyYXBwZWQoc3RhdGUuYXJndW1lbnQoMCkpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZz
dGF0ZSwgZWMpOwogICAgIGlmIChvaykKLSAgICAgICAgcmV0dXJuIGV4ZWMtPmFyZ3VtZW50KDAp
OworICAgICAgICByZXR1cm4gc3RhdGUuYXJndW1lbnQoMCk7CiAgICAgcmV0dXJuIGpzTnVsbCgp
OwogfQogCi1KU1ZhbHVlIEpTTm9kZTo6YXBwZW5kQ2hpbGQoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU05vZGU6OmFwcGVuZENoaWxkKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgYm9vbCBvayA9IGltcGwoKS5hcHBlbmRDaGlsZChKU05vZGU6
OnRvV3JhcHBlZChleGVjLT5hcmd1bWVudCgwKSksIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgZWMpOworICAgIGJvb2wgb2sgPSBpbXBsKCkuYXBwZW5kQ2hpbGQoSlNOb2RlOjp0b1dy
YXBwZWQoc3RhdGUuYXJndW1lbnQoMCkpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0
ZSwgZWMpOwogICAgIGlmIChvaykKLSAgICAgICAgcmV0dXJuIGV4ZWMtPmFyZ3VtZW50KDApOwor
ICAgICAgICByZXR1cm4gc3RhdGUuYXJndW1lbnQoMCk7CiAgICAgcmV0dXJuIGpzTnVsbCgpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09zY2lsbGF0b3JO
b2RlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTT3NjaWxsYXRvck5v
ZGVDdXN0b20uY3BwCmluZGV4IDAyYzJhYmUyNWU1NzgxNTg1MTEzYzY2NWU5ZWY4NzY3OGY1Y2Q2
MTIuLjk4Yzg4MTQ5ZjM5ZTJiMGNiYTgxZDM1MmU1YjliZGIyOTA1Y2IyOTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTT3NjaWxsYXRvck5vZGVDdXN0b20uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTT3NjaWxsYXRvck5vZGVDdXN0b20uY3Bw
CkBAIC0zNywyOCArMzcsMjggQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi12b2lkIEpTT3NjaWxsYXRvck5vZGU6OnNldFR5cGUoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU09zY2lsbGF0b3JOb2RlOjpzZXRUeXBlKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgT3NjaWxsYXRvck5vZGUmIGltcCA9IGlt
cGwoKTsKIAogI2lmIEVOQUJMRShMRUdBQ1lfV0VCX0FVRElPKQogICAgIGlmICh2YWx1ZS5pc051
bWJlcigpKSB7Ci0gICAgICAgIHVpbnQzMl90IHR5cGUgPSB2YWx1ZS50b1VJbnQzMihleGVjKTsK
KyAgICAgICAgdWludDMyX3QgdHlwZSA9IHZhbHVlLnRvVUludDMyKCZzdGF0ZSk7CiAgICAgICAg
IGlmICghaW1wLnNldFR5cGUodHlwZSkpCi0gICAgICAgICAgICBleGVjLT52bSgpLnRocm93RXhj
ZXB0aW9uKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiSWxsZWdhbCBPc2NpbGxhdG9yTm9k
ZSB0eXBlIikpOworICAgICAgICAgICAgc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUs
IGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJJbGxlZ2FsIE9zY2lsbGF0b3JOb2RlIHR5cGUiKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKIAogICAgIGlmICh2YWx1ZS5pc1N0cmlu
ZygpKSB7Ci0gICAgICAgIFN0cmluZyB0eXBlID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOworICAgICAgICBTdHJpbmcgdHlwZSA9IHZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZh
bHVlKCZzdGF0ZSk7CiAgICAgICAgIGlmICh0eXBlID09ICJzaW5lIiB8fCB0eXBlID09ICJzcXVh
cmUiIHx8IHR5cGUgPT0gInNhd3Rvb3RoIiB8fCB0eXBlID09ICJ0cmlhbmdsZSIpIHsKICAgICAg
ICAgICAgIGltcC5zZXRUeXBlKHR5cGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgfQogICAgIAotICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRl
VHlwZUVycm9yKGV4ZWMsICJJbGxlZ2FsIE9zY2lsbGF0b3JOb2RlIHR5cGUiKSk7CisgICAgc3Rh
dGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJJ
bGxlZ2FsIE9zY2lsbGF0b3JOb2RlIHR5cGUiKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFubmVyTm9kZUN1
c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Bhbm5lck5vZGVDdXN0b20u
Y3BwCmluZGV4IDA1YWFiNjk4Y2Q1OTRmM2NhMmEzYjg4MmVjNWUzNzM3ZDFkZjExYjUuLjg2YzAz
ZWQzZmI4OTI1OWFjZjk4Y2UzMzJhNjkyNDI4N2VlM2IwMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFubmVyTm9kZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNQYW5uZXJOb2RlQ3VzdG9tLmNwcApAQCAtMzcsNTIgKzM3LDUy
IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBK
U1Bhbm5lck5vZGU6OnNldFBhbm5pbmdNb2RlbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFs
dWUpCit2b2lkIEpTUGFubmVyTm9kZTo6c2V0UGFubmluZ01vZGVsKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgUGFubmVyTm9kZSYgaW1wID0gaW1wbCgpOwogCiAjaWYg
RU5BQkxFKExFR0FDWV9XRUJfQVVESU8pCiAgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpIHsKLSAg
ICAgICAgdWludDMyX3QgbW9kZWwgPSB2YWx1ZS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgdWlu
dDMyX3QgbW9kZWwgPSB2YWx1ZS50b1VJbnQzMigmc3RhdGUpOwogICAgICAgICBpZiAoIWltcC5z
ZXRQYW5uaW5nTW9kZWwobW9kZWwpKQotICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2Vw
dGlvbihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIklsbGVnYWwgcGFubmluZ01vZGVsIikp
OworICAgICAgICAgICAgc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZVR5
cGVFcnJvcigmc3RhdGUsICJJbGxlZ2FsIHBhbm5pbmdNb2RlbCIpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICNlbmRpZgogCiAgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpIHsKLSAgICAgICAg
U3RyaW5nIG1vZGVsID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgICAg
ICBTdHJpbmcgbW9kZWwgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwog
ICAgICAgICBpZiAobW9kZWwgPT0gImVxdWFscG93ZXIiIHx8IG1vZGVsID09ICJIUlRGIiB8fCBt
b2RlbCA9PSAic291bmRmaWVsZCIpIHsKICAgICAgICAgICAgIGltcC5zZXRQYW5uaW5nTW9kZWwo
bW9kZWwpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJJ
bGxlZ2FsIHBhbm5pbmdNb2RlbCIpKTsKKyAgICBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZz
dGF0ZSwgY3JlYXRlVHlwZUVycm9yKCZzdGF0ZSwgIklsbGVnYWwgcGFubmluZ01vZGVsIikpOwog
fQogCi12b2lkIEpTUGFubmVyTm9kZTo6c2V0RGlzdGFuY2VNb2RlbChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgdmFsdWUpCit2b2lkIEpTUGFubmVyTm9kZTo6c2V0RGlzdGFuY2VNb2RlbChFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIFBhbm5lck5vZGUmIGltcCA9IGlt
cGwoKTsKIAogI2lmIEVOQUJMRShMRUdBQ1lfV0VCX0FVRElPKQogICAgIGlmICh2YWx1ZS5pc051
bWJlcigpKSB7Ci0gICAgICAgIHVpbnQzMl90IG1vZGVsID0gdmFsdWUudG9VSW50MzIoZXhlYyk7
CisgICAgICAgIHVpbnQzMl90IG1vZGVsID0gdmFsdWUudG9VSW50MzIoJnN0YXRlKTsKICAgICAg
ICAgaWYgKCFpbXAuc2V0RGlzdGFuY2VNb2RlbChtb2RlbCkpCi0gICAgICAgICAgICBleGVjLT52
bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiSWxsZWdhbCBk
aXN0YW5jZU1vZGVsIikpOworICAgICAgICAgICAgc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigm
c3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJJbGxlZ2FsIGRpc3RhbmNlTW9kZWwiKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKIAogICAgIGlmICh2YWx1ZS5pc1N0cmlu
ZygpKSB7Ci0gICAgICAgIFN0cmluZyBtb2RlbCA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKKyAgICAgICAgU3RyaW5nIG1vZGVsID0gdmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+
dmFsdWUoJnN0YXRlKTsKICAgICAgICAgaWYgKG1vZGVsID09ICJsaW5lYXIiIHx8IG1vZGVsID09
ICJpbnZlcnNlIiB8fCBtb2RlbCA9PSAiZXhwb25lbnRpYWwiKSB7CiAgICAgICAgICAgICBpbXAu
c2V0RGlzdGFuY2VNb2RlbChtb2RlbCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICB9CiAgICAgCi0gICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVU
eXBlRXJyb3IoZXhlYywgIklsbGVnYWwgZGlzdGFuY2VNb2RlbCIpKTsKKyAgICBzdGF0ZS52bSgp
LnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlVHlwZUVycm9yKCZzdGF0ZSwgIklsbGVnYWwg
ZGlzdGFuY2VNb2RlbCIpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAKaW5k
ZXggNTAyZTQ4YmZhYThmM2FlOTAzMWI4ZmEwNGFmOGEwMDJjM2E1M2JhNS4uNTVmZTk0YmQ5ZGZl
ZmU2ZDIwZTQxN2MzMjcyZmVmNTA5ZWI2NDNmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1BvcFN0YXRlRXZlbnRDdXN0b20uY3BwCkBAIC00MCwxOCArNDAsMTgg
QEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gU2F2ZSB0
aGUgc3RhdGUgdmFsdWUgdG8gdGhlIG1fc3RhdGUgbWVtYmVyIG9mIGEgSlNQb3BTdGF0ZUV2ZW50
LCBhbmQgcmV0dXJuIGl0LCBmb3IgY29udmVuaWVuY2UuCi1zdGF0aWMgY29uc3QgSlNWYWx1ZSYg
Y2FjaGVTdGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTUG9wU3RhdGVFdmVudCogZXZlbnQsIGNvbnN0
IEpTVmFsdWUmIHN0YXRlKQorc3RhdGljIGNvbnN0IEpTVmFsdWUmIGNhY2hlU3RhdGUoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNQb3BTdGF0ZUV2ZW50KiBldmVudCwgY29uc3QgSlNWYWx1ZSYgZXZlbnRT
dGF0ZSkKIHsKLSAgICBldmVudC0+bV9zdGF0ZS5zZXQoZXhlYy0+dm0oKSwgZXZlbnQsIHN0YXRl
KTsKLSAgICByZXR1cm4gc3RhdGU7CisgICAgZXZlbnQtPm1fc3RhdGUuc2V0KHN0YXRlLnZtKCks
IGV2ZW50LCBldmVudFN0YXRlKTsKKyAgICByZXR1cm4gZXZlbnRTdGF0ZTsKIH0KIAotSlNWYWx1
ZSBKU1BvcFN0YXRlRXZlbnQ6OnN0YXRlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUg
SlNQb3BTdGF0ZUV2ZW50OjpzdGF0ZShFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewogICAgIEpT
VmFsdWUgY2FjaGVkVmFsdWUgPSBtX3N0YXRlLmdldCgpOwogICAgIGlmICghY2FjaGVkVmFsdWUu
aXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIFdlIGNhbm5vdCB1c2UgYSBjYWNoZWQgb2JqZWN0IGlm
IHdlIGFyZSBpbiBhIGRpZmZlcmVudCB3b3JsZCB0aGFuIHRoZSBvbmUgaXQgd2FzIGNyZWF0ZWQg
aW4uCi0gICAgICAgIGlmICghY2FjaGVkVmFsdWUuaXNPYmplY3QoKSB8fCAmd29ybGRGb3JET01P
YmplY3QoY2FjaGVkVmFsdWUuZ2V0T2JqZWN0KCkpID09ICZjdXJyZW50V29ybGQoZXhlYykpCisg
ICAgICAgIGlmICghY2FjaGVkVmFsdWUuaXNPYmplY3QoKSB8fCAmd29ybGRGb3JET01PYmplY3Qo
Y2FjaGVkVmFsdWUuZ2V0T2JqZWN0KCkpID09ICZjdXJyZW50V29ybGQoJnN0YXRlKSkKICAgICAg
ICAgICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgfQpAQCAtNjEsMjAgKzYxLDIwIEBAIEpTVmFsdWUgSlNQb3BTdGF0ZUV2ZW50OjpzdGF0
ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgaWYgKCFldmVudC5zdGF0ZSgpLmhhc05vVmFs
dWUoKSkgewogICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSBhIFBvcFN0YXRlRXZlbnQg
ZG9lcyBub3QgbGVhayBvYmplY3RzIGluIGl0cyBzdGF0ZSBwcm9wZXJ0eSBhY3Jvc3MgaXNvbGF0
ZWQgRE9NIHdvcmxkcy4KICAgICAgICAgLy8gSWRlYWxseSwgd2Ugd291bGQgY2hlY2sgdGhhdCB0
aGUgd29ybGRzIGhhdmUgZGlmZmVyZW50IHByaXZpbGVnZXMgYnV0IHRoYXQncyBub3QgcG9zc2li
bGUgeWV0LgotICAgICAgICBKU1ZhbHVlIHN0YXRlID0gZXZlbnQuc3RhdGUoKS5qc1ZhbHVlKCk7
Ci0gICAgICAgIGlmIChzdGF0ZS5pc09iamVjdCgpICYmICZ3b3JsZEZvckRPTU9iamVjdChzdGF0
ZS5nZXRPYmplY3QoKSkgIT0gJmN1cnJlbnRXb3JsZChleGVjKSkgewotICAgICAgICAgICAgaWYg
KFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IGV2ZW50LnRy
eVNlcmlhbGl6ZVN0YXRlKGV4ZWMpKQotICAgICAgICAgICAgICAgIHN0YXRlID0gc2VyaWFsaXpl
ZFZhbHVlLT5kZXNlcmlhbGl6ZShleGVjLCBnbG9iYWxPYmplY3QoKSwgbnVsbHB0cik7CisgICAg
ICAgIEpTVmFsdWUgZXZlbnRTdGF0ZSA9IGV2ZW50LnN0YXRlKCkuanNWYWx1ZSgpOworICAgICAg
ICBpZiAoZXZlbnRTdGF0ZS5pc09iamVjdCgpICYmICZ3b3JsZEZvckRPTU9iamVjdChldmVudFN0
YXRlLmdldE9iamVjdCgpKSAhPSAmY3VycmVudFdvcmxkKCZzdGF0ZSkpIHsKKyAgICAgICAgICAg
IGlmIChSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBldmVu
dC50cnlTZXJpYWxpemVTdGF0ZSgmc3RhdGUpKQorICAgICAgICAgICAgICAgIGV2ZW50U3RhdGUg
PSBzZXJpYWxpemVkVmFsdWUtPmRlc2VyaWFsaXplKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIG51
bGxwdHIpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0YXRlID0ganNOdWxs
KCk7CisgICAgICAgICAgICAgICAgZXZlbnRTdGF0ZSA9IGpzTnVsbCgpOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICByZXR1cm4gY2FjaGVTdGF0ZShleGVjLCBjb25zdF9jYXN0PEpTUG9w
U3RhdGVFdmVudCo+KHRoaXMpLCBzdGF0ZSk7CisgICAgICAgIHJldHVybiBjYWNoZVN0YXRlKHN0
YXRlLCBjb25zdF9jYXN0PEpTUG9wU3RhdGVFdmVudCo+KHRoaXMpLCBldmVudFN0YXRlKTsKICAg
ICB9CiAgICAgCiAgICAgSGlzdG9yeSogaGlzdG9yeSA9IGV2ZW50Lmhpc3RvcnkoKTsKICAgICBp
ZiAoIWhpc3RvcnkgfHwgIWV2ZW50LnNlcmlhbGl6ZWRTdGF0ZSgpKQotICAgICAgICByZXR1cm4g
Y2FjaGVTdGF0ZShleGVjLCBjb25zdF9jYXN0PEpTUG9wU3RhdGVFdmVudCo+KHRoaXMpLCBqc051
bGwoKSk7CisgICAgICAgIHJldHVybiBjYWNoZVN0YXRlKHN0YXRlLCBjb25zdF9jYXN0PEpTUG9w
U3RhdGVFdmVudCo+KHRoaXMpLCBqc051bGwoKSk7CiAKICAgICAvLyBUaGVyZSdzIG5vIGNhY2hl
ZCB2YWx1ZSBmcm9tIGEgcHJldmlvdXMgaW52b2NhdGlvbiwgbm9yIGEgc3RhdGUgdmFsdWUgd2Fz
IHByb3ZpZGVkIGJ5IHRoZQogICAgIC8vIGV2ZW50LCBidXQgdGhlcmUgaXMgYSBoaXN0b3J5IG9i
amVjdCwgc28gZmlyc3Qgd2UgbmVlZCB0byBzZWUgaWYgdGhlIHN0YXRlIG9iamVjdCBoYXMgYmVl
bgpAQCAtODYsMTIgKzg2LDEyIEBAIEpTVmFsdWUgSlNQb3BTdGF0ZUV2ZW50OjpzdGF0ZShFeGVj
U3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgSlNWYWx1ZSByZXN1bHQ7CiAKICAgICBpZiAoaXNTYW1l
U3RhdGUpIHsKLSAgICAgICAgSlNIaXN0b3J5KiBqc0hpc3RvcnkgPSBqc0Nhc3Q8SlNIaXN0b3J5
Kj4odG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaGlzdG9yeSkuYXNDZWxsKCkpOwotICAgICAg
ICByZXN1bHQgPSBqc0hpc3RvcnktPnN0YXRlKGV4ZWMpOworICAgICAgICBKU0hpc3RvcnkqIGpz
SGlzdG9yeSA9IGpzQ2FzdDxKU0hpc3RvcnkqPih0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCks
IGhpc3RvcnkpLmFzQ2VsbCgpKTsKKyAgICAgICAgcmVzdWx0ID0ganNIaXN0b3J5LT5zdGF0ZShz
dGF0ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGV2ZW50LnNlcmlhbGl6ZWRTdGF0
ZSgpLT5kZXNlcmlhbGl6ZShleGVjLCBnbG9iYWxPYmplY3QoKSwgMCk7CisgICAgICAgIHJlc3Vs
dCA9IGV2ZW50LnNlcmlhbGl6ZWRTdGF0ZSgpLT5kZXNlcmlhbGl6ZSgmc3RhdGUsIGdsb2JhbE9i
amVjdCgpLCAwKTsKIAotICAgIHJldHVybiBjYWNoZVN0YXRlKGV4ZWMsIGNvbnN0X2Nhc3Q8SlNQ
b3BTdGF0ZUV2ZW50Kj4odGhpcyksIHJlc3VsdCk7CisgICAgcmV0dXJuIGNhY2hlU3RhdGUoc3Rh
dGUsIGNvbnN0X2Nhc3Q8SlNQb3BTdGF0ZUV2ZW50Kj4odGhpcyksIHJlc3VsdCk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTUmVhZGFibGVTdHJlYW1DdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNSZWFkYWJsZVN0cmVhbUN1c3RvbS5jcHAKaW5kZXggMzQ4ZDE2YjJmZWJlNzk4N2QyZGQ2
NmY1Y2M4NjY1ZjVhN2MwZWU0YS4uOWNmMDk2YmFiYTYyMDgwNWMxNTUxZGM5YjVlYmNiYTlkY2E0
ZTMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0
cmVhbUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJs
ZVN0cmVhbUN1c3RvbS5jcHAKQEAgLTQ3LDE2ICs0NywxNiBAQCB1c2luZyBuYW1lc3BhY2UgSlND
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNSZWFkYWJsZVN0cmVhbTo6cGlw
ZVRvKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNSZWFkYWJsZVN0cmVhbTo6cGlwZVRvKEV4
ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSBlcnJvciA9IGNyZWF0ZUVycm9yKGV4ZWMs
IEFTQ0lJTGl0ZXJhbCgicGlwZVRvIGlzIG5vdCBpbXBsZW1lbnRlZCIpKTsKLSAgICByZXR1cm4g
ZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBlcnJvcik7CisgICAgSlNWYWx1ZSBlcnJv
ciA9IGNyZWF0ZUVycm9yKCZzdGF0ZSwgQVNDSUlMaXRlcmFsKCJwaXBlVG8gaXMgbm90IGltcGxl
bWVudGVkIikpOworICAgIHJldHVybiBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwg
ZXJyb3IpOwogfQogCi1KU1ZhbHVlIEpTUmVhZGFibGVTdHJlYW06OnBpcGVUaHJvdWdoKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNSZWFkYWJsZVN0cmVhbTo6cGlwZVRocm91Z2goRXhlY1N0
YXRlJiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIGVycm9yID0gY3JlYXRlRXJyb3IoZXhlYywgQVND
SUlMaXRlcmFsKCJwaXBlVGhyb3VnaCBpcyBub3QgaW1wbGVtZW50ZWQiKSk7Ci0gICAgcmV0dXJu
IGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXJyb3IpOworICAgIEpTVmFsdWUgZXJy
b3IgPSBjcmVhdGVFcnJvcigmc3RhdGUsIEFTQ0lJTGl0ZXJhbCgicGlwZVRocm91Z2ggaXMgbm90
IGltcGxlbWVudGVkIikpOworICAgIHJldHVybiBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZz
dGF0ZSwgZXJyb3IpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtUmVhZGVyQ3VzdG9tLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1SZWFkZXJDdXN0
b20uY3BwCmluZGV4IDA2M2FjY2IwNzZjODY2ZDdhOGZkZjZlMDRkNDBmZWQxZTQ0MWQwMTkuLjc1
NjQyZjM1YjdkYTZjYzNkOGYzNTU4YjQyZjk0MjNjYjZmOWExYWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1SZWFkZXJDdXN0b20uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1SZWFkZXJDdXN0
b20uY3BwCkBAIC00NCwxMiArNDQsMTIgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTUmVhZGFibGVTdHJlYW1SZWFkZXI6OmNsb3NlZChF
eGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTUmVhZGFibGVTdHJlYW1SZWFkZXI6OmNs
b3NlZChFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewogICAgIGlmICghbV9jbG9zZWQpIHsKLSAg
ICAgICAgSlNQcm9taXNlRGVmZXJyZWQqIGNsb3NlZFByb21pc2UgPSBKU1Byb21pc2VEZWZlcnJl
ZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCgpKTsKLSAgICAgICAgY29uc3RfY2FzdDxKU1Jl
YWRhYmxlU3RyZWFtUmVhZGVyKj4odGhpcyktPm1fY2xvc2VkLnNldChleGVjLT52bSgpLCB0aGlz
LCBjbG9zZWRQcm9taXNlLT5wcm9taXNlKCkpOwotICAgICAgICBpbXBsKCkuY2xvc2VkKERlZmVy
cmVkV3JhcHBlcihleGVjLCBnbG9iYWxPYmplY3QoKSwgY2xvc2VkUHJvbWlzZSkpOworICAgICAg
ICBKU1Byb21pc2VEZWZlcnJlZCogY2xvc2VkUHJvbWlzZSA9IEpTUHJvbWlzZURlZmVycmVkOjpj
cmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSk7CisgICAgICAgIGNvbnN0X2Nhc3Q8SlNSZWFk
YWJsZVN0cmVhbVJlYWRlcio+KHRoaXMpLT5tX2Nsb3NlZC5zZXQoc3RhdGUudm0oKSwgdGhpcywg
Y2xvc2VkUHJvbWlzZS0+cHJvbWlzZSgpKTsKKyAgICAgICAgaW1wbCgpLmNsb3NlZChEZWZlcnJl
ZFdyYXBwZXIoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgY2xvc2VkUHJvbWlzZSkpOwogICAgIH0K
ICAgICByZXR1cm4gbV9jbG9zZWQuZ2V0KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcAppbmRleCA4
YzllYjhmOWMxOWY5MGEwMGEzNmRmNTM1Zjk5M2JhYzdhMTNlYmViLi40OWEwZWZkYzQ1ODVjZDI1
ZDFkMmU0NWFjMTM4NzM0MzNmOTUyYTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAKQEAgLTM5LDIw
ICszOSwyMCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUpTVmFsdWUgSlNTUUxSZXN1bHRTZXRSb3dMaXN0OjppdGVtKEV4ZWNTdGF0ZSogZXhlYykKK0pT
VmFsdWUgSlNTUUxSZXN1bHRTZXRSb3dMaXN0OjppdGVtKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAg
ICAgYm9vbCBpbmRleE9rOwotICAgIGludCBpbmRleCA9IGZpbml0ZUludDMyVmFsdWUoZXhlYy0+
YXJndW1lbnQoMCksIGV4ZWMsIGluZGV4T2spOworICAgIGludCBpbmRleCA9IGZpbml0ZUludDMy
VmFsdWUoc3RhdGUuYXJndW1lbnQoMCksICZzdGF0ZSwgaW5kZXhPayk7CiAgICAgaWYgKCFpbmRl
eE9rKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7
CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogICAgIGlmIChpbmRleCA8IDAgfHwg
KHVuc2lnbmVkKWluZGV4ID49IG1faW1wbC0+bGVuZ3RoKCkpIHsKLSAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIElOREVYX1NJWkVfRVJSKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZz
dGF0ZSwgSU5ERVhfU0laRV9FUlIpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICB9CiAKLSAgICBKU09iamVjdCogb2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7
CisgICAgSlNPYmplY3QqIG9iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7CiAK
ICAgICB1bnNpZ25lZCBudW1Db2x1bW5zID0gbV9pbXBsLT5jb2x1bW5OYW1lcygpLnNpemUoKTsK
ICAgICB1bnNpZ25lZCB2YWx1ZXNJbmRleCA9IGluZGV4ICogbnVtQ29sdW1uczsKQEAgLTYxLDIw
ICs2MSwyMCBAQCBKU1ZhbHVlIEpTU1FMUmVzdWx0U2V0Um93TGlzdDo6aXRlbShFeGVjU3RhdGUq
IGV4ZWMpCiAgICAgICAgIEpTVmFsdWUganNWYWx1ZTsKIAogICAgICAgICBzd2l0Y2ggKHZhbHVl
LnR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBTUUxWYWx1ZTo6U3RyaW5nVmFsdWU6Ci0gICAg
ICAgICAgICAgIGpzVmFsdWUgPSBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCB2YWx1ZS5zdHJpbmco
KSk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgU1FMVmFsdWU6Ok51bGxW
YWx1ZToKLSAgICAgICAgICAgICAganNWYWx1ZSA9IGpzTnVsbCgpOwotICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICBjYXNlIFNRTFZhbHVlOjpOdW1iZXJWYWx1ZToKLSAgICAgICAgICAg
ICAganNWYWx1ZSA9IGpzTnVtYmVyKHZhbHVlLm51bWJlcigpKTsKLSAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIGNhc2UgU1FMVmFsdWU6OlN0cmluZ1ZhbHVlOgorICAgICAgICAgICAganNW
YWx1ZSA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUuc3RyaW5nKCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1FMVmFsdWU6Ok51bGxWYWx1ZToKKyAgICAgICAg
ICAgIGpzVmFsdWUgPSBqc051bGwoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFNRTFZhbHVlOjpOdW1iZXJWYWx1ZToKKyAgICAgICAgICAgIGpzVmFsdWUgPSBqc051bWJlcih2
YWx1ZS5udW1iZXIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgb2Jq
ZWN0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBt
X2ltcGwtPmNvbHVtbk5hbWVzKClbaV0pLCBqc1ZhbHVlLCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
OworICAgICAgICBvYmplY3QtPnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgbV9pbXBsLT5jb2x1bW5OYW1lcygpW2ldKSwganNWYWx1ZSwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KTsKICAgICB9CiAKICAgICByZXR1cm4gb2JqZWN0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcApp
bmRleCAyNTI3MDgwYTM0ZDkyZWI1ZTM1MDJiODQ0YTNmY2VkNjE4M2QxZDQ1Li4zYzczNGE1MDlk
ZmJmODExZmYyNTU1ZmJkOGQyODBhYTA5NzhmNDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcApAQCAtNDEsMzYgKzQx
LDM2IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNW
YWx1ZSBKU1NRTFRyYW5zYWN0aW9uOjpleGVjdXRlU3FsKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFs
dWUgSlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNxbChFeGVjU3RhdGUmIHN0YXRlKQogewotICAg
IGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBTWU5UQVhfRVJSKTsKKyAgICBpZiAoIXN0YXRlLmFyZ3VtZW50Q291bnQoKSkgeworICAg
ICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBTWU5UQVhfRVJSKTsKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgU3RyaW5nIHNxbFN0YXRlbWVudCA9IGV4ZWMt
PmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgU3RyaW5nIHNxbFN0YXRlbWVudCA9IHN0YXRlLmFyZ3VtZW50
KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIC8vIE5vdyBh
c3NlbWJsZSB0aGUgbGlzdCBvZiBTUUwgYXJndW1lbnRzCiAgICAgVmVjdG9yPFNRTFZhbHVlPiBz
cWxWYWx1ZXM7Ci0gICAgaWYgKCFleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgp
KSB7Ci0gICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgxKS5nZXRPYmpl
Y3QoKTsKKyAgICBpZiAoIXN0YXRlLmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsK
KyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IHN0YXRlLmFyZ3VtZW50KDEpLmdldE9iamVjdCgp
OwogICAgICAgICBpZiAoIW9iamVjdCkgewotICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3Rh
dGUsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgICAgICB9CiAKLSAgICAgICAgSlNWYWx1ZSBsZW5ndGhWYWx1ZSA9IG9iamVjdC0+Z2V0
KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwotICAgICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIEpTVmFsdWUgbGVuZ3RoVmFsdWUgPSBvYmplY3QtPmdl
dCgmc3RhdGUsIHN0YXRlLnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOworICAgICAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbGVuZ3RoVmFsdWUudG9VSW50MzIoZXhlYyk7Ci0gICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
bGVuZ3RoVmFsdWUudG9VSW50MzIoJnN0YXRlKTsKKyAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMCA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KCZz
dGF0ZSwgaSk7CisgICAgICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgICAgIGlmICh2YWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQpAQCAtNzksMTggKzc5LDE4IEBAIEpTVmFsdWUgSlNTUUxUcmFu
c2FjdGlvbjo6ZXhlY3V0ZVNxbChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICAgICAgc3Fs
VmFsdWVzLmFwcGVuZCh2YWx1ZS5hc051bWJlcigpKTsKICAgICAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIGFyZ3VtZW50IHRvIGEgc3RyaW5nIGFuZCBhcHBl
bmQgaXQKLSAgICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKHZhbHVlLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICAgICAgICAgIHNxbFZhbHVlcy5hcHBlbmQodmFsdWUudG9TdHJpbmcoJnN0
YXRlKS0+dmFsdWUoJnN0YXRlKSk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnRDYWxs
YmFjaz4gY2FsbGJhY2s7Ci0gICAgaWYgKCFleGVjLT5hcmd1bWVudCgyKS5pc1VuZGVmaW5lZE9y
TnVsbCgpKSB7Ci0gICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgyKS5n
ZXRPYmplY3QoKTsKKyAgICBpZiAoIXN0YXRlLmFyZ3VtZW50KDIpLmlzVW5kZWZpbmVkT3JOdWxs
KCkpIHsKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IHN0YXRlLmFyZ3VtZW50KDIpLmdldE9i
amVjdCgpOwogICAgICAgICBpZiAoIW9iamVjdCkgewotICAgICAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICAgICAgICAgIHNldERPTUV4Y2VwdGlv
bigmc3RhdGUsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgICAgICB9CiAKQEAgLTk4LDEwICs5OCwxMCBAQCBKU1ZhbHVlIEpTU1FMVHJh
bnNhY3Rpb246OmV4ZWN1dGVTcWwoRXhlY1N0YXRlKiBleGVjKQogICAgIH0KIAogICAgIFJlZlB0
cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrOwotICAgIGlmICghZXhl
Yy0+YXJndW1lbnQoMykuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICBKU09iamVjdCog
b2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMykuZ2V0T2JqZWN0KCk7CisgICAgaWYgKCFzdGF0ZS5h
cmd1bWVudCgzKS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBvYmpl
Y3QgPSBzdGF0ZS5hcmd1bWVudCgzKS5nZXRPYmplY3QoKTsKICAgICAgICAgaWYgKCFvYmplY3Qp
IHsKLSAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7
CisgICAgICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBUWVBFX01JU01BVENIX0VSUik7
CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgfQogCkBAIC0xMTAs
NyArMTEwLDcgQEAgSlNWYWx1ZSBKU1NRTFRyYW5zYWN0aW9uOjpleGVjdXRlU3FsKEV4ZWNTdGF0
ZSogZXhlYykKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIG1faW1wbC0+ZXhlY3V0
ZVNRTChzcWxTdGF0ZW1lbnQsIHNxbFZhbHVlcywgY2FsbGJhY2sucmVsZWFzZSgpLCBlcnJvckNh
bGxiYWNrLnJlbGVhc2UoKSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Cisg
ICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xlbmd0
aEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1c3Rv
bS5jcHAKaW5kZXggMTVjNTBlNWJhYmJiM2FlZjRmOTMzOWQwMGE5MDgxOTA5YjE5YmY5My4uYjZm
MGNmODM2MTVmNzFlNjU1ODhjZTNkZTNmY2JiYWRkMTViNmVkZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdMZW5ndGhDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcApAQCAtMzEsMjkgKzMxLDI5
IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1
ZSBKU1NWR0xlbmd0aDo6dmFsdWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU1NW
R0xlbmd0aDo6dmFsdWUoRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICAgICBTVkdMZW5ndGgm
IHBvZEltcCA9IGltcGwoKS5wcm9wZXJ0eVJlZmVyZW5jZSgpOwogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwogICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dChpbXBsKCkuY29udGV4
dEVsZW1lbnQoKSk7CiAgICAgZmxvYXQgdmFsdWUgPSBwb2RJbXAudmFsdWUobGVuZ3RoQ29udGV4
dCwgZWMpOwogICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7CiB9CiAK
LXZvaWQgSlNTVkdMZW5ndGg6OnNldFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSkKK3ZvaWQgSlNTVkdMZW5ndGg6OnNldFZhbHVlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUg
dmFsdWUpCiB7CiAgICAgaWYgKGltcGwoKS5pc1JlYWRPbmx5KCkpIHsKLSAgICAgICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUik7CisgICAgICAgIHNl
dERPTUV4Y2VwdGlvbigmc3RhdGUsIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkg
JiYgIXZhbHVlLmlzTnVtYmVyKCkgJiYgIXZhbHVlLmlzQm9vbGVhbigpKSB7Ci0gICAgICAgIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjEsMzYgKzYxLDM2IEBAIHZvaWQgSlNTVkdM
ZW5ndGg6OnNldFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIAogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dChp
bXBsKCkuY29udGV4dEVsZW1lbnQoKSk7Ci0gICAgcG9kSW1wLnNldFZhbHVlKHZhbHVlLnRvRmxv
YXQoZXhlYyksIGxlbmd0aENvbnRleHQsIGVjKTsKKyAgICBwb2RJbXAuc2V0VmFsdWUodmFsdWUu
dG9GbG9hdCgmc3RhdGUpLCBsZW5ndGhDb250ZXh0LCBlYyk7CiAgICAgaWYgKGVjKSB7Ci0gICAg
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigm
c3RhdGUsIGVjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGltcGwoKS5jb21taXRD
aGFuZ2UoKTsKIH0KIAotSlNWYWx1ZSBKU1NWR0xlbmd0aDo6Y29udmVydFRvU3BlY2lmaWVkVW5p
dHMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1NWR0xlbmd0aDo6Y29udmVydFRvU3BlY2lm
aWVkVW5pdHMoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBpZiAoaW1wbCgpLmlzUmVhZE9ubHko
KSkgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9fTU9ESUZJQ0FUSU9OX0FMTE9X
RURfRVJSKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgTk9fTU9ESUZJQ0FUSU9O
X0FMTE9XRURfRVJSKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAg
ICAgU1ZHTGVuZ3RoJiBwb2RJbXAgPSBpbXBsKCkucHJvcGVydHlSZWZlcmVuY2UoKTsKIAotICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0o
KS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVj
KSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgICAgIHJldHVybiBz
dGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IoJnN0YXRlKSk7CiAKLSAgICB1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSA9IGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICB1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSA9IHN0YXRlLnVuY2hlY2tlZEFy
Z3VtZW50KDApLnRvVUludDMyKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwogICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dChpbXBsKCkuY29udGV4dEVs
ZW1lbnQoKSk7CiAgICAgcG9kSW1wLmNvbnZlcnRUb1NwZWNpZmllZFVuaXRzKHVuaXRUeXBlLCBs
ZW5ndGhDb250ZXh0LCBlYyk7CiAgICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlv
bihleGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1N1YnRsZUNyeXB0b0N1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1N1YnRsZUNyeXB0b0N1c3RvbS5jcHAKaW5kZXggZDhjN2ZmMTU3ODcz
ZDc1ZmQ3MzM3NDZkYTM5ZTM4OWIxN2ZiNmQ4OC4uNjhlNmQ1NjgxOTcxMDA1ZDU0YTdjNTgwZDgw
ZTBiMjk2ZDFiNWRhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNT
dWJ0bGVDcnlwdG9DdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U3VidGxlQ3J5cHRvQ3VzdG9tLmNwcApAQCAtNjEsMjQgKzYxLDI0IEBAIGVudW0gY2xhc3MgQ3J5
cHRvS2V5Rm9ybWF0IHsKICAgICBKV0sKIH07CiAKLXN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5
cHRvQWxnb3JpdGhtPiBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgdmFsdWUpCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobT4g
Y3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1
ZSkKIHsKICAgICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobUlkZW50aWZpZXI7
Ci0gICAgaWYgKCFKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmdldEFsZ29yaXRobUlkZW50
aWZpZXIoZXhlYywgdmFsdWUsIGFsZ29yaXRobUlkZW50aWZpZXIpKSB7Ci0gICAgICAgIEFTU0VS
VChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgaWYgKCFKU0NyeXB0b0FsZ29yaXRobURpY3Rp
b25hcnk6OmdldEFsZ29yaXRobUlkZW50aWZpZXIoJnN0YXRlLCB2YWx1ZSwgYWxnb3JpdGhtSWRl
bnRpZmllcikpIHsKKyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgYXV0byByZXN1bHQgPSBDcnlwdG9BbGdv
cml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkuY3JlYXRlKGFsZ29yaXRobUlkZW50aWZpZXIpOwog
ICAgIGlmICghcmVzdWx0KQotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBP
UlRFRF9FUlIpOworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVE
X0VSUik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGJvb2wgY3J5cHRvS2V5Rm9y
bWF0RnJvbUpTVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBDcnlwdG9LZXlG
b3JtYXQmIHJlc3VsdCkKK3N0YXRpYyBib29sIGNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIENyeXB0b0tleUZvcm1hdCYgcmVzdWx0KQog
ewotICAgIFN0cmluZyBrZXlGb3JtYXRTdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIFN0cmluZyBrZXlG
b3JtYXRTdHJpbmcgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOworICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlm
IChrZXlGb3JtYXRTdHJpbmcgPT0gInJhdyIpCiAgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUZv
cm1hdDo6UmF3OwpAQCAtODksMTYgKzg5LDE2IEBAIHN0YXRpYyBib29sIGNyeXB0b0tleUZvcm1h
dEZyb21KU1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgQ3J5cHRvS2V5CiAg
ICAgZWxzZSBpZiAoa2V5Rm9ybWF0U3RyaW5nID09ICJqd2siKQogICAgICAgICByZXN1bHQgPSBD
cnlwdG9LZXlGb3JtYXQ6OkpXSzsKICAgICBlbHNlIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3Io
ZXhlYywgIlVua25vd24ga2V5IGZvcm1hdCIpOworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3Rh
dGUsICJVbmtub3duIGtleSBmb3JtYXQiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgY3J5cHRvS2V5VXNhZ2VzRnJvbUpT
VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBDcnlwdG9LZXlVc2FnZSYgcmVz
dWx0KQorc3RhdGljIGJvb2wgY3J5cHRvS2V5VXNhZ2VzRnJvbUpTVmFsdWUoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgQ3J5cHRvS2V5VXNhZ2UmIHJlc3VsdCkKIHsKICAgICBpZiAo
IWlzSlNBcnJheSh2YWx1ZSkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAg
ICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKQEAgLTEwNiw5ICsxMDYsOSBAQCBzdGF0aWMgYm9vbCBjcnlwdG9LZXlVc2FnZXNGcm9tSlNW
YWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIENyeXB0b0tleQogCiAgICAgSlNB
cnJheSogYXJyYXkgPSBhc0FycmF5KHZhbHVlKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGFycmF5LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGFycmF5
LT5nZXRJbmRleChleGVjLCBpKTsKLSAgICAgICAgU3RyaW5nIHVzYWdlU3RyaW5nID0gZWxlbWVu
dC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gYXJyYXktPmdldEluZGV4KCZzdGF0
ZSwgaSk7CisgICAgICAgIFN0cmluZyB1c2FnZVN0cmluZyA9IGVsZW1lbnQudG9TdHJpbmcoJnN0
YXRlKS0+dmFsdWUoJnN0YXRlKTsKKyAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAodXNhZ2VTdHJpbmcgPT0gImVu
Y3J5cHQiKQogICAgICAgICAgICAgcmVzdWx0IHw9IENyeXB0b0tleVVzYWdlRW5jcnlwdDsKQEAg
LTEzMCw0MiArMTMwLDQyIEBAIHN0YXRpYyBib29sIGNyeXB0b0tleVVzYWdlc0Zyb21KU1ZhbHVl
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgQ3J5cHRvS2V5CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLUpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OmVuY3J5cHQoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6ZW5jcnlwdChFeGVjU3RhdGUmIHN0YXRlKQogewot
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAzKQotICAgICAgICByZXR1cm4gZXhlYy0+
dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihl
eGVjKSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA8IDMpCisgICAgICAgIHJldHVy
biBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoJnN0YXRlKSk7CiAKLSAgICBhdXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRo
bUZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRv
IGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgaWYgKCFhbGdvcml0aG0pIHsKLSAgICAgICAgQVNTRVJU
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgYXV0byBw
YXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJz
Rm9yRW5jcnlwdChleGVjLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGlj
dGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckVuY3J5cHQoJnN0YXRlLCBhbGdvcml0aG0tPmlk
ZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmICghcGFyYW1l
dGVycykgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBB
U1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICB9CiAKLSAgICBSZWZQdHI8Q3J5cHRvS2V5PiBrZXkgPSBKU0NyeXB0b0tleTo6dG9X
cmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICBSZWZQdHI8Q3J5cHRvS2V5
PiBrZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEp
KTsKICAgICBpZiAoIWtleSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwor
ICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKIAogICAgIGlmICgha2V5LT5h
bGxvd3MoQ3J5cHRvS2V5VXNhZ2VFbmNyeXB0KSkgewogICAgICAgICBtX2ltcGwtPmRvY3VtZW50
KCktPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVy
cm9yLCBBU0NJSUxpdGVyYWwoIktleSB1c2FnZXMgZG8gbm90IGluY2x1ZGUgJ2VuY3J5cHQnIikp
OwotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRFRF9FUlIpOworICAg
ICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VSUik7CiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEg
ZGF0YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZShleGVjLCBleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgyKSwgZGF0YSkpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKTsKKyAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgm
c3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRhKSkgeworICAgICAgICBBU1NF
UlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICB9CiAKICAgICAKLSAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0g
SlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QoKSk7Ci0gICAgRGVm
ZXJyZWRXcmFwcGVyIHdyYXBwZXIoZXhlYywgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJl
ZCk7CisgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURl
ZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSk7CisgICAgRGVmZXJyZWRXcmFw
cGVyIHdyYXBwZXIoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKICAg
ICBhdXRvIHN1Y2Nlc3NDYWxsYmFjayA9IFt3cmFwcGVyXShjb25zdCBWZWN0b3I8dWludDhfdD4m
IHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgIHdyYXBwZXIucmVzb2x2ZShyZXN1bHQpOwogICAg
IH07CkBAIC0xNzYsNDggKzE3Niw0OCBAQCBKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjplbmNyeXB0
KEV4ZWNTdGF0ZSogZXhlYykKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhbGdvcml0
aG0tPmVuY3J5cHQoKnBhcmFtZXRlcnMsICprZXksIGRhdGEsIFdURjo6bW92ZShzdWNjZXNzQ2Fs
bGJhY2spLCBXVEY6Om1vdmUoZmFpbHVyZUNhbGxiYWNrKSwgZWMpOwogICAgIGlmIChlYykgewot
ICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBzZXRET01FeGNlcHRp
b24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAog
ICAgIHJldHVybiBwcm9taXNlRGVmZXJyZWQtPnByb21pc2UoKTsKIH0KIAotSlNWYWx1ZSBKU1N1
YnRsZUNyeXB0bzo6ZGVjcnlwdChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTU3VidGxlQ3J5
cHRvOjpkZWNyeXB0KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA8IDMpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4
ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3RhdGUu
YXJndW1lbnRDb3VudCgpIDwgMykKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNl
cHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAot
ICAgIGF1dG8gYWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoZXhlYywgZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYWxnb3JpdGhtID0gY3JlYXRlQWxn
b3JpdGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAg
ICBpZiAoIWFsZ29yaXRobSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
OworICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0Fs
Z29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JEZWNyeXB0KGV4ZWMsIGFsZ29y
aXRobS0+aWRlbnRpZmllcigpLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0
byBwYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0
ZXJzRm9yRGVjcnlwdCgmc3RhdGUsIGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgaWYgKCFwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VS
VChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRp
b24oKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIFJlZlB0
cjxDcnlwdG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMSkpOworICAgIFJlZlB0cjxDcnlwdG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5Ojp0
b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOwogICAgIGlmICgha2V5KQotICAg
ICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiB0aHJvd1R5
cGVFcnJvcigmc3RhdGUpOwogCiAgICAgaWYgKCFrZXktPmFsbG93cyhDcnlwdG9LZXlVc2FnZURl
Y3J5cHQpKSB7CiAgICAgICAgIG1faW1wbC0+ZG9jdW1lbnQoKS0+YWRkQ29uc29sZU1lc3NhZ2Uo
TWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiS2V5
IHVzYWdlcyBkbyBub3QgaW5jbHVkZSAnZGVjcnlwdCciKSk7Ci0gICAgICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigm
c3RhdGUsIE5PVF9TVVBQT1JURURfRVJSKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgfQogCiAgICAgQ3J5cHRvT3BlcmF0aW9uRGF0YSBkYXRhOwotICAgIGlmICghY3J5cHRv
T3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIp
LCBkYXRhKSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIGlm
ICghY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2Vk
QXJndW1lbnQoMiksIGRhdGEpKSB7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24o
KSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIEpTUHJvbWlz
ZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4
ZWMsIGdsb2JhbE9iamVjdCgpKTsKLSAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcihleGVjLCBn
bG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKKyAgICBKU1Byb21pc2VEZWZlcnJlZCog
cHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2Jh
bE9iamVjdCgpKTsKKyAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcigmc3RhdGUsIGdsb2JhbE9i
amVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwogICAgIGF1dG8gc3VjY2Vzc0NhbGxiYWNrID0gW3dy
YXBwZXJdKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAg
d3JhcHBlci5yZXNvbHZlKHJlc3VsdCk7CiAgICAgfTsKQEAgLTIyOCw0OCArMjI4LDQ4IEBAIEpT
VmFsdWUgSlNTdWJ0bGVDcnlwdG86OmRlY3J5cHQoRXhlY1N0YXRlKiBleGVjKQogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwogICAgIGFsZ29yaXRobS0+ZGVjcnlwdCgqcGFyYW1ldGVycywgKmtl
eSwgZGF0YSwgV1RGOjptb3ZlKHN1Y2Nlc3NDYWxsYmFjayksIFdURjo6bW92ZShmYWlsdXJlQ2Fs
bGJhY2spLCBlYyk7CiAgICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHByb21pc2VEZWZlcnJlZC0+
cHJvbWlzZSgpOwogfQogCi1KU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjpzaWduKEV4ZWNTdGF0ZSog
ZXhlYykKK0pTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OnNpZ24oRXhlY1N0YXRlJiBzdGF0ZSkKIHsK
LSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMykKLSAgICAgICAgcmV0dXJuIGV4ZWMt
PnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
ZXhlYykpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPCAzKQorICAgICAgICByZXR1
cm4gc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKCZzdGF0ZSkpOwogCi0gICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0
aG1Gcm9tSlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0
byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5j
aGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAgIEFTU0VS
VChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRp
b24oKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIGF1dG8g
cGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVy
c0ZvclNpZ24oZXhlYywgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDApKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rp
b25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JTaWduKCZzdGF0ZSwgYWxnb3JpdGhtLT5pZGVudGlm
aWVyKCksIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBpZiAoIXBhcmFtZXRlcnMp
IHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJU
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgfQogCi0gICAgUmVmUHRyPENyeXB0b0tleT4ga2V5ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBl
ZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgUmVmUHRyPENyeXB0b0tleT4ga2V5
ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSk7CiAg
ICAgaWYgKCFrZXkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAg
ICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CiAKICAgICBpZiAoIWtleS0+YWxsb3dz
KENyeXB0b0tleVVzYWdlU2lnbikpIHsKICAgICAgICAgbV9pbXBsLT5kb2N1bWVudCgpLT5hZGRD
b25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgQVND
SUlMaXRlcmFsKCJLZXkgdXNhZ2VzIGRvIG5vdCBpbmNsdWRlICdzaWduJyIpKTsKLSAgICAgICAg
c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgc2V0RE9N
RXhjZXB0aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIpOwogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICB9CiAKICAgICBDcnlwdG9PcGVyYXRpb25EYXRhIGRhdGE7Ci0gICAg
aWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMiksIGRhdGEpKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24o
KSk7CisgICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0
ZS51bmNoZWNrZWRBcmd1bWVudCgyKSwgZGF0YSkpIHsKKyAgICAgICAgQVNTRVJUKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0g
ICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVk
OjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KCkpOwotICAgIERlZmVycmVkV3JhcHBlciB3cmFw
cGVyKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOworICAgIEpTUHJvbWlz
ZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZz
dGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOworICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVyKCZzdGF0
ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CiAgICAgYXV0byBzdWNjZXNzQ2Fs
bGJhY2sgPSBbd3JhcHBlcl0oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiByZXN1bHQpIG11dGFibGUg
ewogICAgICAgICB3cmFwcGVyLnJlc29sdmUocmVzdWx0KTsKICAgICB9OwpAQCAtMjgwLDU0ICsy
ODAsNTQgQEAgSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6c2lnbihFeGVjU3RhdGUqIGV4ZWMpCiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYWxnb3JpdGhtLT5zaWduKCpwYXJhbWV0ZXJz
LCAqa2V5LCBkYXRhLCBXVEY6Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGOjptb3ZlKGZhaWx1
cmVDYWxsYmFjayksIGVjKTsKICAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIGVjKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICByZXR1cm4gcHJvbWlzZURlZmVy
cmVkLT5wcm9taXNlKCk7CiB9CiAKLUpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OnZlcmlmeShFeGVj
U3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjp2ZXJpZnkoRXhlY1N0YXRlJiBz
dGF0ZSkKIHsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgNCkKLSAgICAgICAgcmV0
dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoZXhlYykpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPCA0KQorICAg
ICAgICByZXR1cm4gc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCi0gICAgYXV0byBhbGdvcml0aG0gPSBjcmVh
dGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7
CisgICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwg
c3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAg
ICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChzdGF0ZS5o
YWRFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAot
ICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRl
UGFyYW1ldGVyc0ZvclZlcmlmeShleGVjLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxn
b3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvclZlcmlmeSgmc3RhdGUsIGFsZ29y
aXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgaWYg
KCFwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7Cisg
ICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIH0KIAotICAgIFJlZlB0cjxDcnlwdG9LZXk+IGtleSA9IEpTQ3J5cHRv
S2V5Ojp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIFJlZlB0cjxD
cnlwdG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJn
dW1lbnQoMSkpOwogICAgIGlmICgha2V5KQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3Io
ZXhlYyk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOwogCiAgICAgaWYg
KCFrZXktPmFsbG93cyhDcnlwdG9LZXlVc2FnZVZlcmlmeSkpIHsKICAgICAgICAgbV9pbXBsLT5k
b2N1bWVudCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxl
dmVsOjpFcnJvciwgQVNDSUlMaXRlcmFsKCJLZXkgdXNhZ2VzIGRvIG5vdCBpbmNsdWRlICd2ZXJp
ZnknIikpOwotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRFRF9FUlIp
OworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VSUik7CiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIENyeXB0b09wZXJhdGlv
bkRhdGEgc2lnbmF0dXJlOwotICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVl
KGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBzaWduYXR1cmUpKSB7Ci0gICAgICAg
IEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgaWYgKCFjcnlwdG9PcGVyYXRpb25E
YXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSwgc2lnbmF0
dXJlKSkgeworICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBDcnlwdG9PcGVyYXRpb25EYXRhIGRh
dGE7Ci0gICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMyksIGRhdGEpKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRF
eGNlcHRpb24oKSk7CisgICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0
YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgzKSwgZGF0YSkpIHsKKyAgICAgICAgQVNTRVJU
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgfQogCi0gICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlz
ZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KCkpOwotICAgIERlZmVycmVkV3Jh
cHBlciB3cmFwcGVyKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOworICAg
IEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6
Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOworICAgIERlZmVycmVkV3JhcHBlciB3cmFw
cGVyKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CiAgICAgYXV0byBz
dWNjZXNzQ2FsbGJhY2sgPSBbd3JhcHBlcl0oYm9vbCByZXN1bHQpIG11dGFibGUgewogICAgICAg
ICB3cmFwcGVyLnJlc29sdmUocmVzdWx0KTsKICAgICB9OwpAQCAtMzM4LDM4ICszMzgsMzggQEAg
SlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6dmVyaWZ5KEV4ZWNTdGF0ZSogZXhlYykKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKICAgICBhbGdvcml0aG0tPnZlcmlmeSgqcGFyYW1ldGVycywgKmtl
eSwgc2lnbmF0dXJlLCBkYXRhLCBXVEY6Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGOjptb3Zl
KGZhaWx1cmVDYWxsYmFjayksIGVjKTsKICAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICByZXR1cm4gcHJvbWlz
ZURlZmVycmVkLT5wcm9taXNlKCk7CiB9CiAKLUpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OmRpZ2Vz
dChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjpkaWdlc3QoRXhlY1N0
YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikKLSAgICAg
ICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPCAy
KQorICAgICAgICByZXR1cm4gc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCi0gICAgYXV0byBhbGdvcml0aG0g
PSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7CisgICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShz
dGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmICghYWxnb3JpdGhtKSB7
Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChz
dGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IH0KIAotICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6
Y3JlYXRlUGFyYW1ldGVyc0ZvckRpZ2VzdChleGVjLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwg
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5
cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckRpZ2VzdCgmc3RhdGUs
IGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAg
ICAgaWYgKCFwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24o
KSk7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEgZGF0YTsK
LSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZShleGVjLCBleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgxKSwgZGF0YSkpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKTsKKyAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUs
IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBkYXRhKSkgeworICAgICAgICBBU1NFUlQoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9
CiAKLSAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVm
ZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QoKSk7Ci0gICAgRGVmZXJyZWRXcmFwcGVy
IHdyYXBwZXIoZXhlYywgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CisgICAgSlNQ
cm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVh
dGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSk7CisgICAgRGVmZXJyZWRXcmFwcGVyIHdyYXBwZXIo
JnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKICAgICBhdXRvIHN1Y2Nl
c3NDYWxsYmFjayA9IFt3cmFwcGVyXShjb25zdCBWZWN0b3I8dWludDhfdD4mIHJlc3VsdCkgbXV0
YWJsZSB7CiAgICAgICAgIHdyYXBwZXIucmVzb2x2ZShyZXN1bHQpOwogICAgIH07CkBAIC0zODAs
NDcgKzM4MCw0NyBAQCBKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjpkaWdlc3QoRXhlY1N0YXRlKiBl
eGVjKQogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGFsZ29yaXRobS0+ZGlnZXN0KCpw
YXJhbWV0ZXJzLCBkYXRhLCBXVEY6Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGOjptb3ZlKGZh
aWx1cmVDYWxsYmFjayksIGVjKTsKICAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICByZXR1cm4gcHJvbWlzZURl
ZmVycmVkLT5wcm9taXNlKCk7CiB9CiAKLUpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OmdlbmVyYXRl
S2V5KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OmdlbmVyYXRlS2V5
KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEp
Ci0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3Vu
dCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAotICAgIGF1dG8gYWxn
b3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOworICAgIGF1dG8gYWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpT
VmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBpZiAoIWFsZ29y
aXRobSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBB
U1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICB9CiAKLSAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rp
b25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JHZW5lcmF0ZUtleShleGVjLCBhbGdvcml0aG0tPmlk
ZW50aWZpZXIoKSwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gcGFyYW1l
dGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0Zvckdl
bmVyYXRlS2V5KCZzdGF0ZSwgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIHN0YXRlLnVuY2hlY2tl
ZEFyZ3VtZW50KDApKTsKICAgICBpZiAoIXBhcmFtZXRlcnMpIHsKLSAgICAgICAgQVNTRVJUKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgYm9vbCBleHRy
YWN0YWJsZSA9IGZhbHNlOwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgewot
ICAgICAgICBleHRyYWN0YWJsZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvQm9vbGVh
bihleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChzdGF0
ZS5hcmd1bWVudENvdW50KCkgPj0gMikgeworICAgICAgICBleHRyYWN0YWJsZSA9IHN0YXRlLnVu
Y2hlY2tlZEFyZ3VtZW50KDEpLnRvQm9vbGVhbigmc3RhdGUpOworICAgICAgICBpZiAoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9
CiAKICAgICBDcnlwdG9LZXlVc2FnZSBrZXlVc2FnZXMgPSAwOwotICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgPj0gMykgewotICAgICAgICBpZiAoIWNyeXB0b0tleVVzYWdlc0Zyb21KU1Zh
bHVlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpLCBrZXlVc2FnZXMpKSB7Ci0gICAgICAgICAgICBB
U1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50
KCkgPj0gMykgeworICAgICAgICBpZiAoIWNyeXB0b0tleVVzYWdlc0Zyb21KU1ZhbHVlKHN0YXRl
LCBzdGF0ZS5hcmd1bWVudCgyKSwga2V5VXNhZ2VzKSkgeworICAgICAgICAgICAgQVNTRVJUKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJl
ZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KCkpOwotICAg
IERlZmVycmVkV3JhcHBlciB3cmFwcGVyKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVm
ZXJyZWQpOworICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21p
c2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOworICAgIERlZmVycmVk
V3JhcHBlciB3cmFwcGVyKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7
CiAgICAgYXV0byBzdWNjZXNzQ2FsbGJhY2sgPSBbd3JhcHBlcl0oQ3J5cHRvS2V5KiBrZXksIENy
eXB0b0tleVBhaXIqIGtleVBhaXIpIG11dGFibGUgewogICAgICAgICBBU1NFUlQoa2V5IHx8IGtl
eVBhaXIpOwogICAgICAgICBBU1NFUlQoIWtleSB8fCAha2V5UGFpcik7CkBAIC00MzYsMTQgKzQz
NiwxNCBAQCBKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjpnZW5lcmF0ZUtleShFeGVjU3RhdGUqIGV4
ZWMpCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYWxnb3JpdGhtLT5nZW5lcmF0ZUtl
eSgqcGFyYW1ldGVycywgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgV1RGOjptb3ZlKHN1Y2Nlc3ND
YWxsYmFjayksIFdURjo6bW92ZShmYWlsdXJlQ2FsbGJhY2spLCBlYyk7CiAgICAgaWYgKGVjKSB7
Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4Y2Vw
dGlvbigmc3RhdGUsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQog
CiAgICAgcmV0dXJuIHByb21pc2VEZWZlcnJlZC0+cHJvbWlzZSgpOwogfQogCi1zdGF0aWMgdm9p
ZCBpbXBvcnRLZXkoRXhlY1N0YXRlKiBleGVjLCBDcnlwdG9LZXlGb3JtYXQga2V5Rm9ybWF0LCBD
cnlwdG9PcGVyYXRpb25EYXRhIGRhdGEsIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG0+
IGFsZ29yaXRobSwgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IHBh
cmFtZXRlcnMsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlIGtleVVzYWdlcywgQ3J5
cHRvQWxnb3JpdGhtOjpLZXlDYWxsYmFjayBjYWxsYmFjaywgQ3J5cHRvQWxnb3JpdGhtOjpWb2lk
Q2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrKQorc3RhdGljIHZvaWQgaW1wb3J0S2V5KEV4ZWNTdGF0
ZSYgc3RhdGUsIENyeXB0b0tleUZvcm1hdCBrZXlGb3JtYXQsIENyeXB0b09wZXJhdGlvbkRhdGEg
ZGF0YSwgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobT4gYWxnb3JpdGhtLCBzdGQ6OnVu
aXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gcGFyYW1ldGVycywgYm9vbCBleHRy
YWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2Uga2V5VXNhZ2VzLCBDcnlwdG9BbGdvcml0aG06OktleUNh
bGxiYWNrIGNhbGxiYWNrLCBDcnlwdG9BbGdvcml0aG06OlZvaWRDYWxsYmFjayBmYWlsdXJlQ2Fs
bGJhY2spCiB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleVNlcmlhbGl6YXRpb24+IGtl
eVNlcmlhbGl6YXRpb247CiAgICAgc3dpdGNoIChrZXlGb3JtYXQpIHsKQEAgLTQ1MywxMDIgKzQ1
MywxMDIgQEAgc3RhdGljIHZvaWQgaW1wb3J0S2V5KEV4ZWNTdGF0ZSogZXhlYywgQ3J5cHRvS2V5
Rm9ybWF0IGtleUZvcm1hdCwgQ3J5cHRvT3BlcmF0aW8KICAgICBjYXNlIENyeXB0b0tleUZvcm1h
dDo6SldLOiB7CiAgICAgICAgIFN0cmluZyBqd2tTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KGRh
dGEuZmlyc3QsIGRhdGEuc2Vjb25kKTsKICAgICAgICAgaWYgKGp3a1N0cmluZy5pc051bGwoKSkg
ewotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgIkpXSyBKU09OIHNlcmlhbGl6YXRp
b24gaXMgbm90IHZhbGlkIFVURi04Iik7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3Rh
dGUsICJKV0sgSlNPTiBzZXJpYWxpemF0aW9uIGlzIG5vdCB2YWxpZCBVVEYtOCIpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGtleVNlcmlhbGl6YXRpb24gPSBzdGQ6
Om1ha2VfdW5pcXVlPEpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSz4oZXhlYywgandrU3RyaW5n
KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBrZXlTZXJpYWxp
emF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s+KCZz
dGF0ZSwgandrU3RyaW5nKTsKKyAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKLSAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgIlVuc3VwcG9ydGVkIGtleSBmb3JtYXQgZm9yIGlt
cG9ydCIpOworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsICJVbnN1cHBvcnRlZCBrZXkg
Zm9ybWF0IGZvciBpbXBvcnQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIEFTU0VS
VChrZXlTZXJpYWxpemF0aW9uKTsKIAogICAgIGlmICgha2V5U2VyaWFsaXphdGlvbi0+cmVjb25j
aWxlQWxnb3JpdGhtKGFsZ29yaXRobSwgcGFyYW1ldGVycykpIHsKLSAgICAgICAgaWYgKCFleGVj
LT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsICJBbGdv
cml0aG0gc3BlY2lmaWVkIGluIGtleSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIG9uZSBwYXNzZWQg
dG8gaW1wb3J0S2V5IGFzIGFyZ3VtZW50Iik7CisgICAgICAgIGlmICghc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsICJBbGdvcml0aG0gc3Bl
Y2lmaWVkIGluIGtleSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIG9uZSBwYXNzZWQgdG8gaW1wb3J0
S2V5IGFzIGFyZ3VtZW50Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKCFhbGdvcml0aG0pIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3Io
ZXhlYywgIk5laXRoZXIga2V5IG5vciBmdW5jdGlvbiBhcmd1bWVudCBoYXMgY3J5cHRvIGFsZ29y
aXRobSBzcGVjaWZpZWQiKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCAiTmVpdGhl
ciBrZXkgbm9yIGZ1bmN0aW9uIGFyZ3VtZW50IGhhcyBjcnlwdG8gYWxnb3JpdGhtIHNwZWNpZmll
ZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEFTU0VSVChwYXJhbWV0ZXJzKTsKIAog
ICAgIGtleVNlcmlhbGl6YXRpb24tPnJlY29uY2lsZUV4dHJhY3RhYmxlKGV4dHJhY3RhYmxlKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm47CiAKICAgICBrZXlTZXJpYWxpemF0aW9uLT5yZWNvbmNpbGVV
c2FnZXMoa2V5VXNhZ2VzKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIGtleURh
dGEgPSBrZXlTZXJpYWxpemF0aW9uLT5rZXlEYXRhKCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYWxnb3JpdGhtLT5pbXBvcnRLZXkoKnBh
cmFtZXRlcnMsICprZXlEYXRhLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCBXVEY6Om1vdmUoY2Fs
bGJhY2spLCBXVEY6Om1vdmUoZmFpbHVyZUNhbGxiYWNrKSwgZWMpOwogICAgIGlmIChlYykKLSAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KCZzdGF0ZSwgZWMpOwogfQogCi1KU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjppbXBvcnRLZXkoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6aW1wb3J0S2V5KEV4ZWNTdGF0
ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDMpCi0gICAgICAg
IHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpIDwgMykK
KyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIENyeXB0b0tleUZvcm1hdCBr
ZXlGb3JtYXQ7Ci0gICAgaWYgKCFjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShleGVjLCBleGVj
LT5hcmd1bWVudCgwKSwga2V5Rm9ybWF0KSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpOworICAgIGlmICghY3J5cHRvS2V5Rm9ybWF0RnJvbUpTVmFsdWUoc3RhdGUsIHN0
YXRlLmFyZ3VtZW50KDApLCBrZXlGb3JtYXQpKSB7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRF
eGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAg
IENyeXB0b09wZXJhdGlvbkRhdGEgZGF0YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFG
cm9tSlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgZGF0YSkpIHsKLSAg
ICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBpZiAoIWNyeXB0b09wZXJh
dGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBk
YXRhKSkgeworICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRv
QWxnb3JpdGhtPiBhbGdvcml0aG07CiAgICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnM+IHBhcmFtZXRlcnM7Ci0gICAgaWYgKCFleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgyKS5pc051bGwoKSkgewotICAgICAgICBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9t
SlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKSk7CisgICAgaWYgKCFzdGF0
ZS51bmNoZWNrZWRBcmd1bWVudCgyKS5pc051bGwoKSkgeworICAgICAgICBhbGdvcml0aG0gPSBj
cmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQo
MikpOwogICAgICAgICBpZiAoIWFsZ29yaXRobSkgewotICAgICAgICAgICAgQVNTRVJUKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24o
KSk7CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgfQotICAgICAg
ICBwYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0
ZXJzRm9ySW1wb3J0S2V5KGV4ZWMsIGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgyKSk7CisgICAgICAgIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRo
bURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JJbXBvcnRLZXkoJnN0YXRlLCBhbGdvcml0
aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMikpOwogICAgICAgICBp
ZiAoIXBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24o
KSk7CisgICAgICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBib29sIGV4
dHJhY3RhYmxlID0gZmFsc2U7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSA0KSB7
Ci0gICAgICAgIGV4dHJhY3RhYmxlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMykudG9Cb29s
ZWFuKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKHN0
YXRlLmFyZ3VtZW50Q291bnQoKSA+PSA0KSB7CisgICAgICAgIGV4dHJhY3RhYmxlID0gc3RhdGUu
dW5jaGVja2VkQXJndW1lbnQoMykudG9Cb29sZWFuKCZzdGF0ZSk7CisgICAgICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IH0KIAogICAgIENyeXB0b0tleVVzYWdlIGtleVVzYWdlcyA9IDA7Ci0gICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA+PSA1KSB7Ci0gICAgICAgIGlmICghY3J5cHRvS2V5VXNhZ2VzRnJvbUpT
VmFsdWUoZXhlYywgZXhlYy0+YXJndW1lbnQoNCksIGtleVVzYWdlcykpIHsKLSAgICAgICAgICAg
IEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291
bnQoKSA+PSA1KSB7CisgICAgICAgIGlmICghY3J5cHRvS2V5VXNhZ2VzRnJvbUpTVmFsdWUoc3Rh
dGUsIHN0YXRlLmFyZ3VtZW50KDQpLCBrZXlVc2FnZXMpKSB7CisgICAgICAgICAgICBBU1NFUlQo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVy
cmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QoKSk7Ci0g
ICAgRGVmZXJyZWRXcmFwcGVyIHdyYXBwZXIoZXhlYywgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VE
ZWZlcnJlZCk7CisgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJv
bWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSk7CisgICAgRGVmZXJy
ZWRXcmFwcGVyIHdyYXBwZXIoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVk
KTsKICAgICBhdXRvIHN1Y2Nlc3NDYWxsYmFjayA9IFt3cmFwcGVyXShDcnlwdG9LZXkmIHJlc3Vs
dCkgbXV0YWJsZSB7CiAgICAgICAgIHdyYXBwZXIucmVzb2x2ZSgmcmVzdWx0KTsKICAgICB9OwpA
QCAtNTU2LDE3ICs1NTYsMTcgQEAgSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6aW1wb3J0S2V5KEV4
ZWNTdGF0ZSogZXhlYykKICAgICAgICAgd3JhcHBlci5yZWplY3QobnVsbHB0cik7CiAgICAgfTsK
IAotICAgIFdlYkNvcmU6OmltcG9ydEtleShleGVjLCBrZXlGb3JtYXQsIGRhdGEsIFdURjo6bW92
ZShhbGdvcml0aG0pLCBXVEY6Om1vdmUocGFyYW1ldGVycyksIGV4dHJhY3RhYmxlLCBrZXlVc2Fn
ZXMsIFdURjo6bW92ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEY6Om1vdmUoZmFpbHVyZUNhbGxiYWNr
KSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIFdlYkNvcmU6OmltcG9ydEtl
eShzdGF0ZSwga2V5Rm9ybWF0LCBkYXRhLCBXVEY6Om1vdmUoYWxnb3JpdGhtKSwgV1RGOjptb3Zl
KHBhcmFtZXRlcnMpLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCBXVEY6Om1vdmUoc3VjY2Vzc0Nh
bGxiYWNrKSwgV1RGOjptb3ZlKGZhaWx1cmVDYWxsYmFjaykpOworICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICByZXR1cm4g
cHJvbWlzZURlZmVycmVkLT5wcm9taXNlKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGV4cG9ydEtleShF
eGVjU3RhdGUqIGV4ZWMsIENyeXB0b0tleUZvcm1hdCBrZXlGb3JtYXQsIGNvbnN0IENyeXB0b0tl
eSYga2V5LCBDcnlwdG9BbGdvcml0aG06OlZlY3RvckNhbGxiYWNrIGNhbGxiYWNrLCBDcnlwdG9B
bGdvcml0aG06OlZvaWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2spCitzdGF0aWMgdm9pZCBleHBv
cnRLZXkoRXhlY1N0YXRlJiBzdGF0ZSwgQ3J5cHRvS2V5Rm9ybWF0IGtleUZvcm1hdCwgY29uc3Qg
Q3J5cHRvS2V5JiBrZXksIENyeXB0b0FsZ29yaXRobTo6VmVjdG9yQ2FsbGJhY2sgY2FsbGJhY2ss
IENyeXB0b0FsZ29yaXRobTo6Vm9pZENhbGxiYWNrIGZhaWx1cmVDYWxsYmFjaykKIHsKICAgICBp
ZiAoIWtleS5leHRyYWN0YWJsZSgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsICJL
ZXkgaXMgbm90IGV4dHJhY3RhYmxlIik7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwg
IktleSBpcyBub3QgZXh0cmFjdGFibGUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
NTgwLDggKzU4MCw4IEBAIHN0YXRpYyB2b2lkIGV4cG9ydEtleShFeGVjU3RhdGUqIGV4ZWMsIENy
eXB0b0tleUZvcm1hdCBrZXlGb3JtYXQsIGNvbnN0IENyeXB0b0tlCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6SldLOiB7Ci0gICAgICAgIFN0cmluZyBy
ZXN1bHQgPSBKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OnNlcmlhbGl6ZShleGVjLCBrZXkp
OwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIFN0cmluZyByZXN1
bHQgPSBKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OnNlcmlhbGl6ZSgmc3RhdGUsIGtleSk7
CisgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgQ1N0cmluZyB1dGY4U3RyaW5nID0gcmVzdWx0LnV0ZjgoU3RyaWN0Q29udmVyc2lv
bik7CiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHRCdWZmZXI7CkBAIC01OTAsMjggKzU5
MCwyOCBAQCBzdGF0aWMgdm9pZCBleHBvcnRLZXkoRXhlY1N0YXRlKiBleGVjLCBDcnlwdG9LZXlG
b3JtYXQga2V5Rm9ybWF0LCBjb25zdCBDcnlwdG9LZQogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgZGVmYXVsdDoKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgIlVuc3VwcG9ydGVkIGtl
eSBmb3JtYXQgZm9yIGV4cG9ydCIpOworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsICJV
bnN1cHBvcnRlZCBrZXkgZm9ybWF0IGZvciBleHBvcnQiKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogfQogCi1KU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjpleHBvcnRLZXkoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6ZXhwb3J0S2V5KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7
Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCi0gICAgICAgIHJldHVybiBleGVj
LT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGV4ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpIDwgMikKKyAgICAgICAgcmV0
dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIENyeXB0b0tleUZvcm1hdCBrZXlGb3JtYXQ7Ci0g
ICAgaWYgKCFjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShleGVjLCBleGVjLT5hcmd1bWVudCgw
KSwga2V5Rm9ybWF0KSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwor
ICAgIGlmICghY3J5cHRvS2V5Rm9ybWF0RnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLmFyZ3VtZW50
KDApLCBrZXlGb3JtYXQpKSB7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIFJlZlB0cjxDcnlw
dG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoMSkpOworICAgIFJlZlB0cjxDcnlwdG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBw
ZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOwogICAgIGlmICgha2V5KQotICAgICAgICBy
ZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJv
cigmc3RhdGUpOwogCi0gICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpT
UHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KCkpOwotICAgIERlZmVy
cmVkV3JhcHBlciB3cmFwcGVyKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQp
OworICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZl
cnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOworICAgIERlZmVycmVkV3JhcHBl
ciB3cmFwcGVyKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CiAgICAg
YXV0byBzdWNjZXNzQ2FsbGJhY2sgPSBbd3JhcHBlcl0oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBy
ZXN1bHQpIG11dGFibGUgewogICAgICAgICB3cmFwcGVyLnJlc29sdmUocmVzdWx0KTsKICAgICB9
OwpAQCAtNjE5LDUyICs2MTksNTIgQEAgSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6ZXhwb3J0S2V5
KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgd3JhcHBlci5yZWplY3QobnVsbHB0cik7CiAgICAg
fTsKIAotICAgIFdlYkNvcmU6OmV4cG9ydEtleShleGVjLCBrZXlGb3JtYXQsICprZXksIFdURjo6
bW92ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEY6Om1vdmUoZmFpbHVyZUNhbGxiYWNrKSk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIFdlYkNvcmU6OmV4cG9ydEtleShzdGF0ZSwg
a2V5Rm9ybWF0LCAqa2V5LCBXVEY6Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGOjptb3ZlKGZh
aWx1cmVDYWxsYmFjaykpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICByZXR1cm4gcHJvbWlzZURlZmVycmVkLT5wcm9t
aXNlKCk7CiB9CiAKLUpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OndyYXBLZXkoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6d3JhcEtleShFeGVjU3RhdGUmIHN0YXRlKQog
ewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCA0KQotICAgICAgICByZXR1cm4gZXhl
Yy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihleGVjKSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA8IDQpCisgICAgICAgIHJl
dHVybiBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBDcnlwdG9LZXlGb3JtYXQga2V5Rm9ybWF0Owot
ICAgIGlmICghY3J5cHRvS2V5Rm9ybWF0RnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+YXJndW1lbnQo
MCksIGtleUZvcm1hdCkpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsK
KyAgICBpZiAoIWNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVu
dCgwKSwga2V5Rm9ybWF0KSkgeworICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
OwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBSZWZQdHI8Q3J5
cHRvS2V5PiBrZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDEpKTsKKyAgICBSZWZQdHI8Q3J5cHRvS2V5PiBrZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFw
cGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKICAgICBpZiAoIWtleSkKLSAgICAgICAg
cmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJy
b3IoJnN0YXRlKTsKIAotICAgIFJlZlB0cjxDcnlwdG9LZXk+IHdyYXBwaW5nS2V5ID0gSlNDcnlw
dG9LZXk6OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKSk7CisgICAgUmVmUHRy
PENyeXB0b0tleT4gd3JhcHBpbmdLZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKHN0YXRlLnVu
Y2hlY2tlZEFyZ3VtZW50KDIpKTsKICAgICBpZiAoIWtleSkKLSAgICAgICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsK
IAogICAgIGlmICghd3JhcHBpbmdLZXktPmFsbG93cyhDcnlwdG9LZXlVc2FnZVdyYXBLZXkpKSB7
CiAgICAgICAgIG1faW1wbC0+ZG9jdW1lbnQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNv
dXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiS2V5IHVzYWdlcyBk
byBub3QgaW5jbHVkZSAnd3JhcEtleSciKSk7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIE5P
VF9TVVBQT1JURURfRVJSKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQog
Ci0gICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShleGVjLCBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgzKSk7CisgICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVB
bGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMykpOwog
ICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24o
KSk7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRv
QWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckVuY3J5cHQoZXhlYywgYWxn
b3JpdGhtLT5pZGVudGlmaWVyKCksIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDMpKTsKKyAgICBh
dXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFt
ZXRlcnNGb3JFbmNyeXB0KCZzdGF0ZSwgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIHN0YXRlLnVu
Y2hlY2tlZEFyZ3VtZW50KDMpKTsKICAgICBpZiAoIXBhcmFtZXRlcnMpIHsKLSAgICAgICAgQVNT
RVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgSlNQ
cm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVh
dGUoZXhlYywgZ2xvYmFsT2JqZWN0KCkpOwotICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVyKGV4
ZWMsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOworICAgIEpTUHJvbWlzZURlZmVy
cmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwg
Z2xvYmFsT2JqZWN0KCkpOworICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVyKCZzdGF0ZSwgZ2xv
YmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CiAKICAgICBDcnlwdG9BbGdvcml0aG0qIGFs
Z29yaXRobVB0ciA9IGFsZ29yaXRobS5yZWxlYXNlKCk7CiAgICAgQ3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycyogcGFyYW1ldGVyc1B0ciA9IHBhcmFtZXRlcnMucmVsZWFzZSgpOwpAQCAtNjk1LDkw
ICs2OTUsOTAgQEAgSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6d3JhcEtleShFeGVjU3RhdGUqIGV4
ZWMpCiAgICAgfTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFdlYkNvcmU6OmV4
cG9ydEtleShleGVjLCBrZXlGb3JtYXQsICprZXksIFdURjo6bW92ZShleHBvcnRTdWNjZXNzQ2Fs
bGJhY2spLCBXVEY6Om1vdmUoZXhwb3J0RmFpbHVyZUNhbGxiYWNrKSk7CisgICAgV2ViQ29yZTo6
ZXhwb3J0S2V5KHN0YXRlLCBrZXlGb3JtYXQsICprZXksIFdURjo6bW92ZShleHBvcnRTdWNjZXNz
Q2FsbGJhY2spLCBXVEY6Om1vdmUoZXhwb3J0RmFpbHVyZUNhbGxiYWNrKSk7CiAgICAgaWYgKGVj
KSB7CiAgICAgICAgIGRlbGV0ZSBhbGdvcml0aG1QdHI7CiAgICAgICAgIGRlbGV0ZSBwYXJhbWV0
ZXJzUHRyOwotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBzZXRE
T01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIH0KIAogICAgIHJldHVybiBwcm9taXNlRGVmZXJyZWQtPnByb21pc2UoKTsKIH0KIAotSlNW
YWx1ZSBKU1N1YnRsZUNyeXB0bzo6dW53cmFwS2V5KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUg
SlNTdWJ0bGVDcnlwdG86OnVud3JhcEtleShFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChl
eGVjLT5hcmd1bWVudENvdW50KCkgPCA1KQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJv
d0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Cisg
ICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA8IDUpCisgICAgICAgIHJldHVybiBzdGF0ZS52
bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
JnN0YXRlKSk7CiAKICAgICBDcnlwdG9LZXlGb3JtYXQga2V5Rm9ybWF0OwotICAgIGlmICghY3J5
cHRvS2V5Rm9ybWF0RnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIGtleUZvcm1h
dCkpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBpZiAoIWNy
eXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwga2V5Rm9y
bWF0KSkgeworICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBDcnlwdG9PcGVyYXRpb25EYXRhIHdy
YXBwZWRLZXlEYXRhOwotICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKGV4
ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCB3cmFwcGVkS2V5RGF0YSkpIHsKLSAgICAg
ICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBpZiAoIWNyeXB0b09wZXJhdGlv
bkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLCB3cmFw
cGVkS2V5RGF0YSkpIHsKKyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgUmVmUHRyPENyeXB0b0tl
eT4gdW53cmFwcGluZ0tleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMikpOworICAgIFJlZlB0cjxDcnlwdG9LZXk+IHVud3JhcHBpbmdLZXkgPSBKU0Ny
eXB0b0tleTo6dG9XcmFwcGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKICAgICBpZiAo
IXVud3JhcHBpbmdLZXkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAg
ICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CiAKICAgICBpZiAoIXVud3JhcHBp
bmdLZXktPmFsbG93cyhDcnlwdG9LZXlVc2FnZVVud3JhcEtleSkpIHsKICAgICAgICAgbV9pbXBs
LT5kb2N1bWVudCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2Fn
ZUxldmVsOjpFcnJvciwgQVNDSUlMaXRlcmFsKCJLZXkgdXNhZ2VzIGRvIG5vdCBpbmNsdWRlICd1
bndyYXBLZXknIikpOwotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRF
RF9FUlIpOworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VS
Uik7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxDcnlwdG9BbGdvcml0aG0+IHVud3JhcEFsZ29yaXRobTsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gdW53cmFwQWxnb3JpdGhtUGFyYW1ldGVy
czsKLSAgICB1bndyYXBBbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShleGVj
LCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgzKSk7CisgICAgdW53cmFwQWxnb3JpdGhtID0gY3Jl
YXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDMp
KTsKICAgICBpZiAoIXVud3JhcEFsZ29yaXRobSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgdW53cmFwQWxnb3JpdGhtUGFy
YW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0Zv
ckRlY3J5cHQoZXhlYywgdW53cmFwQWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDMpKTsKKyAgICB1bndyYXBBbGdvcml0aG1QYXJhbWV0ZXJzID0gSlNDcnlw
dG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRGVjcnlwdCgmc3RhdGUs
IHVud3JhcEFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgz
KSk7CiAgICAgaWYgKCF1bndyYXBBbGdvcml0aG1QYXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VS
VChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRp
b24oKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIHN0ZDo6
dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG0+IHVud3JhcHBlZEtleUFsZ29yaXRobTsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gdW53cmFwcGVkS2V5QWxn
b3JpdGhtUGFyYW1ldGVyczsKLSAgICBpZiAoIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDQpLmlz
TnVsbCgpKSB7Ci0gICAgICAgIHVud3JhcHBlZEtleUFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRo
bUZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDQpKTsKKyAgICBpZiAo
IXN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDQpLmlzTnVsbCgpKSB7CisgICAgICAgIHVud3JhcHBl
ZEtleUFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS51
bmNoZWNrZWRBcmd1bWVudCg0KSk7CiAgICAgICAgIGlmICghdW53cmFwcGVkS2V5QWxnb3JpdGht
KSB7Ci0gICAgICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICAg
ICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgICAgICB9Ci0gICAgICAgIHVud3JhcHBlZEtleUFsZ29yaXRobVBhcmFt
ZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JJ
bXBvcnRLZXkoZXhlYywgdW53cmFwcGVkS2V5QWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDQpKTsKKyAgICAgICAgdW53cmFwcGVkS2V5QWxnb3JpdGhtUGFy
YW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0Zv
ckltcG9ydEtleSgmc3RhdGUsIHVud3JhcHBlZEtleUFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBz
dGF0ZS51bmNoZWNrZWRBcmd1bWVudCg0KSk7CiAgICAgICAgIGlmICghdW53cmFwcGVkS2V5QWxn
b3JpdGhtUGFyYW1ldGVycykgewotICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKTsKKyAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGJvb2wg
ZXh0cmFjdGFibGUgPSBmYWxzZTsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDYp
IHsKLSAgICAgICAgZXh0cmFjdGFibGUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCg1KS50b0Jv
b2xlYW4oZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
c3RhdGUuYXJndW1lbnRDb3VudCgpID49IDYpIHsKKyAgICAgICAgZXh0cmFjdGFibGUgPSBzdGF0
ZS51bmNoZWNrZWRBcmd1bWVudCg1KS50b0Jvb2xlYW4oJnN0YXRlKTsKKyAgICAgICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgfQogCiAgICAgQ3J5cHRvS2V5VXNhZ2Uga2V5VXNhZ2VzID0gMDsKLSAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpID49IDcpIHsKLSAgICAgICAgaWYgKCFjcnlwdG9LZXlVc2FnZXNGcm9t
SlNWYWx1ZShleGVjLCBleGVjLT5hcmd1bWVudCg2KSwga2V5VXNhZ2VzKSkgewotICAgICAgICAg
ICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRD
b3VudCgpID49IDcpIHsKKyAgICAgICAgaWYgKCFjcnlwdG9LZXlVc2FnZXNGcm9tSlNWYWx1ZShz
dGF0ZSwgc3RhdGUuYXJndW1lbnQoNiksIGtleVVzYWdlcykpIHsKKyAgICAgICAgICAgIEFTU0VS
VChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVm
ZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCgpKTsK
LSAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcihleGVjLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlz
ZURlZmVycmVkKTsKLSAgICBTdHJvbmc8SlNET01HbG9iYWxPYmplY3Q+IGRvbUdsb2JhbE9iamVj
dChleGVjLT52bSgpLCBnbG9iYWxPYmplY3QoKSk7CisgICAgSlNQcm9taXNlRGVmZXJyZWQqIHBy
b21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxP
YmplY3QoKSk7CisgICAgRGVmZXJyZWRXcmFwcGVyIHdyYXBwZXIoJnN0YXRlLCBnbG9iYWxPYmpl
Y3QoKSwgcHJvbWlzZURlZmVycmVkKTsKKyAgICBTdHJvbmc8SlNET01HbG9iYWxPYmplY3Q+IGRv
bUdsb2JhbE9iamVjdChzdGF0ZS52bSgpLCBnbG9iYWxPYmplY3QoKSk7CiAKICAgICBDcnlwdG9B
bGdvcml0aG0qIHVud3JhcHBlZEtleUFsZ29yaXRobVB0ciA9IHVud3JhcHBlZEtleUFsZ29yaXRo
bS5yZWxlYXNlKCk7CiAgICAgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyogdW53cmFwcGVkS2V5
QWxnb3JpdGhtUGFyYW1ldGVyc1B0ciA9IHVud3JhcHBlZEtleUFsZ29yaXRobVBhcmFtZXRlcnMu
cmVsZWFzZSgpOwpAQCAtNzkwLDExICs3OTAsMTEgQEAgSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6
dW53cmFwS2V5KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgYXV0byBpbXBvcnRGYWlsdXJlQ2Fs
bGJhY2sgPSBbd3JhcHBlcl0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIHdyYXBwZXIucmVqZWN0
KG51bGxwdHIpOwogICAgICAgICB9OwotICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBkb21HbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgV2ViQ29yZTo6aW1wb3J0S2V5KGV4ZWMs
IGtleUZvcm1hdCwgc3RkOjptYWtlX3BhaXIocmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSks
IHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG0+KHVud3JhcHBlZEtleUFsZ29yaXRobVB0
ciksIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPih1bndyYXBwZWRL
ZXlBbGdvcml0aG1QYXJhbWV0ZXJzUHRyKSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgV1RGOjpt
b3ZlKGltcG9ydFN1Y2Nlc3NDYWxsYmFjayksIFdURjo6bW92ZShpbXBvcnRGYWlsdXJlQ2FsbGJh
Y2spKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIEV4ZWNT
dGF0ZSYgc3RhdGUgPSAqZG9tR2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgICAgIFdl
YkNvcmU6OmltcG9ydEtleShzdGF0ZSwga2V5Rm9ybWF0LCBzdGQ6Om1ha2VfcGFpcihyZXN1bHQu
ZGF0YSgpLCByZXN1bHQuc2l6ZSgpKSwgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobT4o
dW53cmFwcGVkS2V5QWxnb3JpdGhtUHRyKSwgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnM+KHVud3JhcHBlZEtleUFsZ29yaXRobVBhcmFtZXRlcnNQdHIpLCBleHRyYWN0
YWJsZSwga2V5VXNhZ2VzLCBXVEY6Om1vdmUoaW1wb3J0U3VjY2Vzc0NhbGxiYWNrKSwgV1RGOjpt
b3ZlKGltcG9ydEZhaWx1cmVDYWxsYmFjaykpOworICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBSZXBvcnQgZXhjZXB0aW9uIGRldGFpbHMg
dG8gY29uc29sZSwgYW5kIHBvc3NpYmx5IHRvIGNhbGxpbmcgc2NyaXB0IG9uY2UgdGhlcmUgaXMg
YSBzdGFuZGFyZGl6ZWQgd2F5IHRvIHBhc3MgZXJyb3JzIHRvIFdlYkNyeXB0byBwcm9taXNlIHJl
amVjdCBmdW5jdGlvbnMuCi0gICAgICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAg
ICAgICAgICAgc3RhdGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgICAgIGltcG9ydEZhaWx1
cmVDYWxsYmFjaygpOwogICAgICAgICB9CiAgICAgfTsKQEAgLTgxMCw3ICs4MTAsNyBAQCBKU1Zh
bHVlIEpTU3VidGxlQ3J5cHRvOjp1bndyYXBLZXkoRXhlY1N0YXRlKiBleGVjKQogICAgIGlmIChl
YykgewogICAgICAgICBkZWxldGUgdW53cmFwcGVkS2V5QWxnb3JpdGhtUHRyOwogICAgICAgICBk
ZWxldGUgdW53cmFwcGVkS2V5QWxnb3JpdGhtUGFyYW1ldGVyc1B0cjsKLSAgICAgICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMp
OwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAppbmRleCAxODg1YzU3N2U1
MjU4YWUzZGU1ZDJkMmQyYWRmY2IzMDkzOTFmZjc3Li5lYjE5ZjI1Nzg3MTk5ZjFlNzBlOTlhZjdh
ZDJmYjA0MjdjZTlmNzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1RleHRUcmFja0N1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNU
ZXh0VHJhY2tDdXN0b20uY3BwCkBAIC00MSwyOCArNDEsMjggQEAgdm9pZCBKU1RleHRUcmFjazo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KHJvb3QoJmltcGwoKSkpOwogfQogCi12b2lkIEpTVGV4dFRyYWNrOjpz
ZXRLaW5kKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNUZXh0VHJhY2s6
OnNldEtpbmQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICNpZiBFTkFCTEUo
TUVESUFfU09VUkNFKQotICAgIGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgYXV0byYgc3Ry
aW5nID0gdmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKKyAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsKCkuc2V0S2luZChz
dHJpbmcpOwogI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odmFsdWUpOwogI2VuZGlmCiB9CiAKLXZvaWQgSlNU
ZXh0VHJhY2s6OnNldExhbmd1YWdlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3Zv
aWQgSlNUZXh0VHJhY2s6OnNldExhbmd1YWdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFs
dWUpCiB7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKLSAgICBhdXRvJiBzdHJpbmcgPSB2YWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZz
dGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAg
ICAgaW1wbCgpLnNldExhbmd1YWdlKHN0cmluZyk7CiAjZWxzZQotICAgIFVOVVNFRF9QQVJBTShl
eGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7
CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJh
Y2tFdmVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyYWNrRXZl
bnRDdXN0b20uY3BwCmluZGV4IDk3OWVlMmEzMjA5YmYyZjAzZjVkNzg3YjA5YzVlYTMxY2I0MTMz
MDguLmY1MWQzYjk2M2M4MTgwM2NmZTcxYjk0N2I0MmM5ZGJkMDJiYjg1YmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJhY2tFdmVudEN1c3RvbS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmFja0V2ZW50Q3VzdG9tLmNwcApAQCAtMzYs
MTMgKzM2LDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotSlNWYWx1ZSBKU1RyYWNrRXZlbnQ6OnRyYWNrKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pT
VmFsdWUgSlNUcmFja0V2ZW50Ojp0cmFjayhFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewogICAg
IFRyYWNrQmFzZSogdHJhY2sgPSBpbXBsKCkudHJhY2soKTsKICAgICBpZiAoIXRyYWNrKQogICAg
ICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QoKSwgdHJhY2spOworICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHRy
YWNrKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAKaW5kZXggOTQ4Njc4OGE2NmIyNDIx
Mzc3ZGFjNTEwNmI2YmY1NTI2NzYyN2YwMC4uNmYwYWY1YWY1YThlYTFlMWVhN2U1ZmUxOTFlMGM4
MDdjMjA0MWU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRl
b1RyYWNrQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVv
VHJhY2tDdXN0b20uY3BwCkBAIC00MCwyOCArNDAsMjggQEAgdm9pZCBKU1ZpZGVvVHJhY2s6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChyb290KCZpbXBsKCkpKTsKIH0KIAotdm9pZCBKU1ZpZGVvVHJhY2s6OnNl
dEtpbmQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU1ZpZGVvVHJhY2s6
OnNldEtpbmQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICNpZiBFTkFCTEUo
TUVESUFfU09VUkNFKQotICAgIGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgYXV0byYgc3Ry
aW5nID0gdmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKKyAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsKCkuc2V0S2luZChz
dHJpbmcpOwogI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odmFsdWUpOwogI2VuZGlmCiB9CiAKLXZvaWQgSlNW
aWRlb1RyYWNrOjpzZXRMYW5ndWFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit2
b2lkIEpTVmlkZW9UcmFjazo6c2V0TGFuZ3VhZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSkKIHsKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQotICAgIGF1dG8mIHN0cmluZyA9IHZh
bHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgYXV0byYgc3RyaW5nID0gdmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUo
JnN0YXRlKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBpbXBsKCkuc2V0TGFuZ3VhZ2Uoc3RyaW5nKTsKICNlbHNlCi0gICAgVU5VU0VEX1BBUkFN
KGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZhbHVl
KTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZUN1c3RvbS5jcHAKaW5kZXggMjcwYjEy
MGEyM2VjZjhmZjM2OTJiNDliZDVjNmQyMDUwNDY2ZDQyYS4uNGU0ZTVjYTk4ZmMxNDkwMmEyY2Mw
MDBiNmFiMDYzODkwYTIxYjE2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwCkBA
IC0xNjgsMTggKzE2OCwxOCBAQCBlbnVtIE9iamVjdFR5cGUgewogICAgIGtCdWZmZXIsIGtSZW5k
ZXJidWZmZXIsIGtUZXh0dXJlLCBrVmVydGV4QXR0cmliCiB9OwogCi1zdGF0aWMgSlNWYWx1ZSBn
ZXRPYmplY3RQYXJhbWV0ZXIoSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBvYmosIEV4ZWNT
dGF0ZSogZXhlYywgT2JqZWN0VHlwZSBvYmplY3RUeXBlKQorc3RhdGljIEpTVmFsdWUgZ2V0T2Jq
ZWN0UGFyYW1ldGVyKEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogb2JqLCBFeGVjU3RhdGUm
IHN0YXRlLCBPYmplY3RUeXBlIG9iamVjdFR5cGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSAhPSAyKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihl
eGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAgaWYgKHN0YXRl
LmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gc3RhdGUudm0oKS50aHJvd0V4
Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwog
ICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UmIGNvbnRleHQgPSBvYmotPmltcGwoKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgwKS50b0ludDMyKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIHVuc2lnbmVkIHBuYW1lID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSku
dG9JbnQzMigmc3RhdGUpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgV2ViR0xHZXRJbmZvIGluZm87CiAgICAgc3dpdGNo
IChvYmplY3RUeXBlKSB7CkBAIC0yMDEsMTAgKzIwMSwxMCBAQCBzdGF0aWMgSlNWYWx1ZSBnZXRP
YmplY3RQYXJhbWV0ZXIoSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBvYmosIEV4ZWNTdGF0
ZSogZQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVj
KTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQotICAgIHJldHVybiB0b0pT
KGV4ZWMsIG9iai0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOworICAgIHJldHVybiB0b0pTKCZzdGF0
ZSwgb2JqLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7CiB9CiAKIGVudW0gV2hpY2hQcm9ncmFtQ2Fs
bCB7CkBAIC0yNjgsMTM3ICsyNjgsMTM3IEBAIHZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJmltcGwoKSk7CiB9CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpnZXRBdHRhY2hlZFNoYWRlcnMoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEF0dGFjaGVkU2hhZGVycyhFeGVj
U3RhdGUmIHN0YXRlKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQotICAg
ICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA8
IDEpCisgICAgICAgIHJldHVybiBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IGltcGwoKTsK
LSAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBKU1dlYkdMUHJvZ3JhbTo6dG9XcmFwcGVkKGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIXByb2dyYW0gJiYgIWV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiB0
aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBKU1dlYkdM
UHJvZ3JhbTo6dG9XcmFwcGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAo
IXByb2dyYW0gJiYgIXN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOwogICAgIFZlY3RvcjxS
ZWZQdHI8V2ViR0xTaGFkZXI+PiBzaGFkZXJzOwogICAgIGJvb2wgc3VjY2VlZCA9IGNvbnRleHQu
Z2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIHNoYWRlcnMsIGVjKTsKICAgICBpZiAoZWMpIHsK
LSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKCZzdGF0ZSwgZWMpOwogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgfQogICAgIGlm
ICghc3VjY2VlZCkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIEpTQzo6TWFya2VkQXJn
dW1lbnRCdWZmZXIgbGlzdDsKICAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgc2hhZGVycy5z
aXplKCk7ICsraWkpCi0gICAgICAgIGxpc3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
KCksIHNoYWRlcnNbaWldLmdldCgpKSk7Ci0gICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMs
IDAsIGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKKyAgICAgICAgbGlzdC5hcHBlbmQodG9KUygmc3Rh
dGUsIGdsb2JhbE9iamVjdCgpLCBzaGFkZXJzW2lpXS5nZXQoKSkpOworICAgIHJldHVybiBjb25z
dHJ1Y3RBcnJheSgmc3RhdGUsIDAsIGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKIH0KIAotSlNWYWx1
ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEV4dGVuc2lvbihFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0RXh0ZW5zaW9uKEV4
ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCi0g
ICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgp
IDwgMSkKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKICAgICAKICAgICBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgpOwotICAgIGNvbnN0IFN0cmluZyBu
YW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBjb25zdCBTdHJpbmcgbmFt
ZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZz
dGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICBXZWJHTEV4dGVuc2lvbiogZXh0ZW5zaW9uID0gY29udGV4dC5nZXRF
eHRlbnNpb24obmFtZSk7Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGV4
dGVuc2lvbik7CisgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgZXh0ZW5z
aW9uKTsKIH0KIAotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEJ1ZmZl
clBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6Z2V0QnVmZmVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0
dXJuIGdldE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVjLCBrQnVmZmVyKTsKKyAgICByZXR1cm4g
Z2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIHN0YXRlLCBrQnVmZmVyKTsKIH0KIAotSlNWYWx1ZSBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFt
ZXRlcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7
Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAzKQotICAgICAgICByZXR1cm4gZXhl
Yy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihleGVjKSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSAhPSAzKQorICAgICAgICBy
ZXR1cm4gc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwog
ICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAgdW5z
aWduZWQgdGFyZ2V0ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgdW5zaWduZWQgdGFyZ2V0ID0gc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMigmc3RhdGUpOworICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgdW5zaWdu
ZWQgYXR0YWNobWVudCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIHVuc2lnbmVkIGF0dGFjaG1lbnQg
PSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKCZzdGF0ZSk7CisgICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB1
bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLnRvSW50MzIoZXhlYyk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIHVuc2lnbmVkIHBuYW1lID0gc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMikudG9JbnQzMigmc3RhdGUpOworICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgV2ViR0xH
ZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcih0
YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCBlYyk7CiAgICAgaWYgKGVjKSB7Ci0gICAgICAgIHNl
dERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUs
IGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQotICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUs
IGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKIH0KIAotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmdldFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UGFyYW1ldGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0g
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAxKQotICAgICAgICByZXR1cm4gZXhlYy0+
dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihl
eGVjKSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSAhPSAxKQorICAgICAgICByZXR1
cm4gc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKCZzdGF0ZSkpOwogICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAg
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAgdW5zaWdu
ZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICB1bnNpZ25lZCBwbmFtZSA9IHN0YXRlLnVu
Y2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoJnN0YXRlKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMR2V0SW5m
byBpbmZvID0gY29udGV4dC5nZXRQYXJhbWV0ZXIocG5hbWUsIGVjKTsKICAgICBpZiAoZWMpIHsK
LSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKCZzdGF0ZSwgZWMpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9Ci0g
ICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOworICAgIHJldHVybiB0
b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwogfQogCi1KU1ZhbHVlIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UHJvZ3JhbVBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UHJvZ3JhbVBhcmFtZXRl
cihFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0g
MikKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENv
dW50KCkgIT0gMikKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0
YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKICAgICAKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250
ZXh0ID0gaW1wbCgpOwotICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9IEpTV2ViR0xQcm9ncmFt
Ojp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghcHJvZ3Jh
bSAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAg
ICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgIHVuc2lnbmVkIHBuYW1lID0g
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gSlNXZWJHTFByb2dy
YW06OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFwcm9n
cmFtICYmICFzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQor
ICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKKyAgICB1bnNpZ25lZCBwbmFt
ZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoJnN0YXRlKTsKKyAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0s
IHBuYW1lLCBlYyk7CiAgICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQotICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCgpLCBpbmZvKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBp
bmZvKTsKIH0KIAotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFJlbmRl
cmJ1ZmZlclBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSYgc3RhdGUp
CiB7Ci0gICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVjLCBrUmVuZGVyYnVm
ZmVyKTsKKyAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIHN0YXRlLCBrUmVuZGVy
YnVmZmVyKTsKIH0KIAotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFNo
YWRlclBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6Z2V0U2hhZGVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAg
aWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0o
KS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVj
KSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4g
c3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKCZzdGF0ZSkpOwogICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAgaWYgKCFleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICFleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgwKS5pbmhlcml0cyhKU1dlYkdMU2hhZGVyOjppbmZvKCkpKQotICAgICAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgV2ViR0xTaGFkZXIqIHNoYWRlciA9
IEpTV2ViR0xTaGFkZXI6OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0g
ICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4
ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoIXN0YXRlLnVuY2hl
Y2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgIXN0YXRlLnVuY2hlY2tlZEFy
Z3VtZW50KDApLmluaGVyaXRzKEpTV2ViR0xTaGFkZXI6OmluZm8oKSkpCisgICAgICAgIHJldHVy
biB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOworICAgIFdlYkdMU2hhZGVyKiBzaGFkZXIgPSBKU1dl
YkdMU2hhZGVyOjp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIHVu
c2lnbmVkIHBuYW1lID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMigmc3RhdGUp
OworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFNoYWRlclBhcmFtZXRl
cihzaGFkZXIsIHBuYW1lLCBlYyk7CiAgICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQotICAgIHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9i
amVjdCgpLCBpbmZvKTsKIH0KIAotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoRXhlY1N0YXRlJiBz
dGF0ZSkKIHsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgp
OwogICAgIGlmIChjb250ZXh0LmlzQ29udGV4dExvc3QoKSkKQEAgLTQwNiw1OSArNDA2LDU5IEBA
IEpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRTdXBwb3J0ZWRFeHRlbnNp
b25zKEV4ZWNTdGF0ZSogZXhlYykKICAgICBWZWN0b3I8U3RyaW5nPiB2YWx1ZSA9IGNvbnRleHQu
Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7
CiAgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHZhbHVlLnNpemUoKTsgKytpaSkKLSAgICAg
ICAgbGlzdC5hcHBlbmQoanNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgdmFsdWVbaWldKSk7Ci0gICAg
cmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKKyAg
ICAgICAgbGlzdC5hcHBlbmQoanNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZVtpaV0pKTsK
KyAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoJnN0YXRlLCAwLCBnbG9iYWxPYmplY3QoKSwgbGlz
dCk7CiB9CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRUZXhQYXJh
bWV0ZXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmdldFRleFBhcmFtZXRlcihFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIHJldHVybiBnZXRP
YmplY3RQYXJhbWV0ZXIodGhpcywgZXhlYywga1RleHR1cmUpOworICAgIHJldHVybiBnZXRPYmpl
Y3RQYXJhbWV0ZXIodGhpcywgc3RhdGUsIGtUZXh0dXJlKTsKIH0KIAotSlNWYWx1ZSBKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuaWZvcm0oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuaWZvcm0oRXhlY1N0YXRlJiBzdGF0
ZSkKIHsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCi0gICAgICAgIHJldHVy
biBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpICE9IDIpCisgICAg
ICAgIHJldHVybiBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IGltcGwoKTsKLSAg
ICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBKU1dlYkdMUHJvZ3JhbTo6dG9XcmFwcGVkKGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIXByb2dyYW0gJiYgIWV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiB0aHJv
d1R5cGVFcnJvcihleGVjKTsKLSAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSBK
U1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
MSkpOwotICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsK
KyAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBKU1dlYkdMUHJvZ3JhbTo6dG9XcmFwcGVkKHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoIXByb2dyYW0gJiYgIXN0YXRlLnVu
Y2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0
aHJvd1R5cGVFcnJvcigmc3RhdGUpOworICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1
bWVudCgxKSk7CisgICAgaWYgKCFsb2NhdGlvbiAmJiAhc3RhdGUudW5jaGVja2VkQXJndW1lbnQo
MSkuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZz
dGF0ZSk7CiAgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFVuaWZvcm0ocHJvZ3Jh
bSwgbG9jYXRpb24sIGVjKTsKICAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIGVjKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0KCksIGluZm8pOworICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0
KCksIGluZm8pOwogfQogCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0
VmVydGV4QXR0cmliKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpnZXRWZXJ0ZXhBdHRyaWIoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1
cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGtWZXJ0ZXhBdHRyaWIpOworICAgIHJl
dHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgc3RhdGUsIGtWZXJ0ZXhBdHRyaWIpOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci1ib29sIHRvVmVj
dG9yKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKK2Jvb2wgdG9WZWN0b3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3Rv
cikKIHsKICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7Ci0gICAg
aW50MzJfdCBsZW5ndGggPSBvYmplY3QtPmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCkudG9JbnQzMihleGVjKTsKKyAgICBpbnQzMl90IGxlbmd0aCA9IG9iamVjdC0+
Z2V0KCZzdGF0ZSwgc3RhdGUudm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvSW50MzIoJnN0
YXRlKTsKICAgICAKICAgICBpZiAoIXZlY3Rvci50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHZlY3Rvci5yZXNpemUobGVuZ3RoKTsKICAgICAK
ICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBKU0M6
OkpTVmFsdWUgdiA9IG9iamVjdC0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIEpTQzo6SlNWYWx1ZSB2ID0gb2JqZWN0LT5nZXQoJnN0YXRl
LCBpKTsKKyAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB2ZWN0b3JbaV0gPSBzdGF0aWNfY2FzdDxUPih2LnRvTnVtYmVy
KGV4ZWMpKTsKKyAgICAgICAgdmVjdG9yW2ldID0gc3RhdGljX2Nhc3Q8VD4odi50b051bWJlcigm
c3RhdGUpKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHRydWU7CkBAIC00ODYsMjYgKzQ4Niwy
NiBAQCBzdGF0aWMgYm9vbCBmdW5jdGlvbkZvclVuaWZvcm0oRGF0YUZ1bmN0aW9uVG9DYWxsIGYp
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlv
bmYoRGF0YUZ1bmN0aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlJiBjb250ZXh0KQorc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rp
b25mKERhdGFGdW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSAhPSAyKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVj
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAgaWYgKHN0YXRlLmFy
Z3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gc3RhdGUudm0oKS50aHJvd0V4Y2Vw
dGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogICAg
IAogICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IDA7CiAgICAgbG9uZyBpbmRl
eCA9IC0xOwogICAgIAogICAgIGlmIChmdW5jdGlvbkZvclVuaWZvcm0oZikpIHsKLSAgICAgICAg
bG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMCkpOwotICAgICAgICBpZiAoIWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKGV4ZWMpOworICAgICAgICBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9j
YXRpb246OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgICAgIGlm
ICghbG9jYXRpb24gJiYgIXN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKICAgICB9
IGVsc2UKLSAgICAgICAgaW5kZXggPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMy
KGV4ZWMpOworICAgICAgICBpbmRleCA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50
MzIoJnN0YXRlKTsKICAgICAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICAKLSAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9GbG9hdDMyQXJyYXko
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkgICAgCisgICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvRmxvYXQzMkFy
cmF5KHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIAogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwpAQCAtNTM3LDEzICs1MzcsMTMgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBk
YXRhRnVuY3Rpb25mKERhdGFGdW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
V2UKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBl
Yyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KICAgICAKICAgICBWZWN0
b3I8ZmxvYXQsIDY0PiBhcnJheTsKLSAgICBpZiAoIXRvVmVjdG9yKGV4ZWMsIGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDEpLCBhcnJheSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihl
eGVjKTsKKyAgICBpZiAoIXRvVmVjdG9yKHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgx
KSwgYXJyYXkpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKICAgICAK
ICAgICBzd2l0Y2ggKGYpIHsKICAgICBjYXNlIGZfdW5pZm9ybTF2OgpAQCAtNTcyLDIwICs1NzIs
MjAgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25mKERhdGFGdW5jdGlvblRvQ2Fs
bCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgV2UKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IAotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZz
dGF0ZSwgZWMpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgSlNDOjpK
U1ZhbHVlIGRhdGFGdW5jdGlvbmkoRGF0YUZ1bmN0aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0KQorc3RhdGljIEpTQzo6
SlNWYWx1ZSBkYXRhRnVuY3Rpb25pKERhdGFGdW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCiB7Ci0gICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50
aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7
CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gc3Rh
dGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKCZzdGF0ZSkpOwogICAgIAotICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9
IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7Ci0gICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCku
aXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMp
OworICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9j
YXRpb246OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFs
b2NhdGlvbiAmJiAhc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwo
KSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CiAgICAgCi0gICAgUmVm
UHRyPEludDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0b0ludDMyQXJyYXkoZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMSkpOworICAgIFJlZlB0cjxJbnQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9JbnQz
MkFycmF5KHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKICAgICAKICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKICAgICBpZiAod2ViR0xBcnJheSkgewpAQCAtNjA2LDE0ICs2MDYsMTQgQEAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25pKERhdGFGdW5jdGlvblRvQ2FsbCBmLCBK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgV2UKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBzZXRE
T01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIH0KICAgICAKICAgICAKICAgICBWZWN0b3I8aW50LCA2ND4gYXJyYXk7Ci0gICAgaWYgKCF0
b1ZlY3RvcihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgYXJyYXkpKQotICAgICAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgaWYgKCF0b1ZlY3RvcihzdGF0ZSwg
c3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSksIGFycmF5KSkKKyAgICAgICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKCZzdGF0ZSk7CiAgICAgCiAgICAgc3dpdGNoIChmKSB7CiAgICAgY2FzZSBmX3Vu
aWZvcm0xdjoKQEAgLTYzMiwyNCArNjMyLDI0IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1
bmN0aW9uaShEYXRhRnVuY3Rpb25Ub0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFdlCiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIAotc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25NYXRyaXgoRGF0YUZ1
bmN0aW9uTWF0cml4VG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlJiBjb250ZXh0KQorc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25N
YXRyaXgoRGF0YUZ1bmN0aW9uTWF0cml4VG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkKIHsKLSAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpICE9IDMpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0
aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAo
c3RhdGUuYXJndW1lbnRDb3VudCgpICE9IDMpCisgICAgICAgIHJldHVybiBzdGF0ZS52bSgpLnRo
cm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRl
KSk7CiAgICAgCi0gICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gSlNXZWJHTFVu
aWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAg
ICBpZiAoIWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9X
cmFwcGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoIWxvY2F0aW9uICYm
ICFzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKICAgICAKLSAgICBib29sIHRyYW5zcG9z
ZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvQm9vbGVhbihleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpICAgIAorICAgIGJvb2wgdHJhbnNwb3NlID0gc3RhdGUudW5j
aGVja2VkQXJndW1lbnQoMSkudG9Cb29sZWFuKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAKLSAgICBSZWZQ
dHI8RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9GbG9hdDMyQXJyYXkoZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMikpOworICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0
b0Zsb2F0MzJBcnJheShzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSk7CiAgICAgCiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaWYgKHdlYkdMQXJyYXkpIHsKQEAgLTY2NSwxMyArNjY1
LDEzIEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uTWF0cml4KERhdGFGdW5jdGlv
bk1hdHJpeFRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICB9CiAgICAgCiAgICAgVmVjdG9yPGZsb2F0LCA2ND4gYXJyYXk7Ci0gICAgaWYg
KCF0b1ZlY3RvcihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKSwgYXJyYXkpKQotICAg
ICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgaWYgKCF0b1ZlY3RvcihzdGF0
ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMiksIGFycmF5KSkKKyAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKCZzdGF0ZSk7CiAgICAgCiAgICAgc3dpdGNoIChmKSB7CiAgICAgY2FzZSBm
X3VuaWZvcm1NYXRyaXgyZnY6CkBAIC02ODUsODMgKzY4NSw4MyBAQCBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGRhdGFGdW5jdGlvbk1hdHJpeChEYXRhRnVuY3Rpb25NYXRyaXhUb0NhbGwgZiwgSlNDOjpF
eGVjU3RhdAogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCi0gICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnVuaWZvcm0xZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCitKU0M6OkpTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMWZ2KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSkKIHsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0xdiwgZXhlYywgaW1wbCgp
KTsKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0xdiwgc3RhdGUsIGltcGwoKSk7
CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0x
aXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp1bmlmb3JtMWl2KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1
cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm0xdiwgZXhlYywgaW1wbCgpKTsKKyAgICByZXR1cm4g
ZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm0xdiwgc3RhdGUsIGltcGwoKSk7CiB9CiAKLUpTQzo6SlNW
YWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yZnYoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlm
b3JtMmZ2KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9u
ZihmX3VuaWZvcm0ydiwgZXhlYywgaW1wbCgpKTsKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihm
X3VuaWZvcm0ydiwgc3RhdGUsIGltcGwoKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCitKU0M6
OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMml2KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm0ydiwg
ZXhlYywgaW1wbCgpKTsKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm0ydiwgc3Rh
dGUsIGltcGwoKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnVuaWZvcm0zZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCitKU0M6OkpTVmFsdWUgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtM2Z2KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkK
IHsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0zdiwgZXhlYywgaW1wbCgpKTsK
KyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0zdiwgc3RhdGUsIGltcGwoKSk7CiB9
CiAKLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0zaXYo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp1bmlmb3JtM2l2KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1cm4g
ZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm0zdiwgZXhlYywgaW1wbCgpKTsKKyAgICByZXR1cm4gZGF0
YUZ1bmN0aW9uaShmX3VuaWZvcm0zdiwgc3RhdGUsIGltcGwoKSk7CiB9CiAKLUpTQzo6SlNWYWx1
ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm00ZnYoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3Jt
NGZ2KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihm
X3VuaWZvcm00diwgZXhlYywgaW1wbCgpKTsKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3Vu
aWZvcm00diwgc3RhdGUsIGltcGwoKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnVuaWZvcm00aXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCitKU0M6OkpT
VmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtNGl2KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm00diwgZXhl
YywgaW1wbCgpKTsKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm00diwgc3RhdGUs
IGltcGwoKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnVuaWZvcm1NYXRyaXgyZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCitKU0M6OkpTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4MmZ2KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSkKIHsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJp
eDJmdiwgZXhlYywgaW1wbCgpKTsKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uTWF0cml4KGZfdW5p
Zm9ybU1hdHJpeDJmdiwgc3RhdGUsIGltcGwoKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1NYXRyaXgzZnYoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0
cml4M2Z2KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9u
TWF0cml4KGZfdW5pZm9ybU1hdHJpeDNmdiwgZXhlYywgaW1wbCgpKTsKKyAgICByZXR1cm4gZGF0
YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDNmdiwgc3RhdGUsIGltcGwoKSk7CiB9CiAK
LUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1NYXRyaXg0
ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp1bmlmb3JtTWF0cml4NGZ2KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAg
ICByZXR1cm4gZGF0YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDRmdiwgZXhlYywgaW1w
bCgpKTsKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDRmdiwg
c3RhdGUsIGltcGwoKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnZlcnRleEF0dHJpYjFmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK0pTQzo6SlNWYWx1
ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjFmdihKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIx
diwgZXhlYywgaW1wbCgpKTsKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRleEF0dHJp
YjF2LCBzdGF0ZSwgaW1wbCgpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dmVydGV4QXR0cmliMmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQorSlNDOjpK
U1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliMmZ2KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRleEF0
dHJpYjJ2LCBleGVjLCBpbXBsKCkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4
QXR0cmliMnYsIHN0YXRlLCBpbXBsKCkpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIzZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCitK
U0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIzZnYo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVy
dGV4QXR0cmliM3YsIGV4ZWMsIGltcGwoKSk7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92
ZXJ0ZXhBdHRyaWIzdiwgc3RhdGUsIGltcGwoKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjRmdihKU0M6OkV4ZWNTdGF0ZSogZXhl
YykKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJp
YjRmdihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYo
Zl92ZXJ0ZXhBdHRyaWI0diwgZXhlYywgaW1wbCgpKTsKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9u
ZihmX3ZlcnRleEF0dHJpYjR2LCBzdGF0ZSwgaW1wbCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJD
dXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3Bw
CmluZGV4IDIxNzVmYzZlMWExY2ViNTVkNjgwODM3YWVlODFkNDZlZmNlNzhmY2YuLjA1YTllNzAy
ZTdjODE5YmY3Yjc1MWQ5YmU3N2MxMTJiZTM1OTRmYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAKQEAgLTQwLDkgKzQwLDkgQEAgdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU0M6OkpTVmFsdWUgSlNXb3Jr
ZXI6OnBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQorSlNDOjpKU1ZhbHVlIEpTV29y
a2VyOjpwb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIGhh
bmRsZVBvc3RNZXNzYWdlKGV4ZWMsICZpbXBsKCkpOworICAgIHJldHVybiBoYW5kbGVQb3N0TWVz
c2FnZShzdGF0ZSwgJmltcGwoKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc3RydWN0SlNXb3JrZXIoRXhlY1N0YXRlKiBleGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAppbmRleCA4
NTdkNDgwOWE3ZDFjYWVmNGI4YzYxYTU2OTA4NWU2Yjg2ZDUyMDFhLi4xMjg5OGNjOTc1YmVmNTAw
YjNiMTBkYmFmMWY2NTBhODZkYzNjMzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcApAQCAtNjcsNDMgKzY3
LDQzIEBAIGJvb2wgSlNXb3JrZXJHbG9iYWxTY29wZTo6Z2V0T3duUHJvcGVydHlTbG90RGVsZWdh
dGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1K
U1ZhbHVlIEpTV29ya2VyR2xvYmFsU2NvcGU6OmltcG9ydFNjcmlwdHMoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjppbXBvcnRTY3JpcHRzKEV4ZWNTdGF0ZSYg
c3RhdGUpCiB7Ci0gICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgaWYgKCFzdGF0
ZS5hcmd1bWVudENvdW50KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAg
VmVjdG9yPFN0cmluZz4gdXJsczsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhlYy0+
YXJndW1lbnRDb3VudCgpOyBpKyspIHsKLSAgICAgICAgdXJscy5hcHBlbmQoZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0
ZS5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAgICAgICB1cmxzLmFwcGVuZChzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudChpKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpKTsKKyAgICAg
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgfQogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogCiAgICAgaW1wbCgpLmlt
cG9ydFNjcmlwdHModXJscywgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Cisg
ICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQogCi1KU1ZhbHVlIEpTV29ya2VyR2xvYmFsU2NvcGU6OnNldFRpbWVvdXQoRXhlY1N0YXRl
KiBleGVjKQorSlNWYWx1ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjpzZXRUaW1lb3V0KEV4ZWNTdGF0
ZSYgc3RhdGUpCiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFNjaGVkdWxlZEFjdGlvbj4gYWN0aW9u
ID0gU2NoZWR1bGVkQWN0aW9uOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KCktPndvcmxkKCks
IGltcGwoKS5jb250ZW50U2VjdXJpdHlQb2xpY3koKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNj
aGVkdWxlZEFjdGlvbjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCktPndvcmxkKCksIGlt
cGwoKS5jb250ZW50U2VjdXJpdHlQb2xpY3koKSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpZiAoIWFjdGlvbikKICAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKDApOwotICAgIGludCBkZWxheSA9IGV4ZWMtPmFyZ3VtZW50
KDEpLnRvSW50MzIoZXhlYyk7CisgICAgaW50IGRlbGF5ID0gc3RhdGUuYXJndW1lbnQoMSkudG9J
bnQzMigmc3RhdGUpOwogICAgIHJldHVybiBqc051bWJlcihpbXBsKCkuc2V0VGltZW91dChXVEY6
Om1vdmUoYWN0aW9uKSwgZGVsYXkpKTsKIH0KIAotSlNWYWx1ZSBKU1dvcmtlckdsb2JhbFNjb3Bl
OjpzZXRJbnRlcnZhbChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTV29ya2VyR2xvYmFsU2Nv
cGU6OnNldEludGVydmFsKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFNjaGVkdWxlZEFjdGlvbj4gYWN0aW9uID0gU2NoZWR1bGVkQWN0aW9uOjpjcmVhdGUoZXhlYywg
Z2xvYmFsT2JqZWN0KCktPndvcmxkKCksIGltcGwoKS5jb250ZW50U2VjdXJpdHlQb2xpY3koKSk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIHN0ZDo6dW5pcXVlX3B0cjxTY2hl
ZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRlKCZzdGF0ZSwgZ2xv
YmFsT2JqZWN0KCktPndvcmxkKCksIGltcGwoKS5jb250ZW50U2VjdXJpdHlQb2xpY3koKSk7Cisg
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICBpZiAoIWFjdGlvbikKICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKDApOwotICAgIGlu
dCBkZWxheSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgaW50IGRlbGF5
ID0gc3RhdGUuYXJndW1lbnQoMSkudG9JbnQzMigmc3RhdGUpOwogICAgIHJldHVybiBqc051bWJl
cihpbXBsKCkuc2V0SW50ZXJ2YWwoV1RGOjptb3ZlKGFjdGlvbiksIGRlbGF5KSk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0
b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3Rv
bS5jcHAKaW5kZXggMGY5YzFjYWYwMDIyYWFmMWU3YThkMjQ2ZDU4MTVmYjgxNTIwMjZjZS4uMTE1
NDU3NDUzMWRjZmQ1YzkzN2E2NWY5MjVkMDQxMzZjMDdiMTZlNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAKQEAgLTcy
LDIyICs3MiwyMiBAQCB2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogfQogCiAvLyBDdXN0b20gZnVuY3Rpb25zCi1KU1Zh
bHVlIEpTWE1MSHR0cFJlcXVlc3Q6Om9wZW4oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1hN
TEh0dHBSZXF1ZXN0OjpvcGVuKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA8IDIpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0
aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAo
c3RhdGUuYXJndW1lbnRDb3VudCgpIDwgMikKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhy
b3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUp
KTsKIAotICAgIGNvbnN0IFVSTCYgdXJsID0gaW1wbCgpLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+Y29tcGxldGVVUkwoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpKTsKLSAgICBTdHJpbmcgbWV0aG9kID0gZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIGNvbnN0IFVSTCYgdXJsID0g
aW1wbCgpLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Y29tcGxldGVVUkwoc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoMSkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKSk7CisgICAgU3Ry
aW5nIG1ldGhvZCA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSkt
PnZhbHVlKCZzdGF0ZSk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpZiAoZXhl
Yy0+YXJndW1lbnRDb3VudCgpID49IDMpIHsKLSAgICAgICAgYm9vbCBhc3luYyA9IGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVjKTsKLSAgICAgICAgaWYgKCFleGVjLT5h
cmd1bWVudCgzKS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdXNlciA9IHZh
bHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDMp
KTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID49IDMpIHsKKyAgICAgICAgYm9vbCBh
c3luYyA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLnRvQm9vbGVhbigmc3RhdGUpOworICAg
ICAgICBpZiAoIXN0YXRlLmFyZ3VtZW50KDMpLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgICAg
IFN0cmluZyB1c2VyID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS51
bmNoZWNrZWRBcmd1bWVudCgzKSk7CiAKLSAgICAgICAgICAgIGlmICghZXhlYy0+YXJndW1lbnQo
NCkuaXNVbmRlZmluZWQoKSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBwYXNzd29yZCA9IHZh
bHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDQp
KTsKKyAgICAgICAgICAgIGlmICghc3RhdGUuYXJndW1lbnQoNCkuaXNVbmRlZmluZWQoKSkgewor
ICAgICAgICAgICAgICAgIFN0cmluZyBwYXNzd29yZCA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENo
ZWNrKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoNCkpOwogICAgICAgICAgICAgICAg
IGltcGwoKS5vcGVuKG1ldGhvZCwgdXJsLCBhc3luYywgdXNlciwgcGFzc3dvcmQsIGVjKTsKICAg
ICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIGltcGwoKS5vcGVuKG1ldGhvZCwgdXJs
LCBhc3luYywgdXNlciwgZWMpOwpAQCAtOTYsNyArOTYsNyBAQCBKU1ZhbHVlIEpTWE1MSHR0cFJl
cXVlc3Q6Om9wZW4oRXhlY1N0YXRlKiBleGVjKQogICAgIH0gZWxzZQogICAgICAgICBpbXBsKCku
b3BlbihtZXRob2QsIHVybCwgZWMpOwogCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
KyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKQEAgLTEzNiwxMiArMTM2LDEyIEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fdXJs
OwogfTsKIAotSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0OjpzZW5kKEV4ZWNTdGF0ZSogZXhlYykK
K0pTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6c2VuZChFeGVjU3RhdGUmIHN0YXRlKQogewogICAg
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRYTUxIdHRwUmVxdWVzdChpbXBsKCku
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBpbXBsKCkudXJsKCkpOwogCiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgSlNWYWx1ZSB2YWwgPSBleGVjLT5hcmd1bWVudCgwKTsKKyAgICBK
U1ZhbHVlIHZhbCA9IHN0YXRlLmFyZ3VtZW50KDApOwogICAgIGlmICh2YWwuaXNVbmRlZmluZWRP
ck51bGwoKSkKICAgICAgICAgaW1wbCgpLnNlbmQoZWMpOwogICAgIGVsc2UgaWYgKHZhbC5pbmhl
cml0cyhKU0RvY3VtZW50OjppbmZvKCkpKQpAQCAtMTU2LDI4ICsxNTYsMjggQEAgSlNWYWx1ZSBK
U1hNTEh0dHBSZXF1ZXN0OjpzZW5kKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgUmVmUHRyPEFy
cmF5QnVmZmVyVmlldz4gdmlldyA9IHRvQXJyYXlCdWZmZXJWaWV3KHZhbCk7CiAgICAgICAgIGlt
cGwoKS5zZW5kKHZpZXcuZ2V0KCksIGVjKTsKICAgICB9IGVsc2UKLSAgICAgICAgaW1wbCgpLnNl
bmQodmFsLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgZWMpOworICAgICAgICBpbXBsKCku
c2VuZCh2YWwudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKSwgZWMpOwogCiAgICAgU2Vu
ZEZ1bmN0b3IgZnVuY3RvcjsKLSAgICBleGVjLT5pdGVyYXRlKGZ1bmN0b3IpOworICAgIHN0YXRl
Lml0ZXJhdGUoZnVuY3Rvcik7CiAgICAgaW1wbCgpLnNldExhc3RTZW5kTGluZUFuZENvbHVtbk51
bWJlcihmdW5jdG9yLmxpbmUoKSwgZnVuY3Rvci5jb2x1bW4oKSk7CiAgICAgaW1wbCgpLnNldExh
c3RTZW5kVVJMKGZ1bmN0b3IudXJsKCkpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCi1KU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlVGV4dChFeGVjU3Rh
dGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlVGV4dChF
eGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAg
IFN0cmluZyB0ZXh0ID0gaW1wbCgpLnJlc3BvbnNlVGV4dChlYyk7CiAgICAgaWYgKGVjKSB7Ci0g
ICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlv
bigmc3RhdGUsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQotICAg
IHJldHVybiBqc093bmVkU3RyaW5nT3JOdWxsKGV4ZWMsIHRleHQpOworICAgIHJldHVybiBqc093
bmVkU3RyaW5nT3JOdWxsKCZzdGF0ZSwgdGV4dCk7CiB9CiAKLUpTVmFsdWUgSlNYTUxIdHRwUmVx
dWVzdDo6cmVzcG9uc2UoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU1hNTEh0dHBS
ZXF1ZXN0OjpyZXNwb25zZShFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewogICAgIC8vIEZJWE1F
OiBVc2UgQ2FjaGVkQXR0cmlidXRlIGZvciBvdGhlciB0eXBlcyB0aGFuIEpTT04gYXMgd2VsbC4K
ICAgICBpZiAobV9yZXNwb25zZSAmJiBpbXBsKCkucmVzcG9uc2VDYWNoZUlzVmFsaWQoKSkKQEAg
LTE4OSwxNSArMTg5LDE1IEBAIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2UoRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAogICAgIHN3aXRjaCAoaW1wbCgpLnJlc3BvbnNlVHlwZUNvZGUo
KSkgewogICAgIGNhc2UgWE1MSHR0cFJlcXVlc3Q6OlJlc3BvbnNlVHlwZURlZmF1bHQ6CiAgICAg
Y2FzZSBYTUxIdHRwUmVxdWVzdDo6UmVzcG9uc2VUeXBlVGV4dDoKLSAgICAgICAgcmV0dXJuIHJl
c3BvbnNlVGV4dChleGVjKTsKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlVGV4dChzdGF0ZSk7CiAK
ICAgICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpSZXNwb25zZVR5cGVKU09OOgogICAgICAgICB7Ci0g
ICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSlNPTlBhcnNlKGV4ZWMsIGltcGwoKS5yZXNwb25z
ZVRleHRJZ25vcmluZ1Jlc3BvbnNlVHlwZSgpKTsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBKU09OUGFyc2UoJnN0YXRlLCBpbXBsKCkucmVzcG9uc2VUZXh0SWdub3JpbmdSZXNwb25zZVR5
cGUoKSk7CiAgICAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgICAgIHZhbHVlID0g
anNOdWxsKCk7CiAgICAgICAgICAgICBKU1hNTEh0dHBSZXF1ZXN0KiBqc1JlcXVlc3QgPSBjb25z
dF9jYXN0PEpTWE1MSHR0cFJlcXVlc3QqPih0aGlzKTsKLSAgICAgICAgICAgIGpzUmVxdWVzdC0+
bV9yZXNwb25zZS5zZXQoZXhlYy0+dm0oKSwganNSZXF1ZXN0LCB2YWx1ZSk7CisgICAgICAgICAg
ICBqc1JlcXVlc3QtPm1fcmVzcG9uc2Uuc2V0KHN0YXRlLnZtKCksIGpzUmVxdWVzdCwgdmFsdWUp
OwogCiAgICAgICAgICAgICBpbXBsKCkuZGlkQ2FjaGVSZXNwb25zZUpTT04oKTsKIApAQCAtMjA5
LDE3ICsyMDksMTcgQEAgSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZShFeGVjU3Rh
dGUqIGV4ZWMpIGNvbnN0CiAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAg
ICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGltcGwoKS5yZXNwb25zZVhNTChlYyk7CiAgICAg
ICAgICAgICBpZiAoZWMpIHsKLSAgICAgICAgICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywg
ZWMpOworICAgICAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICAg
ICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBkb2N1bWVudCk7CisgICAgICAg
ICAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBkb2N1bWVudCk7CiAgICAg
ICAgIH0KIAogICAgIGNhc2UgWE1MSHR0cFJlcXVlc3Q6OlJlc3BvbnNlVHlwZUJsb2I6Ci0gICAg
ICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbXBsKCkucmVzcG9uc2VCbG9i
KCkpOworICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBpbXBsKCku
cmVzcG9uc2VCbG9iKCkpOwogCiAgICAgY2FzZSBYTUxIdHRwUmVxdWVzdDo6UmVzcG9uc2VUeXBl
QXJyYXlCdWZmZXI6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBp
bXBsKCkucmVzcG9uc2VBcnJheUJ1ZmZlcigpKTsKKyAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRl
LCBnbG9iYWxPYmplY3QoKSwgaW1wbCgpLnJlc3BvbnNlQXJyYXlCdWZmZXIoKSk7CiAgICAgfQog
CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAppbmRleCBkOThhZTA0MmUxMmMwNTgw
MjZjNWRlNWUyOWIxNjZiN2Y1NmI4MWFjLi4zMzFiOWYxYjBiYmY1NzlhYzQ1MmQwN2VkYzFiOWY2
NThmY2Y2MTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQ
cm9jZXNzb3JDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNM
VFByb2Nlc3NvckN1c3RvbS5jcHAKQEAgLTQ2LDMzICs0NiwzMyBAQCB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNYU0xUUHJvY2Vzc29yOjpz
ZXRQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6OnNl
dFBhcmFtZXRlcihFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudCgx
KS5pc1VuZGVmaW5lZE9yTnVsbCgpIHx8IGV4ZWMtPmFyZ3VtZW50KDIpLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCisgICAgaWYgKHN0YXRlLmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkgfHwg
c3RhdGUuYXJndW1lbnQoMikuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7IC8vIFRocm93IGV4Y2VwdGlvbj8KLSAgICBTdHJpbmcgbmFtZXNwYWNlVVJJ
ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
OwotICAgIFN0cmluZyBsb2NhbE5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgU3RyaW5nIHZhbHVlID0gZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMikudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIFN0cmluZyBu
YW1lc3BhY2VVUkkgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUp
LT52YWx1ZSgmc3RhdGUpOworICAgIFN0cmluZyBsb2NhbE5hbWUgPSBzdGF0ZS51bmNoZWNrZWRB
cmd1bWVudCgxKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOworICAgIFN0cmluZyB2
YWx1ZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVl
KCZzdGF0ZSk7CiAgICAgaW1wbCgpLnNldFBhcmFtZXRlcihuYW1lc3BhY2VVUkksIGxvY2FsTmFt
ZSwgdmFsdWUpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTWFNM
VFByb2Nlc3Nvcjo6Z2V0UGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNYU0xU
UHJvY2Vzc29yOjpnZXRQYXJhbWV0ZXIoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoZXhl
Yy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICBpZiAoc3RhdGUuYXJndW1l
bnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0gICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBTdHJpbmcgbG9jYWxOYW1lID0gZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIFN0
cmluZyBuYW1lc3BhY2VVUkkgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZygm
c3RhdGUpLT52YWx1ZSgmc3RhdGUpOworICAgIFN0cmluZyBsb2NhbE5hbWUgPSBzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudCgxKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwogICAgIFN0
cmluZyB2YWx1ZSA9IGltcGwoKS5nZXRQYXJhbWV0ZXIobmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUp
OwotICAgIHJldHVybiBqc1N0cmluZ09yVW5kZWZpbmVkKGV4ZWMsIHZhbHVlKTsKKyAgICByZXR1
cm4ganNTdHJpbmdPclVuZGVmaW5lZCgmc3RhdGUsIHZhbHVlKTsKIH0KIAotSlNWYWx1ZSBKU1hT
TFRQcm9jZXNzb3I6OnJlbW92ZVBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
WFNMVFByb2Nlc3Nvcjo6cmVtb3ZlUGFyYW1ldGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAg
aWYgKGV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgaWYgKHN0YXRl
LmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgU3RyaW5nIGxvY2FsTmFtZSA9
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
KyAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9T
dHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKKyAgICBTdHJpbmcgbG9jYWxOYW1lID0gc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMSkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsK
ICAgICBpbXBsKCkucmVtb3ZlUGFyYW1ldGVyKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKTsKICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggZGY0NGQyZmVkYjdjZmZkMWVmMzM2
MjllODhlNTE4ZGI4YzhiZmE0OC4uZTE5MTVhYTNhMGNkNzQzNDliZGU0OTBjOGU0Njg0NjE1ZmIy
ZDFiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0KQEAgLTEwNzcsMTIgKzEwNzcsMTIgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAg
ICAgICAgICAgICBpZiAoSGFzQ3VzdG9tR2V0dGVyKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzKSkgewogICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIjaWYgJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKICAg
ICAgICAgICAgICAgICBteSAkbWV0aG9kTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0
KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICBKU0M6OkpTVmFsdWUgIiAuICRtZXRob2ROYW1lIC4gIihKU0M6OkV4
ZWNTdGF0ZSopIGNvbnN0O1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICBKU0M6OkpTVmFsdWUgIiAuICRtZXRob2ROYW1lIC4gIihKU0M6OkV4ZWNTdGF0ZSYp
IGNvbnN0O1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNlbmRp
ZlxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
aWYgKEhhc0N1c3RvbVNldHRlcigkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmli
dXRlcykgJiYgIUlzUmVhZG9ubHkoJGF0dHJpYnV0ZSkpIHsKICAgICAgICAgICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0
aW9uYWxTdHJpbmc7Ci0gICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2
b2lkIHNldCIgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkYXR0cmlidXRlLT5zaWduYXR1
cmUtPm5hbWUpIC4gIihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSk7XG4iKTsKKyAgICAg
ICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgc2V0IiAuICRjb2RlR2Vu
ZXJhdG9yLT5XS191Y2ZpcnN0KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSkgLiAiKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIjZW5kaWZcbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQpAQCAtMTExNyw3ICsxMTE3LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVy
CiAgICAgICAgICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2Vu
ZXJhdGVDb25kaXRpb25hbFN0cmluZygkZnVuY3Rpb24tPnNpZ25hdHVyZSk7CiAgICAgICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAk
Y29uZGl0aW9uYWxTdHJpbmc7CiAgICAgICAgICAgICBteSAkZnVuY3Rpb25JbXBsZW1lbnRhdGlv
bk5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxl
bWVudGVkQXMifSB8fCAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkZnVuY3Rpb24tPnNpZ25h
dHVyZS0+bmFtZSk7Ci0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICIgLiAo
JGZ1bmN0aW9uLT5pc1N0YXRpYyA/ICJzdGF0aWMgIiA6ICIiKSAuICJKU0M6OkpTVmFsdWUgIiAu
ICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSAuICIoSlNDOjpFeGVjU3RhdGUqKTtcbiIpOwor
ICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAiIC4gKCRmdW5jdGlvbi0+aXNT
dGF0aWMgPyAic3RhdGljICIgOiAiIikgLiAiSlNDOjpKU1ZhbHVlICIgLiAkZnVuY3Rpb25JbXBs
ZW1lbnRhdGlvbk5hbWUgLiAiKEpTQzo6RXhlY1N0YXRlJik7XG4iKTsKICAgICAgICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIjZW5kaWZcbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKICAg
ICAgICAgfQogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAkZW5kQXBwbGVDb3B5cmlnaHQp
IGlmICRpbkFwcGxlQ29weXJpZ2h0OwpAQCAtMjMzMyw3ICsyMzMzLDcgQEAgc3ViIEdlbmVyYXRl
SW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIH0gIyBhdHRyaWJ1dGUgTm9uZGV0ZXJtaW5pc3Rp
YwogCiAgICAgICAgICAgICBpZiAoSGFzQ3VzdG9tR2V0dGVyKCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKSkgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+JGltcGxHZXR0ZXJG
dW5jdGlvbk5hbWUoc3RhdGUpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+JGltcGxHZXR0ZXJG
dW5jdGlvbk5hbWUoKnN0YXRlKSk7XG4iKTsKICAgICAgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNoZWNrU2VjdXJpdHlGb3JOb2Rl
In0pIHsKICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJKU0RPTUJpbmRpbmcuaCJ9ID0g
MTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+aW1wbCgpO1xuIik7CkBAIC0yNjE4LDcgKzI2MTgsNyBAQCBzdWIgR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoSGFzQ3Vz
dG9tU2V0dGVyKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKSkgewot
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGNhc3RlZFRoaXMtPnNldCRp
bXBsU2V0dGVyRnVuY3Rpb25OYW1lKHN0YXRlLCB2YWx1ZSk7XG4iKTsKKyAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBjYXN0ZWRUaGlzLT5zZXQkaW1wbFNldHRlckZ1bmN0
aW9uTmFtZSgqc3RhdGUsIHZhbHVlKTtcbiIpOwogICAgICAgICAgICAgfSBlbHNpZiAoJHR5cGUg
ZXEgIkV2ZW50SGFuZGxlciIpIHsKICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJKU0V2
ZW50TGlzdGVuZXIuaCJ9ID0gMTsKICAgICAgICAgICAgICAgICBteSAkZXZlbnROYW1lID0gRXZl
bnRIYW5kbGVyQXR0cmlidXRlRXZlbnROYW1lKCRhdHRyaWJ1dGUpOwpAQCAtMjg3NCw3ICsyODc0
LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgICAgICBpZiAoJGlzQ3VzdG9tKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+IiAu
ICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSAuICIoc3RhdGUpKTtcbiIpOworICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGNhc3RlZFRoaXMtPiIgLiAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgLiAiKCpzdGF0ZSkp
O1xuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTtcbiIp
OwogICAgICAgICAgICAgICAgICAgICBpZiAoJHN2Z1Byb3BlcnR5VHlwZSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFj
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50
ZXJmYWNlLmNwcAppbmRleCBhOGMxNWU2MDAzZmQ0Mjc1MWFlYjVkNzQ3YTZmNmQ3ZjE5MjY1NjQy
Li5hNGNhZDBjYzBjN2Y5YzE4YjFlY2RiMzQ0YjQyYmI0NWQxODI0OGIxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50
ZXJmYWNlLmNwcApAQCAtNTE1LDcgKzUxNSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZUltcGxlbWVudHNTdHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzCiAg
ICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsK
ICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdEludGVyZmFjZSo+KHNsb3RCYXNl
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmltcGxlbWVudHNTdHIz
KHN0YXRlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5pbXBsZW1l
bnRzU3RyMygqc3RhdGUpKTsKIH0KIAogI2VuZGlmCkBAIC02MDgsNyArNjA4LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMyhFeGVjU3RhdGUqIHN0YXRl
LCBKU09iamVjdCogc2xvdEIKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNF
RF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0
SW50ZXJmYWNlKj4oc2xvdEJhc2UpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVk
VGhpcy0+c3VwcGxlbWVudGFsU3RyMyhzdGF0ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoY2FzdGVkVGhpcy0+c3VwcGxlbWVudGFsU3RyMygqc3RhdGUpKTsKIH0KIAogI2VuZGlmCkBA
IC03MDQsNyArNzA0LDcgQEAgdm9pZCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMyhF
eGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW4KICAgICBhdXRvKiBjYXN0
ZWRUaGlzID0ganNDYXN0PEpTVGVzdEludGVyZmFjZSo+KGJhc2VPYmplY3QpOwogICAgIFVOVVNF
RF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgY2FzdGVk
VGhpcy0+c2V0SW1wbGVtZW50c1N0cjMoc3RhdGUsIHZhbHVlKTsKKyAgICBjYXN0ZWRUaGlzLT5z
ZXRJbXBsZW1lbnRzU3RyMygqc3RhdGUsIHZhbHVlKTsKIH0KIAogI2VuZGlmCkBAIC03NzUsNyAr
Nzc1LDcgQEAgdm9pZCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LAogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBq
c0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oYmFzZU9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBjYXN0ZWRUaGlzLT5zZXRT
dXBwbGVtZW50YWxTdHIzKHN0YXRlLCB2YWx1ZSk7CisgICAgY2FzdGVkVGhpcy0+c2V0U3VwcGxl
bWVudGFsU3RyMygqc3RhdGUsIHZhbHVlKTsKIH0KIAogI2VuZGlmCkBAIC04NTksNyArODU5LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVG
dW5jdGlvbkltcGxlbWVudHNNZXRob2QzKEUKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KQogICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZh
Y2UiLCAiaW1wbGVtZW50c01ldGhvZDMiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNhc3RlZFRoaXMsIEpTVGVzdEludGVyZmFjZTo6aW5mbygpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmltcGxlbWVudHNNZXRob2QzKHN0YXRlKSk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5pbXBsZW1lbnRzTWV0aG9kMygqc3RhdGUp
KTsKIH0KIAogI2VuZGlmCkBAIC05MjUsNyArOTI1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhv
ZDMKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1cm4gdGhyb3dU
aGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsTWV0aG9k
MyIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0SW50
ZXJmYWNlOjppbmZvKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+
c3VwcGxlbWVudGFsTWV0aG9kMyhzdGF0ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
Y2FzdGVkVGhpcy0+c3VwcGxlbWVudGFsTWV0aG9kMygqc3RhdGUpKTsKIH0KIAogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0SW50ZXJmYWNlLmgKaW5kZXggNDdmMDc4MjkxZmM3ZTMyMGMwZDhiOGY0YzA0ZjZkY2EyM2Zh
ZWQyOS4uMTBjZjhmYjI0MDYxMjFkMGE3MGJlYTJjYjU1YWFiMzg4ZWFlNGMyMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFj
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJ
bnRlcmZhY2UuaApAQCAtNjAsMjQgKzYwLDI0IEBAIHB1YmxpYzoKIAogICAgIC8vIEN1c3RvbSBh
dHRyaWJ1dGVzCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMp
Ci0gICAgSlNDOjpKU1ZhbHVlIGltcGxlbWVudHNTdHIzKEpTQzo6RXhlY1N0YXRlKikgY29uc3Q7
CisgICAgSlNDOjpKU1ZhbHVlIGltcGxlbWVudHNTdHIzKEpTQzo6RXhlY1N0YXRlJikgY29uc3Q7
CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykK
LSAgICB2b2lkIHNldEltcGxlbWVudHNTdHIzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
KTsKKyAgICB2b2lkIHNldEltcGxlbWVudHNTdHIzKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjEyKQotICAgIEpTQzo6SlNWYWx1ZSBzdXBwbGVtZW50YWxTdHIzKEpTQzo6RXhlY1N0YXRlKikg
Y29uc3Q7CisgICAgSlNDOjpKU1ZhbHVlIHN1cHBsZW1lbnRhbFN0cjMoSlNDOjpFeGVjU3RhdGUm
KSBjb25zdDsKICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRp
dGlvbjEyKQotICAgIHZvaWQgc2V0U3VwcGxlbWVudGFsU3RyMyhKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSk7CisgICAgdm9pZCBzZXRTdXBwbGVtZW50YWxTdHIzKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlKTsKICNlbmRpZgogCiAgICAgLy8gQ3VzdG9tIGZ1bmN0aW9ucwogI2lm
IEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotICAgIEpTQzo6SlNW
YWx1ZSBpbXBsZW1lbnRzTWV0aG9kMyhKU0M6OkV4ZWNTdGF0ZSopOworICAgIEpTQzo6SlNWYWx1
ZSBpbXBsZW1lbnRzTWV0aG9kMyhKU0M6OkV4ZWNTdGF0ZSYpOwogI2VuZGlmCiAjaWYgRU5BQkxF
KENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0gICAgSlNDOjpKU1ZhbHVlIHN1
cHBsZW1lbnRhbE1ldGhvZDMoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBKU0M6OkpTVmFsdWUgc3Vw
cGxlbWVudGFsTWV0aG9kMyhKU0M6OkV4ZWNTdGF0ZSYpOwogI2VuZGlmCiAgICAgVGVzdEludGVy
ZmFjZSYgaW1wbCgpIGNvbnN0IHsgcmV0dXJuICptX2ltcGw7IH0KICAgICB2b2lkIHJlbGVhc2VJ
bXBsKCkgeyBzdGQ6OmV4Y2hhbmdlKG1faW1wbCwgbnVsbHB0ciktPmRlcmVmKCk7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmou
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5j
cHAKaW5kZXggYTAyMmFmNGIyZDViMDA4N2UzMDQzMDM5NTVkNDg5ZDkxMzAyYTVmMS4uODAxOTc4
ZGUxYjQwZjRmYjA3ZTRhZDBmYjc2YTRjZWVhYmQ1ZjQwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKQEAgLTEzMDIs
NyArMTMwMiw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakN1c3RvbUF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkCiAgICAgVU5VU0VEX1BBUkFNKHNs
b3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBhdXRvKiBjYXN0ZWRU
aGlzID0ganNDYXN0PEpTVGVzdE9iaio+KHNsb3RCYXNlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGNhc3RlZFRoaXMtPmN1c3RvbUF0dHIoc3RhdGUpKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmN1c3RvbUF0dHIoKnN0YXRlKSk7CiB9CiAKIApAQCAtMjU3
Myw3ICsyNTczLDcgQEAgdm9pZCBzZXRKU1Rlc3RPYmpDdXN0b21BdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWwKICAgICBhdXRvKiBjYXN0ZWRU
aGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGJhc2VPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgY2FzdGVkVGhpcy0+c2V0
Q3VzdG9tQXR0cihzdGF0ZSwgdmFsdWUpOworICAgIGNhc3RlZFRoaXMtPnNldEN1c3RvbUF0dHIo
KnN0YXRlLCB2YWx1ZSk7CiB9CiAKIApAQCAtMzQ4Nyw3ICszNDg3LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZChF
eGVjU3RhdGUqIHMKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1
cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY3VzdG9tTWV0aG9kIik7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6Omlu
Zm8oKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5jdXN0b21NZXRo
b2Qoc3RhdGUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmN1c3Rv
bU1ldGhvZCgqc3RhdGUpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZFdpdGhBcmdzKEV4ZWNTdGF0ZSogc3Rh
dGUpCkBAIC0zNDk3LDcgKzM0OTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kV2l0aEFyZ3MoRXhlYwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpCiAgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJy
b3IoKnN0YXRlLCAiVGVzdE9iaiIsICJjdXN0b21NZXRob2RXaXRoQXJncyIpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+Y3VzdG9tTWV0aG9kV2l0aEFyZ3Mo
c3RhdGUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmN1c3RvbU1l
dGhvZFdpdGhBcmdzKCpzdGF0ZSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIHN0
YXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE9iai5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5oCmluZGV4IDM1NDYzMTFiNGI1ZmRmZDFiZTg4MDcyZWEyZDk2YmJiZmZmNjg0ZTku
Ljg4Y2FiODY5MDJiYmNlYjY4NjA1NzFiZTBkZGMwNDU2NDQxMzFlOWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKQEAgLTU4
LDEzICs1OCwxMyBAQCBwdWJsaWM6CiAKIAogICAgIC8vIEN1c3RvbSBhdHRyaWJ1dGVzCi0gICAg
SlNDOjpKU1ZhbHVlIGN1c3RvbUF0dHIoSlNDOjpFeGVjU3RhdGUqKSBjb25zdDsKLSAgICB2b2lk
IHNldEN1c3RvbUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpOworICAgIEpTQzo6
SlNWYWx1ZSBjdXN0b21BdHRyKEpTQzo6RXhlY1N0YXRlJikgY29uc3Q7CisgICAgdm9pZCBzZXRD
dXN0b21BdHRyKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKIAogICAgIC8vIEN1c3Rv
bSBmdW5jdGlvbnMKLSAgICBKU0M6OkpTVmFsdWUgY3VzdG9tTWV0aG9kKEpTQzo6RXhlY1N0YXRl
Kik7Ci0gICAgSlNDOjpKU1ZhbHVlIGN1c3RvbU1ldGhvZFdpdGhBcmdzKEpTQzo6RXhlY1N0YXRl
Kik7Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjbGFzc01ldGhvZDIoSlNDOjpFeGVjU3RhdGUq
KTsKKyAgICBKU0M6OkpTVmFsdWUgY3VzdG9tTWV0aG9kKEpTQzo6RXhlY1N0YXRlJik7CisgICAg
SlNDOjpKU1ZhbHVlIGN1c3RvbU1ldGhvZFdpdGhBcmdzKEpTQzo6RXhlY1N0YXRlJik7CisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjbGFzc01ldGhvZDIoSlNDOjpFeGVjU3RhdGUmKTsKICAgICBU
ZXN0T2JqJiBpbXBsKCkgY29uc3QgeyByZXR1cm4gKm1faW1wbDsgfQogICAgIHZvaWQgcmVsZWFz
ZUltcGwoKSB7IHN0ZDo6ZXhjaGFuZ2UobV9pbXBsLCBudWxscHRyKS0+ZGVyZWYoKTsgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261620</attachid>
            <date>2015-09-20 18:27:45 -0700</date>
            <delta_ts>2015-09-20 18:31:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149393-20150920182730.patch</filename>
            <type>text/plain</type>
            <size>227425</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwMDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzhjYWVkYmY4N2EwMjcx
ZGUzY2Y0NDA4NzMzNzAzOWRiODUxODdlOC4uOTYxNGE4MjE5OTAwYTU3OTQ0YzE1M2U1OWZmZTI2
YzhlNmQzNmI4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1IEBACiAyMDE1LTA5LTIwICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgUGFzcyBKU0M6OkV4ZWNTdGF0
ZSB0byB0aGUgY3VzdG9tIGJpbmRpbmdzIGJ5IHJlZmVyZW5jZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5MzkzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGFzcyBKU0M6OkV4ZWNTdGF0ZSB0byB0aGUg
Y3VzdG9tIGJpbmRpbmdzIGJ5IHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGJ5CisgICAgICAgIHBvaW50
ZXIgYXMgaXQgaXMgZXhwZWN0ZWQgdG8gYmUgbm9uLW51bGwuCisKKzIwMTUtMDktMjAgIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwogICAgICAgICBSZWdyZXNzaW9uKHIxOTAwMjMp
OiBmYXN0L2RvbS9uYXZpZ2F0aW9uLXdpdGgtc2lkZWVmZmVjdHMtY3Jhc2guaHRtbCBpcyBjcmFz
aGluZwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5
MzkyCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1Rp
bWVQbHVnaW5SZXBsYWNlbWVudC5tbSBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9R
dWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQppbmRleCBmMmFhZWU2M2NmYmI5YzU1OGYwNTdl
OGY0NjNhYmM1NTJmOGYxZWY3Li4xNmJiMThiYTViMjZlMTY5ZmJjZWZhYzVlNDZhYzZlMTIzODk1
NWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5z
L1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCkBAIC0zNjYsNyArMzY2LDcgQEAgc3RhdGlj
IEpTVmFsdWUgKmpzVmFsdWVXaXRoQVZNZXRhZGF0YUl0ZW1JbkNvbnRleHQoQVZNZXRhZGF0YUl0
ZW1UeXBlICppdGVtLCBKU0MKIH0KICNlbmRpZgogCi1KU0M6OkpTVmFsdWUgSlNRdWlja1RpbWVQ
bHVnaW5SZXBsYWNlbWVudDo6dGltZWRNZXRhRGF0YShKU0M6OkV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKK0pTQzo6SlNWYWx1ZSBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Ojp0aW1lZE1ldGFE
YXRhKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICNpZiBQTEFURk9STShJT1MpCiAg
ICAgSFRNTFZpZGVvRWxlbWVudCogcGFyZW50ID0gaW1wbCgpLnBhcmVudEVsZW1lbnQoKTsKQEAg
LTM4NCwxNCArMzg0LDE0IEBAIEpTQzo6SlNWYWx1ZSBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2Vt
ZW50Ojp0aW1lZE1ldGFEYXRhKEpTQzo6RXhlY1N0YXRlKiBleGVjKSBjCiAgICAgSlNDb250ZXh0
ICpqc0NvbnRleHQgPSBmcmFtZS0+c2NyaXB0KCkuamF2YVNjcmlwdENvbnRleHQoKTsKICAgICBK
U1ZhbHVlICptZXRhRGF0YVZhbHVlID0ganNWYWx1ZVdpdGhWYWx1ZUluQ29udGV4dChtZXRhRGF0
YSwganNDb250ZXh0KTsKICAgICAKLSAgICByZXR1cm4gdG9KUyhleGVjLCBbbWV0YURhdGFWYWx1
ZSBKU1ZhbHVlUmVmXSk7CisgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBbbWV0YURhdGFWYWx1ZSBK
U1ZhbHVlUmVmXSk7CiAjZWxzZQotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwogI2VuZGlmCiB9CiAKLUpT
Qzo6SlNWYWx1ZSBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjphY2Nlc3NMb2coSlNDOjpF
eGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU0M6OkpTVmFsdWUgSlNRdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudDo6YWNjZXNzTG9nKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICNpZiBQ
TEFURk9STShJT1MpCiAgICAgSFRNTFZpZGVvRWxlbWVudCogcGFyZW50ID0gaW1wbCgpLnBhcmVu
dEVsZW1lbnQoKTsKQEAgLTQwNiwxNCArNDA2LDE0IEBAIEpTQzo6SlNWYWx1ZSBKU1F1aWNrVGlt
ZVBsdWdpblJlcGxhY2VtZW50OjphY2Nlc3NMb2coSlNDOjpFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
CiAgICAgU3RyaW5nIGFjY2Vzc0xvZ1N0cmluZyA9IHBhcmVudC0+cGxheWVyKCktPmFjY2Vzc0xv
ZygpOwogICAgIFtkaWN0aW9uYXJ5IHNldFZhbHVlOnN0YXRpY19jYXN0PE5TU3RyaW5nICo+KGFj
Y2Vzc0xvZ1N0cmluZykgZm9yUHJvcGVydHk6KE5TU3RyaW5nICopQ0ZTVFIoImV4dGVuZGVkTG9n
IildOwogCi0gICAgcmV0dXJuIHRvSlMoZXhlYywgW2RpY3Rpb25hcnkgSlNWYWx1ZVJlZl0pOwor
ICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgW2RpY3Rpb25hcnkgSlNWYWx1ZVJlZl0pOwogI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBy
ZXR1cm4gSlNDOjpqc051bGwoKTsKICNlbmRpZgogfQogCi1KU0M6OkpTVmFsdWUgSlNRdWlja1Rp
bWVQbHVnaW5SZXBsYWNlbWVudDo6ZXJyb3JMb2coSlNDOjpFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
CitKU0M6OkpTVmFsdWUgSlNRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6ZXJyb3JMb2coSlND
OjpFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewogI2lmIFBMQVRGT1JNKElPUykKICAgICBIVE1M
VmlkZW9FbGVtZW50KiBwYXJlbnQgPSBpbXBsKCkucGFyZW50RWxlbWVudCgpOwpAQCAtNDI4LDkg
KzQyOCw5IEBAIEpTQzo6SlNWYWx1ZSBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjplcnJv
ckxvZyhKU0M6OkV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICBTdHJpbmcgZXJyb3JMb2dTdHJp
bmcgPSBwYXJlbnQtPnBsYXllcigpLT5lcnJvckxvZygpOwogICAgIFtkaWN0aW9uYXJ5IHNldFZh
bHVlOnN0YXRpY19jYXN0PE5TU3RyaW5nICo+KGVycm9yTG9nU3RyaW5nKSBmb3JQcm9wZXJ0eToo
TlNTdHJpbmcgKilDRlNUUigiZXh0ZW5kZWRMb2ciKV07CiAKLSAgICByZXR1cm4gdG9KUyhleGVj
LCBbZGljdGlvbmFyeSBKU1ZhbHVlUmVmXSk7CisgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBbZGlj
dGlvbmFyeSBKU1ZhbHVlUmVmXSk7CiAjZWxzZQotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwogI2VuZGlm
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVy
U291cmNlTm9kZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlv
QnVmZmVyU291cmNlTm9kZUN1c3RvbS5jcHAKaW5kZXggZjNkOWRiZjM3MGJmMWM5YWE1NjFjNzIx
ZmZkOTUzZDM3YTY5ODk2OC4uMWM5YzMyOGIxMjEyNWQ5YmJlMzkyY2UzMWUyNjM4MTZlMmYxMzRl
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0J1ZmZlclNv
dXJjZU5vZGVDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVk
aW9CdWZmZXJTb3VyY2VOb2RlQ3VzdG9tLmNwcApAQCAtMzksMTYgKzM5LDE2IEBAIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0F1ZGlvQnVmZmVy
U291cmNlTm9kZTo6c2V0QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3Zv
aWQgSlNBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OnNldEJ1ZmZlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQogewogICAgIEF1ZGlvQnVmZmVyKiBidWZmZXIgPSBKU0F1ZGlvQnVmZmVy
Ojp0b1dyYXBwZWQodmFsdWUpOwogICAgIGlmICghYnVmZmVyKSB7Ci0gICAgICAgIGV4ZWMtPnZt
KCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJWYWx1ZSBpcyBu
b3Qgb2YgdHlwZSBBdWRpb0J1ZmZlciIpKTsKKyAgICAgICAgc3RhdGUudm0oKS50aHJvd0V4Y2Vw
dGlvbigmc3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJWYWx1ZSBpcyBub3Qgb2YgdHlw
ZSBBdWRpb0J1ZmZlciIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAo
IWltcGwoKS5zZXRCdWZmZXIoYnVmZmVyKSkKLSAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2Vw
dGlvbihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkF1ZGlvQnVmZmVyIHVuc3VwcG9ydGVk
IG51bWJlciBvZiBjaGFubmVscyIpKTsKKyAgICAgICAgc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlv
bigmc3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJBdWRpb0J1ZmZlciB1bnN1cHBvcnRl
ZCBudW1iZXIgb2YgY2hhbm5lbHMiKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCmlu
ZGV4IDQ0MDA1NzllMzY0OTc3MTc3NmM2NWQ2YTQ2ZjVkODNiMmVhODZjYzYuLjM2ZjMxZDlkNjJl
Y2Q3OGZkMWFhZjE5MWMyMmI5YTU1MDAyMjc3M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcApAQCAtNDAsMjggKzQwLDI4IEBAIHZv
aWQgSlNBdWRpb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmaW1wbCgpKSk7CiB9CiAKLXZv
aWQgSlNBdWRpb1RyYWNrOjpzZXRLaW5kKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkK
K3ZvaWQgSlNBdWRpb1RyYWNrOjpzZXRLaW5kKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFs
dWUpCiB7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKLSAgICBhdXRvJiBzdHJpbmcgPSB2YWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZz
dGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAg
ICAgaW1wbCgpLnNldEtpbmQoc3RyaW5nKTsKICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGV4ZWMp
OworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKICNl
bmRpZgogfQogCi12b2lkIEpTQXVkaW9UcmFjazo6c2V0TGFuZ3VhZ2UoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU0F1ZGlvVHJhY2s6OnNldExhbmd1YWdlKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKLSAg
ICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3Ry
aW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm47CiAgICAgaW1wbCgpLnNldExhbmd1YWdlKHN0cmluZyk7CiAjZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh2YWx1ZSk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQmlxdWFkRmlsdGVyTm9kZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0JpcXVhZEZpbHRlck5vZGVDdXN0b20uY3BwCmluZGV4IGY4YzEz
ODUzMDlkODIwMDRlNjJlZmUwZmE0OTJlZjUwZDJmZjM1YTEuLmY2ZmE4NmY1YzM3NGZlYmJjMGI4
MWJmZmNhZmM1ZWVkY2E0MWIzMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQmlxdWFkRmlsdGVyTm9kZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNCaXF1YWRGaWx0ZXJOb2RlQ3VzdG9tLmNwcApAQCAtMzcsMjYgKzM3LDI2IEBA
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0Jp
cXVhZEZpbHRlck5vZGU6OnNldFR5cGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQor
dm9pZCBKU0JpcXVhZEZpbHRlck5vZGU6OnNldFR5cGUoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSkKIHsKICNpZiBFTkFCTEUoTEVHQUNZX1dFQl9BVURJTykKICAgICBpZiAodmFsdWUu
aXNOdW1iZXIoKSkgewotICAgICAgICB1aW50MzJfdCB0eXBlID0gdmFsdWUudG9VSW50MzIoZXhl
Yyk7CisgICAgICAgIHVpbnQzMl90IHR5cGUgPSB2YWx1ZS50b1VJbnQzMigmc3RhdGUpOwogICAg
ICAgICBpZiAoIWltcGwoKS5zZXRUeXBlKHR5cGUpKQotICAgICAgICAgICAgZXhlYy0+dm0oKS50
aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIklsbGVnYWwgQmlxdWFk
RmlsdGVyTm9kZSB0eXBlIikpOworICAgICAgICAgICAgc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlv
bigmc3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJJbGxlZ2FsIEJpcXVhZEZpbHRlck5v
ZGUgdHlwZSIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgogCiAgICAgaWYgKHZh
bHVlLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgU3RyaW5nIHR5cGUgPSB2YWx1ZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAgIFN0cmluZyB0eXBlID0gdmFsdWUudG9TdHJpbmco
JnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKICAgICAgICAgaWYgKHR5cGUgPT0gImxvd3Bhc3MiIHx8
IHR5cGUgPT0gImhpZ2hwYXNzIiB8fCB0eXBlID09ICJiYW5kcGFzcyIgfHwgdHlwZSA9PSAibG93
c2hlbGYiIHx8IHR5cGUgPT0gImhpZ2hzaGVsZiIgfHwgdHlwZSA9PSAicGVha2luZyIgfHwgdHlw
ZSA9PSAibm90Y2giIHx8IHR5cGUgPT0gImFsbHBhc3MiKSB7CiAgICAgICAgICAgICBpbXBsKCku
c2V0VHlwZSh0eXBlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KICAg
ICAKLSAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCAiSWxsZWdhbCBCaXF1YWRGaWx0ZXJOb2RlIHR5cGUiKSk7CisgICAgc3RhdGUudm0oKS50
aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJJbGxlZ2FsIEJp
cXVhZEZpbHRlck5vZGUgdHlwZSIpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9u
Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJh
dGlvbkN1c3RvbS5jcHAKaW5kZXggZTk5ZGUyMWE3NWQ3MzljMzk0YWE0MmJkZDE4Yjc1OWM4OTgw
MTAwNy4uZGUyZjkwNzM0NWE3NjhmNWNlZjM2ODg0OTYyN2NiNDJkNWU0NTFlYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9t
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRp
b25DdXN0b20uY3BwCkBAIC0zNDcsMTAgKzM0NywxMCBAQCBib29sIEpTQ1NTU3R5bGVEZWNsYXJh
dGlvbjo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YQogICAgIHJldHVybiB0cnVlOwogfQogCi1KU1ZhbHVlIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6
Z2V0UHJvcGVydHlDU1NWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ1NTU3R5bGVE
ZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShFeGVjU3RhdGUmIHN0YXRlKQogewotICAg
IGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBj
b25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSA9IHN0YXRlLmFyZ3VtZW50KDApLnRvU3RyaW5nKCZz
dGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFs
dWUgPSBpbXBsKCkuZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eU5hbWUpOwpAQCAtMzU4LDcg
KzM1OCw3IEBAIEpTVmFsdWUgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1Zh
bHVlKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCiAgICAgZ2xv
YmFsT2JqZWN0KCktPndvcmxkKCkubV9jc3NWYWx1ZVJvb3RzLmFkZChjc3NWYWx1ZS5nZXQoKSwg
cm9vdCgmaW1wbCgpKSk7IC8vIEJhbGFuY2VkIGJ5IEpTQ1NTVmFsdWVPd25lcjo6ZmluYWxpemUo
KS4KLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoY3Nz
VmFsdWUpKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBXVEY6Omdl
dFB0cihjc3NWYWx1ZSkpOwogfQogCiB2b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQ3VzdG9tLmNwcAppbmRleCBlZmE1MzlmYjU0Yjg2OTRiZGQzYmM5Zjc0NGYyYTY1
NDIxMDZmMjZkLi5kYzViNTFlOGI5N2VmNTllMjViN2ZiYmY3MDIwNTI4YjM3MDM5ODc5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCkBAIC01OSwzNyArNTksMzcgQEAgc3RhdGljIENh
bnZhc1N0eWxlIHRvSFRNTENhbnZhc1N0eWxlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgdmFsdWUpCiAg
ICAgcmV0dXJuIENhbnZhc1N0eWxlKCk7CiB9CiAKLUpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnN0cm9rZVN0eWxlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVN0eWxlKEV4ZWNTdGF0ZSYgc3RhdGUpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGltcGwoKS5zdHJv
a2VTdHlsZSgpKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBpbXBs
KCkuc3Ryb2tlU3R5bGUoKSk7CiB9CiAKLXZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnNldFN0cm9rZVN0eWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZVN0eWxlKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEJiBjb250ZXh0
ID0gaW1wbCgpOwogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIGNvbnRleHQu
c2V0U3Ryb2tlQ29sb3IoYXNTdHJpbmcodmFsdWUpLT52YWx1ZShleGVjKSk7CisgICAgICAgIGNv
bnRleHQuc2V0U3Ryb2tlQ29sb3IoYXNTdHJpbmcodmFsdWUpLT52YWx1ZSgmc3RhdGUpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKHRvSFRNTENh
bnZhc1N0eWxlKGV4ZWMsIHZhbHVlKSk7CisgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZSh0b0hU
TUxDYW52YXNTdHlsZSgmc3RhdGUsIHZhbHVlKSk7CiB9CiAKLUpTVmFsdWUgSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmZpbGxTdHlsZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVl
IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsU3R5bGUoRXhlY1N0YXRlJiBzdGF0ZSkg
Y29uc3QKIHsKLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgpLmZp
bGxTdHlsZSgpKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBpbXBs
KCkuZmlsbFN0eWxlKCkpOwogfQogCi12b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
ZXRGaWxsU3R5bGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbFN0eWxlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgdmFsdWUpCiB7CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEJiBjb250ZXh0ID0gaW1w
bCgpOwogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIGNvbnRleHQuc2V0Rmls
bENvbG9yKGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUoZXhlYykpOworICAgICAgICBjb250ZXh0LnNl
dEZpbGxDb2xvcihhc1N0cmluZyh2YWx1ZSktPnZhbHVlKCZzdGF0ZSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIGNvbnRleHQuc2V0RmlsbFN0eWxlKHRvSFRNTENhbnZhc1N0eWxlKGV4
ZWMsIHZhbHVlKSk7CisgICAgY29udGV4dC5zZXRGaWxsU3R5bGUodG9IVE1MQ2FudmFzU3R5bGUo
JnN0YXRlLCB2YWx1ZSkpOwogfQogCi1KU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Ojp3ZWJraXRMaW5lRGFzaChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjp3ZWJraXRMaW5lRGFzaChFeGVjU3RhdGUmIHN0YXRlKSBjb25z
dAogewogICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGRhc2ggPSBpbXBsKCkuZ2V0TGluZURhc2go
KTsKIApAQCAtOTcsMTAgKzk3LDEwIEBAIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OndlYmtpdExpbmVEYXNoKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICBWZWN0b3I8Zmxv
YXQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBkYXNoLmVuZCgpOwogICAgIGZvciAoVmVjdG9yPGZs
b2F0Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXNoLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
ICAgICAgICAgbGlzdC5hcHBlbmQoSlNWYWx1ZSgqaXQpKTsKLSAgICByZXR1cm4gY29uc3RydWN0
QXJyYXkoZXhlYywgMCwgZ2xvYmFsT2JqZWN0KCksIGxpc3QpOworICAgIHJldHVybiBjb25zdHJ1
Y3RBcnJheSgmc3RhdGUsIDAsIGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKIH0KIAotdm9pZCBKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0V2Via2l0TGluZURhc2goRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0V2Vi
a2l0TGluZURhc2goRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAo
IWlzSlNBcnJheSh2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwOCw3ICsxMDgsNyBAQCB2
b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRXZWJraXRMaW5lRGFzaChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdmFsdQogICAgIFZlY3RvcjxmbG9hdD4gZGFzaDsKICAgICBKU0Fy
cmF5KiB2YWx1ZUFycmF5ID0gYXNBcnJheSh2YWx1ZSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZhbHVlQXJyYXktPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgZmxvYXQgZWxlbSA9
IHZhbHVlQXJyYXktPmdldEluZGV4KGV4ZWMsIGkpLnRvRmxvYXQoZXhlYyk7CisgICAgICAgIGZs
b2F0IGVsZW0gPSB2YWx1ZUFycmF5LT5nZXRJbmRleCgmc3RhdGUsIGkpLnRvRmxvYXQoJnN0YXRl
KTsKICAgICAgICAgaWYgKGVsZW0gPD0gMCB8fCAhc3RkOjppc2Zpbml0ZShlbGVtKSkKICAgICAg
ICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDaGFyYWN0ZXJEYXRhQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q2hhcmFjdGVyRGF0YUN1c3RvbS5jcHAKaW5kZXggNzY0MzQ0ZGRjMTc3ZTczMTAyZGE5MjQ1MWIz
N2JkZjVlYTlhMTMyYy4uY2I4MzFkMDRjZmI4ZWY4NTY4NDc2YmQ4ZmRlM2Y4ZjgyZTlhN2M5MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDaGFyYWN0ZXJEYXRhQ3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NoYXJhY3RlckRhdGFD
dXN0b20uY3BwCkBAIC0zMywyOSArMzMsMjkgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTQ2hhcmFjdGVyRGF0YTo6YmVmb3JlKEV4ZWNT
dGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ2hhcmFjdGVyRGF0YTo6YmVmb3JlKEV4ZWNTdGF0ZSYg
c3RhdGUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wbCgpLmJlZm9yZSh0
b05vZGVPclN0cmluZ1ZlY3Rvcigqc3RhdGUpLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKHN0
YXRlLCBlYyk7CisgICAgaW1wbCgpLmJlZm9yZSh0b05vZGVPclN0cmluZ1ZlY3RvcihzdGF0ZSks
IGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0NoYXJhY3RlckRhdGE6OmFmdGVyKEV4ZWNTdGF0
ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ2hhcmFjdGVyRGF0YTo6YWZ0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCkuYWZ0ZXIodG9Ob2Rl
T3JTdHJpbmdWZWN0b3IoKnN0YXRlKSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwg
ZWMpOworICAgIGltcGwoKS5hZnRlcih0b05vZGVPclN0cmluZ1ZlY3RvcihzdGF0ZSksIGVjKTsK
KyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0NoYXJhY3RlckRhdGE6OnJlcGxhY2VXaXRoKEV4ZWNTdGF0
ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ2hhcmFjdGVyRGF0YTo6cmVwbGFjZVdpdGgoRXhlY1N0YXRl
JiBzdGF0ZSkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCkucmVwbGFj
ZVdpdGgodG9Ob2RlT3JTdHJpbmdWZWN0b3IoKnN0YXRlKSwgZWMpOwotICAgIHNldERPTUV4Y2Vw
dGlvbihzdGF0ZSwgZWMpOworICAgIGltcGwoKS5yZXBsYWNlV2l0aCh0b05vZGVPclN0cmluZ1Zl
Y3RvcihzdGF0ZSksIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9tLmNwcAppbmRleCA4ZDJkMDIw
NjRlNTdlYWE0NzgxODBiYjhlNDViZDMwMDRlOGYzMTdiLi5iMDY1ZDVjZmYxY2YxYjUwNjQ3NDU5
NjJiZGNkOGQ2MWRmNzY3ZjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NvbW1hbmRMaW5lQVBJSG9zdEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDb21tYW5kTGluZUFQSUhvc3RDdXN0b20uY3BwCkBAIC01NSwyMyArNTUsMjMg
QEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVl
IEpTQ29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0ZWRPYmplY3QoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NvbW1hbmRMaW5lQVBJSG9zdDo6aW5zcGVjdGVkT2JqZWN0KEV4ZWNTdGF0ZSYg
c3RhdGUpCiB7CiAgICAgQ29tbWFuZExpbmVBUElIb3N0OjpJbnNwZWN0YWJsZU9iamVjdCogb2Jq
ZWN0ID0gaW1wbCgpLmluc3BlY3RlZE9iamVjdCgpOwogICAgIGlmICghb2JqZWN0KQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwot
ICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHNjcmlwdFZhbHVlID0gb2JqZWN0LT5nZXQoZXhl
Yyk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soJnN0YXRlKTsKKyAgICBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSBzY3JpcHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSk7CiAgICAgaWYgKHNjcmlw
dFZhbHVlLmhhc05vVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAg
ICByZXR1cm4gc2NyaXB0VmFsdWUuanNWYWx1ZSgpOwogfQogCi1zdGF0aWMgSlNBcnJheSogZ2V0
SlNMaXN0ZW5lckZ1bmN0aW9ucyhFeGVjU3RhdGUqIGV4ZWMsIERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgRXZlbnRMaXN0ZW5lckluZm8mIGxpc3RlbmVySW5mbykKK3N0YXRpYyBKU0FycmF5KiBn
ZXRKU0xpc3RlbmVyRnVuY3Rpb25zKEV4ZWNTdGF0ZSYgc3RhdGUsIERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgRXZlbnRMaXN0ZW5lckluZm8mIGxpc3RlbmVySW5mbykKIHsKLSAgICBKU0FycmF5
KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpOworICAgIEpTQXJy
YXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoJnN0YXRlLCBudWxscHRyKTsKICAgICBz
aXplX3QgaGFuZGxlcnNDb3VudCA9IGxpc3RlbmVySW5mby5ldmVudExpc3RlbmVyVmVjdG9yLnNp
emUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMCwgb3V0cHV0SW5kZXggPSAwOyBpIDwgaGFuZGxl
cnNDb3VudDsgKytpKSB7CiAgICAgICAgIGNvbnN0IEpTRXZlbnRMaXN0ZW5lcioganNMaXN0ZW5l
ciA9IEpTRXZlbnRMaXN0ZW5lcjo6Y2FzdChsaXN0ZW5lckluZm8uZXZlbnRMaXN0ZW5lclZlY3Rv
cltpXS5saXN0ZW5lci5nZXQoKSk7CkBAIC04MSwyNyArODEsMjcgQEAgc3RhdGljIEpTQXJyYXkq
IGdldEpTTGlzdGVuZXJGdW5jdGlvbnMoRXhlY1N0YXRlKiBleGVjLCBEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnMKICAgICAgICAgfQogCiAgICAgICAgIC8vIEhpZGUgbGlzdGVuZXJzIGZyb20gb3Ro
ZXIgY29udGV4dHMuCi0gICAgICAgIGlmICgmanNMaXN0ZW5lci0+aXNvbGF0ZWRXb3JsZCgpICE9
ICZjdXJyZW50V29ybGQoZXhlYykpCisgICAgICAgIGlmICgmanNMaXN0ZW5lci0+aXNvbGF0ZWRX
b3JsZCgpICE9ICZjdXJyZW50V29ybGQoJnN0YXRlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
CiAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzTGlzdGVuZXItPmpzRnVuY3Rpb24oZG9j
dW1lbnQpOwogICAgICAgICBpZiAoIWZ1bmN0aW9uKQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgSlNPYmplY3QqIGxpc3RlbmVyRW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChl
eGVjKTsKLSAgICAgICAgbGlzdGVuZXJFbnRyeS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImxpc3RlbmVyIiksIGZ1bmN0aW9uKTsKLSAgICAgICAg
bGlzdGVuZXJFbnRyeS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgInVzZUNhcHR1cmUiKSwganNCb29sZWFuKGxpc3RlbmVySW5mby5ldmVudExpc3Rl
bmVyVmVjdG9yW2ldLnVzZUNhcHR1cmUpKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRl
eChleGVjLCBvdXRwdXRJbmRleCsrLCBKU1ZhbHVlKGxpc3RlbmVyRW50cnkpKTsKKyAgICAgICAg
SlNPYmplY3QqIGxpc3RlbmVyRW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwor
ICAgICAgICBsaXN0ZW5lckVudHJ5LT5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUsICJsaXN0ZW5lciIpLCBmdW5jdGlvbik7CisgICAgICAgIGxpc3Rl
bmVyRW50cnktPnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZSwgInVzZUNhcHR1cmUiKSwganNCb29sZWFuKGxpc3RlbmVySW5mby5ldmVudExpc3RlbmVy
VmVjdG9yW2ldLnVzZUNhcHR1cmUpKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleCgm
c3RhdGUsIG91dHB1dEluZGV4KyssIEpTVmFsdWUobGlzdGVuZXJFbnRyeSkpOwogICAgIH0KICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlIEpTQ29tbWFuZExpbmVBUElIb3N0OjpnZXRF
dmVudExpc3RlbmVycyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ29tbWFuZExpbmVBUElI
b3N0OjpnZXRFdmVudExpc3RlbmVycyhFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPCAxKQorICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPCAx
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIEpTVmFsdWUgdmFsdWUgPSBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gc3RhdGUudW5j
aGVja2VkQXJndW1lbnQoMCk7CiAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpIHx8IHZhbHVlLmlz
TnVsbCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIApAQCAtMTEyLDQ5ICsxMTIs
NDkgQEAgSlNWYWx1ZSBKU0NvbW1hbmRMaW5lQVBJSG9zdDo6Z2V0RXZlbnRMaXN0ZW5lcnMoRXhl
Y1N0YXRlKiBleGVjKQogICAgIFZlY3RvcjxFdmVudExpc3RlbmVySW5mbz4gbGlzdGVuZXJzQXJy
YXk7CiAgICAgaW1wbCgpLmdldEV2ZW50TGlzdGVuZXJzSW1wbChub2RlLCBsaXN0ZW5lcnNBcnJh
eSk7CiAKLSAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7
CisgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0ZW5lcnNBcnJheS5zaXplKCk7ICsraSkgewot
ICAgICAgICBKU0FycmF5KiBsaXN0ZW5lcnMgPSBnZXRKU0xpc3RlbmVyRnVuY3Rpb25zKGV4ZWMs
ICZub2RlLT5kb2N1bWVudCgpLCBsaXN0ZW5lcnNBcnJheVtpXSk7CisgICAgICAgIEpTQXJyYXkq
IGxpc3RlbmVycyA9IGdldEpTTGlzdGVuZXJGdW5jdGlvbnMoc3RhdGUsICZub2RlLT5kb2N1bWVu
dCgpLCBsaXN0ZW5lcnNBcnJheVtpXSk7CiAgICAgICAgIGlmICghbGlzdGVuZXJzLT5sZW5ndGgo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBBdG9taWNTdHJpbmcgZXZlbnRUeXBl
ID0gbGlzdGVuZXJzQXJyYXlbaV0uZXZlbnRUeXBlOwotICAgICAgICByZXN1bHQtPnB1dERpcmVj
dChleGVjLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIGV2ZW50VHlwZS5pbXBs
KCkpLCBKU1ZhbHVlKGxpc3RlbmVycykpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdChzdGF0
ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgZXZlbnRUeXBlLmltcGwoKSks
IEpTVmFsdWUobGlzdGVuZXJzKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
SlNWYWx1ZSBKU0NvbW1hbmRMaW5lQVBJSG9zdDo6aW5zcGVjdChFeGVjU3RhdGUqIGV4ZWMpCitK
U1ZhbHVlIEpTQ29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7
Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7Ci0gICAgICAgIERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlIG9iamVjdChleGVjLT52bSgpLCBleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7Ci0gICAgICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGhpbnRzKGV4ZWMtPnZtKCks
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKLSAgICAgICAgaW1wbCgpLmluc3BlY3RJbXBs
KG9iamVjdC50b0luc3BlY3RvclZhbHVlKGV4ZWMpLCBoaW50cy50b0luc3BlY3RvclZhbHVlKGV4
ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID49IDIpIHsKKyAgICAgICAgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUgb2JqZWN0KHN0YXRlLnZtKCksIHN0YXRlLnVuY2hlY2tlZEFy
Z3VtZW50KDApKTsKKyAgICAgICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgaGludHMoc3RhdGUu
dm0oKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgICAgICBpbXBsKCkuaW5zcGVj
dEltcGwob2JqZWN0LnRvSW5zcGVjdG9yVmFsdWUoJnN0YXRlKSwgaGludHMudG9JbnNwZWN0b3JW
YWx1ZSgmc3RhdGUpKTsKICAgICB9CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAot
SlNWYWx1ZSBKU0NvbW1hbmRMaW5lQVBJSG9zdDo6ZGF0YWJhc2VJZChFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTQ29tbWFuZExpbmVBUElIb3N0OjpkYXRhYmFzZUlkKEV4ZWNTdGF0ZSYgc3Rh
dGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgaWYgKHN0YXRl
LmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0g
ICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gSlNEYXRhYmFzZTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApKTsKKyAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSBKU0RhdGFiYXNlOjp0
b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmIChkYXRhYmFzZSkK
LSAgICAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGltcGwoKS5kYXRhYmFzZUlk
SW1wbChkYXRhYmFzZSkpOworICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRl
LCBpbXBsKCkuZGF0YWJhc2VJZEltcGwoZGF0YWJhc2UpKTsKIAogICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTQ29tbWFuZExpbmVBUElIb3N0OjpzdG9yYWdlSWQoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NvbW1hbmRMaW5lQVBJSG9zdDo6c3RvcmFnZUlkKEV4
ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisg
ICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogCi0gICAgU3RvcmFnZSogc3RvcmFnZSA9IEpTU3RvcmFnZTo6dG9XcmFwcGVkKGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBTdG9yYWdlKiBzdG9yYWdlID0gSlNTdG9y
YWdlOjp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmIChzdG9y
YWdlKQotICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgaW1wbCgpLnN0b3Jh
Z2VJZEltcGwoc3RvcmFnZSkpOworICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoJnN0
YXRlLCBpbXBsKCkuc3RvcmFnZUlkSW1wbChzdG9yYWdlKSk7CiAKICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5
cHRvQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQ3VzdG9t
LmNwcAppbmRleCAxNThiMzU2Y2QxZjEwOTk3NWUxOTZhZWY2ZGZiNmE5ZGRjM2JkYjc0Li5kMDdi
ZWFjYTE1YTU0NzJiNDY5MGFhYzQ1YzFhZDc1NGNmNWQ5YTM5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDcnlwdG9DdXN0b20uY3BwCkBAIC0zNSwyMSArMzUsMjEgQEAgdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTQ3J5
cHRvOjpnZXRSYW5kb21WYWx1ZXMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NyeXB0bzo6
Z2V0UmFuZG9tVmFsdWVzKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9u
KGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3Rh
dGUuYXJndW1lbnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dF
eGNlcHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsK
IAotICAgIEpTVmFsdWUgYnVmZmVyID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgSlNWYWx1ZSBi
dWZmZXIgPSBzdGF0ZS5hcmd1bWVudCgwKTsKICAgICBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBh
cnJheUJ1ZmZlclZpZXcgPSB0b0FycmF5QnVmZmVyVmlldyhidWZmZXIpOwogICAgIGlmICghYXJy
YXlCdWZmZXJWaWV3KQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAg
ICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CiAgICAgaW1wbCgpLmdldFJhbmRvbVZhbHVlcyhhcnJheUJ1ZmZlclZpZXcuZ2V0KCks
IGVjKTsKIAogICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDcnlwdG9LZXlDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDcnlwdG9LZXlDdXN0b20uY3BwCmluZGV4IGIyNGFlMGNjMGUxMjY0ZmRhMzc4NzFmMGJmZDcx
M2YwODJlMTY4YmUuLmFkODFlNGQ0NWIxZTYxZWFlMTg3MGFhZWM3M2RlM2FlNWRiYzg5ZjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5Q3VzdG9tLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleUN1c3RvbS5jcHAK
QEAgLTM1LDkgKzM1LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1KU1ZhbHVlIEpTQ3J5cHRvS2V5OjphbGdvcml0aG0oSlNDOjpFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0CitKU1ZhbHVlIEpTQ3J5cHRvS2V5OjphbGdvcml0aG0oSlNDOjpFeGVjU3RhdGUm
IHN0YXRlKSBjb25zdAogewotICAgIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlciBidWlsZGVyKGV4
ZWMpOworICAgIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlciBidWlsZGVyKCZzdGF0ZSk7CiAgICAg
aW1wbCgpLmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oYnVpbGRlcik7CiAgICAgcmV0dXJuIGJ1
aWxkZXIucmVzdWx0KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q3VzdG9tRXZlbnRDdXN0b20uY3BwCmluZGV4IGRhZDczYTJhNDIwYzZiNjM0OTg1MzRlMWVjZDE2
OGUwYjA2MmI3MWEuLmFmMTQ5ZGFhZjA1NDI1MTIzZmU4ODY5NDk5ZDViN2JlZjU4MDNlNWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0b20u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0b20u
Y3BwCkBAIC0zNiw3ICszNiw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAKLUpTVmFsdWUgSlNDdXN0b21FdmVudDo6ZGV0YWlsKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKK0pTVmFsdWUgSlNDdXN0b21FdmVudDo6ZGV0YWlsKEV4ZWNTdGF0ZSYgc3Rh
dGUpIGNvbnN0CiB7CiAgICAgQ3VzdG9tRXZlbnQmIGV2ZW50ID0gaW1wbCgpOwogICAgIApAQCAt
NDUsMTUgKzQ1LDE1IEBAIEpTVmFsdWUgSlNDdXN0b21FdmVudDo6ZGV0YWlsKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKIAogICAgIEpTVmFsdWUgZGV0YWlsID0gZXZlbnQuZGV0YWlsKCkuanNWYWx1
ZSgpOwogICAgIAotICAgIGlmIChkZXRhaWwuaXNPYmplY3QoKSAmJiAmd29ybGRGb3JET01PYmpl
Y3QoZGV0YWlsLmdldE9iamVjdCgpKSAhPSAmY3VycmVudFdvcmxkKGV4ZWMpKSB7CisgICAgaWYg
KGRldGFpbC5pc09iamVjdCgpICYmICZ3b3JsZEZvckRPTU9iamVjdChkZXRhaWwuZ2V0T2JqZWN0
KCkpICE9ICZjdXJyZW50V29ybGQoJnN0YXRlKSkgewogICAgICAgICAvLyBXZSBuZWVkIHRvIG1h
a2Ugc3VyZSBDdXN0b21FdmVudHMgZG8gbm90IGxlYWsgdGhlaXIgZGV0YWlsIHByb3BlcnR5IGFj
cm9zcyBpc29sYXRlZCBET00gd29ybGRzLgogICAgICAgICAvLyBJZGVhbGx5LCB3ZSB3b3VsZCBj
aGVjayB0aGF0IHRoZSB3b3JsZHMgaGF2ZSBkaWZmZXJlbnQgcHJpdmlsZWdlcyBidXQgdGhhdCdz
IG5vdCBwb3NzaWJsZSB5ZXQuCi0gICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHNlcmlhbGl6ZWREZXRhaWwgPSBldmVudC50cnlTZXJpYWxpemVEZXRhaWwoZXhlYyk7CisgICAg
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWREZXRhaWwgPSBldmVu
dC50cnlTZXJpYWxpemVEZXRhaWwoJnN0YXRlKTsKICAgICAgICAgCiAgICAgICAgIGlmICghc2Vy
aWFsaXplZERldGFpbCkKICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICAgICAgCi0g
ICAgICAgIHJldHVybiBzZXJpYWxpemVkRGV0YWlsLT5kZXNlcmlhbGl6ZShleGVjLCBnbG9iYWxP
YmplY3QoKSwgbnVsbHB0cik7CisgICAgICAgIHJldHVybiBzZXJpYWxpemVkRGV0YWlsLT5kZXNl
cmlhbGl6ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBudWxscHRyKTsKICAgICB9CiAgICAgCiAg
ICAgcmV0dXJuIGRldGFpbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NRm9ybURhdGFDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01Gb3JtRGF0YUN1c3RvbS5jcHAKaW5kZXggN2VjMjQ5NWRkZWJmYzRhMzUyNmFkNmMzZjM4ZTI0
NDk2YjRhY2IwYS4uMTNmZGI1MmQ2YzI1MzE5YzE5MzhhNzQyOTIyNDIyMDZhY2ZlYzY3OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5j
cHAKQEAgLTU1LDE4ICs1NSwxOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0
cnVjdEpTRE9NRm9ybURhdGEoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwg
ZG9tRm9ybURhdGEuZ2V0KCkpKSk7CiB9CiAKLUpTVmFsdWUgSlNET01Gb3JtRGF0YTo6YXBwZW5k
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNET01Gb3JtRGF0YTo6YXBwZW5kKEV4ZWNTdGF0
ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7Ci0gICAg
ICAgIFN0cmluZyBuYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+YXJndW1lbnQoMSk7CisgICAg
aWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0g
c3RhdGUuYXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKKyAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IHN0YXRlLmFyZ3VtZW50KDEpOwogICAgICAgICBpZiAodmFsdWUu
aW5oZXJpdHMoSlNCbG9iOjppbmZvKCkpKSB7CiAgICAgICAgICAgICBTdHJpbmcgZmlsZW5hbWU7
Ci0gICAgICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDMgJiYgIWV4ZWMtPmFy
Z3VtZW50KDIpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICAgICAgZmlsZW5hbWUg
PSBleGVjLT5hcmd1bWVudCgyKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAg
ICAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID49IDMgJiYgIXN0YXRlLmFyZ3VtZW50KDIp
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBzdGF0ZS5h
cmd1bWVudCgyKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwogICAgICAgICAgICAg
aW1wbCgpLmFwcGVuZChuYW1lLCBKU0Jsb2I6OnRvV3JhcHBlZCh2YWx1ZSksIGZpbGVuYW1lKTsK
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpbXBsKCkuYXBwZW5kKG5hbWUsIHZhbHVlLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgICAgICAgICBpbXBsKCkuYXBwZW5kKG5h
bWUsIHZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSkpOwogICAgIH0KIAogICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01Ub2tlbkxpc3RDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Ub2tlbkxpc3RDdXN0b20uY3BwCmluZGV4IDBhMTlmYzZkNzhhYmJmZTJkZGM1Y2Q0
ZjIyZGI5M2JkMjM3ODIxZGEuLmJkZDQ4Nzc4NDllY2E3Y2NjOTFiYjZkYTViYzQzZDE2NjI4ZGRk
Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NVG9rZW5MaXN0
Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVRva2VuTGlz
dEN1c3RvbS5jcHAKQEAgLTM0LDIzICszNCwyMyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNET01Ub2tlbkxpc3Q6OnRvZ2dsZShFeGVj
U3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0RPTVRva2VuTGlzdDo6dG9nZ2xlKEV4ZWNTdGF0ZSYg
c3RhdGUpCiB7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
LSAgICAgICAgcmV0dXJuIHN0YXRlLT52bSgpLnRocm93RXhjZXB0aW9uKHN0YXRlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS5h
cmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNl
cHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFN0cmluZyB0b2tlbiA9IHN0YXRlLT5hcmd1
bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBTdHJpbmcgdG9rZW4gPSBzdGF0ZS5hcmd1bWVu
dCgwKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOworICAgIGlmIChVTkxJS0VMWShz
dGF0ZS5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAg
ICAgLy8gdG9nZ2xlKCkgbmVlZHMgdG8gYmUgYWJsZSB0byBkaXN0aW5ndWlzaCB1bmRlZmluZWQv
bWlzc2luZyBmcm9tIHRoZSBmYWxzZSB2YWx1ZSBmb3IgdGhlICdmb3JjZScgcGFyYW1ldGVyLgot
ICAgIE9wdGlvbmFsPGJvb2w+IGZvcmNlID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVk
KCkgPyBOdWxsb3B0IDogT3B0aW9uYWw8Ym9vbD4oc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEp
LnRvQm9vbGVhbihzdGF0ZSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIE9wdGlvbmFsPGJvb2w+IGZvcmNlID0gc3RhdGUuYXJndW1lbnQoMSkuaXNVbmRl
ZmluZWQoKSA/IE51bGxvcHQgOiBPcHRpb25hbDxib29sPihzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgxKS50b0Jvb2xlYW4oJnN0YXRlKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc0Jvb2xlYW4oaW1wbCgpLnRvZ2dsZSh0b2tlbiwgZm9yY2UsIGVjKSk7CiAKLSAgICBz
ZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBl
Yyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCmluZGV4IDQ4YTg2YzQ4ZGU4N2M4YjVmYjk4MzY1
MzAyYmJlYTYxMDhiZDIyNjYuLjI1N2E5NTg2MzllZGU3N2MwYmEyYTFhMTZmNDhlYTc5MzUwOWRk
YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3Rv
bS5jcHAKQEAgLTQ2OSw3NiArNDY5LDc2IEBAIGJvb2wgSlNET01XaW5kb3c6OmRlZmluZU93blBy
b3BlcnR5KEpTQzo6SlNPYmplY3QqIG9iamVjdCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsCiAKIC8v
IEN1c3RvbSBBdHRyaWJ1dGVzCiAKLXZvaWQgSlNET01XaW5kb3c6OnNldExvY2F0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNET01XaW5kb3c6OnNldExvY2F0aW9u
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAjaWYgRU5BQkxFKERBU0hCT0FS
RF9TVVBQT1JUKQogICAgIC8vIFRvIGF2b2lkIGJyZWFraW5nIG9sZCB3aWRnZXRzLCBtYWtlICJ2
YXIgbG9jYXRpb24gPSIgaW4gYSB0b3AtbGV2ZWwgZnJhbWUgY3JlYXRlCiAgICAgLy8gYSBwcm9w
ZXJ0eSBuYW1lZCAibG9jYXRpb24iIGluc3RlYWQgb2YgcGVyZm9ybWluZyBhIG5hdmlnYXRpb24g
KDxyZGFyOi8vcHJvYmxlbS81Njg4MDM5PikuCi0gICAgaWYgKEZyYW1lKiBhY3RpdmVGcmFtZSA9
IGFjdGl2ZURPTVdpbmRvdyhleGVjKS5mcmFtZSgpKSB7CisgICAgaWYgKEZyYW1lKiBhY3RpdmVG
cmFtZSA9IGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpLmZyYW1lKCkpIHsKICAgICAgICAgaWYgKGFj
dGl2ZUZyYW1lLT5zZXR0aW5ncygpLnVzZXNEYXNoYm9hcmRCYWNrd2FyZENvbXBhdGliaWxpdHlN
b2RlKCkgJiYgIWFjdGl2ZUZyYW1lLT50cmVlKCkucGFyZW50KCkpIHsKLSAgICAgICAgICAgIGlm
IChCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coZXhlYywgaW1w
bCgpKSkKLSAgICAgICAgICAgICAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhleGVjLCAibG9jYXRpb24iKSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKEJp
bmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygmc3RhdGUsIGltcGwo
KSkpCisgICAgICAgICAgICAgICAgcHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLCAibG9jYXRpb24iKSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAKLSAgICBTdHJpbmcgbG9jYXRpb25TdHJpbmcg
PSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIFN0cmluZyBsb2NhdGlvblN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCZz
dGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoTG9jYXRpb24qIGxvY2F0aW9uID0gaW1wbCgpLmxvY2F0
aW9uKCkpCi0gICAgICAgIGxvY2F0aW9uLT5zZXRIcmVmKGFjdGl2ZURPTVdpbmRvdyhleGVjKSwg
Zmlyc3RET01XaW5kb3coZXhlYyksIGxvY2F0aW9uU3RyaW5nKTsKKyAgICAgICAgbG9jYXRpb24t
PnNldEhyZWYoYWN0aXZlRE9NV2luZG93KCZzdGF0ZSksIGZpcnN0RE9NV2luZG93KCZzdGF0ZSks
IGxvY2F0aW9uU3RyaW5nKTsKIH0KIAotSlNWYWx1ZSBKU0RPTVdpbmRvdzo6ZXZlbnQoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6ZXZlbnQoRXhlY1N0YXRlJiBz
dGF0ZSkgY29uc3QKIHsKICAgICBFdmVudCogZXZlbnQgPSBjdXJyZW50RXZlbnQoKTsKICAgICBp
ZiAoIWV2ZW50KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gdG9K
UyhleGVjLCBjb25zdF9jYXN0PEpTRE9NV2luZG93Kj4odGhpcyksIGV2ZW50KTsKKyAgICByZXR1
cm4gdG9KUygmc3RhdGUsIGNvbnN0X2Nhc3Q8SlNET01XaW5kb3cqPih0aGlzKSwgZXZlbnQpOwog
fQogCi1KU1ZhbHVlIEpTRE9NV2luZG93OjppbWFnZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitK
U1ZhbHVlIEpTRE9NV2luZG93OjppbWFnZShFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewotICAg
IHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU0ltYWdlQ29uc3RydWN0b3I+KGV4ZWMtPnZtKCks
IHRoaXMpOworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU0ltYWdlQ29uc3RydWN0b3I+
KHN0YXRlLnZtKCksIHRoaXMpOwogfQogCiAjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi1K
U1ZhbHVlIEpTRE9NV2luZG93Ojp0b3VjaChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVl
IEpTRE9NV2luZG93Ojp0b3VjaChFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewotICAgIHJldHVy
biBnZXRET01Db25zdHJ1Y3RvcjxKU1RvdWNoQ29uc3RydWN0b3I+KGV4ZWMtPnZtKCksIHRoaXMp
OworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1RvdWNoQ29uc3RydWN0b3I+KHN0YXRl
LnZtKCksIHRoaXMpOwogfQogCi1KU1ZhbHVlIEpTRE9NV2luZG93Ojp0b3VjaExpc3QoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6dG91Y2hMaXN0KEV4ZWNTdGF0
ZSYgc3RhdGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVG91Y2hM
aXN0Q29uc3RydWN0b3I+KGV4ZWMtPnZtKCksIHRoaXMpOworICAgIHJldHVybiBnZXRET01Db25z
dHJ1Y3RvcjxKU1RvdWNoTGlzdENvbnN0cnVjdG9yPihzdGF0ZS52bSgpLCB0aGlzKTsKIH0KICNl
bmRpZgogCiAvLyBDdXN0b20gZnVuY3Rpb25zCiAKLUpTVmFsdWUgSlNET01XaW5kb3c6Om9wZW4o
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6b3BlbihFeGVjU3RhdGUmIHN0
YXRlKQogewotICAgIFN0cmluZyB1cmxTdHJpbmcgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5l
ZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgU3RyaW5nIHVybFN0cmluZyA9IHZhbHVlVG9TdHJpbmdXaXRoVW5k
ZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSk7CisgICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBB
dG9taWNTdHJpbmcgZnJhbWVOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51
bGwoKSA/ICJfYmxhbmsiIDogZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBBdG9taWNTdHJpbmcg
ZnJhbWVOYW1lID0gc3RhdGUuYXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSA/ICJfYmxh
bmsiIDogc3RhdGUuYXJndW1lbnQoMSkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsK
KyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgIFN0cmluZyB3aW5kb3dGZWF0dXJlc1N0cmluZyA9IHZhbHVlVG9TdHJpbmdXaXRo
VW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQoMikpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBTdHJpbmcgd2luZG93RmVhdHVyZXNTdHJpbmcgPSB2
YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKCZzdGF0ZSwgc3RhdGUuYXJndW1l
bnQoMikpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKLSAgICBSZWZQdHI8RE9NV2luZG93PiBvcGVuZWRXaW5kb3cgPSBpbXBs
KCkub3Blbih1cmxTdHJpbmcsIGZyYW1lTmFtZSwgd2luZG93RmVhdHVyZXNTdHJpbmcsIGFjdGl2
ZURPTVdpbmRvdyhleGVjKSwgZmlyc3RET01XaW5kb3coZXhlYykpOworICAgIFJlZlB0cjxET01X
aW5kb3c+IG9wZW5lZFdpbmRvdyA9IGltcGwoKS5vcGVuKHVybFN0cmluZywgZnJhbWVOYW1lLCB3
aW5kb3dGZWF0dXJlc1N0cmluZywgYWN0aXZlRE9NV2luZG93KCZzdGF0ZSksIGZpcnN0RE9NV2lu
ZG93KCZzdGF0ZSkpOwogICAgIGlmICghb3BlbmVkV2luZG93KQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICByZXR1cm4gdG9KUyhleGVjLCBvcGVuZWRXaW5kb3cuZ2V0KCkpOwor
ICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgb3BlbmVkV2luZG93LmdldCgpKTsKIH0KIAogY2xhc3Mg
RGlhbG9nSGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgRGlhbG9nSGFuZGxlcihFeGVj
U3RhdGUqIGV4ZWMpCisgICAgZXhwbGljaXQgRGlhbG9nSGFuZGxlcihFeGVjU3RhdGUmIGV4ZWMp
CiAgICAgICAgIDogbV9leGVjKGV4ZWMpCiAgICAgewogICAgIH0KQEAgLTU0Nyw3ICs1NDcsNyBA
QCBwdWJsaWM6CiAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSgpIGNvbnN0OwogCiBwcml2YXRlOgot
ICAgIEV4ZWNTdGF0ZSogbV9leGVjOworICAgIEV4ZWNTdGF0ZSYgbV9leGVjOwogICAgIFJlZlB0
cjxGcmFtZT4gbV9mcmFtZTsKIH07CiAKQEAgLTU1Nyw0MiArNTU3LDQyIEBAIGlubGluZSB2b2lk
IERpYWxvZ0hhbmRsZXI6OmRpYWxvZ0NyZWF0ZWQoRE9NV2luZG93JiBkaWFsb2cpCiAgICAgCiAg
ICAgLy8gRklYTUU6IFRoaXMgbG9va3MgbGlrZSBhIGxlYWsgYmV0d2VlbiB0aGUgbm9ybWFsIHdv
cmxkIGFuZCBhbiBpc29sYXRlZAogICAgIC8vICAgICAgICB3b3JsZCBpZiBkaWFsb2dBcmd1bWVu
dHMgY29tZXMgZnJvbSBhbiBpc29sYXRlZCB3b3JsZC4KLSAgICBKU0RPTVdpbmRvdyogZ2xvYmFs
T2JqZWN0ID0gdG9KU0RPTVdpbmRvdyhtX2ZyYW1lLmdldCgpLCBub3JtYWxXb3JsZChtX2V4ZWMt
PnZtKCkpKTsKLSAgICBpZiAoSlNWYWx1ZSBkaWFsb2dBcmd1bWVudHMgPSBtX2V4ZWMtPmFyZ3Vt
ZW50KDEpKQotICAgICAgICBnbG9iYWxPYmplY3QtPnB1dERpcmVjdChtX2V4ZWMtPnZtKCksIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcobV9leGVjLCAiZGlhbG9nQXJndW1lbnRzIiksIGRpYWxvZ0Fy
Z3VtZW50cyk7CisgICAgSlNET01XaW5kb3cqIGdsb2JhbE9iamVjdCA9IHRvSlNET01XaW5kb3co
bV9mcmFtZS5nZXQoKSwgbm9ybWFsV29ybGQobV9leGVjLnZtKCkpKTsKKyAgICBpZiAoSlNWYWx1
ZSBkaWFsb2dBcmd1bWVudHMgPSBtX2V4ZWMuYXJndW1lbnQoMSkpCisgICAgICAgIGdsb2JhbE9i
amVjdC0+cHV0RGlyZWN0KG1fZXhlYy52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZtX2V4
ZWMsICJkaWFsb2dBcmd1bWVudHMiKSwgZGlhbG9nQXJndW1lbnRzKTsKIH0KIAogaW5saW5lIEpT
VmFsdWUgRGlhbG9nSGFuZGxlcjo6cmV0dXJuVmFsdWUoKSBjb25zdAogewotICAgIEpTRE9NV2lu
ZG93KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NV2luZG93KG1fZnJhbWUuZ2V0KCksIG5vcm1hbFdv
cmxkKG1fZXhlYy0+dm0oKSkpOworICAgIEpTRE9NV2luZG93KiBnbG9iYWxPYmplY3QgPSB0b0pT
RE9NV2luZG93KG1fZnJhbWUuZ2V0KCksIG5vcm1hbFdvcmxkKG1fZXhlYy52bSgpKSk7CiAgICAg
aWYgKCFnbG9iYWxPYmplY3QpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIElk
ZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcobV9leGVjLCAicmV0
dXJuVmFsdWUiKTsKKyAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZtX2V4ZWMsICJyZXR1cm5WYWx1ZSIpOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGds
b2JhbE9iamVjdCk7Ci0gICAgaWYgKCFKU0dsb2JhbE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
KGdsb2JhbE9iamVjdCwgbV9leGVjLCBpZGVudGlmaWVyLCBzbG90KSkKKyAgICBpZiAoIUpTR2xv
YmFsT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0LCAmbV9leGVjLCBpZGVu
dGlmaWVyLCBzbG90KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJu
IHNsb3QuZ2V0VmFsdWUobV9leGVjLCBpZGVudGlmaWVyKTsKKyAgICByZXR1cm4gc2xvdC5nZXRW
YWx1ZSgmbV9leGVjLCBpZGVudGlmaWVyKTsKIH0KIAotSlNWYWx1ZSBKU0RPTVdpbmRvdzo6c2hv
d01vZGFsRGlhbG9nKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNET01XaW5kb3c6OnNob3dN
b2RhbERpYWxvZyhFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIFN0cmluZyB1cmxTdHJpbmcgPSB2
YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50
KDApKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgU3RyaW5nIHVybFN0cmlu
ZyA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS5h
cmd1bWVudCgwKSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICBTdHJpbmcgZGlhbG9nRmVhdHVyZXNTdHJpbmcgPSB2YWx1
ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIp
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgU3RyaW5nIGRpYWxvZ0ZlYXR1
cmVzU3RyaW5nID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygmc3RhdGUs
IHN0YXRlLmFyZ3VtZW50KDIpKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgRGlhbG9nSGFuZGxlciBoYW5kbGVyKGV4
ZWMpOworICAgIERpYWxvZ0hhbmRsZXIgaGFuZGxlcihzdGF0ZSk7CiAKLSAgICBpbXBsKCkuc2hv
d01vZGFsRGlhbG9nKHVybFN0cmluZywgZGlhbG9nRmVhdHVyZXNTdHJpbmcsIGFjdGl2ZURPTVdp
bmRvdyhleGVjKSwgZmlyc3RET01XaW5kb3coZXhlYyksIFsmaGFuZGxlcl0oRE9NV2luZG93JiBk
aWFsb2cpIHsKKyAgICBpbXBsKCkuc2hvd01vZGFsRGlhbG9nKHVybFN0cmluZywgZGlhbG9nRmVh
dHVyZXNTdHJpbmcsIGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpLCBmaXJzdERPTVdpbmRvdygmc3Rh
dGUpLCBbJmhhbmRsZXJdKERPTVdpbmRvdyYgZGlhbG9nKSB7CiAgICAgICAgIGhhbmRsZXIuZGlh
bG9nQ3JlYXRlZChkaWFsb2cpOwogICAgIH0pOwogCiAgICAgcmV0dXJuIGhhbmRsZXIucmV0dXJu
VmFsdWUoKTsKIH0KIAotc3RhdGljIEpTVmFsdWUgaGFuZGxlUG9zdE1lc3NhZ2UoRE9NV2luZG93
KiBpbXBsLCBFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBoYW5kbGVQb3N0TWVzc2Fn
ZShET01XaW5kb3cmIGltcGwsIEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgTWVzc2FnZVBvcnRB
cnJheSBtZXNzYWdlUG9ydHM7CiAgICAgQXJyYXlCdWZmZXJBcnJheSBhcnJheUJ1ZmZlcnM7CkBA
IC02MDQsMTAyICs2MDQsMTAyIEBAIHN0YXRpYyBKU1ZhbHVlIGhhbmRsZVBvc3RNZXNzYWdlKERP
TVdpbmRvdyogaW1wbCwgRXhlY1N0YXRlKiBleGVjKQogICAgIC8vIExlZ2FjeSBub24tc3RhbmRh
cmQgaW1wbGVtZW50YXRpb25zIGluIHdlYmtpdCBhbGxvd2VkOgogICAgIC8vICAgcG9zdE1lc3Nh
Z2UobWVzc2FnZSwge3NlcXVlbmNlIG9mIHRyYW5zZmVycmFibGVzfSwgdGFyZ2V0T3JpZ2luKTsK
ICAgICBpbnQgdGFyZ2V0T3JpZ2luQXJnSW5kZXggPSAxOwotICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPiAyKSB7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+IDIpIHsKICAg
ICAgICAgaW50IHRyYW5zZmVyYWJsZXNBcmdJbmRleCA9IDI7Ci0gICAgICAgIGlmIChleGVjLT5h
cmd1bWVudCgyKS5pc1N0cmluZygpKSB7CisgICAgICAgIGlmIChzdGF0ZS5hcmd1bWVudCgyKS5p
c1N0cmluZygpKSB7CiAgICAgICAgICAgICB0YXJnZXRPcmlnaW5BcmdJbmRleCA9IDI7CiAgICAg
ICAgICAgICB0cmFuc2ZlcmFibGVzQXJnSW5kZXggPSAxOwogICAgICAgICB9Ci0gICAgICAgIGZp
bGxNZXNzYWdlUG9ydEFycmF5KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KHRyYW5zZmVyYWJsZXNBcmdJ
bmRleCksIG1lc3NhZ2VQb3J0cywgYXJyYXlCdWZmZXJzKTsKKyAgICAgICAgZmlsbE1lc3NhZ2VQ
b3J0QXJyYXkoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KHRyYW5zZmVyYWJsZXNBcmdJbmRleCksIG1l
c3NhZ2VQb3J0cywgYXJyYXlCdWZmZXJzKTsKICAgICB9Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtZXNzYWdl
ID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCks
CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSA9IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6Y3JlYXRlKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJm1lc3NhZ2VQb3J0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXJyYXlCdWZmZXJzKTsKIAot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgU3RyaW5nIHRhcmdldE9y
aWdpbiA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+
YXJndW1lbnQodGFyZ2V0T3JpZ2luQXJnSW5kZXgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgU3RyaW5nIHRhcmdldE9yaWdpbiA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZp
bmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCh0YXJnZXRPcmlnaW5BcmdJbmRl
eCkpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsLT5wb3N0TWVz
c2FnZShtZXNzYWdlLnJlbGVhc2UoKSwgJm1lc3NhZ2VQb3J0cywgdGFyZ2V0T3JpZ2luLCBhY3Rp
dmVET01XaW5kb3coZXhlYyksIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwor
ICAgIGltcGwucG9zdE1lc3NhZ2UobWVzc2FnZS5yZWxlYXNlKCksICZtZXNzYWdlUG9ydHMsIHRh
cmdldE9yaWdpbiwgYWN0aXZlRE9NV2luZG93KCZzdGF0ZSksIGVjKTsKKyAgICBzZXRET01FeGNl
cHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNW
YWx1ZSBKU0RPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBK
U0RPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1cm4g
aGFuZGxlUG9zdE1lc3NhZ2UoJmltcGwoKSwgZXhlYyk7CisgICAgcmV0dXJuIGhhbmRsZVBvc3RN
ZXNzYWdlKGltcGwoKSwgc3RhdGUpOwogfQogCi1KU1ZhbHVlIEpTRE9NV2luZG93OjpzZXRUaW1l
b3V0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNET01XaW5kb3c6OnNldFRpbWVvdXQoRXhl
Y1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBDb250ZW50U2VjdXJpdHlQb2xpY3kqIGNvbnRlbnRTZWN1
cml0eVBvbGljeSA9IGltcGwoKS5kb2N1bWVudCgpID8gaW1wbCgpLmRvY3VtZW50KCktPmNvbnRl
bnRTZWN1cml0eVBvbGljeSgpIDogMDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0
aW9uPiBhY3Rpb24gPSBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3Qo
KS0+d29ybGQoKSwgY29udGVudFNlY3VyaXR5UG9saWN5KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgQ29udGVudFNlY3VyaXR5UG9saWN5KiBjb250ZW50U2VjdXJpdHlQb2xp
Y3kgPSBpbXBsKCkuZG9jdW1lbnQoKSA/IGltcGwoKS5kb2N1bWVudCgpLT5jb250ZW50U2VjdXJp
dHlQb2xpY3koKSA6IG51bGxwdHI7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNjaGVkdWxlZEFjdGlv
bj4gYWN0aW9uID0gU2NoZWR1bGVkQWN0aW9uOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3Qo
KS0+d29ybGQoKSwgY29udGVudFNlY3VyaXR5UG9saWN5KTsKKyAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKCFhY3Rp
b24pCiAgICAgICAgIHJldHVybiBqc051bWJlcigwKTsKIAotICAgIGludCBkZWxheSA9IGV4ZWMt
PmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgaW50IGRlbGF5ID0gc3RhdGUuYXJndW1l
bnQoMSkudG9JbnQzMigmc3RhdGUpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAg
aW50IHJlc3VsdCA9IGltcGwoKS5zZXRUaW1lb3V0KFdURjo6bW92ZShhY3Rpb24pLCBkZWxheSwg
ZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9u
KCZzdGF0ZSwgZWMpOwogCiAgICAgcmV0dXJuIGpzTnVtYmVyKHJlc3VsdCk7CiB9CiAKLUpTVmFs
dWUgSlNET01XaW5kb3c6OnNldEludGVydmFsKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNE
T01XaW5kb3c6OnNldEludGVydmFsKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgQ29udGVudFNl
Y3VyaXR5UG9saWN5KiBjb250ZW50U2VjdXJpdHlQb2xpY3kgPSBpbXBsKCkuZG9jdW1lbnQoKSA/
IGltcGwoKS5kb2N1bWVudCgpLT5jb250ZW50U2VjdXJpdHlQb2xpY3koKSA6IDA7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFNjaGVkdWxlZEFjdGlvbj4gYWN0aW9uID0gU2NoZWR1bGVkQWN0aW9uOjpj
cmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KCktPndvcmxkKCksIGNvbnRlbnRTZWN1cml0eVBvbGlj
eSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIENvbnRlbnRTZWN1cml0eVBv
bGljeSogY29udGVudFNlY3VyaXR5UG9saWN5ID0gaW1wbCgpLmRvY3VtZW50KCkgPyBpbXBsKCku
ZG9jdW1lbnQoKS0+Y29udGVudFNlY3VyaXR5UG9saWN5KCkgOiBudWxscHRyOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3Jl
YXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCktPndvcmxkKCksIGNvbnRlbnRTZWN1cml0eVBvbGlj
eSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICBpbnQgZGVsYXkgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMp
OworICAgIGludCBkZWxheSA9IHN0YXRlLmFyZ3VtZW50KDEpLnRvSW50MzIoJnN0YXRlKTsKIAog
ICAgIGlmICghYWN0aW9uKQogICAgICAgICByZXR1cm4ganNOdW1iZXIoMCk7CiAKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKICAgICBpbnQgcmVzdWx0ID0gaW1wbCgpLnNldEludGVydmFsKFdU
Rjo6bW92ZShhY3Rpb24pLCBkZWxheSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBl
Yyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogCiAgICAgcmV0dXJuIGpzTnVt
YmVyKHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUgSlNET01XaW5kb3c6OmFkZEV2ZW50TGlzdGVuZXIo
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5lcihF
eGVjU3RhdGUmIHN0YXRlKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS5mcmFtZSgpOwog
ICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgSlNW
YWx1ZSBsaXN0ZW5lciA9IGV4ZWMtPmFyZ3VtZW50KDEpOworICAgIEpTVmFsdWUgbGlzdGVuZXIg
PSBzdGF0ZS5hcmd1bWVudCgxKTsKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLmFkZEV2ZW50TGlzdGVuZXIo
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnRvQXRvbWljU3RyaW5nKGV4ZWMpLCBK
U0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBn
bG9iYWxPYmplY3QoKS0+d29ybGQoKSksIGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVj
KSk7CisgICAgaW1wbCgpLmFkZEV2ZW50TGlzdGVuZXIoc3RhdGUuYXJndW1lbnQoMCkudG9TdHJp
bmcoJnN0YXRlKS0+dG9BdG9taWNTdHJpbmcoJnN0YXRlKSwgSlNFdmVudExpc3RlbmVyOjpjcmVh
dGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgZ2xvYmFsT2JqZWN0KCktPndvcmxk
KCkpLCBzdGF0ZS5hcmd1bWVudCgyKS50b0Jvb2xlYW4oJnN0YXRlKSk7CiAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVu
ZXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0
ZW5lcihFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS5mcmFt
ZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0g
ICAgSlNWYWx1ZSBsaXN0ZW5lciA9IGV4ZWMtPmFyZ3VtZW50KDEpOworICAgIEpTVmFsdWUgbGlz
dGVuZXIgPSBzdGF0ZS5hcmd1bWVudCgxKTsKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLnJlbW92ZUV2ZW50
TGlzdGVuZXIoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnRvQXRvbWljU3RyaW5n
KGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIHRoaXMs
IGZhbHNlLCBnbG9iYWxPYmplY3QoKS0+d29ybGQoKSkucHRyKCksIGV4ZWMtPmFyZ3VtZW50KDIp
LnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1wbCgpLnJlbW92ZUV2ZW50TGlzdGVuZXIoc3RhdGUu
YXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dG9BdG9taWNTdHJpbmcoJnN0YXRlKSwgSlNF
dmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgZ2xv
YmFsT2JqZWN0KCktPndvcmxkKCkpLnB0cigpLCBzdGF0ZS5hcmd1bWVudCgyKS50b0Jvb2xlYW4o
JnN0YXRlKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YUN1ZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RhdGFDdWVDdXN0b20uY3BwCmluZGV4IDJhM2M5YThiM2IzMjA1
NDZjNzE4YjA1YjA0Nzc3ZmQzMjQ3MmQzMWUuLjdhYjMyNDVkMGJiYzJiZDdkZjU3ZjJiNzU5YjM0
YjA0ODBmMzM1YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0
YUN1ZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhQ3Vl
Q3VzdG9tLmNwcApAQCAtMzYsMTQgKzM2LDE0IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICNpZiBFTkFCTEUoREFUQUNVRV9WQUxVRSkKLUpTVmFsdWUgSlNE
YXRhQ3VlOjp2YWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTRGF0YUN1ZTo6
dmFsdWUoRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKLSAgICByZXR1cm4gaW1wbCgpLnZhbHVl
KGV4ZWMpOworICAgIHJldHVybiBpbXBsKCkudmFsdWUoJnN0YXRlKTsKIH0KIAotdm9pZCBKU0Rh
dGFDdWU6OnNldFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNE
YXRhQ3VlOjpzZXRWYWx1ZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewotICAg
IGltcGwoKS5zZXRWYWx1ZShleGVjLCB2YWx1ZSk7CisgICAgaW1wbCgpLnNldFZhbHVlKCZzdGF0
ZSwgdmFsdWUpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRGF0YVRyYW5zZmVyQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRGF0YVRyYW5zZmVyQ3VzdG9tLmNwcAppbmRleCA3OTE4ZjQwZTcwMDdjNjQ1ZmJiN2Rj
MjAwM2NkNWYzYTJlNzA3NzUzLi4wYjBmYTkwNzYwMTY1NjcxMzFjYjhkNzAzM2M5Yzg2MThjMGEx
ZGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFUcmFuc2Zl
ckN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhVHJhbnNm
ZXJDdXN0b20uY3BwCkBAIC0zNSwxMCArMzUsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTRGF0YVRyYW5zZmVyOjp0eXBlcyhFeGVj
U3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTRGF0YVRyYW5zZmVyOjp0eXBlcyhFeGVjU3Rh
dGUmIHN0YXRlKSBjb25zdAogewogICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzID0gaW1wbCgpLnR5
cGVzKCk7Ci0gICAgcmV0dXJuIHR5cGVzLmlzRW1wdHkoKSA/IGpzTnVsbCgpIDoganNBcnJheShl
eGVjLCBnbG9iYWxPYmplY3QoKSwgdHlwZXMpOworICAgIHJldHVybiB0eXBlcy5pc0VtcHR5KCkg
PyBqc051bGwoKSA6IGpzQXJyYXkoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgdHlwZXMpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3Bw
CmluZGV4IGVhNjJlMjhlZGM2MGQxYmY3ZTY4NTFlN2QxMzRjYTQxMDQ2YTgxZDUuLjgzODlkNjFl
NTgzMTM4NTRmNTU2MzNjMmM5M2Q1MTE3MzBjM2VhMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2Nv
cGVDdXN0b20uY3BwCkBAIC0zOSw5ICszOSw5IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotSlNDOjpKU1ZhbHVlIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFs
U2NvcGU6OnBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQorSlNDOjpKU1ZhbHVlIEpT
RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6OnBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSkKIHsKLSAgICByZXR1cm4gaGFuZGxlUG9zdE1lc3NhZ2UoZXhlYywgJmltcGwoKSk7Cisg
ICAgcmV0dXJuIGhhbmRsZVBvc3RNZXNzYWdlKHN0YXRlLCAmaW1wbCgpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEaWN0aW9uYXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFy
eS5jcHAKaW5kZXggZjY3YzIzNDg1ZmY0NDQwM2Y4ZWVlMzhhZWUzNjBjODBkOGNlYWE4MS4uZTA5
NDk0NDM0ODc2MGE0YWRiMzc1ZjkwZDdlNzQ1ZDA2YWVmOWI5ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCkBAIC0xNzYsNyArMTc2LDcgQEAgdm9pZCBK
U0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShFeGVjU3RhdGUqLCBKU1ZhbHVlIHZhbHVlLCBSZWZQ
dHI8U3RvcmFnZT4mIHJlc3UKIHZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBNZXNzYWdlUG9ydEFycmF5JiByZXN1bHQpCiB7CiAg
ICAgQXJyYXlCdWZmZXJBcnJheSBhcnJheUJ1ZmZlcnM7Ci0gICAgZmlsbE1lc3NhZ2VQb3J0QXJy
YXkoZXhlYywgdmFsdWUsIHJlc3VsdCwgYXJyYXlCdWZmZXJzKTsKKyAgICBmaWxsTWVzc2FnZVBv
cnRBcnJheSgqZXhlYywgdmFsdWUsIHJlc3VsdCwgYXJyYXlCdWZmZXJzKTsKIH0KIAogI2lmIEVO
QUJMRShWSURFT19UUkFDSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRG9jdW1lbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1
bWVudEN1c3RvbS5jcHAKaW5kZXggNDQ4MmJjYmJkZTk0ZTlmMzkyMjVhN2ZhMWJhOGIwNTg1MGI2
MjI4MC4uZDEyOGIzNWIyNGExN2IzM2ZmNjg5MDM1NjBlMjM4MmNiMjk0YWVjYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKQEAgLTEwMCwy
MCArMTAwLDIwIEBAIEpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChFeGVjU3RhdGUqIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBEb2N1CiAgICAgcmV0dXJuIGRvY3VtZW50
ID8gY3JlYXRlTmV3RG9jdW1lbnRXcmFwcGVyKCpzdGF0ZSwgKmdsb2JhbE9iamVjdCwgKmRvY3Vt
ZW50KSA6IGpzTnVsbCgpOwogfQogCi1KU1ZhbHVlIEpTRG9jdW1lbnQ6OnByZXBlbmQoRXhlY1N0
YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNEb2N1bWVudDo6cHJlcGVuZChFeGVjU3RhdGUmIHN0YXRl
KQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGltcGwoKS5wcmVwZW5kKHRvTm9k
ZU9yU3RyaW5nVmVjdG9yKCpzdGF0ZSksIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oc3RhdGUs
IGVjKTsKKyAgICBpbXBsKCkucHJlcGVuZCh0b05vZGVPclN0cmluZ1ZlY3RvcihzdGF0ZSksIGVj
KTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0RvY3VtZW50OjphcHBlbmQoRXhlY1N0YXRlKiBzdGF0
ZSkKK0pTVmFsdWUgSlNEb2N1bWVudDo6YXBwZW5kKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wbCgpLmFwcGVuZCh0b05vZGVPclN0cmluZ1Zl
Y3Rvcigqc3RhdGUpLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CisgICAg
aW1wbCgpLmFwcGVuZCh0b05vZGVPclN0cmluZ1ZlY3RvcihzdGF0ZSksIGVjKTsKKyAgICBzZXRE
T01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRGcmFnbWVu
dEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50RnJhZ21l
bnRDdXN0b20uY3BwCmluZGV4IGM2YTJhM2E5Y2Q4ZDBjNDNlNTE4Y2U0YjllM2ExMDE5NmU0OWU0
YmMuLmMzNTJkNWRiOTdiYmNkZTBjNmNmYzk2MWRiYWVhNDgxY2I3MjE1YzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRGcmFnbWVudEN1c3RvbS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEZyYWdtZW50Q3VzdG9t
LmNwcApAQCAtMzQsMjAgKzM0LDIwIEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSBKU0RvY3VtZW50RnJhZ21lbnQ6OnByZXBlbmQoRXhlY1N0
YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNEb2N1bWVudEZyYWdtZW50OjpwcmVwZW5kKEV4ZWNTdGF0
ZSYgc3RhdGUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wbCgpLnByZXBl
bmQodG9Ob2RlT3JTdHJpbmdWZWN0b3IoKnN0YXRlKSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlv
bihzdGF0ZSwgZWMpOworICAgIGltcGwoKS5wcmVwZW5kKHRvTm9kZU9yU3RyaW5nVmVjdG9yKHN0
YXRlKSwgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKIAogICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTRG9jdW1lbnRGcmFnbWVudDo6YXBwZW5k
KEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTRG9jdW1lbnRGcmFnbWVudDo6YXBwZW5kKEV4
ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wbCgp
LmFwcGVuZCh0b05vZGVPclN0cmluZ1ZlY3Rvcigqc3RhdGUpLCBlYyk7Ci0gICAgc2V0RE9NRXhj
ZXB0aW9uKHN0YXRlLCBlYyk7CisgICAgaW1wbCgpLmFwcGVuZCh0b05vZGVPclN0cmluZ1ZlY3Rv
cihzdGF0ZSksIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRG9jdW1lbnRUeXBlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRG9jdW1lbnRUeXBlQ3VzdG9tLmNwcAppbmRleCAzN2FmMjZmZWRkMzY2ZDY2NjVhY2Qz
ODdiMDFhZDY2ZDI2NGE3OTc0Li44MzMzODcyMDFiYmY2MDJiNTU1MzYwOGJlYjU1MTA2MjljZWNi
OTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50VHlw
ZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudFR5
cGVDdXN0b20uY3BwCkBAIC0zMywyOSArMzMsMjkgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTRG9jdW1lbnRUeXBlOjpiZWZvcmUoRXhl
Y1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNEb2N1bWVudFR5cGU6OmJlZm9yZShFeGVjU3RhdGUm
IHN0YXRlKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGltcGwoKS5iZWZvcmUo
dG9Ob2RlT3JTdHJpbmdWZWN0b3IoKnN0YXRlKSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihz
dGF0ZSwgZWMpOworICAgIGltcGwoKS5iZWZvcmUodG9Ob2RlT3JTdHJpbmdWZWN0b3Ioc3RhdGUp
LCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogCiAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNEb2N1bWVudFR5cGU6OmFmdGVyKEV4ZWNTdGF0
ZSogc3RhdGUpCitKU1ZhbHVlIEpTRG9jdW1lbnRUeXBlOjphZnRlcihFeGVjU3RhdGUmIHN0YXRl
KQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGltcGwoKS5hZnRlcih0b05vZGVP
clN0cmluZ1ZlY3Rvcigqc3RhdGUpLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBl
Yyk7CisgICAgaW1wbCgpLmFmdGVyKHRvTm9kZU9yU3RyaW5nVmVjdG9yKHN0YXRlKSwgZWMpOwor
ICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKIAogICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCi1KU1ZhbHVlIEpTRG9jdW1lbnRUeXBlOjpyZXBsYWNlV2l0aChFeGVjU3RhdGUq
IHN0YXRlKQorSlNWYWx1ZSBKU0RvY3VtZW50VHlwZTo6cmVwbGFjZVdpdGgoRXhlY1N0YXRlJiBz
dGF0ZSkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCkucmVwbGFjZVdp
dGgodG9Ob2RlT3JTdHJpbmdWZWN0b3IoKnN0YXRlKSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlv
bihzdGF0ZSwgZWMpOworICAgIGltcGwoKS5yZXBsYWNlV2l0aCh0b05vZGVPclN0cmluZ1ZlY3Rv
cihzdGF0ZSksIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRWxlbWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0VsZW1lbnRDdXN0b20uY3BwCmluZGV4IDhlYjBlZGE5MmMzNWFhYWJjODExMzJmNmNlNDRhNzAy
MDE5YjA0YWEuLjcyZGQzOGVlY2NkODFlYzZmYjQ5YmRkYzMxM2I1MTQ3N2U0OTIxMWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRWxlbWVudEN1c3RvbS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFbGVtZW50Q3VzdG9tLmNwcApAQCAtNjcs
NDcgKzY3LDQ3IEBAIEpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChFeGVjU3RhdGUqLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbGVtZW50KiBlCiAgICAgcmV0dXJuIHdyYXBwZXI7
ICAgIAogfQogCi1KU1ZhbHVlIEpTRWxlbWVudDo6YmVmb3JlKEV4ZWNTdGF0ZSogc3RhdGUpCitK
U1ZhbHVlIEpTRWxlbWVudDo6YmVmb3JlKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wbCgpLmJlZm9yZSh0b05vZGVPclN0cmluZ1ZlY3Rvcigq
c3RhdGUpLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CisgICAgaW1wbCgp
LmJlZm9yZSh0b05vZGVPclN0cmluZ1ZlY3RvcihzdGF0ZSksIGVjKTsKKyAgICBzZXRET01FeGNl
cHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNW
YWx1ZSBKU0VsZW1lbnQ6OmFmdGVyKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTRWxlbWVu
dDo6YWZ0ZXIoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICBpbXBsKCkuYWZ0ZXIodG9Ob2RlT3JTdHJpbmdWZWN0b3IoKnN0YXRlKSwgZWMpOwotICAg
IHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOworICAgIGltcGwoKS5hZnRlcih0b05vZGVPclN0
cmluZ1ZlY3RvcihzdGF0ZSksIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7
CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0VsZW1lbnQ6OnJl
cGxhY2VXaXRoKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTRWxlbWVudDo6cmVwbGFjZVdp
dGgoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBp
bXBsKCkucmVwbGFjZVdpdGgodG9Ob2RlT3JTdHJpbmdWZWN0b3IoKnN0YXRlKSwgZWMpOwotICAg
IHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOworICAgIGltcGwoKS5yZXBsYWNlV2l0aCh0b05v
ZGVPclN0cmluZ1ZlY3RvcihzdGF0ZSksIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRl
LCBlYyk7CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0VsZW1l
bnQ6OnByZXBlbmQoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNFbGVtZW50OjpwcmVwZW5k
KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1w
bCgpLnByZXBlbmQodG9Ob2RlT3JTdHJpbmdWZWN0b3IoKnN0YXRlKSwgZWMpOwotICAgIHNldERP
TUV4Y2VwdGlvbihzdGF0ZSwgZWMpOworICAgIGltcGwoKS5wcmVwZW5kKHRvTm9kZU9yU3RyaW5n
VmVjdG9yKHN0YXRlKSwgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKIAog
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTRWxlbWVudDo6YXBwZW5k
KEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTRWxlbWVudDo6YXBwZW5kKEV4ZWNTdGF0ZSYg
c3RhdGUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wbCgpLmFwcGVuZCh0
b05vZGVPclN0cmluZ1ZlY3Rvcigqc3RhdGUpLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKHN0
YXRlLCBlYyk7CisgICAgaW1wbCgpLmFwcGVuZCh0b05vZGVPclN0cmluZ1ZlY3RvcihzdGF0ZSks
IGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RXZlbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3Rv
bS5jcHAKaW5kZXggYWY3YzNiMDExMDhmZWIzNWUwMDZjYWE1OWVlNTI5ODU1OTE4YTc2My4uNTFl
OWYwZDkzMGY2YzlmNjk4ZmQyMGFjYTliODAxYTY4N2FmODdlMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAKQEAgLTQ0LDkgKzQ0LDkgQEAgdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTRXZlbnQ6
OmNsaXBib2FyZERhdGEoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU0V2ZW50Ojpj
bGlwYm9hcmREYXRhKEV4ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGltcGwo
KS5pc0NsaXBib2FyZEV2ZW50KCkgPyB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbXBsKCku
Y2xpcGJvYXJkRGF0YSgpKSA6IGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIGltcGwoKS5pc0Ns
aXBib2FyZEV2ZW50KCkgPyB0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIGltcGwoKS5jbGlw
Ym9hcmREYXRhKCkpIDoganNVbmRlZmluZWQoKTsKIH0KIAogI2RlZmluZSBUUllfVE9fV1JBUF9X
SVRIX0lOVEVSRkFDRShpbnRlcmZhY2VOYW1lKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcAppbmRleCBiMWU5Yzc1ZTk4ZDhlZjA3YTQz
NGUwYzgwMThhOWZkZWY2OTYxNDNjLi41MWZiZjRmYTE4MmY0YzNiYzQ2YmE1OGZiZGUwN2M1ZWY1
OGYxMDY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVSZWFk
ZXJDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVJlYWRl
ckN1c3RvbS5jcHAKQEAgLTQxLDEyICs0MSwxMiBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNGaWxlUmVhZGVyOjpyZXN1bHQoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU0ZpbGVSZWFkZXI6OnJlc3VsdChFeGVjU3RhdGUm
IHN0YXRlKSBjb25zdAogewogICAgIEZpbGVSZWFkZXImIGltcCA9IGltcGwoKTsKICAgICBpZiAo
aW1wLnJlYWRUeXBlKCkgPT0gRmlsZVJlYWRlckxvYWRlcjo6UmVhZEFzQXJyYXlCdWZmZXIpCi0g
ICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXAu
YXJyYXlCdWZmZXJSZXN1bHQoKSkpOwotICAgIHJldHVybiBqc093bmVkU3RyaW5nT3JOdWxsKGV4
ZWMsIGltcC5zdHJpbmdSZXN1bHQoKSk7CisgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgZ2xv
YmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcC5hcnJheUJ1ZmZlclJlc3VsdCgpKSk7CisgICAg
cmV0dXJuIGpzT3duZWRTdHJpbmdPck51bGwoJnN0YXRlLCBpbXAuc3RyaW5nUmVzdWx0KCkpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3BwCmluZGV4IDEyNzAyNDc3NGMxOWEwMzNlOGRl
ZDA4NzAyOGFkZThhZTA2ZTNkYmMuLjUyN2QyMTNkNzIzNTMxM2VjYWZiNmVlNzIzN2I3NGFlYTY5
MDU1YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRp
b25DdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRp
b25DdXN0b20uY3BwCkBAIC05NiwyMSArOTYsMjEgQEAgc3RhdGljIFJlZlB0cjxQb3NpdGlvbk9w
dGlvbnM+IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmEK
ICAgICByZXR1cm4gb3B0aW9uczsKIH0KIAotSlNWYWx1ZSBKU0dlb2xvY2F0aW9uOjpnZXRDdXJy
ZW50UG9zaXRpb24oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0dlb2xvY2F0aW9uOjpnZXRD
dXJyZW50UG9zaXRpb24oRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICAvLyBBcmd1bWVudHM6IFBv
c2l0aW9uQ2FsbGJhY2ssIChvcHRpb25hbClQb3NpdGlvbkVycm9yQ2FsbGJhY2ssIChvcHRpb25h
bClQb3NpdGlvbk9wdGlvbnMKIAotICAgIFJlZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBwb3NpdGlv
bkNhbGxiYWNrID0gY3JlYXRlRnVuY3Rpb25Pbmx5Q2FsbGJhY2s8SlNQb3NpdGlvbkNhbGxiYWNr
PihleGVjLCBnbG9iYWxPYmplY3QoKSwgZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBSZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4gcG9zaXRpb25D
YWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTUG9zaXRpb25DYWxsYmFjaz4o
JnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgc3RhdGUuYXJndW1lbnQoMCkpOworICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgQVNT
RVJUKHBvc2l0aW9uQ2FsbGJhY2spOwogCi0gICAgUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFj
az4gcG9zaXRpb25FcnJvckNhbGxiYWNrID0gY3JlYXRlRnVuY3Rpb25Pbmx5Q2FsbGJhY2s8SlNQ
b3NpdGlvbkVycm9yQ2FsbGJhY2s+KGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBleGVjLT5hcmd1bWVu
dCgxKSwgQ2FsbGJhY2tBbGxvd1VuZGVmaW5lZCB8IENhbGxiYWNrQWxsb3dOdWxsKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFj
az4gcG9zaXRpb25FcnJvckNhbGxiYWNrID0gY3JlYXRlRnVuY3Rpb25Pbmx5Q2FsbGJhY2s8SlNQ
b3NpdGlvbkVycm9yQ2FsbGJhY2s+KCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHN0YXRlLmFyZ3Vt
ZW50KDEpLCBDYWxsYmFja0FsbG93VW5kZWZpbmVkIHwgQ2FsbGJhY2tBbGxvd051bGwpOworICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKLSAgICBSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBwb3NpdGlvbk9wdGlvbnMgPSBjcmVhdGVQ
b3NpdGlvbk9wdGlvbnMoZXhlYywgZXhlYy0+YXJndW1lbnQoMikpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBwb3NpdGlvbk9wdGlv
bnMgPSBjcmVhdGVQb3NpdGlvbk9wdGlvbnMoJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgyKSk7Cisg
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICBBU1NFUlQocG9zaXRpb25PcHRpb25zKTsKIApAQCAtMTE4LDIxICsxMTgsMjEgQEAg
SlNWYWx1ZSBKU0dlb2xvY2F0aW9uOjpnZXRDdXJyZW50UG9zaXRpb24oRXhlY1N0YXRlKiBleGVj
KQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTR2VvbG9jYXRpb246
OndhdGNoUG9zaXRpb24oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0dlb2xvY2F0aW9uOjp3
YXRjaFBvc2l0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgLy8gQXJndW1lbnRzOiBQb3Np
dGlvbkNhbGxiYWNrLCAob3B0aW9uYWwpUG9zaXRpb25FcnJvckNhbGxiYWNrLCAob3B0aW9uYWwp
UG9zaXRpb25PcHRpb25zCiAKLSAgICBSZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4gcG9zaXRpb25D
YWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTUG9zaXRpb25DYWxsYmFjaz4o
ZXhlYywgZ2xvYmFsT2JqZWN0KCksIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+IHBvc2l0aW9uQ2Fs
bGJhY2sgPSBjcmVhdGVGdW5jdGlvbk9ubHlDYWxsYmFjazxKU1Bvc2l0aW9uQ2FsbGJhY2s+KCZz
dGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHN0YXRlLmFyZ3VtZW50KDApKTsKKyAgICBpZiAoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIEFTU0VS
VChwb3NpdGlvbkNhbGxiYWNrKTsKIAotICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+
IHBvc2l0aW9uRXJyb3JDYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTUG9z
aXRpb25FcnJvckNhbGxiYWNrPihleGVjLCBnbG9iYWxPYmplY3QoKSwgZXhlYy0+YXJndW1lbnQo
MSksIENhbGxiYWNrQWxsb3dVbmRlZmluZWQgfCBDYWxsYmFja0FsbG93TnVsbCk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+
IHBvc2l0aW9uRXJyb3JDYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTUG9z
aXRpb25FcnJvckNhbGxiYWNrPigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBzdGF0ZS5hcmd1bWVu
dCgxKSwgQ2FsbGJhY2tBbGxvd1VuZGVmaW5lZCB8IENhbGxiYWNrQWxsb3dOdWxsKTsKKyAgICBp
ZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
Ci0gICAgUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gcG9zaXRpb25PcHRpb25zID0gY3JlYXRlUG9z
aXRpb25PcHRpb25zKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gcG9zaXRpb25PcHRpb25z
ID0gY3JlYXRlUG9zaXRpb25PcHRpb25zKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMikpOworICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgQVNTRVJUKHBvc2l0aW9uT3B0aW9ucyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbkN1c3RvbS5jcHAKaW5kZXggNzVj
ZmU1ZjY2Y2JkMGIzMTQxNTg2MzMzNDEyMjQ1NzAyNjJiZDM3My4uMjU5MmY0NjcyZThhMjE3MGVi
ZmZlYTIyZDgzMzU1ODEzMzlmMjFmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbkN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbkN1c3RvbS5jcHAKQEAgLTM2LDE4ICszNiwx
OCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRp
YyBKU1ZhbHVlIG5hbWVkSXRlbXMoRXhlY1N0YXRlKiBleGVjLCBKU0hUTUxBbGxDb2xsZWN0aW9u
KiBjb2xsZWN0aW9uLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorc3RhdGljIEpTVmFsdWUg
bmFtZWRJdGVtcyhFeGVjU3RhdGUmIHN0YXRlLCBKU0hUTUxBbGxDb2xsZWN0aW9uKiBjb2xsZWN0
aW9uLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIFZlY3RvcjxSZWY8RWxlbWVu
dD4+IG5hbWVkSXRlbXMgPSBjb2xsZWN0aW9uLT5pbXBsKCkubmFtZWRJdGVtcyhwcm9wZXJ0eU5h
bWVUb0F0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKIAogICAgIGlmIChuYW1lZEl0ZW1zLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaWYgKG5hbWVkSXRl
bXMuc2l6ZSgpID09IDEpCi0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGNvbGxlY3Rpb24tPmds
b2JhbE9iamVjdCgpLCBuYW1lZEl0ZW1zWzBdLnB0cigpKTsKKyAgICAgICAgcmV0dXJuIHRvSlMo
JnN0YXRlLCBjb2xsZWN0aW9uLT5nbG9iYWxPYmplY3QoKSwgbmFtZWRJdGVtc1swXS5wdHIoKSk7
CiAKICAgICAvLyBGSVhNRTogSFRNTDUgc3BlY2lmaWNhdGlvbiBzYXlzIHRoaXMgc2hvdWxkIGJl
IGEgSFRNTENvbGxlY3Rpb24uCiAgICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dl
Yi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvY29tbW9uLWRvbS1pbnRlcmZhY2VzLmh0bWwj
aHRtbGFsbGNvbGxlY3Rpb24KLSAgICByZXR1cm4gdG9KUyhleGVjLCBjb2xsZWN0aW9uLT5nbG9i
YWxPYmplY3QoKSwgU3RhdGljRWxlbWVudExpc3Q6OmFkb3B0KG5hbWVkSXRlbXMpLmdldCgpKTsK
KyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGNvbGxlY3Rpb24tPmdsb2JhbE9iamVjdCgpLCBTdGF0
aWNFbGVtZW50TGlzdDo6YWRvcHQobmFtZWRJdGVtcykuZ2V0KCkpOwogfQogCiAvLyBIVE1MQWxs
Q29sbGVjdGlvbnMgYXJlIHN0cmFuZ2Ugb2JqZWN0cywgdGhleSBzdXBwb3J0IGJvdGggZ2V0IGFu
ZCBjYWxsLgpAQCAtNjksNyArNjksNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjYWxsSFRNTEFsbENvbGxlY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTKGV4ZWMsIGpzQ29sbGVjdGlvbi0+Z2xvYmFsT2Jq
ZWN0KCksIGNvbGxlY3Rpb24uaXRlbShpbmRleC52YWx1ZSgpKSkpOwogCiAgICAgICAgIC8vIFN1
cHBvcnQgZm9yIGRvY3VtZW50LmltYWdlcygnPG5hbWU+JykgZXRjLgotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKG5hbWVkSXRlbXMoZXhlYywganNDb2xsZWN0aW9uLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKGV4ZWMsIHN0cmluZykpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShuYW1lZEl0ZW1zKCpleGVjLCBqc0NvbGxlY3Rpb24sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgc3RyaW5nKSkpOwogICAgIH0KIAogICAgIC8vIFRoZSBzZWNvbmQgYXJnLCBpZiBz
ZXQsIGlzIHRoZSBpbmRleCBvZiB0aGUgaXRlbSB3ZSB3YW50CkBAIC04OCw5ICs4OCw5IEBAIENh
bGxUeXBlIEpTSFRNTEFsbENvbGxlY3Rpb246OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRh
JiBjYWxsRGF0YSkKICAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OwogfQogCi1ib29sIEpTSFRNTEFs
bENvbGxlY3Rpb246Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlJiB2YWx1ZSkKK2Jvb2wgSlNIVE1MQWxsQ29sbGVjdGlvbjo6bmFt
ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlJiB2YWx1ZSkKIHsKLSAgICBKU1ZhbHVlIGl0ZW1zID0gbmFtZWRJdGVtcyhleGVjLCB0aGlz
LCBwcm9wZXJ0eU5hbWUpOworICAgIEpTVmFsdWUgaXRlbXMgPSBuYW1lZEl0ZW1zKCpzdGF0ZSwg
dGhpcywgcHJvcGVydHlOYW1lKTsKICAgICBpZiAoaXRlbXMuaXNVbmRlZmluZWQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCkBAIC05OCwxNiArOTgsMTYgQEAgYm9vbCBKU0hUTUxBbGxDb2xs
ZWN0aW9uOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotSlNWYWx1ZSBKU0hUTUxBbGxDb2xsZWN0aW9u
OjppdGVtKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNIVE1MQWxsQ29sbGVjdGlvbjo6aXRl
bShFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXgg
PSBwYXJzZUluZGV4KCpleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YykuaW1wbCgpKSkKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGlt
cGwoKS5pdGVtKGluZGV4LnZhbHVlKCkpKTsKLSAgICByZXR1cm4gbmFtZWRJdGVtcyhleGVjLCB0
aGlzLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOworICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5k
ZXggPSBwYXJzZUluZGV4KCpzdGF0ZS5hcmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUpLT52YWx1
ZSgmc3RhdGUpLmltcGwoKSkpCisgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0KCksIGltcGwoKS5pdGVtKGluZGV4LnZhbHVlKCkpKTsKKyAgICByZXR1cm4gbmFtZWRJdGVt
cyhzdGF0ZSwgdGhpcywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsIHN0YXRlLmFyZ3Vt
ZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSkpKTsKIH0KIAotSlNWYWx1ZSBK
U0hUTUxBbGxDb2xsZWN0aW9uOjpuYW1lZEl0ZW0oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBK
U0hUTUxBbGxDb2xsZWN0aW9uOjpuYW1lZEl0ZW0oRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBK
U1ZhbHVlIHZhbHVlID0gbmFtZWRJdGVtcyhleGVjLCB0aGlzLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkp
OworICAgIEpTVmFsdWUgdmFsdWUgPSBuYW1lZEl0ZW1zKHN0YXRlLCB0aGlzLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+
dmFsdWUoJnN0YXRlKSkpOwogICAgIHJldHVybiB2YWx1ZS5pc1VuZGVmaW5lZCgpID8ganNOdWxs
KCkgOiB2YWx1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAppbmRleCAyZmNjY2ZmYmY1ZWI0MDNkZDNl
OGYxODVjMDg4ZTQ0MzNmNmMyNTcxLi5lNmVjOGRjM2NlYWY0ZmFmMTMzZTQ4ZTk0NTliOThhNjI4
OGRjNjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52
YXNFbGVtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcApAQCAtNDQsMTQgKzQ0LDE0IEBAIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBFTkFCTEUoV0VCR0wpCi1zdGF0
aWMgdm9pZCBnZXQzRENvbnRleHRBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSogZXhlYywgUmVmUHRyPENh
bnZhc0NvbnRleHRBdHRyaWJ1dGVzPiYgYXR0cnMpCitzdGF0aWMgdm9pZCBnZXQzRENvbnRleHRB
dHRyaWJ1dGVzKEV4ZWNTdGF0ZSYgc3RhdGUsIFJlZlB0cjxDYW52YXNDb250ZXh0QXR0cmlidXRl
cz4mIGF0dHJzKQogewotICAgIEpTVmFsdWUgaW5pdGlhbGl6ZXJWYWx1ZSA9IGV4ZWMtPmFyZ3Vt
ZW50KDEpOworICAgIEpTVmFsdWUgaW5pdGlhbGl6ZXJWYWx1ZSA9IHN0YXRlLmFyZ3VtZW50KDEp
OwogICAgIGlmIChpbml0aWFsaXplclZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAg
IHJldHVybjsKICAgICAKLSAgICBKU09iamVjdCogaW5pdGlhbGl6ZXJPYmplY3QgPSBpbml0aWFs
aXplclZhbHVlLnRvT2JqZWN0KGV4ZWMpOwotICAgIEpTRGljdGlvbmFyeSBkaWN0aW9uYXJ5KGV4
ZWMsIGluaXRpYWxpemVyT2JqZWN0KTsKKyAgICBKU09iamVjdCogaW5pdGlhbGl6ZXJPYmplY3Qg
PSBpbml0aWFsaXplclZhbHVlLnRvT2JqZWN0KCZzdGF0ZSk7CisgICAgSlNEaWN0aW9uYXJ5IGRp
Y3Rpb25hcnkoJnN0YXRlLCBpbml0aWFsaXplck9iamVjdCk7CiAgICAgCiAgICAgR3JhcGhpY3ND
b250ZXh0M0Q6OkF0dHJpYnV0ZXMgZ3JhcGhpY3NBdHRyczsKICAgICAKQEAgLTY2LDE2ICs2Niwx
NiBAQCBzdGF0aWMgdm9pZCBnZXQzRENvbnRleHRBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSogZXhlYywg
UmVmUHRyPENhbnZhc0NvbnRleHRBdHRyaWJ1dAogfQogI2VuZGlmCiAKLUpTVmFsdWUgSlNIVE1M
Q2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTSFRN
TENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBIVE1M
Q2FudmFzRWxlbWVudCYgY2FudmFzID0gaW1wbCgpOwotICAgIGNvbnN0IFN0cmluZyYgY29udGV4
dElkID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAg
IGNvbnN0IFN0cmluZyYgY29udGV4dElkID0gc3RhdGUuYXJndW1lbnQoMCkudG9TdHJpbmcoJnN0
YXRlKS0+dmFsdWUoJnN0YXRlKTsKICAgICAKICAgICBSZWZQdHI8Q2FudmFzQ29udGV4dEF0dHJp
YnV0ZXM+IGF0dHJzOwogI2lmIEVOQUJMRShXRUJHTCkKICAgICBpZiAoSFRNTENhbnZhc0VsZW1l
bnQ6OmlzM2RUeXBlKGNvbnRleHRJZCkpIHsKLSAgICAgICAgZ2V0M0RDb250ZXh0QXR0cmlidXRl
cyhleGVjLCBhdHRycyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgZ2V0M0RDb250ZXh0QXR0cmlidXRlcyhzdGF0ZSwgYXR0cnMpOworICAgICAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICB9CiAjZW5kaWYKQEAgLTgzLDIzICs4MywyMyBAQCBKU1ZhbHVlIEpTSFRNTENhbnZhc0VsZW1l
bnQ6OmdldENvbnRleHQoRXhlY1N0YXRlKiBleGVjKQogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQqIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dChjb250ZXh0SWQsIGF0dHJzLmdldCgpKTsK
ICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoY29udGV4dCkpOworICAgIHJl
dHVybiB0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGNvbnRleHQpKTsK
IH0KIAotSlNWYWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50Ojpwcm9iYWJseVN1cHBvcnRzQ29udGV4
dChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTSFRNTENhbnZhc0VsZW1lbnQ6OnByb2JhYmx5
U3VwcG9ydHNDb250ZXh0KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgSFRNTENhbnZhc0VsZW1l
bnQmIGNhbnZhcyA9IGltcGwoKTsKLSAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKKyAg
ICBpZiAoIXN0YXRlLmFyZ3VtZW50Q291bnQoKSkKICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihm
YWxzZSk7Ci0gICAgY29uc3QgU3RyaW5nJiBjb250ZXh0SWQgPSBleGVjLT51bmNoZWNrZWRBcmd1
bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIGNvbnN0IFN0cmluZyYgY29udGV4dElkID0gc3RhdGUudW5jaGVja2Vk
QXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKKyAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIAog
ICAgIFJlZlB0cjxDYW52YXNDb250ZXh0QXR0cmlidXRlcz4gYXR0cnM7CiAjaWYgRU5BQkxFKFdF
QkdMKQogICAgIGlmIChIVE1MQ2FudmFzRWxlbWVudDo6aXMzZFR5cGUoY29udGV4dElkKSkgewot
ICAgICAgICBnZXQzRENvbnRleHRBdHRyaWJ1dGVzKGV4ZWMsIGF0dHJzKTsKLSAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBnZXQzRENvbnRleHRBdHRyaWJ1dGVzKHN0
YXRlLCBhdHRycyk7CisgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KICNlbmRpZgpAQCAtMTA3LDI0ICsxMDcs
MjQgQEAgSlNWYWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50Ojpwcm9iYWJseVN1cHBvcnRzQ29udGV4
dChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIGpzQm9vbGVhbihjYW52YXMucHJvYmFibHlT
dXBwb3J0c0NvbnRleHQoY29udGV4dElkLCBhdHRycy5nZXQoKSkpOwogfQogCi1KU1ZhbHVlIEpT
SFRNTENhbnZhc0VsZW1lbnQ6OnRvRGF0YVVSTChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
SFRNTENhbnZhc0VsZW1lbnQ6OnRvRGF0YVVSTChFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIEhU
TUxDYW52YXNFbGVtZW50JiBjYW52YXMgPSBpbXBsKCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CiAKLSAgICBjb25zdCBTdHJpbmcmIHR5cGUgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5l
ZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBjb25zdCBTdHJpbmcm
IHR5cGUgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKCZzdGF0ZSwgc3Rh
dGUuYXJndW1lbnQoMCkpOwogICAgIGRvdWJsZSBxdWFsaXR5OwogICAgIGRvdWJsZSogcXVhbGl0
eVB0ciA9IDA7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDEpIHsKLSAgICAgICAg
SlNWYWx1ZSB2ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSk7CisgICAgaWYgKHN0YXRlLmFy
Z3VtZW50Q291bnQoKSA+IDEpIHsKKyAgICAgICAgSlNWYWx1ZSB2ID0gc3RhdGUudW5jaGVja2Vk
QXJndW1lbnQoMSk7CiAgICAgICAgIGlmICh2LmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIHF1
YWxpdHkgPSB2LnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgcXVhbGl0eSA9IHYudG9OdW1i
ZXIoJnN0YXRlKTsKICAgICAgICAgICAgIHF1YWxpdHlQdHIgPSAmcXVhbGl0eTsKICAgICAgICAg
fQogICAgIH0KIAotICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNDOjpqc1N0cmluZyhleGVjLCBjYW52
YXMudG9EYXRhVVJMKHR5cGUsIHF1YWxpdHlQdHIsIGVjKSk7Ci0gICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIGVjKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQzo6anNTdHJpbmcoJnN0YXRlLCBj
YW52YXMudG9EYXRhVVJMKHR5cGUsIHF1YWxpdHlQdHIsIGVjKSk7CisgICAgc2V0RE9NRXhjZXB0
aW9uKCZzdGF0ZSwgZWMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAppbmRleCAwNTJh
NTQ2NTdlMGQ2N2E1ODRiNTc2OGQ3YTliNjM5YjE5OWFhOTkwLi40MzE3NDI4NTQ2OGFlYWY3MTg3
MWUwOTY0ZjQyNjExMmVjNWE2MDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCkBAIC0xMDgsMjYgKzEwOCwyNiBAQCBib29s
IEpTSFRNTERvY3VtZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSlNWYQogCiAvLyBDdXN0b20gYXR0cmlidXRlcwogCi1KU1ZhbHVlIEpT
SFRNTERvY3VtZW50OjphbGwoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU0hUTUxE
b2N1bWVudDo6YWxsKEV4ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0CiB7CiAgICAgLy8gSWYgImFsbCIg
aGFzIGJlZW4gb3ZlcndyaXR0ZW4sIHJldHVybiB0aGUgb3ZlcndyaXR0ZW4gdmFsdWUKLSAgICBK
U1ZhbHVlIHYgPSBnZXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhl
eGVjLCAiYWxsIikpOworICAgIEpTVmFsdWUgdiA9IGdldERpcmVjdChzdGF0ZS52bSgpLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImFsbCIpKTsKICAgICBpZiAodikKICAgICAgICAg
cmV0dXJuIHY7CiAKLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgp
LmFsbCgpKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBpbXBsKCku
YWxsKCkpOwogfQogCi12b2lkIEpTSFRNTERvY3VtZW50OjpzZXRBbGwoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU0hUTUxEb2N1bWVudDo6c2V0QWxsKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgLy8gQWRkICJhbGwiIHRvIHRoZSBwcm9wZXJ0
eSBtYXAuCi0gICAgcHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmco
ZXhlYywgImFsbCIpLCB2YWx1ZSk7CisgICAgcHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYWxsIiksIHZhbHVlKTsKIH0KIAotc3RhdGljIERvY3Vt
ZW50KiBmaW5kQ2FsbGluZ0RvY3VtZW50KEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBEb2N1bWVu
dCogZmluZENhbGxpbmdEb2N1bWVudChFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIENhbGxlckZ1
bmN0b3IgZnVuY3RvcjsKLSAgICBleGVjLT5pdGVyYXRlKGZ1bmN0b3IpOworICAgIHN0YXRlLml0
ZXJhdGUoZnVuY3Rvcik7CiAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGZ1bmN0b3IuY2Fs
bGVyRnJhbWUoKTsKICAgICBpZiAoIWNhbGxlckZyYW1lKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKQEAgLTEzNywxOSArMTM3LDE5IEBAIHN0YXRpYyBEb2N1bWVudCogZmluZENhbGxpbmdEb2N1
bWVudChFeGVjU3RhdGUqIGV4ZWMpCiAKIC8vIEN1c3RvbSBmdW5jdGlvbnMKIAotSlNWYWx1ZSBK
U0hUTUxEb2N1bWVudDo6b3BlbihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTSFRNTERvY3Vt
ZW50OjpvcGVuKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgLy8gRm9yIGNvbXBhdGliaWxpdHkg
d2l0aCBvdGhlciBicm93c2VycywgcGFzcyBvcGVuIGNhbGxzIHdpdGggbW9yZSB0aGFuIDIgcGFy
YW1ldGVycyB0byB0aGUgd2luZG93LgotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAy
KSB7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+IDIpIHsKICAgICAgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IGltcGwoKS5mcmFtZSgpKSB7Ci0gICAgICAgICAgICBKU0RPTVdpbmRvd1No
ZWxsKiB3cmFwcGVyID0gdG9KU0RPTVdpbmRvd1NoZWxsKGZyYW1lLCBjdXJyZW50V29ybGQoZXhl
YykpOworICAgICAgICAgICAgSlNET01XaW5kb3dTaGVsbCogd3JhcHBlciA9IHRvSlNET01XaW5k
b3dTaGVsbChmcmFtZSwgY3VycmVudFdvcmxkKCZzdGF0ZSkpOwogICAgICAgICAgICAgaWYgKHdy
YXBwZXIpIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gd3JhcHBlci0+Z2V0
KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgIm9wZW4iKSk7CisgICAgICAgICAg
ICAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IHdyYXBwZXItPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLCAib3BlbiIpKTsKICAgICAgICAgICAgICAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKICAgICAgICAgICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IDo6Z2V0Q2FsbERh
dGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICAgICAgICAgICAgICBpZiAoY2FsbFR5cGUgPT0g
Q2FsbFR5cGVOb25lKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3Io
ZXhlYyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEpTQzo6Y2FsbChleGVjLCBmdW5jdGlvbiwg
Y2FsbFR5cGUsIGNhbGxEYXRhLCB3cmFwcGVyLCBBcmdMaXN0KGV4ZWMpKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIEpTQzo6Y2FsbCgmc3RhdGUsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHdy
YXBwZXIsIEFyZ0xpc3QoJnN0YXRlKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0xNTcsNyArMTU3LDcgQEAgSlNWYWx1ZSBKU0hU
TUxEb2N1bWVudDo6b3BlbihFeGVjU3RhdGUqIGV4ZWMpCiAKICAgICAvLyBkb2N1bWVudC5vcGVu
IGNsb2JiZXJzIHRoZSBzZWN1cml0eSBjb250ZXh0IG9mIHRoZSBkb2N1bWVudCBhbmQKICAgICAv
LyBhbGlhc2VzIGl0IHdpdGggdGhlIGFjdGl2ZSBzZWN1cml0eSBjb250ZXh0LgotICAgIERvY3Vt
ZW50KiBhY3RpdmVEb2N1bWVudCA9IGFzSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpKS0+aW1wbCgpLmRvY3VtZW50KCk7CisgICAgRG9jdW1lbnQqIGFjdGl2ZURvY3VtZW50
ID0gYXNKU0RPTVdpbmRvdyhzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCkuZG9j
dW1lbnQoKTsKIAogICAgIC8vIEluIHRoZSBjYXNlIG9mIHR3byBwYXJhbWV0ZXJzIG9yIGZld2Vy
LCBkbyBhIG5vcm1hbCBkb2N1bWVudCBvcGVuLgogICAgIGltcGwoKS5vcGVuKGFjdGl2ZURvY3Vt
ZW50KTsKQEAgLTE2NiwyMSArMTY2LDIxIEBAIEpTVmFsdWUgSlNIVE1MRG9jdW1lbnQ6Om9wZW4o
RXhlY1N0YXRlKiBleGVjKQogCiBlbnVtIE5ld2xpbmVSZXF1aXJlbWVudCB7IERvTm90QWRkTmV3
bGluZSwgRG9BZGROZXdsaW5lIH07CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkb2N1bWVudFdyaXRl
KEV4ZWNTdGF0ZSogZXhlYywgSlNIVE1MRG9jdW1lbnQqIHRoaXNEb2N1bWVudCwgTmV3bGluZVJl
cXVpcmVtZW50IGFkZE5ld2xpbmUpCitzdGF0aWMgaW5saW5lIHZvaWQgZG9jdW1lbnRXcml0ZShF
eGVjU3RhdGUmIHN0YXRlLCBKU0hUTUxEb2N1bWVudCogdGhpc0RvY3VtZW50LCBOZXdsaW5lUmVx
dWlyZW1lbnQgYWRkTmV3bGluZSkKIHsKICAgICBIVE1MRG9jdW1lbnQqIGRvY3VtZW50ID0gJnRo
aXNEb2N1bWVudC0+aW1wbCgpOwogICAgIC8vIERPTSBvbmx5IHNwZWNpZmllcyBzaW5nbGUgc3Ry
aW5nIGFyZ3VtZW50LCBidXQgYnJvd3NlcnMgYWxsb3cgbXVsdGlwbGUgb3Igbm8gYXJndW1lbnRz
LgogCi0gICAgc2l6ZV90IHNpemUgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CisgICAgc2l6ZV90
IHNpemUgPSBzdGF0ZS5hcmd1bWVudENvdW50KCk7CiAKLSAgICBTdHJpbmcgZmlyc3RTdHJpbmcg
PSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgU3Ry
aW5nIGZpcnN0U3RyaW5nID0gc3RhdGUuYXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dmFs
dWUoJnN0YXRlKTsKICAgICBTZWdtZW50ZWRTdHJpbmcgc2VnbWVudGVkU3RyaW5nID0gZmlyc3RT
dHJpbmc7CiAgICAgaWYgKHNpemUgIT0gMSkgewogICAgICAgICBpZiAoIXNpemUpCiAgICAgICAg
ICAgICBzZWdtZW50ZWRTdHJpbmcuY2xlYXIoKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgICAgIFN0
cmluZyBzdWJzZXF1ZW50U3RyaW5nID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoaSkudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgICAgICAgICAgICAgIFN0cmluZyBzdWJzZXF1ZW50
U3RyaW5nID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkudG9TdHJpbmcoJnN0YXRlKS0+dmFs
dWUoJnN0YXRlKTsKICAgICAgICAgICAgICAgICBzZWdtZW50ZWRTdHJpbmcuYXBwZW5kKFNlZ21l
bnRlZFN0cmluZyhzdWJzZXF1ZW50U3RyaW5nKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
QEAgLTE4OCwxOSArMTg4LDE5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkb2N1bWVudFdyaXRlKEV4
ZWNTdGF0ZSogZXhlYywgSlNIVE1MRG9jdW1lbnQqIHRoaXNEb2N1bWVudCwKICAgICBpZiAoYWRk
TmV3bGluZSkKICAgICAgICAgc2VnbWVudGVkU3RyaW5nLmFwcGVuZChTZWdtZW50ZWRTdHJpbmco
U3RyaW5nKCZuZXdsaW5lQ2hhcmFjdGVyLCAxKSkpOwogCi0gICAgRG9jdW1lbnQqIGFjdGl2ZURv
Y3VtZW50ID0gZmluZENhbGxpbmdEb2N1bWVudChleGVjKTsKKyAgICBEb2N1bWVudCogYWN0aXZl
RG9jdW1lbnQgPSBmaW5kQ2FsbGluZ0RvY3VtZW50KHN0YXRlKTsKICAgICBkb2N1bWVudC0+d3Jp
dGUoc2VnbWVudGVkU3RyaW5nLCBhY3RpdmVEb2N1bWVudCk7CiB9CiAKLUpTVmFsdWUgSlNIVE1M
RG9jdW1lbnQ6OndyaXRlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNIVE1MRG9jdW1lbnQ6
OndyaXRlKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgZG9jdW1lbnRXcml0ZShleGVjLCB0aGlz
LCBEb05vdEFkZE5ld2xpbmUpOworICAgIGRvY3VtZW50V3JpdGUoc3RhdGUsIHRoaXMsIERvTm90
QWRkTmV3bGluZSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNI
VE1MRG9jdW1lbnQ6OndyaXRlbG4oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0hUTUxEb2N1
bWVudDo6d3JpdGVsbihFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGRvY3VtZW50V3JpdGUoZXhl
YywgdGhpcywgRG9BZGROZXdsaW5lKTsKKyAgICBkb2N1bWVudFdyaXRlKHN0YXRlLCB0aGlzLCBE
b0FkZE5ld2xpbmUpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9u
Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZvcm1Db250cm9s
c0NvbGxlY3Rpb25DdXN0b20uY3BwCmluZGV4IGVjN2Y3ZGJiNmI4NDFlMWMyZTQwZTBmOTI0MTYy
N2RjOTAzZWFkZGIuLjhiNTVmYTdkZTM2ZTVjNjA3ODg5YzliMWU5YTUxYzNlYzhhNjhiNzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZvcm1Db250cm9sc0Nv
bGxlY3Rpb25DdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TEZvcm1Db250cm9sc0NvbGxlY3Rpb25DdXN0b20uY3BwCkBAIC0zMCw3ICszMCw3IEBAIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIEpTVmFsdWUg
bmFtZWRJdGVtcyhFeGVjU3RhdGUqIGV4ZWMsIEpTSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24q
IGNvbGxlY3Rpb24sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitzdGF0aWMgSlNWYWx1ZSBu
YW1lZEl0ZW1zKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24q
IGNvbGxlY3Rpb24sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lID0gcHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcocHJvcGVydHlOYW1l
KTsKICAgICBWZWN0b3I8UmVmPEVsZW1lbnQ+PiBuYW1lZEl0ZW1zID0gY29sbGVjdGlvbi0+aW1w
bCgpLm5hbWVkSXRlbXMobmFtZSk7CkBAIC0zOCwxNSArMzgsMTUgQEAgc3RhdGljIEpTVmFsdWUg
bmFtZWRJdGVtcyhFeGVjU3RhdGUqIGV4ZWMsIEpTSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24q
IGNvbGxlY3QKICAgICBpZiAobmFtZWRJdGVtcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIGlmIChuYW1lZEl0ZW1zLnNpemUoKSA9PSAxKQotICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBjb2xsZWN0aW9uLT5nbG9iYWxPYmplY3QoKSwgbmFtZWRJdGVtc1sw
XS5wdHIoKSk7CisgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgY29sbGVjdGlvbi0+Z2xvYmFs
T2JqZWN0KCksIG5hbWVkSXRlbXNbMF0ucHRyKCkpOwogCiAgICAgQVNTRVJUKGNvbGxlY3Rpb24t
PmltcGwoKS50eXBlKCkgPT0gRm9ybUNvbnRyb2xzKTsKLSAgICByZXR1cm4gdG9KUyhleGVjLCBj
b2xsZWN0aW9uLT5nbG9iYWxPYmplY3QoKSwgY29sbGVjdGlvbi0+aW1wbCgpLm93bmVyTm9kZSgp
LnJhZGlvTm9kZUxpc3QobmFtZSkuZ2V0KCkpOworICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgY29s
bGVjdGlvbi0+Z2xvYmFsT2JqZWN0KCksIGNvbGxlY3Rpb24tPmltcGwoKS5vd25lck5vZGUoKS5y
YWRpb05vZGVMaXN0KG5hbWUpLmdldCgpKTsKIH0KIAotYm9vbCBKU0hUTUxGb3JtQ29udHJvbHND
b2xsZWN0aW9uOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSYgdmFsdWUpCitib29sIEpTSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rp
b246Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgYXV0byBpdGVtcyA9IG5hbWVkSXRlbXMoZXhlYywg
dGhpcywgcHJvcGVydHlOYW1lKTsKKyAgICBhdXRvIGl0ZW1zID0gbmFtZWRJdGVtcygqc3RhdGUs
IHRoaXMsIHByb3BlcnR5TmFtZSk7CiAgICAgaWYgKGl0ZW1zLmlzVW5kZWZpbmVkKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIApAQCAtNTQsOSArNTQsOSBAQCBib29sIEpTSFRNTEZvcm1Db250
cm9sc0NvbGxlY3Rpb246Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcAogICAgIHJldHVybiB0cnVlOwogfQogCi1KU1ZhbHVlIEpTSFRNTEZvcm1Db250cm9sc0Nv
bGxlY3Rpb246Om5hbWVkSXRlbShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTSFRNTEZvcm1D
b250cm9sc0NvbGxlY3Rpb246Om5hbWVkSXRlbShFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIEpT
VmFsdWUgdmFsdWUgPSBuYW1lZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7
CisgICAgSlNWYWx1ZSB2YWx1ZSA9IG5hbWVkSXRlbXMoc3RhdGUsIHRoaXMsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUpLT52
YWx1ZSgmc3RhdGUpKSk7CiAgICAgcmV0dXJuIHZhbHVlLmlzVW5kZWZpbmVkKCkgPyBqc051bGwo
KSA6IHZhbHVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hUTUxGcmFtZUVsZW1lbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNIVE1MRnJhbWVFbGVtZW50Q3VzdG9tLmNwcAppbmRleCBhNGVkNDMwZDMyYjRkODVlMmEyOTM2
ZTkzZTdmZGI2NjU2M2U2MzExLi5hYjAwMGY3MTMwMTllOWI4YTBiZjU4ZTIzNWQ3NDEzYTlhY2I5
NTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGcmFtZUVs
ZW1lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZy
YW1lRWxlbWVudEN1c3RvbS5jcHAKQEAgLTQxLDIyICs0MSwyMiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBh
bGxvd1NldHRpbmdKYXZhc2NyaXB0VVJMKEV4ZWNTdGF0ZSogZXhlYywgSFRNTEZyYW1lRWxlbWVu
dCogaW1wLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorc3RhdGljIGlubGluZSBib29sIGFsbG93U2V0
dGluZ0phdmFzY3JpcHRVUkwoRXhlY1N0YXRlJiBzdGF0ZSwgSFRNTEZyYW1lRWxlbWVudCogaW1w
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIGlmIChwcm90b2NvbElzSmF2YVNjcmlwdChz
dHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXModmFsdWUpKSkgewogICAgICAgICBEb2N1
bWVudCogY29udGVudERvY3VtZW50ID0gaW1wLT5jb250ZW50RG9jdW1lbnQoKTsKLSAgICAgICAg
aWYgKGNvbnRlbnREb2N1bWVudCAmJiAhc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoZXhlYywgY29u
dGVudERvY3VtZW50KSkKKyAgICAgICAgaWYgKGNvbnRlbnREb2N1bWVudCAmJiAhc2hvdWxkQWxs
b3dBY2Nlc3NUb05vZGUoJnN0YXRlLCBjb250ZW50RG9jdW1lbnQpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKU0hUTUxGcmFt
ZUVsZW1lbnQ6OnNldExvY2F0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3Zv
aWQgSlNIVE1MRnJhbWVFbGVtZW50OjpzZXRMb2NhdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Zh
bHVlIHZhbHVlKQogewogICAgIEhUTUxGcmFtZUVsZW1lbnQmIGltcCA9IGltcGwoKTsKLSAgICBT
dHJpbmcgbG9jYXRpb25WYWx1ZSA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZh
bHVlKTsKKyAgICBTdHJpbmcgbG9jYXRpb25WYWx1ZSA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENo
ZWNrKCZzdGF0ZSwgdmFsdWUpOwogCi0gICAgaWYgKCFhbGxvd1NldHRpbmdKYXZhc2NyaXB0VVJM
KGV4ZWMsICZpbXAsIGxvY2F0aW9uVmFsdWUpKQorICAgIGlmICghYWxsb3dTZXR0aW5nSmF2YXNj
cmlwdFVSTChzdGF0ZSwgJmltcCwgbG9jYXRpb25WYWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGltcC5zZXRMb2NhdGlvbihsb2NhdGlvblZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTElucHV0RWxlbWVudEN1c3RvbS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRDdXN0b20uY3BwCmluZGV4IDQy
ZWJhZDMxNTk0MjRkN2FkOTk2YWNjOTlmMmRlMzY0MGM0ZmRhMDkuLjhmNDJkYmVmNTI0ZmQ2ZmQ4
Y2UzZGFhMTExOWRkZmRiM2I5YjAxNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTElucHV0RWxlbWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50Q3VzdG9tLmNwcApAQCAtMzMsNzEgKzMzLDcx
IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1
ZSBKU0hUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGlvblN0YXJ0KEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKK0pTVmFsdWUgSlNIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25TdGFydChFeGVjU3RhdGUm
IHN0YXRlKSBjb25zdAogewogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gaW1wbCgpOwog
ICAgIGlmICghaW5wdXQuY2FuSGF2ZVNlbGVjdGlvbigpKQotICAgICAgICByZXR1cm4gdGhyb3dU
eXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOwog
CiAgICAgcmV0dXJuIGpzTnVtYmVyKGlucHV0LnNlbGVjdGlvblN0YXJ0KCkpOwogfQogCi12b2lk
IEpTSFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uU3RhcnQoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHZhbHVlKQordm9pZCBKU0hUTUxJbnB1dEVsZW1lbnQ6OnNldFNlbGVjdGlvblN0YXJ0
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgSFRNTElucHV0RWxlbWVu
dCYgaW5wdXQgPSBpbXBsKCk7CiAgICAgaWYgKCFpbnB1dC5jYW5IYXZlU2VsZWN0aW9uKCkpCi0g
ICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3Rh
dGUpOwogCi0gICAgaW5wdXQuc2V0U2VsZWN0aW9uU3RhcnQodmFsdWUudG9JbnQzMihleGVjKSk7
CisgICAgaW5wdXQuc2V0U2VsZWN0aW9uU3RhcnQodmFsdWUudG9JbnQzMigmc3RhdGUpKTsKIH0K
IAotSlNWYWx1ZSBKU0hUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGlvbkVuZChFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0CitKU1ZhbHVlIEpTSFRNTElucHV0RWxlbWVudDo6c2VsZWN0aW9uRW5kKEV4ZWNT
dGF0ZSYgc3RhdGUpIGNvbnN0CiB7CiAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBpbXBs
KCk7CiAgICAgaWYgKCFpbnB1dC5jYW5IYXZlU2VsZWN0aW9uKCkpCi0gICAgICAgIHJldHVybiB0
aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0
ZSk7CiAKICAgICByZXR1cm4ganNOdW1iZXIoaW5wdXQuc2VsZWN0aW9uRW5kKCkpOwogfQogCi12
b2lkIEpTSFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uRW5kKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25FbmQo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBIVE1MSW5wdXRFbGVtZW50
JiBpbnB1dCA9IGltcGwoKTsKICAgICBpZiAoIWlucHV0LmNhbkhhdmVTZWxlY3Rpb24oKSkKLSAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSk7CiAKLSAgICBpbnB1dC5zZXRTZWxlY3Rpb25FbmQodmFsdWUudG9JbnQzMihleGVjKSk7Cisg
ICAgaW5wdXQuc2V0U2VsZWN0aW9uRW5kKHZhbHVlLnRvSW50MzIoJnN0YXRlKSk7CiB9CiAKLUpT
VmFsdWUgSlNIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25EaXJlY3Rpb24oRXhlY1N0YXRlKiBl
eGVjKSBjb25zdAorSlNWYWx1ZSBKU0hUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGlvbkRpcmVjdGlv
bihFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0
ID0gaW1wbCgpOwogICAgIGlmICghaW5wdXQuY2FuSGF2ZVNlbGVjdGlvbigpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJv
cigmc3RhdGUpOwogCi0gICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGlucHV0LnNl
bGVjdGlvbkRpcmVjdGlvbigpKTsKKyAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRl
LCBpbnB1dC5zZWxlY3Rpb25EaXJlY3Rpb24oKSk7CiB9CiAKLXZvaWQgSlNIVE1MSW5wdXRFbGVt
ZW50OjpzZXRTZWxlY3Rpb25EaXJlY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
KQordm9pZCBKU0hUTUxJbnB1dEVsZW1lbnQ6OnNldFNlbGVjdGlvbkRpcmVjdGlvbihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0
ID0gaW1wbCgpOwogICAgIGlmICghaW5wdXQuY2FuSGF2ZVNlbGVjdGlvbigpKSB7Ci0gICAgICAg
IHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaW5wdXQuc2V0U2VsZWN0aW9uRGlyZWN0aW9u
KHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgaW5wdXQuc2V0U2VsZWN0
aW9uRGlyZWN0aW9uKHZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSkpOwogfQog
Ci1KU1ZhbHVlIEpTSFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uUmFuZ2UoRXhlY1N0YXRl
KiBleGVjKQorSlNWYWx1ZSBKU0hUTUxJbnB1dEVsZW1lbnQ6OnNldFNlbGVjdGlvblJhbmdlKEV4
ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBpbXBsKCk7
CiAgICAgaWYgKCFpbnB1dC5jYW5IYXZlU2VsZWN0aW9uKCkpCi0gICAgICAgIHJldHVybiB0aHJv
d1R5cGVFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7
CiAKLSAgICBpbnQgc3RhcnQgPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotICAg
IGludCBlbmQgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwotICAgIFN0cmluZyBk
aXJlY3Rpb24gPSBleGVjLT5hcmd1bWVudCgyKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
CisgICAgaW50IHN0YXJ0ID0gc3RhdGUuYXJndW1lbnQoMCkudG9JbnQzMigmc3RhdGUpOworICAg
IGludCBlbmQgPSBzdGF0ZS5hcmd1bWVudCgxKS50b0ludDMyKCZzdGF0ZSk7CisgICAgU3RyaW5n
IGRpcmVjdGlvbiA9IHN0YXRlLmFyZ3VtZW50KDIpLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZz
dGF0ZSk7CiAKICAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kLCBkaXJlY3Rp
b24pOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MTWVkaWFFbGVtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTE1lZGlhRWxlbWVudEN1c3RvbS5jcHAKaW5kZXggMjA3YWI3
MWRhYmUzM2Y3NjBmMzA1ZGNiZDM5ZDBmZDljYjMyOGJjNC4uNDQwMDk3NjFkMTM5ZDEzMTg2NDZi
NWM4ZTUxZTI1YmFkMGViMTQwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MTWVkaWFFbGVtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0hUTUxNZWRpYUVsZW1lbnRDdXN0b20uY3BwCkBAIC0zNCw3ICszNCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCBKU0hUTUxN
ZWRpYUVsZW1lbnQ6OnNldENvbnRyb2xsZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSB2YWx1ZSkKK3Zv
aWQgSlNIVE1MTWVkaWFFbGVtZW50OjpzZXRDb250cm9sbGVyKEV4ZWNTdGF0ZSYsIEpTVmFsdWUg
dmFsdWUpCiB7CiAgICAgLy8gNC44LjEwLjExLjIgTWVkaWEgY29udHJvbGxlcnM6IGNvbnRyb2xs
ZXIgYXR0cmlidXRlLgogICAgIC8vIE9uIHNldHRpbmcsIGl0IG11c3QgZmlyc3QgcmVtb3ZlIHRo
ZSBlbGVtZW50J3MgbWVkaWFncm91cCBhdHRyaWJ1dGUsIGlmIGFueSwgCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPcHRpb25zQ29sbGVjdGlvbkN1
c3RvbS5jcHAKaW5kZXggZmIzNzVlZjk5N2Q4MjQ4MWMwZTBhM2JjYjFmYzFhNWU2YzZmNWNjYS4u
OTE1ZTAyODdjNzhjZGMwOTVkYjFhZGUzMzVkNzYwY2QzYjU4M2U3ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbnNDb2xsZWN0aW9u
Q3VzdG9tLmNwcApAQCAtNDcsMTEgKzQ3LDExIEBAIGJvb2wgSlNIVE1MT3B0aW9uc0NvbGxlY3Rp
b246Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb246OnNldExl
bmd0aChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit2b2lkIEpTSFRNTE9wdGlvbnND
b2xsZWN0aW9uOjpzZXRMZW5ndGgoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICB1bnNpZ25lZCBuZXdMZW5ndGggPSAwOwot
ICAgIGRvdWJsZSBsZW5ndGhWYWx1ZSA9IHZhbHVlLnRvTnVtYmVyKGV4ZWMpOworICAgIGRvdWJs
ZSBsZW5ndGhWYWx1ZSA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CiAgICAgaWYgKCFzdGQ6Omlz
bmFuKGxlbmd0aFZhbHVlKSAmJiAhc3RkOjppc2luZihsZW5ndGhWYWx1ZSkpIHsKICAgICAgICAg
aWYgKGxlbmd0aFZhbHVlIDwgMC4wKQogICAgICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsK
QEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbjo6c2V0TGVuZ3Ro
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKICAgICB9CiAgICAgaWYgKCFlYykKICAg
ICAgICAgaW1wbCgpLnNldExlbmd0aChuZXdMZW5ndGgsIGVjKTsKLSAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKIH0KIAogdm9p
ZCBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbjo6aW5kZXhTZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSkKQEAgLTcwLDE0ICs3MCwxNCBAQCB2b2lkIEpT
SFRNTE9wdGlvbnNDb2xsZWN0aW9uOjppbmRleFNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIGluZGV4LCBKU1ZhbAogICAgIHNlbGVjdEluZGV4U2V0dGVyKCZpbXBsKCkuc2VsZWN0RWxl
bWVudCgpLCBleGVjLCBpbmRleCwgdmFsdWUpOwogfQogCi1KU1ZhbHVlIEpTSFRNTE9wdGlvbnND
b2xsZWN0aW9uOjpyZW1vdmUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0hUTUxPcHRpb25z
Q29sbGVjdGlvbjo6cmVtb3ZlKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgLy8gVGhlIGFyZ3Vt
ZW50IGNhbiBiZSBhbiBIVE1MT3B0aW9uRWxlbWVudCBvciBhbiBpbmRleC4KLSAgICBKU1ZhbHVl
IGFyZ3VtZW50ID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgSlNWYWx1ZSBhcmd1bWVudCA9IHN0
YXRlLmFyZ3VtZW50KDApOwogICAgIGlmIChIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uID0gSlNI
VE1MT3B0aW9uRWxlbWVudDo6dG9XcmFwcGVkKGFyZ3VtZW50KSkKICAgICAgICAgaW1wbCgpLnJl
bW92ZShvcHRpb24pOwogICAgIGVsc2UKLSAgICAgICAgaW1wbCgpLnJlbW92ZShhcmd1bWVudC50
b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgaW1wbCgpLnJlbW92ZShhcmd1bWVudC50b0ludDMyKCZz
dGF0ZSkpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwCmlu
ZGV4IDE0NmUyNDJhMDVkOGQ4YjU0ZTFlMjliMTcwZTI0NDIzMzcyYzk3MjguLmIzZGYxM2Y3MmVh
YThmYmFhMDc4NjA1ZjQ3NjMzOTI3ZWJlMDJjYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwCkBAIC0zMiwy
MSArMzIsMjEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIHVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUpTVmFsdWUgSlNIVE1MU2VsZWN0RWxlbWVudDo6
cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNIVE1MU2VsZWN0RWxlbWVudDo6cmVt
b3ZlKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdCA9
IGltcGwoKTsKIAotICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKSB7CisgICAgaWYgKCFz
dGF0ZS5hcmd1bWVudENvdW50KCkpIHsKICAgICAgICAgLy8gV2hlbiBjYWxsZWQgd2l0aCBubyBh
cmd1bWVudCwgd2Ugc2hvdWxkIGNhbGwgRWxlbWVudDo6cmVtb3ZlKCkgdG8gZGV0YWNoLgogICAg
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAgICAgc2VsZWN0LnJlbW92ZShlYyk7Ci0g
ICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlv
bigmc3RhdGUsIGVjKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBUaGUgSFRNTFNlbGVjdEVs
ZW1lbnQ6OnJlbW92ZSgpIGZ1bmN0aW9uIGNhbiB0YWtlIGVpdGhlciBhbiBvcHRpb24gb2JqZWN0
IG9yIHRoZSBpbmRleCBvZiBhbiBvcHRpb24uCi0gICAgICAgIGlmIChIVE1MT3B0aW9uRWxlbWVu
dCogb3B0aW9uID0gSlNIVE1MT3B0aW9uRWxlbWVudDo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50
KDApKSkKKyAgICAgICAgaWYgKEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSBKU0hUTUxPcHRp
b25FbGVtZW50Ojp0b1dyYXBwZWQoc3RhdGUuYXJndW1lbnQoMCkpKQogICAgICAgICAgICAgc2Vs
ZWN0LnJlbW92ZShvcHRpb24pOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZWxlY3QucmVt
b3ZlQnlJbmRleChleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAg
IHNlbGVjdC5yZW1vdmVCeUluZGV4KHN0YXRlLmFyZ3VtZW50KDApLnRvSW50MzIoJnN0YXRlKSk7
CiAgICAgfQogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcApp
bmRleCBlMTIxOTlmMWI1NDc3ZGY1Y2IxNTg4Nzc5NzUzZGFiYmU1ZTBmZmRmLi4xYmI4NmRmODhj
OWRlZWFiMDliYTA2ZjMyNWRlN2JkZjY2ZDQ0OGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHAKQEAg
LTQzLDkgKzQzLDkgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1KU1ZhbHVlIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6Y29udGVudChFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0CitKU1ZhbHVlIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6Y29udGVudChFeGVjU3Rh
dGUmIHN0YXRlKSBjb25zdAogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKCZzdGF0ZSk7CiAKICAgICBEb2N1bWVudEZyYWdtZW50KiBjb250ZW50
ID0gaW1wbCgpLmNvbnRlbnQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SGlzdG9yeUN1c3RvbS5jcHAKaW5kZXggZDQwNzM1MTg2NDEyZDg5NDY2ZjRkYTVjOGYzYzdlYTY5
MTNlYzc5ZC4uNzc3ZmUwNmM0YTMyZDEzMDFhNGMwZjBlNDdjNjQ3NzY4ZmM1NmMyOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCkBAIC0xMDUs
NyArMTA1LDcgQEAgdm9pZCBKU0hpc3Rvcnk6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU4KICAgICBCYXNlOjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCi1K
U1ZhbHVlIEpTSGlzdG9yeTo6c3RhdGUoRXhlY1N0YXRlICpleGVjKSBjb25zdAorSlNWYWx1ZSBK
U0hpc3Rvcnk6OnN0YXRlKEV4ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0CiB7CiAgICAgSGlzdG9yeSYg
aGlzdG9yeSA9IGltcGwoKTsKIApAQCAtMTE0LDYzICsxMTQsNjMgQEAgSlNWYWx1ZSBKU0hpc3Rv
cnk6OnN0YXRlKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QKICAgICAgICAgcmV0dXJuIGNhY2hlZFZh
bHVlOwogCiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZCA9IGhp
c3Rvcnkuc3RhdGUoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHNlcmlhbGl6ZWQgPyBzZXJpYWxp
emVkLT5kZXNlcmlhbGl6ZShleGVjLCBnbG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwoKTsKLSAg
ICBjb25zdF9jYXN0PEpTSGlzdG9yeSo+KHRoaXMpLT5tX3N0YXRlLnNldChleGVjLT52bSgpLCB0
aGlzLCByZXN1bHQpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gc2VyaWFsaXplZCA/IHNlcmlhbGl6
ZWQtPmRlc2VyaWFsaXplKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7Cisg
ICAgY29uc3RfY2FzdDxKU0hpc3RvcnkqPih0aGlzKS0+bV9zdGF0ZS5zZXQoc3RhdGUudm0oKSwg
dGhpcywgcmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlIEpTSGlzdG9y
eTo6cHVzaFN0YXRlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNIaXN0b3J5OjpwdXNoU3Rh
dGUoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoIXNob3VsZEFsbG93QWNjZXNzVG9GcmFt
ZShleGVjLCBpbXBsKCkuZnJhbWUoKSkpCisgICAgaWYgKCFzaG91bGRBbGxvd0FjY2Vzc1RvRnJh
bWUoJnN0YXRlLCBpbXBsKCkuZnJhbWUoKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCi0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gaGlzdG9yeVN0YXRlID0gU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIDAsIDAp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBoaXN0b3J5U3RhdGUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgm
c3RhdGUsIHN0YXRlLmFyZ3VtZW50KDApLCAwLCAwKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgU3RyaW5nIHRpdGxl
ID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1
bWVudCgxKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIFN0cmluZyB0aXRs
ZSA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS5h
cmd1bWVudCgxKSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgCisKICAgICBTdHJpbmcgdXJsOwotICAgIGlmIChl
eGVjLT5hcmd1bWVudENvdW50KCkgPiAyKSB7Ci0gICAgICAgIHVybCA9IHZhbHVlVG9TdHJpbmdX
aXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQoMikpOwotICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQo
KSA+IDIpIHsKKyAgICAgICAgdXJsID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxD
aGVjaygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIpKTsKKyAgICAgICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaW1wbCgpLnN0YXRlT2JqZWN0QWRkZWQoaGlz
dG9yeVN0YXRlLnJlbGVhc2UoKSwgdGl0bGUsIHVybCwgSGlzdG9yeTo6U3RhdGVPYmplY3RUeXBl
OjpQdXNoLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBzZXRET01F
eGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICBtX3N0YXRlLmNsZWFyKCk7CiAKICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0hpc3Rvcnk6OnJlcGxhY2VTdGF0ZShF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTSGlzdG9yeTo6cmVwbGFjZVN0YXRlKEV4ZWNTdGF0
ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKCFzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoZXhlYywgaW1w
bCgpLmZyYW1lKCkpKQorICAgIGlmICghc2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKCZzdGF0ZSwg
aW1wbCgpLmZyYW1lKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIFJl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGhpc3RvcnlTdGF0ZSA9IFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCAwLCAwKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
aGlzdG9yeVN0YXRlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoJnN0YXRlLCBzdGF0
ZS5hcmd1bWVudCgwKSwgMCwgMCk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIFN0cmluZyB0aXRsZSA9IHZhbHVlVG9T
dHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQoMSkpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBTdHJpbmcgdGl0bGUgPSB2YWx1ZVRv
U3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMSkp
OworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci0gICAgICAgIAorCiAgICAgU3RyaW5nIHVybDsKLSAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpID4gMikgewotICAgICAgICB1cmwgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5l
ZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpKTsKLSAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPiAyKSB7Cisg
ICAgICAgIHVybCA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRl
LCBzdGF0ZS5hcmd1bWVudCgyKSk7CisgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwogICAgIGltcGwoKS5zdGF0ZU9iamVjdEFkZGVkKGhpc3RvcnlTdGF0ZS5y
ZWxlYXNlKCksIHRpdGxlLCB1cmwsIEhpc3Rvcnk6OlN0YXRlT2JqZWN0VHlwZTo6UmVwbGFjZSwg
ZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9u
KCZzdGF0ZSwgZWMpOwogCiAgICAgbV9zdGF0ZS5jbGVhcigpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCRGF0YWJhc2VDdXN0b20uY3BwCmluZGV4IGEyNWRjYTk5
MThjM2FlMmVlNzZhMTgwNWEyMGQwYjEwYmRhZjE5ZDMuLmU1MzUwOGYxYjY1ZDNhYWFjODZjYzNl
NTQ5MGMwYTkzZTgzYTQwZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSURCRGF0YWJhc2VDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSURCRGF0YWJhc2VDdXN0b20uY3BwCkBAIC00NCw0MCArNDQsNDAgQEAgdXNpbmcgbmFtZXNw
YWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTSURCRGF0YWJhc2U6
OmNyZWF0ZU9iamVjdFN0b3JlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNJREJEYXRhYmFz
ZTo6Y3JlYXRlT2JqZWN0U3RvcmUoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNl
cHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlm
IChzdGF0ZS5hcmd1bWVudENvdW50KCkgPCAxKQorICAgICAgICByZXR1cm4gc3RhdGUudm0oKS50
aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0
ZSkpOwogCi0gICAgU3RyaW5nIG5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIFN0cmlu
ZyBuYW1lID0gc3RhdGUuYXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRl
KTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogCi0gICAgSlNWYWx1ZSBvcHRpb25zVmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKTsK
KyAgICBKU1ZhbHVlIG9wdGlvbnNWYWx1ZSA9IHN0YXRlLmFyZ3VtZW50KDEpOwogICAgIGlmICgh
b3B0aW9uc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgIW9wdGlvbnNWYWx1ZS5pc09iamVj
dCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgIk5vdCBhbiBvYmplY3Qu
Iik7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUsICJOb3QgYW4gb2JqZWN0
LiIpOwogCiAgICAgSURCS2V5UGF0aCBrZXlQYXRoOwogICAgIGJvb2wgYXV0b0luY3JlbWVudCA9
IGZhbHNlOwogICAgIGlmICghb3B0aW9uc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAg
ICAgICAgSlNWYWx1ZSBrZXlQYXRoVmFsdWUgPSBvcHRpb25zVmFsdWUuZ2V0KGV4ZWMsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImtleVBhdGgiKSk7Ci0gICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgSlNWYWx1ZSBrZXlQYXRoVmFsdWUgPSBvcHRpb25zVmFs
dWUuZ2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJrZXlQYXRoIikp
OworICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIAogICAgICAgICBpZiAoIWtleVBhdGhWYWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKSB7Ci0gICAgICAgICAgICBrZXlQYXRoID0gaWRiS2V5UGF0aEZyb21WYWx1ZShleGVj
LCBrZXlQYXRoVmFsdWUpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICAgICAga2V5UGF0aCA9IGlkYktleVBhdGhGcm9tVmFsdWUoJnN0YXRlLCBrZXlQYXRo
VmFsdWUpOworICAgICAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0b0lu
Y3JlbWVudCA9IG9wdGlvbnNWYWx1ZS5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhl
eGVjLCAiYXV0b0luY3JlbWVudCIpKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgYXV0b0luY3JlbWVudCA9IG9wdGlvbnNWYWx1ZS5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImF1dG9JbmNyZW1lbnQi
KSkudG9Cb29sZWFuKCZzdGF0ZSk7CisgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QoKSwgaW1wbCgpLmNyZWF0ZU9iamVjdFN0b3JlKG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1l
bnQsIGVjKS5nZXQoKSk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlMoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgpLmNyZWF0ZU9i
amVjdFN0b3JlKG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIGVjKS5nZXQoKSk7CisgICAg
c2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0
b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3Rv
bS5jcHAKaW5kZXggODUwN2U0OTRhMzc2ZGI3OTllNTZmYmVlOGJkMWNjNmQ5ZDE2NzgyOC4uMDEy
ODhjNmVhY2FmNzU3ODQzNGM0MTIxODVkMDU0ZDU2ODI4YjlkYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAKQEAgLTQz
LDQyICs0Myw0MiBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUpTVmFsdWUgSlNJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU0lEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleChFeGVjU3RhdGUmIHN0YXRl
KQogewotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiBl
eGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMs
ICJJREJPYmplY3RTdG9yZSBzY3JpcHQgZXhlY3V0aW9uIGNvbnRleHQgaXMgdW5hdmFpbGFibGUi
KSk7CisgICAgICAgIHJldHVybiBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3Jl
YXRlUmVmZXJlbmNlRXJyb3IoJnN0YXRlLCAiSURCT2JqZWN0U3RvcmUgc2NyaXB0ICZzdGF0ZXV0
aW9uIGNvbnRleHQgaXMgdW5hdmFpbGFibGUiKSk7CiAKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRD
b3VudCgpIDwgMikKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhl
YywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlmIChzdGF0ZS5h
cmd1bWVudENvdW50KCkgPCAyKQorICAgICAgICByZXR1cm4gc3RhdGUudm0oKS50aHJvd0V4Y2Vw
dGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCi0g
ICAgU3RyaW5nIG5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIFN0cmluZyBuYW1lID0g
c3RhdGUuYXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKKyAgICBp
ZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
Ci0gICAgSURCS2V5UGF0aCBrZXlQYXRoID0gaWRiS2V5UGF0aEZyb21WYWx1ZShleGVjLCBleGVj
LT5hcmd1bWVudCgxKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIElEQktl
eVBhdGgga2V5UGF0aCA9IGlkYktleVBhdGhGcm9tVmFsdWUoJnN0YXRlLCBzdGF0ZS5hcmd1bWVu
dCgxKSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIAotICAgIEpTVmFsdWUgb3B0aW9uc1ZhbHVlID0gZXhlYy0+YXJndW1lbnQo
Mik7CisgICAgSlNWYWx1ZSBvcHRpb25zVmFsdWUgPSBzdGF0ZS5hcmd1bWVudCgyKTsKICAgICBp
ZiAoIW9wdGlvbnNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICFvcHRpb25zVmFsdWUuaXNP
YmplY3QoKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMsICJOb3QgYW4gb2Jq
ZWN0LiIpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCAiTm90IGFuIG9i
amVjdC4iKTsKIAogICAgIGJvb2wgdW5pcXVlID0gZmFsc2U7CiAgICAgYm9vbCBtdWx0aUVudHJ5
ID0gZmFsc2U7CiAgICAgaWYgKCFvcHRpb25zVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewot
ICAgICAgICB1bmlxdWUgPSBvcHRpb25zVmFsdWUuZ2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoZXhlYywgInVuaXF1ZSIpKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgdW5pcXVlID0gb3B0aW9uc1ZhbHVlLmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5pcXVlIikpLnRvQm9vbGVhbigm
c3RhdGUpOworICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgICAgICBtdWx0aUVudHJ5ID0gb3B0aW9uc1ZhbHVl
LmdldChleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJtdWx0aUVudHJ5IikpLnRv
Qm9vbGVhbihleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBtdWx0aUVudHJ5ID0gb3B0aW9uc1ZhbHVlLmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnN0YXRlLCAibXVsdGlFbnRyeSIpKS50b0Jvb2xlYW4oJnN0YXRlKTsKKyAgICAgICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgfQogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbXBsKCkuY3JlYXRlSW5kZXgoY29udGV4
dCwgbmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5LCBlYykuZ2V0KCkpOwotICAgIHNl
dERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKCZzdGF0
ZSwgZ2xvYmFsT2JqZWN0KCksIGltcGwoKS5jcmVhdGVJbmRleChjb250ZXh0LCBuYW1lLCBrZXlQ
YXRoLCB1bmlxdWUsIG11bHRpRW50cnksIGVjKS5nZXQoKSk7CisgICAgc2V0RE9NRXhjZXB0aW9u
KCZzdGF0ZSwgZWMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9t
LmNwcAppbmRleCA4N2JiMjc3NGYyNmViOTYzZTk1YmFjMjM5M2U4N2QzZTBlMmE3ZjMxLi5lMjZi
YmU3OGQ5ZmJiYzQ5MjBjZTFlZmNiNGMzNTBmZDdhMTMyNGI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0
b20uY3BwCkBAIC05MSwxNiArOTEsMTYgQEAgc3RhdGljIHZvaWQgcG9wdWxhdGVDb250ZXh0TWVu
dUl0ZW1zKEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIENvbnRleHRNZW4KIH0KICNl
bmRpZgogCi1KU1ZhbHVlIEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93Q29udGV4dE1lbnUo
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0luc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0Nv
bnRleHRNZW51KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMp
Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCisgICAgaWYgKHN0YXRlLmFyZ3Vt
ZW50Q291bnQoKSA8IDIpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIEV2ZW50
KiBldmVudCA9IEpTRXZlbnQ6OnRvV3JhcHBlZChleGVjLT5hcmd1bWVudCgwKSk7CisgICAgRXZl
bnQqIGV2ZW50ID0gSlNFdmVudDo6dG9XcmFwcGVkKHN0YXRlLmFyZ3VtZW50KDApKTsKIAotICAg
IEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheShleGVjLT5hcmd1bWVudCgxKSk7CisgICAgSlNBcnJh
eSogYXJyYXkgPSBhc0FycmF5KHN0YXRlLmFyZ3VtZW50KDEpKTsKICAgICBDb250ZXh0TWVudSBt
ZW51OwotICAgIHBvcHVsYXRlQ29udGV4dE1lbnVJdGVtcyhleGVjLCBhcnJheSwgbWVudSk7Cisg
ICAgcG9wdWxhdGVDb250ZXh0TWVudUl0ZW1zKCZzdGF0ZSwgYXJyYXksIG1lbnUpOwogCiAjaWYg
IVVTRShDUk9TU19QTEFURk9STV9DT05URVhUX01FTlVTKQogICAgIFZlY3RvcjxDb250ZXh0TWVu
dUl0ZW0+IGl0ZW1zID0gY29udGV4dE1lbnVJdGVtVmVjdG9yKG1lbnUucGxhdGZvcm1EZXNjcmlw
dGlvbigpKTsKQEAgLTEwOSw3ICsxMDksNyBAQCBKU1ZhbHVlIEpTSW5zcGVjdG9yRnJvbnRlbmRI
b3N0OjpzaG93Q29udGV4dE1lbnUoRXhlY1N0YXRlKiBleGVjKQogI2VuZGlmCiAgICAgaW1wbCgp
LnNob3dDb250ZXh0TWVudShldmVudCwgaXRlbXMpOwogI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0o
ZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICNlbmRpZgogICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNM
b2NhdGlvbkN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9u
Q3VzdG9tLmNwcAppbmRleCAyYTY4YmI1YTk5Mjk3NDUwMWNiZDRiNmM4ZmNkN2VlODU1NTZkOWUy
Li4xMzFlMjg3MGJkYjU5ZDYwNTM2YTkxMGE3NzFkZDUwNzcyYzA2ZTQ5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcApAQCAtMTMyLDEzICsx
MzIsMTMgQEAgYm9vbCBKU0xvY2F0aW9uOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmEKICAgICByZXR1cm4gQmFzZTo6ZGVmaW5l
T3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93
RXhjZXB0aW9uKTsKIH0KIAotSlNWYWx1ZSBKU0xvY2F0aW9uOjp0b1N0cmluZ0Z1bmN0aW9uKEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNMb2NhdGlvbjo6dG9TdHJpbmdGdW5jdGlvbihFeGVj
U3RhdGUmIHN0YXRlKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS5mcmFtZSgpOwotICAg
IGlmICghZnJhbWUgfHwgIXNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShleGVjLCBmcmFtZSkpCisg
ICAgaWYgKCFmcmFtZSB8fCAhc2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKCZzdGF0ZSwgZnJhbWUp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIHJldHVybiBqc1N0cmluZ1dp
dGhDYWNoZShleGVjLCBpbXBsKCkudG9TdHJpbmcoKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nV2l0
aENhY2hlKCZzdGF0ZSwgaW1wbCgpLnRvU3RyaW5nKCkpOwogfQogCiBib29sIEpTTG9jYXRpb25Q
cm90b3R5cGU6OnB1dERlbGVnYXRlKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90JikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVkaWFTb3VyY2VTdGF0ZXNDdXN0b20uY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZWRpYVNvdXJjZVN0YXRlc0N1c3RvbS5jcHAKaW5kZXgg
Y2EzNGFjMTA2MDZmZjkwNWUxNGM5ZjQ2MWE0NTZhMjMzYTk3MjJmOS4uODAxOGIyNjMzYjc4ZTlj
ZTFkZTI5MTMzZDlkOTRlNjcwMmVhMzUxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNNZWRpYVNvdXJjZVN0YXRlc0N1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNNZWRpYVNvdXJjZVN0YXRlc0N1c3RvbS5jcHAKQEAgLTM1LDcgKzM1
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1Zh
bHVlIEpTTWVkaWFTb3VyY2VTdGF0ZXM6OndpZHRoKEV4ZWNTdGF0ZSopIGNvbnN0CitKU1ZhbHVl
IEpTTWVkaWFTb3VyY2VTdGF0ZXM6OndpZHRoKEV4ZWNTdGF0ZSYpIGNvbnN0CiB7CiAgICAgaWYg
KCFpbXBsKCkuaGFzVmlkZW9Tb3VyY2UoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CkBAIC00Myw3ICs0Myw3IEBAIEpTVmFsdWUgSlNNZWRpYVNvdXJjZVN0YXRlczo6d2lkdGgoRXhl
Y1N0YXRlKikgY29uc3QKICAgICByZXR1cm4ganNOdW1iZXIoaW1wbCgpLndpZHRoKCkpOwogfQog
Ci1KU1ZhbHVlIEpTTWVkaWFTb3VyY2VTdGF0ZXM6OmhlaWdodChFeGVjU3RhdGUqKSBjb25zdAor
SlNWYWx1ZSBKU01lZGlhU291cmNlU3RhdGVzOjpoZWlnaHQoRXhlY1N0YXRlJikgY29uc3QKIHsK
ICAgICBpZiAoIWltcGwoKS5oYXNWaWRlb1NvdXJjZSgpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKQEAgLTUxLDcgKzUxLDcgQEAgSlNWYWx1ZSBKU01lZGlhU291cmNlU3RhdGVzOjpo
ZWlnaHQoRXhlY1N0YXRlKikgY29uc3QKICAgICByZXR1cm4ganNOdW1iZXIoaW1wbCgpLmhlaWdo
dCgpKTsKIH0KIAotSlNWYWx1ZSBKU01lZGlhU291cmNlU3RhdGVzOjpmcmFtZVJhdGUoRXhlY1N0
YXRlKikgY29uc3QKK0pTVmFsdWUgSlNNZWRpYVNvdXJjZVN0YXRlczo6ZnJhbWVSYXRlKEV4ZWNT
dGF0ZSYpIGNvbnN0CiB7CiAgICAgaWYgKCFpbXBsKCkuaGFzVmlkZW9Tb3VyY2UoKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC01OSw3ICs1OSw3IEBAIEpTVmFsdWUgSlNNZWRp
YVNvdXJjZVN0YXRlczo6ZnJhbWVSYXRlKEV4ZWNTdGF0ZSopIGNvbnN0CiAgICAgcmV0dXJuIGpz
TnVtYmVyKGltcGwoKS5mcmFtZVJhdGUoKSk7CiB9CiAKLUpTVmFsdWUgSlNNZWRpYVNvdXJjZVN0
YXRlczo6YXNwZWN0UmF0aW8oRXhlY1N0YXRlKikgY29uc3QKK0pTVmFsdWUgSlNNZWRpYVNvdXJj
ZVN0YXRlczo6YXNwZWN0UmF0aW8oRXhlY1N0YXRlJikgY29uc3QKIHsKICAgICBpZiAoIWltcGwo
KS5oYXNWaWRlb1NvdXJjZSgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTY3
LDcgKzY3LDcgQEAgSlNWYWx1ZSBKU01lZGlhU291cmNlU3RhdGVzOjphc3BlY3RSYXRpbyhFeGVj
U3RhdGUqKSBjb25zdAogICAgIHJldHVybiBqc051bWJlcihpbXBsKCkuYXNwZWN0UmF0aW8oKSk7
CiB9CiAKLUpTVmFsdWUgSlNNZWRpYVNvdXJjZVN0YXRlczo6ZmFjaW5nTW9kZShFeGVjU3RhdGUq
IGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTTWVkaWFTb3VyY2VTdGF0ZXM6OmZhY2luZ01vZGUoRXhl
Y1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICAgICBpZiAoIWltcGwoKS5oYXNWaWRlb1NvdXJjZSgp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTc2LDEwICs3NiwxMCBAQCBKU1Zh
bHVlIEpTTWVkaWFTb3VyY2VTdGF0ZXM6OmZhY2luZ01vZGUoRXhlY1N0YXRlKiBleGVjKSBjb25z
dAogICAgIGlmIChtb2RlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgCi0gICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGltcGwoKS5mYWNpbmdN
b2RlKCkpOworICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwoKS5mYWNp
bmdNb2RlKCkpOwogfQogCi1KU1ZhbHVlIEpTTWVkaWFTb3VyY2VTdGF0ZXM6OnZvbHVtZShFeGVj
U3RhdGUqKSBjb25zdAorSlNWYWx1ZSBKU01lZGlhU291cmNlU3RhdGVzOjp2b2x1bWUoRXhlY1N0
YXRlJikgY29uc3QKIHsKICAgICBpZiAoaW1wbCgpLmhhc1ZpZGVvU291cmNlKCkpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCmluZGV4IGJlNjQ1YzBlYjgyNThmNzg2ZGQ5NDkw
NmU5NDE5MzU5OWI0YzUwMDcuLmNiODdkODk1MWY5NzM0ZTlhZDA4M2QwM2M5ODYzNGNkZmIwODZl
ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50
Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVu
dEN1c3RvbS5jcHAKQEAgLTQ0LDExICs0NCwxMSBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNNZXNzYWdlRXZlbnQ6OmRhdGEoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU01lc3NhZ2VFdmVudDo6ZGF0YShFeGVjU3RhdGUm
IHN0YXRlKSBjb25zdAogewogICAgIGlmIChKU1ZhbHVlIGNhY2hlZFZhbHVlID0gbV9kYXRhLmdl
dCgpKSB7CiAgICAgICAgIC8vIFdlIGNhbm5vdCB1c2UgYSBjYWNoZWQgb2JqZWN0IGlmIHdlIGFy
ZSBpbiBhIGRpZmZlcmVudCB3b3JsZCB0aGFuIHRoZSBvbmUgaXQgd2FzIGNyZWF0ZWQgaW4uCi0g
ICAgICAgIGlmICghY2FjaGVkVmFsdWUuaXNPYmplY3QoKSB8fCAmd29ybGRGb3JET01PYmplY3Qo
Y2FjaGVkVmFsdWUuZ2V0T2JqZWN0KCkpID09ICZjdXJyZW50V29ybGQoZXhlYykpCisgICAgICAg
IGlmICghY2FjaGVkVmFsdWUuaXNPYmplY3QoKSB8fCAmd29ybGRGb3JET01PYmplY3QoY2FjaGVk
VmFsdWUuZ2V0T2JqZWN0KCkpID09ICZjdXJyZW50V29ybGQoJnN0YXRlKSkKICAgICAgICAgICAg
IHJldHVybiBjYWNoZWRWYWx1ZTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
fQpAQCAtNjQsMTAgKzY0LDEwIEBAIEpTVmFsdWUgSlNNZXNzYWdlRXZlbnQ6OmRhdGEoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAogICAgICAgICAgICAgSlNWYWx1ZSBkYXRhVmFsdWUgPSBzY3JpcHRW
YWx1ZS5qc1ZhbHVlKCk7CiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSBNZXNz
YWdlRXZlbnRzIGRvIG5vdCBsZWFrIG9iamVjdHMgaW4gdGhlaXIgc3RhdGUgcHJvcGVydHkgYWNy
b3NzIGlzb2xhdGVkIERPTSB3b3JsZHMuCiAgICAgICAgICAgICAvLyBJZGVhbGx5LCB3ZSB3b3Vs
ZCBjaGVjayB0aGF0IHRoZSB3b3JsZHMgaGF2ZSBkaWZmZXJlbnQgcHJpdmlsZWdlcyBidXQgdGhh
dCdzIG5vdCBwb3NzaWJsZSB5ZXQuCi0gICAgICAgICAgICBpZiAoZGF0YVZhbHVlLmlzT2JqZWN0
KCkgJiYgJndvcmxkRm9yRE9NT2JqZWN0KGRhdGFWYWx1ZS5nZXRPYmplY3QoKSkgIT0gJmN1cnJl
bnRXb3JsZChleGVjKSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IGV2ZW50LnRyeVNlcmlhbGl6ZURhdGEoZXhlYyk7Cisg
ICAgICAgICAgICBpZiAoZGF0YVZhbHVlLmlzT2JqZWN0KCkgJiYgJndvcmxkRm9yRE9NT2JqZWN0
KGRhdGFWYWx1ZS5nZXRPYmplY3QoKSkgIT0gJmN1cnJlbnRXb3JsZCgmc3RhdGUpKSB7CisgICAg
ICAgICAgICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVl
ID0gZXZlbnQudHJ5U2VyaWFsaXplRGF0YSgmc3RhdGUpOwogICAgICAgICAgICAgICAgIGlmIChz
ZXJpYWxpemVkVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlcmlhbGl6ZWRW
YWx1ZS0+ZGVzZXJpYWxpemUoZXhlYywgZ2xvYmFsT2JqZWN0KCksIG51bGxwdHIpOworICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBzZXJpYWxpemVkVmFsdWUtPmRlc2VyaWFsaXplKCZzdGF0
ZSwgZ2xvYmFsT2JqZWN0KCksIG51bGxwdHIpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0ganNOdWxsKCk7CiAgICAgICAgICAgICB9IGVsc2UKQEAg
LTgwLDY0ICs4MCw2NCBAQCBKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50OjpkYXRhKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKICAgICAgICAgaWYgKFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNl
cmlhbGl6ZWRWYWx1ZSA9IGV2ZW50LmRhdGFBc1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpKSB7CiAg
ICAgICAgICAgICBNZXNzYWdlUG9ydEFycmF5IHBvcnRzID0gaW1wbCgpLnBvcnRzKCk7CiAgICAg
ICAgICAgICAvLyBGSVhNRTogV2h5IGRvZXMgdGhpcyBzdXBwcmVzcyBleGNlcHRpb25zPwotICAg
ICAgICAgICAgcmVzdWx0ID0gc2VyaWFsaXplZFZhbHVlLT5kZXNlcmlhbGl6ZShleGVjLCBnbG9i
YWxPYmplY3QoKSwgJnBvcnRzLCBOb25UaHJvd2luZyk7CisgICAgICAgICAgICByZXN1bHQgPSBz
ZXJpYWxpemVkVmFsdWUtPmRlc2VyaWFsaXplKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksICZwb3J0
cywgTm9uVGhyb3dpbmcpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJlc3VsdCA9IGpz
TnVsbCgpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTWVzc2FnZUV2ZW50OjpEYXRhVHlw
ZVN0cmluZzoKLSAgICAgICAgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgZXZlbnQu
ZGF0YUFzU3RyaW5nKCkpOworICAgICAgICByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3Rh
dGUsIGV2ZW50LmRhdGFBc1N0cmluZygpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE1l
c3NhZ2VFdmVudDo6RGF0YVR5cGVCbG9iOgotICAgICAgICByZXN1bHQgPSB0b0pTKGV4ZWMsIGds
b2JhbE9iamVjdCgpLCBldmVudC5kYXRhQXNCbG9iKCkpOworICAgICAgICByZXN1bHQgPSB0b0pT
KCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIGV2ZW50LmRhdGFBc0Jsb2IoKSk7CiAgICAgICAgIGJy
ZWFrOwogCiAgICAgY2FzZSBNZXNzYWdlRXZlbnQ6OkRhdGFUeXBlQXJyYXlCdWZmZXI6Ci0gICAg
ICAgIHJlc3VsdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGV2ZW50LmRhdGFBc0FycmF5
QnVmZmVyKCkpOworICAgICAgICByZXN1bHQgPSB0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCks
IGV2ZW50LmRhdGFBc0FycmF5QnVmZmVyKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICAvLyBTYXZlIHRoZSByZXN1bHQgc28gd2UgZG9uJ3QgaGF2ZSB0byBkZXNlcmlhbGl6ZSB0aGUg
dmFsdWUgYWdhaW4uCi0gICAgY29uc3RfY2FzdDxKU01lc3NhZ2VFdmVudCo+KHRoaXMpLT5tX2Rh
dGEuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIHJlc3VsdCk7CisgICAgY29uc3RfY2FzdDxKU01lc3Nh
Z2VFdmVudCo+KHRoaXMpLT5tX2RhdGEuc2V0KHN0YXRlLnZtKCksIHRoaXMsIHJlc3VsdCk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIEpTQzo6SlNWYWx1ZSBoYW5kbGVJbml0TWVz
c2FnZUV2ZW50KEpTTWVzc2FnZUV2ZW50KiBqc0V2ZW50LCBKU0M6OkV4ZWNTdGF0ZSogZXhlYykK
K3N0YXRpYyBKU0M6OkpTVmFsdWUgaGFuZGxlSW5pdE1lc3NhZ2VFdmVudChKU01lc3NhZ2VFdmVu
dCoganNFdmVudCwgSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGNvbnN0IFN0cmluZyYg
dHlwZUFyZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
LSAgICBib29sIGNhbkJ1YmJsZUFyZyA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvQm9vbGVhbihleGVj
KTsKLSAgICBib29sIGNhbmNlbGFibGVBcmcgPSBleGVjLT5hcmd1bWVudCgyKS50b0Jvb2xlYW4o
ZXhlYyk7Ci0gICAgY29uc3QgU3RyaW5nIG9yaWdpbkFyZyA9IGV4ZWMtPmFyZ3VtZW50KDQpLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBjb25zdCBTdHJpbmcgbGFzdEV2ZW50SWRB
cmcgPSBleGVjLT5hcmd1bWVudCg1KS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAg
RE9NV2luZG93KiBzb3VyY2VBcmcgPSBKU0RPTVdpbmRvdzo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3Vt
ZW50KDYpKTsKKyAgICBjb25zdCBTdHJpbmcmIHR5cGVBcmcgPSBzdGF0ZS5hcmd1bWVudCgwKS50
b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOworICAgIGJvb2wgY2FuQnViYmxlQXJnID0g
c3RhdGUuYXJndW1lbnQoMSkudG9Cb29sZWFuKCZzdGF0ZSk7CisgICAgYm9vbCBjYW5jZWxhYmxl
QXJnID0gc3RhdGUuYXJndW1lbnQoMikudG9Cb29sZWFuKCZzdGF0ZSk7CisgICAgY29uc3QgU3Ry
aW5nIG9yaWdpbkFyZyA9IHN0YXRlLmFyZ3VtZW50KDQpLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVl
KCZzdGF0ZSk7CisgICAgY29uc3QgU3RyaW5nIGxhc3RFdmVudElkQXJnID0gc3RhdGUuYXJndW1l
bnQoNSkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKKyAgICBET01XaW5kb3cqIHNv
dXJjZUFyZyA9IEpTRE9NV2luZG93Ojp0b1dyYXBwZWQoc3RhdGUuYXJndW1lbnQoNikpOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxNZXNzYWdlUG9ydEFycmF5PiBtZXNzYWdlUG9ydHM7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQXJyYXk+IGFycmF5QnVmZmVyczsKLSAgICBpZiAoIWV4
ZWMtPmFyZ3VtZW50KDcpLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICBpZiAoIXN0YXRlLmFy
Z3VtZW50KDcpLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgbWVzc2FnZVBvcnRzID0g
c3RkOjptYWtlX3VuaXF1ZTxNZXNzYWdlUG9ydEFycmF5PigpOwogICAgICAgICBhcnJheUJ1ZmZl
cnMgPSBzdGQ6Om1ha2VfdW5pcXVlPEFycmF5QnVmZmVyQXJyYXk+KCk7Ci0gICAgICAgIGZpbGxN
ZXNzYWdlUG9ydEFycmF5KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDcpLCAqbWVzc2FnZVBvcnRzLCAq
YXJyYXlCdWZmZXJzKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBmaWxsTWVzc2FnZVBvcnRBcnJheShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoNyksICptZXNzYWdl
UG9ydHMsICphcnJheUJ1ZmZlcnMpOworICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUgZGF0YUFyZyA9IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKGV4ZWMtPnZt
KCksIGV4ZWMtPmFyZ3VtZW50KDMpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgZGF0YUFyZyA9IERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlKHN0YXRlLnZtKCksIHN0YXRlLmFyZ3VtZW50KDMpKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgTWVzc2FnZUV2
ZW50JiBldmVudCA9IGpzRXZlbnQtPmltcGwoKTsKICAgICBldmVudC5pbml0TWVzc2FnZUV2ZW50
KHR5cGVBcmcsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZywgZGF0YUFyZywgb3JpZ2luQXJn
LCBsYXN0RXZlbnRJZEFyZywgc291cmNlQXJnLCBXVEY6Om1vdmUobWVzc2FnZVBvcnRzKSk7Ci0g
ICAganNFdmVudC0+bV9kYXRhLnNldChleGVjLT52bSgpLCBqc0V2ZW50LCBkYXRhQXJnLmpzVmFs
dWUoKSk7CisgICAganNFdmVudC0+bV9kYXRhLnNldChzdGF0ZS52bSgpLCBqc0V2ZW50LCBkYXRh
QXJnLmpzVmFsdWUoKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTQzo6SlNW
YWx1ZSBKU01lc3NhZ2VFdmVudDo6aW5pdE1lc3NhZ2VFdmVudChKU0M6OkV4ZWNTdGF0ZSogZXhl
YykKK0pTQzo6SlNWYWx1ZSBKU01lc3NhZ2VFdmVudDo6aW5pdE1lc3NhZ2VFdmVudChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIGhhbmRsZUluaXRNZXNzYWdlRXZlbnQodGhp
cywgZXhlYyk7CisgICAgcmV0dXJuIGhhbmRsZUluaXRNZXNzYWdlRXZlbnQodGhpcywgc3RhdGUp
OwogfQogCi1KU0M6OkpTVmFsdWUgSlNNZXNzYWdlRXZlbnQ6OndlYmtpdEluaXRNZXNzYWdlRXZl
bnQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCitKU0M6OkpTVmFsdWUgSlNNZXNzYWdlRXZlbnQ6Ondl
YmtpdEluaXRNZXNzYWdlRXZlbnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIHJldHVy
biBoYW5kbGVJbml0TWVzc2FnZUV2ZW50KHRoaXMsIGV4ZWMpOworICAgIHJldHVybiBoYW5kbGVJ
bml0TWVzc2FnZUV2ZW50KHRoaXMsIHN0YXRlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1
c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9t
LmNwcAppbmRleCA5OGE3NGI1MTkxYjI0YzUyYTA5ZWY5ZWUyOGQwNzM3MjA1MWIzMWJmLi4yMzlm
NDdhZmQ2ZGE1ZWJlNTE5MGU3Y2JiNTkzZTMzYmViZjkxZTFmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcApAQCAtNTIsMTIgKzUy
LDEyIEBAIHZvaWQgSlNNZXNzYWdlUG9ydDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChwb3J0KTsKIH0K
IAotSlNDOjpKU1ZhbHVlIEpTTWVzc2FnZVBvcnQ6OnBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRl
KiBleGVjKQorSlNDOjpKU1ZhbHVlIEpTTWVzc2FnZVBvcnQ6OnBvc3RNZXNzYWdlKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1cm4gaGFuZGxlUG9zdE1lc3NhZ2UoZXhlYywgJmlt
cGwoKSk7CisgICAgcmV0dXJuIGhhbmRsZVBvc3RNZXNzYWdlKHN0YXRlLCAmaW1wbCgpKTsKIH0K
IAotdm9pZCBmaWxsTWVzc2FnZVBvcnRBcnJheShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBNZXNzYWdlUG9ydEFycmF5JiBwb3J0QXJyYXksIEFycmF5QnVmZmVyQXJy
YXkmIGFycmF5QnVmZmVycykKK3ZvaWQgZmlsbE1lc3NhZ2VQb3J0QXJyYXkoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIE1lc3NhZ2VQb3J0QXJyYXkmIHBvcnRBcnJh
eSwgQXJyYXlCdWZmZXJBcnJheSYgYXJyYXlCdWZmZXJzKQogewogICAgIC8vIENvbnZlcnQgZnJv
bSB0aGUgcGFzc2VkLWluIEpTIGFycmF5LWxpa2Ugb2JqZWN0IHRvIGEgTWVzc2FnZVBvcnRBcnJh
eS4KICAgICAvLyBBbHNvIHZhbGlkYXRlcyB0aGUgZWxlbWVudHMgcGVyIHNlY3Rpb25zIDQuMS4x
MyBhbmQgNC4xLjE1IG9mIHRoZSBXZWJJREwgc3BlYyBhbmQgc2VjdGlvbiA4LjMuMyBvZiB0aGUg
SFRNTDUgc3BlYy4KQEAgLTY5LDE3ICs2OSwxNyBAQCB2b2lkIGZpbGxNZXNzYWdlUG9ydEFycmF5
KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUsIE1lc3NhZ2VQb3J0QQog
CiAgICAgLy8gVmFsaWRhdGlvbiBvZiBzZXF1ZW5jZSB0eXBlcywgcGVyIFdlYklETCBzcGVjIDQu
MS4xMy4KICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwotICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0
b0pTU2VxdWVuY2UoZXhlYywgdmFsdWUsIGxlbmd0aCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0b0pTU2VxdWVuY2UoJnN0YXRlLCB2YWx1
ZSwgbGVuZ3RoKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDAgOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldCgm
c3RhdGUsIGkpOworICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIC8vIFZhbGlkYXRpb24gb2Ygbm9uLW51bGwgb2JqZWN0cywgcGVy
IEhUTUw1IHNwZWMgMTAuMy4zLgogICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkgewotICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIElOVkFMSURfU1RBVEVfRVJS
KTsKKyAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIElOVkFMSURfU1RBVEVfRVJS
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC04OCw3ICs4OCw3IEBAIHZv
aWQgZmlsbE1lc3NhZ2VQb3J0QXJyYXkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgTWVzc2FnZVBvcnRBCiAgICAgICAgIGlmIChwb3J0KSB7CiAgICAgICAgICAgICAv
LyBDaGVjayBmb3IgZHVwbGljYXRlIHBvcnRzLgogICAgICAgICAgICAgaWYgKHBvcnRBcnJheS5j
b250YWlucyhwb3J0KSkgewotICAgICAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBJ
TlZBTElEX1NUQVRFX0VSUik7CisgICAgICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0
ZSwgSU5WQUxJRF9TVEFURV9FUlIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHBvcnRBcnJheS5hcHBlbmQocG9ydC5yZWxlYXNlKCkpOwpAQCAt
OTcsNyArOTcsNyBAQCB2b2lkIGZpbGxNZXNzYWdlUG9ydEFycmF5KEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUsIE1lc3NhZ2VQb3J0QQogICAgICAgICAgICAgaWYgKGFy
cmF5QnVmZmVyKQogICAgICAgICAgICAgICAgIGFycmF5QnVmZmVycy5hcHBlbmQoYXJyYXlCdWZm
ZXIpOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
ZXhlYyk7CisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uaCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uaAppbmRleCBlNDUyYmExZGVk
NzkzNGJhMjE5ZmQ2Y2Q5YWQ5OWM3MTM0NjdmZmRlLi43YmQ5ZGYzNTE1ZjkzNTIzNWMyOTBhOGUz
NGJlNTJkM2YyMGU1ZDNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U01lc3NhZ2VQb3J0Q3VzdG9tLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNN
ZXNzYWdlUG9ydEN1c3RvbS5oCkBAIC00MywyMiArNDMsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB3aGljaCBwdWxscyB0aGUgdmFsdWVzIG91dCBvZiBh
IEpTIHNlcXVlbmNlIGFuZCBpbnRvIGEgTWVzc2FnZVBvcnRBcnJheS4KICAgICAvLyBBbHNvIHZh
bGlkYXRlcyB0aGUgZWxlbWVudHMgcGVyIHNlY3Rpb25zIDQuMS4xMyBhbmQgNC4xLjE1IG9mIHRo
ZSBXZWJJREwgc3BlYyBhbmQgc2VjdGlvbiA4LjMuMyBvZiB0aGUgSFRNTDUgc3BlYy4KICAgICAv
LyBNYXkgZ2VuZXJhdGUgYW4gZXhjZXB0aW9uIHZpYSB0aGUgcGFzc2VkIEV4ZWNTdGF0ZS4KLSAg
ICB2b2lkIGZpbGxNZXNzYWdlUG9ydEFycmF5KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
LCBNZXNzYWdlUG9ydEFycmF5JiwgQXJyYXlCdWZmZXJBcnJheSYpOworICAgIHZvaWQgZmlsbE1l
c3NhZ2VQb3J0QXJyYXkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIE1lc3NhZ2VQb3J0
QXJyYXkmLCBBcnJheUJ1ZmZlckFycmF5Jik7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8g
Y29udmVydCBmcm9tIEpTIHBvc3RNZXNzYWdlIGFyZ3VtZW50cyB0byBXZWJDb3JlIHBvc3RNZXNz
YWdlIGFyZ3VtZW50cy4KICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgSlND
OjpKU1ZhbHVlIGhhbmRsZVBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBUKiBpbXBs
KQorICAgIGlubGluZSBKU0M6OkpTVmFsdWUgaGFuZGxlUG9zdE1lc3NhZ2UoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBUKiBpbXBsKQogICAgIHsKICAgICAgICAgTWVzc2FnZVBvcnRBcnJheSBwb3J0
QXJyYXk7CiAgICAgICAgIEFycmF5QnVmZmVyQXJyYXkgYXJyYXlCdWZmZXJBcnJheTsKLSAgICAg
ICAgZmlsbE1lc3NhZ2VQb3J0QXJyYXkoZXhlYywgZXhlYy0+YXJndW1lbnQoMSksIHBvcnRBcnJh
eSwgYXJyYXlCdWZmZXJBcnJheSk7Ci0gICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IG1lc3NhZ2UgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBleGVjLT5h
cmd1bWVudCgwKSwgJnBvcnRBcnJheSwgJmFycmF5QnVmZmVyQXJyYXkpOwotICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGZpbGxNZXNzYWdlUG9ydEFycmF5KHN0YXRl
LCBzdGF0ZS5hcmd1bWVudCgxKSwgcG9ydEFycmF5LCBhcnJheUJ1ZmZlckFycmF5KTsKKyAgICAg
ICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSA9IFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6Y3JlYXRlKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksICZwb3J0QXJyYXksICZh
cnJheUJ1ZmZlckFycmF5KTsKKyAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKIAogICAgICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKICAgICAgICAgaW1wbC0+cG9zdE1lc3NhZ2UobWVzc2FnZS5yZWxlYXNlKCks
ICZwb3J0QXJyYXksIGVjKTsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAgICAgICByZXR1cm4gSlNDOjpq
c1VuZGVmaW5lZCgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nc0N1c3RvbS5jcHAKaW5k
ZXggOWJjMTRlYjNhMzQ2YWJjNGMzYTJiMmM1NWNlNzY4YjFjMTZjMjRiMy4uYzQ2OGFhZDZhNjE0
ZTQ5ZjJhN2ZjOTkyMmVjMmJhZDI0MjQyZWM1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzQ3VzdG9tLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3NDdXN0
b20uY3BwCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIERlY2lz
aW9uID0gTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nczo6RGVjaXNpb247CiB1c2luZyBEZWNpc2lv
blBvaW50ID0gTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nczo6RGVjaXNpb25Qb2ludDsKIAotSlNW
YWx1ZSBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OmRlY2lzaW9uUG9pbnQoRXhlY1N0YXRl
KikgY29uc3QKK0pTVmFsdWUgSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzOjpkZWNpc2lvblBv
aW50KEV4ZWNTdGF0ZSYpIGNvbnN0CiB7CiAgICAgRGVjaXNpb25Qb2ludCBkZWNpc2lvblBvaW50
ID0gaW1wbCgpLmRlY2lzaW9uUG9pbnQoKTsKICAgICBzd2l0Y2ggKGRlY2lzaW9uUG9pbnQpIHsK
QEAgLTU1LDEwICs1NSwxMCBAQCBKU1ZhbHVlIEpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nczo6
ZGVjaXNpb25Qb2ludChFeGVjU3RhdGUqKSBjb25zdAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQogCi12b2lkIEpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nczo6c2V0RGVjaXNpb25Qb2lu
dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit2b2lkIEpTTW9ja0NvbnRlbnRGaWx0
ZXJTZXR0aW5nczo6c2V0RGVjaXNpb25Qb2ludChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZh
bHVlKQogewotICAgIHVpbnQ4X3QgbmF0aXZlVmFsdWUgeyB0b1VJbnQ4KGV4ZWMsIHZhbHVlLCBF
bmZvcmNlUmFuZ2UpIH07Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIHVpbnQ4
X3QgbmF0aXZlVmFsdWUgeyB0b1VJbnQ4KCZzdGF0ZSwgdmFsdWUsIEVuZm9yY2VSYW5nZSkgfTsK
KyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIERl
Y2lzaW9uUG9pbnQgZGVjaXNpb25Qb2ludCB7IHN0YXRpY19jYXN0PERlY2lzaW9uUG9pbnQ+KG5h
dGl2ZVZhbHVlKSB9OwpAQCAtNzMsNyArNzMsNyBAQCB2b2lkIEpTTW9ja0NvbnRlbnRGaWx0ZXJT
ZXR0aW5nczo6c2V0RGVjaXNpb25Qb2ludChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaW5n
Ojpmb3JtYXQoIiV1IGlzIG5vdCBhIHZhbGlkIGRlY2lzaW9uUG9pbnQgdmFsdWUuIiwgbmF0aXZl
VmFsdWUpKTsKKyAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIFN0cmluZzo6Zm9ybWF0KCIldSBp
cyBub3QgYSB2YWxpZCBkZWNpc2lvblBvaW50IHZhbHVlLiIsIG5hdGl2ZVZhbHVlKSk7CiB9CiAK
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSB0b0pTVmFsdWUoRGVjaXNpb24gZGVjaXNpb24pCkBAIC04
OCwxMCArODgsMTAgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIHRvSlNWYWx1ZShEZWNpc2lvbiBk
ZWNpc2lvbikKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBE
ZWNpc2lvbiB0b0RlY2lzaW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3N0YXRp
YyBpbmxpbmUgRGVjaXNpb24gdG9EZWNpc2lvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZh
bHVlKQogewotICAgIHVpbnQ4X3QgbmF0aXZlVmFsdWUgeyB0b1VJbnQ4KGV4ZWMsIHZhbHVlLCBF
bmZvcmNlUmFuZ2UpIH07Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIHVpbnQ4
X3QgbmF0aXZlVmFsdWUgeyB0b1VJbnQ4KCZzdGF0ZSwgdmFsdWUsIEVuZm9yY2VSYW5nZSkgfTsK
KyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBEZWNpc2lvbjo6
QWxsb3c7CiAKICAgICBEZWNpc2lvbiBkZWNpc2lvbiB7IHN0YXRpY19jYXN0PERlY2lzaW9uPihu
YXRpdmVWYWx1ZSkgfTsKQEAgLTEwMSwzMyArMTAxLDMzIEBAIHN0YXRpYyBpbmxpbmUgRGVjaXNp
b24gdG9EZWNpc2lvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiAgICAgICAgIHJl
dHVybiBkZWNpc2lvbjsKICAgICB9CiAKLSAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpbmc6
OmZvcm1hdCgiJXUgaXMgbm90IGEgdmFsaWQgZGVjaXNpb24gdmFsdWUuIiwgbmF0aXZlVmFsdWUp
KTsKKyAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIFN0cmluZzo6Zm9ybWF0KCIldSBpcyBub3Qg
YSB2YWxpZCBkZWNpc2lvbiB2YWx1ZS4iLCBuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiBEZWNp
c2lvbjo6QWxsb3c7CiB9CiAKLUpTVmFsdWUgSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzOjpk
ZWNpc2lvbihFeGVjU3RhdGUqKSBjb25zdAorSlNWYWx1ZSBKU01vY2tDb250ZW50RmlsdGVyU2V0
dGluZ3M6OmRlY2lzaW9uKEV4ZWNTdGF0ZSYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRvSlNWYWx1
ZShpbXBsKCkuZGVjaXNpb24oKSk7CiB9CiAKLXZvaWQgSlNNb2NrQ29udGVudEZpbHRlclNldHRp
bmdzOjpzZXREZWNpc2lvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit2b2lkIEpT
TW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nczo6c2V0RGVjaXNpb24oRXhlY1N0YXRlJiBzdGF0ZSwg
SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBEZWNpc2lvbiBkZWNpc2lvbiB7IHRvRGVjaXNpb24oZXhl
YywgdmFsdWUpIH07Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIERlY2lzaW9u
IGRlY2lzaW9uIHsgdG9EZWNpc2lvbihzdGF0ZSwgdmFsdWUpIH07CisgICAgaWYgKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAKICAgICBpbXBsKCkuc2V0RGVjaXNpb24o
ZGVjaXNpb24pOwogfQogCi1KU1ZhbHVlIEpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nczo6dW5i
bG9ja1JlcXVlc3REZWNpc2lvbihFeGVjU3RhdGUqKSBjb25zdAorSlNWYWx1ZSBKU01vY2tDb250
ZW50RmlsdGVyU2V0dGluZ3M6OnVuYmxvY2tSZXF1ZXN0RGVjaXNpb24oRXhlY1N0YXRlJikgY29u
c3QKIHsKICAgICByZXR1cm4gdG9KU1ZhbHVlKGltcGwoKS51bmJsb2NrUmVxdWVzdERlY2lzaW9u
KCkpOwogfQogCi12b2lkIEpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nczo6c2V0VW5ibG9ja1Jl
cXVlc3REZWNpc2lvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit2b2lkIEpTTW9j
a0NvbnRlbnRGaWx0ZXJTZXR0aW5nczo6c2V0VW5ibG9ja1JlcXVlc3REZWNpc2lvbihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIERlY2lzaW9uIHVuYmxvY2tSZXF1ZXN0
RGVjaXNpb24geyB0b0RlY2lzaW9uKGV4ZWMsIHZhbHVlKSB9OwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBEZWNpc2lvbiB1bmJsb2NrUmVxdWVzdERlY2lzaW9uIHsgdG9EZWNp
c2lvbihzdGF0ZSwgdmFsdWUpIH07CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpbXBsKCkuc2V0VW5ibG9ja1JlcXVlc3REZWNpc2lvbih1bmJs
b2NrUmVxdWVzdERlY2lzaW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TmF2aWdhdG9yQ3VzdG9tLmNwcAppbmRleCAyYWYzNTYzOGQyMTFlNjY0NzBmOTU1MmVmYWIzYmNm
ZmI1MTdhNTA4Li4zZDVmZTEyNDg2NDg2MzRhNjRhMWQ4OTc1YzRhYzFiYzNkMWJkOWI4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwCkBA
IC00Miw0MSArNDIsNDEgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1KU1ZhbHVlIEpTTmF2aWdhdG9yOjp3ZWJraXRHZXRVc2VyTWVkaWEoRXhlY1N0YXRl
KiBleGVjKQorSlNWYWx1ZSBKU05hdmlnYXRvcjo6d2Via2l0R2V0VXNlck1lZGlhKEV4ZWNTdGF0
ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDMpIHsKLSAgICAg
ICAgdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMp
KTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpIDwgMykgeworICAgICAgICB0aHJvd1ZN
RXJyb3IoJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgRGljdGlvbmFyeSBvcHRp
b25zKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgRGljdGlvbmFyeSBvcHRpb25zKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCkpOwor
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAKICAgICBpZiAoIW9wdGlvbnMuaXNPYmplY3QoKSkgewotICAgICAgICB0aHJvd1ZNRXJy
b3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJGaXJzdCBhcmd1bWVudCBvZiB3ZWJraXRH
ZXRVc2VyTWVkaWEgbXVzdCBiZSBhIHZhbGlkIERpY3Rpb25hcnkiKSk7CisgICAgICAgIHRocm93
Vk1FcnJvcigmc3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJGaXJzdCBhcmd1bWVudCBv
ZiB3ZWJraXRHZXRVc2VyTWVkaWEgbXVzdCBiZSBhIHZhbGlkIERpY3Rpb25hcnkiKSk7CiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIGlmICghZXhlYy0+YXJndW1l
bnQoMSkuaXNGdW5jdGlvbigpKSB7Ci0gICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgIkFy
Z3VtZW50IDIgKCdzdWNjZXNzQ2FsbGJhY2snKSB0byBOYXZpZ2F0b3Iud2Via2l0R2V0VXNlck1l
ZGlhIG11c3QgYmUgYSBmdW5jdGlvbiIpOworICAgIGlmICghc3RhdGUuYXJndW1lbnQoMSkuaXNG
dW5jdGlvbigpKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCAiQXJndW1lbnQg
MiAoJ3N1Y2Nlc3NDYWxsYmFjaycpIHRvIE5hdmlnYXRvci53ZWJraXRHZXRVc2VyTWVkaWEgbXVz
dCBiZSBhIGZ1bmN0aW9uIik7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0K
IAotICAgIGlmICghZXhlYy0+YXJndW1lbnQoMikuaXNGdW5jdGlvbigpKSB7Ci0gICAgICAgIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYywgIkFyZ3VtZW50IDMgKCdlcnJvckNhbGxiYWNrJykgdG8gTmF2
aWdhdG9yLndlYmtpdEdldFVzZXJNZWRpYSBtdXN0IGJlIGEgZnVuY3Rpb24iKTsKKyAgICBpZiAo
IXN0YXRlLmFyZ3VtZW50KDIpLmlzRnVuY3Rpb24oKSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVy
cm9yKCZzdGF0ZSwgIkFyZ3VtZW50IDMgKCdlcnJvckNhbGxiYWNrJykgdG8gTmF2aWdhdG9yLndl
YmtpdEdldFVzZXJNZWRpYSBtdXN0IGJlIGEgZnVuY3Rpb24iKTsKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgaWYgKCFpbXBsKCkuZnJhbWUoKSkgewotICAgICAg
ICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRFRF9FUlIpOworICAgICAgICBzZXRE
T01FeGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VSUik7CiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIHByb3RlY3Qg
dGhlIGNvbnRleHQgKGkuZS4gZG9jdW1lbnQpIGhlcmUgYXMgVXNlck1lZGlhUmVxdWVzdCBpcyBv
YnNlcnZpbmcgY29udGV4dCBkZXN0cnVjdGlvbiBhbmQgd2lsbCBjaGVjayB2YWxpZGl0eSBiZWZv
cmUgcmVzb2x2aW5nL3JlamVjdGluZyBwcm9taXNlLgogICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IGltcGwoKS5mcmFtZSgpLT5kb2N1bWVudCgpOwogCi0gICAgUmVmUHRyPE5hdmlnYXRvclVzZXJN
ZWRpYVN1Y2Nlc3NDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrID0gSlNOYXZpZ2F0b3JVc2VyTWVk
aWFTdWNjZXNzQ2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgxKSksIGdsb2JhbE9iamVjdCgpKTsKKyAgICBSZWZQdHI8TmF2aWdhdG9yVXNlck1lZGlhU3Vj
Y2Vzc0NhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2sgPSBKU05hdmlnYXRvclVzZXJNZWRpYVN1Y2Nl
c3NDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpKSwg
Z2xvYmFsT2JqZWN0KCkpOwogICAgIGF1dG8gcmVzb2x2ZUNhbGxiYWNrID0gW3N1Y2Nlc3NDYWxs
YmFjaywgZG9jdW1lbnRdKGNvbnN0IFJlZlB0cjxNZWRpYVN0cmVhbT4mIHN0cmVhbSkgbXV0YWJs
ZSB7CiAgICAgICAgIFJlZlB0cjxNZWRpYVN0cmVhbT4gcHJvdGVjdGVkU3RyZWFtID0gc3RyZWFt
OwogICAgICAgICBkb2N1bWVudC0+cG9zdFRhc2soW3N1Y2Nlc3NDYWxsYmFjaywgcHJvdGVjdGVk
U3RyZWFtXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgewpAQCAtODQsNyArODQsNyBAQCBKU1Zh
bHVlIEpTTmF2aWdhdG9yOjp3ZWJraXRHZXRVc2VyTWVkaWEoRXhlY1N0YXRlKiBleGVjKQogICAg
ICAgICB9KTsKICAgICB9OwogCi0gICAgUmVmUHRyPE5hdmlnYXRvclVzZXJNZWRpYUVycm9yQ2Fs
bGJhY2s+IGVycm9yQ2FsbGJhY2sgPSBKU05hdmlnYXRvclVzZXJNZWRpYUVycm9yQ2FsbGJhY2s6
OmNyZWF0ZShhc09iamVjdChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKSksIGdsb2JhbE9iamVj
dCgpKTsKKyAgICBSZWZQdHI8TmF2aWdhdG9yVXNlck1lZGlhRXJyb3JDYWxsYmFjaz4gZXJyb3JD
YWxsYmFjayA9IEpTTmF2aWdhdG9yVXNlck1lZGlhRXJyb3JDYWxsYmFjazo6Y3JlYXRlKGFzT2Jq
ZWN0KHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpKSwgZ2xvYmFsT2JqZWN0KCkpOwogICAgIGF1
dG8gcmVqZWN0Q2FsbGJhY2sgPSBbZXJyb3JDYWxsYmFjaywgZG9jdW1lbnRdKGNvbnN0IFJlZlB0
cjxOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvcj4mIGVycm9yKSBtdXRhYmxlIHsKICAgICAgICAgUmVm
UHRyPE5hdmlnYXRvclVzZXJNZWRpYUVycm9yPiBwcm90ZWN0ZWRFcnJvciA9IGVycm9yOwogICAg
ICAgICBkb2N1bWVudC0+cG9zdFRhc2soW2Vycm9yQ2FsbGJhY2ssIHByb3RlY3RlZEVycm9yXShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JikgewpAQCAtOTQsNyArOTQsNyBAQCBKU1ZhbHVlIEpTTmF2
aWdhdG9yOjp3ZWJraXRHZXRVc2VyTWVkaWEoRXhlY1N0YXRlKiBleGVjKQogCiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CiAgICAgVXNlck1lZGlhUmVxdWVzdDo6c3RhcnQoZG9jdW1lbnQsIG9w
dGlvbnMsIE1lZGlhRGV2aWNlczo6UHJvbWlzZShXVEY6Om1vdmUocmVzb2x2ZUNhbGxiYWNrKSwg
V1RGOjptb3ZlKHJlamVjdENhbGxiYWNrKSksIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNOb2RlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3Rv
bS5jcHAKaW5kZXggYWVhYzA4N2Q5ZGNmYTUxMTA3OTNkMmZmMmM5YWZjMjNlMTJiODE1Mi4uZGVl
ZTY3NWE5MjUxMjEwNTRmMTcyMzI3ZTUzNmFhNGRmOGU1Zjc1OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCkBAIC0xMTMsNDMgKzExMyw0MyBAQCBib29s
IEpTTm9kZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkpTQ2VsbCYgY2Vs
bCwgdm9pZCosIFNsb3RWaXNpdAogICAgIHJldHVybiBpc1JlYWNoYWJsZUZyb21ET00oanNOb2Rl
LmltcGwoKSwgdmlzaXRvcik7CiB9CiAKLUpTVmFsdWUgSlNOb2RlOjppbnNlcnRCZWZvcmUoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU05vZGU6Omluc2VydEJlZm9yZShFeGVjU3RhdGUmIHN0
YXRlKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGJvb2wgb2sgPSBpbXBsKCku
aW5zZXJ0QmVmb3JlKEpTTm9kZTo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDApKSwgSlNOb2Rl
Ojp0b1dyYXBwZWQoZXhlYy0+YXJndW1lbnQoMSkpLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIGVjKTsKKyAgICBib29sIG9rID0gaW1wbCgpLmluc2VydEJlZm9yZShKU05vZGU6OnRv
V3JhcHBlZChzdGF0ZS5hcmd1bWVudCgwKSksIEpTTm9kZTo6dG9XcmFwcGVkKHN0YXRlLmFyZ3Vt
ZW50KDEpKSwgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICBpZiAo
b2spCi0gICAgICAgIHJldHVybiBleGVjLT5hcmd1bWVudCgwKTsKKyAgICAgICAgcmV0dXJuIHN0
YXRlLmFyZ3VtZW50KDApOwogICAgIHJldHVybiBqc051bGwoKTsKIH0KIAotSlNWYWx1ZSBKU05v
ZGU6OnJlcGxhY2VDaGlsZChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTTm9kZTo6cmVwbGFj
ZUNoaWxkKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgYm9vbCBvayA9IGltcGwoKS5yZXBsYWNlQ2hpbGQoSlNOb2RlOjp0b1dyYXBwZWQoZXhlYy0+
YXJndW1lbnQoMCkpLCBKU05vZGU6OnRvV3JhcHBlZChleGVjLT5hcmd1bWVudCgxKSksIGVjKTsK
LSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIGJvb2wgb2sgPSBpbXBsKCkucmVw
bGFjZUNoaWxkKEpTTm9kZTo6dG9XcmFwcGVkKHN0YXRlLmFyZ3VtZW50KDApKSwgSlNOb2RlOjp0
b1dyYXBwZWQoc3RhdGUuYXJndW1lbnQoMSkpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZz
dGF0ZSwgZWMpOwogICAgIGlmIChvaykKLSAgICAgICAgcmV0dXJuIGV4ZWMtPmFyZ3VtZW50KDEp
OworICAgICAgICByZXR1cm4gc3RhdGUuYXJndW1lbnQoMSk7CiAgICAgcmV0dXJuIGpzTnVsbCgp
OwogfQogCi1KU1ZhbHVlIEpTTm9kZTo6cmVtb3ZlQ2hpbGQoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU05vZGU6OnJlbW92ZUNoaWxkKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgYm9vbCBvayA9IGltcGwoKS5yZW1vdmVDaGlsZChKU05vZGU6
OnRvV3JhcHBlZChleGVjLT5hcmd1bWVudCgwKSksIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgZWMpOworICAgIGJvb2wgb2sgPSBpbXBsKCkucmVtb3ZlQ2hpbGQoSlNOb2RlOjp0b1dy
YXBwZWQoc3RhdGUuYXJndW1lbnQoMCkpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0
ZSwgZWMpOwogICAgIGlmIChvaykKLSAgICAgICAgcmV0dXJuIGV4ZWMtPmFyZ3VtZW50KDApOwor
ICAgICAgICByZXR1cm4gc3RhdGUuYXJndW1lbnQoMCk7CiAgICAgcmV0dXJuIGpzTnVsbCgpOwog
fQogCi1KU1ZhbHVlIEpTTm9kZTo6YXBwZW5kQ2hpbGQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU05vZGU6OmFwcGVuZENoaWxkKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgYm9vbCBvayA9IGltcGwoKS5hcHBlbmRDaGlsZChKU05vZGU6OnRv
V3JhcHBlZChleGVjLT5hcmd1bWVudCgwKSksIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgZWMpOworICAgIGJvb2wgb2sgPSBpbXBsKCkuYXBwZW5kQ2hpbGQoSlNOb2RlOjp0b1dyYXBw
ZWQoc3RhdGUuYXJndW1lbnQoMCkpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwg
ZWMpOwogICAgIGlmIChvaykKLSAgICAgICAgcmV0dXJuIGV4ZWMtPmFyZ3VtZW50KDApOworICAg
ICAgICByZXR1cm4gc3RhdGUuYXJndW1lbnQoMCk7CiAgICAgcmV0dXJuIGpzTnVsbCgpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09zY2lsbGF0b3JOb2Rl
Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTT3NjaWxsYXRvck5vZGVD
dXN0b20uY3BwCmluZGV4IDAyYzJhYmUyNWU1NzgxNTg1MTEzYzY2NWU5ZWY4NzY3OGY1Y2Q2MTIu
Ljk4Yzg4MTQ5ZjM5ZTJiMGNiYTgxZDM1MmU1YjliZGIyOTA1Y2IyOTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTT3NjaWxsYXRvck5vZGVDdXN0b20uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTT3NjaWxsYXRvck5vZGVDdXN0b20uY3BwCkBA
IC0zNywyOCArMzcsMjggQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi12b2lkIEpTT3NjaWxsYXRvck5vZGU6OnNldFR5cGUoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHZhbHVlKQordm9pZCBKU09zY2lsbGF0b3JOb2RlOjpzZXRUeXBlKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgT3NjaWxsYXRvck5vZGUmIGltcCA9IGltcGwo
KTsKIAogI2lmIEVOQUJMRShMRUdBQ1lfV0VCX0FVRElPKQogICAgIGlmICh2YWx1ZS5pc051bWJl
cigpKSB7Ci0gICAgICAgIHVpbnQzMl90IHR5cGUgPSB2YWx1ZS50b1VJbnQzMihleGVjKTsKKyAg
ICAgICAgdWludDMyX3QgdHlwZSA9IHZhbHVlLnRvVUludDMyKCZzdGF0ZSk7CiAgICAgICAgIGlm
ICghaW1wLnNldFR5cGUodHlwZSkpCi0gICAgICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0
aW9uKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiSWxsZWdhbCBPc2NpbGxhdG9yTm9kZSB0
eXBlIikpOworICAgICAgICAgICAgc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNy
ZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJJbGxlZ2FsIE9zY2lsbGF0b3JOb2RlIHR5cGUiKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKIAogICAgIGlmICh2YWx1ZS5pc1N0cmluZygp
KSB7Ci0gICAgICAgIFN0cmluZyB0eXBlID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOworICAgICAgICBTdHJpbmcgdHlwZSA9IHZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVl
KCZzdGF0ZSk7CiAgICAgICAgIGlmICh0eXBlID09ICJzaW5lIiB8fCB0eXBlID09ICJzcXVhcmUi
IHx8IHR5cGUgPT0gInNhd3Rvb3RoIiB8fCB0eXBlID09ICJ0cmlhbmdsZSIpIHsKICAgICAgICAg
ICAgIGltcC5zZXRUeXBlKHR5cGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgfQogICAgIAotICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlVHlw
ZUVycm9yKGV4ZWMsICJJbGxlZ2FsIE9zY2lsbGF0b3JOb2RlIHR5cGUiKSk7CisgICAgc3RhdGUu
dm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJJbGxl
Z2FsIE9zY2lsbGF0b3JOb2RlIHR5cGUiKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFubmVyTm9kZUN1c3Rv
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Bhbm5lck5vZGVDdXN0b20uY3Bw
CmluZGV4IDA1YWFiNjk4Y2Q1OTRmM2NhMmEzYjg4MmVjNWUzNzM3ZDFkZjExYjUuLjg2YzAzZWQz
ZmI4OTI1OWFjZjk4Y2UzMzJhNjkyNDI4N2VlM2IwMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUGFubmVyTm9kZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNQYW5uZXJOb2RlQ3VzdG9tLmNwcApAQCAtMzcsNTIgKzM3LDUyIEBA
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1Bh
bm5lck5vZGU6OnNldFBhbm5pbmdNb2RlbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUp
Cit2b2lkIEpTUGFubmVyTm9kZTo6c2V0UGFubmluZ01vZGVsKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VmFsdWUgdmFsdWUpCiB7CiAgICAgUGFubmVyTm9kZSYgaW1wID0gaW1wbCgpOwogCiAjaWYgRU5B
QkxFKExFR0FDWV9XRUJfQVVESU8pCiAgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpIHsKLSAgICAg
ICAgdWludDMyX3QgbW9kZWwgPSB2YWx1ZS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgdWludDMy
X3QgbW9kZWwgPSB2YWx1ZS50b1VJbnQzMigmc3RhdGUpOwogICAgICAgICBpZiAoIWltcC5zZXRQ
YW5uaW5nTW9kZWwobW9kZWwpKQotICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlv
bihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIklsbGVnYWwgcGFubmluZ01vZGVsIikpOwor
ICAgICAgICAgICAgc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZVR5cGVF
cnJvcigmc3RhdGUsICJJbGxlZ2FsIHBhbm5pbmdNb2RlbCIpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICNlbmRpZgogCiAgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgU3Ry
aW5nIG1vZGVsID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgICAgICBT
dHJpbmcgbW9kZWwgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwogICAg
ICAgICBpZiAobW9kZWwgPT0gImVxdWFscG93ZXIiIHx8IG1vZGVsID09ICJIUlRGIiB8fCBtb2Rl
bCA9PSAic291bmRmaWVsZCIpIHsKICAgICAgICAgICAgIGltcC5zZXRQYW5uaW5nTW9kZWwobW9k
ZWwpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGV4
ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJJbGxl
Z2FsIHBhbm5pbmdNb2RlbCIpKTsKKyAgICBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0
ZSwgY3JlYXRlVHlwZUVycm9yKCZzdGF0ZSwgIklsbGVnYWwgcGFubmluZ01vZGVsIikpOwogfQog
Ci12b2lkIEpTUGFubmVyTm9kZTo6c2V0RGlzdGFuY2VNb2RlbChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUpCit2b2lkIEpTUGFubmVyTm9kZTo6c2V0RGlzdGFuY2VNb2RlbChFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIFBhbm5lck5vZGUmIGltcCA9IGltcGwo
KTsKIAogI2lmIEVOQUJMRShMRUdBQ1lfV0VCX0FVRElPKQogICAgIGlmICh2YWx1ZS5pc051bWJl
cigpKSB7Ci0gICAgICAgIHVpbnQzMl90IG1vZGVsID0gdmFsdWUudG9VSW50MzIoZXhlYyk7Cisg
ICAgICAgIHVpbnQzMl90IG1vZGVsID0gdmFsdWUudG9VSW50MzIoJnN0YXRlKTsKICAgICAgICAg
aWYgKCFpbXAuc2V0RGlzdGFuY2VNb2RlbChtb2RlbCkpCi0gICAgICAgICAgICBleGVjLT52bSgp
LnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiSWxsZWdhbCBkaXN0
YW5jZU1vZGVsIikpOworICAgICAgICAgICAgc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3Rh
dGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJJbGxlZ2FsIGRpc3RhbmNlTW9kZWwiKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKIAogICAgIGlmICh2YWx1ZS5pc1N0cmluZygp
KSB7Ci0gICAgICAgIFN0cmluZyBtb2RlbCA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKKyAgICAgICAgU3RyaW5nIG1vZGVsID0gdmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dmFs
dWUoJnN0YXRlKTsKICAgICAgICAgaWYgKG1vZGVsID09ICJsaW5lYXIiIHx8IG1vZGVsID09ICJp
bnZlcnNlIiB8fCBtb2RlbCA9PSAiZXhwb25lbnRpYWwiKSB7CiAgICAgICAgICAgICBpbXAuc2V0
RGlzdGFuY2VNb2RlbChtb2RlbCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICB9CiAgICAgCi0gICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVUeXBl
RXJyb3IoZXhlYywgIklsbGVnYWwgZGlzdGFuY2VNb2RlbCIpKTsKKyAgICBzdGF0ZS52bSgpLnRo
cm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlVHlwZUVycm9yKCZzdGF0ZSwgIklsbGVnYWwgZGlz
dGFuY2VNb2RlbCIpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAKaW5kZXgg
NTAyZTQ4YmZhYThmM2FlOTAzMWI4ZmEwNGFmOGEwMDJjM2E1M2JhNS4uNTVmZTk0YmQ5ZGZlZmU2
ZDIwZTQxN2MzMjcyZmVmNTA5ZWI2NDNmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1BvcFN0YXRlRXZlbnRDdXN0b20uY3BwCkBAIC00MCwxOCArNDAsMTggQEAg
dXNpbmcgbmFtZXNwYWNlIEpTQzsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gU2F2ZSB0aGUg
c3RhdGUgdmFsdWUgdG8gdGhlIG1fc3RhdGUgbWVtYmVyIG9mIGEgSlNQb3BTdGF0ZUV2ZW50LCBh
bmQgcmV0dXJuIGl0LCBmb3IgY29udmVuaWVuY2UuCi1zdGF0aWMgY29uc3QgSlNWYWx1ZSYgY2Fj
aGVTdGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTUG9wU3RhdGVFdmVudCogZXZlbnQsIGNvbnN0IEpT
VmFsdWUmIHN0YXRlKQorc3RhdGljIGNvbnN0IEpTVmFsdWUmIGNhY2hlU3RhdGUoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNQb3BTdGF0ZUV2ZW50KiBldmVudCwgY29uc3QgSlNWYWx1ZSYgZXZlbnRTdGF0
ZSkKIHsKLSAgICBldmVudC0+bV9zdGF0ZS5zZXQoZXhlYy0+dm0oKSwgZXZlbnQsIHN0YXRlKTsK
LSAgICByZXR1cm4gc3RhdGU7CisgICAgZXZlbnQtPm1fc3RhdGUuc2V0KHN0YXRlLnZtKCksIGV2
ZW50LCBldmVudFN0YXRlKTsKKyAgICByZXR1cm4gZXZlbnRTdGF0ZTsKIH0KIAotSlNWYWx1ZSBK
U1BvcFN0YXRlRXZlbnQ6OnN0YXRlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgSlNQ
b3BTdGF0ZUV2ZW50OjpzdGF0ZShFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewogICAgIEpTVmFs
dWUgY2FjaGVkVmFsdWUgPSBtX3N0YXRlLmdldCgpOwogICAgIGlmICghY2FjaGVkVmFsdWUuaXNF
bXB0eSgpKSB7CiAgICAgICAgIC8vIFdlIGNhbm5vdCB1c2UgYSBjYWNoZWQgb2JqZWN0IGlmIHdl
IGFyZSBpbiBhIGRpZmZlcmVudCB3b3JsZCB0aGFuIHRoZSBvbmUgaXQgd2FzIGNyZWF0ZWQgaW4u
Ci0gICAgICAgIGlmICghY2FjaGVkVmFsdWUuaXNPYmplY3QoKSB8fCAmd29ybGRGb3JET01PYmpl
Y3QoY2FjaGVkVmFsdWUuZ2V0T2JqZWN0KCkpID09ICZjdXJyZW50V29ybGQoZXhlYykpCisgICAg
ICAgIGlmICghY2FjaGVkVmFsdWUuaXNPYmplY3QoKSB8fCAmd29ybGRGb3JET01PYmplY3QoY2Fj
aGVkVmFsdWUuZ2V0T2JqZWN0KCkpID09ICZjdXJyZW50V29ybGQoJnN0YXRlKSkKICAgICAgICAg
ICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgfQpAQCAtNjEsMjAgKzYxLDIwIEBAIEpTVmFsdWUgSlNQb3BTdGF0ZUV2ZW50OjpzdGF0ZShF
eGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgaWYgKCFldmVudC5zdGF0ZSgpLmhhc05vVmFsdWUo
KSkgewogICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSBhIFBvcFN0YXRlRXZlbnQgZG9l
cyBub3QgbGVhayBvYmplY3RzIGluIGl0cyBzdGF0ZSBwcm9wZXJ0eSBhY3Jvc3MgaXNvbGF0ZWQg
RE9NIHdvcmxkcy4KICAgICAgICAgLy8gSWRlYWxseSwgd2Ugd291bGQgY2hlY2sgdGhhdCB0aGUg
d29ybGRzIGhhdmUgZGlmZmVyZW50IHByaXZpbGVnZXMgYnV0IHRoYXQncyBub3QgcG9zc2libGUg
eWV0LgotICAgICAgICBKU1ZhbHVlIHN0YXRlID0gZXZlbnQuc3RhdGUoKS5qc1ZhbHVlKCk7Ci0g
ICAgICAgIGlmIChzdGF0ZS5pc09iamVjdCgpICYmICZ3b3JsZEZvckRPTU9iamVjdChzdGF0ZS5n
ZXRPYmplY3QoKSkgIT0gJmN1cnJlbnRXb3JsZChleGVjKSkgewotICAgICAgICAgICAgaWYgKFJl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IGV2ZW50LnRyeVNl
cmlhbGl6ZVN0YXRlKGV4ZWMpKQotICAgICAgICAgICAgICAgIHN0YXRlID0gc2VyaWFsaXplZFZh
bHVlLT5kZXNlcmlhbGl6ZShleGVjLCBnbG9iYWxPYmplY3QoKSwgbnVsbHB0cik7CisgICAgICAg
IEpTVmFsdWUgZXZlbnRTdGF0ZSA9IGV2ZW50LnN0YXRlKCkuanNWYWx1ZSgpOworICAgICAgICBp
ZiAoZXZlbnRTdGF0ZS5pc09iamVjdCgpICYmICZ3b3JsZEZvckRPTU9iamVjdChldmVudFN0YXRl
LmdldE9iamVjdCgpKSAhPSAmY3VycmVudFdvcmxkKCZzdGF0ZSkpIHsKKyAgICAgICAgICAgIGlm
IChSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBldmVudC50
cnlTZXJpYWxpemVTdGF0ZSgmc3RhdGUpKQorICAgICAgICAgICAgICAgIGV2ZW50U3RhdGUgPSBz
ZXJpYWxpemVkVmFsdWUtPmRlc2VyaWFsaXplKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIG51bGxw
dHIpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0YXRlID0ganNOdWxsKCk7
CisgICAgICAgICAgICAgICAgZXZlbnRTdGF0ZSA9IGpzTnVsbCgpOwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICByZXR1cm4gY2FjaGVTdGF0ZShleGVjLCBjb25zdF9jYXN0PEpTUG9wU3Rh
dGVFdmVudCo+KHRoaXMpLCBzdGF0ZSk7CisgICAgICAgIHJldHVybiBjYWNoZVN0YXRlKHN0YXRl
LCBjb25zdF9jYXN0PEpTUG9wU3RhdGVFdmVudCo+KHRoaXMpLCBldmVudFN0YXRlKTsKICAgICB9
CiAgICAgCiAgICAgSGlzdG9yeSogaGlzdG9yeSA9IGV2ZW50Lmhpc3RvcnkoKTsKICAgICBpZiAo
IWhpc3RvcnkgfHwgIWV2ZW50LnNlcmlhbGl6ZWRTdGF0ZSgpKQotICAgICAgICByZXR1cm4gY2Fj
aGVTdGF0ZShleGVjLCBjb25zdF9jYXN0PEpTUG9wU3RhdGVFdmVudCo+KHRoaXMpLCBqc051bGwo
KSk7CisgICAgICAgIHJldHVybiBjYWNoZVN0YXRlKHN0YXRlLCBjb25zdF9jYXN0PEpTUG9wU3Rh
dGVFdmVudCo+KHRoaXMpLCBqc051bGwoKSk7CiAKICAgICAvLyBUaGVyZSdzIG5vIGNhY2hlZCB2
YWx1ZSBmcm9tIGEgcHJldmlvdXMgaW52b2NhdGlvbiwgbm9yIGEgc3RhdGUgdmFsdWUgd2FzIHBy
b3ZpZGVkIGJ5IHRoZQogICAgIC8vIGV2ZW50LCBidXQgdGhlcmUgaXMgYSBoaXN0b3J5IG9iamVj
dCwgc28gZmlyc3Qgd2UgbmVlZCB0byBzZWUgaWYgdGhlIHN0YXRlIG9iamVjdCBoYXMgYmVlbgpA
QCAtODYsMTIgKzg2LDEyIEBAIEpTVmFsdWUgSlNQb3BTdGF0ZUV2ZW50OjpzdGF0ZShFeGVjU3Rh
dGUqIGV4ZWMpIGNvbnN0CiAgICAgSlNWYWx1ZSByZXN1bHQ7CiAKICAgICBpZiAoaXNTYW1lU3Rh
dGUpIHsKLSAgICAgICAgSlNIaXN0b3J5KiBqc0hpc3RvcnkgPSBqc0Nhc3Q8SlNIaXN0b3J5Kj4o
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaGlzdG9yeSkuYXNDZWxsKCkpOwotICAgICAgICBy
ZXN1bHQgPSBqc0hpc3RvcnktPnN0YXRlKGV4ZWMpOworICAgICAgICBKU0hpc3RvcnkqIGpzSGlz
dG9yeSA9IGpzQ2FzdDxKU0hpc3RvcnkqPih0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIGhp
c3RvcnkpLmFzQ2VsbCgpKTsKKyAgICAgICAgcmVzdWx0ID0ganNIaXN0b3J5LT5zdGF0ZShzdGF0
ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGV2ZW50LnNlcmlhbGl6ZWRTdGF0ZSgp
LT5kZXNlcmlhbGl6ZShleGVjLCBnbG9iYWxPYmplY3QoKSwgMCk7CisgICAgICAgIHJlc3VsdCA9
IGV2ZW50LnNlcmlhbGl6ZWRTdGF0ZSgpLT5kZXNlcmlhbGl6ZSgmc3RhdGUsIGdsb2JhbE9iamVj
dCgpLCAwKTsKIAotICAgIHJldHVybiBjYWNoZVN0YXRlKGV4ZWMsIGNvbnN0X2Nhc3Q8SlNQb3BT
dGF0ZUV2ZW50Kj4odGhpcyksIHJlc3VsdCk7CisgICAgcmV0dXJuIGNhY2hlU3RhdGUoc3RhdGUs
IGNvbnN0X2Nhc3Q8SlNQb3BTdGF0ZUV2ZW50Kj4odGhpcyksIHJlc3VsdCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTUmVhZGFibGVTdHJlYW1DdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNSZWFkYWJsZVN0cmVhbUN1c3RvbS5jcHAKaW5kZXggMzQ4ZDE2YjJmZWJlNzk4N2QyZGQ2NmY1
Y2M4NjY1ZjVhN2MwZWU0YS4uOWNmMDk2YmFiYTYyMDgwNWMxNTUxZGM5YjVlYmNiYTlkY2E0ZTMy
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVh
bUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0
cmVhbUN1c3RvbS5jcHAKQEAgLTQ3LDE2ICs0NywxNiBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNSZWFkYWJsZVN0cmVhbTo6cGlwZVRv
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNSZWFkYWJsZVN0cmVhbTo6cGlwZVRvKEV4ZWNT
dGF0ZSYgc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSBlcnJvciA9IGNyZWF0ZUVycm9yKGV4ZWMsIEFT
Q0lJTGl0ZXJhbCgicGlwZVRvIGlzIG5vdCBpbXBsZW1lbnRlZCIpKTsKLSAgICByZXR1cm4gZXhl
Yy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBlcnJvcik7CisgICAgSlNWYWx1ZSBlcnJvciA9
IGNyZWF0ZUVycm9yKCZzdGF0ZSwgQVNDSUlMaXRlcmFsKCJwaXBlVG8gaXMgbm90IGltcGxlbWVu
dGVkIikpOworICAgIHJldHVybiBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgZXJy
b3IpOwogfQogCi1KU1ZhbHVlIEpTUmVhZGFibGVTdHJlYW06OnBpcGVUaHJvdWdoKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNSZWFkYWJsZVN0cmVhbTo6cGlwZVRocm91Z2goRXhlY1N0YXRl
JiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIGVycm9yID0gY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlM
aXRlcmFsKCJwaXBlVGhyb3VnaCBpcyBub3QgaW1wbGVtZW50ZWQiKSk7Ci0gICAgcmV0dXJuIGV4
ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXJyb3IpOworICAgIEpTVmFsdWUgZXJyb3Ig
PSBjcmVhdGVFcnJvcigmc3RhdGUsIEFTQ0lJTGl0ZXJhbCgicGlwZVRocm91Z2ggaXMgbm90IGlt
cGxlbWVudGVkIikpOworICAgIHJldHVybiBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0
ZSwgZXJyb3IpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtUmVhZGVyQ3VzdG9tLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1SZWFkZXJDdXN0b20u
Y3BwCmluZGV4IDA2M2FjY2IwNzZjODY2ZDdhOGZkZjZlMDRkNDBmZWQxZTQ0MWQwMTkuLjc1NjQy
ZjM1YjdkYTZjYzNkOGYzNTU4YjQyZjk0MjNjYjZmOWExYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1SZWFkZXJDdXN0b20uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1SZWFkZXJDdXN0b20u
Y3BwCkBAIC00NCwxMiArNDQsMTIgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTUmVhZGFibGVTdHJlYW1SZWFkZXI6OmNsb3NlZChFeGVj
U3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTUmVhZGFibGVTdHJlYW1SZWFkZXI6OmNsb3Nl
ZChFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewogICAgIGlmICghbV9jbG9zZWQpIHsKLSAgICAg
ICAgSlNQcm9taXNlRGVmZXJyZWQqIGNsb3NlZFByb21pc2UgPSBKU1Byb21pc2VEZWZlcnJlZDo6
Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCgpKTsKLSAgICAgICAgY29uc3RfY2FzdDxKU1JlYWRh
YmxlU3RyZWFtUmVhZGVyKj4odGhpcyktPm1fY2xvc2VkLnNldChleGVjLT52bSgpLCB0aGlzLCBj
bG9zZWRQcm9taXNlLT5wcm9taXNlKCkpOwotICAgICAgICBpbXBsKCkuY2xvc2VkKERlZmVycmVk
V3JhcHBlcihleGVjLCBnbG9iYWxPYmplY3QoKSwgY2xvc2VkUHJvbWlzZSkpOworICAgICAgICBK
U1Byb21pc2VEZWZlcnJlZCogY2xvc2VkUHJvbWlzZSA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVh
dGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSk7CisgICAgICAgIGNvbnN0X2Nhc3Q8SlNSZWFkYWJs
ZVN0cmVhbVJlYWRlcio+KHRoaXMpLT5tX2Nsb3NlZC5zZXQoc3RhdGUudm0oKSwgdGhpcywgY2xv
c2VkUHJvbWlzZS0+cHJvbWlzZSgpKTsKKyAgICAgICAgaW1wbCgpLmNsb3NlZChEZWZlcnJlZFdy
YXBwZXIoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgY2xvc2VkUHJvbWlzZSkpOwogICAgIH0KICAg
ICByZXR1cm4gbV9jbG9zZWQuZ2V0KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcAppbmRleCA4Yzll
YjhmOWMxOWY5MGEwMGEzNmRmNTM1Zjk5M2JhYzdhMTNlYmViLi40OWEwZWZkYzQ1ODVjZDI1ZDFk
MmU0NWFjMTM4NzM0MzNmOTUyYTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAKQEAgLTM5LDIwICsz
OSwyMCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpT
VmFsdWUgSlNTUUxSZXN1bHRTZXRSb3dMaXN0OjppdGVtKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFs
dWUgSlNTUUxSZXN1bHRTZXRSb3dMaXN0OjppdGVtKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAg
Ym9vbCBpbmRleE9rOwotICAgIGludCBpbmRleCA9IGZpbml0ZUludDMyVmFsdWUoZXhlYy0+YXJn
dW1lbnQoMCksIGV4ZWMsIGluZGV4T2spOworICAgIGludCBpbmRleCA9IGZpbml0ZUludDMyVmFs
dWUoc3RhdGUuYXJndW1lbnQoMCksICZzdGF0ZSwgaW5kZXhPayk7CiAgICAgaWYgKCFpbmRleE9r
KSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7Cisg
ICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogICAgIGlmIChpbmRleCA8IDAgfHwgKHVu
c2lnbmVkKWluZGV4ID49IG1faW1wbC0+bGVuZ3RoKCkpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIElOREVYX1NJWkVfRVJSKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0
ZSwgSU5ERVhfU0laRV9FUlIpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9
CiAKLSAgICBKU09iamVjdCogb2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Cisg
ICAgSlNPYmplY3QqIG9iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7CiAKICAg
ICB1bnNpZ25lZCBudW1Db2x1bW5zID0gbV9pbXBsLT5jb2x1bW5OYW1lcygpLnNpemUoKTsKICAg
ICB1bnNpZ25lZCB2YWx1ZXNJbmRleCA9IGluZGV4ICogbnVtQ29sdW1uczsKQEAgLTYxLDIwICs2
MSwyMCBAQCBKU1ZhbHVlIEpTU1FMUmVzdWx0U2V0Um93TGlzdDo6aXRlbShFeGVjU3RhdGUqIGV4
ZWMpCiAgICAgICAgIEpTVmFsdWUganNWYWx1ZTsKIAogICAgICAgICBzd2l0Y2ggKHZhbHVlLnR5
cGUoKSkgewotICAgICAgICAgICAgY2FzZSBTUUxWYWx1ZTo6U3RyaW5nVmFsdWU6Ci0gICAgICAg
ICAgICAgIGpzVmFsdWUgPSBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCB2YWx1ZS5zdHJpbmcoKSk7
Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgU1FMVmFsdWU6Ok51bGxWYWx1
ZToKLSAgICAgICAgICAgICAganNWYWx1ZSA9IGpzTnVsbCgpOwotICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBjYXNlIFNRTFZhbHVlOjpOdW1iZXJWYWx1ZToKLSAgICAgICAgICAgICAg
anNWYWx1ZSA9IGpzTnVtYmVyKHZhbHVlLm51bWJlcigpKTsKLSAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIGNhc2UgU1FMVmFsdWU6OlN0cmluZ1ZhbHVlOgorICAgICAgICAgICAganNWYWx1
ZSA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUuc3RyaW5nKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1FMVmFsdWU6Ok51bGxWYWx1ZToKKyAgICAgICAgICAg
IGpzVmFsdWUgPSBqc051bGwoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNR
TFZhbHVlOjpOdW1iZXJWYWx1ZToKKyAgICAgICAgICAgIGpzVmFsdWUgPSBqc051bWJlcih2YWx1
ZS5udW1iZXIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKLSAgICAgICAgb2JqZWN0
LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBtX2lt
cGwtPmNvbHVtbk5hbWVzKClbaV0pLCBqc1ZhbHVlLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwor
ICAgICAgICBvYmplY3QtPnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZSwgbV9pbXBsLT5jb2x1bW5OYW1lcygpW2ldKSwganNWYWx1ZSwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KTsKICAgICB9CiAKICAgICByZXR1cm4gb2JqZWN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAppbmRl
eCAyNTI3MDgwYTM0ZDkyZWI1ZTM1MDJiODQ0YTNmY2VkNjE4M2QxZDQ1Li4zYzczNGE1MDlkZmJm
ODExZmYyNTU1ZmJkOGQyODBhYTA5NzhmNDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcApAQCAtNDEsMzYgKzQxLDM2
IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1
ZSBKU1NRTFRyYW5zYWN0aW9uOjpleGVjdXRlU3FsKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUg
SlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNxbChFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlm
ICghZXhlYy0+YXJndW1lbnRDb3VudCgpKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBTWU5UQVhfRVJSKTsKKyAgICBpZiAoIXN0YXRlLmFyZ3VtZW50Q291bnQoKSkgeworICAgICAg
ICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBTWU5UQVhfRVJSKTsKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgU3RyaW5nIHNxbFN0YXRlbWVudCA9IGV4ZWMtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgU3RyaW5nIHNxbFN0YXRlbWVudCA9IHN0YXRlLmFyZ3VtZW50KDAp
LnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIC8vIE5vdyBhc3Nl
bWJsZSB0aGUgbGlzdCBvZiBTUUwgYXJndW1lbnRzCiAgICAgVmVjdG9yPFNRTFZhbHVlPiBzcWxW
YWx1ZXM7Ci0gICAgaWYgKCFleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7
Ci0gICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgxKS5nZXRPYmplY3Qo
KTsKKyAgICBpZiAoIXN0YXRlLmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAg
ICAgICAgSlNPYmplY3QqIG9iamVjdCA9IHN0YXRlLmFyZ3VtZW50KDEpLmdldE9iamVjdCgpOwog
ICAgICAgICBpZiAoIW9iamVjdCkgewotICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUs
IFRZUEVfTUlTTUFUQ0hfRVJSKTsKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgICAgICB9CiAKLSAgICAgICAgSlNWYWx1ZSBsZW5ndGhWYWx1ZSA9IG9iamVjdC0+Z2V0KGV4
ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwotICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIEpTVmFsdWUgbGVuZ3RoVmFsdWUgPSBvYmplY3QtPmdldCgm
c3RhdGUsIHN0YXRlLnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOworICAgICAgICBpZiAoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gbGVuZ3RoVmFsdWUudG9VSW50MzIoZXhlYyk7Ci0gICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbGVu
Z3RoVmFsdWUudG9VSW50MzIoJnN0YXRlKTsKKyAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMCA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0
ZSwgaSk7CisgICAgICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgICAgIGlmICh2YWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQpAQCAtNzksMTggKzc5LDE4IEBAIEpTVmFsdWUgSlNTUUxUcmFuc2Fj
dGlvbjo6ZXhlY3V0ZVNxbChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICAgICAgc3FsVmFs
dWVzLmFwcGVuZCh2YWx1ZS5hc051bWJlcigpKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgICAgIC8vIENvbnZlcnQgdGhlIGFyZ3VtZW50IHRvIGEgc3RyaW5nIGFuZCBhcHBlbmQg
aXQKLSAgICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKHZhbHVlLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgICAgIHNxbFZhbHVlcy5hcHBlbmQodmFsdWUudG9TdHJpbmcoJnN0YXRl
KS0+dmFsdWUoJnN0YXRlKSk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFj
az4gY2FsbGJhY2s7Ci0gICAgaWYgKCFleGVjLT5hcmd1bWVudCgyKS5pc1VuZGVmaW5lZE9yTnVs
bCgpKSB7Ci0gICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgyKS5nZXRP
YmplY3QoKTsKKyAgICBpZiAoIXN0YXRlLmFyZ3VtZW50KDIpLmlzVW5kZWZpbmVkT3JOdWxsKCkp
IHsKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IHN0YXRlLmFyZ3VtZW50KDIpLmdldE9iamVj
dCgpOwogICAgICAgICBpZiAoIW9iamVjdCkgewotICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbigm
c3RhdGUsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgICAgICB9CiAKQEAgLTk4LDEwICs5OCwxMCBAQCBKU1ZhbHVlIEpTU1FMVHJhbnNh
Y3Rpb246OmV4ZWN1dGVTcWwoRXhlY1N0YXRlKiBleGVjKQogICAgIH0KIAogICAgIFJlZlB0cjxT
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrOwotICAgIGlmICghZXhlYy0+
YXJndW1lbnQoMykuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gZXhlYy0+YXJndW1lbnQoMykuZ2V0T2JqZWN0KCk7CisgICAgaWYgKCFzdGF0ZS5hcmd1
bWVudCgzKS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBvYmplY3Qg
PSBzdGF0ZS5hcmd1bWVudCgzKS5nZXRPYmplY3QoKTsKICAgICAgICAgaWYgKCFvYmplY3QpIHsK
LSAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7Cisg
ICAgICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBUWVBFX01JU01BVENIX0VSUik7CiAg
ICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgfQogCkBAIC0xMTAsNyAr
MTEwLDcgQEAgSlNWYWx1ZSBKU1NRTFRyYW5zYWN0aW9uOjpleGVjdXRlU3FsKEV4ZWNTdGF0ZSog
ZXhlYykKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIG1faW1wbC0+ZXhlY3V0ZVNR
TChzcWxTdGF0ZW1lbnQsIHNxbFZhbHVlcywgY2FsbGJhY2sucmVsZWFzZSgpLCBlcnJvckNhbGxi
YWNrLnJlbGVhc2UoKSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAg
c2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1
c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1c3RvbS5j
cHAKaW5kZXggMTVjNTBlNWJhYmJiM2FlZjRmOTMzOWQwMGE5MDgxOTA5YjE5YmY5My4uYjZmMGNm
ODM2MTVmNzFlNjU1ODhjZTNkZTNmY2JiYWRkMTViNmVkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNTVkdMZW5ndGhDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcApAQCAtMzEsMjkgKzMxLDI5IEBA
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSBK
U1NWR0xlbmd0aDo6dmFsdWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU1NWR0xl
bmd0aDo6dmFsdWUoRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICAgICBTVkdMZW5ndGgmIHBv
ZEltcCA9IGltcGwoKS5wcm9wZXJ0eVJlZmVyZW5jZSgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwogICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dChpbXBsKCkuY29udGV4dEVs
ZW1lbnQoKSk7CiAgICAgZmxvYXQgdmFsdWUgPSBwb2RJbXAudmFsdWUobGVuZ3RoQ29udGV4dCwg
ZWMpOwogICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwor
ICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIH0KIAogICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7CiB9CiAKLXZv
aWQgSlNTVkdMZW5ndGg6OnNldFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkK
K3ZvaWQgSlNTVkdMZW5ndGg6OnNldFZhbHVlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFs
dWUpCiB7CiAgICAgaWYgKGltcGwoKS5pc1JlYWRPbmx5KCkpIHsKLSAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUik7CisgICAgICAgIHNldERP
TUV4Y2VwdGlvbigmc3RhdGUsIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBpZiAoIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYg
IXZhbHVlLmlzTnVtYmVyKCkgJiYgIXZhbHVlLmlzQm9vbGVhbigpKSB7Ci0gICAgICAgIHRocm93
Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjEsMzYgKzYxLDM2IEBAIHZvaWQgSlNTVkdMZW5n
dGg6OnNldFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIAogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwogICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dChpbXBs
KCkuY29udGV4dEVsZW1lbnQoKSk7Ci0gICAgcG9kSW1wLnNldFZhbHVlKHZhbHVlLnRvRmxvYXQo
ZXhlYyksIGxlbmd0aENvbnRleHQsIGVjKTsKKyAgICBwb2RJbXAuc2V0VmFsdWUodmFsdWUudG9G
bG9hdCgmc3RhdGUpLCBsZW5ndGhDb250ZXh0LCBlYyk7CiAgICAgaWYgKGVjKSB7Ci0gICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3Rh
dGUsIGVjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGltcGwoKS5jb21taXRDaGFu
Z2UoKTsKIH0KIAotSlNWYWx1ZSBKU1NWR0xlbmd0aDo6Y29udmVydFRvU3BlY2lmaWVkVW5pdHMo
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1NWR0xlbmd0aDo6Y29udmVydFRvU3BlY2lmaWVk
VW5pdHMoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBpZiAoaW1wbCgpLmlzUmVhZE9ubHkoKSkg
ewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURf
RVJSKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgTk9fTU9ESUZJQ0FUSU9OX0FM
TE9XRURfRVJSKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAg
U1ZHTGVuZ3RoJiBwb2RJbXAgPSBpbXBsKCkucHJvcGVydHlSZWZlcmVuY2UoKTsKIAotICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50
aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7
CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgICAgIHJldHVybiBzdGF0
ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IoJnN0YXRlKSk7CiAKLSAgICB1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSA9IGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICB1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3Vt
ZW50KDApLnRvVUludDMyKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwogICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dChpbXBsKCkuY29udGV4dEVsZW1l
bnQoKSk7CiAgICAgcG9kSW1wLmNvbnZlcnRUb1NwZWNpZmllZFVuaXRzKHVuaXRUeXBlLCBsZW5n
dGhDb250ZXh0LCBlYyk7CiAgICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1N1YnRsZUNyeXB0b0N1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1N1YnRsZUNyeXB0b0N1c3RvbS5jcHAKaW5kZXggZDhjN2ZmMTU3ODczZDc1
ZmQ3MzM3NDZkYTM5ZTM4OWIxN2ZiNmQ4OC4uNjhlNmQ1NjgxOTcxMDA1ZDU0YTdjNTgwZDgwZTBi
Mjk2ZDFiNWRhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdWJ0
bGVDcnlwdG9DdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3Vi
dGxlQ3J5cHRvQ3VzdG9tLmNwcApAQCAtNjEsMjQgKzYxLDI0IEBAIGVudW0gY2xhc3MgQ3J5cHRv
S2V5Rm9ybWF0IHsKICAgICBKV0sKIH07CiAKLXN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRv
QWxnb3JpdGhtPiBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUpCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobT4gY3Jl
YXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkK
IHsKICAgICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobUlkZW50aWZpZXI7Ci0g
ICAgaWYgKCFKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmdldEFsZ29yaXRobUlkZW50aWZp
ZXIoZXhlYywgdmFsdWUsIGFsZ29yaXRobUlkZW50aWZpZXIpKSB7Ci0gICAgICAgIEFTU0VSVChl
eGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgaWYgKCFKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25h
cnk6OmdldEFsZ29yaXRobUlkZW50aWZpZXIoJnN0YXRlLCB2YWx1ZSwgYWxnb3JpdGhtSWRlbnRp
ZmllcikpIHsKKyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgYXV0byByZXN1bHQgPSBDcnlwdG9BbGdvcml0
aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkuY3JlYXRlKGFsZ29yaXRobUlkZW50aWZpZXIpOwogICAg
IGlmICghcmVzdWx0KQotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRF
RF9FUlIpOworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VS
Uik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGJvb2wgY3J5cHRvS2V5Rm9ybWF0
RnJvbUpTVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBDcnlwdG9LZXlGb3Jt
YXQmIHJlc3VsdCkKK3N0YXRpYyBib29sIGNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIENyeXB0b0tleUZvcm1hdCYgcmVzdWx0KQogewot
ICAgIFN0cmluZyBrZXlGb3JtYXRTdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIFN0cmluZyBrZXlGb3Jt
YXRTdHJpbmcgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOworICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChr
ZXlGb3JtYXRTdHJpbmcgPT0gInJhdyIpCiAgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUZvcm1h
dDo6UmF3OwpAQCAtODksMTYgKzg5LDE2IEBAIHN0YXRpYyBib29sIGNyeXB0b0tleUZvcm1hdEZy
b21KU1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgQ3J5cHRvS2V5CiAgICAg
ZWxzZSBpZiAoa2V5Rm9ybWF0U3RyaW5nID09ICJqd2siKQogICAgICAgICByZXN1bHQgPSBDcnlw
dG9LZXlGb3JtYXQ6OkpXSzsKICAgICBlbHNlIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
YywgIlVua25vd24ga2V5IGZvcm1hdCIpOworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUs
ICJVbmtub3duIGtleSBmb3JtYXQiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgY3J5cHRvS2V5VXNhZ2VzRnJvbUpTVmFs
dWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBDcnlwdG9LZXlVc2FnZSYgcmVzdWx0
KQorc3RhdGljIGJvb2wgY3J5cHRvS2V5VXNhZ2VzRnJvbUpTVmFsdWUoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNWYWx1ZSB2YWx1ZSwgQ3J5cHRvS2V5VXNhZ2UmIHJlc3VsdCkKIHsKICAgICBpZiAoIWlz
SlNBcnJheSh2YWx1ZSkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgICAg
IHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
QEAgLTEwNiw5ICsxMDYsOSBAQCBzdGF0aWMgYm9vbCBjcnlwdG9LZXlVc2FnZXNGcm9tSlNWYWx1
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIENyeXB0b0tleQogCiAgICAgSlNBcnJh
eSogYXJyYXkgPSBhc0FycmF5KHZhbHVlKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFy
cmF5LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGFycmF5LT5n
ZXRJbmRleChleGVjLCBpKTsKLSAgICAgICAgU3RyaW5nIHVzYWdlU3RyaW5nID0gZWxlbWVudC50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gYXJyYXktPmdldEluZGV4KCZzdGF0ZSwg
aSk7CisgICAgICAgIFN0cmluZyB1c2FnZVN0cmluZyA9IGVsZW1lbnQudG9TdHJpbmcoJnN0YXRl
KS0+dmFsdWUoJnN0YXRlKTsKKyAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAodXNhZ2VTdHJpbmcgPT0gImVuY3J5
cHQiKQogICAgICAgICAgICAgcmVzdWx0IHw9IENyeXB0b0tleVVzYWdlRW5jcnlwdDsKQEAgLTEz
MCw0MiArMTMwLDQyIEBAIHN0YXRpYyBib29sIGNyeXB0b0tleVVzYWdlc0Zyb21KU1ZhbHVlKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgQ3J5cHRvS2V5CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLUpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OmVuY3J5cHQoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6ZW5jcnlwdChFeGVjU3RhdGUmIHN0YXRlKQogewotICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAzKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0o
KS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVj
KSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA8IDMpCisgICAgICAgIHJldHVybiBz
dGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IoJnN0YXRlKSk7CiAKLSAgICBhdXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZy
b21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFs
Z29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS51bmNoZWNr
ZWRBcmd1bWVudCgwKSk7CiAgICAgaWYgKCFhbGdvcml0aG0pIHsKLSAgICAgICAgQVNTRVJUKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgYXV0byBwYXJh
bWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9y
RW5jcnlwdChleGVjLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMCkpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlv
bmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckVuY3J5cHQoJnN0YXRlLCBhbGdvcml0aG0tPmlkZW50
aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmICghcGFyYW1ldGVy
cykgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NF
UlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICB9CiAKLSAgICBSZWZQdHI8Q3J5cHRvS2V5PiBrZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFw
cGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICBSZWZQdHI8Q3J5cHRvS2V5PiBr
ZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsK
ICAgICBpZiAoIWtleSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAg
ICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKIAogICAgIGlmICgha2V5LT5hbGxv
d3MoQ3J5cHRvS2V5VXNhZ2VFbmNyeXB0KSkgewogICAgICAgICBtX2ltcGwtPmRvY3VtZW50KCkt
PmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9y
LCBBU0NJSUxpdGVyYWwoIktleSB1c2FnZXMgZG8gbm90IGluY2x1ZGUgJ2VuY3J5cHQnIikpOwot
ICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRFRF9FUlIpOworICAgICAg
ICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VSUik7CiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEgZGF0
YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZShleGVjLCBleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgyKSwgZGF0YSkpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKTsKKyAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3Rh
dGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRhKSkgeworICAgICAgICBBU1NFUlQo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICB9CiAKICAgICAKLSAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQ
cm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QoKSk7Ci0gICAgRGVmZXJy
ZWRXcmFwcGVyIHdyYXBwZXIoZXhlYywgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7
CisgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVy
cmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSk7CisgICAgRGVmZXJyZWRXcmFwcGVy
IHdyYXBwZXIoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKICAgICBh
dXRvIHN1Y2Nlc3NDYWxsYmFjayA9IFt3cmFwcGVyXShjb25zdCBWZWN0b3I8dWludDhfdD4mIHJl
c3VsdCkgbXV0YWJsZSB7CiAgICAgICAgIHdyYXBwZXIucmVzb2x2ZShyZXN1bHQpOwogICAgIH07
CkBAIC0xNzYsNDggKzE3Niw0OCBAQCBKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjplbmNyeXB0KEV4
ZWNTdGF0ZSogZXhlYykKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhbGdvcml0aG0t
PmVuY3J5cHQoKnBhcmFtZXRlcnMsICprZXksIGRhdGEsIFdURjo6bW92ZShzdWNjZXNzQ2FsbGJh
Y2spLCBXVEY6Om1vdmUoZmFpbHVyZUNhbGxiYWNrKSwgZWMpOwogICAgIGlmIChlYykgewotICAg
ICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBzZXRET01FeGNlcHRpb24o
JnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAg
IHJldHVybiBwcm9taXNlRGVmZXJyZWQtPnByb21pc2UoKTsKIH0KIAotSlNWYWx1ZSBKU1N1YnRs
ZUNyeXB0bzo6ZGVjcnlwdChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTU3VidGxlQ3J5cHRv
OjpkZWNyeXB0KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA8IDMpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJn
dW1lbnRDb3VudCgpIDwgMykKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRp
b24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAotICAg
IGF1dG8gYWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYWxnb3JpdGhtID0gY3JlYXRlQWxnb3Jp
dGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBp
ZiAoIWFsZ29yaXRobSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwor
ICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29y
aXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JEZWNyeXB0KGV4ZWMsIGFsZ29yaXRo
bS0+aWRlbnRpZmllcigpLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBw
YXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJz
Rm9yRGVjcnlwdCgmc3RhdGUsIGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNr
ZWRBcmd1bWVudCgwKSk7CiAgICAgaWYgKCFwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VSVChl
eGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24o
KSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIFJlZlB0cjxD
cnlwdG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMSkpOworICAgIFJlZlB0cjxDcnlwdG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5Ojp0b1dy
YXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOwogICAgIGlmICgha2V5KQotICAgICAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVF
cnJvcigmc3RhdGUpOwogCiAgICAgaWYgKCFrZXktPmFsbG93cyhDcnlwdG9LZXlVc2FnZURlY3J5
cHQpKSB7CiAgICAgICAgIG1faW1wbC0+ZG9jdW1lbnQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVz
c2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiS2V5IHVz
YWdlcyBkbyBub3QgaW5jbHVkZSAnZGVjcnlwdCciKSk7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlv
bihleGVjLCBOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3Rh
dGUsIE5PVF9TVVBQT1JURURfRVJSKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgfQogCiAgICAgQ3J5cHRvT3BlcmF0aW9uRGF0YSBkYXRhOwotICAgIGlmICghY3J5cHRvT3Bl
cmF0aW9uRGF0YUZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBk
YXRhKSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIGlmICgh
Y3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJn
dW1lbnQoMiksIGRhdGEpKSB7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIEpTUHJvbWlzZURl
ZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMs
IGdsb2JhbE9iamVjdCgpKTsKLSAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcihleGVjLCBnbG9i
YWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKKyAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJv
bWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9i
amVjdCgpKTsKKyAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcigmc3RhdGUsIGdsb2JhbE9iamVj
dCgpLCBwcm9taXNlRGVmZXJyZWQpOwogICAgIGF1dG8gc3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBw
ZXJdKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAgd3Jh
cHBlci5yZXNvbHZlKHJlc3VsdCk7CiAgICAgfTsKQEAgLTIyOCw0OCArMjI4LDQ4IEBAIEpTVmFs
dWUgSlNTdWJ0bGVDcnlwdG86OmRlY3J5cHQoRXhlY1N0YXRlKiBleGVjKQogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwogICAgIGFsZ29yaXRobS0+ZGVjcnlwdCgqcGFyYW1ldGVycywgKmtleSwg
ZGF0YSwgV1RGOjptb3ZlKHN1Y2Nlc3NDYWxsYmFjayksIFdURjo6bW92ZShmYWlsdXJlQ2FsbGJh
Y2spLCBlYyk7CiAgICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBl
Yyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHByb21pc2VEZWZlcnJlZC0+cHJv
bWlzZSgpOwogfQogCi1KU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjpzaWduKEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OnNpZ24oRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAg
ICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMykKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZt
KCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhl
YykpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPCAzKQorICAgICAgICByZXR1cm4g
c3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKCZzdGF0ZSkpOwogCi0gICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1G
cm9tSlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBh
bGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoMCkpOwogICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAgIEFTU0VSVChl
eGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24o
KSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIGF1dG8gcGFy
YW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0Zv
clNpZ24oZXhlYywgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25h
cnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JTaWduKCZzdGF0ZSwgYWxnb3JpdGhtLT5pZGVudGlmaWVy
KCksIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBpZiAoIXBhcmFtZXRlcnMpIHsK
LSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
fQogCi0gICAgUmVmUHRyPENyeXB0b0tleT4ga2V5ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBlZChl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgUmVmUHRyPENyeXB0b0tleT4ga2V5ID0g
SlNDcnlwdG9LZXk6OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSk7CiAgICAg
aWYgKCFrZXkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAgICAg
cmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CiAKICAgICBpZiAoIWtleS0+YWxsb3dzKENy
eXB0b0tleVVzYWdlU2lnbikpIHsKICAgICAgICAgbV9pbXBsLT5kb2N1bWVudCgpLT5hZGRDb25z
b2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgQVNDSUlM
aXRlcmFsKCJLZXkgdXNhZ2VzIGRvIG5vdCBpbmNsdWRlICdzaWduJyIpKTsKLSAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIpOwogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICB9CiAKICAgICBDcnlwdG9PcGVyYXRpb25EYXRhIGRhdGE7Ci0gICAgaWYg
KCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMiksIGRhdGEpKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7
CisgICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0ZS51
bmNoZWNrZWRBcmd1bWVudCgyKSwgZGF0YSkpIHsKKyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAg
SlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpj
cmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KCkpOwotICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVy
KGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOworICAgIEpTUHJvbWlzZURl
ZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0
ZSwgZ2xvYmFsT2JqZWN0KCkpOworICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVyKCZzdGF0ZSwg
Z2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CiAgICAgYXV0byBzdWNjZXNzQ2FsbGJh
Y2sgPSBbd3JhcHBlcl0oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiByZXN1bHQpIG11dGFibGUgewog
ICAgICAgICB3cmFwcGVyLnJlc29sdmUocmVzdWx0KTsKICAgICB9OwpAQCAtMjgwLDU0ICsyODAs
NTQgQEAgSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6c2lnbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYWxnb3JpdGhtLT5zaWduKCpwYXJhbWV0ZXJzLCAq
a2V5LCBkYXRhLCBXVEY6Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGOjptb3ZlKGZhaWx1cmVD
YWxsYmFjayksIGVjKTsKICAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICByZXR1cm4gcHJvbWlzZURlZmVycmVk
LT5wcm9taXNlKCk7CiB9CiAKLUpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OnZlcmlmeShFeGVjU3Rh
dGUqIGV4ZWMpCitKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjp2ZXJpZnkoRXhlY1N0YXRlJiBzdGF0
ZSkKIHsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgNCkKLSAgICAgICAgcmV0dXJu
IGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IoZXhlYykpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPCA0KQorICAgICAg
ICByZXR1cm4gc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCi0gICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVB
bGdvcml0aG1Gcm9tSlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Cisg
ICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAg
IEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRF
eGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAg
IGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFy
YW1ldGVyc0ZvclZlcmlmeShleGVjLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3Jp
dGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvclZlcmlmeSgmc3RhdGUsIGFsZ29yaXRo
bS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgaWYgKCFw
YXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAg
ICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgIH0KIAotICAgIFJlZlB0cjxDcnlwdG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5
Ojp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIFJlZlB0cjxDcnlw
dG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1l
bnQoMSkpOwogICAgIGlmICgha2V5KQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhl
Yyk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOwogCiAgICAgaWYgKCFr
ZXktPmFsbG93cyhDcnlwdG9LZXlVc2FnZVZlcmlmeSkpIHsKICAgICAgICAgbV9pbXBsLT5kb2N1
bWVudCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVs
OjpFcnJvciwgQVNDSUlMaXRlcmFsKCJLZXkgdXNhZ2VzIGRvIG5vdCBpbmNsdWRlICd2ZXJpZnkn
IikpOwotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRFRF9FUlIpOwor
ICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VSUik7CiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIENyeXB0b09wZXJhdGlvbkRh
dGEgc2lnbmF0dXJlOwotICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKGV4
ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBzaWduYXR1cmUpKSB7Ci0gICAgICAgIEFT
U0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRh
RnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSwgc2lnbmF0dXJl
KSkgeworICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBDcnlwdG9PcGVyYXRpb25EYXRhIGRhdGE7
Ci0gICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMyksIGRhdGEpKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNl
cHRpb24oKSk7CisgICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0YXRl
LCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgzKSwgZGF0YSkpIHsKKyAgICAgICAgQVNTRVJUKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
fQogCi0gICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURl
ZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KCkpOwotICAgIERlZmVycmVkV3JhcHBl
ciB3cmFwcGVyKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOworICAgIEpT
UHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3Jl
YXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOworICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVy
KCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CiAgICAgYXV0byBzdWNj
ZXNzQ2FsbGJhY2sgPSBbd3JhcHBlcl0oYm9vbCByZXN1bHQpIG11dGFibGUgewogICAgICAgICB3
cmFwcGVyLnJlc29sdmUocmVzdWx0KTsKICAgICB9OwpAQCAtMzM4LDM4ICszMzgsMzggQEAgSlNW
YWx1ZSBKU1N1YnRsZUNyeXB0bzo6dmVyaWZ5KEV4ZWNTdGF0ZSogZXhlYykKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICBhbGdvcml0aG0tPnZlcmlmeSgqcGFyYW1ldGVycywgKmtleSwg
c2lnbmF0dXJlLCBkYXRhLCBXVEY6Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGOjptb3ZlKGZh
aWx1cmVDYWxsYmFjayksIGVjKTsKICAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICByZXR1cm4gcHJvbWlzZURl
ZmVycmVkLT5wcm9taXNlKCk7CiB9CiAKLUpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OmRpZ2VzdChF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjpkaWdlc3QoRXhlY1N0YXRl
JiBzdGF0ZSkKIHsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikKLSAgICAgICAg
cmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPCAyKQor
ICAgICAgICByZXR1cm4gc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCi0gICAgYXV0byBhbGdvcml0aG0gPSBj
cmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgw
KSk7CisgICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0
ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmICghYWxnb3JpdGhtKSB7Ci0g
ICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChzdGF0
ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0K
IAotICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3Jl
YXRlUGFyYW1ldGVyc0ZvckRpZ2VzdChleGVjLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRv
QWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckRpZ2VzdCgmc3RhdGUsIGFs
Z29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAg
aWYgKCFwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7
CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEgZGF0YTsKLSAg
ICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgxKSwgZGF0YSkpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKTsKKyAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBkYXRhKSkgeworICAgICAgICBBU1NFUlQoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAK
LSAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJy
ZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QoKSk7Ci0gICAgRGVmZXJyZWRXcmFwcGVyIHdy
YXBwZXIoZXhlYywgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CisgICAgSlNQcm9t
aXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUo
JnN0YXRlLCBnbG9iYWxPYmplY3QoKSk7CisgICAgRGVmZXJyZWRXcmFwcGVyIHdyYXBwZXIoJnN0
YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKICAgICBhdXRvIHN1Y2Nlc3ND
YWxsYmFjayA9IFt3cmFwcGVyXShjb25zdCBWZWN0b3I8dWludDhfdD4mIHJlc3VsdCkgbXV0YWJs
ZSB7CiAgICAgICAgIHdyYXBwZXIucmVzb2x2ZShyZXN1bHQpOwogICAgIH07CkBAIC0zODAsNDcg
KzM4MCw0NyBAQCBKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjpkaWdlc3QoRXhlY1N0YXRlKiBleGVj
KQogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGFsZ29yaXRobS0+ZGlnZXN0KCpwYXJh
bWV0ZXJzLCBkYXRhLCBXVEY6Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGOjptb3ZlKGZhaWx1
cmVDYWxsYmFjayksIGVjKTsKICAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIGVjKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICByZXR1cm4gcHJvbWlzZURlZmVy
cmVkLT5wcm9taXNlKCk7CiB9CiAKLUpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OmdlbmVyYXRlS2V5
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OmdlbmVyYXRlS2V5KEV4
ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCi0g
ICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgp
IDwgMSkKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAotICAgIGF1dG8gYWxnb3Jp
dGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMCkpOworICAgIGF1dG8gYWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFs
dWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBpZiAoIWFsZ29yaXRo
bSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NF
UlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICB9CiAKLSAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25h
cnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JHZW5lcmF0ZUtleShleGVjLCBhbGdvcml0aG0tPmlkZW50
aWZpZXIoKSwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gcGFyYW1ldGVy
cyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckdlbmVy
YXRlS2V5KCZzdGF0ZSwgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIHN0YXRlLnVuY2hlY2tlZEFy
Z3VtZW50KDApKTsKICAgICBpZiAoIXBhcmFtZXRlcnMpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgYm9vbCBleHRyYWN0
YWJsZSA9IGZhbHNlOwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgewotICAg
ICAgICBleHRyYWN0YWJsZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvQm9vbGVhbihl
eGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChzdGF0ZS5h
cmd1bWVudENvdW50KCkgPj0gMikgeworICAgICAgICBleHRyYWN0YWJsZSA9IHN0YXRlLnVuY2hl
Y2tlZEFyZ3VtZW50KDEpLnRvQm9vbGVhbigmc3RhdGUpOworICAgICAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAK
ICAgICBDcnlwdG9LZXlVc2FnZSBrZXlVc2FnZXMgPSAwOwotICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPj0gMykgewotICAgICAgICBpZiAoIWNyeXB0b0tleVVzYWdlc0Zyb21KU1ZhbHVl
KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpLCBrZXlVc2FnZXMpKSB7Ci0gICAgICAgICAgICBBU1NF
UlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkg
Pj0gMykgeworICAgICAgICBpZiAoIWNyeXB0b0tleVVzYWdlc0Zyb21KU1ZhbHVlKHN0YXRlLCBz
dGF0ZS5hcmd1bWVudCgyKSwga2V5VXNhZ2VzKSkgeworICAgICAgICAgICAgQVNTRVJUKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9
IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KCkpOwotICAgIERl
ZmVycmVkV3JhcHBlciB3cmFwcGVyKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJy
ZWQpOworICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VE
ZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOworICAgIERlZmVycmVkV3Jh
cHBlciB3cmFwcGVyKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CiAg
ICAgYXV0byBzdWNjZXNzQ2FsbGJhY2sgPSBbd3JhcHBlcl0oQ3J5cHRvS2V5KiBrZXksIENyeXB0
b0tleVBhaXIqIGtleVBhaXIpIG11dGFibGUgewogICAgICAgICBBU1NFUlQoa2V5IHx8IGtleVBh
aXIpOwogICAgICAgICBBU1NFUlQoIWtleSB8fCAha2V5UGFpcik7CkBAIC00MzYsMTQgKzQzNiwx
NCBAQCBKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjpnZW5lcmF0ZUtleShFeGVjU3RhdGUqIGV4ZWMp
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYWxnb3JpdGhtLT5nZW5lcmF0ZUtleSgq
cGFyYW1ldGVycywgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgV1RGOjptb3ZlKHN1Y2Nlc3NDYWxs
YmFjayksIFdURjo6bW92ZShmYWlsdXJlQ2FsbGJhY2spLCBlYyk7CiAgICAgaWYgKGVjKSB7Ci0g
ICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlv
bigmc3RhdGUsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAg
ICAgcmV0dXJuIHByb21pc2VEZWZlcnJlZC0+cHJvbWlzZSgpOwogfQogCi1zdGF0aWMgdm9pZCBp
bXBvcnRLZXkoRXhlY1N0YXRlKiBleGVjLCBDcnlwdG9LZXlGb3JtYXQga2V5Rm9ybWF0LCBDcnlw
dG9PcGVyYXRpb25EYXRhIGRhdGEsIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG0+IGFs
Z29yaXRobSwgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IHBhcmFt
ZXRlcnMsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlIGtleVVzYWdlcywgQ3J5cHRv
QWxnb3JpdGhtOjpLZXlDYWxsYmFjayBjYWxsYmFjaywgQ3J5cHRvQWxnb3JpdGhtOjpWb2lkQ2Fs
bGJhY2sgZmFpbHVyZUNhbGxiYWNrKQorc3RhdGljIHZvaWQgaW1wb3J0S2V5KEV4ZWNTdGF0ZSYg
c3RhdGUsIENyeXB0b0tleUZvcm1hdCBrZXlGb3JtYXQsIENyeXB0b09wZXJhdGlvbkRhdGEgZGF0
YSwgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobT4gYWxnb3JpdGhtLCBzdGQ6OnVuaXF1
ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gcGFyYW1ldGVycywgYm9vbCBleHRyYWN0
YWJsZSwgQ3J5cHRvS2V5VXNhZ2Uga2V5VXNhZ2VzLCBDcnlwdG9BbGdvcml0aG06OktleUNhbGxi
YWNrIGNhbGxiYWNrLCBDcnlwdG9BbGdvcml0aG06OlZvaWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJh
Y2spCiB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleVNlcmlhbGl6YXRpb24+IGtleVNl
cmlhbGl6YXRpb247CiAgICAgc3dpdGNoIChrZXlGb3JtYXQpIHsKQEAgLTQ1MywxMDIgKzQ1Mywx
MDIgQEAgc3RhdGljIHZvaWQgaW1wb3J0S2V5KEV4ZWNTdGF0ZSogZXhlYywgQ3J5cHRvS2V5Rm9y
bWF0IGtleUZvcm1hdCwgQ3J5cHRvT3BlcmF0aW8KICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6
SldLOiB7CiAgICAgICAgIFN0cmluZyBqd2tTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KGRhdGEu
Zmlyc3QsIGRhdGEuc2Vjb25kKTsKICAgICAgICAgaWYgKGp3a1N0cmluZy5pc051bGwoKSkgewot
ICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgIkpXSyBKU09OIHNlcmlhbGl6YXRpb24g
aXMgbm90IHZhbGlkIFVURi04Iik7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUs
ICJKV0sgSlNPTiBzZXJpYWxpemF0aW9uIGlzIG5vdCB2YWxpZCBVVEYtOCIpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGtleVNlcmlhbGl6YXRpb24gPSBzdGQ6Om1h
a2VfdW5pcXVlPEpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSz4oZXhlYywgandrU3RyaW5nKTsK
LSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBrZXlTZXJpYWxpemF0
aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s+KCZzdGF0
ZSwgandrU3RyaW5nKTsKKyAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKLSAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgIlVuc3VwcG9ydGVkIGtleSBmb3JtYXQgZm9yIGltcG9y
dCIpOworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsICJVbnN1cHBvcnRlZCBrZXkgZm9y
bWF0IGZvciBpbXBvcnQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIEFTU0VSVChr
ZXlTZXJpYWxpemF0aW9uKTsKIAogICAgIGlmICgha2V5U2VyaWFsaXphdGlvbi0+cmVjb25jaWxl
QWxnb3JpdGhtKGFsZ29yaXRobSwgcGFyYW1ldGVycykpIHsKLSAgICAgICAgaWYgKCFleGVjLT5o
YWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsICJBbGdvcml0
aG0gc3BlY2lmaWVkIGluIGtleSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIG9uZSBwYXNzZWQgdG8g
aW1wb3J0S2V5IGFzIGFyZ3VtZW50Iik7CisgICAgICAgIGlmICghc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsICJBbGdvcml0aG0gc3BlY2lm
aWVkIGluIGtleSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIG9uZSBwYXNzZWQgdG8gaW1wb3J0S2V5
IGFzIGFyZ3VtZW50Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKCFhbGdvcml0aG0pIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
YywgIk5laXRoZXIga2V5IG5vciBmdW5jdGlvbiBhcmd1bWVudCBoYXMgY3J5cHRvIGFsZ29yaXRo
bSBzcGVjaWZpZWQiKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCAiTmVpdGhlciBr
ZXkgbm9yIGZ1bmN0aW9uIGFyZ3VtZW50IGhhcyBjcnlwdG8gYWxnb3JpdGhtIHNwZWNpZmllZCIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEFTU0VSVChwYXJhbWV0ZXJzKTsKIAogICAg
IGtleVNlcmlhbGl6YXRpb24tPnJlY29uY2lsZUV4dHJhY3RhYmxlKGV4dHJhY3RhYmxlKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm47CiAKICAgICBrZXlTZXJpYWxpemF0aW9uLT5yZWNvbmNpbGVVc2Fn
ZXMoa2V5VXNhZ2VzKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIGtleURhdGEg
PSBrZXlTZXJpYWxpemF0aW9uLT5rZXlEYXRhKCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYWxnb3JpdGhtLT5pbXBvcnRLZXkoKnBhcmFt
ZXRlcnMsICprZXlEYXRhLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCBXVEY6Om1vdmUoY2FsbGJh
Y2spLCBXVEY6Om1vdmUoZmFpbHVyZUNhbGxiYWNrKSwgZWMpOwogICAgIGlmIChlYykKLSAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZz
dGF0ZSwgZWMpOwogfQogCi1KU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjppbXBvcnRLZXkoRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6aW1wb3J0S2V5KEV4ZWNTdGF0ZSYg
c3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDMpCi0gICAgICAgIHJl
dHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpIDwgMykKKyAg
ICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIENyeXB0b0tleUZvcm1hdCBrZXlG
b3JtYXQ7Ci0gICAgaWYgKCFjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShleGVjLCBleGVjLT5h
cmd1bWVudCgwKSwga2V5Rm9ybWF0KSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpOworICAgIGlmICghY3J5cHRvS2V5Rm9ybWF0RnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRl
LmFyZ3VtZW50KDApLCBrZXlGb3JtYXQpKSB7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNl
cHRpb24oKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIENy
eXB0b09wZXJhdGlvbkRhdGEgZGF0YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9t
SlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgZGF0YSkpIHsKLSAgICAg
ICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBpZiAoIWNyeXB0b09wZXJhdGlv
bkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBkYXRh
KSkgeworICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxn
b3JpdGhtPiBhbGdvcml0aG07CiAgICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBh
cmFtZXRlcnM+IHBhcmFtZXRlcnM7Ci0gICAgaWYgKCFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgy
KS5pc051bGwoKSkgewotICAgICAgICBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNW
YWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKSk7CisgICAgaWYgKCFzdGF0ZS51
bmNoZWNrZWRBcmd1bWVudCgyKS5pc051bGwoKSkgeworICAgICAgICBhbGdvcml0aG0gPSBjcmVh
dGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMikp
OwogICAgICAgICBpZiAoIWFsZ29yaXRobSkgewotICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7
CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgfQotICAgICAgICBw
YXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJz
Rm9ySW1wb3J0S2V5KGV4ZWMsIGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgyKSk7CisgICAgICAgIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURp
Y3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JJbXBvcnRLZXkoJnN0YXRlLCBhbGdvcml0aG0t
PmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMikpOwogICAgICAgICBpZiAo
IXBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7
CisgICAgICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBib29sIGV4dHJh
Y3RhYmxlID0gZmFsc2U7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSA0KSB7Ci0g
ICAgICAgIGV4dHJhY3RhYmxlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMykudG9Cb29sZWFu
KGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKHN0YXRl
LmFyZ3VtZW50Q291bnQoKSA+PSA0KSB7CisgICAgICAgIGV4dHJhY3RhYmxlID0gc3RhdGUudW5j
aGVja2VkQXJndW1lbnQoMykudG9Cb29sZWFuKCZzdGF0ZSk7CisgICAgICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0K
IAogICAgIENyeXB0b0tleVVzYWdlIGtleVVzYWdlcyA9IDA7Ci0gICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA+PSA1KSB7Ci0gICAgICAgIGlmICghY3J5cHRvS2V5VXNhZ2VzRnJvbUpTVmFs
dWUoZXhlYywgZXhlYy0+YXJndW1lbnQoNCksIGtleVVzYWdlcykpIHsKLSAgICAgICAgICAgIEFT
U0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQo
KSA+PSA1KSB7CisgICAgICAgIGlmICghY3J5cHRvS2V5VXNhZ2VzRnJvbUpTVmFsdWUoc3RhdGUs
IHN0YXRlLmFyZ3VtZW50KDQpLCBrZXlVc2FnZXMpKSB7CisgICAgICAgICAgICBBU1NFUlQoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVk
ID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QoKSk7Ci0gICAg
RGVmZXJyZWRXcmFwcGVyIHdyYXBwZXIoZXhlYywgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZl
cnJlZCk7CisgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlz
ZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSk7CisgICAgRGVmZXJyZWRX
cmFwcGVyIHdyYXBwZXIoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsK
ICAgICBhdXRvIHN1Y2Nlc3NDYWxsYmFjayA9IFt3cmFwcGVyXShDcnlwdG9LZXkmIHJlc3VsdCkg
bXV0YWJsZSB7CiAgICAgICAgIHdyYXBwZXIucmVzb2x2ZSgmcmVzdWx0KTsKICAgICB9OwpAQCAt
NTU2LDE3ICs1NTYsMTcgQEAgSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6aW1wb3J0S2V5KEV4ZWNT
dGF0ZSogZXhlYykKICAgICAgICAgd3JhcHBlci5yZWplY3QobnVsbHB0cik7CiAgICAgfTsKIAot
ICAgIFdlYkNvcmU6OmltcG9ydEtleShleGVjLCBrZXlGb3JtYXQsIGRhdGEsIFdURjo6bW92ZShh
bGdvcml0aG0pLCBXVEY6Om1vdmUocGFyYW1ldGVycyksIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMs
IFdURjo6bW92ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEY6Om1vdmUoZmFpbHVyZUNhbGxiYWNrKSk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIFdlYkNvcmU6OmltcG9ydEtleShz
dGF0ZSwga2V5Rm9ybWF0LCBkYXRhLCBXVEY6Om1vdmUoYWxnb3JpdGhtKSwgV1RGOjptb3ZlKHBh
cmFtZXRlcnMpLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCBXVEY6Om1vdmUoc3VjY2Vzc0NhbGxi
YWNrKSwgV1RGOjptb3ZlKGZhaWx1cmVDYWxsYmFjaykpOworICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICByZXR1cm4gcHJv
bWlzZURlZmVycmVkLT5wcm9taXNlKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGV4cG9ydEtleShFeGVj
U3RhdGUqIGV4ZWMsIENyeXB0b0tleUZvcm1hdCBrZXlGb3JtYXQsIGNvbnN0IENyeXB0b0tleSYg
a2V5LCBDcnlwdG9BbGdvcml0aG06OlZlY3RvckNhbGxiYWNrIGNhbGxiYWNrLCBDcnlwdG9BbGdv
cml0aG06OlZvaWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2spCitzdGF0aWMgdm9pZCBleHBvcnRL
ZXkoRXhlY1N0YXRlJiBzdGF0ZSwgQ3J5cHRvS2V5Rm9ybWF0IGtleUZvcm1hdCwgY29uc3QgQ3J5
cHRvS2V5JiBrZXksIENyeXB0b0FsZ29yaXRobTo6VmVjdG9yQ2FsbGJhY2sgY2FsbGJhY2ssIENy
eXB0b0FsZ29yaXRobTo6Vm9pZENhbGxiYWNrIGZhaWx1cmVDYWxsYmFjaykKIHsKICAgICBpZiAo
IWtleS5leHRyYWN0YWJsZSgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsICJLZXkg
aXMgbm90IGV4dHJhY3RhYmxlIik7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgIktl
eSBpcyBub3QgZXh0cmFjdGFibGUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTgw
LDggKzU4MCw4IEBAIHN0YXRpYyB2b2lkIGV4cG9ydEtleShFeGVjU3RhdGUqIGV4ZWMsIENyeXB0
b0tleUZvcm1hdCBrZXlGb3JtYXQsIGNvbnN0IENyeXB0b0tlCiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6SldLOiB7Ci0gICAgICAgIFN0cmluZyByZXN1
bHQgPSBKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OnNlcmlhbGl6ZShleGVjLCBrZXkpOwot
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIFN0cmluZyByZXN1bHQg
PSBKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OnNlcmlhbGl6ZSgmc3RhdGUsIGtleSk7Cisg
ICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgQ1N0cmluZyB1dGY4U3RyaW5nID0gcmVzdWx0LnV0ZjgoU3RyaWN0Q29udmVyc2lvbik7
CiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHRCdWZmZXI7CkBAIC01OTAsMjggKzU5MCwy
OCBAQCBzdGF0aWMgdm9pZCBleHBvcnRLZXkoRXhlY1N0YXRlKiBleGVjLCBDcnlwdG9LZXlGb3Jt
YXQga2V5Rm9ybWF0LCBjb25zdCBDcnlwdG9LZQogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ZGVmYXVsdDoKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgIlVuc3VwcG9ydGVkIGtleSBm
b3JtYXQgZm9yIGV4cG9ydCIpOworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsICJVbnN1
cHBvcnRlZCBrZXkgZm9ybWF0IGZvciBleHBvcnQiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
fQogCi1KU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjpleHBvcnRLZXkoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6ZXhwb3J0S2V5KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0g
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCi0gICAgICAgIHJldHVybiBleGVjLT52
bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4
ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpIDwgMikKKyAgICAgICAgcmV0dXJu
IHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcigmc3RhdGUpKTsKIAogICAgIENyeXB0b0tleUZvcm1hdCBrZXlGb3JtYXQ7Ci0gICAg
aWYgKCFjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwg
a2V5Rm9ybWF0KSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAg
IGlmICghY3J5cHRvS2V5Rm9ybWF0RnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDAp
LCBrZXlGb3JtYXQpKSB7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIFJlZlB0cjxDcnlwdG9L
ZXk+IGtleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
MSkpOworICAgIFJlZlB0cjxDcnlwdG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQo
c3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOwogICAgIGlmICgha2V5KQotICAgICAgICByZXR1
cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigm
c3RhdGUpOwogCi0gICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJv
bWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KCkpOwotICAgIERlZmVycmVk
V3JhcHBlciB3cmFwcGVyKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwor
ICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJl
ZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOworICAgIERlZmVycmVkV3JhcHBlciB3
cmFwcGVyKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CiAgICAgYXV0
byBzdWNjZXNzQ2FsbGJhY2sgPSBbd3JhcHBlcl0oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiByZXN1
bHQpIG11dGFibGUgewogICAgICAgICB3cmFwcGVyLnJlc29sdmUocmVzdWx0KTsKICAgICB9OwpA
QCAtNjE5LDUyICs2MTksNTIgQEAgSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6ZXhwb3J0S2V5KEV4
ZWNTdGF0ZSogZXhlYykKICAgICAgICAgd3JhcHBlci5yZWplY3QobnVsbHB0cik7CiAgICAgfTsK
IAotICAgIFdlYkNvcmU6OmV4cG9ydEtleShleGVjLCBrZXlGb3JtYXQsICprZXksIFdURjo6bW92
ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEY6Om1vdmUoZmFpbHVyZUNhbGxiYWNrKSk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIFdlYkNvcmU6OmV4cG9ydEtleShzdGF0ZSwga2V5
Rm9ybWF0LCAqa2V5LCBXVEY6Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGOjptb3ZlKGZhaWx1
cmVDYWxsYmFjaykpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICByZXR1cm4gcHJvbWlzZURlZmVycmVkLT5wcm9taXNl
KCk7CiB9CiAKLUpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OndyYXBLZXkoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6d3JhcEtleShFeGVjU3RhdGUmIHN0YXRlKQogewot
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCA0KQotICAgICAgICByZXR1cm4gZXhlYy0+
dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihl
eGVjKSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA8IDQpCisgICAgICAgIHJldHVy
biBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBDcnlwdG9LZXlGb3JtYXQga2V5Rm9ybWF0OwotICAg
IGlmICghY3J5cHRvS2V5Rm9ybWF0RnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCks
IGtleUZvcm1hdCkpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAg
ICBpZiAoIWNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgw
KSwga2V5Rm9ybWF0KSkgeworICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBSZWZQdHI8Q3J5cHRv
S2V5PiBrZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDEpKTsKKyAgICBSZWZQdHI8Q3J5cHRvS2V5PiBrZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFwcGVk
KHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKICAgICBpZiAoIWtleSkKLSAgICAgICAgcmV0
dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3Io
JnN0YXRlKTsKIAotICAgIFJlZlB0cjxDcnlwdG9LZXk+IHdyYXBwaW5nS2V5ID0gSlNDcnlwdG9L
ZXk6OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKSk7CisgICAgUmVmUHRyPENy
eXB0b0tleT4gd3JhcHBpbmdLZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKHN0YXRlLnVuY2hl
Y2tlZEFyZ3VtZW50KDIpKTsKICAgICBpZiAoIWtleSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlw
ZUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKIAog
ICAgIGlmICghd3JhcHBpbmdLZXktPmFsbG93cyhDcnlwdG9LZXlVc2FnZVdyYXBLZXkpKSB7CiAg
ICAgICAgIG1faW1wbC0+ZG9jdW1lbnQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJj
ZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiS2V5IHVzYWdlcyBkbyBu
b3QgaW5jbHVkZSAnd3JhcEtleSciKSk7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBO
T1RfU1VQUE9SVEVEX0VSUik7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIE5PVF9T
VVBQT1JURURfRVJSKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0g
ICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShleGVjLCBleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgzKSk7CisgICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdv
cml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMykpOwogICAg
IGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7
CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxn
b3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckVuY3J5cHQoZXhlYywgYWxnb3Jp
dGhtLT5pZGVudGlmaWVyKCksIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDMpKTsKKyAgICBhdXRv
IHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRl
cnNGb3JFbmNyeXB0KCZzdGF0ZSwgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIHN0YXRlLnVuY2hl
Y2tlZEFyZ3VtZW50KDMpKTsKICAgICBpZiAoIXBhcmFtZXRlcnMpIHsKLSAgICAgICAgQVNTRVJU
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgSlNQcm9t
aXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUo
ZXhlYywgZ2xvYmFsT2JqZWN0KCkpOwotICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVyKGV4ZWMs
IGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOworICAgIEpTUHJvbWlzZURlZmVycmVk
KiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xv
YmFsT2JqZWN0KCkpOworICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVyKCZzdGF0ZSwgZ2xvYmFs
T2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CiAKICAgICBDcnlwdG9BbGdvcml0aG0qIGFsZ29y
aXRobVB0ciA9IGFsZ29yaXRobS5yZWxlYXNlKCk7CiAgICAgQ3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVycyogcGFyYW1ldGVyc1B0ciA9IHBhcmFtZXRlcnMucmVsZWFzZSgpOwpAQCAtNjk1LDkwICs2
OTUsOTAgQEAgSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6d3JhcEtleShFeGVjU3RhdGUqIGV4ZWMp
CiAgICAgfTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFdlYkNvcmU6OmV4cG9y
dEtleShleGVjLCBrZXlGb3JtYXQsICprZXksIFdURjo6bW92ZShleHBvcnRTdWNjZXNzQ2FsbGJh
Y2spLCBXVEY6Om1vdmUoZXhwb3J0RmFpbHVyZUNhbGxiYWNrKSk7CisgICAgV2ViQ29yZTo6ZXhw
b3J0S2V5KHN0YXRlLCBrZXlGb3JtYXQsICprZXksIFdURjo6bW92ZShleHBvcnRTdWNjZXNzQ2Fs
bGJhY2spLCBXVEY6Om1vdmUoZXhwb3J0RmFpbHVyZUNhbGxiYWNrKSk7CiAgICAgaWYgKGVjKSB7
CiAgICAgICAgIGRlbGV0ZSBhbGdvcml0aG1QdHI7CiAgICAgICAgIGRlbGV0ZSBwYXJhbWV0ZXJz
UHRyOwotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBzZXRET01F
eGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IH0KIAogICAgIHJldHVybiBwcm9taXNlRGVmZXJyZWQtPnByb21pc2UoKTsKIH0KIAotSlNWYWx1
ZSBKU1N1YnRsZUNyeXB0bzo6dW53cmFwS2V5KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNT
dWJ0bGVDcnlwdG86OnVud3JhcEtleShFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPCA1KQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4
Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAg
aWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA8IDUpCisgICAgICAgIHJldHVybiBzdGF0ZS52bSgp
LnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0
YXRlKSk7CiAKICAgICBDcnlwdG9LZXlGb3JtYXQga2V5Rm9ybWF0OwotICAgIGlmICghY3J5cHRv
S2V5Rm9ybWF0RnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIGtleUZvcm1hdCkp
IHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBpZiAoIWNyeXB0
b0tleUZvcm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwga2V5Rm9ybWF0
KSkgeworICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBDcnlwdG9PcGVyYXRpb25EYXRhIHdyYXBw
ZWRLZXlEYXRhOwotICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKGV4ZWMs
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCB3cmFwcGVkS2V5RGF0YSkpIHsKLSAgICAgICAg
QVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRh
dGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLCB3cmFwcGVk
S2V5RGF0YSkpIHsKKyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgUmVmUHRyPENyeXB0b0tleT4g
dW53cmFwcGluZ0tleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMikpOworICAgIFJlZlB0cjxDcnlwdG9LZXk+IHVud3JhcHBpbmdLZXkgPSBKU0NyeXB0
b0tleTo6dG9XcmFwcGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKICAgICBpZiAoIXVu
d3JhcHBpbmdLZXkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAg
ICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CiAKICAgICBpZiAoIXVud3JhcHBpbmdL
ZXktPmFsbG93cyhDcnlwdG9LZXlVc2FnZVVud3JhcEtleSkpIHsKICAgICAgICAgbV9pbXBsLT5k
b2N1bWVudCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxl
dmVsOjpFcnJvciwgQVNDSUlMaXRlcmFsKCJLZXkgdXNhZ2VzIGRvIG5vdCBpbmNsdWRlICd1bndy
YXBLZXknIikpOwotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRFRF9F
UlIpOworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VSUik7
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIHN0ZDo6dW5pcXVl
X3B0cjxDcnlwdG9BbGdvcml0aG0+IHVud3JhcEFsZ29yaXRobTsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gdW53cmFwQWxnb3JpdGhtUGFyYW1ldGVyczsK
LSAgICB1bndyYXBBbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShleGVjLCBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgzKSk7CisgICAgdW53cmFwQWxnb3JpdGhtID0gY3JlYXRl
QWxnb3JpdGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDMpKTsK
ICAgICBpZiAoIXVud3JhcEFsZ29yaXRobSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgdW53cmFwQWxnb3JpdGhtUGFyYW1l
dGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckRl
Y3J5cHQoZXhlYywgdW53cmFwQWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDMpKTsKKyAgICB1bndyYXBBbGdvcml0aG1QYXJhbWV0ZXJzID0gSlNDcnlwdG9B
bGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRGVjcnlwdCgmc3RhdGUsIHVu
d3JhcEFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgzKSk7
CiAgICAgaWYgKCF1bndyYXBBbGdvcml0aG1QYXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VSVChl
eGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24o
KSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxDcnlwdG9BbGdvcml0aG0+IHVud3JhcHBlZEtleUFsZ29yaXRobTsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gdW53cmFwcGVkS2V5QWxnb3Jp
dGhtUGFyYW1ldGVyczsKLSAgICBpZiAoIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDQpLmlzTnVs
bCgpKSB7Ci0gICAgICAgIHVud3JhcHBlZEtleUFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZy
b21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDQpKTsKKyAgICBpZiAoIXN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDQpLmlzTnVsbCgpKSB7CisgICAgICAgIHVud3JhcHBlZEtl
eUFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudCg0KSk7CiAgICAgICAgIGlmICghdW53cmFwcGVkS2V5QWxnb3JpdGhtKSB7
Ci0gICAgICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICAgICAg
QVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgICAgICB9Ci0gICAgICAgIHVud3JhcHBlZEtleUFsZ29yaXRobVBhcmFtZXRl
cnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JJbXBv
cnRLZXkoZXhlYywgdW53cmFwcGVkS2V5QWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDQpKTsKKyAgICAgICAgdW53cmFwcGVkS2V5QWxnb3JpdGhtUGFyYW1l
dGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0Zvcklt
cG9ydEtleSgmc3RhdGUsIHVud3JhcHBlZEtleUFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0
ZS51bmNoZWNrZWRBcmd1bWVudCg0KSk7CiAgICAgICAgIGlmICghdW53cmFwcGVkS2V5QWxnb3Jp
dGhtUGFyYW1ldGVycykgewotICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KTsKKyAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGJvb2wgZXh0
cmFjdGFibGUgPSBmYWxzZTsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDYpIHsK
LSAgICAgICAgZXh0cmFjdGFibGUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCg1KS50b0Jvb2xl
YW4oZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoc3Rh
dGUuYXJndW1lbnRDb3VudCgpID49IDYpIHsKKyAgICAgICAgZXh0cmFjdGFibGUgPSBzdGF0ZS51
bmNoZWNrZWRBcmd1bWVudCg1KS50b0Jvb2xlYW4oJnN0YXRlKTsKKyAgICAgICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
fQogCiAgICAgQ3J5cHRvS2V5VXNhZ2Uga2V5VXNhZ2VzID0gMDsKLSAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpID49IDcpIHsKLSAgICAgICAgaWYgKCFjcnlwdG9LZXlVc2FnZXNGcm9tSlNW
YWx1ZShleGVjLCBleGVjLT5hcmd1bWVudCg2KSwga2V5VXNhZ2VzKSkgewotICAgICAgICAgICAg
QVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3Vu
dCgpID49IDcpIHsKKyAgICAgICAgaWYgKCFjcnlwdG9LZXlVc2FnZXNGcm9tSlNWYWx1ZShzdGF0
ZSwgc3RhdGUuYXJndW1lbnQoNiksIGtleVVzYWdlcykpIHsKKyAgICAgICAgICAgIEFTU0VSVChz
dGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJy
ZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCgpKTsKLSAg
ICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcihleGVjLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURl
ZmVycmVkKTsKLSAgICBTdHJvbmc8SlNET01HbG9iYWxPYmplY3Q+IGRvbUdsb2JhbE9iamVjdChl
eGVjLT52bSgpLCBnbG9iYWxPYmplY3QoKSk7CisgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21p
c2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmpl
Y3QoKSk7CisgICAgRGVmZXJyZWRXcmFwcGVyIHdyYXBwZXIoJnN0YXRlLCBnbG9iYWxPYmplY3Qo
KSwgcHJvbWlzZURlZmVycmVkKTsKKyAgICBTdHJvbmc8SlNET01HbG9iYWxPYmplY3Q+IGRvbUds
b2JhbE9iamVjdChzdGF0ZS52bSgpLCBnbG9iYWxPYmplY3QoKSk7CiAKICAgICBDcnlwdG9BbGdv
cml0aG0qIHVud3JhcHBlZEtleUFsZ29yaXRobVB0ciA9IHVud3JhcHBlZEtleUFsZ29yaXRobS5y
ZWxlYXNlKCk7CiAgICAgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyogdW53cmFwcGVkS2V5QWxn
b3JpdGhtUGFyYW1ldGVyc1B0ciA9IHVud3JhcHBlZEtleUFsZ29yaXRobVBhcmFtZXRlcnMucmVs
ZWFzZSgpOwpAQCAtNzkwLDExICs3OTAsMTEgQEAgSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6dW53
cmFwS2V5KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgYXV0byBpbXBvcnRGYWlsdXJlQ2FsbGJh
Y2sgPSBbd3JhcHBlcl0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIHdyYXBwZXIucmVqZWN0KG51
bGxwdHIpOwogICAgICAgICB9OwotICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBkb21HbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgV2ViQ29yZTo6aW1wb3J0S2V5KGV4ZWMsIGtl
eUZvcm1hdCwgc3RkOjptYWtlX3BhaXIocmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSksIHN0
ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG0+KHVud3JhcHBlZEtleUFsZ29yaXRobVB0ciks
IHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPih1bndyYXBwZWRLZXlB
bGdvcml0aG1QYXJhbWV0ZXJzUHRyKSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgV1RGOjptb3Zl
KGltcG9ydFN1Y2Nlc3NDYWxsYmFjayksIFdURjo6bW92ZShpbXBvcnRGYWlsdXJlQ2FsbGJhY2sp
KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIEV4ZWNTdGF0
ZSYgc3RhdGUgPSAqZG9tR2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgICAgIFdlYkNv
cmU6OmltcG9ydEtleShzdGF0ZSwga2V5Rm9ybWF0LCBzdGQ6Om1ha2VfcGFpcihyZXN1bHQuZGF0
YSgpLCByZXN1bHQuc2l6ZSgpKSwgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobT4odW53
cmFwcGVkS2V5QWxnb3JpdGhtUHRyKSwgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBh
cmFtZXRlcnM+KHVud3JhcHBlZEtleUFsZ29yaXRobVBhcmFtZXRlcnNQdHIpLCBleHRyYWN0YWJs
ZSwga2V5VXNhZ2VzLCBXVEY6Om1vdmUoaW1wb3J0U3VjY2Vzc0NhbGxiYWNrKSwgV1RGOjptb3Zl
KGltcG9ydEZhaWx1cmVDYWxsYmFjaykpOworICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBSZXBvcnQgZXhjZXB0aW9uIGRldGFpbHMgdG8g
Y29uc29sZSwgYW5kIHBvc3NpYmx5IHRvIGNhbGxpbmcgc2NyaXB0IG9uY2UgdGhlcmUgaXMgYSBz
dGFuZGFyZGl6ZWQgd2F5IHRvIHBhc3MgZXJyb3JzIHRvIFdlYkNyeXB0byBwcm9taXNlIHJlamVj
dCBmdW5jdGlvbnMuCi0gICAgICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAg
ICAgICAgc3RhdGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgICAgIGltcG9ydEZhaWx1cmVD
YWxsYmFjaygpOwogICAgICAgICB9CiAgICAgfTsKQEAgLTgxMCw3ICs4MTAsNyBAQCBKU1ZhbHVl
IEpTU3VidGxlQ3J5cHRvOjp1bndyYXBLZXkoRXhlY1N0YXRlKiBleGVjKQogICAgIGlmIChlYykg
ewogICAgICAgICBkZWxldGUgdW53cmFwcGVkS2V5QWxnb3JpdGhtUHRyOwogICAgICAgICBkZWxl
dGUgdW53cmFwcGVkS2V5QWxnb3JpdGhtUGFyYW1ldGVyc1B0cjsKLSAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAppbmRleCAxODg1YzU3N2U1MjU4
YWUzZGU1ZDJkMmQyYWRmY2IzMDkzOTFmZjc3Li5lYjE5ZjI1Nzg3MTk5ZjFlNzBlOTlhZjdhZDJm
YjA0MjdjZTlmNzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Rl
eHRUcmFja0N1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0
VHJhY2tDdXN0b20uY3BwCkBAIC00MSwyOCArNDEsMjggQEAgdm9pZCBKU1RleHRUcmFjazo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KHJvb3QoJmltcGwoKSkpOwogfQogCi12b2lkIEpTVGV4dFRyYWNrOjpzZXRL
aW5kKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNUZXh0VHJhY2s6OnNl
dEtpbmQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICNpZiBFTkFCTEUoTUVE
SUFfU09VUkNFKQotICAgIGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgYXV0byYgc3RyaW5n
ID0gdmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKKyAgICBpZiAoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsKCkuc2V0S2luZChzdHJp
bmcpOwogI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odmFsdWUpOwogI2VuZGlmCiB9CiAKLXZvaWQgSlNUZXh0
VHJhY2s6OnNldExhbmd1YWdlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQg
SlNUZXh0VHJhY2s6OnNldExhbmd1YWdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUp
CiB7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKLSAgICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0
ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAgICAg
aW1wbCgpLnNldExhbmd1YWdlKHN0cmluZyk7CiAjZWxzZQotICAgIFVOVVNFRF9QQVJBTShleGVj
KTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CiAj
ZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJhY2tF
dmVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyYWNrRXZlbnRD
dXN0b20uY3BwCmluZGV4IDk3OWVlMmEzMjA5YmYyZjAzZjVkNzg3YjA5YzVlYTMxY2I0MTMzMDgu
LmY1MWQzYjk2M2M4MTgwM2NmZTcxYjk0N2I0MmM5ZGJkMDJiYjg1YmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJhY2tFdmVudEN1c3RvbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmFja0V2ZW50Q3VzdG9tLmNwcApAQCAtMzYsMTMg
KzM2LDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
SlNWYWx1ZSBKU1RyYWNrRXZlbnQ6OnRyYWNrKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFs
dWUgSlNUcmFja0V2ZW50Ojp0cmFjayhFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewogICAgIFRy
YWNrQmFzZSogdHJhY2sgPSBpbXBsKCkudHJhY2soKTsKICAgICBpZiAoIXRyYWNrKQogICAgICAg
ICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qo
KSwgdHJhY2spOworICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHRyYWNr
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAKaW5kZXggOTQ4Njc4OGE2NmIyNDIxMzc3
ZGFjNTEwNmI2YmY1NTI2NzYyN2YwMC4uNmYwYWY1YWY1YThlYTFlMWVhN2U1ZmUxOTFlMGM4MDdj
MjA0MWU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1Ry
YWNrQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJh
Y2tDdXN0b20uY3BwCkBAIC00MCwyOCArNDAsMjggQEAgdm9pZCBKU1ZpZGVvVHJhY2s6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChyb290KCZpbXBsKCkpKTsKIH0KIAotdm9pZCBKU1ZpZGVvVHJhY2s6OnNldEtp
bmQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU1ZpZGVvVHJhY2s6OnNl
dEtpbmQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICNpZiBFTkFCTEUoTUVE
SUFfU09VUkNFKQotICAgIGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgYXV0byYgc3RyaW5n
ID0gdmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKKyAgICBpZiAoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsKCkuc2V0S2luZChzdHJp
bmcpOwogI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odmFsdWUpOwogI2VuZGlmCiB9CiAKLXZvaWQgSlNWaWRl
b1RyYWNrOjpzZXRMYW5ndWFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit2b2lk
IEpTVmlkZW9UcmFjazo6c2V0TGFuZ3VhZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1
ZSkKIHsKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQotICAgIGF1dG8mIHN0cmluZyA9IHZhbHVl
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgYXV0byYgc3RyaW5nID0gdmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0
YXRlKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKICAg
ICBpbXBsKCkuc2V0TGFuZ3VhZ2Uoc3RyaW5nKTsKICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGV4
ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsK
ICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZUN1c3RvbS5jcHAKaW5kZXggMjcwYjEyMGEy
M2VjZjhmZjM2OTJiNDliZDVjNmQyMDUwNDY2ZDQyYS4uNGU0ZTVjYTk4ZmMxNDkwMmEyY2MwMDBi
NmFiMDYzODkwYTIxYjE2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwCkBAIC0x
NjgsMTggKzE2OCwxOCBAQCBlbnVtIE9iamVjdFR5cGUgewogICAgIGtCdWZmZXIsIGtSZW5kZXJi
dWZmZXIsIGtUZXh0dXJlLCBrVmVydGV4QXR0cmliCiB9OwogCi1zdGF0aWMgSlNWYWx1ZSBnZXRP
YmplY3RQYXJhbWV0ZXIoSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBvYmosIEV4ZWNTdGF0
ZSogZXhlYywgT2JqZWN0VHlwZSBvYmplY3RUeXBlKQorc3RhdGljIEpTVmFsdWUgZ2V0T2JqZWN0
UGFyYW1ldGVyKEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogb2JqLCBFeGVjU3RhdGUmIHN0
YXRlLCBPYmplY3RUeXBlIG9iamVjdFR5cGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSAhPSAyKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVj
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAgaWYgKHN0YXRlLmFy
Z3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gc3RhdGUudm0oKS50aHJvd0V4Y2Vw
dGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogICAg
IAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UmIGNvbnRleHQgPSBvYmotPmltcGwoKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgw
KS50b0ludDMyKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIHVuc2lnbmVkIHBuYW1lID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkudG9J
bnQzMigmc3RhdGUpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgV2ViR0xHZXRJbmZvIGluZm87CiAgICAgc3dpdGNoIChv
YmplY3RUeXBlKSB7CkBAIC0yMDEsMTAgKzIwMSwxMCBAQCBzdGF0aWMgSlNWYWx1ZSBnZXRPYmpl
Y3RQYXJhbWV0ZXIoSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBvYmosIEV4ZWNTdGF0ZSog
ZQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4
Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQotICAgIHJldHVybiB0b0pTKGV4
ZWMsIG9iai0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOworICAgIHJldHVybiB0b0pTKCZzdGF0ZSwg
b2JqLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7CiB9CiAKIGVudW0gV2hpY2hQcm9ncmFtQ2FsbCB7
CkBAIC0yNjgsMTM3ICsyNjgsMTM3IEBAIHZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2aXNp
dG9yLmFkZE9wYXF1ZVJvb3QoJmltcGwoKSk7CiB9CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpnZXRBdHRhY2hlZFNoYWRlcnMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEF0dGFjaGVkU2hhZGVycyhFeGVjU3Rh
dGUmIHN0YXRlKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQotICAgICAg
ICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihleGVjKSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA8IDEp
CisgICAgICAgIHJldHVybiBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IGltcGwoKTsKLSAg
ICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBKU1dlYkdMUHJvZ3JhbTo6dG9XcmFwcGVkKGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIXByb2dyYW0gJiYgIWV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiB0aHJv
d1R5cGVFcnJvcihleGVjKTsKKyAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBKU1dlYkdMUHJv
Z3JhbTo6dG9XcmFwcGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoIXBy
b2dyYW0gJiYgIXN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkp
CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOwogICAgIFZlY3RvcjxSZWZQ
dHI8V2ViR0xTaGFkZXI+PiBzaGFkZXJzOwogICAgIGJvb2wgc3VjY2VlZCA9IGNvbnRleHQuZ2V0
QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIHNoYWRlcnMsIGVjKTsKICAgICBpZiAoZWMpIHsKLSAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KCZzdGF0ZSwgZWMpOwogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgfQogICAgIGlmICgh
c3VjY2VlZCkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIEpTQzo6TWFya2VkQXJndW1l
bnRCdWZmZXIgbGlzdDsKICAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgc2hhZGVycy5zaXpl
KCk7ICsraWkpCi0gICAgICAgIGxpc3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCks
IHNoYWRlcnNbaWldLmdldCgpKSk7Ci0gICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAs
IGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKKyAgICAgICAgbGlzdC5hcHBlbmQodG9KUygmc3RhdGUs
IGdsb2JhbE9iamVjdCgpLCBzaGFkZXJzW2lpXS5nZXQoKSkpOworICAgIHJldHVybiBjb25zdHJ1
Y3RBcnJheSgmc3RhdGUsIDAsIGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKIH0KIAotSlNWYWx1ZSBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEV4dGVuc2lvbihFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0RXh0ZW5zaW9uKEV4ZWNT
dGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCi0gICAg
ICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpIDwg
MSkKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKICAgICAKICAgICBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgpOwotICAgIGNvbnN0IFN0cmluZyBuYW1l
ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBjb25zdCBTdHJpbmcgbmFtZSA9
IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0
ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICBXZWJHTEV4dGVuc2lvbiogZXh0ZW5zaW9uID0gY29udGV4dC5nZXRFeHRl
bnNpb24obmFtZSk7Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGV4dGVu
c2lvbik7CisgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgZXh0ZW5zaW9u
KTsKIH0KIAotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEJ1ZmZlclBh
cmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6Z2V0QnVmZmVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJu
IGdldE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVjLCBrQnVmZmVyKTsKKyAgICByZXR1cm4gZ2V0
T2JqZWN0UGFyYW1ldGVyKHRoaXMsIHN0YXRlLCBrQnVmZmVyKTsKIH0KIAotSlNWYWx1ZSBKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
cihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0g
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAzKQotICAgICAgICByZXR1cm4gZXhlYy0+
dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihl
eGVjKSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSAhPSAzKQorICAgICAgICByZXR1
cm4gc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKCZzdGF0ZSkpOwogICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAg
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAgdW5zaWdu
ZWQgdGFyZ2V0ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgdW5zaWduZWQgdGFyZ2V0ID0gc3RhdGUu
dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMigmc3RhdGUpOworICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgdW5zaWduZWQg
YXR0YWNobWVudCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIHVuc2lnbmVkIGF0dGFjaG1lbnQgPSBz
dGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB1bnNp
Z25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLnRvSW50MzIoZXhlYyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIHVuc2lnbmVkIHBuYW1lID0gc3RhdGUu
dW5jaGVja2VkQXJndW1lbnQoMikudG9JbnQzMigmc3RhdGUpOworICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgV2ViR0xHZXRJ
bmZvIGluZm8gPSBjb250ZXh0LmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcih0YXJn
ZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCBlYyk7CiAgICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVj
KTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQotICAgIHJldHVybiB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGds
b2JhbE9iamVjdCgpLCBpbmZvKTsKIH0KIAotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmdldFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Z2V0UGFyYW1ldGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAg
aWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAxKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0o
KS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVj
KSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSAhPSAxKQorICAgICAgICByZXR1cm4g
c3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKCZzdGF0ZSkpOwogICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAgdW5zaWduZWQg
cG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICB1bnNpZ25lZCBwbmFtZSA9IHN0YXRlLnVuY2hl
Y2tlZEFyZ3VtZW50KDApLnRvSW50MzIoJnN0YXRlKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMR2V0SW5mbyBp
bmZvID0gY29udGV4dC5nZXRQYXJhbWV0ZXIocG5hbWUsIGVjKTsKICAgICBpZiAoZWMpIHsKLSAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KCZzdGF0ZSwgZWMpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9Ci0gICAg
cmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOworICAgIHJldHVybiB0b0pT
KCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwogfQogCi1KU1ZhbHVlIEpTV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Z2V0UHJvZ3JhbVBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCitK
U1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UHJvZ3JhbVBhcmFtZXRlcihF
eGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikK
LSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50
KCkgIT0gMikKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKICAgICAKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0
ID0gaW1wbCgpOwotICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9IEpTV2ViR0xQcm9ncmFtOjp0
b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghcHJvZ3JhbSAm
JiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAg
ICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gSlNXZWJHTFByb2dyYW06
OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFwcm9ncmFt
ICYmICFzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAg
ICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKKyAgICB1bnNpZ25lZCBwbmFtZSA9
IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoJnN0YXRlKTsKKyAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdl
YkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIHBu
YW1lLCBlYyk7CiAgICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBl
Yyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgfQotICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCgpLCBpbmZvKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBpbmZv
KTsKIH0KIAotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7
Ci0gICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVjLCBrUmVuZGVyYnVmZmVy
KTsKKyAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIHN0YXRlLCBrUmVuZGVyYnVm
ZmVyKTsKIH0KIAotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFNoYWRl
clBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6Z2V0U2hhZGVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50
aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7
CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gc3Rh
dGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKCZzdGF0ZSkpOwogICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAgaWYgKCFleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICFleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgwKS5pbmhlcml0cyhKU1dlYkdMU2hhZGVyOjppbmZvKCkpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgV2ViR0xTaGFkZXIqIHNoYWRlciA9IEpT
V2ViR0xTaGFkZXI6OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAg
dW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoIXN0YXRlLnVuY2hlY2tl
ZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgIXN0YXRlLnVuY2hlY2tlZEFyZ3Vt
ZW50KDApLmluaGVyaXRzKEpTV2ViR0xTaGFkZXI6OmluZm8oKSkpCisgICAgICAgIHJldHVybiB0
aHJvd1R5cGVFcnJvcigmc3RhdGUpOworICAgIFdlYkdMU2hhZGVyKiBzaGFkZXIgPSBKU1dlYkdM
U2hhZGVyOjp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIHVuc2ln
bmVkIHBuYW1lID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMigmc3RhdGUpOwor
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFNoYWRlclBhcmFtZXRlcihz
aGFkZXIsIHBuYW1lLCBlYyk7CiAgICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlv
bihleGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQotICAgIHJldHVybiB0b0pTKGV4ZWMsIGds
b2JhbE9iamVjdCgpLCBpbmZvKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVj
dCgpLCBpbmZvKTsKIH0KIAotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Omdl
dFN1cHBvcnRlZEV4dGVuc2lvbnMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoRXhlY1N0YXRlJiBzdGF0
ZSkKIHsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgpOwog
ICAgIGlmIChjb250ZXh0LmlzQ29udGV4dExvc3QoKSkKQEAgLTQwNiw1OSArNDA2LDU5IEBAIEpT
VmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRTdXBwb3J0ZWRFeHRlbnNpb25z
KEV4ZWNTdGF0ZSogZXhlYykKICAgICBWZWN0b3I8U3RyaW5nPiB2YWx1ZSA9IGNvbnRleHQuZ2V0
U3VwcG9ydGVkRXh0ZW5zaW9ucygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CiAg
ICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHZhbHVlLnNpemUoKTsgKytpaSkKLSAgICAgICAg
bGlzdC5hcHBlbmQoanNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgdmFsdWVbaWldKSk7Ci0gICAgcmV0
dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKKyAgICAg
ICAgbGlzdC5hcHBlbmQoanNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZVtpaV0pKTsKKyAg
ICByZXR1cm4gY29uc3RydWN0QXJyYXkoJnN0YXRlLCAwLCBnbG9iYWxPYmplY3QoKSwgbGlzdCk7
CiB9CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRUZXhQYXJhbWV0
ZXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmdldFRleFBhcmFtZXRlcihFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIHJldHVybiBnZXRPYmpl
Y3RQYXJhbWV0ZXIodGhpcywgZXhlYywga1RleHR1cmUpOworICAgIHJldHVybiBnZXRPYmplY3RQ
YXJhbWV0ZXIodGhpcywgc3RhdGUsIGtUZXh0dXJlKTsKIH0KIAotSlNWYWx1ZSBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuaWZvcm0oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuaWZvcm0oRXhlY1N0YXRlJiBzdGF0ZSkK
IHsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCi0gICAgICAgIHJldHVybiBl
eGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGV4ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpICE9IDIpCisgICAgICAg
IHJldHVybiBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IGltcGwoKTsKLSAgICBX
ZWJHTFByb2dyYW0qIHByb2dyYW0gPSBKU1dlYkdMUHJvZ3JhbTo6dG9XcmFwcGVkKGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIXByb2dyYW0gJiYgIWV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5
cGVFcnJvcihleGVjKTsKLSAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSBKU1dl
YkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkp
OwotICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAg
ICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBKU1dlYkdMUHJvZ3JhbTo6dG9XcmFwcGVkKHN0YXRl
LnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoIXByb2dyYW0gJiYgIXN0YXRlLnVuY2hl
Y2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJv
d1R5cGVFcnJvcigmc3RhdGUpOworICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9
IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgxKSk7CisgICAgaWYgKCFsb2NhdGlvbiAmJiAhc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSku
aXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0
ZSk7CiAgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFVuaWZvcm0ocHJvZ3JhbSwg
bG9jYXRpb24sIGVjKTsKICAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0KCksIGluZm8pOworICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCks
IGluZm8pOwogfQogCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VmVy
dGV4QXR0cmliKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpnZXRWZXJ0ZXhBdHRyaWIoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1cm4g
Z2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGtWZXJ0ZXhBdHRyaWIpOworICAgIHJldHVy
biBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgc3RhdGUsIGtWZXJ0ZXhBdHRyaWIpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci1ib29sIHRvVmVjdG9y
KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eT4mIHZlY3RvcikKK2Jvb2wgdG9WZWN0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikK
IHsKICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7Ci0gICAgaW50
MzJfdCBsZW5ndGggPSBvYmplY3QtPmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMt
Pmxlbmd0aCkudG9JbnQzMihleGVjKTsKKyAgICBpbnQzMl90IGxlbmd0aCA9IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgc3RhdGUudm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvSW50MzIoJnN0YXRl
KTsKICAgICAKICAgICBpZiAoIXZlY3Rvci50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHZlY3Rvci5yZXNpemUobGVuZ3RoKTsKICAgICAKICAg
ICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBKU0M6OkpT
VmFsdWUgdiA9IG9iamVjdC0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIEpTQzo6SlNWYWx1ZSB2ID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBp
KTsKKyAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB2ZWN0b3JbaV0gPSBzdGF0aWNfY2FzdDxUPih2LnRvTnVtYmVyKGV4
ZWMpKTsKKyAgICAgICAgdmVjdG9yW2ldID0gc3RhdGljX2Nhc3Q8VD4odi50b051bWJlcigmc3Rh
dGUpKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHRydWU7CkBAIC00ODYsMjYgKzQ4NiwyNiBA
QCBzdGF0aWMgYm9vbCBmdW5jdGlvbkZvclVuaWZvcm0oRGF0YUZ1bmN0aW9uVG9DYWxsIGYpCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmYo
RGF0YUZ1bmN0aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlJiBjb250ZXh0KQorc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25m
KERhdGFGdW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSAhPSAyKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAgaWYgKHN0YXRlLmFyZ3Vt
ZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlv
bigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogICAgIAog
ICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IDA7CiAgICAgbG9uZyBpbmRleCA9
IC0xOwogICAgIAogICAgIGlmIChmdW5jdGlvbkZvclVuaWZvcm0oZikpIHsKLSAgICAgICAgbG9j
YXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOwotICAgICAgICBpZiAoIWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRB
cmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKGV4ZWMpOworICAgICAgICBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRp
b246OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgICAgIGlmICgh
bG9jYXRpb24gJiYgIXN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKICAgICB9IGVs
c2UKLSAgICAgICAgaW5kZXggPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4
ZWMpOworICAgICAgICBpbmRleCA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIo
JnN0YXRlKTsKICAgICAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAK
LSAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9GbG9hdDMyQXJyYXkoZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkg
ICAgCisgICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvRmxvYXQzMkFycmF5
KHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIAogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwpAQCAtNTM3LDEzICs1MzcsMTMgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRh
RnVuY3Rpb25mKERhdGFGdW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgV2UK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KICAgICAKICAgICBWZWN0b3I8
ZmxvYXQsIDY0PiBhcnJheTsKLSAgICBpZiAoIXRvVmVjdG9yKGV4ZWMsIGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDEpLCBhcnJheSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVj
KTsKKyAgICBpZiAoIXRvVmVjdG9yKHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSwg
YXJyYXkpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKICAgICAKICAg
ICBzd2l0Y2ggKGYpIHsKICAgICBjYXNlIGZfdW5pZm9ybTF2OgpAQCAtNTcyLDIwICs1NzIsMjAg
QEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25mKERhdGFGdW5jdGlvblRvQ2FsbCBm
LCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgV2UKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIAot
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0
ZSwgZWMpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgSlNDOjpKU1Zh
bHVlIGRhdGFGdW5jdGlvbmkoRGF0YUZ1bmN0aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0KQorc3RhdGljIEpTQzo6SlNW
YWx1ZSBkYXRhRnVuY3Rpb25pKERhdGFGdW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCiB7Ci0gICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJv
d0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Cisg
ICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gc3RhdGUu
dm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KCZzdGF0ZSkpOwogICAgIAotICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IEpT
V2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgw
KSk7Ci0gICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNV
bmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwor
ICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRp
b246OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFsb2Nh
dGlvbiAmJiAhc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkK
KyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CiAgICAgCi0gICAgUmVmUHRy
PEludDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0b0ludDMyQXJyYXkoZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMSkpOworICAgIFJlZlB0cjxJbnQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9JbnQzMkFy
cmF5KHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKICAgICAKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKICAgICBpZiAod2ViR0xBcnJheSkgewpAQCAtNjA2LDE0ICs2MDYsMTQgQEAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25pKERhdGFGdW5jdGlvblRvQ2FsbCBmLCBKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgV2UKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBzZXRET01F
eGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IH0KICAgICAKICAgICAKICAgICBWZWN0b3I8aW50LCA2ND4gYXJyYXk7Ci0gICAgaWYgKCF0b1Zl
Y3RvcihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgYXJyYXkpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgaWYgKCF0b1ZlY3RvcihzdGF0ZSwgc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMSksIGFycmF5KSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlw
ZUVycm9yKCZzdGF0ZSk7CiAgICAgCiAgICAgc3dpdGNoIChmKSB7CiAgICAgY2FzZSBmX3VuaWZv
cm0xdjoKQEAgLTYzMiwyNCArNjMyLDI0IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0
aW9uaShEYXRhRnVuY3Rpb25Ub0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFdlCiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICAKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwor
ICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIAotc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25NYXRyaXgoRGF0YUZ1bmN0
aW9uTWF0cml4VG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlJiBjb250ZXh0KQorc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25NYXRy
aXgoRGF0YUZ1bmN0aW9uTWF0cml4VG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkKIHsKLSAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpICE9IDMpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9u
KGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3Rh
dGUuYXJndW1lbnRDb3VudCgpICE9IDMpCisgICAgICAgIHJldHVybiBzdGF0ZS52bSgpLnRocm93
RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7
CiAgICAgCi0gICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gSlNXZWJHTFVuaWZv
cm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBp
ZiAoIWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9y
TnVsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFw
cGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoIWxvY2F0aW9uICYmICFz
dGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKICAgICAKLSAgICBib29sIHRyYW5zcG9zZSA9
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvQm9vbGVhbihleGVjKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpICAgIAorICAgIGJvb2wgdHJhbnNwb3NlID0gc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoMSkudG9Cb29sZWFuKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAKLSAgICBSZWZQdHI8
RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9GbG9hdDMyQXJyYXkoZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMikpOworICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0b0Zs
b2F0MzJBcnJheShzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSk7CiAgICAgCiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CiAgICAgaWYgKHdlYkdMQXJyYXkpIHsKQEAgLTY2NSwxMyArNjY1LDEz
IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uTWF0cml4KERhdGFGdW5jdGlvbk1h
dHJpeFRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAg
c2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICB9CiAgICAgCiAgICAgVmVjdG9yPGZsb2F0LCA2ND4gYXJyYXk7Ci0gICAgaWYgKCF0
b1ZlY3RvcihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKSwgYXJyYXkpKQotICAgICAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgaWYgKCF0b1ZlY3RvcihzdGF0ZSwg
c3RhdGUudW5jaGVja2VkQXJndW1lbnQoMiksIGFycmF5KSkKKyAgICAgICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKCZzdGF0ZSk7CiAgICAgCiAgICAgc3dpdGNoIChmKSB7CiAgICAgY2FzZSBmX3Vu
aWZvcm1NYXRyaXgyZnY6CkBAIC02ODUsODMgKzY4NSw4MyBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGRhdGFGdW5jdGlvbk1hdHJpeChEYXRhRnVuY3Rpb25NYXRyaXhUb0NhbGwgZiwgSlNDOjpFeGVj
U3RhdAogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnVuaWZvcm0xZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCitKU0M6OkpTVmFsdWUgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMWZ2KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkK
IHsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0xdiwgZXhlYywgaW1wbCgpKTsK
KyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0xdiwgc3RhdGUsIGltcGwoKSk7CiB9
CiAKLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0xaXYo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp1bmlmb3JtMWl2KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1cm4g
ZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm0xdiwgZXhlYywgaW1wbCgpKTsKKyAgICByZXR1cm4gZGF0
YUZ1bmN0aW9uaShmX3VuaWZvcm0xdiwgc3RhdGUsIGltcGwoKSk7CiB9CiAKLUpTQzo6SlNWYWx1
ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yZnYoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3Jt
MmZ2KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihm
X3VuaWZvcm0ydiwgZXhlYywgaW1wbCgpKTsKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3Vu
aWZvcm0ydiwgc3RhdGUsIGltcGwoKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCitKU0M6OkpT
VmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMml2KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm0ydiwgZXhl
YywgaW1wbCgpKTsKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm0ydiwgc3RhdGUs
IGltcGwoKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnVuaWZvcm0zZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtM2Z2KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKIHsK
LSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0zdiwgZXhlYywgaW1wbCgpKTsKKyAg
ICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0zdiwgc3RhdGUsIGltcGwoKSk7CiB9CiAK
LUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0zaXYoSlND
OjpFeGVjU3RhdGUqIGV4ZWMpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp1bmlmb3JtM2l2KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1cm4gZGF0
YUZ1bmN0aW9uaShmX3VuaWZvcm0zdiwgZXhlYywgaW1wbCgpKTsKKyAgICByZXR1cm4gZGF0YUZ1
bmN0aW9uaShmX3VuaWZvcm0zdiwgc3RhdGUsIGltcGwoKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm00ZnYoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtNGZ2
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3Vu
aWZvcm00diwgZXhlYywgaW1wbCgpKTsKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZv
cm00diwgc3RhdGUsIGltcGwoKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnVuaWZvcm00aXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCitKU0M6OkpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtNGl2KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSkKIHsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm00diwgZXhlYywg
aW1wbCgpKTsKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm00diwgc3RhdGUsIGlt
cGwoKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVu
aWZvcm1NYXRyaXgyZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCitKU0M6OkpTVmFsdWUgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4MmZ2KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSkKIHsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDJm
diwgZXhlYywgaW1wbCgpKTsKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9y
bU1hdHJpeDJmdiwgc3RhdGUsIGltcGwoKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1NYXRyaXgzZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMp
CitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4
M2Z2KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uTWF0
cml4KGZfdW5pZm9ybU1hdHJpeDNmdiwgZXhlYywgaW1wbCgpKTsKKyAgICByZXR1cm4gZGF0YUZ1
bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDNmdiwgc3RhdGUsIGltcGwoKSk7CiB9CiAKLUpT
Qzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1NYXRyaXg0ZnYo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp1bmlmb3JtTWF0cml4NGZ2KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBy
ZXR1cm4gZGF0YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDRmdiwgZXhlYywgaW1wbCgp
KTsKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDRmdiwgc3Rh
dGUsIGltcGwoKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnZlcnRleEF0dHJpYjFmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK0pTQzo6SlNWYWx1ZSBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjFmdihKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIxdiwg
ZXhlYywgaW1wbCgpKTsKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRleEF0dHJpYjF2
LCBzdGF0ZSwgaW1wbCgpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dmVydGV4QXR0cmliMmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQorSlNDOjpKU1Zh
bHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliMmZ2KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRleEF0dHJp
YjJ2LCBleGVjLCBpbXBsKCkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0
cmliMnYsIHN0YXRlLCBpbXBsKCkpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIzZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCitKU0M6
OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIzZnYoSlND
OjpFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4
QXR0cmliM3YsIGV4ZWMsIGltcGwoKSk7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0
ZXhBdHRyaWIzdiwgc3RhdGUsIGltcGwoKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjRmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykK
K0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjRm
dihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92
ZXJ0ZXhBdHRyaWI0diwgZXhlYywgaW1wbCgpKTsKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihm
X3ZlcnRleEF0dHJpYjR2LCBzdGF0ZSwgaW1wbCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0
b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwCmlu
ZGV4IDIxNzVmYzZlMWExY2ViNTVkNjgwODM3YWVlODFkNDZlZmNlNzhmY2YuLjA1YTllNzAyZTdj
ODE5YmY3Yjc1MWQ5YmU3N2MxMTJiZTM1OTRmYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAKQEAgLTQwLDkgKzQwLDkgQEAgdXNpbmcgbmFtZXNw
YWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU0M6OkpTVmFsdWUgSlNXb3JrZXI6
OnBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQorSlNDOjpKU1ZhbHVlIEpTV29ya2Vy
Ojpwb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIGhhbmRs
ZVBvc3RNZXNzYWdlKGV4ZWMsICZpbXBsKCkpOworICAgIHJldHVybiBoYW5kbGVQb3N0TWVzc2Fn
ZShzdGF0ZSwgJmltcGwoKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0SlNXb3JrZXIoRXhlY1N0YXRlKiBleGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAppbmRleCA4NTdk
NDgwOWE3ZDFjYWVmNGI4YzYxYTU2OTA4NWU2Yjg2ZDUyMDFhLi4xMjg5OGNjOTc1YmVmNTAwYjNi
MTBkYmFmMWY2NTBhODZkYzNjMzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcApAQCAtNjcsNDMgKzY3LDQz
IEBAIGJvb2wgSlNXb3JrZXJHbG9iYWxTY29wZTo6Z2V0T3duUHJvcGVydHlTbG90RGVsZWdhdGUo
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1KU1Zh
bHVlIEpTV29ya2VyR2xvYmFsU2NvcGU6OmltcG9ydFNjcmlwdHMoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjppbXBvcnRTY3JpcHRzKEV4ZWNTdGF0ZSYgc3Rh
dGUpCiB7Ci0gICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgaWYgKCFzdGF0ZS5h
cmd1bWVudENvdW50KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgVmVj
dG9yPFN0cmluZz4gdXJsczsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhlYy0+YXJn
dW1lbnRDb3VudCgpOyBpKyspIHsKLSAgICAgICAgdXJscy5hcHBlbmQoZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5h
cmd1bWVudENvdW50KCk7ICsraSkgeworICAgICAgICB1cmxzLmFwcGVuZChzdGF0ZS51bmNoZWNr
ZWRBcmd1bWVudChpKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpKTsKKyAgICAgICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgfQogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogCiAgICAgaW1wbCgpLmltcG9y
dFNjcmlwdHModXJscywgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAg
c2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
fQogCi1KU1ZhbHVlIEpTV29ya2VyR2xvYmFsU2NvcGU6OnNldFRpbWVvdXQoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjpzZXRUaW1lb3V0KEV4ZWNTdGF0ZSYg
c3RhdGUpCiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFNjaGVkdWxlZEFjdGlvbj4gYWN0aW9uID0g
U2NoZWR1bGVkQWN0aW9uOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KCktPndvcmxkKCksIGlt
cGwoKS5jb250ZW50U2VjdXJpdHlQb2xpY3koKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVk
dWxlZEFjdGlvbjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCktPndvcmxkKCksIGltcGwo
KS5jb250ZW50U2VjdXJpdHlQb2xpY3koKSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpZiAoIWFjdGlvbikKICAgICAg
ICAgcmV0dXJuIGpzTnVtYmVyKDApOwotICAgIGludCBkZWxheSA9IGV4ZWMtPmFyZ3VtZW50KDEp
LnRvSW50MzIoZXhlYyk7CisgICAgaW50IGRlbGF5ID0gc3RhdGUuYXJndW1lbnQoMSkudG9JbnQz
Migmc3RhdGUpOwogICAgIHJldHVybiBqc051bWJlcihpbXBsKCkuc2V0VGltZW91dChXVEY6Om1v
dmUoYWN0aW9uKSwgZGVsYXkpKTsKIH0KIAotSlNWYWx1ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjpz
ZXRJbnRlcnZhbChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTV29ya2VyR2xvYmFsU2NvcGU6
OnNldEludGVydmFsKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFNj
aGVkdWxlZEFjdGlvbj4gYWN0aW9uID0gU2NoZWR1bGVkQWN0aW9uOjpjcmVhdGUoZXhlYywgZ2xv
YmFsT2JqZWN0KCktPndvcmxkKCksIGltcGwoKS5jb250ZW50U2VjdXJpdHlQb2xpY3koKSk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVs
ZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFs
T2JqZWN0KCktPndvcmxkKCksIGltcGwoKS5jb250ZW50U2VjdXJpdHlQb2xpY3koKSk7CisgICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICBpZiAoIWFjdGlvbikKICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKDApOwotICAgIGludCBk
ZWxheSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgaW50IGRlbGF5ID0g
c3RhdGUuYXJndW1lbnQoMSkudG9JbnQzMigmc3RhdGUpOwogICAgIHJldHVybiBqc051bWJlcihp
bXBsKCkuc2V0SW50ZXJ2YWwoV1RGOjptb3ZlKGFjdGlvbiksIGRlbGF5KSk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20u
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5j
cHAKaW5kZXggMGY5YzFjYWYwMDIyYWFmMWU3YThkMjQ2ZDU4MTVmYjgxNTIwMjZjZS4uMTE1NDU3
NDUzMWRjZmQ1YzkzN2E2NWY5MjVkMDQxMzZjMDdiMTZlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAKQEAgLTcyLDIy
ICs3MiwyMiBAQCB2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogfQogCiAvLyBDdXN0b20gZnVuY3Rpb25zCi1KU1ZhbHVl
IEpTWE1MSHR0cFJlcXVlc3Q6Om9wZW4oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1hNTEh0
dHBSZXF1ZXN0OjpvcGVuKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA8IDIpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9u
KGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3Rh
dGUuYXJndW1lbnRDb3VudCgpIDwgMikKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dF
eGNlcHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsK
IAotICAgIGNvbnN0IFVSTCYgdXJsID0gaW1wbCgpLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+
Y29tcGxldGVVUkwoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpKTsKLSAgICBTdHJpbmcgbWV0aG9kID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIGNvbnN0IFVSTCYgdXJsID0gaW1w
bCgpLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Y29tcGxldGVVUkwoc3RhdGUudW5jaGVja2Vk
QXJndW1lbnQoMSkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKSk7CisgICAgU3RyaW5n
IG1ldGhvZCA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZh
bHVlKCZzdGF0ZSk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpID49IDMpIHsKLSAgICAgICAgYm9vbCBhc3luYyA9IGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVjKTsKLSAgICAgICAgaWYgKCFleGVjLT5hcmd1
bWVudCgzKS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdXNlciA9IHZhbHVl
VG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDMpKTsK
KyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID49IDMpIHsKKyAgICAgICAgYm9vbCBhc3lu
YyA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLnRvQm9vbGVhbigmc3RhdGUpOworICAgICAg
ICBpZiAoIXN0YXRlLmFyZ3VtZW50KDMpLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgICAgIFN0
cmluZyB1c2VyID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudCgzKSk7CiAKLSAgICAgICAgICAgIGlmICghZXhlYy0+YXJndW1lbnQoNCku
aXNVbmRlZmluZWQoKSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBwYXNzd29yZCA9IHZhbHVl
VG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDQpKTsK
KyAgICAgICAgICAgIGlmICghc3RhdGUuYXJndW1lbnQoNCkuaXNVbmRlZmluZWQoKSkgeworICAg
ICAgICAgICAgICAgIFN0cmluZyBwYXNzd29yZCA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNr
KCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoNCkpOwogICAgICAgICAgICAgICAgIGlt
cGwoKS5vcGVuKG1ldGhvZCwgdXJsLCBhc3luYywgdXNlciwgcGFzc3dvcmQsIGVjKTsKICAgICAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIGltcGwoKS5vcGVuKG1ldGhvZCwgdXJsLCBh
c3luYywgdXNlciwgZWMpOwpAQCAtOTYsNyArOTYsNyBAQCBKU1ZhbHVlIEpTWE1MSHR0cFJlcXVl
c3Q6Om9wZW4oRXhlY1N0YXRlKiBleGVjKQogICAgIH0gZWxzZQogICAgICAgICBpbXBsKCkub3Bl
bihtZXRob2QsIHVybCwgZWMpOwogCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAg
ICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiB9CiAKQEAgLTEzNiwxMiArMTM2LDEyIEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fdXJsOwog
fTsKIAotSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0OjpzZW5kKEV4ZWNTdGF0ZSogZXhlYykKK0pT
VmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6c2VuZChFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRYTUxIdHRwUmVxdWVzdChpbXBsKCkuc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLCBpbXBsKCkudXJsKCkpOwogCiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgSlNWYWx1ZSB2YWwgPSBleGVjLT5hcmd1bWVudCgwKTsKKyAgICBKU1Zh
bHVlIHZhbCA9IHN0YXRlLmFyZ3VtZW50KDApOwogICAgIGlmICh2YWwuaXNVbmRlZmluZWRPck51
bGwoKSkKICAgICAgICAgaW1wbCgpLnNlbmQoZWMpOwogICAgIGVsc2UgaWYgKHZhbC5pbmhlcml0
cyhKU0RvY3VtZW50OjppbmZvKCkpKQpAQCAtMTU2LDI4ICsxNTYsMjggQEAgSlNWYWx1ZSBKU1hN
TEh0dHBSZXF1ZXN0OjpzZW5kKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgUmVmUHRyPEFycmF5
QnVmZmVyVmlldz4gdmlldyA9IHRvQXJyYXlCdWZmZXJWaWV3KHZhbCk7CiAgICAgICAgIGltcGwo
KS5zZW5kKHZpZXcuZ2V0KCksIGVjKTsKICAgICB9IGVsc2UKLSAgICAgICAgaW1wbCgpLnNlbmQo
dmFsLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgZWMpOworICAgICAgICBpbXBsKCkuc2Vu
ZCh2YWwudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKSwgZWMpOwogCiAgICAgU2VuZEZ1
bmN0b3IgZnVuY3RvcjsKLSAgICBleGVjLT5pdGVyYXRlKGZ1bmN0b3IpOworICAgIHN0YXRlLml0
ZXJhdGUoZnVuY3Rvcik7CiAgICAgaW1wbCgpLnNldExhc3RTZW5kTGluZUFuZENvbHVtbk51bWJl
cihmdW5jdG9yLmxpbmUoKSwgZnVuY3Rvci5jb2x1bW4oKSk7CiAgICAgaW1wbCgpLnNldExhc3RT
ZW5kVVJMKGZ1bmN0b3IudXJsKCkpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Cisg
ICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQogCi1KU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlVGV4dChFeGVjU3RhdGUq
IGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlVGV4dChFeGVj
U3RhdGUmIHN0YXRlKSBjb25zdAogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFN0
cmluZyB0ZXh0ID0gaW1wbCgpLnJlc3BvbnNlVGV4dChlYyk7CiAgICAgaWYgKGVjKSB7Ci0gICAg
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigm
c3RhdGUsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQotICAgIHJl
dHVybiBqc093bmVkU3RyaW5nT3JOdWxsKGV4ZWMsIHRleHQpOworICAgIHJldHVybiBqc093bmVk
U3RyaW5nT3JOdWxsKCZzdGF0ZSwgdGV4dCk7CiB9CiAKLUpTVmFsdWUgSlNYTUxIdHRwUmVxdWVz
dDo6cmVzcG9uc2UoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU1hNTEh0dHBSZXF1
ZXN0OjpyZXNwb25zZShFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBV
c2UgQ2FjaGVkQXR0cmlidXRlIGZvciBvdGhlciB0eXBlcyB0aGFuIEpTT04gYXMgd2VsbC4KICAg
ICBpZiAobV9yZXNwb25zZSAmJiBpbXBsKCkucmVzcG9uc2VDYWNoZUlzVmFsaWQoKSkKQEAgLTE4
OSwxNSArMTg5LDE1IEBAIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2UoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAogICAgIHN3aXRjaCAoaW1wbCgpLnJlc3BvbnNlVHlwZUNvZGUoKSkg
ewogICAgIGNhc2UgWE1MSHR0cFJlcXVlc3Q6OlJlc3BvbnNlVHlwZURlZmF1bHQ6CiAgICAgY2Fz
ZSBYTUxIdHRwUmVxdWVzdDo6UmVzcG9uc2VUeXBlVGV4dDoKLSAgICAgICAgcmV0dXJuIHJlc3Bv
bnNlVGV4dChleGVjKTsKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlVGV4dChzdGF0ZSk7CiAKICAg
ICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpSZXNwb25zZVR5cGVKU09OOgogICAgICAgICB7Ci0gICAg
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSlNPTlBhcnNlKGV4ZWMsIGltcGwoKS5yZXNwb25zZVRl
eHRJZ25vcmluZ1Jlc3BvbnNlVHlwZSgpKTsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBK
U09OUGFyc2UoJnN0YXRlLCBpbXBsKCkucmVzcG9uc2VUZXh0SWdub3JpbmdSZXNwb25zZVR5cGUo
KSk7CiAgICAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgICAgIHZhbHVlID0ganNO
dWxsKCk7CiAgICAgICAgICAgICBKU1hNTEh0dHBSZXF1ZXN0KiBqc1JlcXVlc3QgPSBjb25zdF9j
YXN0PEpTWE1MSHR0cFJlcXVlc3QqPih0aGlzKTsKLSAgICAgICAgICAgIGpzUmVxdWVzdC0+bV9y
ZXNwb25zZS5zZXQoZXhlYy0+dm0oKSwganNSZXF1ZXN0LCB2YWx1ZSk7CisgICAgICAgICAgICBq
c1JlcXVlc3QtPm1fcmVzcG9uc2Uuc2V0KHN0YXRlLnZtKCksIGpzUmVxdWVzdCwgdmFsdWUpOwog
CiAgICAgICAgICAgICBpbXBsKCkuZGlkQ2FjaGVSZXNwb25zZUpTT04oKTsKIApAQCAtMjA5LDE3
ICsyMDksMTcgQEAgSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZShFeGVjU3RhdGUq
IGV4ZWMpIGNvbnN0CiAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAgICAg
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGltcGwoKS5yZXNwb25zZVhNTChlYyk7CiAgICAgICAg
ICAgICBpZiAoZWMpIHsKLSAgICAgICAgICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OworICAgICAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBkb2N1bWVudCk7CisgICAgICAgICAg
ICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBkb2N1bWVudCk7CiAgICAgICAg
IH0KIAogICAgIGNhc2UgWE1MSHR0cFJlcXVlc3Q6OlJlc3BvbnNlVHlwZUJsb2I6Ci0gICAgICAg
IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbXBsKCkucmVzcG9uc2VCbG9iKCkp
OworICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBpbXBsKCkucmVz
cG9uc2VCbG9iKCkpOwogCiAgICAgY2FzZSBYTUxIdHRwUmVxdWVzdDo6UmVzcG9uc2VUeXBlQXJy
YXlCdWZmZXI6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbXBs
KCkucmVzcG9uc2VBcnJheUJ1ZmZlcigpKTsKKyAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBn
bG9iYWxPYmplY3QoKSwgaW1wbCgpLnJlc3BvbnNlQXJyYXlCdWZmZXIoKSk7CiAgICAgfQogCiAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAppbmRleCBkOThhZTA0MmUxMmMwNTgwMjZj
NWRlNWUyOWIxNjZiN2Y1NmI4MWFjLi4zMzFiOWYxYjBiYmY1NzlhYzQ1MmQwN2VkYzFiOWY2NThm
Y2Y2MTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9j
ZXNzb3JDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFBy
b2Nlc3NvckN1c3RvbS5jcHAKQEAgLTQ2LDMzICs0NiwzMyBAQCB1c2luZyBuYW1lc3BhY2UgSlND
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNYU0xUUHJvY2Vzc29yOjpzZXRQ
YXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6OnNldFBh
cmFtZXRlcihFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudCgxKS5p
c1VuZGVmaW5lZE9yTnVsbCgpIHx8IGV4ZWMtPmFyZ3VtZW50KDIpLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCisgICAgaWYgKHN0YXRlLmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkgfHwgc3Rh
dGUuYXJndW1lbnQoMikuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7IC8vIFRocm93IGV4Y2VwdGlvbj8KLSAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0g
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIFN0cmluZyBsb2NhbE5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgU3RyaW5nIHZhbHVlID0gZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMikudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIFN0cmluZyBuYW1l
c3BhY2VVUkkgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUpLT52
YWx1ZSgmc3RhdGUpOworICAgIFN0cmluZyBsb2NhbE5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1
bWVudCgxKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOworICAgIFN0cmluZyB2YWx1
ZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZz
dGF0ZSk7CiAgICAgaW1wbCgpLnNldFBhcmFtZXRlcihuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSwg
dmFsdWUpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTWFNMVFBy
b2Nlc3Nvcjo6Z2V0UGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNYU0xUUHJv
Y2Vzc29yOjpnZXRQYXJhbWV0ZXIoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoZXhlYy0+
YXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICBpZiAoc3RhdGUuYXJndW1lbnQo
MSkuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0g
ICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBTdHJpbmcgbG9jYWxOYW1lID0gZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIFN0cmlu
ZyBuYW1lc3BhY2VVUkkgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZygmc3Rh
dGUpLT52YWx1ZSgmc3RhdGUpOworICAgIFN0cmluZyBsb2NhbE5hbWUgPSBzdGF0ZS51bmNoZWNr
ZWRBcmd1bWVudCgxKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwogICAgIFN0cmlu
ZyB2YWx1ZSA9IGltcGwoKS5nZXRQYXJhbWV0ZXIobmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpOwot
ICAgIHJldHVybiBqc1N0cmluZ09yVW5kZWZpbmVkKGV4ZWMsIHZhbHVlKTsKKyAgICByZXR1cm4g
anNTdHJpbmdPclVuZGVmaW5lZCgmc3RhdGUsIHZhbHVlKTsKIH0KIAotSlNWYWx1ZSBKU1hTTFRQ
cm9jZXNzb3I6OnJlbW92ZVBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTWFNM
VFByb2Nlc3Nvcjo6cmVtb3ZlUGFyYW1ldGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYg
KGV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgaWYgKHN0YXRlLmFy
Z3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgw
KS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgU3RyaW5nIGxvY2FsTmFtZSA9IGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAg
ICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJp
bmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKKyAgICBTdHJpbmcgbG9jYWxOYW1lID0gc3RhdGUu
dW5jaGVja2VkQXJndW1lbnQoMSkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKICAg
ICBpbXBsKCkucmVtb3ZlUGFyYW1ldGVyKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKTsKICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggZGY0NGQyZmVkYjdjZmZkMWVmMzM2Mjll
ODhlNTE4ZGI4YzhiZmE0OC4uZTE5MTVhYTNhMGNkNzQzNDliZGU0OTBjOGU0Njg0NjE1ZmIyZDFi
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0KQEAgLTEwNzcsMTIgKzEwNzcsMTIgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAg
ICAgICAgICBpZiAoSGFzQ3VzdG9tR2V0dGVyKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzKSkgewogICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIj
aWYgJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKICAgICAg
ICAgICAgICAgICBteSAkbWV0aG9kTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICBKU0M6OkpTVmFsdWUgIiAuICRtZXRob2ROYW1lIC4gIihKU0M6OkV4ZWNT
dGF0ZSopIGNvbnN0O1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBKU0M6OkpTVmFsdWUgIiAuICRtZXRob2ROYW1lIC4gIihKU0M6OkV4ZWNTdGF0ZSYpIGNv
bnN0O1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNlbmRpZlxu
IikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYg
KEhhc0N1c3RvbVNldHRlcigkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cykgJiYgIUlzUmVhZG9ubHkoJGF0dHJpYnV0ZSkpIHsKICAgICAgICAgICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9u
YWxTdHJpbmc7Ci0gICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lk
IHNldCIgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkYXR0cmlidXRlLT5zaWduYXR1cmUt
Pm5hbWUpIC4gIihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSk7XG4iKTsKKyAgICAgICAg
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgc2V0IiAuICRjb2RlR2VuZXJh
dG9yLT5XS191Y2ZpcnN0KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSkgLiAiKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICIjZW5kaWZcbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQpAQCAtMTExNyw3ICsxMTE3LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAg
ICAgICAgICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJh
dGVDb25kaXRpb25hbFN0cmluZygkZnVuY3Rpb24tPnNpZ25hdHVyZSk7CiAgICAgICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29u
ZGl0aW9uYWxTdHJpbmc7CiAgICAgICAgICAgICBteSAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5h
bWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVu
dGVkQXMifSB8fCAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkZnVuY3Rpb24tPnNpZ25hdHVy
ZS0+bmFtZSk7Ci0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICIgLiAoJGZ1
bmN0aW9uLT5pc1N0YXRpYyA/ICJzdGF0aWMgIiA6ICIiKSAuICJKU0M6OkpTVmFsdWUgIiAuICRm
dW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSAuICIoSlNDOjpFeGVjU3RhdGUqKTtcbiIpOworICAg
ICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAiIC4gKCRmdW5jdGlvbi0+aXNTdGF0
aWMgPyAic3RhdGljICIgOiAiIikgLiAiSlNDOjpKU1ZhbHVlICIgLiAkZnVuY3Rpb25JbXBsZW1l
bnRhdGlvbk5hbWUgLiAiKEpTQzo6RXhlY1N0YXRlJik7XG4iKTsKICAgICAgICAgICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIjZW5kaWZcbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKICAgICAg
ICAgfQogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAkZW5kQXBwbGVDb3B5cmlnaHQpIGlm
ICRpbkFwcGxlQ29weXJpZ2h0OwpAQCAtMjMzMyw3ICsyMzMzLDcgQEAgc3ViIEdlbmVyYXRlSW1w
bGVtZW50YXRpb24KICAgICAgICAgICAgIH0gIyBhdHRyaWJ1dGUgTm9uZGV0ZXJtaW5pc3RpYwog
CiAgICAgICAgICAgICBpZiAoSGFzQ3VzdG9tR2V0dGVyKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzKSkgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+JGltcGxHZXR0ZXJGdW5j
dGlvbk5hbWUoc3RhdGUpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+JGltcGxHZXR0ZXJGdW5j
dGlvbk5hbWUoKnN0YXRlKSk7XG4iKTsKICAgICAgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUt
PnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNoZWNrU2VjdXJpdHlGb3JOb2RlIn0p
IHsKICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJKU0RPTUJpbmRpbmcuaCJ9ID0gMTsK
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+aW1wbCgpO1xuIik7CkBAIC0yNjE4LDcgKzI2MTgsNyBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoSGFzQ3VzdG9t
U2V0dGVyKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKSkgewotICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGNhc3RlZFRoaXMtPnNldCRpbXBs
U2V0dGVyRnVuY3Rpb25OYW1lKHN0YXRlLCB2YWx1ZSk7XG4iKTsKKyAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBjYXN0ZWRUaGlzLT5zZXQkaW1wbFNldHRlckZ1bmN0aW9u
TmFtZSgqc3RhdGUsIHZhbHVlKTtcbiIpOwogICAgICAgICAgICAgfSBlbHNpZiAoJHR5cGUgZXEg
IkV2ZW50SGFuZGxlciIpIHsKICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJKU0V2ZW50
TGlzdGVuZXIuaCJ9ID0gMTsKICAgICAgICAgICAgICAgICBteSAkZXZlbnROYW1lID0gRXZlbnRI
YW5kbGVyQXR0cmlidXRlRXZlbnROYW1lKCRhdHRyaWJ1dGUpOwpAQCAtMjg3NCw3ICsyODc0LDcg
QEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgICAgICBpZiAoJGlzQ3VzdG9tKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+IiAuICRm
dW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSAuICIoc3RhdGUpKTtcbiIpOworICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNh
c3RlZFRoaXMtPiIgLiAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgLiAiKCpzdGF0ZSkpO1xu
Iik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTtcbiIpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoJHN2Z1Byb3BlcnR5VHlwZSkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJm
YWNlLmNwcAppbmRleCBhOGMxNWU2MDAzZmQ0Mjc1MWFlYjVkNzQ3YTZmNmQ3ZjE5MjY1NjQyLi5h
NGNhZDBjYzBjN2Y5YzE4YjFlY2RiMzQ0YjQyYmI0NWQxODI0OGIxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJm
YWNlLmNwcApAQCAtNTE1LDcgKzUxNSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFj
ZUltcGxlbWVudHNTdHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzCiAgICAg
VU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAg
ICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdEludGVyZmFjZSo+KHNsb3RCYXNlKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmltcGxlbWVudHNTdHIzKHN0
YXRlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5pbXBsZW1lbnRz
U3RyMygqc3RhdGUpKTsKIH0KIAogI2VuZGlmCkBAIC02MDgsNyArNjA4LDcgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMyhFeGVjU3RhdGUqIHN0YXRlLCBK
U09iamVjdCogc2xvdEIKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aGlzVmFsdWUpOwogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0SW50
ZXJmYWNlKj4oc2xvdEJhc2UpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhp
cy0+c3VwcGxlbWVudGFsU3RyMyhzdGF0ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
Y2FzdGVkVGhpcy0+c3VwcGxlbWVudGFsU3RyMygqc3RhdGUpKTsKIH0KIAogI2VuZGlmCkBAIC03
MDQsNyArNzA0LDcgQEAgdm9pZCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMyhFeGVj
U3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW4KICAgICBhdXRvKiBjYXN0ZWRU
aGlzID0ganNDYXN0PEpTVGVzdEludGVyZmFjZSo+KGJhc2VPYmplY3QpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aGlzVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgY2FzdGVkVGhp
cy0+c2V0SW1wbGVtZW50c1N0cjMoc3RhdGUsIHZhbHVlKTsKKyAgICBjYXN0ZWRUaGlzLT5zZXRJ
bXBsZW1lbnRzU3RyMygqc3RhdGUsIHZhbHVlKTsKIH0KIAogI2VuZGlmCkBAIC03NzUsNyArNzc1
LDcgQEAgdm9pZCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LAogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nh
c3Q8SlNUZXN0SW50ZXJmYWNlKj4oYmFzZU9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBjYXN0ZWRUaGlzLT5zZXRTdXBw
bGVtZW50YWxTdHIzKHN0YXRlLCB2YWx1ZSk7CisgICAgY2FzdGVkVGhpcy0+c2V0U3VwcGxlbWVu
dGFsU3RyMygqc3RhdGUsIHZhbHVlKTsKIH0KIAogI2VuZGlmCkBAIC04NTksNyArODU5LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5j
dGlvbkltcGxlbWVudHNNZXRob2QzKEUKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQog
ICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2Ui
LCAiaW1wbGVtZW50c01ldGhvZDMiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNh
c3RlZFRoaXMsIEpTVGVzdEludGVyZmFjZTo6aW5mbygpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGNhc3RlZFRoaXMtPmltcGxlbWVudHNNZXRob2QzKHN0YXRlKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5pbXBsZW1lbnRzTWV0aG9kMygqc3RhdGUpKTsK
IH0KIAogI2VuZGlmCkBAIC05MjUsNyArOTI1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDMK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1cm4gdGhyb3dUaGlz
VHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsTWV0aG9kMyIp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0SW50ZXJm
YWNlOjppbmZvKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+c3Vw
cGxlbWVudGFsTWV0aG9kMyhzdGF0ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2Fz
dGVkVGhpcy0+c3VwcGxlbWVudGFsTWV0aG9kMygqc3RhdGUpKTsKIH0KIAogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50
ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW50ZXJmYWNlLmgKaW5kZXggNDdmMDc4MjkxZmM3ZTMyMGMwZDhiOGY0YzA0ZjZkY2EyM2ZhZWQy
OS4uMTBjZjhmYjI0MDYxMjFkMGE3MGJlYTJjYjU1YWFiMzg4ZWFlNGMyMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRl
cmZhY2UuaApAQCAtNjAsMjQgKzYwLDI0IEBAIHB1YmxpYzoKIAogICAgIC8vIEN1c3RvbSBhdHRy
aWJ1dGVzCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi0g
ICAgSlNDOjpKU1ZhbHVlIGltcGxlbWVudHNTdHIzKEpTQzo6RXhlY1N0YXRlKikgY29uc3Q7Cisg
ICAgSlNDOjpKU1ZhbHVlIGltcGxlbWVudHNTdHIzKEpTQzo6RXhlY1N0YXRlJikgY29uc3Q7CiAj
ZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLSAg
ICB2b2lkIHNldEltcGxlbWVudHNTdHIzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsK
KyAgICB2b2lkIHNldEltcGxlbWVudHNTdHIzKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
KTsKICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEy
KQotICAgIEpTQzo6SlNWYWx1ZSBzdXBwbGVtZW50YWxTdHIzKEpTQzo6RXhlY1N0YXRlKikgY29u
c3Q7CisgICAgSlNDOjpKU1ZhbHVlIHN1cHBsZW1lbnRhbFN0cjMoSlNDOjpFeGVjU3RhdGUmKSBj
b25zdDsKICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjEyKQotICAgIHZvaWQgc2V0U3VwcGxlbWVudGFsU3RyMyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSk7CisgICAgdm9pZCBzZXRTdXBwbGVtZW50YWxTdHIzKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlKTsKICNlbmRpZgogCiAgICAgLy8gQ3VzdG9tIGZ1bmN0aW9ucwogI2lmIEVO
QUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotICAgIEpTQzo6SlNWYWx1
ZSBpbXBsZW1lbnRzTWV0aG9kMyhKU0M6OkV4ZWNTdGF0ZSopOworICAgIEpTQzo6SlNWYWx1ZSBp
bXBsZW1lbnRzTWV0aG9kMyhKU0M6OkV4ZWNTdGF0ZSYpOwogI2VuZGlmCiAjaWYgRU5BQkxFKENv
bmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0gICAgSlNDOjpKU1ZhbHVlIHN1cHBs
ZW1lbnRhbE1ldGhvZDMoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBKU0M6OkpTVmFsdWUgc3VwcGxl
bWVudGFsTWV0aG9kMyhKU0M6OkV4ZWNTdGF0ZSYpOwogI2VuZGlmCiAgICAgVGVzdEludGVyZmFj
ZSYgaW1wbCgpIGNvbnN0IHsgcmV0dXJuICptX2ltcGw7IH0KICAgICB2b2lkIHJlbGVhc2VJbXBs
KCkgeyBzdGQ6OmV4Y2hhbmdlKG1faW1wbCwgbnVsbHB0ciktPmRlcmVmKCk7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAK
aW5kZXggYTAyMmFmNGIyZDViMDA4N2UzMDQzMDM5NTVkNDg5ZDkxMzAyYTVmMS4uODAxOTc4ZGUx
YjQwZjRmYjA3ZTRhZDBmYjc2YTRjZWVhYmQ1ZjQwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKQEAgLTEzMDIsNyAr
MTMwMiw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakN1c3RvbUF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkCiAgICAgVU5VU0VEX1BBUkFNKHNsb3RC
YXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBhdXRvKiBjYXN0ZWRUaGlz
ID0ganNDYXN0PEpTVGVzdE9iaio+KHNsb3RCYXNlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGNhc3RlZFRoaXMtPmN1c3RvbUF0dHIoc3RhdGUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGNhc3RlZFRoaXMtPmN1c3RvbUF0dHIoKnN0YXRlKSk7CiB9CiAKIApAQCAtMjU3Myw3
ICsyNTczLDcgQEAgdm9pZCBzZXRKU1Rlc3RPYmpDdXN0b21BdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWwKICAgICBhdXRvKiBjYXN0ZWRUaGlz
ID0ganNDYXN0PEpTVGVzdE9iaio+KGJhc2VPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlz
VmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgY2FzdGVkVGhpcy0+c2V0Q3Vz
dG9tQXR0cihzdGF0ZSwgdmFsdWUpOworICAgIGNhc3RlZFRoaXMtPnNldEN1c3RvbUF0dHIoKnN0
YXRlLCB2YWx1ZSk7CiB9CiAKIApAQCAtMzQ4Nyw3ICszNDg3LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZChFeGVj
U3RhdGUqIHMKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1cm4g
dGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY3VzdG9tTWV0aG9kIik7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8o
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5jdXN0b21NZXRob2Qo
c3RhdGUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmN1c3RvbU1l
dGhvZCgqc3RhdGUpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZFdpdGhBcmdzKEV4ZWNTdGF0ZSogc3RhdGUp
CkBAIC0zNDk3LDcgKzM0OTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kV2l0aEFyZ3MoRXhlYwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpCiAgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdE9iaiIsICJjdXN0b21NZXRob2RXaXRoQXJncyIpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+Y3VzdG9tTWV0aG9kV2l0aEFyZ3Moc3Rh
dGUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmN1c3RvbU1ldGhv
ZFdpdGhBcmdzKCpzdGF0ZSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIHN0YXRl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5oCmluZGV4IDM1NDYzMTFiNGI1ZmRmZDFiZTg4MDcyZWEyZDk2YmJiZmZmNjg0ZTkuLjg4
Y2FiODY5MDJiYmNlYjY4NjA1NzFiZTBkZGMwNDU2NDQxMzFlOWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKQEAgLTU4LDEz
ICs1OCwxMyBAQCBwdWJsaWM6CiAKIAogICAgIC8vIEN1c3RvbSBhdHRyaWJ1dGVzCi0gICAgSlND
OjpKU1ZhbHVlIGN1c3RvbUF0dHIoSlNDOjpFeGVjU3RhdGUqKSBjb25zdDsKLSAgICB2b2lkIHNl
dEN1c3RvbUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpOworICAgIEpTQzo6SlNW
YWx1ZSBjdXN0b21BdHRyKEpTQzo6RXhlY1N0YXRlJikgY29uc3Q7CisgICAgdm9pZCBzZXRDdXN0
b21BdHRyKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKIAogICAgIC8vIEN1c3RvbSBm
dW5jdGlvbnMKLSAgICBKU0M6OkpTVmFsdWUgY3VzdG9tTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7
Ci0gICAgSlNDOjpKU1ZhbHVlIGN1c3RvbU1ldGhvZFdpdGhBcmdzKEpTQzo6RXhlY1N0YXRlKik7
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjbGFzc01ldGhvZDIoSlNDOjpFeGVjU3RhdGUqKTsK
KyAgICBKU0M6OkpTVmFsdWUgY3VzdG9tTWV0aG9kKEpTQzo6RXhlY1N0YXRlJik7CisgICAgSlND
OjpKU1ZhbHVlIGN1c3RvbU1ldGhvZFdpdGhBcmdzKEpTQzo6RXhlY1N0YXRlJik7CisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjbGFzc01ldGhvZDIoSlNDOjpFeGVjU3RhdGUmKTsKICAgICBUZXN0
T2JqJiBpbXBsKCkgY29uc3QgeyByZXR1cm4gKm1faW1wbDsgfQogICAgIHZvaWQgcmVsZWFzZUlt
cGwoKSB7IHN0ZDo6ZXhjaGFuZ2UobV9pbXBsLCBudWxscHRyKS0+ZGVyZWYoKTsgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261621</attachid>
            <date>2015-09-20 18:31:38 -0700</date>
            <delta_ts>2015-09-20 18:48:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149393-20150920183122.patch</filename>
            <type>text/plain</type>
            <size>228008</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwMDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzhjYWVkYmY4N2EwMjcx
ZGUzY2Y0NDA4NzMzNzAzOWRiODUxODdlOC4uOTYxNGE4MjE5OTAwYTU3OTQ0YzE1M2U1OWZmZTI2
YzhlNmQzNmI4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1IEBACiAyMDE1LTA5LTIwICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgUGFzcyBKU0M6OkV4ZWNTdGF0
ZSB0byB0aGUgY3VzdG9tIGJpbmRpbmdzIGJ5IHJlZmVyZW5jZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5MzkzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGFzcyBKU0M6OkV4ZWNTdGF0ZSB0byB0aGUg
Y3VzdG9tIGJpbmRpbmdzIGJ5IHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGJ5CisgICAgICAgIHBvaW50
ZXIgYXMgaXQgaXMgZXhwZWN0ZWQgdG8gYmUgbm9uLW51bGwuCisKKzIwMTUtMDktMjAgIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwogICAgICAgICBSZWdyZXNzaW9uKHIxOTAwMjMp
OiBmYXN0L2RvbS9uYXZpZ2F0aW9uLXdpdGgtc2lkZWVmZmVjdHMtY3Jhc2guaHRtbCBpcyBjcmFz
aGluZwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5
MzkyCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1Rp
bWVQbHVnaW5SZXBsYWNlbWVudC5tbSBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9R
dWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQppbmRleCBmMmFhZWU2M2NmYmI5YzU1OGYwNTdl
OGY0NjNhYmM1NTJmOGYxZWY3Li4xNmJiMThiYTViMjZlMTY5ZmJjZWZhYzVlNDZhYzZlMTIzODk1
NWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5z
L1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCkBAIC0zNjYsNyArMzY2LDcgQEAgc3RhdGlj
IEpTVmFsdWUgKmpzVmFsdWVXaXRoQVZNZXRhZGF0YUl0ZW1JbkNvbnRleHQoQVZNZXRhZGF0YUl0
ZW1UeXBlICppdGVtLCBKU0MKIH0KICNlbmRpZgogCi1KU0M6OkpTVmFsdWUgSlNRdWlja1RpbWVQ
bHVnaW5SZXBsYWNlbWVudDo6dGltZWRNZXRhRGF0YShKU0M6OkV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKK0pTQzo6SlNWYWx1ZSBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Ojp0aW1lZE1ldGFE
YXRhKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICNpZiBQTEFURk9STShJT1MpCiAg
ICAgSFRNTFZpZGVvRWxlbWVudCogcGFyZW50ID0gaW1wbCgpLnBhcmVudEVsZW1lbnQoKTsKQEAg
LTM4NCwxNCArMzg0LDE0IEBAIEpTQzo6SlNWYWx1ZSBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2Vt
ZW50Ojp0aW1lZE1ldGFEYXRhKEpTQzo6RXhlY1N0YXRlKiBleGVjKSBjCiAgICAgSlNDb250ZXh0
ICpqc0NvbnRleHQgPSBmcmFtZS0+c2NyaXB0KCkuamF2YVNjcmlwdENvbnRleHQoKTsKICAgICBK
U1ZhbHVlICptZXRhRGF0YVZhbHVlID0ganNWYWx1ZVdpdGhWYWx1ZUluQ29udGV4dChtZXRhRGF0
YSwganNDb250ZXh0KTsKICAgICAKLSAgICByZXR1cm4gdG9KUyhleGVjLCBbbWV0YURhdGFWYWx1
ZSBKU1ZhbHVlUmVmXSk7CisgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBbbWV0YURhdGFWYWx1ZSBK
U1ZhbHVlUmVmXSk7CiAjZWxzZQotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwogI2VuZGlmCiB9CiAKLUpT
Qzo6SlNWYWx1ZSBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjphY2Nlc3NMb2coSlNDOjpF
eGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU0M6OkpTVmFsdWUgSlNRdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudDo6YWNjZXNzTG9nKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICNpZiBQ
TEFURk9STShJT1MpCiAgICAgSFRNTFZpZGVvRWxlbWVudCogcGFyZW50ID0gaW1wbCgpLnBhcmVu
dEVsZW1lbnQoKTsKQEAgLTQwNiwxNCArNDA2LDE0IEBAIEpTQzo6SlNWYWx1ZSBKU1F1aWNrVGlt
ZVBsdWdpblJlcGxhY2VtZW50OjphY2Nlc3NMb2coSlNDOjpFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
CiAgICAgU3RyaW5nIGFjY2Vzc0xvZ1N0cmluZyA9IHBhcmVudC0+cGxheWVyKCktPmFjY2Vzc0xv
ZygpOwogICAgIFtkaWN0aW9uYXJ5IHNldFZhbHVlOnN0YXRpY19jYXN0PE5TU3RyaW5nICo+KGFj
Y2Vzc0xvZ1N0cmluZykgZm9yUHJvcGVydHk6KE5TU3RyaW5nICopQ0ZTVFIoImV4dGVuZGVkTG9n
IildOwogCi0gICAgcmV0dXJuIHRvSlMoZXhlYywgW2RpY3Rpb25hcnkgSlNWYWx1ZVJlZl0pOwor
ICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgW2RpY3Rpb25hcnkgSlNWYWx1ZVJlZl0pOwogI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBy
ZXR1cm4gSlNDOjpqc051bGwoKTsKICNlbmRpZgogfQogCi1KU0M6OkpTVmFsdWUgSlNRdWlja1Rp
bWVQbHVnaW5SZXBsYWNlbWVudDo6ZXJyb3JMb2coSlNDOjpFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
CitKU0M6OkpTVmFsdWUgSlNRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6ZXJyb3JMb2coSlND
OjpFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewogI2lmIFBMQVRGT1JNKElPUykKICAgICBIVE1M
VmlkZW9FbGVtZW50KiBwYXJlbnQgPSBpbXBsKCkucGFyZW50RWxlbWVudCgpOwpAQCAtNDI4LDkg
KzQyOCw5IEBAIEpTQzo6SlNWYWx1ZSBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjplcnJv
ckxvZyhKU0M6OkV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICBTdHJpbmcgZXJyb3JMb2dTdHJp
bmcgPSBwYXJlbnQtPnBsYXllcigpLT5lcnJvckxvZygpOwogICAgIFtkaWN0aW9uYXJ5IHNldFZh
bHVlOnN0YXRpY19jYXN0PE5TU3RyaW5nICo+KGVycm9yTG9nU3RyaW5nKSBmb3JQcm9wZXJ0eToo
TlNTdHJpbmcgKilDRlNUUigiZXh0ZW5kZWRMb2ciKV07CiAKLSAgICByZXR1cm4gdG9KUyhleGVj
LCBbZGljdGlvbmFyeSBKU1ZhbHVlUmVmXSk7CisgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBbZGlj
dGlvbmFyeSBKU1ZhbHVlUmVmXSk7CiAjZWxzZQotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwogI2VuZGlm
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVy
U291cmNlTm9kZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlv
QnVmZmVyU291cmNlTm9kZUN1c3RvbS5jcHAKaW5kZXggZjNkOWRiZjM3MGJmMWM5YWE1NjFjNzIx
ZmZkOTUzZDM3YTY5ODk2OC4uMWM5YzMyOGIxMjEyNWQ5YmJlMzkyY2UzMWUyNjM4MTZlMmYxMzRl
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0J1ZmZlclNv
dXJjZU5vZGVDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVk
aW9CdWZmZXJTb3VyY2VOb2RlQ3VzdG9tLmNwcApAQCAtMzksMTYgKzM5LDE2IEBAIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0F1ZGlvQnVmZmVy
U291cmNlTm9kZTo6c2V0QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3Zv
aWQgSlNBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OnNldEJ1ZmZlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQogewogICAgIEF1ZGlvQnVmZmVyKiBidWZmZXIgPSBKU0F1ZGlvQnVmZmVy
Ojp0b1dyYXBwZWQodmFsdWUpOwogICAgIGlmICghYnVmZmVyKSB7Ci0gICAgICAgIGV4ZWMtPnZt
KCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJWYWx1ZSBpcyBu
b3Qgb2YgdHlwZSBBdWRpb0J1ZmZlciIpKTsKKyAgICAgICAgc3RhdGUudm0oKS50aHJvd0V4Y2Vw
dGlvbigmc3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJWYWx1ZSBpcyBub3Qgb2YgdHlw
ZSBBdWRpb0J1ZmZlciIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAo
IWltcGwoKS5zZXRCdWZmZXIoYnVmZmVyKSkKLSAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2Vw
dGlvbihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkF1ZGlvQnVmZmVyIHVuc3VwcG9ydGVk
IG51bWJlciBvZiBjaGFubmVscyIpKTsKKyAgICAgICAgc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlv
bigmc3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJBdWRpb0J1ZmZlciB1bnN1cHBvcnRl
ZCBudW1iZXIgb2YgY2hhbm5lbHMiKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCmlu
ZGV4IDQ0MDA1NzllMzY0OTc3MTc3NmM2NWQ2YTQ2ZjVkODNiMmVhODZjYzYuLjM2ZjMxZDlkNjJl
Y2Q3OGZkMWFhZjE5MWMyMmI5YTU1MDAyMjc3M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcApAQCAtNDAsMjggKzQwLDI4IEBAIHZv
aWQgSlNBdWRpb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmaW1wbCgpKSk7CiB9CiAKLXZv
aWQgSlNBdWRpb1RyYWNrOjpzZXRLaW5kKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkK
K3ZvaWQgSlNBdWRpb1RyYWNrOjpzZXRLaW5kKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFs
dWUpCiB7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKLSAgICBhdXRvJiBzdHJpbmcgPSB2YWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZz
dGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAg
ICAgaW1wbCgpLnNldEtpbmQoc3RyaW5nKTsKICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGV4ZWMp
OworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKICNl
bmRpZgogfQogCi12b2lkIEpTQXVkaW9UcmFjazo6c2V0TGFuZ3VhZ2UoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU0F1ZGlvVHJhY2s6OnNldExhbmd1YWdlKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKLSAg
ICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3Ry
aW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm47CiAgICAgaW1wbCgpLnNldExhbmd1YWdlKHN0cmluZyk7CiAjZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh2YWx1ZSk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQmlxdWFkRmlsdGVyTm9kZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0JpcXVhZEZpbHRlck5vZGVDdXN0b20uY3BwCmluZGV4IGY4YzEz
ODUzMDlkODIwMDRlNjJlZmUwZmE0OTJlZjUwZDJmZjM1YTEuLmY2ZmE4NmY1YzM3NGZlYmJjMGI4
MWJmZmNhZmM1ZWVkY2E0MWIzMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQmlxdWFkRmlsdGVyTm9kZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNCaXF1YWRGaWx0ZXJOb2RlQ3VzdG9tLmNwcApAQCAtMzcsMjYgKzM3LDI2IEBA
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0Jp
cXVhZEZpbHRlck5vZGU6OnNldFR5cGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQor
dm9pZCBKU0JpcXVhZEZpbHRlck5vZGU6OnNldFR5cGUoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSkKIHsKICNpZiBFTkFCTEUoTEVHQUNZX1dFQl9BVURJTykKICAgICBpZiAodmFsdWUu
aXNOdW1iZXIoKSkgewotICAgICAgICB1aW50MzJfdCB0eXBlID0gdmFsdWUudG9VSW50MzIoZXhl
Yyk7CisgICAgICAgIHVpbnQzMl90IHR5cGUgPSB2YWx1ZS50b1VJbnQzMigmc3RhdGUpOwogICAg
ICAgICBpZiAoIWltcGwoKS5zZXRUeXBlKHR5cGUpKQotICAgICAgICAgICAgZXhlYy0+dm0oKS50
aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIklsbGVnYWwgQmlxdWFk
RmlsdGVyTm9kZSB0eXBlIikpOworICAgICAgICAgICAgc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlv
bigmc3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJJbGxlZ2FsIEJpcXVhZEZpbHRlck5v
ZGUgdHlwZSIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgogCiAgICAgaWYgKHZh
bHVlLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgU3RyaW5nIHR5cGUgPSB2YWx1ZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAgIFN0cmluZyB0eXBlID0gdmFsdWUudG9TdHJpbmco
JnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKICAgICAgICAgaWYgKHR5cGUgPT0gImxvd3Bhc3MiIHx8
IHR5cGUgPT0gImhpZ2hwYXNzIiB8fCB0eXBlID09ICJiYW5kcGFzcyIgfHwgdHlwZSA9PSAibG93
c2hlbGYiIHx8IHR5cGUgPT0gImhpZ2hzaGVsZiIgfHwgdHlwZSA9PSAicGVha2luZyIgfHwgdHlw
ZSA9PSAibm90Y2giIHx8IHR5cGUgPT0gImFsbHBhc3MiKSB7CiAgICAgICAgICAgICBpbXBsKCku
c2V0VHlwZSh0eXBlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KICAg
ICAKLSAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCAiSWxsZWdhbCBCaXF1YWRGaWx0ZXJOb2RlIHR5cGUiKSk7CisgICAgc3RhdGUudm0oKS50
aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJJbGxlZ2FsIEJp
cXVhZEZpbHRlck5vZGUgdHlwZSIpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9u
Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJh
dGlvbkN1c3RvbS5jcHAKaW5kZXggZTk5ZGUyMWE3NWQ3MzljMzk0YWE0MmJkZDE4Yjc1OWM4OTgw
MTAwNy4uZGUyZjkwNzM0NWE3NjhmNWNlZjM2ODg0OTYyN2NiNDJkNWU0NTFlYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9t
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRp
b25DdXN0b20uY3BwCkBAIC0zNDcsMTAgKzM0NywxMCBAQCBib29sIEpTQ1NTU3R5bGVEZWNsYXJh
dGlvbjo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YQogICAgIHJldHVybiB0cnVlOwogfQogCi1KU1ZhbHVlIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6
Z2V0UHJvcGVydHlDU1NWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ1NTU3R5bGVE
ZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShFeGVjU3RhdGUmIHN0YXRlKQogewotICAg
IGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBj
b25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSA9IHN0YXRlLmFyZ3VtZW50KDApLnRvU3RyaW5nKCZz
dGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFs
dWUgPSBpbXBsKCkuZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eU5hbWUpOwpAQCAtMzU4LDcg
KzM1OCw3IEBAIEpTVmFsdWUgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1Zh
bHVlKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCiAgICAgZ2xv
YmFsT2JqZWN0KCktPndvcmxkKCkubV9jc3NWYWx1ZVJvb3RzLmFkZChjc3NWYWx1ZS5nZXQoKSwg
cm9vdCgmaW1wbCgpKSk7IC8vIEJhbGFuY2VkIGJ5IEpTQ1NTVmFsdWVPd25lcjo6ZmluYWxpemUo
KS4KLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoY3Nz
VmFsdWUpKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBXVEY6Omdl
dFB0cihjc3NWYWx1ZSkpOwogfQogCiB2b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQ3VzdG9tLmNwcAppbmRleCBlZmE1MzlmYjU0Yjg2OTRiZGQzYmM5Zjc0NGYyYTY1
NDIxMDZmMjZkLi5kYzViNTFlOGI5N2VmNTllMjViN2ZiYmY3MDIwNTI4YjM3MDM5ODc5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCkBAIC01OSwzNyArNTksMzcgQEAgc3RhdGljIENh
bnZhc1N0eWxlIHRvSFRNTENhbnZhc1N0eWxlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgdmFsdWUpCiAg
ICAgcmV0dXJuIENhbnZhc1N0eWxlKCk7CiB9CiAKLUpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnN0cm9rZVN0eWxlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVN0eWxlKEV4ZWNTdGF0ZSYgc3RhdGUpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGltcGwoKS5zdHJv
a2VTdHlsZSgpKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBpbXBs
KCkuc3Ryb2tlU3R5bGUoKSk7CiB9CiAKLXZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnNldFN0cm9rZVN0eWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZVN0eWxlKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEJiBjb250ZXh0
ID0gaW1wbCgpOwogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIGNvbnRleHQu
c2V0U3Ryb2tlQ29sb3IoYXNTdHJpbmcodmFsdWUpLT52YWx1ZShleGVjKSk7CisgICAgICAgIGNv
bnRleHQuc2V0U3Ryb2tlQ29sb3IoYXNTdHJpbmcodmFsdWUpLT52YWx1ZSgmc3RhdGUpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKHRvSFRNTENh
bnZhc1N0eWxlKGV4ZWMsIHZhbHVlKSk7CisgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZSh0b0hU
TUxDYW52YXNTdHlsZSgmc3RhdGUsIHZhbHVlKSk7CiB9CiAKLUpTVmFsdWUgSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmZpbGxTdHlsZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVl
IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsU3R5bGUoRXhlY1N0YXRlJiBzdGF0ZSkg
Y29uc3QKIHsKLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgpLmZp
bGxTdHlsZSgpKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBpbXBs
KCkuZmlsbFN0eWxlKCkpOwogfQogCi12b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
ZXRGaWxsU3R5bGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbFN0eWxlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgdmFsdWUpCiB7CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEJiBjb250ZXh0ID0gaW1w
bCgpOwogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIGNvbnRleHQuc2V0Rmls
bENvbG9yKGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUoZXhlYykpOworICAgICAgICBjb250ZXh0LnNl
dEZpbGxDb2xvcihhc1N0cmluZyh2YWx1ZSktPnZhbHVlKCZzdGF0ZSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIGNvbnRleHQuc2V0RmlsbFN0eWxlKHRvSFRNTENhbnZhc1N0eWxlKGV4
ZWMsIHZhbHVlKSk7CisgICAgY29udGV4dC5zZXRGaWxsU3R5bGUodG9IVE1MQ2FudmFzU3R5bGUo
JnN0YXRlLCB2YWx1ZSkpOwogfQogCi1KU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Ojp3ZWJraXRMaW5lRGFzaChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjp3ZWJraXRMaW5lRGFzaChFeGVjU3RhdGUmIHN0YXRlKSBjb25z
dAogewogICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGRhc2ggPSBpbXBsKCkuZ2V0TGluZURhc2go
KTsKIApAQCAtOTcsMTAgKzk3LDEwIEBAIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OndlYmtpdExpbmVEYXNoKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICBWZWN0b3I8Zmxv
YXQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBkYXNoLmVuZCgpOwogICAgIGZvciAoVmVjdG9yPGZs
b2F0Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXNoLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
ICAgICAgICAgbGlzdC5hcHBlbmQoSlNWYWx1ZSgqaXQpKTsKLSAgICByZXR1cm4gY29uc3RydWN0
QXJyYXkoZXhlYywgMCwgZ2xvYmFsT2JqZWN0KCksIGxpc3QpOworICAgIHJldHVybiBjb25zdHJ1
Y3RBcnJheSgmc3RhdGUsIDAsIGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKIH0KIAotdm9pZCBKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0V2Via2l0TGluZURhc2goRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0V2Vi
a2l0TGluZURhc2goRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAo
IWlzSlNBcnJheSh2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwOCw3ICsxMDgsNyBAQCB2
b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRXZWJraXRMaW5lRGFzaChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdmFsdQogICAgIFZlY3RvcjxmbG9hdD4gZGFzaDsKICAgICBKU0Fy
cmF5KiB2YWx1ZUFycmF5ID0gYXNBcnJheSh2YWx1ZSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZhbHVlQXJyYXktPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgZmxvYXQgZWxlbSA9
IHZhbHVlQXJyYXktPmdldEluZGV4KGV4ZWMsIGkpLnRvRmxvYXQoZXhlYyk7CisgICAgICAgIGZs
b2F0IGVsZW0gPSB2YWx1ZUFycmF5LT5nZXRJbmRleCgmc3RhdGUsIGkpLnRvRmxvYXQoJnN0YXRl
KTsKICAgICAgICAgaWYgKGVsZW0gPD0gMCB8fCAhc3RkOjppc2Zpbml0ZShlbGVtKSkKICAgICAg
ICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDaGFyYWN0ZXJEYXRhQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q2hhcmFjdGVyRGF0YUN1c3RvbS5jcHAKaW5kZXggNzY0MzQ0ZGRjMTc3ZTczMTAyZGE5MjQ1MWIz
N2JkZjVlYTlhMTMyYy4uY2I4MzFkMDRjZmI4ZWY4NTY4NDc2YmQ4ZmRlM2Y4ZjgyZTlhN2M5MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDaGFyYWN0ZXJEYXRhQ3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NoYXJhY3RlckRhdGFD
dXN0b20uY3BwCkBAIC0zMywyOSArMzMsMjkgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTQ2hhcmFjdGVyRGF0YTo6YmVmb3JlKEV4ZWNT
dGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ2hhcmFjdGVyRGF0YTo6YmVmb3JlKEV4ZWNTdGF0ZSYg
c3RhdGUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wbCgpLmJlZm9yZSh0
b05vZGVPclN0cmluZ1ZlY3Rvcigqc3RhdGUpLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKHN0
YXRlLCBlYyk7CisgICAgaW1wbCgpLmJlZm9yZSh0b05vZGVPclN0cmluZ1ZlY3RvcihzdGF0ZSks
IGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0NoYXJhY3RlckRhdGE6OmFmdGVyKEV4ZWNTdGF0
ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ2hhcmFjdGVyRGF0YTo6YWZ0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCkuYWZ0ZXIodG9Ob2Rl
T3JTdHJpbmdWZWN0b3IoKnN0YXRlKSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwg
ZWMpOworICAgIGltcGwoKS5hZnRlcih0b05vZGVPclN0cmluZ1ZlY3RvcihzdGF0ZSksIGVjKTsK
KyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0NoYXJhY3RlckRhdGE6OnJlcGxhY2VXaXRoKEV4ZWNTdGF0
ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ2hhcmFjdGVyRGF0YTo6cmVwbGFjZVdpdGgoRXhlY1N0YXRl
JiBzdGF0ZSkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCkucmVwbGFj
ZVdpdGgodG9Ob2RlT3JTdHJpbmdWZWN0b3IoKnN0YXRlKSwgZWMpOwotICAgIHNldERPTUV4Y2Vw
dGlvbihzdGF0ZSwgZWMpOworICAgIGltcGwoKS5yZXBsYWNlV2l0aCh0b05vZGVPclN0cmluZ1Zl
Y3RvcihzdGF0ZSksIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9tLmNwcAppbmRleCA4ZDJkMDIw
NjRlNTdlYWE0NzgxODBiYjhlNDViZDMwMDRlOGYzMTdiLi5iMDY1ZDVjZmYxY2YxYjUwNjQ3NDU5
NjJiZGNkOGQ2MWRmNzY3ZjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NvbW1hbmRMaW5lQVBJSG9zdEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDb21tYW5kTGluZUFQSUhvc3RDdXN0b20uY3BwCkBAIC01NSwyMyArNTUsMjMg
QEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVl
IEpTQ29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0ZWRPYmplY3QoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NvbW1hbmRMaW5lQVBJSG9zdDo6aW5zcGVjdGVkT2JqZWN0KEV4ZWNTdGF0ZSYg
c3RhdGUpCiB7CiAgICAgQ29tbWFuZExpbmVBUElIb3N0OjpJbnNwZWN0YWJsZU9iamVjdCogb2Jq
ZWN0ID0gaW1wbCgpLmluc3BlY3RlZE9iamVjdCgpOwogICAgIGlmICghb2JqZWN0KQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwot
ICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHNjcmlwdFZhbHVlID0gb2JqZWN0LT5nZXQoZXhl
Yyk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soJnN0YXRlKTsKKyAgICBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSBzY3JpcHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSk7CiAgICAgaWYgKHNjcmlw
dFZhbHVlLmhhc05vVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAg
ICByZXR1cm4gc2NyaXB0VmFsdWUuanNWYWx1ZSgpOwogfQogCi1zdGF0aWMgSlNBcnJheSogZ2V0
SlNMaXN0ZW5lckZ1bmN0aW9ucyhFeGVjU3RhdGUqIGV4ZWMsIERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgRXZlbnRMaXN0ZW5lckluZm8mIGxpc3RlbmVySW5mbykKK3N0YXRpYyBKU0FycmF5KiBn
ZXRKU0xpc3RlbmVyRnVuY3Rpb25zKEV4ZWNTdGF0ZSYgc3RhdGUsIERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgRXZlbnRMaXN0ZW5lckluZm8mIGxpc3RlbmVySW5mbykKIHsKLSAgICBKU0FycmF5
KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpOworICAgIEpTQXJy
YXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoJnN0YXRlLCBudWxscHRyKTsKICAgICBz
aXplX3QgaGFuZGxlcnNDb3VudCA9IGxpc3RlbmVySW5mby5ldmVudExpc3RlbmVyVmVjdG9yLnNp
emUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMCwgb3V0cHV0SW5kZXggPSAwOyBpIDwgaGFuZGxl
cnNDb3VudDsgKytpKSB7CiAgICAgICAgIGNvbnN0IEpTRXZlbnRMaXN0ZW5lcioganNMaXN0ZW5l
ciA9IEpTRXZlbnRMaXN0ZW5lcjo6Y2FzdChsaXN0ZW5lckluZm8uZXZlbnRMaXN0ZW5lclZlY3Rv
cltpXS5saXN0ZW5lci5nZXQoKSk7CkBAIC04MSwyNyArODEsMjcgQEAgc3RhdGljIEpTQXJyYXkq
IGdldEpTTGlzdGVuZXJGdW5jdGlvbnMoRXhlY1N0YXRlKiBleGVjLCBEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnMKICAgICAgICAgfQogCiAgICAgICAgIC8vIEhpZGUgbGlzdGVuZXJzIGZyb20gb3Ro
ZXIgY29udGV4dHMuCi0gICAgICAgIGlmICgmanNMaXN0ZW5lci0+aXNvbGF0ZWRXb3JsZCgpICE9
ICZjdXJyZW50V29ybGQoZXhlYykpCisgICAgICAgIGlmICgmanNMaXN0ZW5lci0+aXNvbGF0ZWRX
b3JsZCgpICE9ICZjdXJyZW50V29ybGQoJnN0YXRlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
CiAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzTGlzdGVuZXItPmpzRnVuY3Rpb24oZG9j
dW1lbnQpOwogICAgICAgICBpZiAoIWZ1bmN0aW9uKQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgSlNPYmplY3QqIGxpc3RlbmVyRW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChl
eGVjKTsKLSAgICAgICAgbGlzdGVuZXJFbnRyeS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImxpc3RlbmVyIiksIGZ1bmN0aW9uKTsKLSAgICAgICAg
bGlzdGVuZXJFbnRyeS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgInVzZUNhcHR1cmUiKSwganNCb29sZWFuKGxpc3RlbmVySW5mby5ldmVudExpc3Rl
bmVyVmVjdG9yW2ldLnVzZUNhcHR1cmUpKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRl
eChleGVjLCBvdXRwdXRJbmRleCsrLCBKU1ZhbHVlKGxpc3RlbmVyRW50cnkpKTsKKyAgICAgICAg
SlNPYmplY3QqIGxpc3RlbmVyRW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwor
ICAgICAgICBsaXN0ZW5lckVudHJ5LT5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUsICJsaXN0ZW5lciIpLCBmdW5jdGlvbik7CisgICAgICAgIGxpc3Rl
bmVyRW50cnktPnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZSwgInVzZUNhcHR1cmUiKSwganNCb29sZWFuKGxpc3RlbmVySW5mby5ldmVudExpc3RlbmVy
VmVjdG9yW2ldLnVzZUNhcHR1cmUpKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleCgm
c3RhdGUsIG91dHB1dEluZGV4KyssIEpTVmFsdWUobGlzdGVuZXJFbnRyeSkpOwogICAgIH0KICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlIEpTQ29tbWFuZExpbmVBUElIb3N0OjpnZXRF
dmVudExpc3RlbmVycyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ29tbWFuZExpbmVBUElI
b3N0OjpnZXRFdmVudExpc3RlbmVycyhFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPCAxKQorICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPCAx
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIEpTVmFsdWUgdmFsdWUgPSBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gc3RhdGUudW5j
aGVja2VkQXJndW1lbnQoMCk7CiAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpIHx8IHZhbHVlLmlz
TnVsbCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIApAQCAtMTEyLDQ5ICsxMTIs
NDkgQEAgSlNWYWx1ZSBKU0NvbW1hbmRMaW5lQVBJSG9zdDo6Z2V0RXZlbnRMaXN0ZW5lcnMoRXhl
Y1N0YXRlKiBleGVjKQogICAgIFZlY3RvcjxFdmVudExpc3RlbmVySW5mbz4gbGlzdGVuZXJzQXJy
YXk7CiAgICAgaW1wbCgpLmdldEV2ZW50TGlzdGVuZXJzSW1wbChub2RlLCBsaXN0ZW5lcnNBcnJh
eSk7CiAKLSAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7
CisgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0ZW5lcnNBcnJheS5zaXplKCk7ICsraSkgewot
ICAgICAgICBKU0FycmF5KiBsaXN0ZW5lcnMgPSBnZXRKU0xpc3RlbmVyRnVuY3Rpb25zKGV4ZWMs
ICZub2RlLT5kb2N1bWVudCgpLCBsaXN0ZW5lcnNBcnJheVtpXSk7CisgICAgICAgIEpTQXJyYXkq
IGxpc3RlbmVycyA9IGdldEpTTGlzdGVuZXJGdW5jdGlvbnMoc3RhdGUsICZub2RlLT5kb2N1bWVu
dCgpLCBsaXN0ZW5lcnNBcnJheVtpXSk7CiAgICAgICAgIGlmICghbGlzdGVuZXJzLT5sZW5ndGgo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBBdG9taWNTdHJpbmcgZXZlbnRUeXBl
ID0gbGlzdGVuZXJzQXJyYXlbaV0uZXZlbnRUeXBlOwotICAgICAgICByZXN1bHQtPnB1dERpcmVj
dChleGVjLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIGV2ZW50VHlwZS5pbXBs
KCkpLCBKU1ZhbHVlKGxpc3RlbmVycykpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdChzdGF0
ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgZXZlbnRUeXBlLmltcGwoKSks
IEpTVmFsdWUobGlzdGVuZXJzKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
SlNWYWx1ZSBKU0NvbW1hbmRMaW5lQVBJSG9zdDo6aW5zcGVjdChFeGVjU3RhdGUqIGV4ZWMpCitK
U1ZhbHVlIEpTQ29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7
Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7Ci0gICAgICAgIERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlIG9iamVjdChleGVjLT52bSgpLCBleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7Ci0gICAgICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGhpbnRzKGV4ZWMtPnZtKCks
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKLSAgICAgICAgaW1wbCgpLmluc3BlY3RJbXBs
KG9iamVjdC50b0luc3BlY3RvclZhbHVlKGV4ZWMpLCBoaW50cy50b0luc3BlY3RvclZhbHVlKGV4
ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID49IDIpIHsKKyAgICAgICAgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUgb2JqZWN0KHN0YXRlLnZtKCksIHN0YXRlLnVuY2hlY2tlZEFy
Z3VtZW50KDApKTsKKyAgICAgICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgaGludHMoc3RhdGUu
dm0oKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgICAgICBpbXBsKCkuaW5zcGVj
dEltcGwob2JqZWN0LnRvSW5zcGVjdG9yVmFsdWUoJnN0YXRlKSwgaGludHMudG9JbnNwZWN0b3JW
YWx1ZSgmc3RhdGUpKTsKICAgICB9CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAot
SlNWYWx1ZSBKU0NvbW1hbmRMaW5lQVBJSG9zdDo6ZGF0YWJhc2VJZChFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTQ29tbWFuZExpbmVBUElIb3N0OjpkYXRhYmFzZUlkKEV4ZWNTdGF0ZSYgc3Rh
dGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgaWYgKHN0YXRl
LmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0g
ICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gSlNEYXRhYmFzZTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApKTsKKyAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSBKU0RhdGFiYXNlOjp0
b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmIChkYXRhYmFzZSkK
LSAgICAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGltcGwoKS5kYXRhYmFzZUlk
SW1wbChkYXRhYmFzZSkpOworICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRl
LCBpbXBsKCkuZGF0YWJhc2VJZEltcGwoZGF0YWJhc2UpKTsKIAogICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTQ29tbWFuZExpbmVBUElIb3N0OjpzdG9yYWdlSWQoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NvbW1hbmRMaW5lQVBJSG9zdDo6c3RvcmFnZUlkKEV4
ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisg
ICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogCi0gICAgU3RvcmFnZSogc3RvcmFnZSA9IEpTU3RvcmFnZTo6dG9XcmFwcGVkKGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBTdG9yYWdlKiBzdG9yYWdlID0gSlNTdG9y
YWdlOjp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmIChzdG9y
YWdlKQotICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgaW1wbCgpLnN0b3Jh
Z2VJZEltcGwoc3RvcmFnZSkpOworICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoJnN0
YXRlLCBpbXBsKCkuc3RvcmFnZUlkSW1wbChzdG9yYWdlKSk7CiAKICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5
cHRvQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQ3VzdG9t
LmNwcAppbmRleCAxNThiMzU2Y2QxZjEwOTk3NWUxOTZhZWY2ZGZiNmE5ZGRjM2JkYjc0Li5kMDdi
ZWFjYTE1YTU0NzJiNDY5MGFhYzQ1YzFhZDc1NGNmNWQ5YTM5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDcnlwdG9DdXN0b20uY3BwCkBAIC0zNSwyMSArMzUsMjEgQEAgdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTQ3J5
cHRvOjpnZXRSYW5kb21WYWx1ZXMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NyeXB0bzo6
Z2V0UmFuZG9tVmFsdWVzKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9u
KGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3Rh
dGUuYXJndW1lbnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dF
eGNlcHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsK
IAotICAgIEpTVmFsdWUgYnVmZmVyID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgSlNWYWx1ZSBi
dWZmZXIgPSBzdGF0ZS5hcmd1bWVudCgwKTsKICAgICBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBh
cnJheUJ1ZmZlclZpZXcgPSB0b0FycmF5QnVmZmVyVmlldyhidWZmZXIpOwogICAgIGlmICghYXJy
YXlCdWZmZXJWaWV3KQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAg
ICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CiAgICAgaW1wbCgpLmdldFJhbmRvbVZhbHVlcyhhcnJheUJ1ZmZlclZpZXcuZ2V0KCks
IGVjKTsKIAogICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDcnlwdG9LZXlDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDcnlwdG9LZXlDdXN0b20uY3BwCmluZGV4IGIyNGFlMGNjMGUxMjY0ZmRhMzc4NzFmMGJmZDcx
M2YwODJlMTY4YmUuLmFkODFlNGQ0NWIxZTYxZWFlMTg3MGFhZWM3M2RlM2FlNWRiYzg5ZjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5Q3VzdG9tLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleUN1c3RvbS5jcHAK
QEAgLTM1LDkgKzM1LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1KU1ZhbHVlIEpTQ3J5cHRvS2V5OjphbGdvcml0aG0oSlNDOjpFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0CitKU1ZhbHVlIEpTQ3J5cHRvS2V5OjphbGdvcml0aG0oSlNDOjpFeGVjU3RhdGUm
IHN0YXRlKSBjb25zdAogewotICAgIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlciBidWlsZGVyKGV4
ZWMpOworICAgIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlciBidWlsZGVyKCZzdGF0ZSk7CiAgICAg
aW1wbCgpLmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oYnVpbGRlcik7CiAgICAgcmV0dXJuIGJ1
aWxkZXIucmVzdWx0KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q3VzdG9tRXZlbnRDdXN0b20uY3BwCmluZGV4IGRhZDczYTJhNDIwYzZiNjM0OTg1MzRlMWVjZDE2
OGUwYjA2MmI3MWEuLmFmMTQ5ZGFhZjA1NDI1MTIzZmU4ODY5NDk5ZDViN2JlZjU4MDNlNWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0b20u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0b20u
Y3BwCkBAIC0zNiw3ICszNiw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAKLUpTVmFsdWUgSlNDdXN0b21FdmVudDo6ZGV0YWlsKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKK0pTVmFsdWUgSlNDdXN0b21FdmVudDo6ZGV0YWlsKEV4ZWNTdGF0ZSYgc3Rh
dGUpIGNvbnN0CiB7CiAgICAgQ3VzdG9tRXZlbnQmIGV2ZW50ID0gaW1wbCgpOwogICAgIApAQCAt
NDUsMTUgKzQ1LDE1IEBAIEpTVmFsdWUgSlNDdXN0b21FdmVudDo6ZGV0YWlsKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKIAogICAgIEpTVmFsdWUgZGV0YWlsID0gZXZlbnQuZGV0YWlsKCkuanNWYWx1
ZSgpOwogICAgIAotICAgIGlmIChkZXRhaWwuaXNPYmplY3QoKSAmJiAmd29ybGRGb3JET01PYmpl
Y3QoZGV0YWlsLmdldE9iamVjdCgpKSAhPSAmY3VycmVudFdvcmxkKGV4ZWMpKSB7CisgICAgaWYg
KGRldGFpbC5pc09iamVjdCgpICYmICZ3b3JsZEZvckRPTU9iamVjdChkZXRhaWwuZ2V0T2JqZWN0
KCkpICE9ICZjdXJyZW50V29ybGQoJnN0YXRlKSkgewogICAgICAgICAvLyBXZSBuZWVkIHRvIG1h
a2Ugc3VyZSBDdXN0b21FdmVudHMgZG8gbm90IGxlYWsgdGhlaXIgZGV0YWlsIHByb3BlcnR5IGFj
cm9zcyBpc29sYXRlZCBET00gd29ybGRzLgogICAgICAgICAvLyBJZGVhbGx5LCB3ZSB3b3VsZCBj
aGVjayB0aGF0IHRoZSB3b3JsZHMgaGF2ZSBkaWZmZXJlbnQgcHJpdmlsZWdlcyBidXQgdGhhdCdz
IG5vdCBwb3NzaWJsZSB5ZXQuCi0gICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHNlcmlhbGl6ZWREZXRhaWwgPSBldmVudC50cnlTZXJpYWxpemVEZXRhaWwoZXhlYyk7CisgICAg
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWREZXRhaWwgPSBldmVu
dC50cnlTZXJpYWxpemVEZXRhaWwoJnN0YXRlKTsKICAgICAgICAgCiAgICAgICAgIGlmICghc2Vy
aWFsaXplZERldGFpbCkKICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICAgICAgCi0g
ICAgICAgIHJldHVybiBzZXJpYWxpemVkRGV0YWlsLT5kZXNlcmlhbGl6ZShleGVjLCBnbG9iYWxP
YmplY3QoKSwgbnVsbHB0cik7CisgICAgICAgIHJldHVybiBzZXJpYWxpemVkRGV0YWlsLT5kZXNl
cmlhbGl6ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBudWxscHRyKTsKICAgICB9CiAgICAgCiAg
ICAgcmV0dXJuIGRldGFpbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NRm9ybURhdGFDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01Gb3JtRGF0YUN1c3RvbS5jcHAKaW5kZXggN2VjMjQ5NWRkZWJmYzRhMzUyNmFkNmMzZjM4ZTI0
NDk2YjRhY2IwYS4uMTNmZGI1MmQ2YzI1MzE5YzE5MzhhNzQyOTIyNDIyMDZhY2ZlYzY3OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5j
cHAKQEAgLTU1LDE4ICs1NSwxOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0
cnVjdEpTRE9NRm9ybURhdGEoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwg
ZG9tRm9ybURhdGEuZ2V0KCkpKSk7CiB9CiAKLUpTVmFsdWUgSlNET01Gb3JtRGF0YTo6YXBwZW5k
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNET01Gb3JtRGF0YTo6YXBwZW5kKEV4ZWNTdGF0
ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7Ci0gICAg
ICAgIFN0cmluZyBuYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+YXJndW1lbnQoMSk7CisgICAg
aWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0g
c3RhdGUuYXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKKyAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IHN0YXRlLmFyZ3VtZW50KDEpOwogICAgICAgICBpZiAodmFsdWUu
aW5oZXJpdHMoSlNCbG9iOjppbmZvKCkpKSB7CiAgICAgICAgICAgICBTdHJpbmcgZmlsZW5hbWU7
Ci0gICAgICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDMgJiYgIWV4ZWMtPmFy
Z3VtZW50KDIpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICAgICAgZmlsZW5hbWUg
PSBleGVjLT5hcmd1bWVudCgyKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAg
ICAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID49IDMgJiYgIXN0YXRlLmFyZ3VtZW50KDIp
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBzdGF0ZS5h
cmd1bWVudCgyKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwogICAgICAgICAgICAg
aW1wbCgpLmFwcGVuZChuYW1lLCBKU0Jsb2I6OnRvV3JhcHBlZCh2YWx1ZSksIGZpbGVuYW1lKTsK
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpbXBsKCkuYXBwZW5kKG5hbWUsIHZhbHVlLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgICAgICAgICBpbXBsKCkuYXBwZW5kKG5h
bWUsIHZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSkpOwogICAgIH0KIAogICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01Ub2tlbkxpc3RDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Ub2tlbkxpc3RDdXN0b20uY3BwCmluZGV4IDBhMTlmYzZkNzhhYmJmZTJkZGM1Y2Q0
ZjIyZGI5M2JkMjM3ODIxZGEuLmJkZDQ4Nzc4NDllY2E3Y2NjOTFiYjZkYTViYzQzZDE2NjI4ZGRk
Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NVG9rZW5MaXN0
Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVRva2VuTGlz
dEN1c3RvbS5jcHAKQEAgLTM0LDIzICszNCwyMyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNET01Ub2tlbkxpc3Q6OnRvZ2dsZShFeGVj
U3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0RPTVRva2VuTGlzdDo6dG9nZ2xlKEV4ZWNTdGF0ZSYg
c3RhdGUpCiB7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
LSAgICAgICAgcmV0dXJuIHN0YXRlLT52bSgpLnRocm93RXhjZXB0aW9uKHN0YXRlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS5h
cmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNl
cHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFN0cmluZyB0b2tlbiA9IHN0YXRlLT5hcmd1
bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBTdHJpbmcgdG9rZW4gPSBzdGF0ZS5hcmd1bWVu
dCgwKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOworICAgIGlmIChVTkxJS0VMWShz
dGF0ZS5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAg
ICAgLy8gdG9nZ2xlKCkgbmVlZHMgdG8gYmUgYWJsZSB0byBkaXN0aW5ndWlzaCB1bmRlZmluZWQv
bWlzc2luZyBmcm9tIHRoZSBmYWxzZSB2YWx1ZSBmb3IgdGhlICdmb3JjZScgcGFyYW1ldGVyLgot
ICAgIE9wdGlvbmFsPGJvb2w+IGZvcmNlID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVk
KCkgPyBOdWxsb3B0IDogT3B0aW9uYWw8Ym9vbD4oc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEp
LnRvQm9vbGVhbihzdGF0ZSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIE9wdGlvbmFsPGJvb2w+IGZvcmNlID0gc3RhdGUuYXJndW1lbnQoMSkuaXNVbmRl
ZmluZWQoKSA/IE51bGxvcHQgOiBPcHRpb25hbDxib29sPihzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgxKS50b0Jvb2xlYW4oJnN0YXRlKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc0Jvb2xlYW4oaW1wbCgpLnRvZ2dsZSh0b2tlbiwgZm9yY2UsIGVjKSk7CiAKLSAgICBz
ZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBl
Yyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCmluZGV4IDQ4YTg2YzQ4ZGU4N2M4YjVmYjk4MzY1
MzAyYmJlYTYxMDhiZDIyNjYuLjI1N2E5NTg2MzllZGU3N2MwYmEyYTFhMTZmNDhlYTc5MzUwOWRk
YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3Rv
bS5jcHAKQEAgLTQ2OSw3NiArNDY5LDc2IEBAIGJvb2wgSlNET01XaW5kb3c6OmRlZmluZU93blBy
b3BlcnR5KEpTQzo6SlNPYmplY3QqIG9iamVjdCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsCiAKIC8v
IEN1c3RvbSBBdHRyaWJ1dGVzCiAKLXZvaWQgSlNET01XaW5kb3c6OnNldExvY2F0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNET01XaW5kb3c6OnNldExvY2F0aW9u
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAjaWYgRU5BQkxFKERBU0hCT0FS
RF9TVVBQT1JUKQogICAgIC8vIFRvIGF2b2lkIGJyZWFraW5nIG9sZCB3aWRnZXRzLCBtYWtlICJ2
YXIgbG9jYXRpb24gPSIgaW4gYSB0b3AtbGV2ZWwgZnJhbWUgY3JlYXRlCiAgICAgLy8gYSBwcm9w
ZXJ0eSBuYW1lZCAibG9jYXRpb24iIGluc3RlYWQgb2YgcGVyZm9ybWluZyBhIG5hdmlnYXRpb24g
KDxyZGFyOi8vcHJvYmxlbS81Njg4MDM5PikuCi0gICAgaWYgKEZyYW1lKiBhY3RpdmVGcmFtZSA9
IGFjdGl2ZURPTVdpbmRvdyhleGVjKS5mcmFtZSgpKSB7CisgICAgaWYgKEZyYW1lKiBhY3RpdmVG
cmFtZSA9IGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpLmZyYW1lKCkpIHsKICAgICAgICAgaWYgKGFj
dGl2ZUZyYW1lLT5zZXR0aW5ncygpLnVzZXNEYXNoYm9hcmRCYWNrd2FyZENvbXBhdGliaWxpdHlN
b2RlKCkgJiYgIWFjdGl2ZUZyYW1lLT50cmVlKCkucGFyZW50KCkpIHsKLSAgICAgICAgICAgIGlm
IChCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coZXhlYywgaW1w
bCgpKSkKLSAgICAgICAgICAgICAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhleGVjLCAibG9jYXRpb24iKSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKEJp
bmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygmc3RhdGUsIGltcGwo
KSkpCisgICAgICAgICAgICAgICAgcHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLCAibG9jYXRpb24iKSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAKLSAgICBTdHJpbmcgbG9jYXRpb25TdHJpbmcg
PSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIFN0cmluZyBsb2NhdGlvblN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCZz
dGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoTG9jYXRpb24qIGxvY2F0aW9uID0gaW1wbCgpLmxvY2F0
aW9uKCkpCi0gICAgICAgIGxvY2F0aW9uLT5zZXRIcmVmKGFjdGl2ZURPTVdpbmRvdyhleGVjKSwg
Zmlyc3RET01XaW5kb3coZXhlYyksIGxvY2F0aW9uU3RyaW5nKTsKKyAgICAgICAgbG9jYXRpb24t
PnNldEhyZWYoYWN0aXZlRE9NV2luZG93KCZzdGF0ZSksIGZpcnN0RE9NV2luZG93KCZzdGF0ZSks
IGxvY2F0aW9uU3RyaW5nKTsKIH0KIAotSlNWYWx1ZSBKU0RPTVdpbmRvdzo6ZXZlbnQoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6ZXZlbnQoRXhlY1N0YXRlJiBz
dGF0ZSkgY29uc3QKIHsKICAgICBFdmVudCogZXZlbnQgPSBjdXJyZW50RXZlbnQoKTsKICAgICBp
ZiAoIWV2ZW50KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gdG9K
UyhleGVjLCBjb25zdF9jYXN0PEpTRE9NV2luZG93Kj4odGhpcyksIGV2ZW50KTsKKyAgICByZXR1
cm4gdG9KUygmc3RhdGUsIGNvbnN0X2Nhc3Q8SlNET01XaW5kb3cqPih0aGlzKSwgZXZlbnQpOwog
fQogCi1KU1ZhbHVlIEpTRE9NV2luZG93OjppbWFnZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitK
U1ZhbHVlIEpTRE9NV2luZG93OjppbWFnZShFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewotICAg
IHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU0ltYWdlQ29uc3RydWN0b3I+KGV4ZWMtPnZtKCks
IHRoaXMpOworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU0ltYWdlQ29uc3RydWN0b3I+
KHN0YXRlLnZtKCksIHRoaXMpOwogfQogCiAjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi1K
U1ZhbHVlIEpTRE9NV2luZG93Ojp0b3VjaChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVl
IEpTRE9NV2luZG93Ojp0b3VjaChFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewotICAgIHJldHVy
biBnZXRET01Db25zdHJ1Y3RvcjxKU1RvdWNoQ29uc3RydWN0b3I+KGV4ZWMtPnZtKCksIHRoaXMp
OworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1RvdWNoQ29uc3RydWN0b3I+KHN0YXRl
LnZtKCksIHRoaXMpOwogfQogCi1KU1ZhbHVlIEpTRE9NV2luZG93Ojp0b3VjaExpc3QoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6dG91Y2hMaXN0KEV4ZWNTdGF0
ZSYgc3RhdGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVG91Y2hM
aXN0Q29uc3RydWN0b3I+KGV4ZWMtPnZtKCksIHRoaXMpOworICAgIHJldHVybiBnZXRET01Db25z
dHJ1Y3RvcjxKU1RvdWNoTGlzdENvbnN0cnVjdG9yPihzdGF0ZS52bSgpLCB0aGlzKTsKIH0KICNl
bmRpZgogCiAvLyBDdXN0b20gZnVuY3Rpb25zCiAKLUpTVmFsdWUgSlNET01XaW5kb3c6Om9wZW4o
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6b3BlbihFeGVjU3RhdGUmIHN0
YXRlKQogewotICAgIFN0cmluZyB1cmxTdHJpbmcgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5l
ZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgU3RyaW5nIHVybFN0cmluZyA9IHZhbHVlVG9TdHJpbmdXaXRoVW5k
ZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSk7CisgICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBB
dG9taWNTdHJpbmcgZnJhbWVOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51
bGwoKSA/ICJfYmxhbmsiIDogZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBBdG9taWNTdHJpbmcg
ZnJhbWVOYW1lID0gc3RhdGUuYXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSA/ICJfYmxh
bmsiIDogc3RhdGUuYXJndW1lbnQoMSkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsK
KyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgIFN0cmluZyB3aW5kb3dGZWF0dXJlc1N0cmluZyA9IHZhbHVlVG9TdHJpbmdXaXRo
VW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQoMikpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBTdHJpbmcgd2luZG93RmVhdHVyZXNTdHJpbmcgPSB2
YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKCZzdGF0ZSwgc3RhdGUuYXJndW1l
bnQoMikpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKLSAgICBSZWZQdHI8RE9NV2luZG93PiBvcGVuZWRXaW5kb3cgPSBpbXBs
KCkub3Blbih1cmxTdHJpbmcsIGZyYW1lTmFtZSwgd2luZG93RmVhdHVyZXNTdHJpbmcsIGFjdGl2
ZURPTVdpbmRvdyhleGVjKSwgZmlyc3RET01XaW5kb3coZXhlYykpOworICAgIFJlZlB0cjxET01X
aW5kb3c+IG9wZW5lZFdpbmRvdyA9IGltcGwoKS5vcGVuKHVybFN0cmluZywgZnJhbWVOYW1lLCB3
aW5kb3dGZWF0dXJlc1N0cmluZywgYWN0aXZlRE9NV2luZG93KCZzdGF0ZSksIGZpcnN0RE9NV2lu
ZG93KCZzdGF0ZSkpOwogICAgIGlmICghb3BlbmVkV2luZG93KQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICByZXR1cm4gdG9KUyhleGVjLCBvcGVuZWRXaW5kb3cuZ2V0KCkpOwor
ICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgb3BlbmVkV2luZG93LmdldCgpKTsKIH0KIAogY2xhc3Mg
RGlhbG9nSGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgRGlhbG9nSGFuZGxlcihFeGVj
U3RhdGUqIGV4ZWMpCisgICAgZXhwbGljaXQgRGlhbG9nSGFuZGxlcihFeGVjU3RhdGUmIGV4ZWMp
CiAgICAgICAgIDogbV9leGVjKGV4ZWMpCiAgICAgewogICAgIH0KQEAgLTU0Nyw3ICs1NDcsNyBA
QCBwdWJsaWM6CiAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSgpIGNvbnN0OwogCiBwcml2YXRlOgot
ICAgIEV4ZWNTdGF0ZSogbV9leGVjOworICAgIEV4ZWNTdGF0ZSYgbV9leGVjOwogICAgIFJlZlB0
cjxGcmFtZT4gbV9mcmFtZTsKIH07CiAKQEAgLTU1Nyw0MiArNTU3LDQyIEBAIGlubGluZSB2b2lk
IERpYWxvZ0hhbmRsZXI6OmRpYWxvZ0NyZWF0ZWQoRE9NV2luZG93JiBkaWFsb2cpCiAgICAgCiAg
ICAgLy8gRklYTUU6IFRoaXMgbG9va3MgbGlrZSBhIGxlYWsgYmV0d2VlbiB0aGUgbm9ybWFsIHdv
cmxkIGFuZCBhbiBpc29sYXRlZAogICAgIC8vICAgICAgICB3b3JsZCBpZiBkaWFsb2dBcmd1bWVu
dHMgY29tZXMgZnJvbSBhbiBpc29sYXRlZCB3b3JsZC4KLSAgICBKU0RPTVdpbmRvdyogZ2xvYmFs
T2JqZWN0ID0gdG9KU0RPTVdpbmRvdyhtX2ZyYW1lLmdldCgpLCBub3JtYWxXb3JsZChtX2V4ZWMt
PnZtKCkpKTsKLSAgICBpZiAoSlNWYWx1ZSBkaWFsb2dBcmd1bWVudHMgPSBtX2V4ZWMtPmFyZ3Vt
ZW50KDEpKQotICAgICAgICBnbG9iYWxPYmplY3QtPnB1dERpcmVjdChtX2V4ZWMtPnZtKCksIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcobV9leGVjLCAiZGlhbG9nQXJndW1lbnRzIiksIGRpYWxvZ0Fy
Z3VtZW50cyk7CisgICAgSlNET01XaW5kb3cqIGdsb2JhbE9iamVjdCA9IHRvSlNET01XaW5kb3co
bV9mcmFtZS5nZXQoKSwgbm9ybWFsV29ybGQobV9leGVjLnZtKCkpKTsKKyAgICBpZiAoSlNWYWx1
ZSBkaWFsb2dBcmd1bWVudHMgPSBtX2V4ZWMuYXJndW1lbnQoMSkpCisgICAgICAgIGdsb2JhbE9i
amVjdC0+cHV0RGlyZWN0KG1fZXhlYy52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZtX2V4
ZWMsICJkaWFsb2dBcmd1bWVudHMiKSwgZGlhbG9nQXJndW1lbnRzKTsKIH0KIAogaW5saW5lIEpT
VmFsdWUgRGlhbG9nSGFuZGxlcjo6cmV0dXJuVmFsdWUoKSBjb25zdAogewotICAgIEpTRE9NV2lu
ZG93KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NV2luZG93KG1fZnJhbWUuZ2V0KCksIG5vcm1hbFdv
cmxkKG1fZXhlYy0+dm0oKSkpOworICAgIEpTRE9NV2luZG93KiBnbG9iYWxPYmplY3QgPSB0b0pT
RE9NV2luZG93KG1fZnJhbWUuZ2V0KCksIG5vcm1hbFdvcmxkKG1fZXhlYy52bSgpKSk7CiAgICAg
aWYgKCFnbG9iYWxPYmplY3QpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIElk
ZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcobV9leGVjLCAicmV0
dXJuVmFsdWUiKTsKKyAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZtX2V4ZWMsICJyZXR1cm5WYWx1ZSIpOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGds
b2JhbE9iamVjdCk7Ci0gICAgaWYgKCFKU0dsb2JhbE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
KGdsb2JhbE9iamVjdCwgbV9leGVjLCBpZGVudGlmaWVyLCBzbG90KSkKKyAgICBpZiAoIUpTR2xv
YmFsT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0LCAmbV9leGVjLCBpZGVu
dGlmaWVyLCBzbG90KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJu
IHNsb3QuZ2V0VmFsdWUobV9leGVjLCBpZGVudGlmaWVyKTsKKyAgICByZXR1cm4gc2xvdC5nZXRW
YWx1ZSgmbV9leGVjLCBpZGVudGlmaWVyKTsKIH0KIAotSlNWYWx1ZSBKU0RPTVdpbmRvdzo6c2hv
d01vZGFsRGlhbG9nKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNET01XaW5kb3c6OnNob3dN
b2RhbERpYWxvZyhFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIFN0cmluZyB1cmxTdHJpbmcgPSB2
YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50
KDApKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgU3RyaW5nIHVybFN0cmlu
ZyA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS5h
cmd1bWVudCgwKSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICBTdHJpbmcgZGlhbG9nRmVhdHVyZXNTdHJpbmcgPSB2YWx1
ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIp
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgU3RyaW5nIGRpYWxvZ0ZlYXR1
cmVzU3RyaW5nID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygmc3RhdGUs
IHN0YXRlLmFyZ3VtZW50KDIpKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgRGlhbG9nSGFuZGxlciBoYW5kbGVyKGV4
ZWMpOworICAgIERpYWxvZ0hhbmRsZXIgaGFuZGxlcihzdGF0ZSk7CiAKLSAgICBpbXBsKCkuc2hv
d01vZGFsRGlhbG9nKHVybFN0cmluZywgZGlhbG9nRmVhdHVyZXNTdHJpbmcsIGFjdGl2ZURPTVdp
bmRvdyhleGVjKSwgZmlyc3RET01XaW5kb3coZXhlYyksIFsmaGFuZGxlcl0oRE9NV2luZG93JiBk
aWFsb2cpIHsKKyAgICBpbXBsKCkuc2hvd01vZGFsRGlhbG9nKHVybFN0cmluZywgZGlhbG9nRmVh
dHVyZXNTdHJpbmcsIGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpLCBmaXJzdERPTVdpbmRvdygmc3Rh
dGUpLCBbJmhhbmRsZXJdKERPTVdpbmRvdyYgZGlhbG9nKSB7CiAgICAgICAgIGhhbmRsZXIuZGlh
bG9nQ3JlYXRlZChkaWFsb2cpOwogICAgIH0pOwogCiAgICAgcmV0dXJuIGhhbmRsZXIucmV0dXJu
VmFsdWUoKTsKIH0KIAotc3RhdGljIEpTVmFsdWUgaGFuZGxlUG9zdE1lc3NhZ2UoRE9NV2luZG93
KiBpbXBsLCBFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBoYW5kbGVQb3N0TWVzc2Fn
ZShET01XaW5kb3cmIGltcGwsIEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgTWVzc2FnZVBvcnRB
cnJheSBtZXNzYWdlUG9ydHM7CiAgICAgQXJyYXlCdWZmZXJBcnJheSBhcnJheUJ1ZmZlcnM7CkBA
IC02MDQsMTAyICs2MDQsMTAyIEBAIHN0YXRpYyBKU1ZhbHVlIGhhbmRsZVBvc3RNZXNzYWdlKERP
TVdpbmRvdyogaW1wbCwgRXhlY1N0YXRlKiBleGVjKQogICAgIC8vIExlZ2FjeSBub24tc3RhbmRh
cmQgaW1wbGVtZW50YXRpb25zIGluIHdlYmtpdCBhbGxvd2VkOgogICAgIC8vICAgcG9zdE1lc3Nh
Z2UobWVzc2FnZSwge3NlcXVlbmNlIG9mIHRyYW5zZmVycmFibGVzfSwgdGFyZ2V0T3JpZ2luKTsK
ICAgICBpbnQgdGFyZ2V0T3JpZ2luQXJnSW5kZXggPSAxOwotICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPiAyKSB7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+IDIpIHsKICAg
ICAgICAgaW50IHRyYW5zZmVyYWJsZXNBcmdJbmRleCA9IDI7Ci0gICAgICAgIGlmIChleGVjLT5h
cmd1bWVudCgyKS5pc1N0cmluZygpKSB7CisgICAgICAgIGlmIChzdGF0ZS5hcmd1bWVudCgyKS5p
c1N0cmluZygpKSB7CiAgICAgICAgICAgICB0YXJnZXRPcmlnaW5BcmdJbmRleCA9IDI7CiAgICAg
ICAgICAgICB0cmFuc2ZlcmFibGVzQXJnSW5kZXggPSAxOwogICAgICAgICB9Ci0gICAgICAgIGZp
bGxNZXNzYWdlUG9ydEFycmF5KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KHRyYW5zZmVyYWJsZXNBcmdJ
bmRleCksIG1lc3NhZ2VQb3J0cywgYXJyYXlCdWZmZXJzKTsKKyAgICAgICAgZmlsbE1lc3NhZ2VQ
b3J0QXJyYXkoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KHRyYW5zZmVyYWJsZXNBcmdJbmRleCksIG1l
c3NhZ2VQb3J0cywgYXJyYXlCdWZmZXJzKTsKICAgICB9Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtZXNzYWdl
ID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCks
CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSA9IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6Y3JlYXRlKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJm1lc3NhZ2VQb3J0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXJyYXlCdWZmZXJzKTsKIAot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgU3RyaW5nIHRhcmdldE9y
aWdpbiA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+
YXJndW1lbnQodGFyZ2V0T3JpZ2luQXJnSW5kZXgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgU3RyaW5nIHRhcmdldE9yaWdpbiA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZp
bmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCh0YXJnZXRPcmlnaW5BcmdJbmRl
eCkpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsLT5wb3N0TWVz
c2FnZShtZXNzYWdlLnJlbGVhc2UoKSwgJm1lc3NhZ2VQb3J0cywgdGFyZ2V0T3JpZ2luLCBhY3Rp
dmVET01XaW5kb3coZXhlYyksIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwor
ICAgIGltcGwucG9zdE1lc3NhZ2UobWVzc2FnZS5yZWxlYXNlKCksICZtZXNzYWdlUG9ydHMsIHRh
cmdldE9yaWdpbiwgYWN0aXZlRE9NV2luZG93KCZzdGF0ZSksIGVjKTsKKyAgICBzZXRET01FeGNl
cHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNW
YWx1ZSBKU0RPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBK
U0RPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1cm4g
aGFuZGxlUG9zdE1lc3NhZ2UoJmltcGwoKSwgZXhlYyk7CisgICAgcmV0dXJuIGhhbmRsZVBvc3RN
ZXNzYWdlKGltcGwoKSwgc3RhdGUpOwogfQogCi1KU1ZhbHVlIEpTRE9NV2luZG93OjpzZXRUaW1l
b3V0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNET01XaW5kb3c6OnNldFRpbWVvdXQoRXhl
Y1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBDb250ZW50U2VjdXJpdHlQb2xpY3kqIGNvbnRlbnRTZWN1
cml0eVBvbGljeSA9IGltcGwoKS5kb2N1bWVudCgpID8gaW1wbCgpLmRvY3VtZW50KCktPmNvbnRl
bnRTZWN1cml0eVBvbGljeSgpIDogMDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0
aW9uPiBhY3Rpb24gPSBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3Qo
KS0+d29ybGQoKSwgY29udGVudFNlY3VyaXR5UG9saWN5KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgQ29udGVudFNlY3VyaXR5UG9saWN5KiBjb250ZW50U2VjdXJpdHlQb2xp
Y3kgPSBpbXBsKCkuZG9jdW1lbnQoKSA/IGltcGwoKS5kb2N1bWVudCgpLT5jb250ZW50U2VjdXJp
dHlQb2xpY3koKSA6IG51bGxwdHI7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNjaGVkdWxlZEFjdGlv
bj4gYWN0aW9uID0gU2NoZWR1bGVkQWN0aW9uOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3Qo
KS0+d29ybGQoKSwgY29udGVudFNlY3VyaXR5UG9saWN5KTsKKyAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKCFhY3Rp
b24pCiAgICAgICAgIHJldHVybiBqc051bWJlcigwKTsKIAotICAgIGludCBkZWxheSA9IGV4ZWMt
PmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgaW50IGRlbGF5ID0gc3RhdGUuYXJndW1l
bnQoMSkudG9JbnQzMigmc3RhdGUpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAg
aW50IHJlc3VsdCA9IGltcGwoKS5zZXRUaW1lb3V0KFdURjo6bW92ZShhY3Rpb24pLCBkZWxheSwg
ZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9u
KCZzdGF0ZSwgZWMpOwogCiAgICAgcmV0dXJuIGpzTnVtYmVyKHJlc3VsdCk7CiB9CiAKLUpTVmFs
dWUgSlNET01XaW5kb3c6OnNldEludGVydmFsKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNE
T01XaW5kb3c6OnNldEludGVydmFsKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgQ29udGVudFNl
Y3VyaXR5UG9saWN5KiBjb250ZW50U2VjdXJpdHlQb2xpY3kgPSBpbXBsKCkuZG9jdW1lbnQoKSA/
IGltcGwoKS5kb2N1bWVudCgpLT5jb250ZW50U2VjdXJpdHlQb2xpY3koKSA6IDA7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFNjaGVkdWxlZEFjdGlvbj4gYWN0aW9uID0gU2NoZWR1bGVkQWN0aW9uOjpj
cmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KCktPndvcmxkKCksIGNvbnRlbnRTZWN1cml0eVBvbGlj
eSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIENvbnRlbnRTZWN1cml0eVBv
bGljeSogY29udGVudFNlY3VyaXR5UG9saWN5ID0gaW1wbCgpLmRvY3VtZW50KCkgPyBpbXBsKCku
ZG9jdW1lbnQoKS0+Y29udGVudFNlY3VyaXR5UG9saWN5KCkgOiBudWxscHRyOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3Jl
YXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCktPndvcmxkKCksIGNvbnRlbnRTZWN1cml0eVBvbGlj
eSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICBpbnQgZGVsYXkgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMp
OworICAgIGludCBkZWxheSA9IHN0YXRlLmFyZ3VtZW50KDEpLnRvSW50MzIoJnN0YXRlKTsKIAog
ICAgIGlmICghYWN0aW9uKQogICAgICAgICByZXR1cm4ganNOdW1iZXIoMCk7CiAKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKICAgICBpbnQgcmVzdWx0ID0gaW1wbCgpLnNldEludGVydmFsKFdU
Rjo6bW92ZShhY3Rpb24pLCBkZWxheSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBl
Yyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogCiAgICAgcmV0dXJuIGpzTnVt
YmVyKHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUgSlNET01XaW5kb3c6OmFkZEV2ZW50TGlzdGVuZXIo
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5lcihF
eGVjU3RhdGUmIHN0YXRlKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS5mcmFtZSgpOwog
ICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgSlNW
YWx1ZSBsaXN0ZW5lciA9IGV4ZWMtPmFyZ3VtZW50KDEpOworICAgIEpTVmFsdWUgbGlzdGVuZXIg
PSBzdGF0ZS5hcmd1bWVudCgxKTsKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLmFkZEV2ZW50TGlzdGVuZXIo
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnRvQXRvbWljU3RyaW5nKGV4ZWMpLCBK
U0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBn
bG9iYWxPYmplY3QoKS0+d29ybGQoKSksIGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVj
KSk7CisgICAgaW1wbCgpLmFkZEV2ZW50TGlzdGVuZXIoc3RhdGUuYXJndW1lbnQoMCkudG9TdHJp
bmcoJnN0YXRlKS0+dG9BdG9taWNTdHJpbmcoJnN0YXRlKSwgSlNFdmVudExpc3RlbmVyOjpjcmVh
dGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgZ2xvYmFsT2JqZWN0KCktPndvcmxk
KCkpLCBzdGF0ZS5hcmd1bWVudCgyKS50b0Jvb2xlYW4oJnN0YXRlKSk7CiAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVu
ZXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0
ZW5lcihFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS5mcmFt
ZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0g
ICAgSlNWYWx1ZSBsaXN0ZW5lciA9IGV4ZWMtPmFyZ3VtZW50KDEpOworICAgIEpTVmFsdWUgbGlz
dGVuZXIgPSBzdGF0ZS5hcmd1bWVudCgxKTsKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLnJlbW92ZUV2ZW50
TGlzdGVuZXIoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnRvQXRvbWljU3RyaW5n
KGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIHRoaXMs
IGZhbHNlLCBnbG9iYWxPYmplY3QoKS0+d29ybGQoKSkucHRyKCksIGV4ZWMtPmFyZ3VtZW50KDIp
LnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1wbCgpLnJlbW92ZUV2ZW50TGlzdGVuZXIoc3RhdGUu
YXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dG9BdG9taWNTdHJpbmcoJnN0YXRlKSwgSlNF
dmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgZ2xv
YmFsT2JqZWN0KCktPndvcmxkKCkpLnB0cigpLCBzdGF0ZS5hcmd1bWVudCgyKS50b0Jvb2xlYW4o
JnN0YXRlKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YUN1ZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RhdGFDdWVDdXN0b20uY3BwCmluZGV4IDJhM2M5YThiM2IzMjA1
NDZjNzE4YjA1YjA0Nzc3ZmQzMjQ3MmQzMWUuLjdhYjMyNDVkMGJiYzJiZDdkZjU3ZjJiNzU5YjM0
YjA0ODBmMzM1YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0
YUN1ZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhQ3Vl
Q3VzdG9tLmNwcApAQCAtMzYsMTQgKzM2LDE0IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICNpZiBFTkFCTEUoREFUQUNVRV9WQUxVRSkKLUpTVmFsdWUgSlNE
YXRhQ3VlOjp2YWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTRGF0YUN1ZTo6
dmFsdWUoRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKLSAgICByZXR1cm4gaW1wbCgpLnZhbHVl
KGV4ZWMpOworICAgIHJldHVybiBpbXBsKCkudmFsdWUoJnN0YXRlKTsKIH0KIAotdm9pZCBKU0Rh
dGFDdWU6OnNldFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNE
YXRhQ3VlOjpzZXRWYWx1ZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewotICAg
IGltcGwoKS5zZXRWYWx1ZShleGVjLCB2YWx1ZSk7CisgICAgaW1wbCgpLnNldFZhbHVlKCZzdGF0
ZSwgdmFsdWUpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRGF0YVRyYW5zZmVyQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRGF0YVRyYW5zZmVyQ3VzdG9tLmNwcAppbmRleCA3OTE4ZjQwZTcwMDdjNjQ1ZmJiN2Rj
MjAwM2NkNWYzYTJlNzA3NzUzLi4wYjBmYTkwNzYwMTY1NjcxMzFjYjhkNzAzM2M5Yzg2MThjMGEx
ZGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFUcmFuc2Zl
ckN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhVHJhbnNm
ZXJDdXN0b20uY3BwCkBAIC0zNSwxMCArMzUsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTRGF0YVRyYW5zZmVyOjp0eXBlcyhFeGVj
U3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTRGF0YVRyYW5zZmVyOjp0eXBlcyhFeGVjU3Rh
dGUmIHN0YXRlKSBjb25zdAogewogICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzID0gaW1wbCgpLnR5
cGVzKCk7Ci0gICAgcmV0dXJuIHR5cGVzLmlzRW1wdHkoKSA/IGpzTnVsbCgpIDoganNBcnJheShl
eGVjLCBnbG9iYWxPYmplY3QoKSwgdHlwZXMpOworICAgIHJldHVybiB0eXBlcy5pc0VtcHR5KCkg
PyBqc051bGwoKSA6IGpzQXJyYXkoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgdHlwZXMpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3Bw
CmluZGV4IGVhNjJlMjhlZGM2MGQxYmY3ZTY4NTFlN2QxMzRjYTQxMDQ2YTgxZDUuLjgzODlkNjFl
NTgzMTM4NTRmNTU2MzNjMmM5M2Q1MTE3MzBjM2VhMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2Nv
cGVDdXN0b20uY3BwCkBAIC0zOSw5ICszOSw5IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotSlNDOjpKU1ZhbHVlIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFs
U2NvcGU6OnBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQorSlNDOjpKU1ZhbHVlIEpT
RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6OnBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSkKIHsKLSAgICByZXR1cm4gaGFuZGxlUG9zdE1lc3NhZ2UoZXhlYywgJmltcGwoKSk7Cisg
ICAgcmV0dXJuIGhhbmRsZVBvc3RNZXNzYWdlKHN0YXRlLCAmaW1wbCgpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEaWN0aW9uYXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFy
eS5jcHAKaW5kZXggZjY3YzIzNDg1ZmY0NDQwM2Y4ZWVlMzhhZWUzNjBjODBkOGNlYWE4MS4uZTA5
NDk0NDM0ODc2MGE0YWRiMzc1ZjkwZDdlNzQ1ZDA2YWVmOWI5ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCkBAIC0xNzYsNyArMTc2LDcgQEAgdm9pZCBK
U0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShFeGVjU3RhdGUqLCBKU1ZhbHVlIHZhbHVlLCBSZWZQ
dHI8U3RvcmFnZT4mIHJlc3UKIHZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBNZXNzYWdlUG9ydEFycmF5JiByZXN1bHQpCiB7CiAg
ICAgQXJyYXlCdWZmZXJBcnJheSBhcnJheUJ1ZmZlcnM7Ci0gICAgZmlsbE1lc3NhZ2VQb3J0QXJy
YXkoZXhlYywgdmFsdWUsIHJlc3VsdCwgYXJyYXlCdWZmZXJzKTsKKyAgICBmaWxsTWVzc2FnZVBv
cnRBcnJheSgqZXhlYywgdmFsdWUsIHJlc3VsdCwgYXJyYXlCdWZmZXJzKTsKIH0KIAogI2lmIEVO
QUJMRShWSURFT19UUkFDSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRG9jdW1lbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1
bWVudEN1c3RvbS5jcHAKaW5kZXggNDQ4MmJjYmJkZTk0ZTlmMzkyMjVhN2ZhMWJhOGIwNTg1MGI2
MjI4MC4uZWMwYjljMmJhMzBlODYwZjZlMmJhOTgwMTcwZDhmNzAyYjQ0NTJkNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKQEAgLTEwMCwz
MyArMTAwLDMzIEBAIEpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChFeGVjU3RhdGUqIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBEb2N1CiAgICAgcmV0dXJuIGRvY3VtZW50
ID8gY3JlYXRlTmV3RG9jdW1lbnRXcmFwcGVyKCpzdGF0ZSwgKmdsb2JhbE9iamVjdCwgKmRvY3Vt
ZW50KSA6IGpzTnVsbCgpOwogfQogCi1KU1ZhbHVlIEpTRG9jdW1lbnQ6OnByZXBlbmQoRXhlY1N0
YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNEb2N1bWVudDo6cHJlcGVuZChFeGVjU3RhdGUmIHN0YXRl
KQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGltcGwoKS5wcmVwZW5kKHRvTm9k
ZU9yU3RyaW5nVmVjdG9yKCpzdGF0ZSksIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oc3RhdGUs
IGVjKTsKKyAgICBpbXBsKCkucHJlcGVuZCh0b05vZGVPclN0cmluZ1ZlY3RvcihzdGF0ZSksIGVj
KTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0RvY3VtZW50OjphcHBlbmQoRXhlY1N0YXRlKiBzdGF0
ZSkKK0pTVmFsdWUgSlNEb2N1bWVudDo6YXBwZW5kKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wbCgpLmFwcGVuZCh0b05vZGVPclN0cmluZ1Zl
Y3Rvcigqc3RhdGUpLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CisgICAg
aW1wbCgpLmFwcGVuZCh0b05vZGVPclN0cmluZ1ZlY3RvcihzdGF0ZSksIGVjKTsKKyAgICBzZXRE
T01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0K
IAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi1KU1ZhbHVlIEpTRG9jdW1lbnQ6OmNyZWF0ZVRv
dWNoTGlzdChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTRG9jdW1lbnQ6OmNyZWF0ZVRvdWNo
TGlzdChFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIFJlZlB0cjxUb3VjaExpc3Q+IHRvdWNoTGlz
dCA9IFRvdWNoTGlzdDo6Y3JlYXRlKCk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGV4
ZWMtPmFyZ3VtZW50Q291bnQoKTsgaSsrKQotICAgICAgICB0b3VjaExpc3QtPmFwcGVuZChKU1Rv
dWNoOjp0b1dyYXBwZWQoZXhlYy0+YXJndW1lbnQoaSkpKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsgaSsrKQorICAgICAgICB0b3VjaExpc3QtPmFw
cGVuZChKU1RvdWNoOjp0b1dyYXBwZWQoc3RhdGUuYXJndW1lbnQoaSkpKTsKIAotICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCB0b3VjaExpc3QucmVsZWFzZSgpKTsKKyAgICBy
ZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCB0b3VjaExpc3QucmVsZWFzZSgpKTsK
IH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Rv
Y3VtZW50RnJhZ21lbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
b2N1bWVudEZyYWdtZW50Q3VzdG9tLmNwcAppbmRleCBjNmEyYTNhOWNkOGQwYzQzZTUxOGNlNGI5
ZTNhMTAxOTZlNDllNGJjLi5jMzUyZDVkYjk3YmJjZGUwYzZjZmM5NjFkYmFlYTQ4MWNiNzIxNWM1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50RnJhZ21l
bnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRG
cmFnbWVudEN1c3RvbS5jcHAKQEAgLTM0LDIwICszNCwyMCBAQCB1c2luZyBuYW1lc3BhY2UgSlND
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNEb2N1bWVudEZyYWdtZW50Ojpw
cmVwZW5kKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTRG9jdW1lbnRGcmFnbWVudDo6cHJl
cGVuZChFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IGltcGwoKS5wcmVwZW5kKHRvTm9kZU9yU3RyaW5nVmVjdG9yKCpzdGF0ZSksIGVjKTsKLSAgICBz
ZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKKyAgICBpbXBsKCkucHJlcGVuZCh0b05vZGVPclN0
cmluZ1ZlY3RvcihzdGF0ZSksIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7
CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0RvY3VtZW50RnJh
Z21lbnQ6OmFwcGVuZChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0RvY3VtZW50RnJhZ21l
bnQ6OmFwcGVuZChFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIGltcGwoKS5hcHBlbmQodG9Ob2RlT3JTdHJpbmdWZWN0b3IoKnN0YXRlKSwgZWMpOwot
ICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOworICAgIGltcGwoKS5hcHBlbmQodG9Ob2Rl
T3JTdHJpbmdWZWN0b3Ioc3RhdGUpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwg
ZWMpOwogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50VHlwZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50VHlwZUN1c3RvbS5jcHAKaW5kZXggMzdhZjI2ZmVk
ZDM2NmQ2NjY1YWNkMzg3YjAxYWQ2NmQyNjRhNzk3NC4uODMzMzg3MjAxYmJmNjAyYjU1NTM2MDhi
ZWI1NTEwNjI5Y2VjYjk1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEb2N1bWVudFR5cGVDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRG9jdW1lbnRUeXBlQ3VzdG9tLmNwcApAQCAtMzMsMjkgKzMzLDI5IEBAIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSBKU0RvY3VtZW50VHlw
ZTo6YmVmb3JlKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTRG9jdW1lbnRUeXBlOjpiZWZv
cmUoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBp
bXBsKCkuYmVmb3JlKHRvTm9kZU9yU3RyaW5nVmVjdG9yKCpzdGF0ZSksIGVjKTsKLSAgICBzZXRE
T01FeGNlcHRpb24oc3RhdGUsIGVjKTsKKyAgICBpbXBsKCkuYmVmb3JlKHRvTm9kZU9yU3RyaW5n
VmVjdG9yKHN0YXRlKSwgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKIAog
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTRG9jdW1lbnRUeXBlOjph
ZnRlcihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0RvY3VtZW50VHlwZTo6YWZ0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCku
YWZ0ZXIodG9Ob2RlT3JTdHJpbmdWZWN0b3IoKnN0YXRlKSwgZWMpOwotICAgIHNldERPTUV4Y2Vw
dGlvbihzdGF0ZSwgZWMpOworICAgIGltcGwoKS5hZnRlcih0b05vZGVPclN0cmluZ1ZlY3Rvcihz
dGF0ZSksIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0RvY3VtZW50VHlwZTo6cmVwbGFjZVdp
dGgoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNEb2N1bWVudFR5cGU6OnJlcGxhY2VXaXRo
KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1w
bCgpLnJlcGxhY2VXaXRoKHRvTm9kZU9yU3RyaW5nVmVjdG9yKCpzdGF0ZSksIGVjKTsKLSAgICBz
ZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKKyAgICBpbXBsKCkucmVwbGFjZVdpdGgodG9Ob2Rl
T3JTdHJpbmdWZWN0b3Ioc3RhdGUpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwg
ZWMpOwogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0VsZW1lbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNFbGVtZW50Q3VzdG9tLmNwcAppbmRleCA4ZWIwZWRhOTJjMzVhYWFiYzgx
MTMyZjZjZTQ0YTcwMjAxOWIwNGFhLi43MmRkMzhlZWNjZDgxZWM2ZmI0OWJkZGMzMTNiNTE0Nzdl
NDkyMTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0VsZW1lbnRD
dXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRWxlbWVudEN1c3Rv
bS5jcHAKQEAgLTY3LDQ3ICs2Nyw0NyBAQCBKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoRXhlY1N0
YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRWxlbWVudCogZQogICAgIHJl
dHVybiB3cmFwcGVyOyAgICAKIH0KIAotSlNWYWx1ZSBKU0VsZW1lbnQ6OmJlZm9yZShFeGVjU3Rh
dGUqIHN0YXRlKQorSlNWYWx1ZSBKU0VsZW1lbnQ6OmJlZm9yZShFeGVjU3RhdGUmIHN0YXRlKQog
ewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGltcGwoKS5iZWZvcmUodG9Ob2RlT3JT
dHJpbmdWZWN0b3IoKnN0YXRlKSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMp
OworICAgIGltcGwoKS5iZWZvcmUodG9Ob2RlT3JTdHJpbmdWZWN0b3Ioc3RhdGUpLCBlYyk7Cisg
ICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKLUpTVmFsdWUgSlNFbGVtZW50OjphZnRlcihFeGVjU3RhdGUqIHN0YXRlKQorSlNW
YWx1ZSBKU0VsZW1lbnQ6OmFmdGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgaW1wbCgpLmFmdGVyKHRvTm9kZU9yU3RyaW5nVmVjdG9yKCpzdGF0
ZSksIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKKyAgICBpbXBsKCkuYWZ0
ZXIodG9Ob2RlT3JTdHJpbmdWZWN0b3Ioc3RhdGUpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9u
KCZzdGF0ZSwgZWMpOwogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUg
SlNFbGVtZW50OjpyZXBsYWNlV2l0aChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0VsZW1l
bnQ6OnJlcGxhY2VXaXRoKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgaW1wbCgpLnJlcGxhY2VXaXRoKHRvTm9kZU9yU3RyaW5nVmVjdG9yKCpzdGF0
ZSksIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKKyAgICBpbXBsKCkucmVw
bGFjZVdpdGgodG9Ob2RlT3JTdHJpbmdWZWN0b3Ioc3RhdGUpLCBlYyk7CisgICAgc2V0RE9NRXhj
ZXB0aW9uKCZzdGF0ZSwgZWMpOwogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpT
VmFsdWUgSlNFbGVtZW50OjpwcmVwZW5kKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTRWxl
bWVudDo6cHJlcGVuZChFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgIGltcGwoKS5wcmVwZW5kKHRvTm9kZU9yU3RyaW5nVmVjdG9yKCpzdGF0ZSksIGVj
KTsKLSAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKKyAgICBpbXBsKCkucHJlcGVuZCh0
b05vZGVPclN0cmluZ1ZlY3RvcihzdGF0ZSksIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0
YXRlLCBlYyk7CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0Vs
ZW1lbnQ6OmFwcGVuZChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0VsZW1lbnQ6OmFwcGVu
ZChFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGlt
cGwoKS5hcHBlbmQodG9Ob2RlT3JTdHJpbmdWZWN0b3IoKnN0YXRlKSwgZWMpOwotICAgIHNldERP
TUV4Y2VwdGlvbihzdGF0ZSwgZWMpOworICAgIGltcGwoKS5hcHBlbmQodG9Ob2RlT3JTdHJpbmdW
ZWN0b3Ioc3RhdGUpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogCiAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRXZlbnRDdXN0b20uY3BwCmluZGV4IGFmN2MzYjAxMTA4ZmViMzVlMDA2Y2FhNTllZTUyOTg1
NTkxOGE3NjMuLjUxZTlmMGQ5MzBmNmM5ZjY5OGZkMjBhY2E5YjgwMWE2ODdhZjg3ZTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCkBAIC00NCw5ICs0
NCw5IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNW
YWx1ZSBKU0V2ZW50OjpjbGlwYm9hcmREYXRhKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFs
dWUgSlNFdmVudDo6Y2xpcGJvYXJkRGF0YShFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewotICAg
IHJldHVybiBpbXBsKCkuaXNDbGlwYm9hcmRFdmVudCgpID8gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QoKSwgaW1wbCgpLmNsaXBib2FyZERhdGEoKSkgOiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVy
biBpbXBsKCkuaXNDbGlwYm9hcmRFdmVudCgpID8gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgp
LCBpbXBsKCkuY2xpcGJvYXJkRGF0YSgpKSA6IGpzVW5kZWZpbmVkKCk7CiB9CiAKICNkZWZpbmUg
VFJZX1RPX1dSQVBfV0lUSF9JTlRFUkZBQ0UoaW50ZXJmYWNlTmFtZSkgXApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAKaW5kZXggYjFlOWM3
NWU5OGQ4ZWYwN2E0MzRlMGM4MDE4YTlmZGVmNjk2MTQzYy4uNTFmYmY0ZmExODJmNGMzYmM0NmJh
NThmYmRlMDdjNWVmNThmMTA2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0ZpbGVSZWFkZXJDdXN0b20uY3BwCkBAIC00MSwxMiArNDEsMTIgQEAgdXNpbmcgbmFtZXNw
YWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTRmlsZVJlYWRlcjo6
cmVzdWx0KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgSlNGaWxlUmVhZGVyOjpyZXN1
bHQoRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICAgICBGaWxlUmVhZGVyJiBpbXAgPSBpbXBs
KCk7CiAgICAgaWYgKGltcC5yZWFkVHlwZSgpID09IEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRBc0Fy
cmF5QnVmZmVyKQotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgV1RG
OjpnZXRQdHIoaW1wLmFycmF5QnVmZmVyUmVzdWx0KCkpKTsKLSAgICByZXR1cm4ganNPd25lZFN0
cmluZ09yTnVsbChleGVjLCBpbXAuc3RyaW5nUmVzdWx0KCkpOworICAgICAgICByZXR1cm4gdG9K
Uygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXAuYXJyYXlCdWZmZXJSZXN1
bHQoKSkpOworICAgIHJldHVybiBqc093bmVkU3RyaW5nT3JOdWxsKCZzdGF0ZSwgaW1wLnN0cmlu
Z1Jlc3VsdCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcAppbmRleCAxMjcwMjQ3
NzRjMTlhMDMzZThkZWQwODcwMjhhZGU4YWUwNmUzZGJjLi41MjdkMjEzZDcyMzUzMTNlY2FmYjZl
ZTcyMzdiNzRhZWE2OTA1NWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcApAQCAtOTYsMjEgKzk2LDIxIEBAIHN0YXRpYyBSZWZQ
dHI8UG9zaXRpb25PcHRpb25zPiBjcmVhdGVQb3NpdGlvbk9wdGlvbnMoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHZhCiAgICAgcmV0dXJuIG9wdGlvbnM7CiB9CiAKLUpTVmFsdWUgSlNHZW9sb2Nh
dGlvbjo6Z2V0Q3VycmVudFBvc2l0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNHZW9s
b2NhdGlvbjo6Z2V0Q3VycmVudFBvc2l0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgLy8g
QXJndW1lbnRzOiBQb3NpdGlvbkNhbGxiYWNrLCAob3B0aW9uYWwpUG9zaXRpb25FcnJvckNhbGxi
YWNrLCAob3B0aW9uYWwpUG9zaXRpb25PcHRpb25zCiAKLSAgICBSZWZQdHI8UG9zaXRpb25DYWxs
YmFjaz4gcG9zaXRpb25DYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTUG9z
aXRpb25DYWxsYmFjaz4oZXhlYywgZ2xvYmFsT2JqZWN0KCksIGV4ZWMtPmFyZ3VtZW50KDApKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgUmVmUHRyPFBvc2l0aW9uQ2FsbGJh
Y2s+IHBvc2l0aW9uQ2FsbGJhY2sgPSBjcmVhdGVGdW5jdGlvbk9ubHlDYWxsYmFjazxKU1Bvc2l0
aW9uQ2FsbGJhY2s+KCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHN0YXRlLmFyZ3VtZW50KDApKTsK
KyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIEFTU0VSVChwb3NpdGlvbkNhbGxiYWNrKTsKIAotICAgIFJlZlB0cjxQb3NpdGlv
bkVycm9yQ2FsbGJhY2s+IHBvc2l0aW9uRXJyb3JDYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25s
eUNhbGxiYWNrPEpTUG9zaXRpb25FcnJvckNhbGxiYWNrPihleGVjLCBnbG9iYWxPYmplY3QoKSwg
ZXhlYy0+YXJndW1lbnQoMSksIENhbGxiYWNrQWxsb3dVbmRlZmluZWQgfCBDYWxsYmFja0FsbG93
TnVsbCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIFJlZlB0cjxQb3NpdGlv
bkVycm9yQ2FsbGJhY2s+IHBvc2l0aW9uRXJyb3JDYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25s
eUNhbGxiYWNrPEpTUG9zaXRpb25FcnJvckNhbGxiYWNrPigmc3RhdGUsIGdsb2JhbE9iamVjdCgp
LCBzdGF0ZS5hcmd1bWVudCgxKSwgQ2FsbGJhY2tBbGxvd1VuZGVmaW5lZCB8IENhbGxiYWNrQWxs
b3dOdWxsKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCi0gICAgUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gcG9zaXRpb25PcHRp
b25zID0gY3JlYXRlUG9zaXRpb25PcHRpb25zKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4g
cG9zaXRpb25PcHRpb25zID0gY3JlYXRlUG9zaXRpb25PcHRpb25zKCZzdGF0ZSwgc3RhdGUuYXJn
dW1lbnQoMikpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgQVNTRVJUKHBvc2l0aW9uT3B0aW9ucyk7CiAKQEAgLTExOCwy
MSArMTE4LDIxIEBAIEpTVmFsdWUgSlNHZW9sb2NhdGlvbjo6Z2V0Q3VycmVudFBvc2l0aW9uKEV4
ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBK
U0dlb2xvY2F0aW9uOjp3YXRjaFBvc2l0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNH
ZW9sb2NhdGlvbjo6d2F0Y2hQb3NpdGlvbihFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIC8vIEFy
Z3VtZW50czogUG9zaXRpb25DYWxsYmFjaywgKG9wdGlvbmFsKVBvc2l0aW9uRXJyb3JDYWxsYmFj
aywgKG9wdGlvbmFsKVBvc2l0aW9uT3B0aW9ucwogCi0gICAgUmVmUHRyPFBvc2l0aW9uQ2FsbGJh
Y2s+IHBvc2l0aW9uQ2FsbGJhY2sgPSBjcmVhdGVGdW5jdGlvbk9ubHlDYWxsYmFjazxKU1Bvc2l0
aW9uQ2FsbGJhY2s+KGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBleGVjLT5hcmd1bWVudCgwKSk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIFJlZlB0cjxQb3NpdGlvbkNhbGxiYWNr
PiBwb3NpdGlvbkNhbGxiYWNrID0gY3JlYXRlRnVuY3Rpb25Pbmx5Q2FsbGJhY2s8SlNQb3NpdGlv
bkNhbGxiYWNrPigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBzdGF0ZS5hcmd1bWVudCgwKSk7Cisg
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICBBU1NFUlQocG9zaXRpb25DYWxsYmFjayk7CiAKLSAgICBSZWZQdHI8UG9zaXRpb25F
cnJvckNhbGxiYWNrPiBwb3NpdGlvbkVycm9yQ2FsbGJhY2sgPSBjcmVhdGVGdW5jdGlvbk9ubHlD
YWxsYmFjazxKU1Bvc2l0aW9uRXJyb3JDYWxsYmFjaz4oZXhlYywgZ2xvYmFsT2JqZWN0KCksIGV4
ZWMtPmFyZ3VtZW50KDEpLCBDYWxsYmFja0FsbG93VW5kZWZpbmVkIHwgQ2FsbGJhY2tBbGxvd051
bGwpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBSZWZQdHI8UG9zaXRpb25F
cnJvckNhbGxiYWNrPiBwb3NpdGlvbkVycm9yQ2FsbGJhY2sgPSBjcmVhdGVGdW5jdGlvbk9ubHlD
YWxsYmFjazxKU1Bvc2l0aW9uRXJyb3JDYWxsYmFjaz4oJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwg
c3RhdGUuYXJndW1lbnQoMSksIENhbGxiYWNrQWxsb3dVbmRlZmluZWQgfCBDYWxsYmFja0FsbG93
TnVsbCk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIAotICAgIFJlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IHBvc2l0aW9uT3B0aW9u
cyA9IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucyhleGVjLCBleGVjLT5hcmd1bWVudCgyKSk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIFJlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IHBv
c2l0aW9uT3B0aW9ucyA9IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucygmc3RhdGUsIHN0YXRlLmFyZ3Vt
ZW50KDIpKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIEFTU0VSVChwb3NpdGlvbk9wdGlvbnMpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20u
Y3BwCmluZGV4IDc1Y2ZlNWY2NmNiZDBiMzE0MTU4NjMzMzQxMjI0NTcwMjYyYmQzNzMuLjI1OTJm
NDY3MmU4YTIxNzBlYmZmZWEyMmQ4MzM1NTgxMzM5ZjIxZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCkBA
IC0zNiwxOCArMzYsMTggQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1zdGF0aWMgSlNWYWx1ZSBuYW1lZEl0ZW1zKEV4ZWNTdGF0ZSogZXhlYywgSlNIVE1M
QWxsQ29sbGVjdGlvbiogY29sbGVjdGlvbiwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3N0
YXRpYyBKU1ZhbHVlIG5hbWVkSXRlbXMoRXhlY1N0YXRlJiBzdGF0ZSwgSlNIVE1MQWxsQ29sbGVj
dGlvbiogY29sbGVjdGlvbiwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBWZWN0
b3I8UmVmPEVsZW1lbnQ+PiBuYW1lZEl0ZW1zID0gY29sbGVjdGlvbi0+aW1wbCgpLm5hbWVkSXRl
bXMocHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcocHJvcGVydHlOYW1lKSk7CiAKICAgICBpZiAo
bmFtZWRJdGVtcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IGlmIChuYW1lZEl0ZW1zLnNpemUoKSA9PSAxKQotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBj
b2xsZWN0aW9uLT5nbG9iYWxPYmplY3QoKSwgbmFtZWRJdGVtc1swXS5wdHIoKSk7CisgICAgICAg
IHJldHVybiB0b0pTKCZzdGF0ZSwgY29sbGVjdGlvbi0+Z2xvYmFsT2JqZWN0KCksIG5hbWVkSXRl
bXNbMF0ucHRyKCkpOwogCiAgICAgLy8gRklYTUU6IEhUTUw1IHNwZWNpZmljYXRpb24gc2F5cyB0
aGlzIHNob3VsZCBiZSBhIEhUTUxDb2xsZWN0aW9uLgogICAgIC8vIGh0dHA6Ly93d3cud2hhdHdn
Lm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL2NvbW1vbi1kb20taW50
ZXJmYWNlcy5odG1sI2h0bWxhbGxjb2xsZWN0aW9uCi0gICAgcmV0dXJuIHRvSlMoZXhlYywgY29s
bGVjdGlvbi0+Z2xvYmFsT2JqZWN0KCksIFN0YXRpY0VsZW1lbnRMaXN0OjphZG9wdChuYW1lZEl0
ZW1zKS5nZXQoKSk7CisgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBjb2xsZWN0aW9uLT5nbG9iYWxP
YmplY3QoKSwgU3RhdGljRWxlbWVudExpc3Q6OmFkb3B0KG5hbWVkSXRlbXMpLmdldCgpKTsKIH0K
IAogLy8gSFRNTEFsbENvbGxlY3Rpb25zIGFyZSBzdHJhbmdlIG9iamVjdHMsIHRoZXkgc3VwcG9y
dCBib3RoIGdldCBhbmQgY2FsbC4KQEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhUTUxBbGxDb2xsZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYykK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUyhleGVjLCBqc0NvbGxlY3Rp
b24tPmdsb2JhbE9iamVjdCgpLCBjb2xsZWN0aW9uLml0ZW0oaW5kZXgudmFsdWUoKSkpKTsKIAog
ICAgICAgICAvLyBTdXBwb3J0IGZvciBkb2N1bWVudC5pbWFnZXMoJzxuYW1lPicpIGV0Yy4KLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShuYW1lZEl0ZW1zKGV4ZWMsIGpzQ29sbGVjdGlv
biwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBzdHJpbmcpKSk7CisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUobmFtZWRJdGVtcygqZXhlYywganNDb2xsZWN0aW9uLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKGV4ZWMsIHN0cmluZykpKTsKICAgICB9CiAKICAgICAvLyBUaGUgc2Vj
b25kIGFyZywgaWYgc2V0LCBpcyB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gd2Ugd2FudApAQCAtODgs
OSArODgsOSBAQCBDYWxsVHlwZSBKU0hUTUxBbGxDb2xsZWN0aW9uOjpnZXRDYWxsRGF0YShKU0Nl
bGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCiAgICAgcmV0dXJuIENhbGxUeXBlSG9zdDsKIH0KIAot
Ym9vbCBKU0hUTUxBbGxDb2xsZWN0aW9uOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSYgdmFsdWUpCitib29sIEpTSFRNTEFsbENv
bGxlY3Rpb246Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgSlNWYWx1ZSBpdGVtcyA9IG5hbWVkSXRl
bXMoZXhlYywgdGhpcywgcHJvcGVydHlOYW1lKTsKKyAgICBKU1ZhbHVlIGl0ZW1zID0gbmFtZWRJ
dGVtcygqc3RhdGUsIHRoaXMsIHByb3BlcnR5TmFtZSk7CiAgICAgaWYgKGl0ZW1zLmlzVW5kZWZp
bmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtOTgsMTYgKzk4LDE2IEBAIGJvb2wg
SlNIVE1MQWxsQ29sbGVjdGlvbjo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUpTVmFsdWUgSlNIVE1M
QWxsQ29sbGVjdGlvbjo6aXRlbShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTSFRNTEFsbENv
bGxlY3Rpb246Oml0ZW0oRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoT3B0aW9uYWw8dWlu
dDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleCgqZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpLmltcGwoKSkpCi0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2Jh
bE9iamVjdCgpLCBpbXBsKCkuaXRlbShpbmRleC52YWx1ZSgpKSk7Ci0gICAgcmV0dXJuIG5hbWVk
SXRlbXMoZXhlYywgdGhpcywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBleGVjLT5hcmd1
bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKKyAgICBpZiAoT3B0aW9uYWw8
dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleCgqc3RhdGUuYXJndW1lbnQoMCkudG9TdHJpbmco
JnN0YXRlKS0+dmFsdWUoJnN0YXRlKS5pbXBsKCkpKQorICAgICAgICByZXR1cm4gdG9KUygmc3Rh
dGUsIGdsb2JhbE9iamVjdCgpLCBpbXBsKCkuaXRlbShpbmRleC52YWx1ZSgpKSk7CisgICAgcmV0
dXJuIG5hbWVkSXRlbXMoc3RhdGUsIHRoaXMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LCBzdGF0ZS5hcmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpKSk7CiB9
CiAKLUpTVmFsdWUgSlNIVE1MQWxsQ29sbGVjdGlvbjo6bmFtZWRJdGVtKEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUgSlNIVE1MQWxsQ29sbGVjdGlvbjo6bmFtZWRJdGVtKEV4ZWNTdGF0ZSYgc3Rh
dGUpCiB7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IG5hbWVkSXRlbXMoZXhlYywgdGhpcywgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyhleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYykpKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gbmFtZWRJdGVtcyhzdGF0ZSwgdGhp
cywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDApLnRvU3Ry
aW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSkpKTsKICAgICByZXR1cm4gdmFsdWUuaXNVbmRlZmlu
ZWQoKSA/IGpzTnVsbCgpIDogdmFsdWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKaW5kZXggMmZjY2Nm
ZmJmNWViNDAzZGQzZThmMTg1YzA4OGU0NDMzZjZjMjU3MS4uZTZlYzhkYzNjZWFmNGZhZjEzM2U0
OGU5NDU5Yjk4YTYyODhkYzY4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKQEAgLTQ0LDE0ICs0NCwxNCBA
QCB1c2luZyBuYW1lc3BhY2UgSlNDOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgRU5BQkxF
KFdFQkdMKQotc3RhdGljIHZvaWQgZ2V0M0RDb250ZXh0QXR0cmlidXRlcyhFeGVjU3RhdGUqIGV4
ZWMsIFJlZlB0cjxDYW52YXNDb250ZXh0QXR0cmlidXRlcz4mIGF0dHJzKQorc3RhdGljIHZvaWQg
Z2V0M0RDb250ZXh0QXR0cmlidXRlcyhFeGVjU3RhdGUmIHN0YXRlLCBSZWZQdHI8Q2FudmFzQ29u
dGV4dEF0dHJpYnV0ZXM+JiBhdHRycykKIHsKLSAgICBKU1ZhbHVlIGluaXRpYWxpemVyVmFsdWUg
PSBleGVjLT5hcmd1bWVudCgxKTsKKyAgICBKU1ZhbHVlIGluaXRpYWxpemVyVmFsdWUgPSBzdGF0
ZS5hcmd1bWVudCgxKTsKICAgICBpZiAoaW5pdGlhbGl6ZXJWYWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgSlNPYmplY3QqIGluaXRpYWxpemVyT2Jq
ZWN0ID0gaW5pdGlhbGl6ZXJWYWx1ZS50b09iamVjdChleGVjKTsKLSAgICBKU0RpY3Rpb25hcnkg
ZGljdGlvbmFyeShleGVjLCBpbml0aWFsaXplck9iamVjdCk7CisgICAgSlNPYmplY3QqIGluaXRp
YWxpemVyT2JqZWN0ID0gaW5pdGlhbGl6ZXJWYWx1ZS50b09iamVjdCgmc3RhdGUpOworICAgIEpT
RGljdGlvbmFyeSBkaWN0aW9uYXJ5KCZzdGF0ZSwgaW5pdGlhbGl6ZXJPYmplY3QpOwogICAgIAog
ICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGdyYXBoaWNzQXR0cnM7CiAgICAgCkBA
IC02NiwxNiArNjYsMTYgQEAgc3RhdGljIHZvaWQgZ2V0M0RDb250ZXh0QXR0cmlidXRlcyhFeGVj
U3RhdGUqIGV4ZWMsIFJlZlB0cjxDYW52YXNDb250ZXh0QXR0cmlidXQKIH0KICNlbmRpZgogCi1K
U1ZhbHVlIEpTSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KEV4ZWNTdGF0ZSYgc3RhdGUp
CiB7CiAgICAgSFRNTENhbnZhc0VsZW1lbnQmIGNhbnZhcyA9IGltcGwoKTsKLSAgICBjb25zdCBT
dHJpbmcmIGNvbnRleHRJZCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKKyAgICBjb25zdCBTdHJpbmcmIGNvbnRleHRJZCA9IHN0YXRlLmFyZ3VtZW50KDAp
LnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CiAgICAgCiAgICAgUmVmUHRyPENhbnZh
c0NvbnRleHRBdHRyaWJ1dGVzPiBhdHRyczsKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgaWYgKEhU
TUxDYW52YXNFbGVtZW50OjppczNkVHlwZShjb250ZXh0SWQpKSB7Ci0gICAgICAgIGdldDNEQ29u
dGV4dEF0dHJpYnV0ZXMoZXhlYywgYXR0cnMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIGdldDNEQ29udGV4dEF0dHJpYnV0ZXMoc3RhdGUsIGF0dHJzKTsKKyAg
ICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgfQogI2VuZGlmCkBAIC04MywyMyArODMsMjMgQEAgSlNWYWx1ZSBKU0hU
TUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KEV4ZWNTdGF0ZSogZXhlYykKICAgICBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoY29udGV4dElkLCBh
dHRycy5nZXQoKSk7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7
Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGNvbnRl
eHQpKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0
cihjb250ZXh0KSk7CiB9CiAKLUpTVmFsdWUgSlNIVE1MQ2FudmFzRWxlbWVudDo6cHJvYmFibHlT
dXBwb3J0c0NvbnRleHQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0hUTUxDYW52YXNFbGVt
ZW50Ojpwcm9iYWJseVN1cHBvcnRzQ29udGV4dChFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIEhU
TUxDYW52YXNFbGVtZW50JiBjYW52YXMgPSBpbXBsKCk7Ci0gICAgaWYgKCFleGVjLT5hcmd1bWVu
dENvdW50KCkpCisgICAgaWYgKCFzdGF0ZS5hcmd1bWVudENvdW50KCkpCiAgICAgICAgIHJldHVy
biBqc0Jvb2xlYW4oZmFsc2UpOwotICAgIGNvbnN0IFN0cmluZyYgY29udGV4dElkID0gZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBjb25zdCBTdHJpbmcmIGNvbnRleHRJZCA9IHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7
CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICAKICAgICBSZWZQdHI8Q2FudmFzQ29udGV4dEF0dHJpYnV0ZXM+IGF0dHJzOwog
I2lmIEVOQUJMRShXRUJHTCkKICAgICBpZiAoSFRNTENhbnZhc0VsZW1lbnQ6OmlzM2RUeXBlKGNv
bnRleHRJZCkpIHsKLSAgICAgICAgZ2V0M0RDb250ZXh0QXR0cmlidXRlcyhleGVjLCBhdHRycyk7
Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgZ2V0M0RDb250ZXh0
QXR0cmlidXRlcyhzdGF0ZSwgYXR0cnMpOworICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAjZW5kaWYKQEAg
LTEwNywyNCArMTA3LDI0IEBAIEpTVmFsdWUgSlNIVE1MQ2FudmFzRWxlbWVudDo6cHJvYmFibHlT
dXBwb3J0c0NvbnRleHQoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBqc0Jvb2xlYW4oY2Fu
dmFzLnByb2JhYmx5U3VwcG9ydHNDb250ZXh0KGNvbnRleHRJZCwgYXR0cnMuZ2V0KCkpKTsKIH0K
IAotSlNWYWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50Ojp0b0RhdGFVUkwoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50Ojp0b0RhdGFVUkwoRXhlY1N0YXRlJiBzdGF0
ZSkKIHsKICAgICBIVE1MQ2FudmFzRWxlbWVudCYgY2FudmFzID0gaW1wbCgpOwogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwogCi0gICAgY29uc3QgU3RyaW5nJiB0eXBlID0gdmFsdWVUb1N0cmlu
Z1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAg
Y29uc3QgU3RyaW5nJiB0eXBlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVj
aygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDApKTsKICAgICBkb3VibGUgcXVhbGl0eTsKICAgICBk
b3VibGUqIHF1YWxpdHlQdHIgPSAwOwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAx
KSB7Ci0gICAgICAgIEpTVmFsdWUgdiA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOworICAg
IGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPiAxKSB7CisgICAgICAgIEpTVmFsdWUgdiA9IHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpOwogICAgICAgICBpZiAodi5pc051bWJlcigpKSB7Ci0g
ICAgICAgICAgICBxdWFsaXR5ID0gdi50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIHF1YWxp
dHkgPSB2LnRvTnVtYmVyKCZzdGF0ZSk7CiAgICAgICAgICAgICBxdWFsaXR5UHRyID0gJnF1YWxp
dHk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQzo6anNTdHJp
bmcoZXhlYywgY2FudmFzLnRvRGF0YVVSTCh0eXBlLCBxdWFsaXR5UHRyLCBlYykpOwotICAgIHNl
dERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6OmpzU3Ry
aW5nKCZzdGF0ZSwgY2FudmFzLnRvRGF0YVVSTCh0eXBlLCBxdWFsaXR5UHRyLCBlYykpOworICAg
IHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3Rv
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5j
cHAKaW5kZXggMDUyYTU0NjU3ZTBkNjdhNTg0YjU3NjhkN2E5YjYzOWIxOTlhYTk5MC4uNDMxNzQy
ODU0NjhhZWFmNzE4NzFlMDk2NGY0MjYxMTJlYzVhNjAwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcApAQCAtMTA4LDI2ICsx
MDgsMjYgQEAgYm9vbCBKU0hUTUxEb2N1bWVudDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmEKIAogLy8gQ3VzdG9tIGF0dHJpYnV0ZXMK
IAotSlNWYWx1ZSBKU0hUTUxEb2N1bWVudDo6YWxsKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pT
VmFsdWUgSlNIVE1MRG9jdW1lbnQ6OmFsbChFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewogICAg
IC8vIElmICJhbGwiIGhhcyBiZWVuIG92ZXJ3cml0dGVuLCByZXR1cm4gdGhlIG92ZXJ3cml0dGVu
IHZhbHVlCi0gICAgSlNWYWx1ZSB2ID0gZ2V0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoZXhlYywgImFsbCIpKTsKKyAgICBKU1ZhbHVlIHYgPSBnZXREaXJlY3Qoc3Rh
dGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJhbGwiKSk7CiAgICAgaWYg
KHYpCiAgICAgICAgIHJldHVybiB2OwogCi0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0KCksIGltcGwoKS5hbGwoKSk7CisgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBnbG9iYWxPYmpl
Y3QoKSwgaW1wbCgpLmFsbCgpKTsKIH0KIAotdm9pZCBKU0hUTUxEb2N1bWVudDo6c2V0QWxsKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNIVE1MRG9jdW1lbnQ6OnNldEFs
bChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIC8vIEFkZCAiYWxsIiB0
byB0aGUgcHJvcGVydHkgbWFwLgotICAgIHB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKGV4ZWMsICJhbGwiKSwgdmFsdWUpOworICAgIHB1dERpcmVjdChzdGF0ZS52
bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImFsbCIpLCB2YWx1ZSk7CiB9CiAK
LXN0YXRpYyBEb2N1bWVudCogZmluZENhbGxpbmdEb2N1bWVudChFeGVjU3RhdGUqIGV4ZWMpCitz
dGF0aWMgRG9jdW1lbnQqIGZpbmRDYWxsaW5nRG9jdW1lbnQoRXhlY1N0YXRlJiBzdGF0ZSkKIHsK
ICAgICBDYWxsZXJGdW5jdG9yIGZ1bmN0b3I7Ci0gICAgZXhlYy0+aXRlcmF0ZShmdW5jdG9yKTsK
KyAgICBzdGF0ZS5pdGVyYXRlKGZ1bmN0b3IpOwogICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUg
PSBmdW5jdG9yLmNhbGxlckZyYW1lKCk7CiAgICAgaWYgKCFjYWxsZXJGcmFtZSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC0xMzcsMTkgKzEzNywxOSBAQCBzdGF0aWMgRG9jdW1lbnQqIGZp
bmRDYWxsaW5nRG9jdW1lbnQoRXhlY1N0YXRlKiBleGVjKQogCiAvLyBDdXN0b20gZnVuY3Rpb25z
CiAKLUpTVmFsdWUgSlNIVE1MRG9jdW1lbnQ6Om9wZW4oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0hUTUxEb2N1bWVudDo6b3BlbihFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIC8vIEZvciBj
b21wYXRpYmlsaXR5IHdpdGggb3RoZXIgYnJvd3NlcnMsIHBhc3Mgb3BlbiBjYWxscyB3aXRoIG1v
cmUgdGhhbiAyIHBhcmFtZXRlcnMgdG8gdGhlIHdpbmRvdy4KLSAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpID4gMikgeworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPiAyKSB7CiAg
ICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBpbXBsKCkuZnJhbWUoKSkgewotICAgICAgICAgICAg
SlNET01XaW5kb3dTaGVsbCogd3JhcHBlciA9IHRvSlNET01XaW5kb3dTaGVsbChmcmFtZSwgY3Vy
cmVudFdvcmxkKGV4ZWMpKTsKKyAgICAgICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHdyYXBwZXIg
PSB0b0pTRE9NV2luZG93U2hlbGwoZnJhbWUsIGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsKICAgICAg
ICAgICAgIGlmICh3cmFwcGVyKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9
IHdyYXBwZXItPmdldChleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJvcGVuIikp
OworICAgICAgICAgICAgICAgIEpTVmFsdWUgZnVuY3Rpb24gPSB3cmFwcGVyLT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgIm9wZW4iKSk7CiAgICAgICAgICAgICAg
ICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUg
PSA6OmdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgICAgICAgICAgICAgaWYg
KGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgICAgIHJldHVybiBKU0M6OmNhbGwoZXhl
YywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgd3JhcHBlciwgQXJnTGlzdChleGVjKSk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOworICAg
ICAgICAgICAgICAgIHJldHVybiBKU0M6OmNhbGwoJnN0YXRlLCBmdW5jdGlvbiwgY2FsbFR5cGUs
IGNhbGxEYXRhLCB3cmFwcGVyLCBBcmdMaXN0KCZzdGF0ZSkpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtMTU3LDcgKzE1Nyw3IEBA
IEpTVmFsdWUgSlNIVE1MRG9jdW1lbnQ6Om9wZW4oRXhlY1N0YXRlKiBleGVjKQogCiAgICAgLy8g
ZG9jdW1lbnQub3BlbiBjbG9iYmVycyB0aGUgc2VjdXJpdHkgY29udGV4dCBvZiB0aGUgZG9jdW1l
bnQgYW5kCiAgICAgLy8gYWxpYXNlcyBpdCB3aXRoIHRoZSBhY3RpdmUgc2VjdXJpdHkgY29udGV4
dC4KLSAgICBEb2N1bWVudCogYWN0aXZlRG9jdW1lbnQgPSBhc0pTRE9NV2luZG93KGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSktPmltcGwoKS5kb2N1bWVudCgpOworICAgIERvY3VtZW50KiBh
Y3RpdmVEb2N1bWVudCA9IGFzSlNET01XaW5kb3coc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgp
KS0+aW1wbCgpLmRvY3VtZW50KCk7CiAKICAgICAvLyBJbiB0aGUgY2FzZSBvZiB0d28gcGFyYW1l
dGVycyBvciBmZXdlciwgZG8gYSBub3JtYWwgZG9jdW1lbnQgb3Blbi4KICAgICBpbXBsKCkub3Bl
bihhY3RpdmVEb2N1bWVudCk7CkBAIC0xNjYsMjEgKzE2NiwyMSBAQCBKU1ZhbHVlIEpTSFRNTERv
Y3VtZW50OjpvcGVuKEV4ZWNTdGF0ZSogZXhlYykKIAogZW51bSBOZXdsaW5lUmVxdWlyZW1lbnQg
eyBEb05vdEFkZE5ld2xpbmUsIERvQWRkTmV3bGluZSB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQg
ZG9jdW1lbnRXcml0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTSFRNTERvY3VtZW50KiB0aGlzRG9jdW1l
bnQsIE5ld2xpbmVSZXF1aXJlbWVudCBhZGROZXdsaW5lKQorc3RhdGljIGlubGluZSB2b2lkIGRv
Y3VtZW50V3JpdGUoRXhlY1N0YXRlJiBzdGF0ZSwgSlNIVE1MRG9jdW1lbnQqIHRoaXNEb2N1bWVu
dCwgTmV3bGluZVJlcXVpcmVtZW50IGFkZE5ld2xpbmUpCiB7CiAgICAgSFRNTERvY3VtZW50KiBk
b2N1bWVudCA9ICZ0aGlzRG9jdW1lbnQtPmltcGwoKTsKICAgICAvLyBET00gb25seSBzcGVjaWZp
ZXMgc2luZ2xlIHN0cmluZyBhcmd1bWVudCwgYnV0IGJyb3dzZXJzIGFsbG93IG11bHRpcGxlIG9y
IG5vIGFyZ3VtZW50cy4KIAotICAgIHNpemVfdCBzaXplID0gZXhlYy0+YXJndW1lbnRDb3VudCgp
OworICAgIHNpemVfdCBzaXplID0gc3RhdGUuYXJndW1lbnRDb3VudCgpOwogCi0gICAgU3RyaW5n
IGZpcnN0U3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOworICAgIFN0cmluZyBmaXJzdFN0cmluZyA9IHN0YXRlLmFyZ3VtZW50KDApLnRvU3RyaW5n
KCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CiAgICAgU2VnbWVudGVkU3RyaW5nIHNlZ21lbnRlZFN0
cmluZyA9IGZpcnN0U3RyaW5nOwogICAgIGlmIChzaXplICE9IDEpIHsKICAgICAgICAgaWYgKCFz
aXplKQogICAgICAgICAgICAgc2VnbWVudGVkU3RyaW5nLmNsZWFyKCk7CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICBTdHJpbmcgc3Vic2VxdWVudFN0cmluZyA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICAgICAgICAgICAgICBTdHJp
bmcgc3Vic2VxdWVudFN0cmluZyA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvU3RyaW5n
KCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CiAgICAgICAgICAgICAgICAgc2VnbWVudGVkU3RyaW5n
LmFwcGVuZChTZWdtZW50ZWRTdHJpbmcoc3Vic2VxdWVudFN0cmluZykpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC0xODgsMTkgKzE4OCwxOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZG9j
dW1lbnRXcml0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTSFRNTERvY3VtZW50KiB0aGlzRG9jdW1lbnQs
CiAgICAgaWYgKGFkZE5ld2xpbmUpCiAgICAgICAgIHNlZ21lbnRlZFN0cmluZy5hcHBlbmQoU2Vn
bWVudGVkU3RyaW5nKFN0cmluZygmbmV3bGluZUNoYXJhY3RlciwgMSkpKTsKIAotICAgIERvY3Vt
ZW50KiBhY3RpdmVEb2N1bWVudCA9IGZpbmRDYWxsaW5nRG9jdW1lbnQoZXhlYyk7CisgICAgRG9j
dW1lbnQqIGFjdGl2ZURvY3VtZW50ID0gZmluZENhbGxpbmdEb2N1bWVudChzdGF0ZSk7CiAgICAg
ZG9jdW1lbnQtPndyaXRlKHNlZ21lbnRlZFN0cmluZywgYWN0aXZlRG9jdW1lbnQpOwogfQogCi1K
U1ZhbHVlIEpTSFRNTERvY3VtZW50Ojp3cml0ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
SFRNTERvY3VtZW50Ojp3cml0ZShFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGRvY3VtZW50V3Jp
dGUoZXhlYywgdGhpcywgRG9Ob3RBZGROZXdsaW5lKTsKKyAgICBkb2N1bWVudFdyaXRlKHN0YXRl
LCB0aGlzLCBEb05vdEFkZE5ld2xpbmUpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQog
Ci1KU1ZhbHVlIEpTSFRNTERvY3VtZW50Ojp3cml0ZWxuKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFs
dWUgSlNIVE1MRG9jdW1lbnQ6OndyaXRlbG4oRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBkb2N1
bWVudFdyaXRlKGV4ZWMsIHRoaXMsIERvQWRkTmV3bGluZSk7CisgICAgZG9jdW1lbnRXcml0ZShz
dGF0ZSwgdGhpcywgRG9BZGROZXdsaW5lKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRm9ybUNvbnRy
b2xzQ29sbGVjdGlvbkN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uQ3VzdG9tLmNwcAppbmRleCBlYzdmN2RiYjZiODQxZTFj
MmU0MGUwZjkyNDE2MjdkYzkwM2VhZGRiLi44YjU1ZmE3ZGUzNmU1YzYwNzg4OWM5YjFlOWE1MWMz
ZWM4YTY4Yjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxG
b3JtQ29udHJvbHNDb2xsZWN0aW9uQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uQ3VzdG9tLmNwcApAQCAtMzAsNyAr
MzAsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0
YXRpYyBKU1ZhbHVlIG5hbWVkSXRlbXMoRXhlY1N0YXRlKiBleGVjLCBKU0hUTUxGb3JtQ29udHJv
bHNDb2xsZWN0aW9uKiBjb2xsZWN0aW9uLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorc3Rh
dGljIEpTVmFsdWUgbmFtZWRJdGVtcyhFeGVjU3RhdGUmIHN0YXRlLCBKU0hUTUxGb3JtQ29udHJv
bHNDb2xsZWN0aW9uKiBjb2xsZWN0aW9uLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewog
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5n
KHByb3BlcnR5TmFtZSk7CiAgICAgVmVjdG9yPFJlZjxFbGVtZW50Pj4gbmFtZWRJdGVtcyA9IGNv
bGxlY3Rpb24tPmltcGwoKS5uYW1lZEl0ZW1zKG5hbWUpOwpAQCAtMzgsMTUgKzM4LDE1IEBAIHN0
YXRpYyBKU1ZhbHVlIG5hbWVkSXRlbXMoRXhlY1N0YXRlKiBleGVjLCBKU0hUTUxGb3JtQ29udHJv
bHNDb2xsZWN0aW9uKiBjb2xsZWN0CiAgICAgaWYgKG5hbWVkSXRlbXMuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpZiAobmFtZWRJdGVtcy5zaXplKCkgPT0g
MSkKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgY29sbGVjdGlvbi0+Z2xvYmFsT2JqZWN0KCks
IG5hbWVkSXRlbXNbMF0ucHRyKCkpOworICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsIGNvbGxl
Y3Rpb24tPmdsb2JhbE9iamVjdCgpLCBuYW1lZEl0ZW1zWzBdLnB0cigpKTsKIAogICAgIEFTU0VS
VChjb2xsZWN0aW9uLT5pbXBsKCkudHlwZSgpID09IEZvcm1Db250cm9scyk7Ci0gICAgcmV0dXJu
IHRvSlMoZXhlYywgY29sbGVjdGlvbi0+Z2xvYmFsT2JqZWN0KCksIGNvbGxlY3Rpb24tPmltcGwo
KS5vd25lck5vZGUoKS5yYWRpb05vZGVMaXN0KG5hbWUpLmdldCgpKTsKKyAgICByZXR1cm4gdG9K
Uygmc3RhdGUsIGNvbGxlY3Rpb24tPmdsb2JhbE9iamVjdCgpLCBjb2xsZWN0aW9uLT5pbXBsKCku
b3duZXJOb2RlKCkucmFkaW9Ob2RlTGlzdChuYW1lKS5nZXQoKSk7CiB9CiAKLWJvb2wgSlNIVE1M
Rm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUmIHZhbHVlKQorYm9vbCBKU0hUTUxGb3JtQ29u
dHJvbHNDb2xsZWN0aW9uOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUmIHZhbHVlKQogewotICAgIGF1dG8gaXRlbXMgPSBuYW1l
ZEl0ZW1zKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSk7CisgICAgYXV0byBpdGVtcyA9IG5hbWVk
SXRlbXMoKnN0YXRlLCB0aGlzLCBwcm9wZXJ0eU5hbWUpOwogICAgIGlmIChpdGVtcy5pc1VuZGVm
aW5lZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTU0LDkgKzU0LDkgQEAgYm9vbCBK
U0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3AKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotSlNWYWx1ZSBKU0hUTUxG
b3JtQ29udHJvbHNDb2xsZWN0aW9uOjpuYW1lZEl0ZW0oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOjpuYW1lZEl0ZW0oRXhlY1N0YXRlJiBzdGF0
ZSkKIHsKLSAgICBKU1ZhbHVlIHZhbHVlID0gbmFtZWRJdGVtcyhleGVjLCB0aGlzLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKSkpOworICAgIEpTVmFsdWUgdmFsdWUgPSBuYW1lZEl0ZW1zKHN0YXRlLCB0aGlz
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCkudG9TdHJp
bmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKSkpOwogICAgIHJldHVybiB2YWx1ZS5pc1VuZGVmaW5l
ZCgpID8ganNOdWxsKCkgOiB2YWx1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MRnJhbWVFbGVtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSFRNTEZyYW1lRWxlbWVudEN1c3RvbS5jcHAKaW5kZXggYTRlZDQzMGQz
MmI0ZDg1ZTJhMjkzNmU5M2U3ZmRiNjY1NjNlNjMxMS4uYWIwMDBmNzEzMDE5ZTliOGEwYmY1OGUy
MzVkNzQxM2E5YWNiOTU0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNIVE1MRnJhbWVFbGVtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxGcmFtZUVsZW1lbnRDdXN0b20uY3BwCkBAIC00MSwyMiArNDEsMjIgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1zdGF0aWMg
aW5saW5lIGJvb2wgYWxsb3dTZXR0aW5nSmF2YXNjcmlwdFVSTChFeGVjU3RhdGUqIGV4ZWMsIEhU
TUxGcmFtZUVsZW1lbnQqIGltcCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBhbGxvd1NldHRpbmdKYXZhc2NyaXB0VVJMKEV4ZWNTdGF0ZSYgc3RhdGUsIEhUTUxGcmFt
ZUVsZW1lbnQqIGltcCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAocHJvdG9jb2xJ
c0phdmFTY3JpcHQoc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHZhbHVlKSkpIHsK
ICAgICAgICAgRG9jdW1lbnQqIGNvbnRlbnREb2N1bWVudCA9IGltcC0+Y29udGVudERvY3VtZW50
KCk7Ci0gICAgICAgIGlmIChjb250ZW50RG9jdW1lbnQgJiYgIXNob3VsZEFsbG93QWNjZXNzVG9O
b2RlKGV4ZWMsIGNvbnRlbnREb2N1bWVudCkpCisgICAgICAgIGlmIChjb250ZW50RG9jdW1lbnQg
JiYgIXNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKCZzdGF0ZSwgY29udGVudERvY3VtZW50KSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgSlNIVE1MRnJhbWVFbGVtZW50OjpzZXRMb2NhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUpCit2b2lkIEpTSFRNTEZyYW1lRWxlbWVudDo6c2V0TG9jYXRpb24oRXhlY1N0YXRl
JiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBIVE1MRnJhbWVFbGVtZW50JiBpbXAgPSBp
bXBsKCk7Ci0gICAgU3RyaW5nIGxvY2F0aW9uVmFsdWUgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxD
aGVjayhleGVjLCB2YWx1ZSk7CisgICAgU3RyaW5nIGxvY2F0aW9uVmFsdWUgPSB2YWx1ZVRvU3Ry
aW5nV2l0aE51bGxDaGVjaygmc3RhdGUsIHZhbHVlKTsKIAotICAgIGlmICghYWxsb3dTZXR0aW5n
SmF2YXNjcmlwdFVSTChleGVjLCAmaW1wLCBsb2NhdGlvblZhbHVlKSkKKyAgICBpZiAoIWFsbG93
U2V0dGluZ0phdmFzY3JpcHRVUkwoc3RhdGUsICZpbXAsIGxvY2F0aW9uVmFsdWUpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBpbXAuc2V0TG9jYXRpb24obG9jYXRpb25WYWx1ZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRDdXN0b20u
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50Q3VzdG9t
LmNwcAppbmRleCA0MmViYWQzMTU5NDI0ZDdhZDk5NmFjYzk5ZjJkZTM2NDBjNGZkYTA5Li44ZjQy
ZGJlZjUyNGZkNmZkOGNlM2RhYTExMTlkZGZkYjNiOWIwMTU1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRDdXN0b20uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTElucHV0RWxlbWVudEN1c3RvbS5jcHAKQEAg
LTMzLDcxICszMyw3MSBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUpTVmFsdWUgSlNIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25TdGFydChFeGVjU3Rh
dGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTSFRNTElucHV0RWxlbWVudDo6c2VsZWN0aW9uU3Rh
cnQoRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1
dCA9IGltcGwoKTsKICAgICBpZiAoIWlucHV0LmNhbkhhdmVTZWxlY3Rpb24oKSkKLSAgICAgICAg
cmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJy
b3IoJnN0YXRlKTsKIAogICAgIHJldHVybiBqc051bWJlcihpbnB1dC5zZWxlY3Rpb25TdGFydCgp
KTsKIH0KIAotdm9pZCBKU0hUTUxJbnB1dEVsZW1lbnQ6OnNldFNlbGVjdGlvblN0YXJ0KEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNIVE1MSW5wdXRFbGVtZW50OjpzZXRT
ZWxlY3Rpb25TdGFydChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIEhU
TUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gaW1wbCgpOwogICAgIGlmICghaW5wdXQuY2FuSGF2ZVNl
bGVjdGlvbigpKQotICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAgICAgdGhyb3dU
eXBlRXJyb3IoJnN0YXRlKTsKIAotICAgIGlucHV0LnNldFNlbGVjdGlvblN0YXJ0KHZhbHVlLnRv
SW50MzIoZXhlYykpOworICAgIGlucHV0LnNldFNlbGVjdGlvblN0YXJ0KHZhbHVlLnRvSW50MzIo
JnN0YXRlKSk7CiB9CiAKLUpTVmFsdWUgSlNIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25FbmQo
RXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU0hUTUxJbnB1dEVsZW1lbnQ6OnNlbGVj
dGlvbkVuZChFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewogICAgIEhUTUxJbnB1dEVsZW1lbnQm
IGlucHV0ID0gaW1wbCgpOwogICAgIGlmICghaW5wdXQuY2FuSGF2ZVNlbGVjdGlvbigpKQotICAg
ICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiB0aHJvd1R5
cGVFcnJvcigmc3RhdGUpOwogCiAgICAgcmV0dXJuIGpzTnVtYmVyKGlucHV0LnNlbGVjdGlvbkVu
ZCgpKTsKIH0KIAotdm9pZCBKU0hUTUxJbnB1dEVsZW1lbnQ6OnNldFNlbGVjdGlvbkVuZChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit2b2lkIEpTSFRNTElucHV0RWxlbWVudDo6c2V0
U2VsZWN0aW9uRW5kKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgSFRN
TElucHV0RWxlbWVudCYgaW5wdXQgPSBpbXBsKCk7CiAgICAgaWYgKCFpbnB1dC5jYW5IYXZlU2Vs
ZWN0aW9uKCkpCi0gICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgICAgICB0aHJvd1R5
cGVFcnJvcigmc3RhdGUpOwogCi0gICAgaW5wdXQuc2V0U2VsZWN0aW9uRW5kKHZhbHVlLnRvSW50
MzIoZXhlYykpOworICAgIGlucHV0LnNldFNlbGVjdGlvbkVuZCh2YWx1ZS50b0ludDMyKCZzdGF0
ZSkpOwogfQogCi1KU1ZhbHVlIEpTSFRNTElucHV0RWxlbWVudDo6c2VsZWN0aW9uRGlyZWN0aW9u
KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgSlNIVE1MSW5wdXRFbGVtZW50OjpzZWxl
Y3Rpb25EaXJlY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICAgICBIVE1MSW5wdXRF
bGVtZW50JiBpbnB1dCA9IGltcGwoKTsKICAgICBpZiAoIWlucHV0LmNhbkhhdmVTZWxlY3Rpb24o
KSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm4g
dGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKIAotICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShl
eGVjLCBpbnB1dC5zZWxlY3Rpb25EaXJlY3Rpb24oKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nV2l0
aENhY2hlKCZzdGF0ZSwgaW5wdXQuc2VsZWN0aW9uRGlyZWN0aW9uKCkpOwogfQogCi12b2lkIEpT
SFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uRGlyZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25EaXJl
Y3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBIVE1MSW5wdXRF
bGVtZW50JiBpbnB1dCA9IGltcGwoKTsKICAgICBpZiAoIWlucHV0LmNhbkhhdmVTZWxlY3Rpb24o
KSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAgICAgdGhyb3dUeXBlRXJy
b3IoJnN0YXRlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlucHV0LnNldFNlbGVj
dGlvbkRpcmVjdGlvbih2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAgIGlu
cHV0LnNldFNlbGVjdGlvbkRpcmVjdGlvbih2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgm
c3RhdGUpKTsKIH0KIAotSlNWYWx1ZSBKU0hUTUxJbnB1dEVsZW1lbnQ6OnNldFNlbGVjdGlvblJh
bmdlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxl
Y3Rpb25SYW5nZShFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlu
cHV0ID0gaW1wbCgpOwogICAgIGlmICghaW5wdXQuY2FuSGF2ZVNlbGVjdGlvbigpKQotICAgICAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVF
cnJvcigmc3RhdGUpOwogCi0gICAgaW50IHN0YXJ0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQz
MihleGVjKTsKLSAgICBpbnQgZW5kID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsK
LSAgICBTdHJpbmcgZGlyZWN0aW9uID0gZXhlYy0+YXJndW1lbnQoMikudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpOworICAgIGludCBzdGFydCA9IHN0YXRlLmFyZ3VtZW50KDApLnRvSW50MzIo
JnN0YXRlKTsKKyAgICBpbnQgZW5kID0gc3RhdGUuYXJndW1lbnQoMSkudG9JbnQzMigmc3RhdGUp
OworICAgIFN0cmluZyBkaXJlY3Rpb24gPSBzdGF0ZS5hcmd1bWVudCgyKS50b1N0cmluZygmc3Rh
dGUpLT52YWx1ZSgmc3RhdGUpOwogCiAgICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQs
IGVuZCwgZGlyZWN0aW9uKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE1lZGlhRWxlbWVudEN1c3RvbS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxNZWRpYUVsZW1lbnRDdXN0b20uY3Bw
CmluZGV4IDIwN2FiNzFkYWJlMzNmNzYwZjMwNWRjYmQzOWQwZmQ5Y2IzMjhiYzQuLjQ0MDA5NzYx
ZDEzOWQxMzE4NjQ2YjVjOGU1MWUyNWJhZDBlYjE0MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTE1lZGlhRWxlbWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MTWVkaWFFbGVtZW50Q3VzdG9tLmNwcApAQCAtMzQs
NyArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAK
LXZvaWQgSlNIVE1MTWVkaWFFbGVtZW50OjpzZXRDb250cm9sbGVyKEV4ZWNTdGF0ZSosIEpTVmFs
dWUgdmFsdWUpCit2b2lkIEpTSFRNTE1lZGlhRWxlbWVudDo6c2V0Q29udHJvbGxlcihFeGVjU3Rh
dGUmLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIC8vIDQuOC4xMC4xMS4yIE1lZGlhIGNvbnRyb2xs
ZXJzOiBjb250cm9sbGVyIGF0dHJpYnV0ZS4KICAgICAvLyBPbiBzZXR0aW5nLCBpdCBtdXN0IGZp
cnN0IHJlbW92ZSB0aGUgZWxlbWVudCdzIG1lZGlhZ3JvdXAgYXR0cmlidXRlLCBpZiBhbnksIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MT3B0aW9uc0NvbGxl
Y3Rpb25DdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MT3B0aW9u
c0NvbGxlY3Rpb25DdXN0b20uY3BwCmluZGV4IGZiMzc1ZWY5OTdkODI0ODFjMGUwYTNiY2IxZmMx
YTVlNmM2ZjVjY2EuLjkxNWUwMjg3Yzc4Y2RjMDk1ZGIxYWRlMzM1ZDc2MGNkM2I1ODNlN2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbnNDb2xsZWN0
aW9uQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPcHRp
b25zQ29sbGVjdGlvbkN1c3RvbS5jcHAKQEAgLTQ3LDExICs0NywxMSBAQCBib29sIEpTSFRNTE9w
dGlvbnNDb2xsZWN0aW9uOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEpTSFRNTE9wdGlvbnNDb2xs
ZWN0aW9uOjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQordm9pZCBK
U0hUTUxPcHRpb25zQ29sbGVjdGlvbjo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgdmFsdWUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgdW5zaWduZWQgbmV3
TGVuZ3RoID0gMDsKLSAgICBkb3VibGUgbGVuZ3RoVmFsdWUgPSB2YWx1ZS50b051bWJlcihleGVj
KTsKKyAgICBkb3VibGUgbGVuZ3RoVmFsdWUgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwogICAg
IGlmICghc3RkOjppc25hbihsZW5ndGhWYWx1ZSkgJiYgIXN0ZDo6aXNpbmYobGVuZ3RoVmFsdWUp
KSB7CiAgICAgICAgIGlmIChsZW5ndGhWYWx1ZSA8IDAuMCkKICAgICAgICAgICAgIGVjID0gSU5E
RVhfU0laRV9FUlI7CkBAIC02Miw3ICs2Miw3IEBAIHZvaWQgSlNIVE1MT3B0aW9uc0NvbGxlY3Rp
b246OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiAgICAgfQogICAg
IGlmICghZWMpCiAgICAgICAgIGltcGwoKS5zZXRMZW5ndGgobmV3TGVuZ3RoLCBlYyk7Ci0gICAg
c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBl
Yyk7CiB9CiAKIHZvaWQgSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb246OmluZGV4U2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUpCkBAIC03MCwxNCArNzAs
MTQgQEAgdm9pZCBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbjo6aW5kZXhTZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNWYWwKICAgICBzZWxlY3RJbmRleFNldHRlcigmaW1w
bCgpLnNlbGVjdEVsZW1lbnQoKSwgZXhlYywgaW5kZXgsIHZhbHVlKTsKIH0KIAotSlNWYWx1ZSBK
U0hUTUxPcHRpb25zQ29sbGVjdGlvbjo6cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUg
SlNIVE1MT3B0aW9uc0NvbGxlY3Rpb246OnJlbW92ZShFeGVjU3RhdGUmIHN0YXRlKQogewogICAg
IC8vIFRoZSBhcmd1bWVudCBjYW4gYmUgYW4gSFRNTE9wdGlvbkVsZW1lbnQgb3IgYW4gaW5kZXgu
Ci0gICAgSlNWYWx1ZSBhcmd1bWVudCA9IGV4ZWMtPmFyZ3VtZW50KDApOworICAgIEpTVmFsdWUg
YXJndW1lbnQgPSBzdGF0ZS5hcmd1bWVudCgwKTsKICAgICBpZiAoSFRNTE9wdGlvbkVsZW1lbnQq
IG9wdGlvbiA9IEpTSFRNTE9wdGlvbkVsZW1lbnQ6OnRvV3JhcHBlZChhcmd1bWVudCkpCiAgICAg
ICAgIGltcGwoKS5yZW1vdmUob3B0aW9uKTsKICAgICBlbHNlCi0gICAgICAgIGltcGwoKS5yZW1v
dmUoYXJndW1lbnQudG9JbnQzMihleGVjKSk7CisgICAgICAgIGltcGwoKS5yZW1vdmUoYXJndW1l
bnQudG9JbnQzMigmc3RhdGUpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MU2VsZWN0RWxlbWVudEN1
c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxTZWxlY3RFbGVtZW50
Q3VzdG9tLmNwcAppbmRleCAxNDZlMjQyYTA1ZDhkOGI1NGUxZTI5YjE3MGUyNDQyMzM3MmM5NzI4
Li5iM2RmMTNmNzJlYWE4ZmJhYTA3ODYwNWY0NzYzMzkyN2ViZTAyY2M2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9t
LmNwcApAQCAtMzIsMjEgKzMyLDIxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1KU1ZhbHVlIEpTSFRNTFNl
bGVjdEVsZW1lbnQ6OnJlbW92ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTSFRNTFNlbGVj
dEVsZW1lbnQ6OnJlbW92ZShFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIEhUTUxTZWxlY3RFbGVt
ZW50JiBzZWxlY3QgPSBpbXBsKCk7CiAKLSAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkg
eworICAgIGlmICghc3RhdGUuYXJndW1lbnRDb3VudCgpKSB7CiAgICAgICAgIC8vIFdoZW4gY2Fs
bGVkIHdpdGggbm8gYXJndW1lbnQsIHdlIHNob3VsZCBjYWxsIEVsZW1lbnQ6OnJlbW92ZSgpIHRv
IGRldGFjaC4KICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgICAgIHNlbGVjdC5y
ZW1vdmUoZWMpOwotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBz
ZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gVGhl
IEhUTUxTZWxlY3RFbGVtZW50OjpyZW1vdmUoKSBmdW5jdGlvbiBjYW4gdGFrZSBlaXRoZXIgYW4g
b3B0aW9uIG9iamVjdCBvciB0aGUgaW5kZXggb2YgYW4gb3B0aW9uLgotICAgICAgICBpZiAoSFRN
TE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IEpTSFRNTE9wdGlvbkVsZW1lbnQ6OnRvV3JhcHBlZChl
eGVjLT5hcmd1bWVudCgwKSkpCisgICAgICAgIGlmIChIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9u
ID0gSlNIVE1MT3B0aW9uRWxlbWVudDo6dG9XcmFwcGVkKHN0YXRlLmFyZ3VtZW50KDApKSkKICAg
ICAgICAgICAgIHNlbGVjdC5yZW1vdmUob3B0aW9uKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgc2VsZWN0LnJlbW92ZUJ5SW5kZXgoZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKSk7
CisgICAgICAgICAgICBzZWxlY3QucmVtb3ZlQnlJbmRleChzdGF0ZS5hcmd1bWVudCgwKS50b0lu
dDMyKCZzdGF0ZSkpOwogICAgIH0KIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3Vz
dG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVu
dEN1c3RvbS5jcHAKaW5kZXggZTEyMTk5ZjFiNTQ3N2RmNWNiMTU4ODc3OTc1M2RhYmJlNWUwZmZk
Zi4uMWJiODZkZjg4YzlkZWVhYjA5YmEwNmYzMjVkZTdiZGY2NmQ0NDhhZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRD
dXN0b20uY3BwCkBAIC00Myw5ICs0Myw5IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OmNvbnRlbnQo
RXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OmNv
bnRlbnQoRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jaygmc3RhdGUpOwogCiAgICAgRG9jdW1lbnRGcmFn
bWVudCogY29udGVudCA9IGltcGwoKS5jb250ZW50KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCmluZGV4IGQ0MDczNTE4NjQxMmQ4OTQ2NmY0
ZGE1YzhmM2M3ZWE2OTEzZWM3OWQuLjc3N2ZlMDZjNGEzMmQxMzAxYTRjMGYwZTQ3YzY0Nzc2OGZj
NTZjMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1
c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9t
LmNwcApAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgSlNIaXN0b3J5OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOCiAgICAgQmFz
ZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBt
b2RlKTsKIH0KIAotSlNWYWx1ZSBKU0hpc3Rvcnk6OnN0YXRlKEV4ZWNTdGF0ZSAqZXhlYykgY29u
c3QKK0pTVmFsdWUgSlNIaXN0b3J5OjpzdGF0ZShFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewog
ICAgIEhpc3RvcnkmIGhpc3RvcnkgPSBpbXBsKCk7CiAKQEAgLTExNCw2MyArMTE0LDYzIEBAIEpT
VmFsdWUgSlNIaXN0b3J5OjpzdGF0ZShFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0CiAgICAgICAgIHJl
dHVybiBjYWNoZWRWYWx1ZTsKIAogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNl
cmlhbGl6ZWQgPSBoaXN0b3J5LnN0YXRlKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBzZXJpYWxp
emVkID8gc2VyaWFsaXplZC0+ZGVzZXJpYWxpemUoZXhlYywgZ2xvYmFsT2JqZWN0KCksIDApIDog
anNOdWxsKCk7Ci0gICAgY29uc3RfY2FzdDxKU0hpc3RvcnkqPih0aGlzKS0+bV9zdGF0ZS5zZXQo
ZXhlYy0+dm0oKSwgdGhpcywgcmVzdWx0KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHNlcmlhbGl6
ZWQgPyBzZXJpYWxpemVkLT5kZXNlcmlhbGl6ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCAwKSA6
IGpzTnVsbCgpOworICAgIGNvbnN0X2Nhc3Q8SlNIaXN0b3J5Kj4odGhpcyktPm1fc3RhdGUuc2V0
KHN0YXRlLnZtKCksIHRoaXMsIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNW
YWx1ZSBKU0hpc3Rvcnk6OnB1c2hTdGF0ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTSGlz
dG9yeTo6cHVzaFN0YXRlKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKCFzaG91bGRBbGxv
d0FjY2Vzc1RvRnJhbWUoZXhlYywgaW1wbCgpLmZyYW1lKCkpKQorICAgIGlmICghc2hvdWxkQWxs
b3dBY2Nlc3NUb0ZyYW1lKCZzdGF0ZSwgaW1wbCgpLmZyYW1lKCkpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIAotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGhpc3Rv
cnlTdGF0ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmFyZ3Vt
ZW50KDApLCAwLCAwKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gaGlzdG9yeVN0YXRlID0gU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGUoJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwgMCwgMCk7CisgICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAg
IFN0cmluZyB0aXRsZSA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhl
YywgZXhlYy0+YXJndW1lbnQoMSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBTdHJpbmcgdGl0bGUgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKCZz
dGF0ZSwgc3RhdGUuYXJndW1lbnQoMSkpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIAorCiAgICAgU3RyaW5nIHVy
bDsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMikgewotICAgICAgICB1cmwgPSB2
YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50
KDIpKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChzdGF0ZS5h
cmd1bWVudENvdW50KCkgPiAyKSB7CisgICAgICAgIHVybCA9IHZhbHVlVG9TdHJpbmdXaXRoVW5k
ZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgyKSk7CisgICAgICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgIH0KIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGltcGwoKS5zdGF0ZU9i
amVjdEFkZGVkKGhpc3RvcnlTdGF0ZS5yZWxlYXNlKCksIHRpdGxlLCB1cmwsIEhpc3Rvcnk6OlN0
YXRlT2JqZWN0VHlwZTo6UHVzaCwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogCiAgICAgbV9zdGF0ZS5jbGVhcigp
OwogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNIaXN0b3J5Ojpy
ZXBsYWNlU3RhdGUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0hpc3Rvcnk6OnJlcGxhY2VT
dGF0ZShFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmICghc2hvdWxkQWxsb3dBY2Nlc3NUb0Zy
YW1lKGV4ZWMsIGltcGwoKS5mcmFtZSgpKSkKKyAgICBpZiAoIXNob3VsZEFsbG93QWNjZXNzVG9G
cmFtZSgmc3RhdGUsIGltcGwoKS5mcmFtZSgpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBoaXN0b3J5U3RhdGUgPSBT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgMCwg
MCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIFJlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IGhpc3RvcnlTdGF0ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
KCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksIDAsIDApOworICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBTdHJpbmcgdGl0
bGUgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFy
Z3VtZW50KDEpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgU3RyaW5nIHRp
dGxlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygmc3RhdGUsIHN0YXRl
LmFyZ3VtZW50KDEpKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICAKKwogICAgIFN0cmluZyB1cmw7Ci0gICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDIpIHsKLSAgICAgICAgdXJsID0gdmFsdWVUb1N0cmlu
Z1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgyKSk7Ci0gICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3Vu
dCgpID4gMikgeworICAgICAgICB1cmwgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVs
bENoZWNrKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMikpOworICAgICAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpbXBsKCkuc3RhdGVPYmplY3RBZGRlZCho
aXN0b3J5U3RhdGUucmVsZWFzZSgpLCB0aXRsZSwgdXJsLCBIaXN0b3J5OjpTdGF0ZU9iamVjdFR5
cGU6OlJlcGxhY2UsIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHNl
dERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKIAogICAgIG1fc3RhdGUuY2xlYXIoKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJEYXRhYmFzZUN1c3RvbS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcApp
bmRleCBhMjVkY2E5OTE4YzNhZTJlZTc2YTE4MDVhMjBkMGIxMGJkYWYxOWQzLi5lNTM1MDhmMWI2
NWQzYWFhYzg2Y2MzZTU0OTBjMGE5M2U4M2E0MGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcApAQCAtNDQsNDAgKzQ0LDQwIEBA
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSBK
U0lEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0g
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVybiBleGVjLT52
bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4
ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJu
IHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcigmc3RhdGUpKTsKIAotICAgIFN0cmluZyBuYW1lID0gZXhlYy0+YXJndW1lbnQoMCku
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBTdHJpbmcgbmFtZSA9IHN0YXRlLmFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSkt
PnZhbHVlKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIEpTVmFsdWUgb3B0aW9uc1ZhbHVlID0gZXhlYy0+
YXJndW1lbnQoMSk7CisgICAgSlNWYWx1ZSBvcHRpb25zVmFsdWUgPSBzdGF0ZS5hcmd1bWVudCgx
KTsKICAgICBpZiAoIW9wdGlvbnNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICFvcHRpb25z
VmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMsICJO
b3QgYW4gb2JqZWN0LiIpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCAi
Tm90IGFuIG9iamVjdC4iKTsKIAogICAgIElEQktleVBhdGgga2V5UGF0aDsKICAgICBib29sIGF1
dG9JbmNyZW1lbnQgPSBmYWxzZTsKICAgICBpZiAoIW9wdGlvbnNWYWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKSB7Ci0gICAgICAgIEpTVmFsdWUga2V5UGF0aFZhbHVlID0gb3B0aW9uc1ZhbHVlLmdl
dChleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJrZXlQYXRoIikpOwotICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIEpTVmFsdWUga2V5UGF0aFZhbHVl
ID0gb3B0aW9uc1ZhbHVlLmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LCAia2V5UGF0aCIpKTsKKyAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgaWYgKCFrZXlQYXRoVmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICAgICAga2V5UGF0aCA9IGlkYktleVBhdGhG
cm9tVmFsdWUoZXhlYywga2V5UGF0aFZhbHVlKTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgICAgIGtleVBhdGggPSBpZGJLZXlQYXRoRnJvbVZhbHVlKCZz
dGF0ZSwga2V5UGF0aFZhbHVlKTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGF1dG9JbmNyZW1lbnQgPSBvcHRpb25zVmFsdWUuZ2V0KGV4ZWMsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoZXhlYywgImF1dG9JbmNyZW1lbnQiKSkudG9Cb29sZWFuKGV4ZWMpOwotICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGF1dG9JbmNyZW1lbnQgPSBv
cHRpb25zVmFsdWUuZ2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJh
dXRvSW5jcmVtZW50IikpLnRvQm9vbGVhbigmc3RhdGUpOworICAgICAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0KCksIGltcGwoKS5jcmVhdGVPYmplY3RTdG9yZShuYW1lLCBrZXlQYXRo
LCBhdXRvSW5jcmVtZW50LCBlYykuZ2V0KCkpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBl
Yyk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIGlt
cGwoKS5jcmVhdGVPYmplY3RTdG9yZShuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50LCBlYyku
Z2V0KCkpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9i
amVjdFN0b3JlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2Jq
ZWN0U3RvcmVDdXN0b20uY3BwCmluZGV4IDg1MDdlNDk0YTM3NmRiNzk5ZTU2ZmJlZThiZDFjYzZk
OWQxNjc4MjguLjAxMjg4YzZlYWNhZjc1Nzg0MzRjNDEyMTg1ZDA1NGQ1NjgyOGI5ZGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0
b20uY3BwCkBAIC00Myw0MiArNDMsNDIgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTSURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgoRXhl
Y1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0g
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQotICAg
ICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVSZWZlcmVu
Y2VFcnJvcihleGVjLCAiSURCT2JqZWN0U3RvcmUgc2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0IGlz
IHVuYXZhaWxhYmxlIikpOworICAgICAgICByZXR1cm4gc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlv
bigmc3RhdGUsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKCZzdGF0ZSwgIklEQk9iamVjdFN0b3JlIHNj
cmlwdCAmc3RhdGV1dGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIikpOwogCi0gICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93
RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAg
ICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpIDwgMikKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZt
KCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigm
c3RhdGUpKTsKIAotICAgIFN0cmluZyBuYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBT
dHJpbmcgbmFtZSA9IHN0YXRlLmFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZz
dGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIAotICAgIElEQktleVBhdGgga2V5UGF0aCA9IGlkYktleVBhdGhGcm9tVmFs
dWUoZXhlYywgZXhlYy0+YXJndW1lbnQoMSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBJREJLZXlQYXRoIGtleVBhdGggPSBpZGJLZXlQYXRoRnJvbVZhbHVlKCZzdGF0ZSwg
c3RhdGUuYXJndW1lbnQoMSkpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBKU1ZhbHVlIG9wdGlvbnNWYWx1ZSA9IGV4
ZWMtPmFyZ3VtZW50KDIpOworICAgIEpTVmFsdWUgb3B0aW9uc1ZhbHVlID0gc3RhdGUuYXJndW1l
bnQoMik7CiAgICAgaWYgKCFvcHRpb25zVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSAmJiAhb3B0
aW9uc1ZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVj
LCAiTm90IGFuIG9iamVjdC4iKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgIk5vdCBhbiBvYmplY3QuIik7CiAKICAgICBib29sIHVuaXF1ZSA9IGZhbHNlOwogICAgIGJv
b2wgbXVsdGlFbnRyeSA9IGZhbHNlOwogICAgIGlmICghb3B0aW9uc1ZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpIHsKLSAgICAgICAgdW5pcXVlID0gb3B0aW9uc1ZhbHVlLmdldChleGVjLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJ1bmlxdWUiKSkudG9Cb29sZWFuKGV4ZWMpOwotICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHVuaXF1ZSA9IG9wdGlvbnNW
YWx1ZS5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInVuaXF1ZSIp
KS50b0Jvb2xlYW4oJnN0YXRlKTsKKyAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICAgICAgbXVsdGlFbnRyeSA9
IG9wdGlvbnNWYWx1ZS5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAibXVs
dGlFbnRyeSIpKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgbXVsdGlFbnRyeSA9IG9wdGlvbnNWYWx1ZS5nZXQoJnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgIm11bHRpRW50cnkiKSkudG9Cb29sZWFuKCZzdGF0
ZSk7CisgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgpLmNyZWF0
ZUluZGV4KGNvbnRleHQsIG5hbWUsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSwgZWMpLmdl
dCgpKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBpbXBsKCkuY3JlYXRlSW5kZXgoY29udGV4
dCwgbmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5LCBlYykuZ2V0KCkpOworICAgIHNl
dERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9z
dEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250
ZW5kSG9zdEN1c3RvbS5jcHAKaW5kZXggODdiYjI3NzRmMjZlYjk2M2U5NWJhYzIzOTNlODdkM2Uw
ZTJhN2YzMS4uZTI2YmJlNzhkOWZiYmM0OTIwY2UxZWZjYjRjMzUwZmQ3YTEzMjRiOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RD
dXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yRnJv
bnRlbmRIb3N0Q3VzdG9tLmNwcApAQCAtOTEsMTYgKzkxLDE2IEBAIHN0YXRpYyB2b2lkIHBvcHVs
YXRlQ29udGV4dE1lbnVJdGVtcyhFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCBDb250
ZXh0TWVuCiB9CiAjZW5kaWYKIAotSlNWYWx1ZSBKU0luc3BlY3RvckZyb250ZW5kSG9zdDo6c2hv
d0NvbnRleHRNZW51KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNJbnNwZWN0b3JGcm9udGVu
ZEhvc3Q6OnNob3dDb250ZXh0TWVudShFeGVjU3RhdGUmIHN0YXRlKQogewogI2lmIEVOQUJMRShD
T05URVhUX01FTlVTKQotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAyKQorICAgIGlm
IChzdGF0ZS5hcmd1bWVudENvdW50KCkgPCAyKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKLSAgICBFdmVudCogZXZlbnQgPSBKU0V2ZW50Ojp0b1dyYXBwZWQoZXhlYy0+YXJndW1lbnQo
MCkpOworICAgIEV2ZW50KiBldmVudCA9IEpTRXZlbnQ6OnRvV3JhcHBlZChzdGF0ZS5hcmd1bWVu
dCgwKSk7CiAKLSAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkoZXhlYy0+YXJndW1lbnQoMSkp
OworICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheShzdGF0ZS5hcmd1bWVudCgxKSk7CiAgICAg
Q29udGV4dE1lbnUgbWVudTsKLSAgICBwb3B1bGF0ZUNvbnRleHRNZW51SXRlbXMoZXhlYywgYXJy
YXksIG1lbnUpOworICAgIHBvcHVsYXRlQ29udGV4dE1lbnVJdGVtcygmc3RhdGUsIGFycmF5LCBt
ZW51KTsKIAogI2lmICFVU0UoQ1JPU1NfUExBVEZPUk1fQ09OVEVYVF9NRU5VUykKICAgICBWZWN0
b3I8Q29udGV4dE1lbnVJdGVtPiBpdGVtcyA9IGNvbnRleHRNZW51SXRlbVZlY3RvcihtZW51LnBs
YXRmb3JtRGVzY3JpcHRpb24oKSk7CkBAIC0xMDksNyArMTA5LDcgQEAgSlNWYWx1ZSBKU0luc3Bl
Y3RvckZyb250ZW5kSG9zdDo6c2hvd0NvbnRleHRNZW51KEV4ZWNTdGF0ZSogZXhlYykKICNlbmRp
ZgogICAgIGltcGwoKS5zaG93Q29udGV4dE1lbnUoZXZlbnQsIGl0ZW1zKTsKICNlbHNlCi0gICAg
VU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAjZW5kaWYKICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNMb2NhdGlvbkN1c3RvbS5jcHAKaW5kZXggMmE2OGJiNWE5OTI5NzQ1MDFjYmQ0YjZjOGZj
ZDdlZTg1NTU2ZDllMi4uMTMxZTI4NzBiZGI1OWQ2MDUzNmE5MTBhNzcxZGQ1MDc3MmMwNmU0OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAK
QEAgLTEzMiwxMyArMTMyLDEzIEBAIGJvb2wgSlNMb2NhdGlvbjo6ZGVmaW5lT3duUHJvcGVydHko
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hCiAgICAgcmV0dXJu
IEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CiB9CiAKLUpTVmFsdWUgSlNMb2NhdGlvbjo6dG9TdHJp
bmdGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTTG9jYXRpb246OnRvU3RyaW5n
RnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCku
ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lIHx8ICFzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoZXhl
YywgZnJhbWUpKQorICAgIGlmICghZnJhbWUgfHwgIXNob3VsZEFsbG93QWNjZXNzVG9GcmFtZSgm
c3RhdGUsIGZyYW1lKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICByZXR1
cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgaW1wbCgpLnRvU3RyaW5nKCkpOworICAgIHJldHVy
biBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGltcGwoKS50b1N0cmluZygpKTsKIH0KIAogYm9v
bCBKU0xvY2F0aW9uUHJvdG90eXBlOjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lZGlhU291cmNlU3RhdGVzQ3VzdG9t
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVkaWFTb3VyY2VTdGF0ZXNDdXN0
b20uY3BwCmluZGV4IGNhMzRhYzEwNjA2ZmY5MDVlMTRjOWY0NjFhNDU2YTIzM2E5NzIyZjkuLjgw
MThiMjYzM2I3OGU5Y2UxZGUyOTEzM2Q5ZDk0ZTY3MDJlYTM1MWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVkaWFTb3VyY2VTdGF0ZXNDdXN0b20uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVkaWFTb3VyY2VTdGF0ZXNDdXN0b20uY3Bw
CkBAIC0zNSw3ICszNSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotSlNWYWx1ZSBKU01lZGlhU291cmNlU3RhdGVzOjp3aWR0aChFeGVjU3RhdGUqKSBj
b25zdAorSlNWYWx1ZSBKU01lZGlhU291cmNlU3RhdGVzOjp3aWR0aChFeGVjU3RhdGUmKSBjb25z
dAogewogICAgIGlmICghaW1wbCgpLmhhc1ZpZGVvU291cmNlKCkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwpAQCAtNDMsNyArNDMsNyBAQCBKU1ZhbHVlIEpTTWVkaWFTb3VyY2VTdGF0
ZXM6OndpZHRoKEV4ZWNTdGF0ZSopIGNvbnN0CiAgICAgcmV0dXJuIGpzTnVtYmVyKGltcGwoKS53
aWR0aCgpKTsKIH0KIAotSlNWYWx1ZSBKU01lZGlhU291cmNlU3RhdGVzOjpoZWlnaHQoRXhlY1N0
YXRlKikgY29uc3QKK0pTVmFsdWUgSlNNZWRpYVNvdXJjZVN0YXRlczo6aGVpZ2h0KEV4ZWNTdGF0
ZSYpIGNvbnN0CiB7CiAgICAgaWYgKCFpbXBsKCkuaGFzVmlkZW9Tb3VyY2UoKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC01MSw3ICs1MSw3IEBAIEpTVmFsdWUgSlNNZWRpYVNv
dXJjZVN0YXRlczo6aGVpZ2h0KEV4ZWNTdGF0ZSopIGNvbnN0CiAgICAgcmV0dXJuIGpzTnVtYmVy
KGltcGwoKS5oZWlnaHQoKSk7CiB9CiAKLUpTVmFsdWUgSlNNZWRpYVNvdXJjZVN0YXRlczo6ZnJh
bWVSYXRlKEV4ZWNTdGF0ZSopIGNvbnN0CitKU1ZhbHVlIEpTTWVkaWFTb3VyY2VTdGF0ZXM6OmZy
YW1lUmF0ZShFeGVjU3RhdGUmKSBjb25zdAogewogICAgIGlmICghaW1wbCgpLmhhc1ZpZGVvU291
cmNlKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtNTksNyArNTksNyBAQCBK
U1ZhbHVlIEpTTWVkaWFTb3VyY2VTdGF0ZXM6OmZyYW1lUmF0ZShFeGVjU3RhdGUqKSBjb25zdAog
ICAgIHJldHVybiBqc051bWJlcihpbXBsKCkuZnJhbWVSYXRlKCkpOwogfQogCi1KU1ZhbHVlIEpT
TWVkaWFTb3VyY2VTdGF0ZXM6OmFzcGVjdFJhdGlvKEV4ZWNTdGF0ZSopIGNvbnN0CitKU1ZhbHVl
IEpTTWVkaWFTb3VyY2VTdGF0ZXM6OmFzcGVjdFJhdGlvKEV4ZWNTdGF0ZSYpIGNvbnN0CiB7CiAg
ICAgaWYgKCFpbXBsKCkuaGFzVmlkZW9Tb3VyY2UoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CkBAIC02Nyw3ICs2Nyw3IEBAIEpTVmFsdWUgSlNNZWRpYVNvdXJjZVN0YXRlczo6YXNw
ZWN0UmF0aW8oRXhlY1N0YXRlKikgY29uc3QKICAgICByZXR1cm4ganNOdW1iZXIoaW1wbCgpLmFz
cGVjdFJhdGlvKCkpOwogfQogCi1KU1ZhbHVlIEpTTWVkaWFTb3VyY2VTdGF0ZXM6OmZhY2luZ01v
ZGUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU01lZGlhU291cmNlU3RhdGVzOjpm
YWNpbmdNb2RlKEV4ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0CiB7CiAgICAgaWYgKCFpbXBsKCkuaGFz
VmlkZW9Tb3VyY2UoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC03NiwxMCAr
NzYsMTAgQEAgSlNWYWx1ZSBKU01lZGlhU291cmNlU3RhdGVzOjpmYWNpbmdNb2RlKEV4ZWNTdGF0
ZSogZXhlYykgY29uc3QKICAgICBpZiAobW9kZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIAotICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBp
bXBsKCkuZmFjaW5nTW9kZSgpKTsKKyAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRl
LCBpbXBsKCkuZmFjaW5nTW9kZSgpKTsKIH0KIAotSlNWYWx1ZSBKU01lZGlhU291cmNlU3RhdGVz
Ojp2b2x1bWUoRXhlY1N0YXRlKikgY29uc3QKK0pTVmFsdWUgSlNNZWRpYVNvdXJjZVN0YXRlczo6
dm9sdW1lKEV4ZWNTdGF0ZSYpIGNvbnN0CiB7CiAgICAgaWYgKGltcGwoKS5oYXNWaWRlb1NvdXJj
ZSgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAppbmRleCBiZTY0NWMwZWI4
MjU4Zjc4NmRkOTQ5MDZlOTQxOTM1OTliNGM1MDA3Li5jYjg3ZDg5NTFmOTczNGU5YWQwODNkMDNj
OTg2MzRjZGZiMDg2ZWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U01lc3NhZ2VFdmVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCkBAIC00NCwxMSArNDQsMTEgQEAgdXNpbmcgbmFtZXNw
YWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTTWVzc2FnZUV2ZW50
OjpkYXRhKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgSlNNZXNzYWdlRXZlbnQ6OmRh
dGEoRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1
ZSA9IG1fZGF0YS5nZXQoKSkgewogICAgICAgICAvLyBXZSBjYW5ub3QgdXNlIGEgY2FjaGVkIG9i
amVjdCBpZiB3ZSBhcmUgaW4gYSBkaWZmZXJlbnQgd29ybGQgdGhhbiB0aGUgb25lIGl0IHdhcyBj
cmVhdGVkIGluLgotICAgICAgICBpZiAoIWNhY2hlZFZhbHVlLmlzT2JqZWN0KCkgfHwgJndvcmxk
Rm9yRE9NT2JqZWN0KGNhY2hlZFZhbHVlLmdldE9iamVjdCgpKSA9PSAmY3VycmVudFdvcmxkKGV4
ZWMpKQorICAgICAgICBpZiAoIWNhY2hlZFZhbHVlLmlzT2JqZWN0KCkgfHwgJndvcmxkRm9yRE9N
T2JqZWN0KGNhY2hlZFZhbHVlLmdldE9iamVjdCgpKSA9PSAmY3VycmVudFdvcmxkKCZzdGF0ZSkp
CiAgICAgICAgICAgICByZXR1cm4gY2FjaGVkVmFsdWU7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIH0KQEAgLTY0LDEwICs2NCwxMCBAQCBKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50
OjpkYXRhKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICAgICAgICAgIEpTVmFsdWUgZGF0YVZh
bHVlID0gc2NyaXB0VmFsdWUuanNWYWx1ZSgpOwogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBt
YWtlIHN1cmUgTWVzc2FnZUV2ZW50cyBkbyBub3QgbGVhayBvYmplY3RzIGluIHRoZWlyIHN0YXRl
IHByb3BlcnR5IGFjcm9zcyBpc29sYXRlZCBET00gd29ybGRzLgogICAgICAgICAgICAgLy8gSWRl
YWxseSwgd2Ugd291bGQgY2hlY2sgdGhhdCB0aGUgd29ybGRzIGhhdmUgZGlmZmVyZW50IHByaXZp
bGVnZXMgYnV0IHRoYXQncyBub3QgcG9zc2libGUgeWV0LgotICAgICAgICAgICAgaWYgKGRhdGFW
YWx1ZS5pc09iamVjdCgpICYmICZ3b3JsZEZvckRPTU9iamVjdChkYXRhVmFsdWUuZ2V0T2JqZWN0
KCkpICE9ICZjdXJyZW50V29ybGQoZXhlYykpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBldmVudC50cnlTZXJpYWxpemVE
YXRhKGV4ZWMpOworICAgICAgICAgICAgaWYgKGRhdGFWYWx1ZS5pc09iamVjdCgpICYmICZ3b3Js
ZEZvckRPTU9iamVjdChkYXRhVmFsdWUuZ2V0T2JqZWN0KCkpICE9ICZjdXJyZW50V29ybGQoJnN0
YXRlKSkgeworICAgICAgICAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNl
cmlhbGl6ZWRWYWx1ZSA9IGV2ZW50LnRyeVNlcmlhbGl6ZURhdGEoJnN0YXRlKTsKICAgICAgICAg
ICAgICAgICBpZiAoc2VyaWFsaXplZFZhbHVlKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSBzZXJpYWxpemVkVmFsdWUtPmRlc2VyaWFsaXplKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBudWxs
cHRyKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VyaWFsaXplZFZhbHVlLT5kZXNl
cmlhbGl6ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBudWxscHRyKTsKICAgICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpzTnVsbCgpOwogICAgICAgICAg
ICAgfSBlbHNlCkBAIC04MCw2NCArODAsNjQgQEAgSlNWYWx1ZSBKU01lc3NhZ2VFdmVudDo6ZGF0
YShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgICAgIGlmIChSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBldmVudC5kYXRhQXNTZXJpYWxpemVkU2NyaXB0
VmFsdWUoKSkgewogICAgICAgICAgICAgTWVzc2FnZVBvcnRBcnJheSBwb3J0cyA9IGltcGwoKS5w
b3J0cygpOwogICAgICAgICAgICAgLy8gRklYTUU6IFdoeSBkb2VzIHRoaXMgc3VwcHJlc3MgZXhj
ZXB0aW9ucz8KLSAgICAgICAgICAgIHJlc3VsdCA9IHNlcmlhbGl6ZWRWYWx1ZS0+ZGVzZXJpYWxp
emUoZXhlYywgZ2xvYmFsT2JqZWN0KCksICZwb3J0cywgTm9uVGhyb3dpbmcpOworICAgICAgICAg
ICAgcmVzdWx0ID0gc2VyaWFsaXplZFZhbHVlLT5kZXNlcmlhbGl6ZSgmc3RhdGUsIGdsb2JhbE9i
amVjdCgpLCAmcG9ydHMsIE5vblRocm93aW5nKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICByZXN1bHQgPSBqc051bGwoKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE1lc3NhZ2VF
dmVudDo6RGF0YVR5cGVTdHJpbmc6Ci0gICAgICAgIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hl
KGV4ZWMsIGV2ZW50LmRhdGFBc1N0cmluZygpKTsKKyAgICAgICAgcmVzdWx0ID0ganNTdHJpbmdX
aXRoQ2FjaGUoJnN0YXRlLCBldmVudC5kYXRhQXNTdHJpbmcoKSk7CiAgICAgICAgIGJyZWFrOwog
CiAgICAgY2FzZSBNZXNzYWdlRXZlbnQ6OkRhdGFUeXBlQmxvYjoKLSAgICAgICAgcmVzdWx0ID0g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgZXZlbnQuZGF0YUFzQmxvYigpKTsKKyAgICAgICAg
cmVzdWx0ID0gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBldmVudC5kYXRhQXNCbG9iKCkp
OwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTWVzc2FnZUV2ZW50OjpEYXRhVHlwZUFycmF5
QnVmZmVyOgotICAgICAgICByZXN1bHQgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBldmVu
dC5kYXRhQXNBcnJheUJ1ZmZlcigpKTsKKyAgICAgICAgcmVzdWx0ID0gdG9KUygmc3RhdGUsIGds
b2JhbE9iamVjdCgpLCBldmVudC5kYXRhQXNBcnJheUJ1ZmZlcigpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCiAgICAgLy8gU2F2ZSB0aGUgcmVzdWx0IHNvIHdlIGRvbid0IGhhdmUgdG8gZGVz
ZXJpYWxpemUgdGhlIHZhbHVlIGFnYWluLgotICAgIGNvbnN0X2Nhc3Q8SlNNZXNzYWdlRXZlbnQq
Pih0aGlzKS0+bV9kYXRhLnNldChleGVjLT52bSgpLCB0aGlzLCByZXN1bHQpOworICAgIGNvbnN0
X2Nhc3Q8SlNNZXNzYWdlRXZlbnQqPih0aGlzKS0+bV9kYXRhLnNldChzdGF0ZS52bSgpLCB0aGlz
LCByZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBKU0M6OkpTVmFsdWUg
aGFuZGxlSW5pdE1lc3NhZ2VFdmVudChKU01lc3NhZ2VFdmVudCoganNFdmVudCwgSlNDOjpFeGVj
U3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNDOjpKU1ZhbHVlIGhhbmRsZUluaXRNZXNzYWdlRXZlbnQo
SlNNZXNzYWdlRXZlbnQqIGpzRXZlbnQsIEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBj
b25zdCBTdHJpbmcmIHR5cGVBcmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7Ci0gICAgYm9vbCBjYW5CdWJibGVBcmcgPSBleGVjLT5hcmd1bWVudCgxKS50
b0Jvb2xlYW4oZXhlYyk7Ci0gICAgYm9vbCBjYW5jZWxhYmxlQXJnID0gZXhlYy0+YXJndW1lbnQo
MikudG9Cb29sZWFuKGV4ZWMpOwotICAgIGNvbnN0IFN0cmluZyBvcmlnaW5BcmcgPSBleGVjLT5h
cmd1bWVudCg0KS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgY29uc3QgU3RyaW5n
IGxhc3RFdmVudElkQXJnID0gZXhlYy0+YXJndW1lbnQoNSkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwotICAgIERPTVdpbmRvdyogc291cmNlQXJnID0gSlNET01XaW5kb3c6OnRvV3JhcHBl
ZChleGVjLT5hcmd1bWVudCg2KSk7CisgICAgY29uc3QgU3RyaW5nJiB0eXBlQXJnID0gc3RhdGUu
YXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKKyAgICBib29sIGNh
bkJ1YmJsZUFyZyA9IHN0YXRlLmFyZ3VtZW50KDEpLnRvQm9vbGVhbigmc3RhdGUpOworICAgIGJv
b2wgY2FuY2VsYWJsZUFyZyA9IHN0YXRlLmFyZ3VtZW50KDIpLnRvQm9vbGVhbigmc3RhdGUpOwor
ICAgIGNvbnN0IFN0cmluZyBvcmlnaW5BcmcgPSBzdGF0ZS5hcmd1bWVudCg0KS50b1N0cmluZygm
c3RhdGUpLT52YWx1ZSgmc3RhdGUpOworICAgIGNvbnN0IFN0cmluZyBsYXN0RXZlbnRJZEFyZyA9
IHN0YXRlLmFyZ3VtZW50KDUpLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAg
RE9NV2luZG93KiBzb3VyY2VBcmcgPSBKU0RPTVdpbmRvdzo6dG9XcmFwcGVkKHN0YXRlLmFyZ3Vt
ZW50KDYpKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZVBvcnRBcnJheT4gbWVzc2FnZVBv
cnRzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckFycmF5PiBhcnJheUJ1ZmZlcnM7
Ci0gICAgaWYgKCFleGVjLT5hcmd1bWVudCg3KS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAg
aWYgKCFzdGF0ZS5hcmd1bWVudCg3KS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAgIG1l
c3NhZ2VQb3J0cyA9IHN0ZDo6bWFrZV91bmlxdWU8TWVzc2FnZVBvcnRBcnJheT4oKTsKICAgICAg
ICAgYXJyYXlCdWZmZXJzID0gc3RkOjptYWtlX3VuaXF1ZTxBcnJheUJ1ZmZlckFycmF5PigpOwot
ICAgICAgICBmaWxsTWVzc2FnZVBvcnRBcnJheShleGVjLCBleGVjLT5hcmd1bWVudCg3KSwgKm1l
c3NhZ2VQb3J0cywgKmFycmF5QnVmZmVycyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgZmlsbE1lc3NhZ2VQb3J0QXJyYXkoc3RhdGUsIHN0YXRlLmFyZ3VtZW50
KDcpLCAqbWVzc2FnZVBvcnRzLCAqYXJyYXlCdWZmZXJzKTsKKyAgICAgICAgaWYgKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQot
ICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRhdGFBcmcgPSBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZShleGVjLT52bSgpLCBleGVjLT5hcmd1bWVudCgzKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRhdGFBcmcgPSBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZShzdGF0ZS52bSgpLCBzdGF0ZS5hcmd1bWVudCgzKSk7CisgICAgaWYg
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAog
ICAgIE1lc3NhZ2VFdmVudCYgZXZlbnQgPSBqc0V2ZW50LT5pbXBsKCk7CiAgICAgZXZlbnQuaW5p
dE1lc3NhZ2VFdmVudCh0eXBlQXJnLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIGRhdGFB
cmcsIG9yaWdpbkFyZywgbGFzdEV2ZW50SWRBcmcsIHNvdXJjZUFyZywgV1RGOjptb3ZlKG1lc3Nh
Z2VQb3J0cykpOwotICAgIGpzRXZlbnQtPm1fZGF0YS5zZXQoZXhlYy0+dm0oKSwganNFdmVudCwg
ZGF0YUFyZy5qc1ZhbHVlKCkpOworICAgIGpzRXZlbnQtPm1fZGF0YS5zZXQoc3RhdGUudm0oKSwg
anNFdmVudCwgZGF0YUFyZy5qc1ZhbHVlKCkpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
fQogCi1KU0M6OkpTVmFsdWUgSlNNZXNzYWdlRXZlbnQ6OmluaXRNZXNzYWdlRXZlbnQoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMpCitKU0M6OkpTVmFsdWUgSlNNZXNzYWdlRXZlbnQ6OmluaXRNZXNzYWdl
RXZlbnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIHJldHVybiBoYW5kbGVJbml0TWVz
c2FnZUV2ZW50KHRoaXMsIGV4ZWMpOworICAgIHJldHVybiBoYW5kbGVJbml0TWVzc2FnZUV2ZW50
KHRoaXMsIHN0YXRlKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50Ojp3ZWJraXRJ
bml0TWVzc2FnZUV2ZW50KEpTQzo6RXhlY1N0YXRlKiBleGVjKQorSlNDOjpKU1ZhbHVlIEpTTWVz
c2FnZUV2ZW50Ojp3ZWJraXRJbml0TWVzc2FnZUV2ZW50KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkK
IHsKLSAgICByZXR1cm4gaGFuZGxlSW5pdE1lc3NhZ2VFdmVudCh0aGlzLCBleGVjKTsKKyAgICBy
ZXR1cm4gaGFuZGxlSW5pdE1lc3NhZ2VFdmVudCh0aGlzLCBzdGF0ZSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TWVzc2FnZVBvcnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNz
YWdlUG9ydEN1c3RvbS5jcHAKaW5kZXggOThhNzRiNTE5MWIyNGM1MmEwOWVmOWVlMjhkMDczNzIw
NTFiMzFiZi4uMjM5ZjQ3YWZkNmRhNWViZTUxOTBlN2NiYjU5M2UzM2JlYmY5MWUxZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAK
QEAgLTUyLDEyICs1MiwxMiBAQCB2b2lkIEpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3QocG9ydCk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU01lc3NhZ2VQb3J0Ojpwb3N0TWVzc2FnZShK
U0M6OkV4ZWNTdGF0ZSogZXhlYykKK0pTQzo6SlNWYWx1ZSBKU01lc3NhZ2VQb3J0Ojpwb3N0TWVz
c2FnZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIGhhbmRsZVBvc3RNZXNz
YWdlKGV4ZWMsICZpbXBsKCkpOworICAgIHJldHVybiBoYW5kbGVQb3N0TWVzc2FnZShzdGF0ZSwg
JmltcGwoKSk7CiB9CiAKLXZvaWQgZmlsbE1lc3NhZ2VQb3J0QXJyYXkoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgTWVzc2FnZVBvcnRBcnJheSYgcG9ydEFycmF5LCBB
cnJheUJ1ZmZlckFycmF5JiBhcnJheUJ1ZmZlcnMpCit2b2lkIGZpbGxNZXNzYWdlUG9ydEFycmF5
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBNZXNzYWdlUG9ydEFy
cmF5JiBwb3J0QXJyYXksIEFycmF5QnVmZmVyQXJyYXkmIGFycmF5QnVmZmVycykKIHsKICAgICAv
LyBDb252ZXJ0IGZyb20gdGhlIHBhc3NlZC1pbiBKUyBhcnJheS1saWtlIG9iamVjdCB0byBhIE1l
c3NhZ2VQb3J0QXJyYXkuCiAgICAgLy8gQWxzbyB2YWxpZGF0ZXMgdGhlIGVsZW1lbnRzIHBlciBz
ZWN0aW9ucyA0LjEuMTMgYW5kIDQuMS4xNSBvZiB0aGUgV2ViSURMIHNwZWMgYW5kIHNlY3Rpb24g
OC4zLjMgb2YgdGhlIEhUTUw1IHNwZWMuCkBAIC02OSwxNyArNjksMTcgQEAgdm9pZCBmaWxsTWVz
c2FnZVBvcnRBcnJheShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlLCBN
ZXNzYWdlUG9ydEEKIAogICAgIC8vIFZhbGlkYXRpb24gb2Ygc2VxdWVuY2UgdHlwZXMsIHBlciBX
ZWJJREwgc3BlYyA0LjEuMTMuCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKLSAgICBKU09iamVj
dCogb2JqZWN0ID0gdG9KU1NlcXVlbmNlKGV4ZWMsIHZhbHVlLCBsZW5ndGgpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBKU09iamVjdCogb2JqZWN0ID0gdG9KU1NlcXVlbmNl
KCZzdGF0ZSwgdmFsdWUsIGxlbmd0aCk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwIDsgaSA8IGxlbmd0aDsg
KytpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBpKTsKLSAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
b2JqZWN0LT5nZXQoJnN0YXRlLCBpKTsKKyAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAvLyBWYWxpZGF0aW9uIG9mIG5vbi1udWxs
IG9iamVjdHMsIHBlciBIVE1MNSBzcGVjIDEwLjMuMy4KICAgICAgICAgaWYgKHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBJTlZB
TElEX1NUQVRFX0VSUik7CisgICAgICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBJTlZB
TElEX1NUQVRFX0VSUik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtODgs
NyArODgsNyBAQCB2b2lkIGZpbGxNZXNzYWdlUG9ydEFycmF5KEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIE1lc3NhZ2VQb3J0QQogICAgICAgICBpZiAocG9ydCkgewog
ICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZSBwb3J0cy4KICAgICAgICAgICAgIGlm
IChwb3J0QXJyYXkuY29udGFpbnMocG9ydCkpIHsKLSAgICAgICAgICAgICAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgSU5WQUxJRF9TVEFURV9FUlIpOworICAgICAgICAgICAgICAgIHNldERPTUV4
Y2VwdGlvbigmc3RhdGUsIElOVkFMSURfU1RBVEVfRVJSKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBwb3J0QXJyYXkuYXBwZW5kKHBvcnQucmVs
ZWFzZSgpKTsKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBmaWxsTWVzc2FnZVBvcnRBcnJheShKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlLCBNZXNzYWdlUG9ydEEKICAgICAg
ICAgICAgIGlmIChhcnJheUJ1ZmZlcikKICAgICAgICAgICAgICAgICBhcnJheUJ1ZmZlcnMuYXBw
ZW5kKGFycmF5QnVmZmVyKTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHRo
cm93VHlwZUVycm9yKGV4ZWMpOworICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9t
LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmgKaW5k
ZXggZTQ1MmJhMWRlZDc5MzRiYTIxOWZkNmNkOWFkOTljNzEzNDY3ZmZkZS4uN2JkOWRmMzUxNWY5
MzUyMzVjMjkwYThlMzRiZTUyZDNmMjBlNWQzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uaApAQCAtNDMsMjIgKzQzLDIyIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggcHVsbHMgdGhlIHZh
bHVlcyBvdXQgb2YgYSBKUyBzZXF1ZW5jZSBhbmQgaW50byBhIE1lc3NhZ2VQb3J0QXJyYXkuCiAg
ICAgLy8gQWxzbyB2YWxpZGF0ZXMgdGhlIGVsZW1lbnRzIHBlciBzZWN0aW9ucyA0LjEuMTMgYW5k
IDQuMS4xNSBvZiB0aGUgV2ViSURMIHNwZWMgYW5kIHNlY3Rpb24gOC4zLjMgb2YgdGhlIEhUTUw1
IHNwZWMuCiAgICAgLy8gTWF5IGdlbmVyYXRlIGFuIGV4Y2VwdGlvbiB2aWEgdGhlIHBhc3NlZCBF
eGVjU3RhdGUuCi0gICAgdm9pZCBmaWxsTWVzc2FnZVBvcnRBcnJheShKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSwgTWVzc2FnZVBvcnRBcnJheSYsIEFycmF5QnVmZmVyQXJyYXkmKTsKKyAg
ICB2b2lkIGZpbGxNZXNzYWdlUG9ydEFycmF5KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
LCBNZXNzYWdlUG9ydEFycmF5JiwgQXJyYXlCdWZmZXJBcnJheSYpOwogCiAgICAgLy8gSGVscGVy
IGZ1bmN0aW9uIHRvIGNvbnZlcnQgZnJvbSBKUyBwb3N0TWVzc2FnZSBhcmd1bWVudHMgdG8gV2Vi
Q29yZSBwb3N0TWVzc2FnZSBhcmd1bWVudHMuCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0g
ICAgaW5saW5lIEpTQzo6SlNWYWx1ZSBoYW5kbGVQb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgVCogaW1wbCkKKyAgICBpbmxpbmUgSlNDOjpKU1ZhbHVlIGhhbmRsZVBvc3RNZXNzYWdl
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVCogaW1wbCkKICAgICB7CiAgICAgICAgIE1lc3NhZ2VQ
b3J0QXJyYXkgcG9ydEFycmF5OwogICAgICAgICBBcnJheUJ1ZmZlckFycmF5IGFycmF5QnVmZmVy
QXJyYXk7Ci0gICAgICAgIGZpbGxNZXNzYWdlUG9ydEFycmF5KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50
KDEpLCBwb3J0QXJyYXksIGFycmF5QnVmZmVyQXJyYXkpOwotICAgICAgICBSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBtZXNzYWdlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUo
ZXhlYywgZXhlYy0+YXJndW1lbnQoMCksICZwb3J0QXJyYXksICZhcnJheUJ1ZmZlckFycmF5KTsK
LSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBmaWxsTWVzc2FnZVBv
cnRBcnJheShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMSksIHBvcnRBcnJheSwgYXJyYXlCdWZmZXJB
cnJheSk7CisgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3NhZ2UgPSBT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDApLCAm
cG9ydEFycmF5LCAmYXJyYXlCdWZmZXJBcnJheSk7CisgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7CiAKICAgICAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgICAgIGltcGwtPnBvc3RNZXNzYWdlKG1lc3Nh
Z2UucmVsZWFzZSgpLCAmcG9ydEFycmF5LCBlYyk7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICAgICAg
cmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nc0N1c3RvbS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3ND
dXN0b20uY3BwCmluZGV4IDliYzE0ZWIzYTM0NmFiYzRjM2EyYjJjNTVjZTc2OGIxYzE2YzI0YjMu
LmM0NjhhYWQ2YTYxNGU0OWYyYTdmYzk5MjJlYzJiYWQyNDI0MmVjNWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nc0N1c3Rv
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNb2NrQ29udGVudEZpbHRl
clNldHRpbmdzQ3VzdG9tLmNwcApAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiB1c2luZyBEZWNpc2lvbiA9IE1vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OkRlY2lzaW9uOwog
dXNpbmcgRGVjaXNpb25Qb2ludCA9IE1vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OkRlY2lzaW9u
UG9pbnQ7CiAKLUpTVmFsdWUgSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzOjpkZWNpc2lvblBv
aW50KEV4ZWNTdGF0ZSopIGNvbnN0CitKU1ZhbHVlIEpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5n
czo6ZGVjaXNpb25Qb2ludChFeGVjU3RhdGUmKSBjb25zdAogewogICAgIERlY2lzaW9uUG9pbnQg
ZGVjaXNpb25Qb2ludCA9IGltcGwoKS5kZWNpc2lvblBvaW50KCk7CiAgICAgc3dpdGNoIChkZWNp
c2lvblBvaW50KSB7CkBAIC01NSwxMCArNTUsMTAgQEAgSlNWYWx1ZSBKU01vY2tDb250ZW50Rmls
dGVyU2V0dGluZ3M6OmRlY2lzaW9uUG9pbnQoRXhlY1N0YXRlKikgY29uc3QKICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OnNl
dERlY2lzaW9uUG9pbnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU01v
Y2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OnNldERlY2lzaW9uUG9pbnQoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICB1aW50OF90IG5hdGl2ZVZhbHVlIHsgdG9VSW50OChl
eGVjLCB2YWx1ZSwgRW5mb3JjZVJhbmdlKSB9OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICB1aW50OF90IG5hdGl2ZVZhbHVlIHsgdG9VSW50OCgmc3RhdGUsIHZhbHVlLCBFbmZv
cmNlUmFuZ2UpIH07CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1
cm47CiAKICAgICBEZWNpc2lvblBvaW50IGRlY2lzaW9uUG9pbnQgeyBzdGF0aWNfY2FzdDxEZWNp
c2lvblBvaW50PihuYXRpdmVWYWx1ZSkgfTsKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBKU01vY2tD
b250ZW50RmlsdGVyU2V0dGluZ3M6OnNldERlY2lzaW9uUG9pbnQoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHZhbHUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHRocm93VHlwZUVycm9y
KGV4ZWMsIFN0cmluZzo6Zm9ybWF0KCIldSBpcyBub3QgYSB2YWxpZCBkZWNpc2lvblBvaW50IHZh
bHVlLiIsIG5hdGl2ZVZhbHVlKSk7CisgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBTdHJpbmc6
OmZvcm1hdCgiJXUgaXMgbm90IGEgdmFsaWQgZGVjaXNpb25Qb2ludCB2YWx1ZS4iLCBuYXRpdmVW
YWx1ZSkpOwogfQogCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUgdG9KU1ZhbHVlKERlY2lzaW9uIGRl
Y2lzaW9uKQpAQCAtODgsMTAgKzg4LDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSB0b0pTVmFs
dWUoRGVjaXNpb24gZGVjaXNpb24pCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgRGVjaXNpb24gdG9EZWNpc2lvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dmFsdWUpCitzdGF0aWMgaW5saW5lIERlY2lzaW9uIHRvRGVjaXNpb24oRXhlY1N0YXRlJiBzdGF0
ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICB1aW50OF90IG5hdGl2ZVZhbHVlIHsgdG9VSW50OChl
eGVjLCB2YWx1ZSwgRW5mb3JjZVJhbmdlKSB9OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICB1aW50OF90IG5hdGl2ZVZhbHVlIHsgdG9VSW50OCgmc3RhdGUsIHZhbHVlLCBFbmZv
cmNlUmFuZ2UpIH07CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1
cm4gRGVjaXNpb246OkFsbG93OwogCiAgICAgRGVjaXNpb24gZGVjaXNpb24geyBzdGF0aWNfY2Fz
dDxEZWNpc2lvbj4obmF0aXZlVmFsdWUpIH07CkBAIC0xMDEsMzMgKzEwMSwzMyBAQCBzdGF0aWMg
aW5saW5lIERlY2lzaW9uIHRvRGVjaXNpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
KQogICAgICAgICByZXR1cm4gZGVjaXNpb247CiAgICAgfQogCi0gICAgdGhyb3dUeXBlRXJyb3Io
ZXhlYywgU3RyaW5nOjpmb3JtYXQoIiV1IGlzIG5vdCBhIHZhbGlkIGRlY2lzaW9uIHZhbHVlLiIs
IG5hdGl2ZVZhbHVlKSk7CisgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBTdHJpbmc6OmZvcm1h
dCgiJXUgaXMgbm90IGEgdmFsaWQgZGVjaXNpb24gdmFsdWUuIiwgbmF0aXZlVmFsdWUpKTsKICAg
ICByZXR1cm4gRGVjaXNpb246OkFsbG93OwogfQogCi1KU1ZhbHVlIEpTTW9ja0NvbnRlbnRGaWx0
ZXJTZXR0aW5nczo6ZGVjaXNpb24oRXhlY1N0YXRlKikgY29uc3QKK0pTVmFsdWUgSlNNb2NrQ29u
dGVudEZpbHRlclNldHRpbmdzOjpkZWNpc2lvbihFeGVjU3RhdGUmKSBjb25zdAogewogICAgIHJl
dHVybiB0b0pTVmFsdWUoaW1wbCgpLmRlY2lzaW9uKCkpOwogfQogCi12b2lkIEpTTW9ja0NvbnRl
bnRGaWx0ZXJTZXR0aW5nczo6c2V0RGVjaXNpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZh
bHVlKQordm9pZCBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OnNldERlY2lzaW9uKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgRGVjaXNpb24gZGVjaXNpb24geyB0
b0RlY2lzaW9uKGV4ZWMsIHZhbHVlKSB9OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBEZWNpc2lvbiBkZWNpc2lvbiB7IHRvRGVjaXNpb24oc3RhdGUsIHZhbHVlKSB9OworICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaW1wbCgp
LnNldERlY2lzaW9uKGRlY2lzaW9uKTsKIH0KIAotSlNWYWx1ZSBKU01vY2tDb250ZW50RmlsdGVy
U2V0dGluZ3M6OnVuYmxvY2tSZXF1ZXN0RGVjaXNpb24oRXhlY1N0YXRlKikgY29uc3QKK0pTVmFs
dWUgSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzOjp1bmJsb2NrUmVxdWVzdERlY2lzaW9uKEV4
ZWNTdGF0ZSYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRvSlNWYWx1ZShpbXBsKCkudW5ibG9ja1Jl
cXVlc3REZWNpc2lvbigpKTsKIH0KIAotdm9pZCBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6
OnNldFVuYmxvY2tSZXF1ZXN0RGVjaXNpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
KQordm9pZCBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OnNldFVuYmxvY2tSZXF1ZXN0RGVj
aXNpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBEZWNpc2lvbiB1
bmJsb2NrUmVxdWVzdERlY2lzaW9uIHsgdG9EZWNpc2lvbihleGVjLCB2YWx1ZSkgfTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgRGVjaXNpb24gdW5ibG9ja1JlcXVlc3REZWNp
c2lvbiB7IHRvRGVjaXNpb24oc3RhdGUsIHZhbHVlKSB9OworICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaW1wbCgpLnNldFVuYmxvY2tSZXF1ZXN0
RGVjaXNpb24odW5ibG9ja1JlcXVlc3REZWNpc2lvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAKaW5kZXggMmFmMzU2MzhkMjExZTY2NDcw
Zjk1NTJlZmFiM2JjZmZiNTE3YTUwOC4uM2Q1ZmUxMjQ4NjQ4NjM0YTY0YTFkODk3NWM0YWMxYmMz
ZDFiZDliOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0
b3JDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9y
Q3VzdG9tLmNwcApAQCAtNDIsNDEgKzQyLDQxIEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSBKU05hdmlnYXRvcjo6d2Via2l0R2V0VXNlck1l
ZGlhKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNOYXZpZ2F0b3I6OndlYmtpdEdldFVzZXJN
ZWRpYShFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkg
PCAzKSB7Ci0gICAgICAgIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihleGVjKSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA8IDMpIHsKKyAg
ICAgICAgdGhyb3dWTUVycm9yKCZzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
JnN0YXRlKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIERp
Y3Rpb25hcnkgb3B0aW9ucyhleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIERpY3Rpb25hcnkgb3B0aW9ucygmc3RhdGUsIHN0YXRlLmFy
Z3VtZW50KDApKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKCFvcHRpb25zLmlzT2JqZWN0KCkpIHsKLSAgICAg
ICAgdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRmlyc3QgYXJndW1l
bnQgb2Ygd2Via2l0R2V0VXNlck1lZGlhIG11c3QgYmUgYSB2YWxpZCBEaWN0aW9uYXJ5IikpOwor
ICAgICAgICB0aHJvd1ZNRXJyb3IoJnN0YXRlLCBjcmVhdGVUeXBlRXJyb3IoJnN0YXRlLCAiRmly
c3QgYXJndW1lbnQgb2Ygd2Via2l0R2V0VXNlck1lZGlhIG11c3QgYmUgYSB2YWxpZCBEaWN0aW9u
YXJ5IikpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBpZiAo
IWV4ZWMtPmFyZ3VtZW50KDEpLmlzRnVuY3Rpb24oKSkgewotICAgICAgICB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMsICJBcmd1bWVudCAyICgnc3VjY2Vzc0NhbGxiYWNrJykgdG8gTmF2aWdhdG9yLndl
YmtpdEdldFVzZXJNZWRpYSBtdXN0IGJlIGEgZnVuY3Rpb24iKTsKKyAgICBpZiAoIXN0YXRlLmFy
Z3VtZW50KDEpLmlzRnVuY3Rpb24oKSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0
ZSwgIkFyZ3VtZW50IDIgKCdzdWNjZXNzQ2FsbGJhY2snKSB0byBOYXZpZ2F0b3Iud2Via2l0R2V0
VXNlck1lZGlhIG11c3QgYmUgYSBmdW5jdGlvbiIpOwogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICB9CiAKLSAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDIpLmlzRnVuY3Rpb24oKSkg
ewotICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsICJBcmd1bWVudCAzICgnZXJyb3JDYWxs
YmFjaycpIHRvIE5hdmlnYXRvci53ZWJraXRHZXRVc2VyTWVkaWEgbXVzdCBiZSBhIGZ1bmN0aW9u
Iik7CisgICAgaWYgKCFzdGF0ZS5hcmd1bWVudCgyKS5pc0Z1bmN0aW9uKCkpIHsKKyAgICAgICAg
dGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsICJBcmd1bWVudCAzICgnZXJyb3JDYWxsYmFjaycpIHRv
IE5hdmlnYXRvci53ZWJraXRHZXRVc2VyTWVkaWEgbXVzdCBiZSBhIGZ1bmN0aW9uIik7CiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIGlmICghaW1wbCgpLmZyYW1l
KCkpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIE5PVF9TVVBQT1JURURfRVJSKTsK
KyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIpOwogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICAvLyBXZSBkbyBub3QgbmVl
ZCB0byBwcm90ZWN0IHRoZSBjb250ZXh0IChpLmUuIGRvY3VtZW50KSBoZXJlIGFzIFVzZXJNZWRp
YVJlcXVlc3QgaXMgb2JzZXJ2aW5nIGNvbnRleHQgZGVzdHJ1Y3Rpb24gYW5kIHdpbGwgY2hlY2sg
dmFsaWRpdHkgYmVmb3JlIHJlc29sdmluZy9yZWplY3RpbmcgcHJvbWlzZS4KICAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBpbXBsKCkuZnJhbWUoKS0+ZG9jdW1lbnQoKTsKIAotICAgIFJlZlB0cjxO
YXZpZ2F0b3JVc2VyTWVkaWFTdWNjZXNzQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayA9IEpTTmF2
aWdhdG9yVXNlck1lZGlhU3VjY2Vzc0NhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3QoZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMSkpLCBnbG9iYWxPYmplY3QoKSk7CisgICAgUmVmUHRyPE5hdmlnYXRv
clVzZXJNZWRpYVN1Y2Nlc3NDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrID0gSlNOYXZpZ2F0b3JV
c2VyTWVkaWFTdWNjZXNzQ2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChzdGF0ZS51bmNoZWNrZWRB
cmd1bWVudCgxKSksIGdsb2JhbE9iamVjdCgpKTsKICAgICBhdXRvIHJlc29sdmVDYWxsYmFjayA9
IFtzdWNjZXNzQ2FsbGJhY2ssIGRvY3VtZW50XShjb25zdCBSZWZQdHI8TWVkaWFTdHJlYW0+JiBz
dHJlYW0pIG11dGFibGUgewogICAgICAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHByb3RlY3RlZFN0
cmVhbSA9IHN0cmVhbTsKICAgICAgICAgZG9jdW1lbnQtPnBvc3RUYXNrKFtzdWNjZXNzQ2FsbGJh
Y2ssIHByb3RlY3RlZFN0cmVhbV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsKQEAgLTg0LDcg
Kzg0LDcgQEAgSlNWYWx1ZSBKU05hdmlnYXRvcjo6d2Via2l0R2V0VXNlck1lZGlhKEV4ZWNTdGF0
ZSogZXhlYykKICAgICAgICAgfSk7CiAgICAgfTsKIAotICAgIFJlZlB0cjxOYXZpZ2F0b3JVc2Vy
TWVkaWFFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrID0gSlNOYXZpZ2F0b3JVc2VyTWVkaWFF
cnJvckNhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3QoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMikp
LCBnbG9iYWxPYmplY3QoKSk7CisgICAgUmVmUHRyPE5hdmlnYXRvclVzZXJNZWRpYUVycm9yQ2Fs
bGJhY2s+IGVycm9yQ2FsbGJhY2sgPSBKU05hdmlnYXRvclVzZXJNZWRpYUVycm9yQ2FsbGJhY2s6
OmNyZWF0ZShhc09iamVjdChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSksIGdsb2JhbE9iamVj
dCgpKTsKICAgICBhdXRvIHJlamVjdENhbGxiYWNrID0gW2Vycm9yQ2FsbGJhY2ssIGRvY3VtZW50
XShjb25zdCBSZWZQdHI8TmF2aWdhdG9yVXNlck1lZGlhRXJyb3I+JiBlcnJvcikgbXV0YWJsZSB7
CiAgICAgICAgIFJlZlB0cjxOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvcj4gcHJvdGVjdGVkRXJyb3Ig
PSBlcnJvcjsKICAgICAgICAgZG9jdW1lbnQtPnBvc3RUYXNrKFtlcnJvckNhbGxiYWNrLCBwcm90
ZWN0ZWRFcnJvcl0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsKQEAgLTk0LDcgKzk0LDcgQEAg
SlNWYWx1ZSBKU05hdmlnYXRvcjo6d2Via2l0R2V0VXNlck1lZGlhKEV4ZWNTdGF0ZSogZXhlYykK
IAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFVzZXJNZWRpYVJlcXVlc3Q6OnN0YXJ0
KGRvY3VtZW50LCBvcHRpb25zLCBNZWRpYURldmljZXM6OlByb21pc2UoV1RGOjptb3ZlKHJlc29s
dmVDYWxsYmFjayksIFdURjo6bW92ZShyZWplY3RDYWxsYmFjaykpLCBlYyk7Ci0gICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05vZGVDdXN0b20uY3BwCmluZGV4IGFlYWMwODdkOWRjZmE1MTEwNzkzZDJmZjJjOWFmYzIz
ZTEyYjgxNTIuLmRlZWU2NzVhOTI1MTIxMDU0ZjE3MjMyN2U1MzZhYTRkZjhlNWY3NTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcApAQCAtMTEzLDQzICsx
MTMsNDMgQEAgYm9vbCBKU05vZGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpKU0NlbGwmIGNlbGwsIHZvaWQqLCBTbG90VmlzaXQKICAgICByZXR1cm4gaXNSZWFjaGFibGVG
cm9tRE9NKGpzTm9kZS5pbXBsKCksIHZpc2l0b3IpOwogfQogCi1KU1ZhbHVlIEpTTm9kZTo6aW5z
ZXJ0QmVmb3JlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNOb2RlOjppbnNlcnRCZWZvcmUo
RXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBib29s
IG9rID0gaW1wbCgpLmluc2VydEJlZm9yZShKU05vZGU6OnRvV3JhcHBlZChleGVjLT5hcmd1bWVu
dCgwKSksIEpTTm9kZTo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDEpKSwgZWMpOwotICAgIHNl
dERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgYm9vbCBvayA9IGltcGwoKS5pbnNlcnRCZWZv
cmUoSlNOb2RlOjp0b1dyYXBwZWQoc3RhdGUuYXJndW1lbnQoMCkpLCBKU05vZGU6OnRvV3JhcHBl
ZChzdGF0ZS5hcmd1bWVudCgxKSksIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBl
Yyk7CiAgICAgaWYgKG9rKQotICAgICAgICByZXR1cm4gZXhlYy0+YXJndW1lbnQoMCk7CisgICAg
ICAgIHJldHVybiBzdGF0ZS5hcmd1bWVudCgwKTsKICAgICByZXR1cm4ganNOdWxsKCk7CiB9CiAK
LUpTVmFsdWUgSlNOb2RlOjpyZXBsYWNlQ2hpbGQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBK
U05vZGU6OnJlcGxhY2VDaGlsZChFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgIGJvb2wgb2sgPSBpbXBsKCkucmVwbGFjZUNoaWxkKEpTTm9kZTo6dG9X
cmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDApKSwgSlNOb2RlOjp0b1dyYXBwZWQoZXhlYy0+YXJndW1l
bnQoMSkpLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBib29sIG9r
ID0gaW1wbCgpLnJlcGxhY2VDaGlsZChKU05vZGU6OnRvV3JhcHBlZChzdGF0ZS5hcmd1bWVudCgw
KSksIEpTTm9kZTo6dG9XcmFwcGVkKHN0YXRlLmFyZ3VtZW50KDEpKSwgZWMpOworICAgIHNldERP
TUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICBpZiAob2spCi0gICAgICAgIHJldHVybiBleGVj
LT5hcmd1bWVudCgxKTsKKyAgICAgICAgcmV0dXJuIHN0YXRlLmFyZ3VtZW50KDEpOwogICAgIHJl
dHVybiBqc051bGwoKTsKIH0KIAotSlNWYWx1ZSBKU05vZGU6OnJlbW92ZUNoaWxkKEV4ZWNTdGF0
ZSogZXhlYykKK0pTVmFsdWUgSlNOb2RlOjpyZW1vdmVDaGlsZChFeGVjU3RhdGUmIHN0YXRlKQog
ewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGJvb2wgb2sgPSBpbXBsKCkucmVtb3Zl
Q2hpbGQoSlNOb2RlOjp0b1dyYXBwZWQoZXhlYy0+YXJndW1lbnQoMCkpLCBlYyk7Ci0gICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBib29sIG9rID0gaW1wbCgpLnJlbW92ZUNoaWxk
KEpTTm9kZTo6dG9XcmFwcGVkKHN0YXRlLmFyZ3VtZW50KDApKSwgZWMpOworICAgIHNldERPTUV4
Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICBpZiAob2spCi0gICAgICAgIHJldHVybiBleGVjLT5h
cmd1bWVudCgwKTsKKyAgICAgICAgcmV0dXJuIHN0YXRlLmFyZ3VtZW50KDApOwogICAgIHJldHVy
biBqc051bGwoKTsKIH0KIAotSlNWYWx1ZSBKU05vZGU6OmFwcGVuZENoaWxkKEV4ZWNTdGF0ZSog
ZXhlYykKK0pTVmFsdWUgSlNOb2RlOjphcHBlbmRDaGlsZChFeGVjU3RhdGUmIHN0YXRlKQogewog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGJvb2wgb2sgPSBpbXBsKCkuYXBwZW5kQ2hp
bGQoSlNOb2RlOjp0b1dyYXBwZWQoZXhlYy0+YXJndW1lbnQoMCkpLCBlYyk7Ci0gICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBib29sIG9rID0gaW1wbCgpLmFwcGVuZENoaWxkKEpT
Tm9kZTo6dG9XcmFwcGVkKHN0YXRlLmFyZ3VtZW50KDApKSwgZWMpOworICAgIHNldERPTUV4Y2Vw
dGlvbigmc3RhdGUsIGVjKTsKICAgICBpZiAob2spCi0gICAgICAgIHJldHVybiBleGVjLT5hcmd1
bWVudCgwKTsKKyAgICAgICAgcmV0dXJuIHN0YXRlLmFyZ3VtZW50KDApOwogICAgIHJldHVybiBq
c051bGwoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNP
c2NpbGxhdG9yTm9kZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09z
Y2lsbGF0b3JOb2RlQ3VzdG9tLmNwcAppbmRleCAwMmMyYWJlMjVlNTc4MTU4NTExM2M2NjVlOWVm
ODc2NzhmNWNkNjEyLi45OGM4ODE0OWYzOWUyYjBjYmE4MWQzNTJlNWI5YmRiMjkwNWNiMjk3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09zY2lsbGF0b3JOb2RlQ3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09zY2lsbGF0b3JOb2Rl
Q3VzdG9tLmNwcApAQCAtMzcsMjggKzM3LDI4IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU09zY2lsbGF0b3JOb2RlOjpzZXRUeXBlKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNPc2NpbGxhdG9yTm9kZTo6c2V0VHlw
ZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIE9zY2lsbGF0b3JOb2Rl
JiBpbXAgPSBpbXBsKCk7CiAKICNpZiBFTkFCTEUoTEVHQUNZX1dFQl9BVURJTykKICAgICBpZiAo
dmFsdWUuaXNOdW1iZXIoKSkgewotICAgICAgICB1aW50MzJfdCB0eXBlID0gdmFsdWUudG9VSW50
MzIoZXhlYyk7CisgICAgICAgIHVpbnQzMl90IHR5cGUgPSB2YWx1ZS50b1VJbnQzMigmc3RhdGUp
OwogICAgICAgICBpZiAoIWltcC5zZXRUeXBlKHR5cGUpKQotICAgICAgICAgICAgZXhlYy0+dm0o
KS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIklsbGVnYWwgT3Nj
aWxsYXRvck5vZGUgdHlwZSIpKTsKKyAgICAgICAgICAgIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRp
b24oJnN0YXRlLCBjcmVhdGVUeXBlRXJyb3IoJnN0YXRlLCAiSWxsZWdhbCBPc2NpbGxhdG9yTm9k
ZSB0eXBlIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCiAKICAgICBpZiAodmFs
dWUuaXNTdHJpbmcoKSkgewotICAgICAgICBTdHJpbmcgdHlwZSA9IHZhbHVlLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKKyAgICAgICAgU3RyaW5nIHR5cGUgPSB2YWx1ZS50b1N0cmluZygm
c3RhdGUpLT52YWx1ZSgmc3RhdGUpOwogICAgICAgICBpZiAodHlwZSA9PSAic2luZSIgfHwgdHlw
ZSA9PSAic3F1YXJlIiB8fCB0eXBlID09ICJzYXd0b290aCIgfHwgdHlwZSA9PSAidHJpYW5nbGUi
KSB7CiAgICAgICAgICAgICBpbXAuc2V0VHlwZSh0eXBlKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4
ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiSWxsZWdhbCBPc2NpbGxhdG9yTm9kZSB0eXBlIikp
OworICAgIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVUeXBlRXJyb3Io
JnN0YXRlLCAiSWxsZWdhbCBPc2NpbGxhdG9yTm9kZSB0eXBlIikpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Bh
bm5lck5vZGVDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYW5uZXJO
b2RlQ3VzdG9tLmNwcAppbmRleCAwNWFhYjY5OGNkNTk0ZjNjYTJhM2I4ODJlYzVlMzczN2QxZGYx
MWI1Li44NmMwM2VkM2ZiODkyNTlhY2Y5OGNlMzMyYTY5MjQyODdlZTNiMDFkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Bhbm5lck5vZGVDdXN0b20uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGFubmVyTm9kZUN1c3RvbS5jcHAKQEAgLTM3
LDUyICszNyw1MiBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXZvaWQgSlNQYW5uZXJOb2RlOjpzZXRQYW5uaW5nTW9kZWwoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHZhbHVlKQordm9pZCBKU1Bhbm5lck5vZGU6OnNldFBhbm5pbmdNb2RlbChFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIFBhbm5lck5vZGUmIGltcCA9IGltcGwo
KTsKIAogI2lmIEVOQUJMRShMRUdBQ1lfV0VCX0FVRElPKQogICAgIGlmICh2YWx1ZS5pc051bWJl
cigpKSB7Ci0gICAgICAgIHVpbnQzMl90IG1vZGVsID0gdmFsdWUudG9VSW50MzIoZXhlYyk7Cisg
ICAgICAgIHVpbnQzMl90IG1vZGVsID0gdmFsdWUudG9VSW50MzIoJnN0YXRlKTsKICAgICAgICAg
aWYgKCFpbXAuc2V0UGFubmluZ01vZGVsKG1vZGVsKSkKLSAgICAgICAgICAgIGV4ZWMtPnZtKCku
dGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJJbGxlZ2FsIHBhbm5p
bmdNb2RlbCIpKTsKKyAgICAgICAgICAgIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRl
LCBjcmVhdGVUeXBlRXJyb3IoJnN0YXRlLCAiSWxsZWdhbCBwYW5uaW5nTW9kZWwiKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKIAogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7
Ci0gICAgICAgIFN0cmluZyBtb2RlbCA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKKyAgICAgICAgU3RyaW5nIG1vZGVsID0gdmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUo
JnN0YXRlKTsKICAgICAgICAgaWYgKG1vZGVsID09ICJlcXVhbHBvd2VyIiB8fCBtb2RlbCA9PSAi
SFJURiIgfHwgbW9kZWwgPT0gInNvdW5kZmllbGQiKSB7CiAgICAgICAgICAgICBpbXAuc2V0UGFu
bmluZ01vZGVsKG1vZGVsKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0K
ICAgICAKLSAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVR5cGVFcnJv
cihleGVjLCAiSWxsZWdhbCBwYW5uaW5nTW9kZWwiKSk7CisgICAgc3RhdGUudm0oKS50aHJvd0V4
Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJJbGxlZ2FsIHBhbm5pbmdN
b2RlbCIpKTsKIH0KIAotdm9pZCBKU1Bhbm5lck5vZGU6OnNldERpc3RhbmNlTW9kZWwoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU1Bhbm5lck5vZGU6OnNldERpc3RhbmNl
TW9kZWwoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBQYW5uZXJOb2Rl
JiBpbXAgPSBpbXBsKCk7CiAKICNpZiBFTkFCTEUoTEVHQUNZX1dFQl9BVURJTykKICAgICBpZiAo
dmFsdWUuaXNOdW1iZXIoKSkgewotICAgICAgICB1aW50MzJfdCBtb2RlbCA9IHZhbHVlLnRvVUlu
dDMyKGV4ZWMpOworICAgICAgICB1aW50MzJfdCBtb2RlbCA9IHZhbHVlLnRvVUludDMyKCZzdGF0
ZSk7CiAgICAgICAgIGlmICghaW1wLnNldERpc3RhbmNlTW9kZWwobW9kZWwpKQotICAgICAgICAg
ICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
IklsbGVnYWwgZGlzdGFuY2VNb2RlbCIpKTsKKyAgICAgICAgICAgIHN0YXRlLnZtKCkudGhyb3dF
eGNlcHRpb24oJnN0YXRlLCBjcmVhdGVUeXBlRXJyb3IoJnN0YXRlLCAiSWxsZWdhbCBkaXN0YW5j
ZU1vZGVsIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCiAKICAgICBpZiAodmFs
dWUuaXNTdHJpbmcoKSkgewotICAgICAgICBTdHJpbmcgbW9kZWwgPSB2YWx1ZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAgIFN0cmluZyBtb2RlbCA9IHZhbHVlLnRvU3RyaW5n
KCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CiAgICAgICAgIGlmIChtb2RlbCA9PSAibGluZWFyIiB8
fCBtb2RlbCA9PSAiaW52ZXJzZSIgfHwgbW9kZWwgPT0gImV4cG9uZW50aWFsIikgewogICAgICAg
ICAgICAgaW1wLnNldERpc3RhbmNlTW9kZWwobW9kZWwpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhl
YywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJJbGxlZ2FsIGRpc3RhbmNlTW9kZWwiKSk7CisgICAg
c3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUs
ICJJbGxlZ2FsIGRpc3RhbmNlTW9kZWwiKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1
c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BvcFN0YXRlRXZlbnRDdXN0
b20uY3BwCmluZGV4IDUwMmU0OGJmYWE4ZjNhZTkwMzFiOGZhMDRhZjhhMDAyYzNhNTNiYTUuLjU1
ZmU5NGJkOWRmZWZlNmQyMGU0MTdjMzI3MmZlZjUwOWViNjQzZjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcApAQCAtNDAs
MTggKzQwLDE4IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IC8vIFNhdmUgdGhlIHN0YXRlIHZhbHVlIHRvIHRoZSBtX3N0YXRlIG1lbWJlciBvZiBhIEpTUG9w
U3RhdGVFdmVudCwgYW5kIHJldHVybiBpdCwgZm9yIGNvbnZlbmllbmNlLgotc3RhdGljIGNvbnN0
IEpTVmFsdWUmIGNhY2hlU3RhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1BvcFN0YXRlRXZlbnQqIGV2
ZW50LCBjb25zdCBKU1ZhbHVlJiBzdGF0ZSkKK3N0YXRpYyBjb25zdCBKU1ZhbHVlJiBjYWNoZVN0
YXRlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTUG9wU3RhdGVFdmVudCogZXZlbnQsIGNvbnN0IEpTVmFs
dWUmIGV2ZW50U3RhdGUpCiB7Ci0gICAgZXZlbnQtPm1fc3RhdGUuc2V0KGV4ZWMtPnZtKCksIGV2
ZW50LCBzdGF0ZSk7Ci0gICAgcmV0dXJuIHN0YXRlOworICAgIGV2ZW50LT5tX3N0YXRlLnNldChz
dGF0ZS52bSgpLCBldmVudCwgZXZlbnRTdGF0ZSk7CisgICAgcmV0dXJuIGV2ZW50U3RhdGU7CiB9
CiAKLUpTVmFsdWUgSlNQb3BTdGF0ZUV2ZW50OjpzdGF0ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
CitKU1ZhbHVlIEpTUG9wU3RhdGVFdmVudDo6c3RhdGUoRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QK
IHsKICAgICBKU1ZhbHVlIGNhY2hlZFZhbHVlID0gbV9zdGF0ZS5nZXQoKTsKICAgICBpZiAoIWNh
Y2hlZFZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBXZSBjYW5ub3QgdXNlIGEgY2FjaGVk
IG9iamVjdCBpZiB3ZSBhcmUgaW4gYSBkaWZmZXJlbnQgd29ybGQgdGhhbiB0aGUgb25lIGl0IHdh
cyBjcmVhdGVkIGluLgotICAgICAgICBpZiAoIWNhY2hlZFZhbHVlLmlzT2JqZWN0KCkgfHwgJndv
cmxkRm9yRE9NT2JqZWN0KGNhY2hlZFZhbHVlLmdldE9iamVjdCgpKSA9PSAmY3VycmVudFdvcmxk
KGV4ZWMpKQorICAgICAgICBpZiAoIWNhY2hlZFZhbHVlLmlzT2JqZWN0KCkgfHwgJndvcmxkRm9y
RE9NT2JqZWN0KGNhY2hlZFZhbHVlLmdldE9iamVjdCgpKSA9PSAmY3VycmVudFdvcmxkKCZzdGF0
ZSkpCiAgICAgICAgICAgICByZXR1cm4gY2FjaGVkVmFsdWU7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIH0KQEAgLTYxLDIwICs2MSwyMCBAQCBKU1ZhbHVlIEpTUG9wU3RhdGVF
dmVudDo6c3RhdGUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAgIGlmICghZXZlbnQuc3RhdGUo
KS5oYXNOb1ZhbHVlKCkpIHsKICAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgYSBQb3BT
dGF0ZUV2ZW50IGRvZXMgbm90IGxlYWsgb2JqZWN0cyBpbiBpdHMgc3RhdGUgcHJvcGVydHkgYWNy
b3NzIGlzb2xhdGVkIERPTSB3b3JsZHMuCiAgICAgICAgIC8vIElkZWFsbHksIHdlIHdvdWxkIGNo
ZWNrIHRoYXQgdGhlIHdvcmxkcyBoYXZlIGRpZmZlcmVudCBwcml2aWxlZ2VzIGJ1dCB0aGF0J3Mg
bm90IHBvc3NpYmxlIHlldC4KLSAgICAgICAgSlNWYWx1ZSBzdGF0ZSA9IGV2ZW50LnN0YXRlKCku
anNWYWx1ZSgpOwotICAgICAgICBpZiAoc3RhdGUuaXNPYmplY3QoKSAmJiAmd29ybGRGb3JET01P
YmplY3Qoc3RhdGUuZ2V0T2JqZWN0KCkpICE9ICZjdXJyZW50V29ybGQoZXhlYykpIHsKLSAgICAg
ICAgICAgIGlmIChSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUg
PSBldmVudC50cnlTZXJpYWxpemVTdGF0ZShleGVjKSkKLSAgICAgICAgICAgICAgICBzdGF0ZSA9
IHNlcmlhbGl6ZWRWYWx1ZS0+ZGVzZXJpYWxpemUoZXhlYywgZ2xvYmFsT2JqZWN0KCksIG51bGxw
dHIpOworICAgICAgICBKU1ZhbHVlIGV2ZW50U3RhdGUgPSBldmVudC5zdGF0ZSgpLmpzVmFsdWUo
KTsKKyAgICAgICAgaWYgKGV2ZW50U3RhdGUuaXNPYmplY3QoKSAmJiAmd29ybGRGb3JET01PYmpl
Y3QoZXZlbnRTdGF0ZS5nZXRPYmplY3QoKSkgIT0gJmN1cnJlbnRXb3JsZCgmc3RhdGUpKSB7Cisg
ICAgICAgICAgICBpZiAoUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZh
bHVlID0gZXZlbnQudHJ5U2VyaWFsaXplU3RhdGUoJnN0YXRlKSkKKyAgICAgICAgICAgICAgICBl
dmVudFN0YXRlID0gc2VyaWFsaXplZFZhbHVlLT5kZXNlcmlhbGl6ZSgmc3RhdGUsIGdsb2JhbE9i
amVjdCgpLCBudWxscHRyKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdGF0
ZSA9IGpzTnVsbCgpOworICAgICAgICAgICAgICAgIGV2ZW50U3RhdGUgPSBqc051bGwoKTsKICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgcmV0dXJuIGNhY2hlU3RhdGUoZXhlYywgY29uc3Rf
Y2FzdDxKU1BvcFN0YXRlRXZlbnQqPih0aGlzKSwgc3RhdGUpOworICAgICAgICByZXR1cm4gY2Fj
aGVTdGF0ZShzdGF0ZSwgY29uc3RfY2FzdDxKU1BvcFN0YXRlRXZlbnQqPih0aGlzKSwgZXZlbnRT
dGF0ZSk7CiAgICAgfQogICAgIAogICAgIEhpc3RvcnkqIGhpc3RvcnkgPSBldmVudC5oaXN0b3J5
KCk7CiAgICAgaWYgKCFoaXN0b3J5IHx8ICFldmVudC5zZXJpYWxpemVkU3RhdGUoKSkKLSAgICAg
ICAgcmV0dXJuIGNhY2hlU3RhdGUoZXhlYywgY29uc3RfY2FzdDxKU1BvcFN0YXRlRXZlbnQqPih0
aGlzKSwganNOdWxsKCkpOworICAgICAgICByZXR1cm4gY2FjaGVTdGF0ZShzdGF0ZSwgY29uc3Rf
Y2FzdDxKU1BvcFN0YXRlRXZlbnQqPih0aGlzKSwganNOdWxsKCkpOwogCiAgICAgLy8gVGhlcmUn
cyBubyBjYWNoZWQgdmFsdWUgZnJvbSBhIHByZXZpb3VzIGludm9jYXRpb24sIG5vciBhIHN0YXRl
IHZhbHVlIHdhcyBwcm92aWRlZCBieSB0aGUKICAgICAvLyBldmVudCwgYnV0IHRoZXJlIGlzIGEg
aGlzdG9yeSBvYmplY3QsIHNvIGZpcnN0IHdlIG5lZWQgdG8gc2VlIGlmIHRoZSBzdGF0ZSBvYmpl
Y3QgaGFzIGJlZW4KQEAgLTg2LDEyICs4NiwxMiBAQCBKU1ZhbHVlIEpTUG9wU3RhdGVFdmVudDo6
c3RhdGUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAgIEpTVmFsdWUgcmVzdWx0OwogCiAgICAg
aWYgKGlzU2FtZVN0YXRlKSB7Ci0gICAgICAgIEpTSGlzdG9yeSoganNIaXN0b3J5ID0ganNDYXN0
PEpTSGlzdG9yeSo+KHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGhpc3RvcnkpLmFzQ2VsbCgp
KTsKLSAgICAgICAgcmVzdWx0ID0ganNIaXN0b3J5LT5zdGF0ZShleGVjKTsKKyAgICAgICAgSlNI
aXN0b3J5KiBqc0hpc3RvcnkgPSBqc0Nhc3Q8SlNIaXN0b3J5Kj4odG9KUygmc3RhdGUsIGdsb2Jh
bE9iamVjdCgpLCBoaXN0b3J5KS5hc0NlbGwoKSk7CisgICAgICAgIHJlc3VsdCA9IGpzSGlzdG9y
eS0+c3RhdGUoc3RhdGUpOwogICAgIH0gZWxzZQotICAgICAgICByZXN1bHQgPSBldmVudC5zZXJp
YWxpemVkU3RhdGUoKS0+ZGVzZXJpYWxpemUoZXhlYywgZ2xvYmFsT2JqZWN0KCksIDApOworICAg
ICAgICByZXN1bHQgPSBldmVudC5zZXJpYWxpemVkU3RhdGUoKS0+ZGVzZXJpYWxpemUoJnN0YXRl
LCBnbG9iYWxPYmplY3QoKSwgMCk7CiAKLSAgICByZXR1cm4gY2FjaGVTdGF0ZShleGVjLCBjb25z
dF9jYXN0PEpTUG9wU3RhdGVFdmVudCo+KHRoaXMpLCByZXN1bHQpOworICAgIHJldHVybiBjYWNo
ZVN0YXRlKHN0YXRlLCBjb25zdF9jYXN0PEpTUG9wU3RhdGVFdmVudCo+KHRoaXMpLCByZXN1bHQp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1DdXN0b20uY3BwCmluZGV4IDM0OGQxNmIyZmVi
ZTc5ODdkMmRkNjZmNWNjODY2NWY1YTdjMGVlNGEuLjljZjA5NmJhYmE2MjA4MDVjMTU1MWRjOWI1
ZWJjYmE5ZGNhNGUzMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
UmVhZGFibGVTdHJlYW1DdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTUmVhZGFibGVTdHJlYW1DdXN0b20uY3BwCkBAIC00NywxNiArNDcsMTYgQEAgdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTUmVhZGFibGVT
dHJlYW06OnBpcGVUbyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTUmVhZGFibGVTdHJlYW06
OnBpcGVUbyhFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIEpTVmFsdWUgZXJyb3IgPSBjcmVhdGVF
cnJvcihleGVjLCBBU0NJSUxpdGVyYWwoInBpcGVUbyBpcyBub3QgaW1wbGVtZW50ZWQiKSk7Ci0g
ICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXJyb3IpOworICAgIEpT
VmFsdWUgZXJyb3IgPSBjcmVhdGVFcnJvcigmc3RhdGUsIEFTQ0lJTGl0ZXJhbCgicGlwZVRvIGlz
IG5vdCBpbXBsZW1lbnRlZCIpKTsKKyAgICByZXR1cm4gc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlv
bigmc3RhdGUsIGVycm9yKTsKIH0KIAotSlNWYWx1ZSBKU1JlYWRhYmxlU3RyZWFtOjpwaXBlVGhy
b3VnaChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTUmVhZGFibGVTdHJlYW06OnBpcGVUaHJv
dWdoKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSBlcnJvciA9IGNyZWF0ZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgicGlwZVRocm91Z2ggaXMgbm90IGltcGxlbWVudGVkIikpOwot
ICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGVycm9yKTsKKyAgICBK
U1ZhbHVlIGVycm9yID0gY3JlYXRlRXJyb3IoJnN0YXRlLCBBU0NJSUxpdGVyYWwoInBpcGVUaHJv
dWdoIGlzIG5vdCBpbXBsZW1lbnRlZCIpKTsKKyAgICByZXR1cm4gc3RhdGUudm0oKS50aHJvd0V4
Y2VwdGlvbigmc3RhdGUsIGVycm9yKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbVJlYWRl
ckN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFt
UmVhZGVyQ3VzdG9tLmNwcAppbmRleCAwNjNhY2NiMDc2Yzg2NmQ3YThmZGY2ZTA0ZDQwZmVkMWU0
NDFkMDE5Li43NTY0MmYzNWI3ZGE2Y2MzZDhmMzU1OGI0MmY5NDIzY2I2ZjlhMWFiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtUmVhZGVyQ3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFt
UmVhZGVyQ3VzdG9tLmNwcApAQCAtNDQsMTIgKzQ0LDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSBKU1JlYWRhYmxlU3RyZWFtUmVhZGVy
OjpjbG9zZWQoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU1JlYWRhYmxlU3RyZWFt
UmVhZGVyOjpjbG9zZWQoRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICAgICBpZiAoIW1fY2xv
c2VkKSB7Ci0gICAgICAgIEpTUHJvbWlzZURlZmVycmVkKiBjbG9zZWRQcm9taXNlID0gSlNQcm9t
aXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QoKSk7Ci0gICAgICAgIGNvbnN0
X2Nhc3Q8SlNSZWFkYWJsZVN0cmVhbVJlYWRlcio+KHRoaXMpLT5tX2Nsb3NlZC5zZXQoZXhlYy0+
dm0oKSwgdGhpcywgY2xvc2VkUHJvbWlzZS0+cHJvbWlzZSgpKTsKLSAgICAgICAgaW1wbCgpLmNs
b3NlZChEZWZlcnJlZFdyYXBwZXIoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGNsb3NlZFByb21pc2Up
KTsKKyAgICAgICAgSlNQcm9taXNlRGVmZXJyZWQqIGNsb3NlZFByb21pc2UgPSBKU1Byb21pc2VE
ZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOworICAgICAgICBjb25zdF9j
YXN0PEpTUmVhZGFibGVTdHJlYW1SZWFkZXIqPih0aGlzKS0+bV9jbG9zZWQuc2V0KHN0YXRlLnZt
KCksIHRoaXMsIGNsb3NlZFByb21pc2UtPnByb21pc2UoKSk7CisgICAgICAgIGltcGwoKS5jbG9z
ZWQoRGVmZXJyZWRXcmFwcGVyKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIGNsb3NlZFByb21pc2Up
KTsKICAgICB9CiAgICAgcmV0dXJuIG1fY2xvc2VkLmdldCgpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5j
cHAKaW5kZXggOGM5ZWI4ZjljMTlmOTBhMDBhMzZkZjUzNWY5OTNiYWM3YTEzZWJlYi4uNDlhMGVm
ZGM0NTg1Y2QyNWQxZDJlNDVhYzEzODczNDMzZjk1MmE0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3Bw
CkBAIC0zOSwyMCArMzksMjAgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1KU1ZhbHVlIEpTU1FMUmVzdWx0U2V0Um93TGlzdDo6aXRlbShFeGVjU3RhdGUq
IGV4ZWMpCitKU1ZhbHVlIEpTU1FMUmVzdWx0U2V0Um93TGlzdDo6aXRlbShFeGVjU3RhdGUmIHN0
YXRlKQogewogICAgIGJvb2wgaW5kZXhPazsKLSAgICBpbnQgaW5kZXggPSBmaW5pdGVJbnQzMlZh
bHVlKGV4ZWMtPmFyZ3VtZW50KDApLCBleGVjLCBpbmRleE9rKTsKKyAgICBpbnQgaW5kZXggPSBm
aW5pdGVJbnQzMlZhbHVlKHN0YXRlLmFyZ3VtZW50KDApLCAmc3RhdGUsIGluZGV4T2spOwogICAg
IGlmICghaW5kZXhPaykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNN
QVRDSF9FUlIpOworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBUWVBFX01JU01BVENI
X0VSUik7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KICAgICBpZiAoaW5k
ZXggPCAwIHx8ICh1bnNpZ25lZClpbmRleCA+PSBtX2ltcGwtPmxlbmd0aCgpKSB7Ci0gICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBJTkRFWF9TSVpFX0VSUik7CisgICAgICAgIHNldERPTUV4
Y2VwdGlvbigmc3RhdGUsIElOREVYX1NJWkVfRVJSKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgfQogCi0gICAgSlNPYmplY3QqIG9iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2Jq
ZWN0KGV4ZWMpOworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgm
c3RhdGUpOwogCiAgICAgdW5zaWduZWQgbnVtQ29sdW1ucyA9IG1faW1wbC0+Y29sdW1uTmFtZXMo
KS5zaXplKCk7CiAgICAgdW5zaWduZWQgdmFsdWVzSW5kZXggPSBpbmRleCAqIG51bUNvbHVtbnM7
CkBAIC02MSwyMCArNjEsMjAgQEAgSlNWYWx1ZSBKU1NRTFJlc3VsdFNldFJvd0xpc3Q6Oml0ZW0o
RXhlY1N0YXRlKiBleGVjKQogICAgICAgICBKU1ZhbHVlIGpzVmFsdWU7CiAKICAgICAgICAgc3dp
dGNoICh2YWx1ZS50eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgU1FMVmFsdWU6OlN0cmluZ1Zh
bHVlOgotICAgICAgICAgICAgICBqc1ZhbHVlID0ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgdmFs
dWUuc3RyaW5nKCkpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFNRTFZh
bHVlOjpOdWxsVmFsdWU6Ci0gICAgICAgICAgICAgIGpzVmFsdWUgPSBqc051bGwoKTsKLSAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBTUUxWYWx1ZTo6TnVtYmVyVmFsdWU6Ci0g
ICAgICAgICAgICAgIGpzVmFsdWUgPSBqc051bWJlcih2YWx1ZS5udW1iZXIoKSk7Ci0gICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNlIFNRTFZhbHVlOjpTdHJpbmdWYWx1ZToKKyAgICAg
ICAgICAgIGpzVmFsdWUgPSBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlLnN0cmluZygp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNRTFZhbHVlOjpOdWxsVmFsdWU6
CisgICAgICAgICAgICBqc1ZhbHVlID0ganNOdWxsKCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBTUUxWYWx1ZTo6TnVtYmVyVmFsdWU6CisgICAgICAgICAgICBqc1ZhbHVlID0g
anNOdW1iZXIodmFsdWUubnVtYmVyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCi0g
ICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgbV9pbXBsLT5jb2x1bW5OYW1lcygpW2ldKSwganNWYWx1ZSwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5KTsKKyAgICAgICAgb2JqZWN0LT5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmc3RhdGUsIG1faW1wbC0+Y29sdW1uTmFtZXMoKVtpXSksIGpzVmFs
dWUsIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG9iamVjdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25D
dXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvbkN1
c3RvbS5jcHAKaW5kZXggMjUyNzA4MGEzNGQ5MmViNWUzNTAyYjg0NGEzZmNlZDYxODNkMWQ0NS4u
M2M3MzRhNTA5ZGZiZjgxMWZmMjU1NWZiZDhkMjgwYWEwOTc4ZjQ0YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAKQEAg
LTQxLDM2ICs0MSwzNiBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUpTVmFsdWUgSlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNxbChFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwoRXhlY1N0YXRlJiBzdGF0
ZSkKIHsKLSAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgewotICAgICAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgU1lOVEFYX0VSUik7CisgICAgaWYgKCFzdGF0ZS5hcmd1bWVudENvdW50
KCkpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgU1lOVEFYX0VSUik7CiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIFN0cmluZyBzcWxTdGF0ZW1l
bnQgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIFN0cmluZyBzcWxTdGF0ZW1lbnQgPSBzdGF0
ZS5hcmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOworICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAg
ICAvLyBOb3cgYXNzZW1ibGUgdGhlIGxpc3Qgb2YgU1FMIGFyZ3VtZW50cwogICAgIFZlY3RvcjxT
UUxWYWx1ZT4gc3FsVmFsdWVzOwotICAgIGlmICghZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmlu
ZWRPck51bGwoKSkgewotICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQo
MSkuZ2V0T2JqZWN0KCk7CisgICAgaWYgKCFzdGF0ZS5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9y
TnVsbCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBzdGF0ZS5hcmd1bWVudCgxKS5n
ZXRPYmplY3QoKTsKICAgICAgICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgICAgIHNldERPTUV4
Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CisgICAgICAgICAgICBzZXRET01FeGNl
cHRpb24oJnN0YXRlLCBUWVBFX01JU01BVENIX0VSUik7CiAgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICAgICAgfQogCi0gICAgICAgIEpTVmFsdWUgbGVuZ3RoVmFsdWUgPSBv
YmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKLSAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBKU1ZhbHVlIGxlbmd0aFZhbHVlID0g
b2JqZWN0LT5nZXQoJnN0YXRlLCBzdGF0ZS5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKKyAgICAg
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGxlbmd0aFZhbHVlLnRvVUludDMyKGV4
ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGxlbmd0aFZhbHVlLnRvVUludDMyKCZzdGF0ZSk7CisgICAgICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDAgOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBpKTsKLSAgICAgICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvYmpl
Y3QtPmdldCgmc3RhdGUsIGkpOworICAgICAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgICAgICAgICBp
ZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKQEAgLTc5LDE4ICs3OSwxOCBAQCBKU1ZhbHVl
IEpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAg
ICAgICAgIHNxbFZhbHVlcy5hcHBlbmQodmFsdWUuYXNOdW1iZXIoKSk7CiAgICAgICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBhcmd1bWVudCB0byBhIHN0cmlu
ZyBhbmQgYXBwZW5kIGl0Ci0gICAgICAgICAgICAgICAgc3FsVmFsdWVzLmFwcGVuZCh2YWx1ZS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAgICAgICAgICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKHZhbHVlLnRv
U3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSkpOworICAgICAgICAgICAgICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKICAgICBSZWZQdHI8U1FMU3Rh
dGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNrOwotICAgIGlmICghZXhlYy0+YXJndW1lbnQoMikuaXNV
bmRlZmluZWRPck51bGwoKSkgewotICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJn
dW1lbnQoMikuZ2V0T2JqZWN0KCk7CisgICAgaWYgKCFzdGF0ZS5hcmd1bWVudCgyKS5pc1VuZGVm
aW5lZE9yTnVsbCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBzdGF0ZS5hcmd1bWVu
dCgyKS5nZXRPYmplY3QoKTsKICAgICAgICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgICAgIHNl
dERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CisgICAgICAgICAgICBzZXRE
T01FeGNlcHRpb24oJnN0YXRlLCBUWVBFX01JU01BVENIX0VSUik7CiAgICAgICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgfQogCkBAIC05OCwxMCArOTgsMTAgQEAgSlNWYWx1
ZSBKU1NRTFRyYW5zYWN0aW9uOjpleGVjdXRlU3FsKEV4ZWNTdGF0ZSogZXhlYykKICAgICB9CiAK
ICAgICBSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjazsKLSAg
ICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDMpLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAg
SlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDMpLmdldE9iamVjdCgpOworICAgIGlm
ICghc3RhdGUuYXJndW1lbnQoMykuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAgICBKU09i
amVjdCogb2JqZWN0ID0gc3RhdGUuYXJndW1lbnQoMykuZ2V0T2JqZWN0KCk7CiAgICAgICAgIGlm
ICghb2JqZWN0KSB7Ci0gICAgICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNN
QVRDSF9FUlIpOworICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgVFlQRV9NSVNN
QVRDSF9FUlIpOwogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0K
IApAQCAtMTEwLDcgKzExMCw3IEBAIEpTVmFsdWUgSlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNx
bChFeGVjU3RhdGUqIGV4ZWMpCiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBtX2lt
cGwtPmV4ZWN1dGVTUUwoc3FsU3RhdGVtZW50LCBzcWxWYWx1ZXMsIGNhbGxiYWNrLnJlbGVhc2Uo
KSwgZXJyb3JDYWxsYmFjay5yZWxlYXNlKCksIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKIAogICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNTVkdMZW5ndGhDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdM
ZW5ndGhDdXN0b20uY3BwCmluZGV4IDE1YzUwZTViYWJiYjNhZWY0ZjkzMzlkMDBhOTA4MTkwOWIx
OWJmOTMuLmI2ZjBjZjgzNjE1ZjcxZTY1NTg4Y2UzZGUzZmNiYmFkZDE1YjZlZGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1c3RvbS5jcHAKQEAgLTMx
LDI5ICszMSwyOSBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUpTVmFsdWUgSlNTVkdMZW5ndGg6OnZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pT
VmFsdWUgSlNTVkdMZW5ndGg6OnZhbHVlKEV4ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0CiB7CiAgICAg
U1ZHTGVuZ3RoJiBwb2RJbXAgPSBpbXBsKCkucHJvcGVydHlSZWZlcmVuY2UoKTsKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKICAgICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0aENvbnRleHQoaW1w
bCgpLmNvbnRleHRFbGVtZW50KCkpOwogICAgIGZsb2F0IHZhbHVlID0gcG9kSW1wLnZhbHVlKGxl
bmd0aENvbnRleHQsIGVjKTsKICAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIGVjKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICByZXR1cm4ganNOdW1iZXIodmFs
dWUpOwogfQogCi12b2lkIEpTU1ZHTGVuZ3RoOjpzZXRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUpCit2b2lkIEpTU1ZHTGVuZ3RoOjpzZXRWYWx1ZShFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmIChpbXBsKCkuaXNSZWFkT25seSgpKSB7Ci0gICAg
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIpOwor
ICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9F
UlIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKCF2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpICYmICF2YWx1ZS5pc051bWJlcigpICYmICF2YWx1ZS5pc0Jvb2xlYW4oKSkgewot
ICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOworICAgICAgICB0aHJvd1ZNVHlwZUVycm9y
KCZzdGF0ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTYxLDM2ICs2MSwzNiBAQCB2
b2lkIEpTU1ZHTGVuZ3RoOjpzZXRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUp
CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0
aENvbnRleHQoaW1wbCgpLmNvbnRleHRFbGVtZW50KCkpOwotICAgIHBvZEltcC5zZXRWYWx1ZSh2
YWx1ZS50b0Zsb2F0KGV4ZWMpLCBsZW5ndGhDb250ZXh0LCBlYyk7CisgICAgcG9kSW1wLnNldFZh
bHVlKHZhbHVlLnRvRmxvYXQoJnN0YXRlKSwgbGVuZ3RoQ29udGV4dCwgZWMpOwogICAgIGlmIChl
YykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBzZXRET01F
eGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpbXBs
KCkuY29tbWl0Q2hhbmdlKCk7CiB9CiAKLUpTVmFsdWUgSlNTVkdMZW5ndGg6OmNvbnZlcnRUb1Nw
ZWNpZmllZFVuaXRzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNTVkdMZW5ndGg6OmNvbnZl
cnRUb1NwZWNpZmllZFVuaXRzKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgaWYgKGltcGwoKS5p
c1JlYWRPbmx5KCkpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIE5PX01PRElGSUNB
VElPTl9BTExPV0VEX0VSUik7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIE5PX01P
RElGSUNBVElPTl9BTExPV0VEX0VSUik7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIH0KIAogICAgIFNWR0xlbmd0aCYgcG9kSW1wID0gaW1wbCgpLnByb3BlcnR5UmVmZXJlbmNl
KCk7CiAKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKLSAgICAgICAgcmV0dXJu
IGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IoZXhlYykpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPCAxKQorICAgICAg
ICByZXR1cm4gc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCi0gICAgdW5zaWduZWQgc2hvcnQgdW5pdFR5cGUg
PSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1VJbnQzMihleGVjKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgdW5zaWduZWQgc2hvcnQgdW5pdFR5cGUgPSBzdGF0ZS51
bmNoZWNrZWRBcmd1bWVudCgwKS50b1VJbnQzMigmc3RhdGUpOworICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0aENvbnRleHQoaW1wbCgp
LmNvbnRleHRFbGVtZW50KCkpOwogICAgIHBvZEltcC5jb252ZXJ0VG9TcGVjaWZpZWRVbml0cyh1
bml0VHlwZSwgbGVuZ3RoQ29udGV4dCwgZWMpOwogICAgIGlmIChlYykgewotICAgICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBl
Yyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdWJ0bGVDcnlwdG9DdXN0b20uY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdWJ0bGVDcnlwdG9DdXN0b20uY3BwCmluZGV4IGQ4
YzdmZjE1Nzg3M2Q3NWZkNzMzNzQ2ZGEzOWUzODliMTdmYjZkODguLjY4ZTZkNTY4MTk3MTAwNWQ1
NGE3YzU4MGQ4MGUwYjI5NmQxYjVkYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU3VidGxlQ3J5cHRvQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1N1YnRsZUNyeXB0b0N1c3RvbS5jcHAKQEAgLTYxLDI0ICs2MSwyNCBAQCBlbnVt
IGNsYXNzIENyeXB0b0tleUZvcm1hdCB7CiAgICAgSldLCiB9OwogCi1zdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPENyeXB0b0FsZ29yaXRobT4gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9B
bGdvcml0aG0+IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VmFsdWUgdmFsdWUpCiB7CiAgICAgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG1J
ZGVudGlmaWVyOwotICAgIGlmICghSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpnZXRBbGdv
cml0aG1JZGVudGlmaWVyKGV4ZWMsIHZhbHVlLCBhbGdvcml0aG1JZGVudGlmaWVyKSkgewotICAg
ICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIGlmICghSlNDcnlwdG9BbGdv
cml0aG1EaWN0aW9uYXJ5OjpnZXRBbGdvcml0aG1JZGVudGlmaWVyKCZzdGF0ZSwgdmFsdWUsIGFs
Z29yaXRobUlkZW50aWZpZXIpKSB7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24o
KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGF1dG8gcmVzdWx0ID0g
Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLmNyZWF0ZShhbGdvcml0aG1JZGVu
dGlmaWVyKTsKICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgTk9U
X1NVUFBPUlRFRF9FUlIpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBib29sIGNy
eXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwg
Q3J5cHRvS2V5Rm9ybWF0JiByZXN1bHQpCitzdGF0aWMgYm9vbCBjcnlwdG9LZXlGb3JtYXRGcm9t
SlNWYWx1ZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBDcnlwdG9LZXlGb3JtYXQm
IHJlc3VsdCkKIHsKLSAgICBTdHJpbmcga2V5Rm9ybWF0U3RyaW5nID0gdmFsdWUudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBT
dHJpbmcga2V5Rm9ybWF0U3RyaW5nID0gdmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0
YXRlKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpZiAoa2V5Rm9ybWF0U3RyaW5nID09ICJyYXciKQogICAgICAgICByZXN1bHQgPSBD
cnlwdG9LZXlGb3JtYXQ6OlJhdzsKQEAgLTg5LDE2ICs4OSwxNiBAQCBzdGF0aWMgYm9vbCBjcnlw
dG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIENy
eXB0b0tleQogICAgIGVsc2UgaWYgKGtleUZvcm1hdFN0cmluZyA9PSAiandrIikKICAgICAgICAg
cmVzdWx0ID0gQ3J5cHRvS2V5Rm9ybWF0OjpKV0s7CiAgICAgZWxzZSB7Ci0gICAgICAgIHRocm93
VHlwZUVycm9yKGV4ZWMsICJVbmtub3duIGtleSBmb3JtYXQiKTsKKyAgICAgICAgdGhyb3dUeXBl
RXJyb3IoJnN0YXRlLCAiVW5rbm93biBrZXkgZm9ybWF0Iik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGNyeXB0b0tleVVz
YWdlc0Zyb21KU1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgQ3J5cHRvS2V5
VXNhZ2UmIHJlc3VsdCkKK3N0YXRpYyBib29sIGNyeXB0b0tleVVzYWdlc0Zyb21KU1ZhbHVlKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIENyeXB0b0tleVVzYWdlJiByZXN1bHQpCiB7
CiAgICAgaWYgKCFpc0pTQXJyYXkodmFsdWUpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGV4
ZWMpOworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCkBAIC0xMDYsOSArMTA2LDkgQEAgc3RhdGljIGJvb2wgY3J5cHRvS2V5VXNh
Z2VzRnJvbUpTVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBDcnlwdG9LZXkK
IAogICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh2YWx1ZSk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBhcnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBKU1ZhbHVlIGVsZW1l
bnQgPSBhcnJheS0+Z2V0SW5kZXgoZXhlYywgaSk7Ci0gICAgICAgIFN0cmluZyB1c2FnZVN0cmlu
ZyA9IGVsZW1lbnQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGFycmF5LT5nZXRJ
bmRleCgmc3RhdGUsIGkpOworICAgICAgICBTdHJpbmcgdXNhZ2VTdHJpbmcgPSBlbGVtZW50LnRv
U3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKHVzYWdlU3Ry
aW5nID09ICJlbmNyeXB0IikKICAgICAgICAgICAgIHJlc3VsdCB8PSBDcnlwdG9LZXlVc2FnZUVu
Y3J5cHQ7CkBAIC0xMzAsNDIgKzEzMCw0MiBAQCBzdGF0aWMgYm9vbCBjcnlwdG9LZXlVc2FnZXNG
cm9tSlNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIENyeXB0b0tleQogICAg
IHJldHVybiB0cnVlOwogfQogCi1KU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjplbmNyeXB0KEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OmVuY3J5cHQoRXhlY1N0YXRlJiBz
dGF0ZSkKIHsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMykKLSAgICAgICAgcmV0
dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoZXhlYykpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPCAzKQorICAg
ICAgICByZXR1cm4gc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCi0gICAgYXV0byBhbGdvcml0aG0gPSBjcmVh
dGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7
CisgICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwg
c3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAg
ICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChzdGF0ZS5o
YWRFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAot
ICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRl
UGFyYW1ldGVyc0ZvckVuY3J5cHQoZXhlYywgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0Fs
Z29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JFbmNyeXB0KCZzdGF0ZSwgYWxn
b3JpdGhtLT5pZGVudGlmaWVyKCksIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBp
ZiAoIXBhcmFtZXRlcnMpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsK
KyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgUmVmUHRyPENyeXB0b0tleT4ga2V5ID0gSlNDcnlw
dG9LZXk6OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgUmVmUHRy
PENyeXB0b0tleT4ga2V5ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRB
cmd1bWVudCgxKSk7CiAgICAgaWYgKCFrZXkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJv
cihleGVjKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CiAKICAgICBp
ZiAoIWtleS0+YWxsb3dzKENyeXB0b0tleVVzYWdlRW5jcnlwdCkpIHsKICAgICAgICAgbV9pbXBs
LT5kb2N1bWVudCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2Fn
ZUxldmVsOjpFcnJvciwgQVNDSUlMaXRlcmFsKCJLZXkgdXNhZ2VzIGRvIG5vdCBpbmNsdWRlICdl
bmNyeXB0JyIpKTsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIE5PVF9TVVBQT1JURURf
RVJSKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIp
OwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBDcnlwdG9PcGVy
YXRpb25EYXRhIGRhdGE7Ci0gICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUo
ZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMiksIGRhdGEpKSB7Ci0gICAgICAgIEFTU0VS
VChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJv
bUpTVmFsdWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSwgZGF0YSkpIHsKKyAg
ICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgfQogCiAgICAgCi0gICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VE
ZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KCkp
OwotICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVyKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBwcm9t
aXNlRGVmZXJyZWQpOworICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBK
U1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOworICAgIERl
ZmVycmVkV3JhcHBlciB3cmFwcGVyKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZl
cnJlZCk7CiAgICAgYXV0byBzdWNjZXNzQ2FsbGJhY2sgPSBbd3JhcHBlcl0oY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiByZXN1bHQpIG11dGFibGUgewogICAgICAgICB3cmFwcGVyLnJlc29sdmUocmVz
dWx0KTsKICAgICB9OwpAQCAtMTc2LDQ4ICsxNzYsNDggQEAgSlNWYWx1ZSBKU1N1YnRsZUNyeXB0
bzo6ZW5jcnlwdChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAg
ICAgYWxnb3JpdGhtLT5lbmNyeXB0KCpwYXJhbWV0ZXJzLCAqa2V5LCBkYXRhLCBXVEY6Om1vdmUo
c3VjY2Vzc0NhbGxiYWNrKSwgV1RGOjptb3ZlKGZhaWx1cmVDYWxsYmFjayksIGVjKTsKICAgICBp
ZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICB9CiAKICAgICByZXR1cm4gcHJvbWlzZURlZmVycmVkLT5wcm9taXNlKCk7CiB9CiAKLUpT
VmFsdWUgSlNTdWJ0bGVDcnlwdG86OmRlY3J5cHQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBK
U1N1YnRsZUNyeXB0bzo6ZGVjcnlwdChFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPCAzKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4
Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAg
aWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA8IDMpCisgICAgICAgIHJldHVybiBzdGF0ZS52bSgp
LnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0
YXRlKSk7CiAKLSAgICBhdXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVl
KGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFsZ29yaXRobSA9
IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7CiAgICAgaWYgKCFhbGdvcml0aG0pIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgYXV0byBwYXJhbWV0ZXJzID0g
SlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRGVjcnlwdChl
eGVjLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkp
OworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3Jl
YXRlUGFyYW1ldGVyc0ZvckRlY3J5cHQoJnN0YXRlLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwg
c3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmICghcGFyYW1ldGVycykgewotICAg
ICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAK
LSAgICBSZWZQdHI8Q3J5cHRvS2V5PiBrZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICBSZWZQdHI8Q3J5cHRvS2V5PiBrZXkgPSBKU0Ny
eXB0b0tleTo6dG9XcmFwcGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKICAgICBpZiAo
IWtleSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgICAgICByZXR1
cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKIAogICAgIGlmICgha2V5LT5hbGxvd3MoQ3J5cHRv
S2V5VXNhZ2VEZWNyeXB0KSkgewogICAgICAgICBtX2ltcGwtPmRvY3VtZW50KCktPmFkZENvbnNv
bGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBBU0NJSUxp
dGVyYWwoIktleSB1c2FnZXMgZG8gbm90IGluY2x1ZGUgJ2RlY3J5cHQnIikpOwotICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRFRF9FUlIpOworICAgICAgICBzZXRET01F
eGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VSUik7CiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIH0KIAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEgZGF0YTsKLSAgICBp
ZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRB
cmd1bWVudCgyKSwgZGF0YSkpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KTsKKyAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRl
LnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRhKSkgeworICAgICAgICBBU1NFUlQoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAg
ICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6
OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QoKSk7Ci0gICAgRGVmZXJyZWRXcmFwcGVyIHdyYXBw
ZXIoZXhlYywgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CisgICAgSlNQcm9taXNl
RGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0
YXRlLCBnbG9iYWxPYmplY3QoKSk7CisgICAgRGVmZXJyZWRXcmFwcGVyIHdyYXBwZXIoJnN0YXRl
LCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKICAgICBhdXRvIHN1Y2Nlc3NDYWxs
YmFjayA9IFt3cmFwcGVyXShjb25zdCBWZWN0b3I8dWludDhfdD4mIHJlc3VsdCkgbXV0YWJsZSB7
CiAgICAgICAgIHdyYXBwZXIucmVzb2x2ZShyZXN1bHQpOwogICAgIH07CkBAIC0yMjgsNDggKzIy
OCw0OCBAQCBKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjpkZWNyeXB0KEV4ZWNTdGF0ZSogZXhlYykK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhbGdvcml0aG0tPmRlY3J5cHQoKnBhcmFt
ZXRlcnMsICprZXksIGRhdGEsIFdURjo6bW92ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEY6Om1vdmUo
ZmFpbHVyZUNhbGxiYWNrKSwgZWMpOwogICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgZWMpOworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIHJldHVybiBwcm9taXNl
RGVmZXJyZWQtPnByb21pc2UoKTsKIH0KIAotSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6c2lnbihF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjpzaWduKEV4ZWNTdGF0ZSYg
c3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDMpCi0gICAgICAgIHJl
dHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpIDwgMykKKyAg
ICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAotICAgIGF1dG8gYWxnb3JpdGhtID0gY3Jl
YXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkp
OworICAgIGF1dG8gYWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoc3RhdGUs
IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBpZiAoIWFsZ29yaXRobSkgewotICAg
ICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAK
LSAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0
ZVBhcmFtZXRlcnNGb3JTaWduKGV4ZWMsIGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdv
cml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yU2lnbigmc3RhdGUsIGFsZ29yaXRo
bS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgaWYgKCFw
YXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAg
ICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgIH0KIAotICAgIFJlZlB0cjxDcnlwdG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5
Ojp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIFJlZlB0cjxDcnlw
dG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1l
bnQoMSkpOwogICAgIGlmICgha2V5KQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhl
Yyk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOwogCiAgICAgaWYgKCFr
ZXktPmFsbG93cyhDcnlwdG9LZXlVc2FnZVNpZ24pKSB7CiAgICAgICAgIG1faW1wbC0+ZG9jdW1l
bnQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6
RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiS2V5IHVzYWdlcyBkbyBub3QgaW5jbHVkZSAnc2lnbiciKSk7
Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBOT1RfU1VQUE9SVEVEX0VSUik7CisgICAg
ICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIE5PVF9TVVBQT1JURURfRVJSKTsKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgQ3J5cHRvT3BlcmF0aW9uRGF0YSBk
YXRhOwotICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRhKSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpOworICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZz
dGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMiksIGRhdGEpKSB7CisgICAgICAgIEFTU0VS
VChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIH0KIAotICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21p
c2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCgpKTsKLSAgICBEZWZlcnJlZFdy
YXBwZXIgd3JhcHBlcihleGVjLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKKyAg
ICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6
OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKKyAgICBEZWZlcnJlZFdyYXBwZXIgd3Jh
cHBlcigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwogICAgIGF1dG8g
c3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0
KSBtdXRhYmxlIHsKICAgICAgICAgd3JhcHBlci5yZXNvbHZlKHJlc3VsdCk7CiAgICAgfTsKQEAg
LTI4MCw1NCArMjgwLDU0IEBAIEpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OnNpZ24oRXhlY1N0YXRl
KiBleGVjKQogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGFsZ29yaXRobS0+c2lnbigq
cGFyYW1ldGVycywgKmtleSwgZGF0YSwgV1RGOjptb3ZlKHN1Y2Nlc3NDYWxsYmFjayksIFdURjo6
bW92ZShmYWlsdXJlQ2FsbGJhY2spLCBlYyk7CiAgICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVj
KTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHBy
b21pc2VEZWZlcnJlZC0+cHJvbWlzZSgpOwogfQogCi1KU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjp2
ZXJpZnkoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6dmVyaWZ5KEV4
ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDQpCi0g
ICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgp
IDwgNCkKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAotICAgIGF1dG8gYWxnb3Jp
dGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMCkpOworICAgIGF1dG8gYWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFs
dWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBpZiAoIWFsZ29yaXRo
bSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NF
UlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICB9CiAKLSAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25h
cnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JWZXJpZnkoZXhlYywgYWxnb3JpdGhtLT5pZGVudGlmaWVy
KCksIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBK
U0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JWZXJpZnkoJnN0
YXRlLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkp
OwogICAgIGlmICghcGFyYW1ldGVycykgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpOworICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBSZWZQdHI8Q3J5cHRvS2V5PiBrZXkg
PSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAg
ICBSZWZQdHI8Q3J5cHRvS2V5PiBrZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKHN0YXRlLnVu
Y2hlY2tlZEFyZ3VtZW50KDEpKTsKICAgICBpZiAoIWtleSkKLSAgICAgICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsK
IAogICAgIGlmICgha2V5LT5hbGxvd3MoQ3J5cHRvS2V5VXNhZ2VWZXJpZnkpKSB7CiAgICAgICAg
IG1faW1wbC0+ZG9jdW1lbnQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMs
IE1lc3NhZ2VMZXZlbDo6RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiS2V5IHVzYWdlcyBkbyBub3QgaW5j
bHVkZSAndmVyaWZ5JyIpKTsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIE5PVF9TVVBQ
T1JURURfRVJSKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRF
RF9FUlIpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBDcnlw
dG9PcGVyYXRpb25EYXRhIHNpZ25hdHVyZTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFG
cm9tSlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKSwgc2lnbmF0dXJlKSkg
ewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIGlmICghY3J5cHRv
T3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQo
MiksIHNpZ25hdHVyZSkpIHsKKyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgQ3J5cHRvT3BlcmF0
aW9uRGF0YSBkYXRhOwotICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKGV4
ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDMpLCBkYXRhKSkgewotICAgICAgICBBU1NFUlQo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21K
U1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMyksIGRhdGEpKSB7CisgICAg
ICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgIH0KIAotICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQg
PSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCgpKTsKLSAgICBE
ZWZlcnJlZFdyYXBwZXIgd3JhcHBlcihleGVjLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVy
cmVkKTsKKyAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNl
RGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKKyAgICBEZWZlcnJlZFdy
YXBwZXIgd3JhcHBlcigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwog
ICAgIGF1dG8gc3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKGJvb2wgcmVzdWx0KSBtdXRhYmxl
IHsKICAgICAgICAgd3JhcHBlci5yZXNvbHZlKHJlc3VsdCk7CiAgICAgfTsKQEAgLTMzOCwzOCAr
MzM4LDM4IEBAIEpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OnZlcmlmeShFeGVjU3RhdGUqIGV4ZWMp
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYWxnb3JpdGhtLT52ZXJpZnkoKnBhcmFt
ZXRlcnMsICprZXksIHNpZ25hdHVyZSwgZGF0YSwgV1RGOjptb3ZlKHN1Y2Nlc3NDYWxsYmFjayks
IFdURjo6bW92ZShmYWlsdXJlQ2FsbGJhY2spLCBlYyk7CiAgICAgaWYgKGVjKSB7Ci0gICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3Rh
dGUsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgcmV0
dXJuIHByb21pc2VEZWZlcnJlZC0+cHJvbWlzZSgpOwogfQogCi1KU1ZhbHVlIEpTU3VidGxlQ3J5
cHRvOjpkaWdlc3QoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6ZGln
ZXN0KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8
IDIpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRD
b3VudCgpIDwgMikKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0
YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAotICAgIGF1dG8g
YWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJv
bUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBpZiAoIWFs
Z29yaXRobSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAg
ICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICB9CiAKLSAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURp
Y3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JEaWdlc3QoZXhlYywgYWxnb3JpdGhtLT5pZGVu
dGlmaWVyKCksIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIHBhcmFtZXRl
cnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JEaWdl
c3QoJnN0YXRlLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1l
bnQoMCkpOwogICAgIGlmICghcGFyYW1ldGVycykgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBDcnlwdG9PcGVyYXRpb25E
YXRhIGRhdGE7Ci0gICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoZXhlYywg
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSksIGRhdGEpKSB7Ci0gICAgICAgIEFTU0VSVChleGVj
LT5oYWRFeGNlcHRpb24oKSk7CisgICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFs
dWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSwgZGF0YSkpIHsKKyAgICAgICAg
QVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgfQogCi0gICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpT
UHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KCkpOwotICAgIERlZmVy
cmVkV3JhcHBlciB3cmFwcGVyKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQp
OworICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZl
cnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOworICAgIERlZmVycmVkV3JhcHBl
ciB3cmFwcGVyKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CiAgICAg
YXV0byBzdWNjZXNzQ2FsbGJhY2sgPSBbd3JhcHBlcl0oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBy
ZXN1bHQpIG11dGFibGUgewogICAgICAgICB3cmFwcGVyLnJlc29sdmUocmVzdWx0KTsKICAgICB9
OwpAQCAtMzgwLDQ3ICszODAsNDcgQEAgSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6ZGlnZXN0KEV4
ZWNTdGF0ZSogZXhlYykKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhbGdvcml0aG0t
PmRpZ2VzdCgqcGFyYW1ldGVycywgZGF0YSwgV1RGOjptb3ZlKHN1Y2Nlc3NDYWxsYmFjayksIFdU
Rjo6bW92ZShmYWlsdXJlQ2FsbGJhY2spLCBlYyk7CiAgICAgaWYgKGVjKSB7Ci0gICAgICAgIHNl
dERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUs
IGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgcmV0dXJu
IHByb21pc2VEZWZlcnJlZC0+cHJvbWlzZSgpOwogfQogCi1KU1ZhbHVlIEpTU3VidGxlQ3J5cHRv
OjpnZW5lcmF0ZUtleShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjpn
ZW5lcmF0ZUtleShFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgPCAxKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVj
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAgaWYgKHN0YXRlLmFy
Z3VtZW50Q291bnQoKSA8IDEpCisgICAgICAgIHJldHVybiBzdGF0ZS52bSgpLnRocm93RXhjZXB0
aW9uKCZzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKLSAg
ICBhdXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29y
aXRobUZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAg
aWYgKCFhbGdvcml0aG0pIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsK
KyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgYXV0byBwYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdv
cml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yR2VuZXJhdGVLZXkoZXhlYywgYWxn
b3JpdGhtLT5pZGVudGlmaWVyKCksIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBh
dXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFt
ZXRlcnNGb3JHZW5lcmF0ZUtleSgmc3RhdGUsIGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0
ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgaWYgKCFwYXJhbWV0ZXJzKSB7Ci0gICAgICAg
IEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRF
eGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAg
IGJvb2wgZXh0cmFjdGFibGUgPSBmYWxzZTsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
ID49IDIpIHsKLSAgICAgICAgZXh0cmFjdGFibGUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgx
KS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID49IDIpIHsKKyAgICAgICAgZXh0cmFjdGFibGUg
PSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKS50b0Jvb2xlYW4oJnN0YXRlKTsKKyAgICAgICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgfQogCiAgICAgQ3J5cHRvS2V5VXNhZ2Uga2V5VXNhZ2VzID0gMDsKLSAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDMpIHsKLSAgICAgICAgaWYgKCFjcnlwdG9LZXlVc2Fn
ZXNGcm9tSlNWYWx1ZShleGVjLCBleGVjLT5hcmd1bWVudCgyKSwga2V5VXNhZ2VzKSkgewotICAg
ICAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBpZiAoc3RhdGUuYXJn
dW1lbnRDb3VudCgpID49IDMpIHsKKyAgICAgICAgaWYgKCFjcnlwdG9LZXlVc2FnZXNGcm9tSlNW
YWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMiksIGtleVVzYWdlcykpIHsKKyAgICAgICAgICAg
IEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9t
aXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVj
dCgpKTsKLSAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcihleGVjLCBnbG9iYWxPYmplY3QoKSwg
cHJvbWlzZURlZmVycmVkKTsKKyAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVk
ID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKKyAg
ICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNl
RGVmZXJyZWQpOwogICAgIGF1dG8gc3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKENyeXB0b0tl
eSoga2V5LCBDcnlwdG9LZXlQYWlyKiBrZXlQYWlyKSBtdXRhYmxlIHsKICAgICAgICAgQVNTRVJU
KGtleSB8fCBrZXlQYWlyKTsKICAgICAgICAgQVNTRVJUKCFrZXkgfHwgIWtleVBhaXIpOwpAQCAt
NDM2LDE0ICs0MzYsMTQgQEAgSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6Z2VuZXJhdGVLZXkoRXhl
Y1N0YXRlKiBleGVjKQogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGFsZ29yaXRobS0+
Z2VuZXJhdGVLZXkoKnBhcmFtZXRlcnMsIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIFdURjo6bW92
ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEY6Om1vdmUoZmFpbHVyZUNhbGxiYWNrKSwgZWMpOwogICAg
IGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBz
ZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgIH0KIAogICAgIHJldHVybiBwcm9taXNlRGVmZXJyZWQtPnByb21pc2UoKTsKIH0KIAot
c3RhdGljIHZvaWQgaW1wb3J0S2V5KEV4ZWNTdGF0ZSogZXhlYywgQ3J5cHRvS2V5Rm9ybWF0IGtl
eUZvcm1hdCwgQ3J5cHRvT3BlcmF0aW9uRGF0YSBkYXRhLCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRv
QWxnb3JpdGhtPiBhbGdvcml0aG0sIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzPiBwYXJhbWV0ZXJzLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSBrZXlV
c2FnZXMsIENyeXB0b0FsZ29yaXRobTo6S2V5Q2FsbGJhY2sgY2FsbGJhY2ssIENyeXB0b0FsZ29y
aXRobTo6Vm9pZENhbGxiYWNrIGZhaWx1cmVDYWxsYmFjaykKK3N0YXRpYyB2b2lkIGltcG9ydEtl
eShFeGVjU3RhdGUmIHN0YXRlLCBDcnlwdG9LZXlGb3JtYXQga2V5Rm9ybWF0LCBDcnlwdG9PcGVy
YXRpb25EYXRhIGRhdGEsIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG0+IGFsZ29yaXRo
bSwgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IHBhcmFtZXRlcnMs
IGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlIGtleVVzYWdlcywgQ3J5cHRvQWxnb3Jp
dGhtOjpLZXlDYWxsYmFjayBjYWxsYmFjaywgQ3J5cHRvQWxnb3JpdGhtOjpWb2lkQ2FsbGJhY2sg
ZmFpbHVyZUNhbGxiYWNrKQogewogICAgIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlTZXJpYWxp
emF0aW9uPiBrZXlTZXJpYWxpemF0aW9uOwogICAgIHN3aXRjaCAoa2V5Rm9ybWF0KSB7CkBAIC00
NTMsMTAyICs0NTMsMTAyIEBAIHN0YXRpYyB2b2lkIGltcG9ydEtleShFeGVjU3RhdGUqIGV4ZWMs
IENyeXB0b0tleUZvcm1hdCBrZXlGb3JtYXQsIENyeXB0b09wZXJhdGlvCiAgICAgY2FzZSBDcnlw
dG9LZXlGb3JtYXQ6OkpXSzogewogICAgICAgICBTdHJpbmcgandrU3RyaW5nID0gU3RyaW5nOjpm
cm9tVVRGOChkYXRhLmZpcnN0LCBkYXRhLnNlY29uZCk7CiAgICAgICAgIGlmIChqd2tTdHJpbmcu
aXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsICJKV0sgSlNPTiBz
ZXJpYWxpemF0aW9uIGlzIG5vdCB2YWxpZCBVVEYtOCIpOworICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IoJnN0YXRlLCAiSldLIEpTT04gc2VyaWFsaXphdGlvbiBpcyBub3QgdmFsaWQgVVRGLTgi
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBrZXlTZXJpYWxpemF0
aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s+KGV4ZWMs
IGp3a1N0cmluZyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
a2V5U2VyaWFsaXphdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8SlNDcnlwdG9LZXlTZXJpYWxpemF0
aW9uSldLPigmc3RhdGUsIGp3a1N0cmluZyk7CisgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsICJVbnN1cHBvcnRlZCBrZXkgZm9y
bWF0IGZvciBpbXBvcnQiKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCAiVW5zdXBw
b3J0ZWQga2V5IGZvcm1hdCBmb3IgaW1wb3J0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBBU1NFUlQoa2V5U2VyaWFsaXphdGlvbik7CiAKICAgICBpZiAoIWtleVNlcmlhbGl6YXRp
b24tPnJlY29uY2lsZUFsZ29yaXRobShhbGdvcml0aG0sIHBhcmFtZXRlcnMpKSB7Ci0gICAgICAg
IGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihl
eGVjLCAiQWxnb3JpdGhtIHNwZWNpZmllZCBpbiBrZXkgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBv
bmUgcGFzc2VkIHRvIGltcG9ydEtleSBhcyBhcmd1bWVudCIpOworICAgICAgICBpZiAoIXN0YXRl
LmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCAiQWxn
b3JpdGhtIHNwZWNpZmllZCBpbiBrZXkgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBvbmUgcGFzc2Vk
IHRvIGltcG9ydEtleSBhcyBhcmd1bWVudCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAgIHRocm93
VHlwZUVycm9yKGV4ZWMsICJOZWl0aGVyIGtleSBub3IgZnVuY3Rpb24gYXJndW1lbnQgaGFzIGNy
eXB0byBhbGdvcml0aG0gc3BlY2lmaWVkIik7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgIk5laXRoZXIga2V5IG5vciBmdW5jdGlvbiBhcmd1bWVudCBoYXMgY3J5cHRvIGFsZ29yaXRo
bSBzcGVjaWZpZWQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBBU1NFUlQocGFyYW1l
dGVycyk7CiAKICAgICBrZXlTZXJpYWxpemF0aW9uLT5yZWNvbmNpbGVFeHRyYWN0YWJsZShleHRy
YWN0YWJsZSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAga2V5U2VyaWFsaXphdGlvbi0+
cmVjb25jaWxlVXNhZ2VzKGtleVVzYWdlcyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
YXV0byBrZXlEYXRhID0ga2V5U2VyaWFsaXphdGlvbi0+a2V5RGF0YSgpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGFsZ29yaXRobS0+aW1w
b3J0S2V5KCpwYXJhbWV0ZXJzLCAqa2V5RGF0YSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgV1RG
Ojptb3ZlKGNhbGxiYWNrKSwgV1RGOjptb3ZlKGZhaWx1cmVDYWxsYmFjayksIGVjKTsKICAgICBp
ZiAoZWMpCi0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHNldERP
TUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKIH0KIAotSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6aW1w
b3J0S2V5KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OmltcG9ydEtl
eShFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAz
KQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291
bnQoKSA8IDMpCisgICAgICAgIHJldHVybiBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBDcnlwdG9L
ZXlGb3JtYXQga2V5Rm9ybWF0OwotICAgIGlmICghY3J5cHRvS2V5Rm9ybWF0RnJvbUpTVmFsdWUo
ZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIGtleUZvcm1hdCkpIHsKLSAgICAgICAgQVNTRVJUKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBpZiAoIWNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVl
KHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwga2V5Rm9ybWF0KSkgeworICAgICAgICBBU1NFUlQo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICB9CiAKICAgICBDcnlwdG9PcGVyYXRpb25EYXRhIGRhdGE7Ci0gICAgaWYgKCFjcnlwdG9PcGVy
YXRpb25EYXRhRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSksIGRh
dGEpKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgaWYgKCFj
cnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1
bWVudCgxKSwgZGF0YSkpIHsKKyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgc3RkOjp1bmlxdWVf
cHRyPENyeXB0b0FsZ29yaXRobT4gYWxnb3JpdGhtOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBwYXJhbWV0ZXJzOwotICAgIGlmICghZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMikuaXNOdWxsKCkpIHsKLSAgICAgICAgYWxnb3JpdGhtID0gY3JlYXRlQWxn
b3JpdGhtRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMikpOworICAg
IGlmICghc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMikuaXNOdWxsKCkpIHsKKyAgICAgICAgYWxn
b3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tl
ZEFyZ3VtZW50KDIpKTsKICAgICAgICAgaWYgKCFhbGdvcml0aG0pIHsKLSAgICAgICAgICAgIEFT
U0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgICAgICBBU1NFUlQoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAg
IH0KLSAgICAgICAgcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3Jl
YXRlUGFyYW1ldGVyc0ZvckltcG9ydEtleShleGVjLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwg
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMikpOworICAgICAgICBwYXJhbWV0ZXJzID0gSlNDcnlw
dG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9ySW1wb3J0S2V5KCZzdGF0
ZSwgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsK
ICAgICAgICAgaWYgKCFwYXJhbWV0ZXJzKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpOworICAgICAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsK
ICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICB9CiAgICAgfQogCiAg
ICAgYm9vbCBleHRyYWN0YWJsZSA9IGZhbHNlOwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkgPj0gNCkgewotICAgICAgICBleHRyYWN0YWJsZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDMpLnRvQm9vbGVhbihleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPj0gNCkgeworICAgICAgICBleHRyYWN0YWJs
ZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDMpLnRvQm9vbGVhbigmc3RhdGUpOworICAgICAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICB9CiAKICAgICBDcnlwdG9LZXlVc2FnZSBrZXlVc2FnZXMgPSAwOwotICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gNSkgewotICAgICAgICBpZiAoIWNyeXB0b0tleVVz
YWdlc0Zyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDQpLCBrZXlVc2FnZXMpKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIGlmIChzdGF0ZS5h
cmd1bWVudENvdW50KCkgPj0gNSkgeworICAgICAgICBpZiAoIWNyeXB0b0tleVVzYWdlc0Zyb21K
U1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCg0KSwga2V5VXNhZ2VzKSkgeworICAgICAgICAg
ICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgSlNQcm9taXNlRGVmZXJyZWQqIHBy
b21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2Jq
ZWN0KCkpOwotICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVyKGV4ZWMsIGdsb2JhbE9iamVjdCgp
LCBwcm9taXNlRGVmZXJyZWQpOworICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJy
ZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOwor
ICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVyKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21p
c2VEZWZlcnJlZCk7CiAgICAgYXV0byBzdWNjZXNzQ2FsbGJhY2sgPSBbd3JhcHBlcl0oQ3J5cHRv
S2V5JiByZXN1bHQpIG11dGFibGUgewogICAgICAgICB3cmFwcGVyLnJlc29sdmUoJnJlc3VsdCk7
CiAgICAgfTsKQEAgLTU1NiwxNyArNTU2LDE3IEBAIEpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86Omlt
cG9ydEtleShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHdyYXBwZXIucmVqZWN0KG51bGxwdHIp
OwogICAgIH07CiAKLSAgICBXZWJDb3JlOjppbXBvcnRLZXkoZXhlYywga2V5Rm9ybWF0LCBkYXRh
LCBXVEY6Om1vdmUoYWxnb3JpdGhtKSwgV1RGOjptb3ZlKHBhcmFtZXRlcnMpLCBleHRyYWN0YWJs
ZSwga2V5VXNhZ2VzLCBXVEY6Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGOjptb3ZlKGZhaWx1
cmVDYWxsYmFjaykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBXZWJDb3Jl
OjppbXBvcnRLZXkoc3RhdGUsIGtleUZvcm1hdCwgZGF0YSwgV1RGOjptb3ZlKGFsZ29yaXRobSks
IFdURjo6bW92ZShwYXJhbWV0ZXJzKSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgV1RGOjptb3Zl
KHN1Y2Nlc3NDYWxsYmFjayksIFdURjo6bW92ZShmYWlsdXJlQ2FsbGJhY2spKTsKKyAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAg
ICAgcmV0dXJuIHByb21pc2VEZWZlcnJlZC0+cHJvbWlzZSgpOwogfQogCi1zdGF0aWMgdm9pZCBl
eHBvcnRLZXkoRXhlY1N0YXRlKiBleGVjLCBDcnlwdG9LZXlGb3JtYXQga2V5Rm9ybWF0LCBjb25z
dCBDcnlwdG9LZXkmIGtleSwgQ3J5cHRvQWxnb3JpdGhtOjpWZWN0b3JDYWxsYmFjayBjYWxsYmFj
aywgQ3J5cHRvQWxnb3JpdGhtOjpWb2lkQ2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrKQorc3RhdGlj
IHZvaWQgZXhwb3J0S2V5KEV4ZWNTdGF0ZSYgc3RhdGUsIENyeXB0b0tleUZvcm1hdCBrZXlGb3Jt
YXQsIGNvbnN0IENyeXB0b0tleSYga2V5LCBDcnlwdG9BbGdvcml0aG06OlZlY3RvckNhbGxiYWNr
IGNhbGxiYWNrLCBDcnlwdG9BbGdvcml0aG06OlZvaWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2sp
CiB7CiAgICAgaWYgKCFrZXkuZXh0cmFjdGFibGUoKSkgewotICAgICAgICB0aHJvd1R5cGVFcnJv
cihleGVjLCAiS2V5IGlzIG5vdCBleHRyYWN0YWJsZSIpOworICAgICAgICB0aHJvd1R5cGVFcnJv
cigmc3RhdGUsICJLZXkgaXMgbm90IGV4dHJhY3RhYmxlIik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTU4MCw4ICs1ODAsOCBAQCBzdGF0aWMgdm9pZCBleHBvcnRLZXkoRXhlY1N0YXRl
KiBleGVjLCBDcnlwdG9LZXlGb3JtYXQga2V5Rm9ybWF0LCBjb25zdCBDcnlwdG9LZQogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6OkpXSzogewotICAgICAg
ICBTdHJpbmcgcmVzdWx0ID0gSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLOjpzZXJpYWxpemUo
ZXhlYywga2V5KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBT
dHJpbmcgcmVzdWx0ID0gSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLOjpzZXJpYWxpemUoJnN0
YXRlLCBrZXkpOworICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIENTdHJpbmcgdXRmOFN0cmluZyA9IHJlc3VsdC51dGY4KFN0cmlj
dENvbnZlcnNpb24pOwogICAgICAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0QnVmZmVyOwpAQCAt
NTkwLDI4ICs1OTAsMjggQEAgc3RhdGljIHZvaWQgZXhwb3J0S2V5KEV4ZWNTdGF0ZSogZXhlYywg
Q3J5cHRvS2V5Rm9ybWF0IGtleUZvcm1hdCwgY29uc3QgQ3J5cHRvS2UKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsICJVbnN1
cHBvcnRlZCBrZXkgZm9ybWF0IGZvciBleHBvcnQiKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3Io
JnN0YXRlLCAiVW5zdXBwb3J0ZWQga2V5IGZvcm1hdCBmb3IgZXhwb3J0Iik7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIH0KIAotSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6ZXhwb3J0S2V5KEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OmV4cG9ydEtleShFeGVjU3RhdGUm
IHN0YXRlKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAyKQotICAgICAgICBy
ZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihleGVjKSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA8IDIpCisg
ICAgICAgIHJldHVybiBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBDcnlwdG9LZXlGb3JtYXQga2V5
Rm9ybWF0OwotICAgIGlmICghY3J5cHRvS2V5Rm9ybWF0RnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+
YXJndW1lbnQoMCksIGtleUZvcm1hdCkpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKTsKKyAgICBpZiAoIWNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0
ZS5hcmd1bWVudCgwKSwga2V5Rm9ybWF0KSkgeworICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBS
ZWZQdHI8Q3J5cHRvS2V5PiBrZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDEpKTsKKyAgICBSZWZQdHI8Q3J5cHRvS2V5PiBrZXkgPSBKU0NyeXB0b0tl
eTo6dG9XcmFwcGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKICAgICBpZiAoIWtleSkK
LSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm4gdGhy
b3dUeXBlRXJyb3IoJnN0YXRlKTsKIAotICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVm
ZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCgpKTsK
LSAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcihleGVjLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlz
ZURlZmVycmVkKTsKKyAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQ
cm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKKyAgICBEZWZl
cnJlZFdyYXBwZXIgd3JhcHBlcigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJy
ZWQpOwogICAgIGF1dG8gc3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAgd3JhcHBlci5yZXNvbHZlKHJlc3Vs
dCk7CiAgICAgfTsKQEAgLTYxOSw1MiArNjE5LDUyIEBAIEpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86
OmV4cG9ydEtleShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHdyYXBwZXIucmVqZWN0KG51bGxw
dHIpOwogICAgIH07CiAKLSAgICBXZWJDb3JlOjpleHBvcnRLZXkoZXhlYywga2V5Rm9ybWF0LCAq
a2V5LCBXVEY6Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGOjptb3ZlKGZhaWx1cmVDYWxsYmFj
aykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBXZWJDb3JlOjpleHBvcnRL
ZXkoc3RhdGUsIGtleUZvcm1hdCwgKmtleSwgV1RGOjptb3ZlKHN1Y2Nlc3NDYWxsYmFjayksIFdU
Rjo6bW92ZShmYWlsdXJlQ2FsbGJhY2spKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgcmV0dXJuIHByb21pc2VEZWZl
cnJlZC0+cHJvbWlzZSgpOwogfQogCi1KU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjp3cmFwS2V5KEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OndyYXBLZXkoRXhlY1N0YXRl
JiBzdGF0ZSkKIHsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgNCkKLSAgICAgICAg
cmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPCA0KQor
ICAgICAgICByZXR1cm4gc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgQ3J5cHRvS2V5Rm9ybWF0IGtl
eUZvcm1hdDsKLSAgICBpZiAoIWNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMt
PmFyZ3VtZW50KDApLCBrZXlGb3JtYXQpKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNl
cHRpb24oKSk7CisgICAgaWYgKCFjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShzdGF0ZSwgc3Rh
dGUuYXJndW1lbnQoMCksIGtleUZvcm1hdCkpIHsKKyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAg
UmVmUHRyPENyeXB0b0tleT4ga2V5ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBlZChleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgxKSk7CisgICAgUmVmUHRyPENyeXB0b0tleT4ga2V5ID0gSlNDcnlwdG9L
ZXk6OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSk7CiAgICAgaWYgKCFrZXkp
Ci0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKCZzdGF0ZSk7CiAKLSAgICBSZWZQdHI8Q3J5cHRvS2V5PiB3cmFwcGluZ0tl
eSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMikpOwor
ICAgIFJlZlB0cjxDcnlwdG9LZXk+IHdyYXBwaW5nS2V5ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBl
ZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSk7CiAgICAgaWYgKCFrZXkpCi0gICAgICAgIHJl
dHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9y
KCZzdGF0ZSk7CiAKICAgICBpZiAoIXdyYXBwaW5nS2V5LT5hbGxvd3MoQ3J5cHRvS2V5VXNhZ2VX
cmFwS2V5KSkgewogICAgICAgICBtX2ltcGwtPmRvY3VtZW50KCktPmFkZENvbnNvbGVNZXNzYWdl
KE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBBU0NJSUxpdGVyYWwoIktl
eSB1c2FnZXMgZG8gbm90IGluY2x1ZGUgJ3dyYXBLZXknIikpOwotICAgICAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgTk9UX1NVUFBPUlRFRF9FUlIpOworICAgICAgICBzZXRET01FeGNlcHRpb24o
JnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VSUik7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgIH0KIAotICAgIGF1dG8gYWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFs
dWUoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMykpOworICAgIGF1dG8gYWxnb3JpdGht
ID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3Vt
ZW50KDMpKTsKICAgICBpZiAoIWFsZ29yaXRobSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBhdXRvIHBhcmFtZXRlcnMg
PSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JFbmNyeXB0
KGV4ZWMsIGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgz
KSk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5Ojpj
cmVhdGVQYXJhbWV0ZXJzRm9yRW5jcnlwdCgmc3RhdGUsIGFsZ29yaXRobS0+aWRlbnRpZmllcigp
LCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgzKSk7CiAgICAgaWYgKCFwYXJhbWV0ZXJzKSB7Ci0g
ICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChzdGF0
ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0K
IAotICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZl
cnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCgpKTsKLSAgICBEZWZlcnJlZFdyYXBwZXIg
d3JhcHBlcihleGVjLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKKyAgICBKU1By
b21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0
ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKKyAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcigm
c3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwogCiAgICAgQ3J5cHRvQWxn
b3JpdGhtKiBhbGdvcml0aG1QdHIgPSBhbGdvcml0aG0ucmVsZWFzZSgpOwogICAgIENyeXB0b0Fs
Z29yaXRobVBhcmFtZXRlcnMqIHBhcmFtZXRlcnNQdHIgPSBwYXJhbWV0ZXJzLnJlbGVhc2UoKTsK
QEAgLTY5NSw5MCArNjk1LDkwIEBAIEpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OndyYXBLZXkoRXhl
Y1N0YXRlKiBleGVjKQogICAgIH07CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBX
ZWJDb3JlOjpleHBvcnRLZXkoZXhlYywga2V5Rm9ybWF0LCAqa2V5LCBXVEY6Om1vdmUoZXhwb3J0
U3VjY2Vzc0NhbGxiYWNrKSwgV1RGOjptb3ZlKGV4cG9ydEZhaWx1cmVDYWxsYmFjaykpOworICAg
IFdlYkNvcmU6OmV4cG9ydEtleShzdGF0ZSwga2V5Rm9ybWF0LCAqa2V5LCBXVEY6Om1vdmUoZXhw
b3J0U3VjY2Vzc0NhbGxiYWNrKSwgV1RGOjptb3ZlKGV4cG9ydEZhaWx1cmVDYWxsYmFjaykpOwog
ICAgIGlmIChlYykgewogICAgICAgICBkZWxldGUgYWxnb3JpdGhtUHRyOwogICAgICAgICBkZWxl
dGUgcGFyYW1ldGVyc1B0cjsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICB9CiAKICAgICByZXR1cm4gcHJvbWlzZURlZmVycmVkLT5wcm9taXNlKCk7
CiB9CiAKLUpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OnVud3JhcEtleShFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjp1bndyYXBLZXkoRXhlY1N0YXRlJiBzdGF0ZSkKIHsK
LSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgNSkKLSAgICAgICAgcmV0dXJuIGV4ZWMt
PnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
ZXhlYykpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPCA1KQorICAgICAgICByZXR1
cm4gc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgQ3J5cHRvS2V5Rm9ybWF0IGtleUZvcm1hdDsKLSAg
ICBpZiAoIWNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDAp
LCBrZXlGb3JtYXQpKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7Cisg
ICAgaWYgKCFjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQo
MCksIGtleUZvcm1hdCkpIHsKKyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgQ3J5cHRvT3BlcmF0
aW9uRGF0YSB3cmFwcGVkS2V5RGF0YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9t
SlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgd3JhcHBlZEtleURhdGEp
KSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgaWYgKCFjcnlw
dG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgxKSwgd3JhcHBlZEtleURhdGEpKSB7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRp
b24oKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIFJlZlB0
cjxDcnlwdG9LZXk+IHVud3JhcHBpbmdLZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKKyAgICBSZWZQdHI8Q3J5cHRvS2V5PiB1bndyYXBwaW5n
S2V5ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSk7
CiAgICAgaWYgKCF1bndyYXBwaW5nS2V5KQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3Io
ZXhlYyk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOwogCiAgICAgaWYg
KCF1bndyYXBwaW5nS2V5LT5hbGxvd3MoQ3J5cHRvS2V5VXNhZ2VVbndyYXBLZXkpKSB7CiAgICAg
ICAgIG1faW1wbC0+ZG9jdW1lbnQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6
SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiS2V5IHVzYWdlcyBkbyBub3Qg
aW5jbHVkZSAndW53cmFwS2V5JyIpKTsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIE5P
VF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgTk9UX1NV
UFBPUlRFRF9FUlIpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtPiB1bndyYXBBbGdvcml0aG07CiAgICAg
c3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IHVud3JhcEFsZ29yaXRo
bVBhcmFtZXRlcnM7Ci0gICAgdW53cmFwQWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpT
VmFsdWUoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMykpOworICAgIHVud3JhcEFsZ29y
aXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRB
cmd1bWVudCgzKSk7CiAgICAgaWYgKCF1bndyYXBBbGdvcml0aG0pIHsKLSAgICAgICAgQVNTRVJU
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQotICAgIHVud3JhcEFs
Z29yaXRobVBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBh
cmFtZXRlcnNGb3JEZWNyeXB0KGV4ZWMsIHVud3JhcEFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgzKSk7CisgICAgdW53cmFwQWxnb3JpdGhtUGFyYW1ldGVy
cyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckRlY3J5
cHQoJnN0YXRlLCB1bndyYXBBbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2Vk
QXJndW1lbnQoMykpOwogICAgIGlmICghdW53cmFwQWxnb3JpdGhtUGFyYW1ldGVycykgewotICAg
ICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtPiB1bndyYXBwZWRLZXlBbGdvcml0
aG07CiAgICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IHVud3Jh
cHBlZEtleUFsZ29yaXRobVBhcmFtZXRlcnM7Ci0gICAgaWYgKCFleGVjLT51bmNoZWNrZWRBcmd1
bWVudCg0KS5pc051bGwoKSkgewotICAgICAgICB1bndyYXBwZWRLZXlBbGdvcml0aG0gPSBjcmVh
dGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCg0KSk7
CisgICAgaWYgKCFzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCg0KS5pc051bGwoKSkgeworICAgICAg
ICB1bndyYXBwZWRLZXlBbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0
ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoNCkpOwogICAgICAgICBpZiAoIXVud3JhcHBlZEtl
eUFsZ29yaXRobSkgewotICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsK
KyAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgfQotICAgICAgICB1bndyYXBwZWRLZXlBbGdv
cml0aG1QYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJh
bWV0ZXJzRm9ySW1wb3J0S2V5KGV4ZWMsIHVud3JhcHBlZEtleUFsZ29yaXRobS0+aWRlbnRpZmll
cigpLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCg0KSk7CisgICAgICAgIHVud3JhcHBlZEtleUFs
Z29yaXRobVBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBh
cmFtZXRlcnNGb3JJbXBvcnRLZXkoJnN0YXRlLCB1bndyYXBwZWRLZXlBbGdvcml0aG0tPmlkZW50
aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoNCkpOwogICAgICAgICBpZiAoIXVud3Jh
cHBlZEtleUFsZ29yaXRobVBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgIEFTU0VSVChleGVjLT5o
YWRFeGNlcHRpb24oKSk7CisgICAgICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
OwogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KICAgICB9CiAK
ICAgICBib29sIGV4dHJhY3RhYmxlID0gZmFsc2U7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA+PSA2KSB7Ci0gICAgICAgIGV4dHJhY3RhYmxlID0gZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoNSkudG9Cb29sZWFuKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+PSA2KSB7CisgICAgICAgIGV4dHJhY3Rh
YmxlID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoNSkudG9Cb29sZWFuKCZzdGF0ZSk7CisgICAg
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgIH0KIAogICAgIENyeXB0b0tleVVzYWdlIGtleVVzYWdlcyA9IDA7Ci0gICAg
aWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSA3KSB7Ci0gICAgICAgIGlmICghY3J5cHRvS2V5
VXNhZ2VzRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+YXJndW1lbnQoNiksIGtleVVzYWdlcykpIHsK
LSAgICAgICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgaWYgKHN0YXRl
LmFyZ3VtZW50Q291bnQoKSA+PSA3KSB7CisgICAgICAgIGlmICghY3J5cHRvS2V5VXNhZ2VzRnJv
bUpTVmFsdWUoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDYpLCBrZXlVc2FnZXMpKSB7CisgICAgICAg
ICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBKU1Byb21pc2VEZWZlcnJlZCog
cHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxP
YmplY3QoKSk7Ci0gICAgRGVmZXJyZWRXcmFwcGVyIHdyYXBwZXIoZXhlYywgZ2xvYmFsT2JqZWN0
KCksIHByb21pc2VEZWZlcnJlZCk7Ci0gICAgU3Ryb25nPEpTRE9NR2xvYmFsT2JqZWN0PiBkb21H
bG9iYWxPYmplY3QoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0KCkpOworICAgIEpTUHJvbWlzZURl
ZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0
ZSwgZ2xvYmFsT2JqZWN0KCkpOworICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVyKCZzdGF0ZSwg
Z2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CisgICAgU3Ryb25nPEpTRE9NR2xvYmFs
T2JqZWN0PiBkb21HbG9iYWxPYmplY3Qoc3RhdGUudm0oKSwgZ2xvYmFsT2JqZWN0KCkpOwogCiAg
ICAgQ3J5cHRvQWxnb3JpdGhtKiB1bndyYXBwZWRLZXlBbGdvcml0aG1QdHIgPSB1bndyYXBwZWRL
ZXlBbGdvcml0aG0ucmVsZWFzZSgpOwogICAgIENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMqIHVu
d3JhcHBlZEtleUFsZ29yaXRobVBhcmFtZXRlcnNQdHIgPSB1bndyYXBwZWRLZXlBbGdvcml0aG1Q
YXJhbWV0ZXJzLnJlbGVhc2UoKTsKQEAgLTc5MCwxMSArNzkwLDExIEBAIEpTVmFsdWUgSlNTdWJ0
bGVDcnlwdG86OnVud3JhcEtleShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIGF1dG8gaW1wb3J0
RmFpbHVyZUNhbGxiYWNrID0gW3dyYXBwZXJdKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICB3cmFw
cGVyLnJlamVjdChudWxscHRyKTsKICAgICAgICAgfTsKLSAgICAgICAgRXhlY1N0YXRlKiBleGVj
ID0gZG9tR2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIFdlYkNvcmU6OmltcG9y
dEtleShleGVjLCBrZXlGb3JtYXQsIHN0ZDo6bWFrZV9wYWlyKHJlc3VsdC5kYXRhKCksIHJlc3Vs
dC5zaXplKCkpLCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtPih1bndyYXBwZWRLZXlB
bGdvcml0aG1QdHIpLCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4o
dW53cmFwcGVkS2V5QWxnb3JpdGhtUGFyYW1ldGVyc1B0ciksIGV4dHJhY3RhYmxlLCBrZXlVc2Fn
ZXMsIFdURjo6bW92ZShpbXBvcnRTdWNjZXNzQ2FsbGJhY2spLCBXVEY6Om1vdmUoaW1wb3J0RmFp
bHVyZUNhbGxiYWNrKSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAg
ICAgICBFeGVjU3RhdGUmIHN0YXRlID0gKmRvbUdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwor
ICAgICAgICBXZWJDb3JlOjppbXBvcnRLZXkoc3RhdGUsIGtleUZvcm1hdCwgc3RkOjptYWtlX3Bh
aXIocmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSksIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9B
bGdvcml0aG0+KHVud3JhcHBlZEtleUFsZ29yaXRobVB0ciksIHN0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXJzPih1bndyYXBwZWRLZXlBbGdvcml0aG1QYXJhbWV0ZXJzUHRy
KSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgV1RGOjptb3ZlKGltcG9ydFN1Y2Nlc3NDYWxsYmFj
ayksIFdURjo6bW92ZShpbXBvcnRGYWlsdXJlQ2FsbGJhY2spKTsKKyAgICAgICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogUmVwb3J0IGV4Y2VwdGlv
biBkZXRhaWxzIHRvIGNvbnNvbGUsIGFuZCBwb3NzaWJseSB0byBjYWxsaW5nIHNjcmlwdCBvbmNl
IHRoZXJlIGlzIGEgc3RhbmRhcmRpemVkIHdheSB0byBwYXNzIGVycm9ycyB0byBXZWJDcnlwdG8g
cHJvbWlzZSByZWplY3QgZnVuY3Rpb25zLgotICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRp
b24oKTsKKyAgICAgICAgICAgIHN0YXRlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICBp
bXBvcnRGYWlsdXJlQ2FsbGJhY2soKTsKICAgICAgICAgfQogICAgIH07CkBAIC04MTAsNyArODEw
LDcgQEAgSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6dW53cmFwS2V5KEV4ZWNTdGF0ZSogZXhlYykK
ICAgICBpZiAoZWMpIHsKICAgICAgICAgZGVsZXRlIHVud3JhcHBlZEtleUFsZ29yaXRobVB0cjsK
ICAgICAgICAgZGVsZXRlIHVud3JhcHBlZEtleUFsZ29yaXRobVBhcmFtZXRlcnNQdHI7Ci0gICAg
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigm
c3RhdGUsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1c3RvbS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1c3RvbS5jcHAKaW5kZXgg
MTg4NWM1NzdlNTI1OGFlM2RlNWQyZDJkMmFkZmNiMzA5MzkxZmY3Ny4uZWIxOWYyNTc4NzE5OWYx
ZTcwZTk5YWY3YWQyZmIwNDI3Y2U5Zjc1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcApAQCAtNDEsMjggKzQxLDI4IEBAIHZvaWQgSlNU
ZXh0VHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZpbXBsKCkpKTsKIH0KIAotdm9pZCBKU1Rl
eHRUcmFjazo6c2V0S2luZChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit2b2lkIEpT
VGV4dFRyYWNrOjpzZXRLaW5kKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAj
aWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKLSAgICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7Cisg
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbCgp
LnNldEtpbmQoc3RyaW5nKTsKICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKICNlbmRpZgogfQog
Ci12b2lkIEpTVGV4dFRyYWNrOjpzZXRMYW5ndWFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dmFsdWUpCit2b2lkIEpTVGV4dFRyYWNrOjpzZXRMYW5ndWFnZShFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQogewogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCi0gICAgYXV0byYgc3Ry
aW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUp
LT52YWx1ZSgmc3RhdGUpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
cmV0dXJuOwogICAgIGltcGwoKS5zZXRMYW5ndWFnZShzdHJpbmcpOwogI2Vsc2UKLSAgICBVTlVT
RURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odmFsdWUpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1RyYWNrRXZlbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNUcmFja0V2ZW50Q3VzdG9tLmNwcAppbmRleCA5NzllZTJhMzIwOWJmMmYwM2Y1ZDc4N2IwOWM1
ZWEzMWNiNDEzMzA4Li5mNTFkM2I5NjNjODE4MDNjZmU3MWI5NDdiNDJjOWRiZDAyYmI4NWJlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyYWNrRXZlbnRDdXN0b20u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJhY2tFdmVudEN1c3RvbS5j
cHAKQEAgLTM2LDEzICszNiwxMyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNUcmFja0V2ZW50Ojp0cmFjayhFeGVjU3RhdGUqIGV4ZWMp
IGNvbnN0CitKU1ZhbHVlIEpTVHJhY2tFdmVudDo6dHJhY2soRXhlY1N0YXRlJiBzdGF0ZSkgY29u
c3QKIHsKICAgICBUcmFja0Jhc2UqIHRyYWNrID0gaW1wbCgpLnRyYWNrKCk7CiAgICAgaWYgKCF0
cmFjaykKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCi0gICAgcmV0dXJuIHRvSlMoZXhlYywg
Z2xvYmFsT2JqZWN0KCksIHRyYWNrKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9i
amVjdCgpLCB0cmFjayk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCmluZGV4IDk0ODY3
ODhhNjZiMjQyMTM3N2RhYzUxMDZiNmJmNTUyNjc2MjdmMDAuLjZmMGFmNWFmNWE4ZWExZTFlYTdl
NWZlMTkxZTBjODA3YzIwNDFlOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcApAQCAtNDAsMjggKzQwLDI4IEBAIHZvaWQgSlNWaWRl
b1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmaW1wbCgpKSk7CiB9CiAKLXZvaWQgSlNWaWRl
b1RyYWNrOjpzZXRLaW5kKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNW
aWRlb1RyYWNrOjpzZXRLaW5kKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAj
aWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKLSAgICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7Cisg
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbCgp
LnNldEtpbmQoc3RyaW5nKTsKICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKICNlbmRpZgogfQog
Ci12b2lkIEpTVmlkZW9UcmFjazo6c2V0TGFuZ3VhZ2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHZhbHVlKQordm9pZCBKU1ZpZGVvVHJhY2s6OnNldExhbmd1YWdlKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVmFsdWUgdmFsdWUpCiB7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKLSAgICBhdXRvJiBz
dHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCZzdGF0
ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm47CiAgICAgaW1wbCgpLnNldExhbmd1YWdlKHN0cmluZyk7CiAjZWxzZQotICAgIFVO
VVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh2YWx1ZSk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwCmlu
ZGV4IDI3MGIxMjBhMjNlY2Y4ZmYzNjkyYjQ5YmQ1YzZkMjA1MDQ2NmQ0MmEuLjRlNGU1Y2E5OGZj
MTQ5MDJhMmNjMDAwYjZhYjA2Mzg5MGEyMWIxNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZUN1c3RvbS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3Vz
dG9tLmNwcApAQCAtMTY4LDE4ICsxNjgsMTggQEAgZW51bSBPYmplY3RUeXBlIHsKICAgICBrQnVm
ZmVyLCBrUmVuZGVyYnVmZmVyLCBrVGV4dHVyZSwga1ZlcnRleEF0dHJpYgogfTsKIAotc3RhdGlj
IEpTVmFsdWUgZ2V0T2JqZWN0UGFyYW1ldGVyKEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSog
b2JqLCBFeGVjU3RhdGUqIGV4ZWMsIE9iamVjdFR5cGUgb2JqZWN0VHlwZSkKK3N0YXRpYyBKU1Zh
bHVlIGdldE9iamVjdFBhcmFtZXRlcihKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIG9iaiwg
RXhlY1N0YXRlJiBzdGF0ZSwgT2JqZWN0VHlwZSBvYmplY3RUeXBlKQogewotICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgIT0gMikKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dF
eGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAg
IGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgIT0gMikKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZt
KCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigm
c3RhdGUpKTsKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gb2JqLT5pbXBsKCk7Ci0gICAgdW5zaWduZWQgdGFy
Z2V0ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgdW5zaWduZWQgdGFyZ2V0ID0gc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoMCkudG9JbnQzMigmc3RhdGUpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgdW5zaWduZWQgcG5hbWUg
PSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICB1bnNpZ25lZCBwbmFtZSA9IHN0YXRlLnVuY2hlY2tlZEFy
Z3VtZW50KDEpLnRvSW50MzIoJnN0YXRlKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMR2V0SW5mbyBpbmZvOwog
ICAgIHN3aXRjaCAob2JqZWN0VHlwZSkgewpAQCAtMjAxLDEwICsyMDEsMTAgQEAgc3RhdGljIEpT
VmFsdWUgZ2V0T2JqZWN0UGFyYW1ldGVyKEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogb2Jq
LCBFeGVjU3RhdGUqIGUKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGlmIChlYykgewotICAg
ICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBzZXRET01FeGNlcHRpb24o
JnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KLSAgICBy
ZXR1cm4gdG9KUyhleGVjLCBvYmotPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKKyAgICByZXR1cm4g
dG9KUygmc3RhdGUsIG9iai0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwogfQogCiBlbnVtIFdoaWNo
UHJvZ3JhbUNhbGwgewpAQCAtMjY4LDEzNyArMjY4LDEzNyBAQCB2b2lkIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZpbXBsKCkpOwogfQogCi1KU1ZhbHVlIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0YWNoZWRTaGFkZXJzKEV4ZWNTdGF0ZSog
ZXhlYykKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRBdHRhY2hlZFNo
YWRlcnMoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
IDwgMSkKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlmIChzdGF0ZS5hcmd1bWVu
dENvdW50KCkgPCAxKQorICAgICAgICByZXR1cm4gc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigm
c3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQg
PSBpbXBsKCk7Ci0gICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRv
V3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFwcm9ncmFtICYm
ICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFt
ID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7
CisgICAgaWYgKCFwcm9ncmFtICYmICFzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKICAg
ICBWZWN0b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4gc2hhZGVyczsKICAgICBib29sIHN1Y2NlZWQg
PSBjb250ZXh0LmdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBzaGFkZXJzLCBlYyk7CiAgICAg
aWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHNl
dERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAg
IH0KICAgICBpZiAoIXN1Y2NlZWQpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICBKU0M6
Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CiAgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8
IHNoYWRlcnMuc2l6ZSgpOyArK2lpKQotICAgICAgICBsaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGds
b2JhbE9iamVjdCgpLCBzaGFkZXJzW2lpXS5nZXQoKSkpOwotICAgIHJldHVybiBjb25zdHJ1Y3RB
cnJheShleGVjLCAwLCBnbG9iYWxPYmplY3QoKSwgbGlzdCk7CisgICAgICAgIGxpc3QuYXBwZW5k
KHRvSlMoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgc2hhZGVyc1tpaV0uZ2V0KCkpKTsKKyAgICBy
ZXR1cm4gY29uc3RydWN0QXJyYXkoJnN0YXRlLCAwLCBnbG9iYWxPYmplY3QoKSwgbGlzdCk7CiB9
CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRFeHRlbnNpb24oRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEV4
dGVuc2lvbihFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkgPCAxKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAgaWYgKHN0YXRlLmFyZ3Vt
ZW50Q291bnQoKSA8IDEpCisgICAgICAgIHJldHVybiBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9u
KCZzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAgICAgCiAg
ICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IGltcGwoKTsKLSAgICBjb25z
dCBTdHJpbmcgbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgY29uc3Qg
U3RyaW5nIG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUp
LT52YWx1ZSgmc3RhdGUpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgV2ViR0xFeHRlbnNpb24qIGV4dGVuc2lvbiA9IGNv
bnRleHQuZ2V0RXh0ZW5zaW9uKG5hbWUpOwotICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCgpLCBleHRlbnNpb24pOworICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0
KCksIGV4dGVuc2lvbik7CiB9CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpnZXRCdWZmZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmdldEJ1ZmZlclBhcmFtZXRlcihFeGVjU3RhdGUmIHN0YXRlKQog
ewotICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhlYywga0J1ZmZlcik7Cisg
ICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRlcih0aGlzLCBzdGF0ZSwga0J1ZmZlcik7CiB9CiAK
LUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihFeGVjU3RhdGUm
IHN0YXRlKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMykKLSAgICAgICAg
cmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgIT0gMykK
KyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKICAgICAKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgp
OwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50
MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIHVuc2lnbmVkIHRh
cmdldCA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoJnN0YXRlKTsKKyAgICBp
ZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
ICAgIHVuc2lnbmVkIGF0dGFjaG1lbnQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0lu
dDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICB1bnNpZ25lZCBh
dHRhY2htZW50ID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMigmc3RhdGUpOwor
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7Ci0gICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKS50b0lu
dDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICB1bnNpZ25lZCBw
bmFtZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLnRvSW50MzIoJnN0YXRlKTsKKyAgICBp
ZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQ
YXJhbWV0ZXIodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgZWMpOwogICAgIGlmIChlYykgewot
ICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBzZXRET01FeGNlcHRp
b24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KLSAg
ICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7CisgICAgcmV0dXJuIHRv
SlMoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7CiB9CiAKLUpTVmFsdWUgSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpnZXRQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFBhcmFtZXRlcihFeGVjU3RhdGUmIHN0
YXRlKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMSkKLSAgICAgICAgcmV0
dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoZXhlYykpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgIT0gMSkKKyAg
ICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgpOwot
ICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihl
eGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgdW5zaWduZWQgcG5hbWUg
PSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKCZzdGF0ZSk7CisgICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBX
ZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0UGFyYW1ldGVyKHBuYW1lLCBlYyk7CiAgICAg
aWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHNl
dERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgfQotICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKKyAg
ICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKIH0KIAotSlNWYWx1
ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFByb2dyYW1QYXJhbWV0ZXIoRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFByb2dy
YW1QYXJhbWV0ZXIoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRD
b3VudCgpICE9IDIpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4
ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3RhdGUu
YXJndW1lbnRDb3VudCgpICE9IDIpCisgICAgICAgIHJldHVybiBzdGF0ZS52bSgpLnRocm93RXhj
ZXB0aW9uKCZzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAg
ICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZSYgY29udGV4dCA9IGltcGwoKTsKLSAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBKU1dl
YkdMUHJvZ3JhbTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBp
ZiAoIXByb2dyYW0gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICB1bnNpZ25l
ZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9IEpT
V2ViR0xQcm9ncmFtOjp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOworICAg
IGlmICghcHJvZ3JhbSAmJiAhc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRP
ck51bGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CisgICAgdW5z
aWduZWQgcG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKCZzdGF0ZSk7
CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0UHJvZ3JhbVBhcmFtZXRl
cihwcm9ncmFtLCBwbmFtZSwgZWMpOwogICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgZWMpOworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KLSAgICByZXR1cm4gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7CisgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBnbG9iYWxP
YmplY3QoKSwgaW5mbyk7CiB9CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihFeGVjU3Rh
dGUmIHN0YXRlKQogewotICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhlYywg
a1JlbmRlcmJ1ZmZlcik7CisgICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRlcih0aGlzLCBzdGF0
ZSwga1JlbmRlcmJ1ZmZlcik7CiB9CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpnZXRTaGFkZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFNoYWRlclBhcmFtZXRlcihFeGVjU3RhdGUmIHN0YXRl
KQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKLSAgICAgICAgcmV0dXJu
IGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IoZXhlYykpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgIT0gMikKKyAgICAg
ICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgpOwotICAg
IGlmICghZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSAmJiAh
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaW5oZXJpdHMoSlNXZWJHTFNoYWRlcjo6aW5mbygp
KSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgIFdlYkdMU2hhZGVy
KiBzaGFkZXIgPSBKU1dlYkdMU2hhZGVyOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoMCkpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSku
dG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKCFz
dGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICFzdGF0ZS51
bmNoZWNrZWRBcmd1bWVudCgwKS5pbmhlcml0cyhKU1dlYkdMU2hhZGVyOjppbmZvKCkpKQorICAg
ICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKKyAgICBXZWJHTFNoYWRlciogc2hh
ZGVyID0gSlNXZWJHTFNoYWRlcjo6dG9XcmFwcGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDAp
KTsKKyAgICB1bnNpZ25lZCBwbmFtZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50
MzIoJnN0YXRlKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRTaGFk
ZXJQYXJhbWV0ZXIoc2hhZGVyLCBwbmFtZSwgZWMpOwogICAgIGlmIChlYykgewotICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRl
LCBlYyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KLSAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7CisgICAgcmV0dXJuIHRvSlMoJnN0YXRl
LCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7CiB9CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpnZXRTdXBwb3J0ZWRFeHRlbnNpb25zKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRTdXBwb3J0ZWRFeHRlbnNpb25zKEV4
ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4
dCA9IGltcGwoKTsKICAgICBpZiAoY29udGV4dC5pc0NvbnRleHRMb3N0KCkpCkBAIC00MDYsNTkg
KzQwNiw1OSBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0U3VwcG9y
dGVkRXh0ZW5zaW9ucyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVmVjdG9yPFN0cmluZz4gdmFsdWUg
PSBjb250ZXh0LmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1
ZmZlciBsaXN0OwogICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCB2YWx1ZS5zaXplKCk7ICsr
aWkpCi0gICAgICAgIGxpc3QuYXBwZW5kKGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHZhbHVlW2lp
XSkpOwotICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCAwLCBnbG9iYWxPYmplY3QoKSwg
bGlzdCk7CisgICAgICAgIGxpc3QuYXBwZW5kKGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFs
dWVbaWldKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KCZzdGF0ZSwgMCwgZ2xvYmFsT2Jq
ZWN0KCksIGxpc3QpOwogfQogCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
Z2V0VGV4UGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpnZXRUZXhQYXJhbWV0ZXIoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBy
ZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGtUZXh0dXJlKTsKKyAgICByZXR1
cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIHN0YXRlLCBrVGV4dHVyZSk7CiB9CiAKLUpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRVbmlmb3JtKEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRVbmlmb3JtKEV4ZWNT
dGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQotICAg
ICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSAh
PSAyKQorICAgICAgICByZXR1cm4gc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogICAgIAogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBp
bXBsKCk7Ci0gICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRvV3Jh
cHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFwcm9ncmFtICYmICFl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDEpKTsKLSAgICBpZiAoIWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRBcmd1
bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJy
b3IoZXhlYyk7CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRv
V3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFwcm9ncmFtICYm
ICFzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoc3RhdGUudW5j
aGVja2VkQXJndW1lbnQoMSkpOworICAgIGlmICghbG9jYXRpb24gJiYgIXN0YXRlLnVuY2hlY2tl
ZEFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5
cGVFcnJvcigmc3RhdGUpOwogICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRVbmlm
b3JtKHByb2dyYW0sIGxvY2F0aW9uLCBlYyk7CiAgICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVj
KTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQotICAgIHJldHVybiB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGds
b2JhbE9iamVjdCgpLCBpbmZvKTsKIH0KIAotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmdldFZlcnRleEF0dHJpYihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VmVydGV4QXR0cmliKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7
Ci0gICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVjLCBrVmVydGV4QXR0cmli
KTsKKyAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIHN0YXRlLCBrVmVydGV4QXR0
cmliKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5Pgot
Ym9vbCB0b1ZlY3RvcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlLCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCitib29sIHRvVmVjdG9yKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHk+JiB2ZWN0b3IpCiB7CiAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCiAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFs
dWUpOwotICAgIGludDMyX3QgbGVuZ3RoID0gb2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5w
cm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvSW50MzIoZXhlYyk7CisgICAgaW50MzJfdCBsZW5ndGgg
PSBvYmplY3QtPmdldCgmc3RhdGUsIHN0YXRlLnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50
b0ludDMyKCZzdGF0ZSk7CiAgICAgCiAgICAgaWYgKCF2ZWN0b3IudHJ5UmVzZXJ2ZUNhcGFjaXR5
KGxlbmd0aCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB2ZWN0b3IucmVzaXplKGxlbmd0
aCk7CiAgICAgCiAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgSlNDOjpKU1ZhbHVlIHYgPSBvYmplY3QtPmdldChleGVjLCBpKTsKLSAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBKU0M6OkpTVmFsdWUgdiA9IG9iamVjdC0+
Z2V0KCZzdGF0ZSwgaSk7CisgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdmVjdG9yW2ldID0gc3RhdGljX2Nhc3Q8VD4o
di50b051bWJlcihleGVjKSk7CisgICAgICAgIHZlY3RvcltpXSA9IHN0YXRpY19jYXN0PFQ+KHYu
dG9OdW1iZXIoJnN0YXRlKSk7CiAgICAgfQogICAgIAogICAgIHJldHVybiB0cnVlOwpAQCAtNDg2
LDI2ICs0ODYsMjYgQEAgc3RhdGljIGJvb2wgZnVuY3Rpb25Gb3JVbmlmb3JtKERhdGFGdW5jdGlv
blRvQ2FsbCBmKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIEpTQzo6SlNWYWx1ZSBk
YXRhRnVuY3Rpb25mKERhdGFGdW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkKK3N0YXRpYyBKU0M6OkpTVmFsdWUg
ZGF0YUZ1bmN0aW9uZihEYXRhRnVuY3Rpb25Ub0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0KQogewotICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgIT0gMikKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNl
cHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlm
IChzdGF0ZS5hcmd1bWVudENvdW50KCkgIT0gMikKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCku
dGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3Rh
dGUpKTsKICAgICAKICAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSAwOwogICAg
IGxvbmcgaW5kZXggPSAtMTsKICAgICAKICAgICBpZiAoZnVuY3Rpb25Gb3JVbmlmb3JtKGYpKSB7
Ci0gICAgICAgIGxvY2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICAgICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAg
IHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAgICAgbG9jYXRpb24gPSBKU1dlYkdM
VW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwor
ICAgICAgICBpZiAoIWxvY2F0aW9uICYmICFzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0
ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGluZGV4ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
MCkudG9JbnQzMihleGVjKTsKKyAgICAgICAgaW5kZXggPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgwKS50b0ludDMyKCZzdGF0ZSk7CiAgICAgCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgCi0gICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvRmxv
YXQzMkFycmF5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpICAgIAorICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0
b0Zsb2F0MzJBcnJheShzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTUzNywxMyArNTM3LDEzIEBAIHN0YXRpYyBKU0M6
OkpTVmFsdWUgZGF0YUZ1bmN0aW9uZihEYXRhRnVuY3Rpb25Ub0NhbGwgZiwgSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIFdlCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KCZzdGF0ZSwgZWMpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAgICAg
CiAgICAgVmVjdG9yPGZsb2F0LCA2ND4gYXJyYXk7Ci0gICAgaWYgKCF0b1ZlY3RvcihleGVjLCBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgYXJyYXkpKQotICAgICAgICByZXR1cm4gdGhyb3dU
eXBlRXJyb3IoZXhlYyk7CisgICAgaWYgKCF0b1ZlY3RvcihzdGF0ZSwgc3RhdGUudW5jaGVja2Vk
QXJndW1lbnQoMSksIGFycmF5KSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0
ZSk7CiAgICAgCiAgICAgc3dpdGNoIChmKSB7CiAgICAgY2FzZSBmX3VuaWZvcm0xdjoKQEAgLTU3
MiwyMCArNTcyLDIwIEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uZihEYXRhRnVu
Y3Rpb25Ub0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFdlCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICAKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHNldERPTUV4
Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3Rh
dGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25pKERhdGFGdW5jdGlvblRvQ2FsbCBmLCBKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkKK3N0
YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uaShEYXRhRnVuY3Rpb25Ub0NhbGwgZiwgSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0KQog
ewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKLSAgICAgICAgcmV0dXJuIGV4
ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IoZXhlYykpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgIT0gMikKKyAgICAgICAg
cmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcigmc3RhdGUpKTsKICAgICAKLSAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVF
cnJvcihleGVjKTsKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSBKU1dlYkdM
VW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwor
ICAgIGlmICghbG9jYXRpb24gJiYgIXN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOwogICAg
IAotICAgIFJlZlB0cjxJbnQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9JbnQzMkFycmF5KGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICBSZWZQdHI8SW50MzJBcnJheT4gd2ViR0xBcnJh
eSA9IHRvSW50MzJBcnJheShzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSk7CiAgICAgCiAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaWYgKHdlYkdMQXJyYXkpIHsKQEAgLTYwNiwxNCAr
NjA2LDE0IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uaShEYXRhRnVuY3Rpb25U
b0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFdlCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICB9CiAgICAgCiAgICAgCiAgICAgVmVjdG9yPGludCwgNjQ+IGFycmF5Owot
ICAgIGlmICghdG9WZWN0b3IoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSksIGFycmF5
KSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgIGlmICghdG9WZWN0
b3Ioc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBhcnJheSkpCisgICAgICAgIHJl
dHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOwogICAgIAogICAgIHN3aXRjaCAoZikgewogICAg
IGNhc2UgZl91bmlmb3JtMXY6CkBAIC02MzIsMjQgKzYzMiwyNCBAQCBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGRhdGFGdW5jdGlvbmkoRGF0YUZ1bmN0aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBXZQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCi0gICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uTWF0
cml4KERhdGFGdW5jdGlvbk1hdHJpeFRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkKK3N0YXRpYyBKU0M6OkpTVmFsdWUgZGF0
YUZ1bmN0aW9uTWF0cml4KERhdGFGdW5jdGlvbk1hdHJpeFRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCiB7Ci0gICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAzKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50
aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7
CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSAhPSAzKQorICAgICAgICByZXR1cm4gc3Rh
dGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKCZzdGF0ZSkpOwogICAgIAotICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9
IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7Ci0gICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCku
aXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMp
OworICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9j
YXRpb246OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFs
b2NhdGlvbiAmJiAhc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwo
KSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CiAgICAgCi0gICAgYm9v
bCB0cmFuc3Bvc2UgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKKyAgICBib29sIHRyYW5zcG9zZSA9
IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvQm9vbGVhbigmc3RhdGUpOworICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
Ci0gICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvRmxvYXQzMkFycmF5KGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKKyAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiB3ZWJH
TEFycmF5ID0gdG9GbG9hdDMyQXJyYXkoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMikpOwogICAg
IAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGlmICh3ZWJHTEFycmF5KSB7CkBAIC02
NjUsMTMgKzY2NSwxMyBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbk1hdHJpeChE
YXRhRnVuY3Rpb25NYXRyaXhUb0NhbGwgZiwgSlNDOjpFeGVjU3RhdAogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBl
Yyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgfQogICAgIAogICAgIFZlY3RvcjxmbG9hdCwgNjQ+IGFycmF5
OwotICAgIGlmICghdG9WZWN0b3IoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMiksIGFy
cmF5KSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgIGlmICghdG9W
ZWN0b3Ioc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBhcnJheSkpCisgICAgICAg
IHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOwogICAgIAogICAgIHN3aXRjaCAoZikgewog
ICAgIGNhc2UgZl91bmlmb3JtTWF0cml4MmZ2OgpAQCAtNjg1LDgzICs2ODUsODMgQEAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25NYXRyaXgoRGF0YUZ1bmN0aW9uTWF0cml4VG9DYWxs
IGYsIEpTQzo6RXhlY1N0YXQKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIAotICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwog
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMWZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQorSlNDOjpK
U1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTFmdihKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtMXYsIGV4
ZWMsIGltcGwoKSk7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtMXYsIHN0YXRl
LCBpbXBsKCkpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp1bmlmb3JtMWl2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQorSlNDOjpKU1ZhbHVlIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTFpdihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCiB7
Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtMXYsIGV4ZWMsIGltcGwoKSk7Cisg
ICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtMXYsIHN0YXRlLCBpbXBsKCkpOwogfQog
Ci1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMmZ2KEpT
Qzo6RXhlY1N0YXRlKiBleGVjKQorSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dW5pZm9ybTJmdihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIGRh
dGFGdW5jdGlvbmYoZl91bmlmb3JtMnYsIGV4ZWMsIGltcGwoKSk7CisgICAgcmV0dXJuIGRhdGFG
dW5jdGlvbmYoZl91bmlmb3JtMnYsIHN0YXRlLCBpbXBsKCkpOwogfQogCi1KU0M6OkpTVmFsdWUg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMml2KEpTQzo6RXhlY1N0YXRlKiBl
eGVjKQorSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTJp
dihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91
bmlmb3JtMnYsIGV4ZWMsIGltcGwoKSk7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlm
b3JtMnYsIHN0YXRlLCBpbXBsKCkpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp1bmlmb3JtM2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQorSlNDOjpKU1Zh
bHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNmdihKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtM3YsIGV4ZWMs
IGltcGwoKSk7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtM3YsIHN0YXRlLCBp
bXBsKCkpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1
bmlmb3JtM2l2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQorSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNpdihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0g
ICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtM3YsIGV4ZWMsIGltcGwoKSk7CisgICAg
cmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtM3YsIHN0YXRlLCBpbXBsKCkpOwogfQogCi1K
U0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtNGZ2KEpTQzo6
RXhlY1N0YXRlKiBleGVjKQorSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dW5pZm9ybTRmdihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIGRhdGFG
dW5jdGlvbmYoZl91bmlmb3JtNHYsIGV4ZWMsIGltcGwoKSk7CisgICAgcmV0dXJuIGRhdGFGdW5j
dGlvbmYoZl91bmlmb3JtNHYsIHN0YXRlLCBpbXBsKCkpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtNGl2KEpTQzo6RXhlY1N0YXRlKiBleGVj
KQorSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTRpdihK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlm
b3JtNHYsIGV4ZWMsIGltcGwoKSk7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3Jt
NHYsIHN0YXRlLCBpbXBsKCkpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp1bmlmb3JtTWF0cml4MmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQorSlNDOjpK
U1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybU1hdHJpeDJmdihKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3Vu
aWZvcm1NYXRyaXgyZnYsIGV4ZWMsIGltcGwoKSk7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1h
dHJpeChmX3VuaWZvcm1NYXRyaXgyZnYsIHN0YXRlLCBpbXBsKCkpOwogfQogCi1KU0M6OkpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4M2Z2KEpTQzo6RXhl
Y1N0YXRlKiBleGVjKQorSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dW5pZm9ybU1hdHJpeDNmdihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIGRh
dGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXgzZnYsIGV4ZWMsIGltcGwoKSk7CisgICAg
cmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXgzZnYsIHN0YXRlLCBpbXBs
KCkpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlm
b3JtTWF0cml4NGZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQorSlNDOjpKU1ZhbHVlIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybU1hdHJpeDRmdihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXg0ZnYs
IGV4ZWMsIGltcGwoKSk7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1N
YXRyaXg0ZnYsIHN0YXRlLCBpbXBsKCkpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIxZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCitK
U0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIxZnYo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVy
dGV4QXR0cmliMXYsIGV4ZWMsIGltcGwoKSk7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92
ZXJ0ZXhBdHRyaWIxdiwgc3RhdGUsIGltcGwoKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjJmdihKU0M6OkV4ZWNTdGF0ZSogZXhl
YykKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJp
YjJmdihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYo
Zl92ZXJ0ZXhBdHRyaWIydiwgZXhlYywgaW1wbCgpKTsKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9u
ZihmX3ZlcnRleEF0dHJpYjJ2LCBzdGF0ZSwgaW1wbCgpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliM2Z2KEpTQzo6RXhlY1N0YXRl
KiBleGVjKQorSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4
QXR0cmliM2Z2KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1cm4gZGF0YUZ1bmN0
aW9uZihmX3ZlcnRleEF0dHJpYjN2LCBleGVjLCBpbXBsKCkpOworICAgIHJldHVybiBkYXRhRnVu
Y3Rpb25mKGZfdmVydGV4QXR0cmliM3YsIHN0YXRlLCBpbXBsKCkpOwogfQogCi1KU0M6OkpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWI0ZnYoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2
ZXJ0ZXhBdHRyaWI0ZnYoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIHJldHVybiBkYXRh
RnVuY3Rpb25mKGZfdmVydGV4QXR0cmliNHYsIGV4ZWMsIGltcGwoKSk7CisgICAgcmV0dXJuIGRh
dGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWI0diwgc3RhdGUsIGltcGwoKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV29ya2VyQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2Vy
Q3VzdG9tLmNwcAppbmRleCAyMTc1ZmM2ZTFhMWNlYjU1ZDY4MDgzN2FlZTgxZDQ2ZWZjZTc4ZmNm
Li4wNWE5ZTcwMmU3YzgxOWJmN2I3NTFkOWJlNzdjMTEyYmUzNTk0ZmIzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwCkBAIC00MCw5ICs0MCw5IEBA
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNDOjpKU1Zh
bHVlIEpTV29ya2VyOjpwb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK0pTQzo6SlNW
YWx1ZSBKU1dvcmtlcjo6cG9zdE1lc3NhZ2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQogewotICAg
IHJldHVybiBoYW5kbGVQb3N0TWVzc2FnZShleGVjLCAmaW1wbCgpKTsKKyAgICByZXR1cm4gaGFu
ZGxlUG9zdE1lc3NhZ2Uoc3RhdGUsICZpbXBsKCkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnN0cnVjdEpTV29ya2VyKEV4ZWNTdGF0ZSogZXhlYykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5j
cHAKaW5kZXggODU3ZDQ4MDlhN2QxY2FlZjRiOGM2MWE1NjkwODVlNmI4NmQ1MjAxYS4uMTI4OThj
Yzk3NWJlZjUwMGIzYjEwZGJhZjFmNjUwYTg2ZGMzYzMwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAKQEAg
LTY3LDQzICs2Nyw0MyBAQCBib29sIEpTV29ya2VyR2xvYmFsU2NvcGU6OmdldE93blByb3BlcnR5
U2xvdERlbGVnYXRlKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotSlNWYWx1ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjppbXBvcnRTY3JpcHRzKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNXb3JrZXJHbG9iYWxTY29wZTo6aW1wb3J0U2NyaXB0cyhF
eGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAg
IGlmICghc3RhdGUuYXJndW1lbnRDb3VudCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IHVybHM7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7Ci0gICAgICAgIHVybHMuYXBwZW5kKGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0g
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc3RhdGUuYXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAgdXJscy5hcHBlbmQo
c3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRl
KSk7CisgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIH0KICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKIAogICAg
IGltcGwoKS5pbXBvcnRTY3JpcHRzKHVybHMsIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjpzZXRUaW1lb3V0
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNXb3JrZXJHbG9iYWxTY29wZTo6c2V0VGltZW91
dChFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rp
b24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCgp
LT53b3JsZCgpLCBpbXBsKCkuY29udGVudFNlY3VyaXR5UG9saWN5KCkpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0aW9uPiBh
Y3Rpb24gPSBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLT53
b3JsZCgpLCBpbXBsKCkuY29udGVudFNlY3VyaXR5UG9saWN5KCkpOworICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaWYgKCFh
Y3Rpb24pCiAgICAgICAgIHJldHVybiBqc051bWJlcigwKTsKLSAgICBpbnQgZGVsYXkgPSBleGVj
LT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOworICAgIGludCBkZWxheSA9IHN0YXRlLmFyZ3Vt
ZW50KDEpLnRvSW50MzIoJnN0YXRlKTsKICAgICByZXR1cm4ganNOdW1iZXIoaW1wbCgpLnNldFRp
bWVvdXQoV1RGOjptb3ZlKGFjdGlvbiksIGRlbGF5KSk7CiB9CiAKLUpTVmFsdWUgSlNXb3JrZXJH
bG9iYWxTY29wZTo6c2V0SW50ZXJ2YWwoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1dvcmtl
ckdsb2JhbFNjb3BlOjpzZXRJbnRlcnZhbChFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIHN0ZDo6
dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3Jl
YXRlKGV4ZWMsIGdsb2JhbE9iamVjdCgpLT53b3JsZCgpLCBpbXBsKCkuY29udGVudFNlY3VyaXR5
UG9saWN5KCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8U2NoZWR1bGVkQWN0aW9uPiBhY3Rpb24gPSBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZSgm
c3RhdGUsIGdsb2JhbE9iamVjdCgpLT53b3JsZCgpLCBpbXBsKCkuY29udGVudFNlY3VyaXR5UG9s
aWN5KCkpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgaWYgKCFhY3Rpb24pCiAgICAgICAgIHJldHVybiBqc051bWJlcigw
KTsKLSAgICBpbnQgZGVsYXkgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOworICAg
IGludCBkZWxheSA9IHN0YXRlLmFyZ3VtZW50KDEpLnRvSW50MzIoJnN0YXRlKTsKICAgICByZXR1
cm4ganNOdW1iZXIoaW1wbCgpLnNldEludGVydmFsKFdURjo6bW92ZShhY3Rpb24pLCBkZWxheSkp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBS
ZXF1ZXN0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJl
cXVlc3RDdXN0b20uY3BwCmluZGV4IDBmOWMxY2FmMDAyMmFhZjFlN2E4ZDI0NmQ1ODE1ZmI4MTUy
MDI2Y2UuLjExNTQ1NzQ1MzFkY2ZkNWM5MzdhNjVmOTI1ZDA0MTM2YzA3YjE2ZTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20u
Y3BwCkBAIC03MiwyMiArNzIsMjIgQEAgdm9pZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKIH0KIAogLy8gQ3VzdG9tIGZ1bmN0
aW9ucwotSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0OjpvcGVuKEV4ZWNTdGF0ZSogZXhlYykKK0pT
VmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6b3BlbihFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgPCAyKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50
aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7
CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA8IDIpCisgICAgICAgIHJldHVybiBzdGF0
ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IoJnN0YXRlKSk7CiAKLSAgICBjb25zdCBVUkwmIHVybCA9IGltcGwoKS5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPmNvbXBsZXRlVVJMKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgU3RyaW5nIG1ldGhvZCA9IGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICBjb25zdCBV
UkwmIHVybCA9IGltcGwoKS5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmNvbXBsZXRlVVJMKHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSkp
OworICAgIFN0cmluZyBtZXRob2QgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmlu
Zygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAzKSB7Ci0gICAgICAgIGJvb2wgYXN5bmMg
PSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgICAgIGlm
ICghZXhlYy0+YXJndW1lbnQoMykuaXNVbmRlZmluZWQoKSkgewotICAgICAgICAgICAgU3RyaW5n
IHVzZXIgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCBleGVjLT51bmNoZWNrZWRB
cmd1bWVudCgzKSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+PSAzKSB7CisgICAg
ICAgIGJvb2wgYXN5bmMgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKS50b0Jvb2xlYW4oJnN0
YXRlKTsKKyAgICAgICAgaWYgKCFzdGF0ZS5hcmd1bWVudCgzKS5pc1VuZGVmaW5lZCgpKSB7Cisg
ICAgICAgICAgICBTdHJpbmcgdXNlciA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKCZzdGF0
ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMykpOwogCi0gICAgICAgICAgICBpZiAoIWV4ZWMt
PmFyZ3VtZW50KDQpLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgcGFz
c3dvcmQgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCBleGVjLT51bmNoZWNrZWRB
cmd1bWVudCg0KSk7CisgICAgICAgICAgICBpZiAoIXN0YXRlLmFyZ3VtZW50KDQpLmlzVW5kZWZp
bmVkKCkpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgcGFzc3dvcmQgPSB2YWx1ZVRvU3RyaW5n
V2l0aE51bGxDaGVjaygmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDQpKTsKICAgICAg
ICAgICAgICAgICBpbXBsKCkub3BlbihtZXRob2QsIHVybCwgYXN5bmMsIHVzZXIsIHBhc3N3b3Jk
LCBlYyk7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBpbXBsKCkub3Blbiht
ZXRob2QsIHVybCwgYXN5bmMsIHVzZXIsIGVjKTsKQEAgLTk2LDcgKzk2LDcgQEAgSlNWYWx1ZSBK
U1hNTEh0dHBSZXF1ZXN0OjpvcGVuKEV4ZWNTdGF0ZSogZXhlYykKICAgICB9IGVsc2UKICAgICAg
ICAgaW1wbCgpLm9wZW4obWV0aG9kLCB1cmwsIGVjKTsKIAotICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCkBAIC0xMzYsMTIgKzEzNiwxMiBAQCBwcml2YXRlOgogICAgIFN0
cmluZyBtX3VybDsKIH07CiAKLUpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6c2VuZChFeGVjU3Rh
dGUqIGV4ZWMpCitKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnNlbmQoRXhlY1N0YXRlJiBzdGF0
ZSkKIHsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxTZW5kWE1MSHR0cFJlcXVl
c3QoaW1wbCgpLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgaW1wbCgpLnVybCgpKTsKIAogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIEpTVmFsdWUgdmFsID0gZXhlYy0+YXJndW1lbnQo
MCk7CisgICAgSlNWYWx1ZSB2YWwgPSBzdGF0ZS5hcmd1bWVudCgwKTsKICAgICBpZiAodmFsLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIGltcGwoKS5zZW5kKGVjKTsKICAgICBlbHNlIGlm
ICh2YWwuaW5oZXJpdHMoSlNEb2N1bWVudDo6aW5mbygpKSkKQEAgLTE1NiwyOCArMTU2LDI4IEBA
IEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6c2VuZChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAg
IFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IHZpZXcgPSB0b0FycmF5QnVmZmVyVmlldyh2YWwpOwog
ICAgICAgICBpbXBsKCkuc2VuZCh2aWV3LmdldCgpLCBlYyk7CiAgICAgfSBlbHNlCi0gICAgICAg
IGltcGwoKS5zZW5kKHZhbC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksIGVjKTsKKyAgICAg
ICAgaW1wbCgpLnNlbmQodmFsLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSksIGVjKTsK
IAogICAgIFNlbmRGdW5jdG9yIGZ1bmN0b3I7Ci0gICAgZXhlYy0+aXRlcmF0ZShmdW5jdG9yKTsK
KyAgICBzdGF0ZS5pdGVyYXRlKGZ1bmN0b3IpOwogICAgIGltcGwoKS5zZXRMYXN0U2VuZExpbmVB
bmRDb2x1bW5OdW1iZXIoZnVuY3Rvci5saW5lKCksIGZ1bmN0b3IuY29sdW1uKCkpOwogICAgIGlt
cGwoKS5zZXRMYXN0U2VuZFVSTChmdW5jdG9yLnVybCgpKTsKLSAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZVRl
eHQoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0OjpyZXNw
b25zZVRleHQoRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKICAgICBTdHJpbmcgdGV4dCA9IGltcGwoKS5yZXNwb25zZVRleHQoZWMpOwogICAgIGlm
IChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBzZXRE
T01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIH0KLSAgICByZXR1cm4ganNPd25lZFN0cmluZ09yTnVsbChleGVjLCB0ZXh0KTsKKyAgICBy
ZXR1cm4ganNPd25lZFN0cmluZ09yTnVsbCgmc3RhdGUsIHRleHQpOwogfQogCi1KU1ZhbHVlIEpT
WE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUg
SlNYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2UoRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICAg
ICAvLyBGSVhNRTogVXNlIENhY2hlZEF0dHJpYnV0ZSBmb3Igb3RoZXIgdHlwZXMgdGhhbiBKU09O
IGFzIHdlbGwuCiAgICAgaWYgKG1fcmVzcG9uc2UgJiYgaW1wbCgpLnJlc3BvbnNlQ2FjaGVJc1Zh
bGlkKCkpCkBAIC0xODksMTUgKzE4OSwxNSBAQCBKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnJl
c3BvbnNlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICBzd2l0Y2ggKGltcGwoKS5yZXNwb25z
ZVR5cGVDb2RlKCkpIHsKICAgICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpSZXNwb25zZVR5cGVEZWZh
dWx0OgogICAgIGNhc2UgWE1MSHR0cFJlcXVlc3Q6OlJlc3BvbnNlVHlwZVRleHQ6Ci0gICAgICAg
IHJldHVybiByZXNwb25zZVRleHQoZXhlYyk7CisgICAgICAgIHJldHVybiByZXNwb25zZVRleHQo
c3RhdGUpOwogCiAgICAgY2FzZSBYTUxIdHRwUmVxdWVzdDo6UmVzcG9uc2VUeXBlSlNPTjoKICAg
ICAgICAgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTT05QYXJzZShleGVjLCBpbXBs
KCkucmVzcG9uc2VUZXh0SWdub3JpbmdSZXNwb25zZVR5cGUoKSk7CisgICAgICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gSlNPTlBhcnNlKCZzdGF0ZSwgaW1wbCgpLnJlc3BvbnNlVGV4dElnbm9yaW5n
UmVzcG9uc2VUeXBlKCkpOwogICAgICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgICAg
ICB2YWx1ZSA9IGpzTnVsbCgpOwogICAgICAgICAgICAgSlNYTUxIdHRwUmVxdWVzdCoganNSZXF1
ZXN0ID0gY29uc3RfY2FzdDxKU1hNTEh0dHBSZXF1ZXN0Kj4odGhpcyk7Ci0gICAgICAgICAgICBq
c1JlcXVlc3QtPm1fcmVzcG9uc2Uuc2V0KGV4ZWMtPnZtKCksIGpzUmVxdWVzdCwgdmFsdWUpOwor
ICAgICAgICAgICAganNSZXF1ZXN0LT5tX3Jlc3BvbnNlLnNldChzdGF0ZS52bSgpLCBqc1JlcXVl
c3QsIHZhbHVlKTsKIAogICAgICAgICAgICAgaW1wbCgpLmRpZENhY2hlUmVzcG9uc2VKU09OKCk7
CiAKQEAgLTIwOSwxNyArMjA5LDE3IEBAIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6cmVzcG9u
c2UoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CiAgICAgICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBpbXBsKCkucmVzcG9uc2VYTUwo
ZWMpOwogICAgICAgICAgICAgaWYgKGVjKSB7Ci0gICAgICAgICAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBl
Yyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgZG9jdW1lbnQp
OworICAgICAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgZG9jdW1l
bnQpOwogICAgICAgICB9CiAKICAgICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpSZXNwb25zZVR5cGVC
bG9iOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgpLnJl
c3BvbnNlQmxvYigpKTsKKyAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBnbG9iYWxPYmplY3Qo
KSwgaW1wbCgpLnJlc3BvbnNlQmxvYigpKTsKIAogICAgIGNhc2UgWE1MSHR0cFJlcXVlc3Q6OlJl
c3BvbnNlVHlwZUFycmF5QnVmZmVyOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxP
YmplY3QoKSwgaW1wbCgpLnJlc3BvbnNlQXJyYXlCdWZmZXIoKSk7CisgICAgICAgIHJldHVybiB0
b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIGltcGwoKS5yZXNwb25zZUFycmF5QnVmZmVyKCkp
OwogICAgIH0KIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHAKaW5kZXggZDk4YWUw
NDJlMTJjMDU4MDI2YzVkZTVlMjliMTY2YjdmNTZiODFhYy4uMzMxYjlmMWIwYmJmNTc5YWM0NTJk
MDdlZGMxYjlmNjU4ZmNmNjE1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1hTTFRQcm9jZXNzb3JDdXN0b20uY3BwCkBAIC00NiwzMyArNDYsMzMgQEAgdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTWFNMVFBy
b2Nlc3Nvcjo6c2V0UGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNYU0xUUHJv
Y2Vzc29yOjpzZXRQYXJhbWV0ZXIoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoZXhlYy0+
YXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSB8fCBleGVjLT5hcmd1bWVudCgyKS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQorICAgIGlmIChzdGF0ZS5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9y
TnVsbCgpIHx8IHN0YXRlLmFyZ3VtZW50KDIpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOyAvLyBUaHJvdyBleGNlcHRpb24/Ci0gICAgU3RyaW5nIG5h
bWVzcGFjZVVSSSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKLSAgICBTdHJpbmcgbG9jYWxOYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIFN0cmluZyB2YWx1ZSA9IGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAg
ICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJp
bmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKKyAgICBTdHJpbmcgbG9jYWxOYW1lID0gc3RhdGUu
dW5jaGVja2VkQXJndW1lbnQoMSkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKKyAg
ICBTdHJpbmcgdmFsdWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKS50b1N0cmluZygmc3Rh
dGUpLT52YWx1ZSgmc3RhdGUpOwogICAgIGltcGwoKS5zZXRQYXJhbWV0ZXIobmFtZXNwYWNlVVJJ
LCBsb2NhbE5hbWUsIHZhbHVlKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNW
YWx1ZSBKU1hTTFRQcm9jZXNzb3I6OmdldFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCitKU1Zh
bHVlIEpTWFNMVFByb2Nlc3Nvcjo6Z2V0UGFyYW1ldGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0g
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgaWYgKHN0
YXRlLmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBleGVjLT51bmNoZWNrZWRBcmd1
bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgU3RyaW5nIGxvY2FsTmFt
ZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKKyAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCku
dG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKKyAgICBTdHJpbmcgbG9jYWxOYW1lID0g
c3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRl
KTsKICAgICBTdHJpbmcgdmFsdWUgPSBpbXBsKCkuZ2V0UGFyYW1ldGVyKG5hbWVzcGFjZVVSSSwg
bG9jYWxOYW1lKTsKLSAgICByZXR1cm4ganNTdHJpbmdPclVuZGVmaW5lZChleGVjLCB2YWx1ZSk7
CisgICAgcmV0dXJuIGpzU3RyaW5nT3JVbmRlZmluZWQoJnN0YXRlLCB2YWx1ZSk7CiB9CiAKLUpT
VmFsdWUgSlNYU0xUUHJvY2Vzc29yOjpyZW1vdmVQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6OnJlbW92ZVBhcmFtZXRlcihFeGVjU3RhdGUmIHN0YXRl
KQogewotICAgIGlmIChleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAg
IGlmIChzdGF0ZS5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIFN0cmluZyBs
b2NhbE5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CisgICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3Vt
ZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgU3RyaW5nIGxvY2Fs
TmFtZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVl
KCZzdGF0ZSk7CiAgICAgaW1wbCgpLnJlbW92ZVBhcmFtZXRlcihuYW1lc3BhY2VVUkksIGxvY2Fs
TmFtZSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmluZGV4IGRmNDRkMmZlZGI3
Y2ZmZDFlZjMzNjI5ZTg4ZTUxOGRiOGM4YmZhNDguLmUxOTE1YWEzYTBjZDc0MzQ5YmRlNDkwYzhl
NDY4NDYxNWZiMmQxYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC0xMDc3LDEyICsxMDc3LDEyIEBAIHN1YiBHZW5lcmF0
ZUhlYWRlcgogICAgICAgICAgICAgaWYgKEhhc0N1c3RvbUdldHRlcigkYXR0cmlidXRlLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcykpIHsKICAgICAgICAgICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxT
dHJpbmc7CiAgICAgICAgICAgICAgICAgbXkgJG1ldGhvZE5hbWUgPSAkY29kZUdlbmVyYXRvci0+
V0tfbGNmaXJzdCgkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUpOwotICAgICAgICAgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgSlNDOjpKU1ZhbHVlICIgLiAkbWV0aG9kTmFtZSAu
ICIoSlNDOjpFeGVjU3RhdGUqKSBjb25zdDtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgSlNDOjpKU1ZhbHVlICIgLiAkbWV0aG9kTmFtZSAuICIoSlNDOjpF
eGVjU3RhdGUmKSBjb25zdDtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIjZW5kaWZcbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGlmIChIYXNDdXN0b21TZXR0ZXIoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMpICYmICFJc1JlYWRvbmx5KCRhdHRyaWJ1dGUpKSB7CiAgICAgICAgICAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikg
aWYgJGNvbmRpdGlvbmFsU3RyaW5nOwotICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgdm9pZCBzZXQiIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLT5uYW1lKSAuICIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpO1xu
Iik7CisgICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lkIHNldCIg
LiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUp
IC4gIihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7XG4iKTsKICAgICAgICAgICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2VuZGlmXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTExMTcsNyArMTExNyw3IEBAIHN1YiBHZW5l
cmF0ZUhlYWRlcgogICAgICAgICAgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gJGNvZGVHZW5l
cmF0b3ItPkdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGZ1bmN0aW9uLT5zaWduYXR1cmUpOwog
ICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5n
fVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogICAgICAgICAgICAgbXkgJGZ1bmN0aW9uSW1w
bGVtZW50YXRpb25OYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJJbXBsZW1lbnRlZEFzIn0gfHwgJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGZ1bmN0
aW9uLT5zaWduYXR1cmUtPm5hbWUpOwotICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICAiIC4gKCRmdW5jdGlvbi0+aXNTdGF0aWMgPyAic3RhdGljICIgOiAiIikgLiAiSlNDOjpK
U1ZhbHVlICIgLiAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgLiAiKEpTQzo6RXhlY1N0YXRl
Kik7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgIiAuICgkZnVu
Y3Rpb24tPmlzU3RhdGljID8gInN0YXRpYyAiIDogIiIpIC4gIkpTQzo6SlNWYWx1ZSAiIC4gJGZ1
bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lIC4gIihKU0M6OkV4ZWNTdGF0ZSYpO1xuIik7CiAgICAg
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2VuZGlmXG4iKSBpZiAkY29uZGl0aW9uYWxT
dHJpbmc7CiAgICAgICAgIH0KICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgJGVuZEFwcGxl
Q29weXJpZ2h0KSBpZiAkaW5BcHBsZUNvcHlyaWdodDsKQEAgLTIzMzMsNyArMjMzMyw3IEBAIHN1
YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICB9ICMgYXR0cmlidXRlIE5vbmRl
dGVybWluaXN0aWMKIAogICAgICAgICAgICAgaWYgKEhhc0N1c3RvbUdldHRlcigkYXR0cmlidXRl
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcykpIHsKLSAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPiRp
bXBsR2V0dGVyRnVuY3Rpb25OYW1lKHN0YXRlKSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPiRp
bXBsR2V0dGVyRnVuY3Rpb25OYW1lKCpzdGF0ZSkpO1xuIik7CiAgICAgICAgICAgICB9IGVsc2lm
ICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDaGVja1NlY3Vy
aXR5Rm9yTm9kZSJ9KSB7CiAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siSlNET01CaW5k
aW5nLmgifSA9IDE7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTtcbiIpOwpAQCAtMjYxOCw3ICsyNjE4LDcgQEAg
c3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
aWYgKEhhc0N1c3RvbVNldHRlcigkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmli
dXRlcykpIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBjYXN0ZWRU
aGlzLT5zZXQkaW1wbFNldHRlckZ1bmN0aW9uTmFtZShzdGF0ZSwgdmFsdWUpO1xuIik7CisgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgY2FzdGVkVGhpcy0+c2V0JGltcGxT
ZXR0ZXJGdW5jdGlvbk5hbWUoKnN0YXRlLCB2YWx1ZSk7XG4iKTsKICAgICAgICAgICAgIH0gZWxz
aWYgKCR0eXBlIGVxICJFdmVudEhhbmRsZXIiKSB7CiAgICAgICAgICAgICAgICAgJGltcGxJbmNs
dWRlc3siSlNFdmVudExpc3RlbmVyLmgifSA9IDE7CiAgICAgICAgICAgICAgICAgbXkgJGV2ZW50
TmFtZSA9IEV2ZW50SGFuZGxlckF0dHJpYnV0ZUV2ZW50TmFtZSgkYXR0cmlidXRlKTsKQEAgLTI4
NzQsNyArMjg3NCw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKCRpc0N1c3RvbSkgewotICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3Rl
ZFRoaXMtPiIgLiAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgLiAiKHN0YXRlKSk7XG4iKTsK
KyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShjYXN0ZWRUaGlzLT4iIC4gJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lIC4g
Iigqc3RhdGUpKTtcbiIpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5p
bXBsKCk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCRzdmdQcm9wZXJ0eVR5cGUpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEludGVyZmFjZS5jcHAKaW5kZXggYThjMTVlNjAwM2ZkNDI3NTFhZWI1ZDc0N2E2ZjZk
N2YxOTI2NTY0Mi4uYTRjYWQwY2MwYzdmOWMxOGIxZWNkYjM0NGI0MmJiNDVkMTgyNDhiMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdElu
dGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEludGVyZmFjZS5jcHAKQEAgLTUxNSw3ICs1MTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMyhFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCog
c2xvdEJhcwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7CiAgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RJbnRlcmZhY2Uq
PihzbG90QmFzZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5pbXBs
ZW1lbnRzU3RyMyhzdGF0ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhp
cy0+aW1wbGVtZW50c1N0cjMoKnN0YXRlKSk7CiB9CiAKICNlbmRpZgpAQCAtNjA4LDcgKzYwOCw3
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjMoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCCiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganND
YXN0PEpTVGVzdEludGVyZmFjZSo+KHNsb3RCYXNlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGNhc3RlZFRoaXMtPnN1cHBsZW1lbnRhbFN0cjMoc3RhdGUpKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnN1cHBsZW1lbnRhbFN0cjMoKnN0YXRlKSk7CiB9CiAK
ICNlbmRpZgpAQCAtNzA0LDcgKzcwNCw3IEBAIHZvaWQgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVt
ZW50c1N0cjMoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuCiAgICAg
YXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihiYXNlT2JqZWN0KTsK
ICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwot
ICAgIGNhc3RlZFRoaXMtPnNldEltcGxlbWVudHNTdHIzKHN0YXRlLCB2YWx1ZSk7CisgICAgY2Fz
dGVkVGhpcy0+c2V0SW1wbGVtZW50c1N0cjMoKnN0YXRlLCB2YWx1ZSk7CiB9CiAKICNlbmRpZgpA
QCAtNzc1LDcgKzc3NSw3IEBAIHZvaWQgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3Ry
MyhFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwKICAgICBhdXRvKiBjYXN0
ZWRUaGlzID0ganNDYXN0PEpTVGVzdEludGVyZmFjZSo+KGJhc2VPYmplY3QpOwogICAgIFVOVVNF
RF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgY2FzdGVk
VGhpcy0+c2V0U3VwcGxlbWVudGFsU3RyMyhzdGF0ZSwgdmFsdWUpOworICAgIGNhc3RlZFRoaXMt
PnNldFN1cHBsZW1lbnRhbFN0cjMoKnN0YXRlLCB2YWx1ZSk7CiB9CiAKICNlbmRpZgpAQCAtODU5
LDcgKzg1OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNl
UHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kMyhFCiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkKICAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJU
ZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNNZXRob2QzIik7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RJbnRlcmZhY2U6OmluZm8oKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5pbXBsZW1lbnRzTWV0aG9kMyhzdGF0ZSkp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+aW1wbGVtZW50c01ldGhv
ZDMoKnN0YXRlKSk7CiB9CiAKICNlbmRpZgpAQCAtOTI1LDcgKzkyNSw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVt
ZW50YWxNZXRob2QzCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKICAgICAgICAgcmV0
dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0SW50ZXJmYWNlIiwgInN1cHBsZW1l
bnRhbE1ldGhvZDMiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMs
IEpTVGVzdEludGVyZmFjZTo6aW5mbygpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNh
c3RlZFRoaXMtPnN1cHBsZW1lbnRhbE1ldGhvZDMoc3RhdGUpKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnN1cHBsZW1lbnRhbE1ldGhvZDMoKnN0YXRlKSk7CiB9CiAK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5oCmluZGV4IDQ3ZjA3ODI5MWZjN2UzMjBjMGQ4YjhmNGMw
NGY2ZGNhMjNmYWVkMjkuLjEwY2Y4ZmIyNDA2MTIxZDBhNzBiZWEyY2I1NWFhYjM4OGVhZTRjMjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SW50ZXJmYWNlLmgKQEAgLTYwLDI0ICs2MCwyNCBAQCBwdWJsaWM6CiAKICAgICAv
LyBDdXN0b20gYXR0cmlidXRlcwogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENv
bmRpdGlvbjIzKQotICAgIEpTQzo6SlNWYWx1ZSBpbXBsZW1lbnRzU3RyMyhKU0M6OkV4ZWNTdGF0
ZSopIGNvbnN0OworICAgIEpTQzo6SlNWYWx1ZSBpbXBsZW1lbnRzU3RyMyhKU0M6OkV4ZWNTdGF0
ZSYpIGNvbnN0OwogI2VuZGlmCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMjMpCi0gICAgdm9pZCBzZXRJbXBsZW1lbnRzU3RyMyhKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSk7CisgICAgdm9pZCBzZXRJbXBsZW1lbnRzU3RyMyhKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJM
RShDb25kaXRpb24xMikKLSAgICBKU0M6OkpTVmFsdWUgc3VwcGxlbWVudGFsU3RyMyhKU0M6OkV4
ZWNTdGF0ZSopIGNvbnN0OworICAgIEpTQzo6SlNWYWx1ZSBzdXBwbGVtZW50YWxTdHIzKEpTQzo6
RXhlY1N0YXRlJikgY29uc3Q7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVO
QUJMRShDb25kaXRpb24xMikKLSAgICB2b2lkIHNldFN1cHBsZW1lbnRhbFN0cjMoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUpOworICAgIHZvaWQgc2V0U3VwcGxlbWVudGFsU3RyMyhKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CiAjZW5kaWYKIAogICAgIC8vIEN1c3RvbSBmdW5j
dGlvbnMKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLSAg
ICBKU0M6OkpTVmFsdWUgaW1wbGVtZW50c01ldGhvZDMoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBK
U0M6OkpTVmFsdWUgaW1wbGVtZW50c01ldGhvZDMoSlNDOjpFeGVjU3RhdGUmKTsKICNlbmRpZgog
I2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotICAgIEpTQzo6
SlNWYWx1ZSBzdXBwbGVtZW50YWxNZXRob2QzKEpTQzo6RXhlY1N0YXRlKik7CisgICAgSlNDOjpK
U1ZhbHVlIHN1cHBsZW1lbnRhbE1ldGhvZDMoSlNDOjpFeGVjU3RhdGUmKTsKICNlbmRpZgogICAg
IFRlc3RJbnRlcmZhY2UmIGltcGwoKSBjb25zdCB7IHJldHVybiAqbV9pbXBsOyB9CiAgICAgdm9p
ZCByZWxlYXNlSW1wbCgpIHsgc3RkOjpleGNoYW5nZShtX2ltcGwsIG51bGxwdHIpLT5kZXJlZigp
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwCmluZGV4IGEwMjJhZjRiMmQ1YjAwODdlMzA0MzAzOTU1ZDQ4OWQ5MTMwMmE1
ZjEuLjgwMTk3OGRlMWI0MGY0ZmIwN2U0YWQwZmI3NmE0Y2VlYWJkNWY0MDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3Bw
CkBAIC0xMzAyLDcgKzEzMDIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDdXN0b21BdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZAogICAgIFVOVVNF
RF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgYXV0
byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihzbG90QmFzZSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5jdXN0b21BdHRyKHN0YXRlKSk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5jdXN0b21BdHRyKCpzdGF0ZSkpOwogfQog
CiAKQEAgLTI1NzMsNyArMjU3Myw3IEBAIHZvaWQgc2V0SlNUZXN0T2JqQ3VzdG9tQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsCiAgICAgYXV0
byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihiYXNlT2JqZWN0KTsKICAgICBVTlVT
RURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGNhc3Rl
ZFRoaXMtPnNldEN1c3RvbUF0dHIoc3RhdGUsIHZhbHVlKTsKKyAgICBjYXN0ZWRUaGlzLT5zZXRD
dXN0b21BdHRyKCpzdGF0ZSwgdmFsdWUpOwogfQogCiAKQEAgLTM0ODcsNyArMzQ4Nyw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0
b21NZXRob2QoRXhlY1N0YXRlKiBzCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKICAg
ICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImN1c3Rv
bU1ldGhvZCIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNU
ZXN0T2JqOjppbmZvKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+
Y3VzdG9tTWV0aG9kKHN0YXRlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRU
aGlzLT5jdXN0b21NZXRob2QoKnN0YXRlKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2RXaXRoQXJncyhFeGVj
U3RhdGUqIHN0YXRlKQpAQCAtMzQ5Nyw3ICszNDk3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZFdpdGhBcmdzKEV4
ZWMKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQogICAgICAgICByZXR1cm4gdGhyb3dU
aGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY3VzdG9tTWV0aG9kV2l0aEFyZ3MiKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5m
bygpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmN1c3RvbU1ldGhv
ZFdpdGhBcmdzKHN0YXRlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlz
LT5jdXN0b21NZXRob2RXaXRoQXJncygqc3RhdGUpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFkZEV2ZW50TGlzdGVuZXIoRXhl
Y1N0YXRlKiBzdGF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPYmouaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouaAppbmRleCAzNTQ2MzExYjRiNWZkZmQxYmU4ODA3MmVhMmQ5NmJi
YmZmZjY4NGU5Li44OGNhYjg2OTAyYmJjZWI2ODYwNTcxYmUwZGRjMDQ1NjQ0MTMxZTlhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2Jq
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5oCkBAIC01OCwxMyArNTgsMTMgQEAgcHVibGljOgogCiAKICAgICAvLyBDdXN0b20gYXR0cmli
dXRlcwotICAgIEpTQzo6SlNWYWx1ZSBjdXN0b21BdHRyKEpTQzo6RXhlY1N0YXRlKikgY29uc3Q7
Ci0gICAgdm9pZCBzZXRDdXN0b21BdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsK
KyAgICBKU0M6OkpTVmFsdWUgY3VzdG9tQXR0cihKU0M6OkV4ZWNTdGF0ZSYpIGNvbnN0OworICAg
IHZvaWQgc2V0Q3VzdG9tQXR0cihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CiAKICAg
ICAvLyBDdXN0b20gZnVuY3Rpb25zCi0gICAgSlNDOjpKU1ZhbHVlIGN1c3RvbU1ldGhvZChKU0M6
OkV4ZWNTdGF0ZSopOwotICAgIEpTQzo6SlNWYWx1ZSBjdXN0b21NZXRob2RXaXRoQXJncyhKU0M6
OkV4ZWNTdGF0ZSopOwotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY2xhc3NNZXRob2QyKEpTQzo6
RXhlY1N0YXRlKik7CisgICAgSlNDOjpKU1ZhbHVlIGN1c3RvbU1ldGhvZChKU0M6OkV4ZWNTdGF0
ZSYpOworICAgIEpTQzo6SlNWYWx1ZSBjdXN0b21NZXRob2RXaXRoQXJncyhKU0M6OkV4ZWNTdGF0
ZSYpOworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY2xhc3NNZXRob2QyKEpTQzo6RXhlY1N0YXRl
Jik7CiAgICAgVGVzdE9iaiYgaW1wbCgpIGNvbnN0IHsgcmV0dXJuICptX2ltcGw7IH0KICAgICB2
b2lkIHJlbGVhc2VJbXBsKCkgeyBzdGQ6OmV4Y2hhbmdlKG1faW1wbCwgbnVsbHB0ciktPmRlcmVm
KCk7IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261622</attachid>
            <date>2015-09-20 18:48:21 -0700</date>
            <delta_ts>2015-09-20 19:01:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149393-20150920184806.patch</filename>
            <type>text/plain</type>
            <size>244226</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwMDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzhjYWVkYmY4N2EwMjcx
ZGUzY2Y0NDA4NzMzNzAzOWRiODUxODdlOC4uOTYxNGE4MjE5OTAwYTU3OTQ0YzE1M2U1OWZmZTI2
YzhlNmQzNmI4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1IEBACiAyMDE1LTA5LTIwICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgUGFzcyBKU0M6OkV4ZWNTdGF0
ZSB0byB0aGUgY3VzdG9tIGJpbmRpbmdzIGJ5IHJlZmVyZW5jZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5MzkzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGFzcyBKU0M6OkV4ZWNTdGF0ZSB0byB0aGUg
Y3VzdG9tIGJpbmRpbmdzIGJ5IHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGJ5CisgICAgICAgIHBvaW50
ZXIgYXMgaXQgaXMgZXhwZWN0ZWQgdG8gYmUgbm9uLW51bGwuCisKKzIwMTUtMDktMjAgIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwogICAgICAgICBSZWdyZXNzaW9uKHIxOTAwMjMp
OiBmYXN0L2RvbS9uYXZpZ2F0aW9uLXdpdGgtc2lkZWVmZmVjdHMtY3Jhc2guaHRtbCBpcyBjcmFz
aGluZwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5
MzkyCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1Rp
bWVQbHVnaW5SZXBsYWNlbWVudC5tbSBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9R
dWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQppbmRleCBmMmFhZWU2M2NmYmI5YzU1OGYwNTdl
OGY0NjNhYmM1NTJmOGYxZWY3Li4xNmJiMThiYTViMjZlMTY5ZmJjZWZhYzVlNDZhYzZlMTIzODk1
NWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5z
L1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCkBAIC0zNjYsNyArMzY2LDcgQEAgc3RhdGlj
IEpTVmFsdWUgKmpzVmFsdWVXaXRoQVZNZXRhZGF0YUl0ZW1JbkNvbnRleHQoQVZNZXRhZGF0YUl0
ZW1UeXBlICppdGVtLCBKU0MKIH0KICNlbmRpZgogCi1KU0M6OkpTVmFsdWUgSlNRdWlja1RpbWVQ
bHVnaW5SZXBsYWNlbWVudDo6dGltZWRNZXRhRGF0YShKU0M6OkV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKK0pTQzo6SlNWYWx1ZSBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Ojp0aW1lZE1ldGFE
YXRhKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICNpZiBQTEFURk9STShJT1MpCiAg
ICAgSFRNTFZpZGVvRWxlbWVudCogcGFyZW50ID0gaW1wbCgpLnBhcmVudEVsZW1lbnQoKTsKQEAg
LTM4NCwxNCArMzg0LDE0IEBAIEpTQzo6SlNWYWx1ZSBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2Vt
ZW50Ojp0aW1lZE1ldGFEYXRhKEpTQzo6RXhlY1N0YXRlKiBleGVjKSBjCiAgICAgSlNDb250ZXh0
ICpqc0NvbnRleHQgPSBmcmFtZS0+c2NyaXB0KCkuamF2YVNjcmlwdENvbnRleHQoKTsKICAgICBK
U1ZhbHVlICptZXRhRGF0YVZhbHVlID0ganNWYWx1ZVdpdGhWYWx1ZUluQ29udGV4dChtZXRhRGF0
YSwganNDb250ZXh0KTsKICAgICAKLSAgICByZXR1cm4gdG9KUyhleGVjLCBbbWV0YURhdGFWYWx1
ZSBKU1ZhbHVlUmVmXSk7CisgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBbbWV0YURhdGFWYWx1ZSBK
U1ZhbHVlUmVmXSk7CiAjZWxzZQotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwogI2VuZGlmCiB9CiAKLUpT
Qzo6SlNWYWx1ZSBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjphY2Nlc3NMb2coSlNDOjpF
eGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU0M6OkpTVmFsdWUgSlNRdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudDo6YWNjZXNzTG9nKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICNpZiBQ
TEFURk9STShJT1MpCiAgICAgSFRNTFZpZGVvRWxlbWVudCogcGFyZW50ID0gaW1wbCgpLnBhcmVu
dEVsZW1lbnQoKTsKQEAgLTQwNiwxNCArNDA2LDE0IEBAIEpTQzo6SlNWYWx1ZSBKU1F1aWNrVGlt
ZVBsdWdpblJlcGxhY2VtZW50OjphY2Nlc3NMb2coSlNDOjpFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
CiAgICAgU3RyaW5nIGFjY2Vzc0xvZ1N0cmluZyA9IHBhcmVudC0+cGxheWVyKCktPmFjY2Vzc0xv
ZygpOwogICAgIFtkaWN0aW9uYXJ5IHNldFZhbHVlOnN0YXRpY19jYXN0PE5TU3RyaW5nICo+KGFj
Y2Vzc0xvZ1N0cmluZykgZm9yUHJvcGVydHk6KE5TU3RyaW5nICopQ0ZTVFIoImV4dGVuZGVkTG9n
IildOwogCi0gICAgcmV0dXJuIHRvSlMoZXhlYywgW2RpY3Rpb25hcnkgSlNWYWx1ZVJlZl0pOwor
ICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgW2RpY3Rpb25hcnkgSlNWYWx1ZVJlZl0pOwogI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBy
ZXR1cm4gSlNDOjpqc051bGwoKTsKICNlbmRpZgogfQogCi1KU0M6OkpTVmFsdWUgSlNRdWlja1Rp
bWVQbHVnaW5SZXBsYWNlbWVudDo6ZXJyb3JMb2coSlNDOjpFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
CitKU0M6OkpTVmFsdWUgSlNRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6ZXJyb3JMb2coSlND
OjpFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewogI2lmIFBMQVRGT1JNKElPUykKICAgICBIVE1M
VmlkZW9FbGVtZW50KiBwYXJlbnQgPSBpbXBsKCkucGFyZW50RWxlbWVudCgpOwpAQCAtNDI4LDkg
KzQyOCw5IEBAIEpTQzo6SlNWYWx1ZSBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjplcnJv
ckxvZyhKU0M6OkV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICBTdHJpbmcgZXJyb3JMb2dTdHJp
bmcgPSBwYXJlbnQtPnBsYXllcigpLT5lcnJvckxvZygpOwogICAgIFtkaWN0aW9uYXJ5IHNldFZh
bHVlOnN0YXRpY19jYXN0PE5TU3RyaW5nICo+KGVycm9yTG9nU3RyaW5nKSBmb3JQcm9wZXJ0eToo
TlNTdHJpbmcgKilDRlNUUigiZXh0ZW5kZWRMb2ciKV07CiAKLSAgICByZXR1cm4gdG9KUyhleGVj
LCBbZGljdGlvbmFyeSBKU1ZhbHVlUmVmXSk7CisgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBbZGlj
dGlvbmFyeSBKU1ZhbHVlUmVmXSk7CiAjZWxzZQotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwogI2VuZGlm
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVy
U291cmNlTm9kZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlv
QnVmZmVyU291cmNlTm9kZUN1c3RvbS5jcHAKaW5kZXggZjNkOWRiZjM3MGJmMWM5YWE1NjFjNzIx
ZmZkOTUzZDM3YTY5ODk2OC4uMWM5YzMyOGIxMjEyNWQ5YmJlMzkyY2UzMWUyNjM4MTZlMmYxMzRl
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0J1ZmZlclNv
dXJjZU5vZGVDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVk
aW9CdWZmZXJTb3VyY2VOb2RlQ3VzdG9tLmNwcApAQCAtMzksMTYgKzM5LDE2IEBAIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0F1ZGlvQnVmZmVy
U291cmNlTm9kZTo6c2V0QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3Zv
aWQgSlNBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OnNldEJ1ZmZlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQogewogICAgIEF1ZGlvQnVmZmVyKiBidWZmZXIgPSBKU0F1ZGlvQnVmZmVy
Ojp0b1dyYXBwZWQodmFsdWUpOwogICAgIGlmICghYnVmZmVyKSB7Ci0gICAgICAgIGV4ZWMtPnZt
KCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJWYWx1ZSBpcyBu
b3Qgb2YgdHlwZSBBdWRpb0J1ZmZlciIpKTsKKyAgICAgICAgc3RhdGUudm0oKS50aHJvd0V4Y2Vw
dGlvbigmc3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJWYWx1ZSBpcyBub3Qgb2YgdHlw
ZSBBdWRpb0J1ZmZlciIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAo
IWltcGwoKS5zZXRCdWZmZXIoYnVmZmVyKSkKLSAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2Vw
dGlvbihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkF1ZGlvQnVmZmVyIHVuc3VwcG9ydGVk
IG51bWJlciBvZiBjaGFubmVscyIpKTsKKyAgICAgICAgc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlv
bigmc3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJBdWRpb0J1ZmZlciB1bnN1cHBvcnRl
ZCBudW1iZXIgb2YgY2hhbm5lbHMiKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCmlu
ZGV4IDQ0MDA1NzllMzY0OTc3MTc3NmM2NWQ2YTQ2ZjVkODNiMmVhODZjYzYuLjM2ZjMxZDlkNjJl
Y2Q3OGZkMWFhZjE5MWMyMmI5YTU1MDAyMjc3M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcApAQCAtNDAsMjggKzQwLDI4IEBAIHZv
aWQgSlNBdWRpb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmaW1wbCgpKSk7CiB9CiAKLXZv
aWQgSlNBdWRpb1RyYWNrOjpzZXRLaW5kKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkK
K3ZvaWQgSlNBdWRpb1RyYWNrOjpzZXRLaW5kKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFs
dWUpCiB7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKLSAgICBhdXRvJiBzdHJpbmcgPSB2YWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZz
dGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAg
ICAgaW1wbCgpLnNldEtpbmQoc3RyaW5nKTsKICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGV4ZWMp
OworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKICNl
bmRpZgogfQogCi12b2lkIEpTQXVkaW9UcmFjazo6c2V0TGFuZ3VhZ2UoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU0F1ZGlvVHJhY2s6OnNldExhbmd1YWdlKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKLSAg
ICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3Ry
aW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm47CiAgICAgaW1wbCgpLnNldExhbmd1YWdlKHN0cmluZyk7CiAjZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh2YWx1ZSk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQmlxdWFkRmlsdGVyTm9kZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0JpcXVhZEZpbHRlck5vZGVDdXN0b20uY3BwCmluZGV4IGY4YzEz
ODUzMDlkODIwMDRlNjJlZmUwZmE0OTJlZjUwZDJmZjM1YTEuLmY2ZmE4NmY1YzM3NGZlYmJjMGI4
MWJmZmNhZmM1ZWVkY2E0MWIzMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQmlxdWFkRmlsdGVyTm9kZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNCaXF1YWRGaWx0ZXJOb2RlQ3VzdG9tLmNwcApAQCAtMzcsMjYgKzM3LDI2IEBA
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0Jp
cXVhZEZpbHRlck5vZGU6OnNldFR5cGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQor
dm9pZCBKU0JpcXVhZEZpbHRlck5vZGU6OnNldFR5cGUoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSkKIHsKICNpZiBFTkFCTEUoTEVHQUNZX1dFQl9BVURJTykKICAgICBpZiAodmFsdWUu
aXNOdW1iZXIoKSkgewotICAgICAgICB1aW50MzJfdCB0eXBlID0gdmFsdWUudG9VSW50MzIoZXhl
Yyk7CisgICAgICAgIHVpbnQzMl90IHR5cGUgPSB2YWx1ZS50b1VJbnQzMigmc3RhdGUpOwogICAg
ICAgICBpZiAoIWltcGwoKS5zZXRUeXBlKHR5cGUpKQotICAgICAgICAgICAgZXhlYy0+dm0oKS50
aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIklsbGVnYWwgQmlxdWFk
RmlsdGVyTm9kZSB0eXBlIikpOworICAgICAgICAgICAgc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlv
bigmc3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJJbGxlZ2FsIEJpcXVhZEZpbHRlck5v
ZGUgdHlwZSIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgogCiAgICAgaWYgKHZh
bHVlLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgU3RyaW5nIHR5cGUgPSB2YWx1ZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAgIFN0cmluZyB0eXBlID0gdmFsdWUudG9TdHJpbmco
JnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKICAgICAgICAgaWYgKHR5cGUgPT0gImxvd3Bhc3MiIHx8
IHR5cGUgPT0gImhpZ2hwYXNzIiB8fCB0eXBlID09ICJiYW5kcGFzcyIgfHwgdHlwZSA9PSAibG93
c2hlbGYiIHx8IHR5cGUgPT0gImhpZ2hzaGVsZiIgfHwgdHlwZSA9PSAicGVha2luZyIgfHwgdHlw
ZSA9PSAibm90Y2giIHx8IHR5cGUgPT0gImFsbHBhc3MiKSB7CiAgICAgICAgICAgICBpbXBsKCku
c2V0VHlwZSh0eXBlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KICAg
ICAKLSAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCAiSWxsZWdhbCBCaXF1YWRGaWx0ZXJOb2RlIHR5cGUiKSk7CisgICAgc3RhdGUudm0oKS50
aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJJbGxlZ2FsIEJp
cXVhZEZpbHRlck5vZGUgdHlwZSIpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9u
Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJh
dGlvbkN1c3RvbS5jcHAKaW5kZXggZTk5ZGUyMWE3NWQ3MzljMzk0YWE0MmJkZDE4Yjc1OWM4OTgw
MTAwNy4uZGUyZjkwNzM0NWE3NjhmNWNlZjM2ODg0OTYyN2NiNDJkNWU0NTFlYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9t
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRp
b25DdXN0b20uY3BwCkBAIC0zNDcsMTAgKzM0NywxMCBAQCBib29sIEpTQ1NTU3R5bGVEZWNsYXJh
dGlvbjo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YQogICAgIHJldHVybiB0cnVlOwogfQogCi1KU1ZhbHVlIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6
Z2V0UHJvcGVydHlDU1NWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ1NTU3R5bGVE
ZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShFeGVjU3RhdGUmIHN0YXRlKQogewotICAg
IGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBj
b25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSA9IHN0YXRlLmFyZ3VtZW50KDApLnRvU3RyaW5nKCZz
dGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFs
dWUgPSBpbXBsKCkuZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eU5hbWUpOwpAQCAtMzU4LDcg
KzM1OCw3IEBAIEpTVmFsdWUgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1Zh
bHVlKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCiAgICAgZ2xv
YmFsT2JqZWN0KCktPndvcmxkKCkubV9jc3NWYWx1ZVJvb3RzLmFkZChjc3NWYWx1ZS5nZXQoKSwg
cm9vdCgmaW1wbCgpKSk7IC8vIEJhbGFuY2VkIGJ5IEpTQ1NTVmFsdWVPd25lcjo6ZmluYWxpemUo
KS4KLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoY3Nz
VmFsdWUpKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBXVEY6Omdl
dFB0cihjc3NWYWx1ZSkpOwogfQogCiB2b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQ3VzdG9tLmNwcAppbmRleCBlZmE1MzlmYjU0Yjg2OTRiZGQzYmM5Zjc0NGYyYTY1
NDIxMDZmMjZkLi5kYzViNTFlOGI5N2VmNTllMjViN2ZiYmY3MDIwNTI4YjM3MDM5ODc5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCkBAIC01OSwzNyArNTksMzcgQEAgc3RhdGljIENh
bnZhc1N0eWxlIHRvSFRNTENhbnZhc1N0eWxlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgdmFsdWUpCiAg
ICAgcmV0dXJuIENhbnZhc1N0eWxlKCk7CiB9CiAKLUpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnN0cm9rZVN0eWxlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVN0eWxlKEV4ZWNTdGF0ZSYgc3RhdGUpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGltcGwoKS5zdHJv
a2VTdHlsZSgpKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBpbXBs
KCkuc3Ryb2tlU3R5bGUoKSk7CiB9CiAKLXZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnNldFN0cm9rZVN0eWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZVN0eWxlKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEJiBjb250ZXh0
ID0gaW1wbCgpOwogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIGNvbnRleHQu
c2V0U3Ryb2tlQ29sb3IoYXNTdHJpbmcodmFsdWUpLT52YWx1ZShleGVjKSk7CisgICAgICAgIGNv
bnRleHQuc2V0U3Ryb2tlQ29sb3IoYXNTdHJpbmcodmFsdWUpLT52YWx1ZSgmc3RhdGUpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKHRvSFRNTENh
bnZhc1N0eWxlKGV4ZWMsIHZhbHVlKSk7CisgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZSh0b0hU
TUxDYW52YXNTdHlsZSgmc3RhdGUsIHZhbHVlKSk7CiB9CiAKLUpTVmFsdWUgSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmZpbGxTdHlsZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVl
IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsU3R5bGUoRXhlY1N0YXRlJiBzdGF0ZSkg
Y29uc3QKIHsKLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgpLmZp
bGxTdHlsZSgpKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBpbXBs
KCkuZmlsbFN0eWxlKCkpOwogfQogCi12b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
ZXRGaWxsU3R5bGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbFN0eWxlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgdmFsdWUpCiB7CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEJiBjb250ZXh0ID0gaW1w
bCgpOwogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIGNvbnRleHQuc2V0Rmls
bENvbG9yKGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUoZXhlYykpOworICAgICAgICBjb250ZXh0LnNl
dEZpbGxDb2xvcihhc1N0cmluZyh2YWx1ZSktPnZhbHVlKCZzdGF0ZSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIGNvbnRleHQuc2V0RmlsbFN0eWxlKHRvSFRNTENhbnZhc1N0eWxlKGV4
ZWMsIHZhbHVlKSk7CisgICAgY29udGV4dC5zZXRGaWxsU3R5bGUodG9IVE1MQ2FudmFzU3R5bGUo
JnN0YXRlLCB2YWx1ZSkpOwogfQogCi1KU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Ojp3ZWJraXRMaW5lRGFzaChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjp3ZWJraXRMaW5lRGFzaChFeGVjU3RhdGUmIHN0YXRlKSBjb25z
dAogewogICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGRhc2ggPSBpbXBsKCkuZ2V0TGluZURhc2go
KTsKIApAQCAtOTcsMTAgKzk3LDEwIEBAIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OndlYmtpdExpbmVEYXNoKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICBWZWN0b3I8Zmxv
YXQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBkYXNoLmVuZCgpOwogICAgIGZvciAoVmVjdG9yPGZs
b2F0Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXNoLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
ICAgICAgICAgbGlzdC5hcHBlbmQoSlNWYWx1ZSgqaXQpKTsKLSAgICByZXR1cm4gY29uc3RydWN0
QXJyYXkoZXhlYywgMCwgZ2xvYmFsT2JqZWN0KCksIGxpc3QpOworICAgIHJldHVybiBjb25zdHJ1
Y3RBcnJheSgmc3RhdGUsIDAsIGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKIH0KIAotdm9pZCBKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0V2Via2l0TGluZURhc2goRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0V2Vi
a2l0TGluZURhc2goRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAo
IWlzSlNBcnJheSh2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwOCw3ICsxMDgsNyBAQCB2
b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRXZWJraXRMaW5lRGFzaChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdmFsdQogICAgIFZlY3RvcjxmbG9hdD4gZGFzaDsKICAgICBKU0Fy
cmF5KiB2YWx1ZUFycmF5ID0gYXNBcnJheSh2YWx1ZSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZhbHVlQXJyYXktPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgZmxvYXQgZWxlbSA9
IHZhbHVlQXJyYXktPmdldEluZGV4KGV4ZWMsIGkpLnRvRmxvYXQoZXhlYyk7CisgICAgICAgIGZs
b2F0IGVsZW0gPSB2YWx1ZUFycmF5LT5nZXRJbmRleCgmc3RhdGUsIGkpLnRvRmxvYXQoJnN0YXRl
KTsKICAgICAgICAgaWYgKGVsZW0gPD0gMCB8fCAhc3RkOjppc2Zpbml0ZShlbGVtKSkKICAgICAg
ICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDaGFyYWN0ZXJEYXRhQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q2hhcmFjdGVyRGF0YUN1c3RvbS5jcHAKaW5kZXggNzY0MzQ0ZGRjMTc3ZTczMTAyZGE5MjQ1MWIz
N2JkZjVlYTlhMTMyYy4uY2I4MzFkMDRjZmI4ZWY4NTY4NDc2YmQ4ZmRlM2Y4ZjgyZTlhN2M5MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDaGFyYWN0ZXJEYXRhQ3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NoYXJhY3RlckRhdGFD
dXN0b20uY3BwCkBAIC0zMywyOSArMzMsMjkgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTQ2hhcmFjdGVyRGF0YTo6YmVmb3JlKEV4ZWNT
dGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ2hhcmFjdGVyRGF0YTo6YmVmb3JlKEV4ZWNTdGF0ZSYg
c3RhdGUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wbCgpLmJlZm9yZSh0
b05vZGVPclN0cmluZ1ZlY3Rvcigqc3RhdGUpLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKHN0
YXRlLCBlYyk7CisgICAgaW1wbCgpLmJlZm9yZSh0b05vZGVPclN0cmluZ1ZlY3RvcihzdGF0ZSks
IGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0NoYXJhY3RlckRhdGE6OmFmdGVyKEV4ZWNTdGF0
ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ2hhcmFjdGVyRGF0YTo6YWZ0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCkuYWZ0ZXIodG9Ob2Rl
T3JTdHJpbmdWZWN0b3IoKnN0YXRlKSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwg
ZWMpOworICAgIGltcGwoKS5hZnRlcih0b05vZGVPclN0cmluZ1ZlY3RvcihzdGF0ZSksIGVjKTsK
KyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0NoYXJhY3RlckRhdGE6OnJlcGxhY2VXaXRoKEV4ZWNTdGF0
ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ2hhcmFjdGVyRGF0YTo6cmVwbGFjZVdpdGgoRXhlY1N0YXRl
JiBzdGF0ZSkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCkucmVwbGFj
ZVdpdGgodG9Ob2RlT3JTdHJpbmdWZWN0b3IoKnN0YXRlKSwgZWMpOwotICAgIHNldERPTUV4Y2Vw
dGlvbihzdGF0ZSwgZWMpOworICAgIGltcGwoKS5yZXBsYWNlV2l0aCh0b05vZGVPclN0cmluZ1Zl
Y3RvcihzdGF0ZSksIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9tLmNwcAppbmRleCA4ZDJkMDIw
NjRlNTdlYWE0NzgxODBiYjhlNDViZDMwMDRlOGYzMTdiLi5iMDY1ZDVjZmYxY2YxYjUwNjQ3NDU5
NjJiZGNkOGQ2MWRmNzY3ZjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NvbW1hbmRMaW5lQVBJSG9zdEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDb21tYW5kTGluZUFQSUhvc3RDdXN0b20uY3BwCkBAIC01NSwyMyArNTUsMjMg
QEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVl
IEpTQ29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0ZWRPYmplY3QoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NvbW1hbmRMaW5lQVBJSG9zdDo6aW5zcGVjdGVkT2JqZWN0KEV4ZWNTdGF0ZSYg
c3RhdGUpCiB7CiAgICAgQ29tbWFuZExpbmVBUElIb3N0OjpJbnNwZWN0YWJsZU9iamVjdCogb2Jq
ZWN0ID0gaW1wbCgpLmluc3BlY3RlZE9iamVjdCgpOwogICAgIGlmICghb2JqZWN0KQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwot
ICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHNjcmlwdFZhbHVlID0gb2JqZWN0LT5nZXQoZXhl
Yyk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soJnN0YXRlKTsKKyAgICBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSBzY3JpcHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSk7CiAgICAgaWYgKHNjcmlw
dFZhbHVlLmhhc05vVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAg
ICByZXR1cm4gc2NyaXB0VmFsdWUuanNWYWx1ZSgpOwogfQogCi1zdGF0aWMgSlNBcnJheSogZ2V0
SlNMaXN0ZW5lckZ1bmN0aW9ucyhFeGVjU3RhdGUqIGV4ZWMsIERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgRXZlbnRMaXN0ZW5lckluZm8mIGxpc3RlbmVySW5mbykKK3N0YXRpYyBKU0FycmF5KiBn
ZXRKU0xpc3RlbmVyRnVuY3Rpb25zKEV4ZWNTdGF0ZSYgc3RhdGUsIERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgRXZlbnRMaXN0ZW5lckluZm8mIGxpc3RlbmVySW5mbykKIHsKLSAgICBKU0FycmF5
KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpOworICAgIEpTQXJy
YXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoJnN0YXRlLCBudWxscHRyKTsKICAgICBz
aXplX3QgaGFuZGxlcnNDb3VudCA9IGxpc3RlbmVySW5mby5ldmVudExpc3RlbmVyVmVjdG9yLnNp
emUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMCwgb3V0cHV0SW5kZXggPSAwOyBpIDwgaGFuZGxl
cnNDb3VudDsgKytpKSB7CiAgICAgICAgIGNvbnN0IEpTRXZlbnRMaXN0ZW5lcioganNMaXN0ZW5l
ciA9IEpTRXZlbnRMaXN0ZW5lcjo6Y2FzdChsaXN0ZW5lckluZm8uZXZlbnRMaXN0ZW5lclZlY3Rv
cltpXS5saXN0ZW5lci5nZXQoKSk7CkBAIC04MSwyNyArODEsMjcgQEAgc3RhdGljIEpTQXJyYXkq
IGdldEpTTGlzdGVuZXJGdW5jdGlvbnMoRXhlY1N0YXRlKiBleGVjLCBEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnMKICAgICAgICAgfQogCiAgICAgICAgIC8vIEhpZGUgbGlzdGVuZXJzIGZyb20gb3Ro
ZXIgY29udGV4dHMuCi0gICAgICAgIGlmICgmanNMaXN0ZW5lci0+aXNvbGF0ZWRXb3JsZCgpICE9
ICZjdXJyZW50V29ybGQoZXhlYykpCisgICAgICAgIGlmICgmanNMaXN0ZW5lci0+aXNvbGF0ZWRX
b3JsZCgpICE9ICZjdXJyZW50V29ybGQoJnN0YXRlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
CiAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzTGlzdGVuZXItPmpzRnVuY3Rpb24oZG9j
dW1lbnQpOwogICAgICAgICBpZiAoIWZ1bmN0aW9uKQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgSlNPYmplY3QqIGxpc3RlbmVyRW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChl
eGVjKTsKLSAgICAgICAgbGlzdGVuZXJFbnRyeS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImxpc3RlbmVyIiksIGZ1bmN0aW9uKTsKLSAgICAgICAg
bGlzdGVuZXJFbnRyeS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgInVzZUNhcHR1cmUiKSwganNCb29sZWFuKGxpc3RlbmVySW5mby5ldmVudExpc3Rl
bmVyVmVjdG9yW2ldLnVzZUNhcHR1cmUpKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRl
eChleGVjLCBvdXRwdXRJbmRleCsrLCBKU1ZhbHVlKGxpc3RlbmVyRW50cnkpKTsKKyAgICAgICAg
SlNPYmplY3QqIGxpc3RlbmVyRW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwor
ICAgICAgICBsaXN0ZW5lckVudHJ5LT5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUsICJsaXN0ZW5lciIpLCBmdW5jdGlvbik7CisgICAgICAgIGxpc3Rl
bmVyRW50cnktPnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZSwgInVzZUNhcHR1cmUiKSwganNCb29sZWFuKGxpc3RlbmVySW5mby5ldmVudExpc3RlbmVy
VmVjdG9yW2ldLnVzZUNhcHR1cmUpKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleCgm
c3RhdGUsIG91dHB1dEluZGV4KyssIEpTVmFsdWUobGlzdGVuZXJFbnRyeSkpOwogICAgIH0KICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlIEpTQ29tbWFuZExpbmVBUElIb3N0OjpnZXRF
dmVudExpc3RlbmVycyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ29tbWFuZExpbmVBUElI
b3N0OjpnZXRFdmVudExpc3RlbmVycyhFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPCAxKQorICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPCAx
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIEpTVmFsdWUgdmFsdWUgPSBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gc3RhdGUudW5j
aGVja2VkQXJndW1lbnQoMCk7CiAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpIHx8IHZhbHVlLmlz
TnVsbCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIApAQCAtMTEyLDQ5ICsxMTIs
NDkgQEAgSlNWYWx1ZSBKU0NvbW1hbmRMaW5lQVBJSG9zdDo6Z2V0RXZlbnRMaXN0ZW5lcnMoRXhl
Y1N0YXRlKiBleGVjKQogICAgIFZlY3RvcjxFdmVudExpc3RlbmVySW5mbz4gbGlzdGVuZXJzQXJy
YXk7CiAgICAgaW1wbCgpLmdldEV2ZW50TGlzdGVuZXJzSW1wbChub2RlLCBsaXN0ZW5lcnNBcnJh
eSk7CiAKLSAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7
CisgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0ZW5lcnNBcnJheS5zaXplKCk7ICsraSkgewot
ICAgICAgICBKU0FycmF5KiBsaXN0ZW5lcnMgPSBnZXRKU0xpc3RlbmVyRnVuY3Rpb25zKGV4ZWMs
ICZub2RlLT5kb2N1bWVudCgpLCBsaXN0ZW5lcnNBcnJheVtpXSk7CisgICAgICAgIEpTQXJyYXkq
IGxpc3RlbmVycyA9IGdldEpTTGlzdGVuZXJGdW5jdGlvbnMoc3RhdGUsICZub2RlLT5kb2N1bWVu
dCgpLCBsaXN0ZW5lcnNBcnJheVtpXSk7CiAgICAgICAgIGlmICghbGlzdGVuZXJzLT5sZW5ndGgo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBBdG9taWNTdHJpbmcgZXZlbnRUeXBl
ID0gbGlzdGVuZXJzQXJyYXlbaV0uZXZlbnRUeXBlOwotICAgICAgICByZXN1bHQtPnB1dERpcmVj
dChleGVjLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIGV2ZW50VHlwZS5pbXBs
KCkpLCBKU1ZhbHVlKGxpc3RlbmVycykpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdChzdGF0
ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgZXZlbnRUeXBlLmltcGwoKSks
IEpTVmFsdWUobGlzdGVuZXJzKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
SlNWYWx1ZSBKU0NvbW1hbmRMaW5lQVBJSG9zdDo6aW5zcGVjdChFeGVjU3RhdGUqIGV4ZWMpCitK
U1ZhbHVlIEpTQ29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7
Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7Ci0gICAgICAgIERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlIG9iamVjdChleGVjLT52bSgpLCBleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7Ci0gICAgICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGhpbnRzKGV4ZWMtPnZtKCks
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKLSAgICAgICAgaW1wbCgpLmluc3BlY3RJbXBs
KG9iamVjdC50b0luc3BlY3RvclZhbHVlKGV4ZWMpLCBoaW50cy50b0luc3BlY3RvclZhbHVlKGV4
ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID49IDIpIHsKKyAgICAgICAgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUgb2JqZWN0KHN0YXRlLnZtKCksIHN0YXRlLnVuY2hlY2tlZEFy
Z3VtZW50KDApKTsKKyAgICAgICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgaGludHMoc3RhdGUu
dm0oKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgICAgICBpbXBsKCkuaW5zcGVj
dEltcGwob2JqZWN0LnRvSW5zcGVjdG9yVmFsdWUoJnN0YXRlKSwgaGludHMudG9JbnNwZWN0b3JW
YWx1ZSgmc3RhdGUpKTsKICAgICB9CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAot
SlNWYWx1ZSBKU0NvbW1hbmRMaW5lQVBJSG9zdDo6ZGF0YWJhc2VJZChFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTQ29tbWFuZExpbmVBUElIb3N0OjpkYXRhYmFzZUlkKEV4ZWNTdGF0ZSYgc3Rh
dGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgaWYgKHN0YXRl
LmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0g
ICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gSlNEYXRhYmFzZTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApKTsKKyAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSBKU0RhdGFiYXNlOjp0
b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmIChkYXRhYmFzZSkK
LSAgICAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGltcGwoKS5kYXRhYmFzZUlk
SW1wbChkYXRhYmFzZSkpOworICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRl
LCBpbXBsKCkuZGF0YWJhc2VJZEltcGwoZGF0YWJhc2UpKTsKIAogICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTQ29tbWFuZExpbmVBUElIb3N0OjpzdG9yYWdlSWQoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NvbW1hbmRMaW5lQVBJSG9zdDo6c3RvcmFnZUlkKEV4
ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisg
ICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogCi0gICAgU3RvcmFnZSogc3RvcmFnZSA9IEpTU3RvcmFnZTo6dG9XcmFwcGVkKGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBTdG9yYWdlKiBzdG9yYWdlID0gSlNTdG9y
YWdlOjp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmIChzdG9y
YWdlKQotICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgaW1wbCgpLnN0b3Jh
Z2VJZEltcGwoc3RvcmFnZSkpOworICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoJnN0
YXRlLCBpbXBsKCkuc3RvcmFnZUlkSW1wbChzdG9yYWdlKSk7CiAKICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5
cHRvQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQ3VzdG9t
LmNwcAppbmRleCAxNThiMzU2Y2QxZjEwOTk3NWUxOTZhZWY2ZGZiNmE5ZGRjM2JkYjc0Li5kMDdi
ZWFjYTE1YTU0NzJiNDY5MGFhYzQ1YzFhZDc1NGNmNWQ5YTM5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDcnlwdG9DdXN0b20uY3BwCkBAIC0zNSwyMSArMzUsMjEgQEAgdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTQ3J5
cHRvOjpnZXRSYW5kb21WYWx1ZXMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NyeXB0bzo6
Z2V0UmFuZG9tVmFsdWVzKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9u
KGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3Rh
dGUuYXJndW1lbnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dF
eGNlcHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsK
IAotICAgIEpTVmFsdWUgYnVmZmVyID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgSlNWYWx1ZSBi
dWZmZXIgPSBzdGF0ZS5hcmd1bWVudCgwKTsKICAgICBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBh
cnJheUJ1ZmZlclZpZXcgPSB0b0FycmF5QnVmZmVyVmlldyhidWZmZXIpOwogICAgIGlmICghYXJy
YXlCdWZmZXJWaWV3KQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAg
ICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CiAgICAgaW1wbCgpLmdldFJhbmRvbVZhbHVlcyhhcnJheUJ1ZmZlclZpZXcuZ2V0KCks
IGVjKTsKIAogICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDcnlwdG9LZXlDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDcnlwdG9LZXlDdXN0b20uY3BwCmluZGV4IGIyNGFlMGNjMGUxMjY0ZmRhMzc4NzFmMGJmZDcx
M2YwODJlMTY4YmUuLmFkODFlNGQ0NWIxZTYxZWFlMTg3MGFhZWM3M2RlM2FlNWRiYzg5ZjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5Q3VzdG9tLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleUN1c3RvbS5jcHAK
QEAgLTM1LDkgKzM1LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1KU1ZhbHVlIEpTQ3J5cHRvS2V5OjphbGdvcml0aG0oSlNDOjpFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0CitKU1ZhbHVlIEpTQ3J5cHRvS2V5OjphbGdvcml0aG0oSlNDOjpFeGVjU3RhdGUm
IHN0YXRlKSBjb25zdAogewotICAgIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlciBidWlsZGVyKGV4
ZWMpOworICAgIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlciBidWlsZGVyKCZzdGF0ZSk7CiAgICAg
aW1wbCgpLmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oYnVpbGRlcik7CiAgICAgcmV0dXJuIGJ1
aWxkZXIucmVzdWx0KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q3VzdG9tRXZlbnRDdXN0b20uY3BwCmluZGV4IGRhZDczYTJhNDIwYzZiNjM0OTg1MzRlMWVjZDE2
OGUwYjA2MmI3MWEuLmFmMTQ5ZGFhZjA1NDI1MTIzZmU4ODY5NDk5ZDViN2JlZjU4MDNlNWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0b20u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0b20u
Y3BwCkBAIC0zNiw3ICszNiw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAKLUpTVmFsdWUgSlNDdXN0b21FdmVudDo6ZGV0YWlsKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKK0pTVmFsdWUgSlNDdXN0b21FdmVudDo6ZGV0YWlsKEV4ZWNTdGF0ZSYgc3Rh
dGUpIGNvbnN0CiB7CiAgICAgQ3VzdG9tRXZlbnQmIGV2ZW50ID0gaW1wbCgpOwogICAgIApAQCAt
NDUsMTUgKzQ1LDE1IEBAIEpTVmFsdWUgSlNDdXN0b21FdmVudDo6ZGV0YWlsKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKIAogICAgIEpTVmFsdWUgZGV0YWlsID0gZXZlbnQuZGV0YWlsKCkuanNWYWx1
ZSgpOwogICAgIAotICAgIGlmIChkZXRhaWwuaXNPYmplY3QoKSAmJiAmd29ybGRGb3JET01PYmpl
Y3QoZGV0YWlsLmdldE9iamVjdCgpKSAhPSAmY3VycmVudFdvcmxkKGV4ZWMpKSB7CisgICAgaWYg
KGRldGFpbC5pc09iamVjdCgpICYmICZ3b3JsZEZvckRPTU9iamVjdChkZXRhaWwuZ2V0T2JqZWN0
KCkpICE9ICZjdXJyZW50V29ybGQoJnN0YXRlKSkgewogICAgICAgICAvLyBXZSBuZWVkIHRvIG1h
a2Ugc3VyZSBDdXN0b21FdmVudHMgZG8gbm90IGxlYWsgdGhlaXIgZGV0YWlsIHByb3BlcnR5IGFj
cm9zcyBpc29sYXRlZCBET00gd29ybGRzLgogICAgICAgICAvLyBJZGVhbGx5LCB3ZSB3b3VsZCBj
aGVjayB0aGF0IHRoZSB3b3JsZHMgaGF2ZSBkaWZmZXJlbnQgcHJpdmlsZWdlcyBidXQgdGhhdCdz
IG5vdCBwb3NzaWJsZSB5ZXQuCi0gICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHNlcmlhbGl6ZWREZXRhaWwgPSBldmVudC50cnlTZXJpYWxpemVEZXRhaWwoZXhlYyk7CisgICAg
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWREZXRhaWwgPSBldmVu
dC50cnlTZXJpYWxpemVEZXRhaWwoJnN0YXRlKTsKICAgICAgICAgCiAgICAgICAgIGlmICghc2Vy
aWFsaXplZERldGFpbCkKICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICAgICAgCi0g
ICAgICAgIHJldHVybiBzZXJpYWxpemVkRGV0YWlsLT5kZXNlcmlhbGl6ZShleGVjLCBnbG9iYWxP
YmplY3QoKSwgbnVsbHB0cik7CisgICAgICAgIHJldHVybiBzZXJpYWxpemVkRGV0YWlsLT5kZXNl
cmlhbGl6ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBudWxscHRyKTsKICAgICB9CiAgICAgCiAg
ICAgcmV0dXJuIGRldGFpbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NRm9ybURhdGFDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01Gb3JtRGF0YUN1c3RvbS5jcHAKaW5kZXggN2VjMjQ5NWRkZWJmYzRhMzUyNmFkNmMzZjM4ZTI0
NDk2YjRhY2IwYS4uMTNmZGI1MmQ2YzI1MzE5YzE5MzhhNzQyOTIyNDIyMDZhY2ZlYzY3OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5j
cHAKQEAgLTU1LDE4ICs1NSwxOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0
cnVjdEpTRE9NRm9ybURhdGEoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwg
ZG9tRm9ybURhdGEuZ2V0KCkpKSk7CiB9CiAKLUpTVmFsdWUgSlNET01Gb3JtRGF0YTo6YXBwZW5k
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNET01Gb3JtRGF0YTo6YXBwZW5kKEV4ZWNTdGF0
ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7Ci0gICAg
ICAgIFN0cmluZyBuYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+YXJndW1lbnQoMSk7CisgICAg
aWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0g
c3RhdGUuYXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKKyAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IHN0YXRlLmFyZ3VtZW50KDEpOwogICAgICAgICBpZiAodmFsdWUu
aW5oZXJpdHMoSlNCbG9iOjppbmZvKCkpKSB7CiAgICAgICAgICAgICBTdHJpbmcgZmlsZW5hbWU7
Ci0gICAgICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDMgJiYgIWV4ZWMtPmFy
Z3VtZW50KDIpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICAgICAgZmlsZW5hbWUg
PSBleGVjLT5hcmd1bWVudCgyKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAg
ICAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID49IDMgJiYgIXN0YXRlLmFyZ3VtZW50KDIp
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBzdGF0ZS5h
cmd1bWVudCgyKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwogICAgICAgICAgICAg
aW1wbCgpLmFwcGVuZChuYW1lLCBKU0Jsb2I6OnRvV3JhcHBlZCh2YWx1ZSksIGZpbGVuYW1lKTsK
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpbXBsKCkuYXBwZW5kKG5hbWUsIHZhbHVlLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgICAgICAgICBpbXBsKCkuYXBwZW5kKG5h
bWUsIHZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSkpOwogICAgIH0KIAogICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01Ub2tlbkxpc3RDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Ub2tlbkxpc3RDdXN0b20uY3BwCmluZGV4IDBhMTlmYzZkNzhhYmJmZTJkZGM1Y2Q0
ZjIyZGI5M2JkMjM3ODIxZGEuLmJkZDQ4Nzc4NDllY2E3Y2NjOTFiYjZkYTViYzQzZDE2NjI4ZGRk
Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NVG9rZW5MaXN0
Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVRva2VuTGlz
dEN1c3RvbS5jcHAKQEAgLTM0LDIzICszNCwyMyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNET01Ub2tlbkxpc3Q6OnRvZ2dsZShFeGVj
U3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0RPTVRva2VuTGlzdDo6dG9nZ2xlKEV4ZWNTdGF0ZSYg
c3RhdGUpCiB7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
LSAgICAgICAgcmV0dXJuIHN0YXRlLT52bSgpLnRocm93RXhjZXB0aW9uKHN0YXRlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS5h
cmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNl
cHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFN0cmluZyB0b2tlbiA9IHN0YXRlLT5hcmd1
bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBTdHJpbmcgdG9rZW4gPSBzdGF0ZS5hcmd1bWVu
dCgwKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOworICAgIGlmIChVTkxJS0VMWShz
dGF0ZS5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAg
ICAgLy8gdG9nZ2xlKCkgbmVlZHMgdG8gYmUgYWJsZSB0byBkaXN0aW5ndWlzaCB1bmRlZmluZWQv
bWlzc2luZyBmcm9tIHRoZSBmYWxzZSB2YWx1ZSBmb3IgdGhlICdmb3JjZScgcGFyYW1ldGVyLgot
ICAgIE9wdGlvbmFsPGJvb2w+IGZvcmNlID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVk
KCkgPyBOdWxsb3B0IDogT3B0aW9uYWw8Ym9vbD4oc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEp
LnRvQm9vbGVhbihzdGF0ZSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIE9wdGlvbmFsPGJvb2w+IGZvcmNlID0gc3RhdGUuYXJndW1lbnQoMSkuaXNVbmRl
ZmluZWQoKSA/IE51bGxvcHQgOiBPcHRpb25hbDxib29sPihzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgxKS50b0Jvb2xlYW4oJnN0YXRlKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc0Jvb2xlYW4oaW1wbCgpLnRvZ2dsZSh0b2tlbiwgZm9yY2UsIGVjKSk7CiAKLSAgICBz
ZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBl
Yyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCmluZGV4IDQ4YTg2YzQ4ZGU4N2M4YjVmYjk4MzY1
MzAyYmJlYTYxMDhiZDIyNjYuLjI1N2E5NTg2MzllZGU3N2MwYmEyYTFhMTZmNDhlYTc5MzUwOWRk
YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3Rv
bS5jcHAKQEAgLTQ2OSw3NiArNDY5LDc2IEBAIGJvb2wgSlNET01XaW5kb3c6OmRlZmluZU93blBy
b3BlcnR5KEpTQzo6SlNPYmplY3QqIG9iamVjdCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsCiAKIC8v
IEN1c3RvbSBBdHRyaWJ1dGVzCiAKLXZvaWQgSlNET01XaW5kb3c6OnNldExvY2F0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNET01XaW5kb3c6OnNldExvY2F0aW9u
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAjaWYgRU5BQkxFKERBU0hCT0FS
RF9TVVBQT1JUKQogICAgIC8vIFRvIGF2b2lkIGJyZWFraW5nIG9sZCB3aWRnZXRzLCBtYWtlICJ2
YXIgbG9jYXRpb24gPSIgaW4gYSB0b3AtbGV2ZWwgZnJhbWUgY3JlYXRlCiAgICAgLy8gYSBwcm9w
ZXJ0eSBuYW1lZCAibG9jYXRpb24iIGluc3RlYWQgb2YgcGVyZm9ybWluZyBhIG5hdmlnYXRpb24g
KDxyZGFyOi8vcHJvYmxlbS81Njg4MDM5PikuCi0gICAgaWYgKEZyYW1lKiBhY3RpdmVGcmFtZSA9
IGFjdGl2ZURPTVdpbmRvdyhleGVjKS5mcmFtZSgpKSB7CisgICAgaWYgKEZyYW1lKiBhY3RpdmVG
cmFtZSA9IGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpLmZyYW1lKCkpIHsKICAgICAgICAgaWYgKGFj
dGl2ZUZyYW1lLT5zZXR0aW5ncygpLnVzZXNEYXNoYm9hcmRCYWNrd2FyZENvbXBhdGliaWxpdHlN
b2RlKCkgJiYgIWFjdGl2ZUZyYW1lLT50cmVlKCkucGFyZW50KCkpIHsKLSAgICAgICAgICAgIGlm
IChCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coZXhlYywgaW1w
bCgpKSkKLSAgICAgICAgICAgICAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhleGVjLCAibG9jYXRpb24iKSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKEJp
bmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygmc3RhdGUsIGltcGwo
KSkpCisgICAgICAgICAgICAgICAgcHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLCAibG9jYXRpb24iKSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAKLSAgICBTdHJpbmcgbG9jYXRpb25TdHJpbmcg
PSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIFN0cmluZyBsb2NhdGlvblN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCZz
dGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoTG9jYXRpb24qIGxvY2F0aW9uID0gaW1wbCgpLmxvY2F0
aW9uKCkpCi0gICAgICAgIGxvY2F0aW9uLT5zZXRIcmVmKGFjdGl2ZURPTVdpbmRvdyhleGVjKSwg
Zmlyc3RET01XaW5kb3coZXhlYyksIGxvY2F0aW9uU3RyaW5nKTsKKyAgICAgICAgbG9jYXRpb24t
PnNldEhyZWYoYWN0aXZlRE9NV2luZG93KCZzdGF0ZSksIGZpcnN0RE9NV2luZG93KCZzdGF0ZSks
IGxvY2F0aW9uU3RyaW5nKTsKIH0KIAotSlNWYWx1ZSBKU0RPTVdpbmRvdzo6ZXZlbnQoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6ZXZlbnQoRXhlY1N0YXRlJiBz
dGF0ZSkgY29uc3QKIHsKICAgICBFdmVudCogZXZlbnQgPSBjdXJyZW50RXZlbnQoKTsKICAgICBp
ZiAoIWV2ZW50KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gdG9K
UyhleGVjLCBjb25zdF9jYXN0PEpTRE9NV2luZG93Kj4odGhpcyksIGV2ZW50KTsKKyAgICByZXR1
cm4gdG9KUygmc3RhdGUsIGNvbnN0X2Nhc3Q8SlNET01XaW5kb3cqPih0aGlzKSwgZXZlbnQpOwog
fQogCi1KU1ZhbHVlIEpTRE9NV2luZG93OjppbWFnZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitK
U1ZhbHVlIEpTRE9NV2luZG93OjppbWFnZShFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewotICAg
IHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU0ltYWdlQ29uc3RydWN0b3I+KGV4ZWMtPnZtKCks
IHRoaXMpOworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU0ltYWdlQ29uc3RydWN0b3I+
KHN0YXRlLnZtKCksIHRoaXMpOwogfQogCiAjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi1K
U1ZhbHVlIEpTRE9NV2luZG93Ojp0b3VjaChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVl
IEpTRE9NV2luZG93Ojp0b3VjaChFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewotICAgIHJldHVy
biBnZXRET01Db25zdHJ1Y3RvcjxKU1RvdWNoQ29uc3RydWN0b3I+KGV4ZWMtPnZtKCksIHRoaXMp
OworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1RvdWNoQ29uc3RydWN0b3I+KHN0YXRl
LnZtKCksIHRoaXMpOwogfQogCi1KU1ZhbHVlIEpTRE9NV2luZG93Ojp0b3VjaExpc3QoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6dG91Y2hMaXN0KEV4ZWNTdGF0
ZSYgc3RhdGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVG91Y2hM
aXN0Q29uc3RydWN0b3I+KGV4ZWMtPnZtKCksIHRoaXMpOworICAgIHJldHVybiBnZXRET01Db25z
dHJ1Y3RvcjxKU1RvdWNoTGlzdENvbnN0cnVjdG9yPihzdGF0ZS52bSgpLCB0aGlzKTsKIH0KICNl
bmRpZgogCiAvLyBDdXN0b20gZnVuY3Rpb25zCiAKLUpTVmFsdWUgSlNET01XaW5kb3c6Om9wZW4o
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6b3BlbihFeGVjU3RhdGUmIHN0
YXRlKQogewotICAgIFN0cmluZyB1cmxTdHJpbmcgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5l
ZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgU3RyaW5nIHVybFN0cmluZyA9IHZhbHVlVG9TdHJpbmdXaXRoVW5k
ZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSk7CisgICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBB
dG9taWNTdHJpbmcgZnJhbWVOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51
bGwoKSA/ICJfYmxhbmsiIDogZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBBdG9taWNTdHJpbmcg
ZnJhbWVOYW1lID0gc3RhdGUuYXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSA/ICJfYmxh
bmsiIDogc3RhdGUuYXJndW1lbnQoMSkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsK
KyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgIFN0cmluZyB3aW5kb3dGZWF0dXJlc1N0cmluZyA9IHZhbHVlVG9TdHJpbmdXaXRo
VW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQoMikpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBTdHJpbmcgd2luZG93RmVhdHVyZXNTdHJpbmcgPSB2
YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKCZzdGF0ZSwgc3RhdGUuYXJndW1l
bnQoMikpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKLSAgICBSZWZQdHI8RE9NV2luZG93PiBvcGVuZWRXaW5kb3cgPSBpbXBs
KCkub3Blbih1cmxTdHJpbmcsIGZyYW1lTmFtZSwgd2luZG93RmVhdHVyZXNTdHJpbmcsIGFjdGl2
ZURPTVdpbmRvdyhleGVjKSwgZmlyc3RET01XaW5kb3coZXhlYykpOworICAgIFJlZlB0cjxET01X
aW5kb3c+IG9wZW5lZFdpbmRvdyA9IGltcGwoKS5vcGVuKHVybFN0cmluZywgZnJhbWVOYW1lLCB3
aW5kb3dGZWF0dXJlc1N0cmluZywgYWN0aXZlRE9NV2luZG93KCZzdGF0ZSksIGZpcnN0RE9NV2lu
ZG93KCZzdGF0ZSkpOwogICAgIGlmICghb3BlbmVkV2luZG93KQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICByZXR1cm4gdG9KUyhleGVjLCBvcGVuZWRXaW5kb3cuZ2V0KCkpOwor
ICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgb3BlbmVkV2luZG93LmdldCgpKTsKIH0KIAogY2xhc3Mg
RGlhbG9nSGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgRGlhbG9nSGFuZGxlcihFeGVj
U3RhdGUqIGV4ZWMpCisgICAgZXhwbGljaXQgRGlhbG9nSGFuZGxlcihFeGVjU3RhdGUmIGV4ZWMp
CiAgICAgICAgIDogbV9leGVjKGV4ZWMpCiAgICAgewogICAgIH0KQEAgLTU0Nyw3ICs1NDcsNyBA
QCBwdWJsaWM6CiAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSgpIGNvbnN0OwogCiBwcml2YXRlOgot
ICAgIEV4ZWNTdGF0ZSogbV9leGVjOworICAgIEV4ZWNTdGF0ZSYgbV9leGVjOwogICAgIFJlZlB0
cjxGcmFtZT4gbV9mcmFtZTsKIH07CiAKQEAgLTU1Nyw0MiArNTU3LDQyIEBAIGlubGluZSB2b2lk
IERpYWxvZ0hhbmRsZXI6OmRpYWxvZ0NyZWF0ZWQoRE9NV2luZG93JiBkaWFsb2cpCiAgICAgCiAg
ICAgLy8gRklYTUU6IFRoaXMgbG9va3MgbGlrZSBhIGxlYWsgYmV0d2VlbiB0aGUgbm9ybWFsIHdv
cmxkIGFuZCBhbiBpc29sYXRlZAogICAgIC8vICAgICAgICB3b3JsZCBpZiBkaWFsb2dBcmd1bWVu
dHMgY29tZXMgZnJvbSBhbiBpc29sYXRlZCB3b3JsZC4KLSAgICBKU0RPTVdpbmRvdyogZ2xvYmFs
T2JqZWN0ID0gdG9KU0RPTVdpbmRvdyhtX2ZyYW1lLmdldCgpLCBub3JtYWxXb3JsZChtX2V4ZWMt
PnZtKCkpKTsKLSAgICBpZiAoSlNWYWx1ZSBkaWFsb2dBcmd1bWVudHMgPSBtX2V4ZWMtPmFyZ3Vt
ZW50KDEpKQotICAgICAgICBnbG9iYWxPYmplY3QtPnB1dERpcmVjdChtX2V4ZWMtPnZtKCksIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcobV9leGVjLCAiZGlhbG9nQXJndW1lbnRzIiksIGRpYWxvZ0Fy
Z3VtZW50cyk7CisgICAgSlNET01XaW5kb3cqIGdsb2JhbE9iamVjdCA9IHRvSlNET01XaW5kb3co
bV9mcmFtZS5nZXQoKSwgbm9ybWFsV29ybGQobV9leGVjLnZtKCkpKTsKKyAgICBpZiAoSlNWYWx1
ZSBkaWFsb2dBcmd1bWVudHMgPSBtX2V4ZWMuYXJndW1lbnQoMSkpCisgICAgICAgIGdsb2JhbE9i
amVjdC0+cHV0RGlyZWN0KG1fZXhlYy52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZtX2V4
ZWMsICJkaWFsb2dBcmd1bWVudHMiKSwgZGlhbG9nQXJndW1lbnRzKTsKIH0KIAogaW5saW5lIEpT
VmFsdWUgRGlhbG9nSGFuZGxlcjo6cmV0dXJuVmFsdWUoKSBjb25zdAogewotICAgIEpTRE9NV2lu
ZG93KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NV2luZG93KG1fZnJhbWUuZ2V0KCksIG5vcm1hbFdv
cmxkKG1fZXhlYy0+dm0oKSkpOworICAgIEpTRE9NV2luZG93KiBnbG9iYWxPYmplY3QgPSB0b0pT
RE9NV2luZG93KG1fZnJhbWUuZ2V0KCksIG5vcm1hbFdvcmxkKG1fZXhlYy52bSgpKSk7CiAgICAg
aWYgKCFnbG9iYWxPYmplY3QpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIElk
ZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcobV9leGVjLCAicmV0
dXJuVmFsdWUiKTsKKyAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZtX2V4ZWMsICJyZXR1cm5WYWx1ZSIpOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGds
b2JhbE9iamVjdCk7Ci0gICAgaWYgKCFKU0dsb2JhbE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
KGdsb2JhbE9iamVjdCwgbV9leGVjLCBpZGVudGlmaWVyLCBzbG90KSkKKyAgICBpZiAoIUpTR2xv
YmFsT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0LCAmbV9leGVjLCBpZGVu
dGlmaWVyLCBzbG90KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJu
IHNsb3QuZ2V0VmFsdWUobV9leGVjLCBpZGVudGlmaWVyKTsKKyAgICByZXR1cm4gc2xvdC5nZXRW
YWx1ZSgmbV9leGVjLCBpZGVudGlmaWVyKTsKIH0KIAotSlNWYWx1ZSBKU0RPTVdpbmRvdzo6c2hv
d01vZGFsRGlhbG9nKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNET01XaW5kb3c6OnNob3dN
b2RhbERpYWxvZyhFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIFN0cmluZyB1cmxTdHJpbmcgPSB2
YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50
KDApKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgU3RyaW5nIHVybFN0cmlu
ZyA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS5h
cmd1bWVudCgwKSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICBTdHJpbmcgZGlhbG9nRmVhdHVyZXNTdHJpbmcgPSB2YWx1
ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIp
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgU3RyaW5nIGRpYWxvZ0ZlYXR1
cmVzU3RyaW5nID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygmc3RhdGUs
IHN0YXRlLmFyZ3VtZW50KDIpKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgRGlhbG9nSGFuZGxlciBoYW5kbGVyKGV4
ZWMpOworICAgIERpYWxvZ0hhbmRsZXIgaGFuZGxlcihzdGF0ZSk7CiAKLSAgICBpbXBsKCkuc2hv
d01vZGFsRGlhbG9nKHVybFN0cmluZywgZGlhbG9nRmVhdHVyZXNTdHJpbmcsIGFjdGl2ZURPTVdp
bmRvdyhleGVjKSwgZmlyc3RET01XaW5kb3coZXhlYyksIFsmaGFuZGxlcl0oRE9NV2luZG93JiBk
aWFsb2cpIHsKKyAgICBpbXBsKCkuc2hvd01vZGFsRGlhbG9nKHVybFN0cmluZywgZGlhbG9nRmVh
dHVyZXNTdHJpbmcsIGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpLCBmaXJzdERPTVdpbmRvdygmc3Rh
dGUpLCBbJmhhbmRsZXJdKERPTVdpbmRvdyYgZGlhbG9nKSB7CiAgICAgICAgIGhhbmRsZXIuZGlh
bG9nQ3JlYXRlZChkaWFsb2cpOwogICAgIH0pOwogCiAgICAgcmV0dXJuIGhhbmRsZXIucmV0dXJu
VmFsdWUoKTsKIH0KIAotc3RhdGljIEpTVmFsdWUgaGFuZGxlUG9zdE1lc3NhZ2UoRE9NV2luZG93
KiBpbXBsLCBFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBoYW5kbGVQb3N0TWVzc2Fn
ZShET01XaW5kb3cmIGltcGwsIEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgTWVzc2FnZVBvcnRB
cnJheSBtZXNzYWdlUG9ydHM7CiAgICAgQXJyYXlCdWZmZXJBcnJheSBhcnJheUJ1ZmZlcnM7CkBA
IC02MDQsMTAyICs2MDQsMTAyIEBAIHN0YXRpYyBKU1ZhbHVlIGhhbmRsZVBvc3RNZXNzYWdlKERP
TVdpbmRvdyogaW1wbCwgRXhlY1N0YXRlKiBleGVjKQogICAgIC8vIExlZ2FjeSBub24tc3RhbmRh
cmQgaW1wbGVtZW50YXRpb25zIGluIHdlYmtpdCBhbGxvd2VkOgogICAgIC8vICAgcG9zdE1lc3Nh
Z2UobWVzc2FnZSwge3NlcXVlbmNlIG9mIHRyYW5zZmVycmFibGVzfSwgdGFyZ2V0T3JpZ2luKTsK
ICAgICBpbnQgdGFyZ2V0T3JpZ2luQXJnSW5kZXggPSAxOwotICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPiAyKSB7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+IDIpIHsKICAg
ICAgICAgaW50IHRyYW5zZmVyYWJsZXNBcmdJbmRleCA9IDI7Ci0gICAgICAgIGlmIChleGVjLT5h
cmd1bWVudCgyKS5pc1N0cmluZygpKSB7CisgICAgICAgIGlmIChzdGF0ZS5hcmd1bWVudCgyKS5p
c1N0cmluZygpKSB7CiAgICAgICAgICAgICB0YXJnZXRPcmlnaW5BcmdJbmRleCA9IDI7CiAgICAg
ICAgICAgICB0cmFuc2ZlcmFibGVzQXJnSW5kZXggPSAxOwogICAgICAgICB9Ci0gICAgICAgIGZp
bGxNZXNzYWdlUG9ydEFycmF5KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KHRyYW5zZmVyYWJsZXNBcmdJ
bmRleCksIG1lc3NhZ2VQb3J0cywgYXJyYXlCdWZmZXJzKTsKKyAgICAgICAgZmlsbE1lc3NhZ2VQ
b3J0QXJyYXkoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KHRyYW5zZmVyYWJsZXNBcmdJbmRleCksIG1l
c3NhZ2VQb3J0cywgYXJyYXlCdWZmZXJzKTsKICAgICB9Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtZXNzYWdl
ID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCks
CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSA9IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6Y3JlYXRlKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJm1lc3NhZ2VQb3J0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXJyYXlCdWZmZXJzKTsKIAot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgU3RyaW5nIHRhcmdldE9y
aWdpbiA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+
YXJndW1lbnQodGFyZ2V0T3JpZ2luQXJnSW5kZXgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgU3RyaW5nIHRhcmdldE9yaWdpbiA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZp
bmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCh0YXJnZXRPcmlnaW5BcmdJbmRl
eCkpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsLT5wb3N0TWVz
c2FnZShtZXNzYWdlLnJlbGVhc2UoKSwgJm1lc3NhZ2VQb3J0cywgdGFyZ2V0T3JpZ2luLCBhY3Rp
dmVET01XaW5kb3coZXhlYyksIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwor
ICAgIGltcGwucG9zdE1lc3NhZ2UobWVzc2FnZS5yZWxlYXNlKCksICZtZXNzYWdlUG9ydHMsIHRh
cmdldE9yaWdpbiwgYWN0aXZlRE9NV2luZG93KCZzdGF0ZSksIGVjKTsKKyAgICBzZXRET01FeGNl
cHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNW
YWx1ZSBKU0RPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBK
U0RPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1cm4g
aGFuZGxlUG9zdE1lc3NhZ2UoJmltcGwoKSwgZXhlYyk7CisgICAgcmV0dXJuIGhhbmRsZVBvc3RN
ZXNzYWdlKGltcGwoKSwgc3RhdGUpOwogfQogCi1KU1ZhbHVlIEpTRE9NV2luZG93OjpzZXRUaW1l
b3V0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNET01XaW5kb3c6OnNldFRpbWVvdXQoRXhl
Y1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBDb250ZW50U2VjdXJpdHlQb2xpY3kqIGNvbnRlbnRTZWN1
cml0eVBvbGljeSA9IGltcGwoKS5kb2N1bWVudCgpID8gaW1wbCgpLmRvY3VtZW50KCktPmNvbnRl
bnRTZWN1cml0eVBvbGljeSgpIDogMDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0
aW9uPiBhY3Rpb24gPSBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3Qo
KS0+d29ybGQoKSwgY29udGVudFNlY3VyaXR5UG9saWN5KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgQ29udGVudFNlY3VyaXR5UG9saWN5KiBjb250ZW50U2VjdXJpdHlQb2xp
Y3kgPSBpbXBsKCkuZG9jdW1lbnQoKSA/IGltcGwoKS5kb2N1bWVudCgpLT5jb250ZW50U2VjdXJp
dHlQb2xpY3koKSA6IG51bGxwdHI7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNjaGVkdWxlZEFjdGlv
bj4gYWN0aW9uID0gU2NoZWR1bGVkQWN0aW9uOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3Qo
KS0+d29ybGQoKSwgY29udGVudFNlY3VyaXR5UG9saWN5KTsKKyAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKCFhY3Rp
b24pCiAgICAgICAgIHJldHVybiBqc051bWJlcigwKTsKIAotICAgIGludCBkZWxheSA9IGV4ZWMt
PmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgaW50IGRlbGF5ID0gc3RhdGUuYXJndW1l
bnQoMSkudG9JbnQzMigmc3RhdGUpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAg
aW50IHJlc3VsdCA9IGltcGwoKS5zZXRUaW1lb3V0KFdURjo6bW92ZShhY3Rpb24pLCBkZWxheSwg
ZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9u
KCZzdGF0ZSwgZWMpOwogCiAgICAgcmV0dXJuIGpzTnVtYmVyKHJlc3VsdCk7CiB9CiAKLUpTVmFs
dWUgSlNET01XaW5kb3c6OnNldEludGVydmFsKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNE
T01XaW5kb3c6OnNldEludGVydmFsKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgQ29udGVudFNl
Y3VyaXR5UG9saWN5KiBjb250ZW50U2VjdXJpdHlQb2xpY3kgPSBpbXBsKCkuZG9jdW1lbnQoKSA/
IGltcGwoKS5kb2N1bWVudCgpLT5jb250ZW50U2VjdXJpdHlQb2xpY3koKSA6IDA7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFNjaGVkdWxlZEFjdGlvbj4gYWN0aW9uID0gU2NoZWR1bGVkQWN0aW9uOjpj
cmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KCktPndvcmxkKCksIGNvbnRlbnRTZWN1cml0eVBvbGlj
eSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIENvbnRlbnRTZWN1cml0eVBv
bGljeSogY29udGVudFNlY3VyaXR5UG9saWN5ID0gaW1wbCgpLmRvY3VtZW50KCkgPyBpbXBsKCku
ZG9jdW1lbnQoKS0+Y29udGVudFNlY3VyaXR5UG9saWN5KCkgOiBudWxscHRyOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3Jl
YXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCktPndvcmxkKCksIGNvbnRlbnRTZWN1cml0eVBvbGlj
eSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICBpbnQgZGVsYXkgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMp
OworICAgIGludCBkZWxheSA9IHN0YXRlLmFyZ3VtZW50KDEpLnRvSW50MzIoJnN0YXRlKTsKIAog
ICAgIGlmICghYWN0aW9uKQogICAgICAgICByZXR1cm4ganNOdW1iZXIoMCk7CiAKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKICAgICBpbnQgcmVzdWx0ID0gaW1wbCgpLnNldEludGVydmFsKFdU
Rjo6bW92ZShhY3Rpb24pLCBkZWxheSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBl
Yyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogCiAgICAgcmV0dXJuIGpzTnVt
YmVyKHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUgSlNET01XaW5kb3c6OmFkZEV2ZW50TGlzdGVuZXIo
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5lcihF
eGVjU3RhdGUmIHN0YXRlKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS5mcmFtZSgpOwog
ICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgSlNW
YWx1ZSBsaXN0ZW5lciA9IGV4ZWMtPmFyZ3VtZW50KDEpOworICAgIEpTVmFsdWUgbGlzdGVuZXIg
PSBzdGF0ZS5hcmd1bWVudCgxKTsKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLmFkZEV2ZW50TGlzdGVuZXIo
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnRvQXRvbWljU3RyaW5nKGV4ZWMpLCBK
U0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBn
bG9iYWxPYmplY3QoKS0+d29ybGQoKSksIGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVj
KSk7CisgICAgaW1wbCgpLmFkZEV2ZW50TGlzdGVuZXIoc3RhdGUuYXJndW1lbnQoMCkudG9TdHJp
bmcoJnN0YXRlKS0+dG9BdG9taWNTdHJpbmcoJnN0YXRlKSwgSlNFdmVudExpc3RlbmVyOjpjcmVh
dGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgZ2xvYmFsT2JqZWN0KCktPndvcmxk
KCkpLCBzdGF0ZS5hcmd1bWVudCgyKS50b0Jvb2xlYW4oJnN0YXRlKSk7CiAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVu
ZXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0
ZW5lcihFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS5mcmFt
ZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0g
ICAgSlNWYWx1ZSBsaXN0ZW5lciA9IGV4ZWMtPmFyZ3VtZW50KDEpOworICAgIEpTVmFsdWUgbGlz
dGVuZXIgPSBzdGF0ZS5hcmd1bWVudCgxKTsKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLnJlbW92ZUV2ZW50
TGlzdGVuZXIoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnRvQXRvbWljU3RyaW5n
KGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIHRoaXMs
IGZhbHNlLCBnbG9iYWxPYmplY3QoKS0+d29ybGQoKSkucHRyKCksIGV4ZWMtPmFyZ3VtZW50KDIp
LnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1wbCgpLnJlbW92ZUV2ZW50TGlzdGVuZXIoc3RhdGUu
YXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dG9BdG9taWNTdHJpbmcoJnN0YXRlKSwgSlNF
dmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgZ2xv
YmFsT2JqZWN0KCktPndvcmxkKCkpLnB0cigpLCBzdGF0ZS5hcmd1bWVudCgyKS50b0Jvb2xlYW4o
JnN0YXRlKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YUN1ZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RhdGFDdWVDdXN0b20uY3BwCmluZGV4IDJhM2M5YThiM2IzMjA1
NDZjNzE4YjA1YjA0Nzc3ZmQzMjQ3MmQzMWUuLjdhYjMyNDVkMGJiYzJiZDdkZjU3ZjJiNzU5YjM0
YjA0ODBmMzM1YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0
YUN1ZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhQ3Vl
Q3VzdG9tLmNwcApAQCAtMzYsMTQgKzM2LDE0IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICNpZiBFTkFCTEUoREFUQUNVRV9WQUxVRSkKLUpTVmFsdWUgSlNE
YXRhQ3VlOjp2YWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTRGF0YUN1ZTo6
dmFsdWUoRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKLSAgICByZXR1cm4gaW1wbCgpLnZhbHVl
KGV4ZWMpOworICAgIHJldHVybiBpbXBsKCkudmFsdWUoJnN0YXRlKTsKIH0KIAotdm9pZCBKU0Rh
dGFDdWU6OnNldFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNE
YXRhQ3VlOjpzZXRWYWx1ZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewotICAg
IGltcGwoKS5zZXRWYWx1ZShleGVjLCB2YWx1ZSk7CisgICAgaW1wbCgpLnNldFZhbHVlKCZzdGF0
ZSwgdmFsdWUpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRGF0YVRyYW5zZmVyQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRGF0YVRyYW5zZmVyQ3VzdG9tLmNwcAppbmRleCA3OTE4ZjQwZTcwMDdjNjQ1ZmJiN2Rj
MjAwM2NkNWYzYTJlNzA3NzUzLi4wYjBmYTkwNzYwMTY1NjcxMzFjYjhkNzAzM2M5Yzg2MThjMGEx
ZGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFUcmFuc2Zl
ckN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhVHJhbnNm
ZXJDdXN0b20uY3BwCkBAIC0zNSwxMCArMzUsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTRGF0YVRyYW5zZmVyOjp0eXBlcyhFeGVj
U3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTRGF0YVRyYW5zZmVyOjp0eXBlcyhFeGVjU3Rh
dGUmIHN0YXRlKSBjb25zdAogewogICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzID0gaW1wbCgpLnR5
cGVzKCk7Ci0gICAgcmV0dXJuIHR5cGVzLmlzRW1wdHkoKSA/IGpzTnVsbCgpIDoganNBcnJheShl
eGVjLCBnbG9iYWxPYmplY3QoKSwgdHlwZXMpOworICAgIHJldHVybiB0eXBlcy5pc0VtcHR5KCkg
PyBqc051bGwoKSA6IGpzQXJyYXkoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgdHlwZXMpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3Bw
CmluZGV4IGVhNjJlMjhlZGM2MGQxYmY3ZTY4NTFlN2QxMzRjYTQxMDQ2YTgxZDUuLjgzODlkNjFl
NTgzMTM4NTRmNTU2MzNjMmM5M2Q1MTE3MzBjM2VhMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2Nv
cGVDdXN0b20uY3BwCkBAIC0zOSw5ICszOSw5IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotSlNDOjpKU1ZhbHVlIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFs
U2NvcGU6OnBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQorSlNDOjpKU1ZhbHVlIEpT
RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6OnBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSkKIHsKLSAgICByZXR1cm4gaGFuZGxlUG9zdE1lc3NhZ2UoZXhlYywgJmltcGwoKSk7Cisg
ICAgcmV0dXJuIGhhbmRsZVBvc3RNZXNzYWdlKHN0YXRlLCAmaW1wbCgpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEZXZpY2VNb3Rpb25FdmVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RldmljZU1vdGlvbkV2ZW50Q3VzdG9tLmNwcAppbmRleCBiODg2NTAxZjdlMmUwZDlkNWE2
MTY4MjU3NDY3ZTI4N2JhZTI2MjYyLi4xZDUwMGE2MmI0MWQ1NDcxMmE1ODM2YTFlYzA4YjY2Njgx
MjMxYjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RldmljZU1v
dGlvbkV2ZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Rl
dmljZU1vdGlvbkV2ZW50Q3VzdG9tLmNwcApAQCAtNDAsMzYgKzQwLDM2IEBAIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFJlZlB0cjxEZXZpY2VN
b3Rpb25EYXRhOjpBY2NlbGVyYXRpb24+IHJlYWRBY2NlbGVyYXRpb25Bcmd1bWVudChKU1ZhbHVl
IHZhbHVlLCBFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgUmVmUHRyPERldmljZU1vdGlvbkRhdGE6
OkFjY2VsZXJhdGlvbj4gcmVhZEFjY2VsZXJhdGlvbkFyZ3VtZW50KEpTVmFsdWUgdmFsdWUsIEV4
ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgLy8gR2l2ZW4gdGhlIGFib3ZlIHRlc3QsIHRo
aXMgd2lsbCBhbHdheXMgeWllbGQgYW4gb2JqZWN0LgotICAgIEpTT2JqZWN0KiBvYmplY3QgPSB2
YWx1ZS50b09iamVjdChleGVjKTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0gdmFsdWUudG9PYmpl
Y3QoJnN0YXRlKTsKIAotICAgIEpTVmFsdWUgeFZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAieCIpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgSlNWYWx1ZSB4VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAieCIpKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGJvb2wgY2FuUHJvdmlkZVggPSAheFZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7Ci0gICAgZG91YmxlIHggPSB4VmFsdWUudG9OdW1iZXIo
ZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGRvdWJsZSB4ID0geFZh
bHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIEpTVmFsdWUgeVZhbHVlID0gb2JqZWN0LT5nZXQo
ZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAieSIpKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgSlNWYWx1ZSB5VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAieSIpKTsKKyAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGJvb2wgY2FuUHJvdmlk
ZVkgPSAheVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7Ci0gICAgZG91YmxlIHkgPSB5VmFsdWUu
dG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGRvdWJs
ZSB5ID0geVZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIEpTVmFsdWUgelZhbHVlID0gb2Jq
ZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAieiIpKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgSlNWYWx1ZSB6VmFsdWUgPSBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAieiIpKTsKKyAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGJvb2wg
Y2FuUHJvdmlkZVogPSAhelZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7Ci0gICAgZG91YmxlIHog
PSB6VmFsdWUudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGRvdWJsZSB6ID0gelZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmICghY2FuUHJv
dmlkZVggJiYgIWNhblByb3ZpZGVZICYmICFjYW5Qcm92aWRlWikKQEAgLTc4LDM2ICs3OCwzNiBA
QCBzdGF0aWMgUmVmUHRyPERldmljZU1vdGlvbkRhdGE6OkFjY2VsZXJhdGlvbj4gcmVhZEFjY2Vs
ZXJhdGlvbkFyZ3VtZW50KEpTVmFsdWUgdgogICAgIHJldHVybiBEZXZpY2VNb3Rpb25EYXRhOjpB
Y2NlbGVyYXRpb246OmNyZWF0ZShjYW5Qcm92aWRlWCwgeCwgY2FuUHJvdmlkZVksIHksIGNhblBy
b3ZpZGVaLCB6KTsKIH0KIAotc3RhdGljIFJlZlB0cjxEZXZpY2VNb3Rpb25EYXRhOjpSb3RhdGlv
blJhdGU+IHJlYWRSb3RhdGlvblJhdGVBcmd1bWVudChKU1ZhbHVlIHZhbHVlLCBFeGVjU3RhdGUq
IGV4ZWMpCitzdGF0aWMgUmVmUHRyPERldmljZU1vdGlvbkRhdGE6OlJvdGF0aW9uUmF0ZT4gcmVh
ZFJvdGF0aW9uUmF0ZUFyZ3VtZW50KEpTVmFsdWUgdmFsdWUsIEV4ZWNTdGF0ZSYgc3RhdGUpCiB7
CiAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgLy8gR2l2ZW4gdGhlIGFib3ZlIHRlc3QsIHRoaXMgd2lsbCBhbHdheXMgeWll
bGQgYW4gb2JqZWN0LgotICAgIEpTT2JqZWN0KiBvYmplY3QgPSB2YWx1ZS50b09iamVjdChleGVj
KTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0gdmFsdWUudG9PYmplY3QoJnN0YXRlKTsKIAotICAg
IEpTVmFsdWUgYWxwaGFWYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoZXhlYywgImFscGhhIikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBKU1ZhbHVlIGFscGhhVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLCAiYWxwaGEiKSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBib29sIGNhblByb3ZpZGVBbHBoYSA9ICFh
bHBoYVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7Ci0gICAgZG91YmxlIGFscGhhID0gYWxwaGFW
YWx1ZS50b051bWJlcihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ZG91YmxlIGFscGhhID0gYWxwaGFWYWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBKU1ZhbHVl
IGJldGFWYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhl
YywgImJldGEiKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIEpTVmFsdWUg
YmV0YVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZSwgImJldGEiKSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICBib29sIGNhblByb3ZpZGVCZXRhID0gIWJldGFWYWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpOwotICAgIGRvdWJsZSBiZXRhID0gYmV0YVZhbHVlLnRvTnVtYmVyKGV4
ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBkb3VibGUgYmV0YSA9IGJl
dGFWYWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBKU1ZhbHVlIGdhbW1hVmFsdWUgPSBvYmpl
Y3QtPmdldChleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJnYW1tYSIpKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgSlNWYWx1ZSBnYW1tYVZhbHVlID0gb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImdhbW1hIikp
OworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgYm9vbCBjYW5Qcm92aWRlR2FtbWEgPSAhZ2FtbWFWYWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpOwotICAgIGRvdWJsZSBnYW1tYSA9IGdhbW1hVmFsdWUudG9OdW1iZXIoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGRvdWJsZSBnYW1tYSA9IGdhbW1hVmFsdWUu
dG9OdW1iZXIoJnN0YXRlKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKCFjYW5Qcm92aWRlQWxwaGEgJiYgIWNhblByb3Zp
ZGVCZXRhICYmICFjYW5Qcm92aWRlR2FtbWEpCkBAIC0xMTYsNDYgKzExNiw0NiBAQCBzdGF0aWMg
UmVmUHRyPERldmljZU1vdGlvbkRhdGE6OlJvdGF0aW9uUmF0ZT4gcmVhZFJvdGF0aW9uUmF0ZUFy
Z3VtZW50KEpTVmFsdWUgdgogICAgIHJldHVybiBEZXZpY2VNb3Rpb25EYXRhOjpSb3RhdGlvblJh
dGU6OmNyZWF0ZShjYW5Qcm92aWRlQWxwaGEsIGFscGhhLCBjYW5Qcm92aWRlQmV0YSwgYmV0YSwg
Y2FuUHJvdmlkZUdhbW1hLCBnYW1tYSk7CiB9CiAKLXN0YXRpYyBKU09iamVjdCogY3JlYXRlQWNj
ZWxlcmF0aW9uT2JqZWN0KGNvbnN0IERldmljZU1vdGlvbkRhdGE6OkFjY2VsZXJhdGlvbiogYWNj
ZWxlcmF0aW9uLCBFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNPYmplY3QqIGNyZWF0ZUFjY2Vs
ZXJhdGlvbk9iamVjdChjb25zdCBEZXZpY2VNb3Rpb25EYXRhOjpBY2NlbGVyYXRpb24qIGFjY2Vs
ZXJhdGlvbiwgRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBKU09iamVjdCogb2JqZWN0ID0gY29u
c3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+dm0o
KSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAieCIpLCBhY2NlbGVyYXRpb24tPmNhblBy
b3ZpZGVYKCkgPyBqc051bWJlcihhY2NlbGVyYXRpb24tPngoKSkgOiBqc051bGwoKSk7Ci0gICAg
b2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVj
LCAieSIpLCBhY2NlbGVyYXRpb24tPmNhblByb3ZpZGVZKCkgPyBqc051bWJlcihhY2NlbGVyYXRp
b24tPnkoKSkgOiBqc051bGwoKSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAieiIpLCBhY2NlbGVyYXRpb24tPmNhblByb3Zp
ZGVaKCkgPyBqc051bWJlcihhY2NlbGVyYXRpb24tPnooKSkgOiBqc051bGwoKSk7CisgICAgSlNP
YmplY3QqIG9iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7CisgICAgb2JqZWN0
LT5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ4
IiksIGFjY2VsZXJhdGlvbi0+Y2FuUHJvdmlkZVgoKSA/IGpzTnVtYmVyKGFjY2VsZXJhdGlvbi0+
eCgpKSA6IGpzTnVsbCgpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInkiKSwgYWNjZWxlcmF0aW9uLT5jYW5Qcm92aWRl
WSgpID8ganNOdW1iZXIoYWNjZWxlcmF0aW9uLT55KCkpIDoganNOdWxsKCkpOworICAgIG9iamVj
dC0+cHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAi
eiIpLCBhY2NlbGVyYXRpb24tPmNhblByb3ZpZGVaKCkgPyBqc051bWJlcihhY2NlbGVyYXRpb24t
PnooKSkgOiBqc051bGwoKSk7CiAgICAgcmV0dXJuIG9iamVjdDsKIH0KIAotc3RhdGljIEpTT2Jq
ZWN0KiBjcmVhdGVSb3RhdGlvblJhdGVPYmplY3QoY29uc3QgRGV2aWNlTW90aW9uRGF0YTo6Um90
YXRpb25SYXRlKiByb3RhdGlvblJhdGUsIEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU09iamVj
dCogY3JlYXRlUm90YXRpb25SYXRlT2JqZWN0KGNvbnN0IERldmljZU1vdGlvbkRhdGE6OlJvdGF0
aW9uUmF0ZSogcm90YXRpb25SYXRlLCBFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICBvYmplY3QtPnB1dERp
cmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJhbHBoYSIpLCBy
b3RhdGlvblJhdGUtPmNhblByb3ZpZGVBbHBoYSgpID8ganNOdW1iZXIocm90YXRpb25SYXRlLT5h
bHBoYSgpKSA6IGpzTnVsbCgpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJiZXRhIiksICByb3RhdGlvblJhdGUtPmNhblBy
b3ZpZGVCZXRhKCkgID8ganNOdW1iZXIocm90YXRpb25SYXRlLT5iZXRhKCkpICA6IGpzTnVsbCgp
KTsKLSAgICBvYmplY3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKGV4ZWMsICJnYW1tYSIpLCByb3RhdGlvblJhdGUtPmNhblByb3ZpZGVHYW1tYSgpID8ganNO
dW1iZXIocm90YXRpb25SYXRlLT5nYW1tYSgpKSA6IGpzTnVsbCgpKTsKKyAgICBKU09iamVjdCog
b2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKKyAgICBvYmplY3QtPnB1dERp
cmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImFscGhhIiks
IHJvdGF0aW9uUmF0ZS0+Y2FuUHJvdmlkZUFscGhhKCkgPyBqc051bWJlcihyb3RhdGlvblJhdGUt
PmFscGhhKCkpIDoganNOdWxsKCkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHN0YXRlLnZtKCks
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYmV0YSIpLCAgcm90YXRpb25SYXRlLT5j
YW5Qcm92aWRlQmV0YSgpICA/IGpzTnVtYmVyKHJvdGF0aW9uUmF0ZS0+YmV0YSgpKSAgOiBqc051
bGwoKSk7CisgICAgb2JqZWN0LT5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmc3RhdGUsICJnYW1tYSIpLCByb3RhdGlvblJhdGUtPmNhblByb3ZpZGVHYW1tYSgp
ID8ganNOdW1iZXIocm90YXRpb25SYXRlLT5nYW1tYSgpKSA6IGpzTnVsbCgpKTsKICAgICByZXR1
cm4gb2JqZWN0OwogfQogCi1KU1ZhbHVlIEpTRGV2aWNlTW90aW9uRXZlbnQ6OmFjY2VsZXJhdGlv
bihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTRGV2aWNlTW90aW9uRXZlbnQ6OmFj
Y2VsZXJhdGlvbihFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewogICAgIERldmljZU1vdGlvbkV2
ZW50JiBpbXAgPSBpbXBsKCk7CiAgICAgaWYgKCFpbXAuZGV2aWNlTW90aW9uRGF0YSgpLT5hY2Nl
bGVyYXRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIHJldHVybiBjcmVhdGVB
Y2NlbGVyYXRpb25PYmplY3QoaW1wLmRldmljZU1vdGlvbkRhdGEoKS0+YWNjZWxlcmF0aW9uKCks
IGV4ZWMpOworICAgIHJldHVybiBjcmVhdGVBY2NlbGVyYXRpb25PYmplY3QoaW1wLmRldmljZU1v
dGlvbkRhdGEoKS0+YWNjZWxlcmF0aW9uKCksIHN0YXRlKTsKIH0KIAotSlNWYWx1ZSBKU0Rldmlj
ZU1vdGlvbkV2ZW50OjphY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5KEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKK0pTVmFsdWUgSlNEZXZpY2VNb3Rpb25FdmVudDo6YWNjZWxlcmF0aW9uSW5jbHVk
aW5nR3Jhdml0eShFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewogICAgIERldmljZU1vdGlvbkV2
ZW50JiBpbXAgPSBpbXBsKCk7CiAgICAgaWYgKCFpbXAuZGV2aWNlTW90aW9uRGF0YSgpLT5hY2Nl
bGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5KCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKLSAg
ICByZXR1cm4gY3JlYXRlQWNjZWxlcmF0aW9uT2JqZWN0KGltcC5kZXZpY2VNb3Rpb25EYXRhKCkt
PmFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkoKSwgZXhlYyk7CisgICAgcmV0dXJuIGNyZWF0
ZUFjY2VsZXJhdGlvbk9iamVjdChpbXAuZGV2aWNlTW90aW9uRGF0YSgpLT5hY2NlbGVyYXRpb25J
bmNsdWRpbmdHcmF2aXR5KCksIHN0YXRlKTsKIH0KIAotSlNWYWx1ZSBKU0RldmljZU1vdGlvbkV2
ZW50Ojpyb3RhdGlvblJhdGUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU0Rldmlj
ZU1vdGlvbkV2ZW50Ojpyb3RhdGlvblJhdGUoRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICAg
ICBEZXZpY2VNb3Rpb25FdmVudCYgaW1wID0gaW1wbCgpOwogICAgIGlmICghaW1wLmRldmljZU1v
dGlvbkRhdGEoKS0+cm90YXRpb25SYXRlKCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKLSAg
ICByZXR1cm4gY3JlYXRlUm90YXRpb25SYXRlT2JqZWN0KGltcC5kZXZpY2VNb3Rpb25EYXRhKCkt
PnJvdGF0aW9uUmF0ZSgpLCBleGVjKTsKKyAgICByZXR1cm4gY3JlYXRlUm90YXRpb25SYXRlT2Jq
ZWN0KGltcC5kZXZpY2VNb3Rpb25EYXRhKCktPnJvdGF0aW9uUmF0ZSgpLCBzdGF0ZSk7CiB9CiAK
IEpTVmFsdWUgSlNEZXZpY2VNb3Rpb25FdmVudDo6aW50ZXJ2YWwoRXhlY1N0YXRlKikgY29uc3QK
QEAgLTE2NiwyOCArMTY2LDI4IEBAIEpTVmFsdWUgSlNEZXZpY2VNb3Rpb25FdmVudDo6aW50ZXJ2
YWwoRXhlY1N0YXRlKikgY29uc3QKICAgICByZXR1cm4ganNOdW1iZXIoaW1wLmRldmljZU1vdGlv
bkRhdGEoKS0+aW50ZXJ2YWwoKSk7CiB9CiAKLUpTVmFsdWUgSlNEZXZpY2VNb3Rpb25FdmVudDo6
aW5pdERldmljZU1vdGlvbkV2ZW50KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNEZXZpY2VN
b3Rpb25FdmVudDo6aW5pdERldmljZU1vdGlvbkV2ZW50KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0g
ICAgY29uc3QgU3RyaW5nIHR5cGUgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7Ci0gICAgYm9vbCBidWJibGVzID0gZXhlYy0+YXJndW1lbnQoMSkudG9Cb29s
ZWFuKGV4ZWMpOwotICAgIGJvb2wgY2FuY2VsYWJsZSA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9v
bGVhbihleGVjKTsKKyAgICBjb25zdCBTdHJpbmcgdHlwZSA9IHN0YXRlLmFyZ3VtZW50KDApLnRv
U3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgYm9vbCBidWJibGVzID0gc3RhdGUu
YXJndW1lbnQoMSkudG9Cb29sZWFuKCZzdGF0ZSk7CisgICAgYm9vbCBjYW5jZWxhYmxlID0gc3Rh
dGUuYXJndW1lbnQoMikudG9Cb29sZWFuKCZzdGF0ZSk7CiAKICAgICAvLyBJZiBhbnkgb2YgdGhl
IHBhcmFtZXRlcnMgYXJlIG51bGwgb3IgdW5kZWZpbmVkLCBtYXJrIHRoZW0gYXMgbm90IHByb3Zp
ZGVkLgogICAgIC8vIE90aGVyd2lzZSwgdXNlIHRoZSBzdGFuZGFyZCBKYXZhU2NyaXB0IGNvbnZl
cnNpb24uCi0gICAgUmVmUHRyPERldmljZU1vdGlvbkRhdGE6OkFjY2VsZXJhdGlvbj4gYWNjZWxl
cmF0aW9uID0gcmVhZEFjY2VsZXJhdGlvbkFyZ3VtZW50KGV4ZWMtPmFyZ3VtZW50KDMpLCBleGVj
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgUmVmUHRyPERldmljZU1vdGlv
bkRhdGE6OkFjY2VsZXJhdGlvbj4gYWNjZWxlcmF0aW9uID0gcmVhZEFjY2VsZXJhdGlvbkFyZ3Vt
ZW50KHN0YXRlLmFyZ3VtZW50KDMpLCBzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIFJlZlB0cjxEZXZpY2VN
b3Rpb25EYXRhOjpBY2NlbGVyYXRpb24+IGFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkgPSBy
ZWFkQWNjZWxlcmF0aW9uQXJndW1lbnQoZXhlYy0+YXJndW1lbnQoNCksIGV4ZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBSZWZQdHI8RGV2aWNlTW90aW9uRGF0YTo6QWNj
ZWxlcmF0aW9uPiBhY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5ID0gcmVhZEFjY2VsZXJhdGlv
bkFyZ3VtZW50KHN0YXRlLmFyZ3VtZW50KDQpLCBzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIFJlZlB0cjxE
ZXZpY2VNb3Rpb25EYXRhOjpSb3RhdGlvblJhdGU+IHJvdGF0aW9uUmF0ZSA9IHJlYWRSb3RhdGlv
blJhdGVBcmd1bWVudChleGVjLT5hcmd1bWVudCg1KSwgZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIFJlZlB0cjxEZXZpY2VNb3Rpb25EYXRhOjpSb3RhdGlvblJhdGU+
IHJvdGF0aW9uUmF0ZSA9IHJlYWRSb3RhdGlvblJhdGVBcmd1bWVudChzdGF0ZS5hcmd1bWVudCg1
KSwgc3RhdGUpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAKLSAgICBib29sIGludGVydmFsUHJvdmlkZWQgPSAhZXhlYy0+YXJn
dW1lbnQoNikuaXNVbmRlZmluZWRPck51bGwoKTsKLSAgICBkb3VibGUgaW50ZXJ2YWwgPSBleGVj
LT5hcmd1bWVudCg2KS50b051bWJlcihleGVjKTsKKyAgICBib29sIGludGVydmFsUHJvdmlkZWQg
PSAhc3RhdGUuYXJndW1lbnQoNikuaXNVbmRlZmluZWRPck51bGwoKTsKKyAgICBkb3VibGUgaW50
ZXJ2YWwgPSBzdGF0ZS5hcmd1bWVudCg2KS50b051bWJlcigmc3RhdGUpOwogICAgIFJlZlB0cjxE
ZXZpY2VNb3Rpb25EYXRhPiBkZXZpY2VNb3Rpb25EYXRhID0gRGV2aWNlTW90aW9uRGF0YTo6Y3Jl
YXRlKGFjY2VsZXJhdGlvbiwgYWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwgcm90YXRpb25S
YXRlLCBpbnRlcnZhbFByb3ZpZGVkLCBpbnRlcnZhbCk7CiAgICAgaW1wbCgpLmluaXREZXZpY2VN
b3Rpb25FdmVudCh0eXBlLCBidWJibGVzLCBjYW5jZWxhYmxlLCBkZXZpY2VNb3Rpb25EYXRhLmdl
dCgpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRGV2aWNlT3JpZW50YXRpb25FdmVudEN1c3RvbS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RldmljZU9yaWVudGF0aW9uRXZlbnRDdXN0b20uY3Bw
CmluZGV4IDIzNTc1ZmQxODBlOWM5MWE3M2QxYzU3NDU1ZGM3YmUzNDY2NjliM2YuLjExMjcwNTJi
YzYwNWU3YWNkZjZkNWRhNjZkYzQyOGY4YThiZjhlYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRGV2aWNlT3JpZW50YXRpb25FdmVudEN1c3RvbS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50Q3VzdG9t
LmNwcApAQCAtMzgsNyArMzgsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50OjphbHBoYShFeGVj
U3RhdGUqKSBjb25zdAorSlNWYWx1ZSBKU0RldmljZU9yaWVudGF0aW9uRXZlbnQ6OmFscGhhKEV4
ZWNTdGF0ZSYpIGNvbnN0CiB7CiAgICAgRGV2aWNlT3JpZW50YXRpb25FdmVudCYgaW1wID0gaW1w
bCgpOwogICAgIGlmICghaW1wLm9yaWVudGF0aW9uKCktPmNhblByb3ZpZGVBbHBoYSgpKQpAQCAt
NDYsNyArNDYsNyBAQCBKU1ZhbHVlIEpTRGV2aWNlT3JpZW50YXRpb25FdmVudDo6YWxwaGEoRXhl
Y1N0YXRlKikgY29uc3QKICAgICByZXR1cm4ganNOdW1iZXIoaW1wLm9yaWVudGF0aW9uKCktPmFs
cGhhKCkpOwogfQogCi1KU1ZhbHVlIEpTRGV2aWNlT3JpZW50YXRpb25FdmVudDo6YmV0YShFeGVj
U3RhdGUqKSBjb25zdAorSlNWYWx1ZSBKU0RldmljZU9yaWVudGF0aW9uRXZlbnQ6OmJldGEoRXhl
Y1N0YXRlJikgY29uc3QKIHsKICAgICBEZXZpY2VPcmllbnRhdGlvbkV2ZW50JiBpbXAgPSBpbXBs
KCk7CiAgICAgaWYgKCFpbXAub3JpZW50YXRpb24oKS0+Y2FuUHJvdmlkZUJldGEoKSkKQEAgLTU0
LDcgKzU0LDcgQEAgSlNWYWx1ZSBKU0RldmljZU9yaWVudGF0aW9uRXZlbnQ6OmJldGEoRXhlY1N0
YXRlKikgY29uc3QKICAgICByZXR1cm4ganNOdW1iZXIoaW1wLm9yaWVudGF0aW9uKCktPmJldGEo
KSk7CiB9CiAKLUpTVmFsdWUgSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50OjpnYW1tYShFeGVjU3Rh
dGUqKSBjb25zdAorSlNWYWx1ZSBKU0RldmljZU9yaWVudGF0aW9uRXZlbnQ6OmdhbW1hKEV4ZWNT
dGF0ZSYpIGNvbnN0CiB7CiAgICAgRGV2aWNlT3JpZW50YXRpb25FdmVudCYgaW1wID0gaW1wbCgp
OwogICAgIGlmICghaW1wLm9yaWVudGF0aW9uKCktPmNhblByb3ZpZGVHYW1tYSgpKQpAQCAtNjMs
NyArNjMsNyBAQCBKU1ZhbHVlIEpTRGV2aWNlT3JpZW50YXRpb25FdmVudDo6Z2FtbWEoRXhlY1N0
YXRlKikgY29uc3QKIH0KIAogI2lmIFBMQVRGT1JNKElPUykKLUpTVmFsdWUgSlNEZXZpY2VPcmll
bnRhdGlvbkV2ZW50Ojp3ZWJraXRDb21wYXNzSGVhZGluZyhFeGVjU3RhdGUqKSBjb25zdAorSlNW
YWx1ZSBKU0RldmljZU9yaWVudGF0aW9uRXZlbnQ6OndlYmtpdENvbXBhc3NIZWFkaW5nKEV4ZWNT
dGF0ZSYpIGNvbnN0CiB7CiAgICAgRGV2aWNlT3JpZW50YXRpb25FdmVudCYgaW1wID0gaW1wbCgp
OwogICAgIGlmICghaW1wLm9yaWVudGF0aW9uKCktPmNhblByb3ZpZGVDb21wYXNzSGVhZGluZygp
KQpAQCAtNzEsNyArNzEsNyBAQCBKU1ZhbHVlIEpTRGV2aWNlT3JpZW50YXRpb25FdmVudDo6d2Vi
a2l0Q29tcGFzc0hlYWRpbmcoRXhlY1N0YXRlKikgY29uc3QKICAgICByZXR1cm4ganNOdW1iZXIo
aW1wLm9yaWVudGF0aW9uKCktPmNvbXBhc3NIZWFkaW5nKCkpOwogfQogCi1KU1ZhbHVlIEpTRGV2
aWNlT3JpZW50YXRpb25FdmVudDo6d2Via2l0Q29tcGFzc0FjY3VyYWN5KEV4ZWNTdGF0ZSopIGNv
bnN0CitKU1ZhbHVlIEpTRGV2aWNlT3JpZW50YXRpb25FdmVudDo6d2Via2l0Q29tcGFzc0FjY3Vy
YWN5KEV4ZWNTdGF0ZSYpIGNvbnN0CiB7CiAgICAgRGV2aWNlT3JpZW50YXRpb25FdmVudCYgaW1w
ID0gaW1wbCgpOwogICAgIGlmICghaW1wLm9yaWVudGF0aW9uKCktPmNhblByb3ZpZGVDb21wYXNz
QWNjdXJhY3koKSkKQEAgLTgxLDcgKzgxLDcgQEAgSlNWYWx1ZSBKU0RldmljZU9yaWVudGF0aW9u
RXZlbnQ6OndlYmtpdENvbXBhc3NBY2N1cmFjeShFeGVjU3RhdGUqKSBjb25zdAogI2VuZGlmCiAK
ICNpZiAhUExBVEZPUk0oSU9TKQotSlNWYWx1ZSBKU0RldmljZU9yaWVudGF0aW9uRXZlbnQ6OmFi
c29sdXRlKEV4ZWNTdGF0ZSopIGNvbnN0CitKU1ZhbHVlIEpTRGV2aWNlT3JpZW50YXRpb25FdmVu
dDo6YWJzb2x1dGUoRXhlY1N0YXRlJikgY29uc3QKIHsKICAgICBEZXZpY2VPcmllbnRhdGlvbkV2
ZW50JiBpbXAgPSBpbXBsKCk7CiAgICAgaWYgKCFpbXAub3JpZW50YXRpb24oKS0+Y2FuUHJvdmlk
ZUFic29sdXRlKCkpCkBAIC05MCwyOCArOTAsMjggQEAgSlNWYWx1ZSBKU0RldmljZU9yaWVudGF0
aW9uRXZlbnQ6OmFic29sdXRlKEV4ZWNTdGF0ZSopIGNvbnN0CiB9CiAjZW5kaWYKIAotSlNWYWx1
ZSBKU0RldmljZU9yaWVudGF0aW9uRXZlbnQ6OmluaXREZXZpY2VPcmllbnRhdGlvbkV2ZW50KEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50Ojppbml0RGV2
aWNlT3JpZW50YXRpb25FdmVudChFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGNvbnN0IFN0cmlu
ZyB0eXBlID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGJvb2wgYnViYmxlcyA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvQm9vbGVhbihleGVjKTsKLSAg
ICBib29sIGNhbmNlbGFibGUgPSBleGVjLT5hcmd1bWVudCgyKS50b0Jvb2xlYW4oZXhlYyk7Cisg
ICAgY29uc3QgU3RyaW5nIHR5cGUgPSBzdGF0ZS5hcmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUp
LT52YWx1ZSgmc3RhdGUpOworICAgIGJvb2wgYnViYmxlcyA9IHN0YXRlLmFyZ3VtZW50KDEpLnRv
Qm9vbGVhbigmc3RhdGUpOworICAgIGJvb2wgY2FuY2VsYWJsZSA9IHN0YXRlLmFyZ3VtZW50KDIp
LnRvQm9vbGVhbigmc3RhdGUpOwogICAgIC8vIElmIGFscGhhLCBiZXRhIG9yIGdhbW1hIGFyZSBu
dWxsIG9yIHVuZGVmaW5lZCwgbWFyayB0aGVtIGFzIG5vdCBwcm92aWRlZC4KICAgICAvLyBPdGhl
cndpc2UsIHVzZSB0aGUgc3RhbmRhcmQgSmF2YVNjcmlwdCBjb252ZXJzaW9uLgotICAgIGJvb2wg
YWxwaGFQcm92aWRlZCA9ICFleGVjLT5hcmd1bWVudCgzKS5pc1VuZGVmaW5lZE9yTnVsbCgpOwot
ICAgIGRvdWJsZSBhbHBoYSA9IGV4ZWMtPmFyZ3VtZW50KDMpLnRvTnVtYmVyKGV4ZWMpOwotICAg
IGJvb2wgYmV0YVByb3ZpZGVkID0gIWV4ZWMtPmFyZ3VtZW50KDQpLmlzVW5kZWZpbmVkT3JOdWxs
KCk7Ci0gICAgZG91YmxlIGJldGEgPSBleGVjLT5hcmd1bWVudCg0KS50b051bWJlcihleGVjKTsK
LSAgICBib29sIGdhbW1hUHJvdmlkZWQgPSAhZXhlYy0+YXJndW1lbnQoNSkuaXNVbmRlZmluZWRP
ck51bGwoKTsKLSAgICBkb3VibGUgZ2FtbWEgPSBleGVjLT5hcmd1bWVudCg1KS50b051bWJlcihl
eGVjKTsKKyAgICBib29sIGFscGhhUHJvdmlkZWQgPSAhc3RhdGUuYXJndW1lbnQoMykuaXNVbmRl
ZmluZWRPck51bGwoKTsKKyAgICBkb3VibGUgYWxwaGEgPSBzdGF0ZS5hcmd1bWVudCgzKS50b051
bWJlcigmc3RhdGUpOworICAgIGJvb2wgYmV0YVByb3ZpZGVkID0gIXN0YXRlLmFyZ3VtZW50KDQp
LmlzVW5kZWZpbmVkT3JOdWxsKCk7CisgICAgZG91YmxlIGJldGEgPSBzdGF0ZS5hcmd1bWVudCg0
KS50b051bWJlcigmc3RhdGUpOworICAgIGJvb2wgZ2FtbWFQcm92aWRlZCA9ICFzdGF0ZS5hcmd1
bWVudCg1KS5pc1VuZGVmaW5lZE9yTnVsbCgpOworICAgIGRvdWJsZSBnYW1tYSA9IHN0YXRlLmFy
Z3VtZW50KDUpLnRvTnVtYmVyKCZzdGF0ZSk7CiAjaWYgUExBVEZPUk0oSU9TKQotICAgIGJvb2wg
Y29tcGFzc0hlYWRpbmdQcm92aWRlZCA9ICFleGVjLT5hcmd1bWVudCg2KS5pc1VuZGVmaW5lZE9y
TnVsbCgpOwotICAgIGRvdWJsZSBjb21wYXNzSGVhZGluZyA9IGV4ZWMtPmFyZ3VtZW50KDYpLnRv
TnVtYmVyKGV4ZWMpOwotICAgIGJvb2wgY29tcGFzc0FjY3VyYWN5UHJvdmlkZWQgPSAhZXhlYy0+
YXJndW1lbnQoNykuaXNVbmRlZmluZWRPck51bGwoKTsKLSAgICBkb3VibGUgY29tcGFzc0FjY3Vy
YWN5ID0gZXhlYy0+YXJndW1lbnQoNykudG9OdW1iZXIoZXhlYyk7CisgICAgYm9vbCBjb21wYXNz
SGVhZGluZ1Byb3ZpZGVkID0gIXN0YXRlLmFyZ3VtZW50KDYpLmlzVW5kZWZpbmVkT3JOdWxsKCk7
CisgICAgZG91YmxlIGNvbXBhc3NIZWFkaW5nID0gc3RhdGUuYXJndW1lbnQoNikudG9OdW1iZXIo
JnN0YXRlKTsKKyAgICBib29sIGNvbXBhc3NBY2N1cmFjeVByb3ZpZGVkID0gIXN0YXRlLmFyZ3Vt
ZW50KDcpLmlzVW5kZWZpbmVkT3JOdWxsKCk7CisgICAgZG91YmxlIGNvbXBhc3NBY2N1cmFjeSA9
IHN0YXRlLmFyZ3VtZW50KDcpLnRvTnVtYmVyKCZzdGF0ZSk7CiAgICAgUmVmUHRyPERldmljZU9y
aWVudGF0aW9uRGF0YT4gb3JpZW50YXRpb24gPSBEZXZpY2VPcmllbnRhdGlvbkRhdGE6OmNyZWF0
ZShhbHBoYVByb3ZpZGVkLCBhbHBoYSwgYmV0YVByb3ZpZGVkLCBiZXRhLCBnYW1tYVByb3ZpZGVk
LCBnYW1tYSwgY29tcGFzc0hlYWRpbmdQcm92aWRlZCwgY29tcGFzc0hlYWRpbmcsIGNvbXBhc3NB
Y2N1cmFjeVByb3ZpZGVkLCBjb21wYXNzQWNjdXJhY3kpOwogI2Vsc2UKLSAgICBib29sIGFic29s
dXRlUHJvdmlkZWQgPSAhZXhlYy0+YXJndW1lbnQoNikuaXNVbmRlZmluZWRPck51bGwoKTsKLSAg
ICBib29sIGFic29sdXRlID0gZXhlYy0+YXJndW1lbnQoNikudG9Cb29sZWFuKGV4ZWMpOworICAg
IGJvb2wgYWJzb2x1dGVQcm92aWRlZCA9ICFzdGF0ZS5hcmd1bWVudCg2KS5pc1VuZGVmaW5lZE9y
TnVsbCgpOworICAgIGJvb2wgYWJzb2x1dGUgPSBzdGF0ZS5hcmd1bWVudCg2KS50b0Jvb2xlYW4o
JnN0YXRlKTsKICAgICBSZWZQdHI8RGV2aWNlT3JpZW50YXRpb25EYXRhPiBvcmllbnRhdGlvbiA9
IERldmljZU9yaWVudGF0aW9uRGF0YTo6Y3JlYXRlKGFscGhhUHJvdmlkZWQsIGFscGhhLCBiZXRh
UHJvdmlkZWQsIGJldGEsIGdhbW1hUHJvdmlkZWQsIGdhbW1hLCBhYnNvbHV0ZVByb3ZpZGVkLCBh
YnNvbHV0ZSk7CiAjZW5kaWYKICAgICBpbXBsKCkuaW5pdERldmljZU9yaWVudGF0aW9uRXZlbnQo
dHlwZSwgYnViYmxlcywgY2FuY2VsYWJsZSwgb3JpZW50YXRpb24uZ2V0KCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAKaW5kZXggZjY3YzIzNDg1ZmY0NDQw
M2Y4ZWVlMzhhZWUzNjBjODBkOGNlYWE4MS4uZTA5NDk0NDM0ODc2MGE0YWRiMzc1ZjkwZDdlNzQ1
ZDA2YWVmOWI5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0
aW9uYXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnku
Y3BwCkBAIC0xNzYsNyArMTc2LDcgQEAgdm9pZCBKU0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShF
eGVjU3RhdGUqLCBKU1ZhbHVlIHZhbHVlLCBSZWZQdHI8U3RvcmFnZT4mIHJlc3UKIHZvaWQgSlNE
aWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBN
ZXNzYWdlUG9ydEFycmF5JiByZXN1bHQpCiB7CiAgICAgQXJyYXlCdWZmZXJBcnJheSBhcnJheUJ1
ZmZlcnM7Ci0gICAgZmlsbE1lc3NhZ2VQb3J0QXJyYXkoZXhlYywgdmFsdWUsIHJlc3VsdCwgYXJy
YXlCdWZmZXJzKTsKKyAgICBmaWxsTWVzc2FnZVBvcnRBcnJheSgqZXhlYywgdmFsdWUsIHJlc3Vs
dCwgYXJyYXlCdWZmZXJzKTsKIH0KIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKaW5kZXggNDQ4MmJj
YmJkZTk0ZTlmMzkyMjVhN2ZhMWJhOGIwNTg1MGI2MjI4MC4uZWMwYjljMmJhMzBlODYwZjZlMmJh
OTgwMTcwZDhmNzAyYjQ0NTJkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNEb2N1bWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEb2N1bWVudEN1c3RvbS5jcHAKQEAgLTEwMCwzMyArMTAwLDMzIEBAIEpTVmFsdWUgdG9KU05l
d2x5Q3JlYXRlZChFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBEb2N1CiAgICAgcmV0dXJuIGRvY3VtZW50ID8gY3JlYXRlTmV3RG9jdW1lbnRXcmFwcGVy
KCpzdGF0ZSwgKmdsb2JhbE9iamVjdCwgKmRvY3VtZW50KSA6IGpzTnVsbCgpOwogfQogCi1KU1Zh
bHVlIEpTRG9jdW1lbnQ6OnByZXBlbmQoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNEb2N1
bWVudDo6cHJlcGVuZChFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgIGltcGwoKS5wcmVwZW5kKHRvTm9kZU9yU3RyaW5nVmVjdG9yKCpzdGF0ZSksIGVj
KTsKLSAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKKyAgICBpbXBsKCkucHJlcGVuZCh0
b05vZGVPclN0cmluZ1ZlY3RvcihzdGF0ZSksIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0
YXRlLCBlYyk7CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0Rv
Y3VtZW50OjphcHBlbmQoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNEb2N1bWVudDo6YXBw
ZW5kKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAg
aW1wbCgpLmFwcGVuZCh0b05vZGVPclN0cmluZ1ZlY3Rvcigqc3RhdGUpLCBlYyk7Ci0gICAgc2V0
RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CisgICAgaW1wbCgpLmFwcGVuZCh0b05vZGVPclN0cmlu
Z1ZlY3RvcihzdGF0ZSksIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAK
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
Ci1KU1ZhbHVlIEpTRG9jdW1lbnQ6OmNyZWF0ZVRvdWNoTGlzdChFeGVjU3RhdGUqIGV4ZWMpCitK
U1ZhbHVlIEpTRG9jdW1lbnQ6OmNyZWF0ZVRvdWNoTGlzdChFeGVjU3RhdGUmIHN0YXRlKQogewog
ICAgIFJlZlB0cjxUb3VjaExpc3Q+IHRvdWNoTGlzdCA9IFRvdWNoTGlzdDo6Y3JlYXRlKCk7CiAK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsgaSsrKQot
ICAgICAgICB0b3VjaExpc3QtPmFwcGVuZChKU1RvdWNoOjp0b1dyYXBwZWQoZXhlYy0+YXJndW1l
bnQoaSkpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRlLmFyZ3VtZW50Q291bnQo
KTsgaSsrKQorICAgICAgICB0b3VjaExpc3QtPmFwcGVuZChKU1RvdWNoOjp0b1dyYXBwZWQoc3Rh
dGUuYXJndW1lbnQoaSkpKTsKIAotICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgp
LCB0b3VjaExpc3QucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9i
amVjdCgpLCB0b3VjaExpc3QucmVsZWFzZSgpKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50RnJhZ21lbnRDdXN0b20uY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEZyYWdtZW50Q3VzdG9tLmNwcApp
bmRleCBjNmEyYTNhOWNkOGQwYzQzZTUxOGNlNGI5ZTNhMTAxOTZlNDllNGJjLi5jMzUyZDVkYjk3
YmJjZGUwYzZjZmM5NjFkYmFlYTQ4MWNiNzIxNWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50RnJhZ21lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRGcmFnbWVudEN1c3RvbS5jcHAKQEAgLTM0LDIw
ICszNCwyMCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUpTVmFsdWUgSlNEb2N1bWVudEZyYWdtZW50OjpwcmVwZW5kKEV4ZWNTdGF0ZSogc3RhdGUpCitK
U1ZhbHVlIEpTRG9jdW1lbnRGcmFnbWVudDo6cHJlcGVuZChFeGVjU3RhdGUmIHN0YXRlKQogewog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGltcGwoKS5wcmVwZW5kKHRvTm9kZU9yU3Ry
aW5nVmVjdG9yKCpzdGF0ZSksIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsK
KyAgICBpbXBsKCkucHJlcGVuZCh0b05vZGVPclN0cmluZ1ZlY3RvcihzdGF0ZSksIGVjKTsKKyAg
ICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIAotSlNWYWx1ZSBKU0RvY3VtZW50RnJhZ21lbnQ6OmFwcGVuZChFeGVjU3RhdGUqIHN0
YXRlKQorSlNWYWx1ZSBKU0RvY3VtZW50RnJhZ21lbnQ6OmFwcGVuZChFeGVjU3RhdGUmIHN0YXRl
KQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGltcGwoKS5hcHBlbmQodG9Ob2Rl
T3JTdHJpbmdWZWN0b3IoKnN0YXRlKSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwg
ZWMpOworICAgIGltcGwoKS5hcHBlbmQodG9Ob2RlT3JTdHJpbmdWZWN0b3Ioc3RhdGUpLCBlYyk7
CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogCiAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3Vt
ZW50VHlwZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50
VHlwZUN1c3RvbS5jcHAKaW5kZXggMzdhZjI2ZmVkZDM2NmQ2NjY1YWNkMzg3YjAxYWQ2NmQyNjRh
Nzk3NC4uODMzMzg3MjAxYmJmNjAyYjU1NTM2MDhiZWI1NTEwNjI5Y2VjYjk1YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudFR5cGVDdXN0b20uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRUeXBlQ3VzdG9tLmNwcApA
QCAtMzMsMjkgKzMzLDI5IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotSlNWYWx1ZSBKU0RvY3VtZW50VHlwZTo6YmVmb3JlKEV4ZWNTdGF0ZSogc3RhdGUp
CitKU1ZhbHVlIEpTRG9jdW1lbnRUeXBlOjpiZWZvcmUoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCkuYmVmb3JlKHRvTm9kZU9yU3RyaW5n
VmVjdG9yKCpzdGF0ZSksIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKKyAg
ICBpbXBsKCkuYmVmb3JlKHRvTm9kZU9yU3RyaW5nVmVjdG9yKHN0YXRlKSwgZWMpOworICAgIHNl
dERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
fQogCi1KU1ZhbHVlIEpTRG9jdW1lbnRUeXBlOjphZnRlcihFeGVjU3RhdGUqIHN0YXRlKQorSlNW
YWx1ZSBKU0RvY3VtZW50VHlwZTo6YWZ0ZXIoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCkuYWZ0ZXIodG9Ob2RlT3JTdHJpbmdWZWN0b3Io
KnN0YXRlKSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOworICAgIGltcGwo
KS5hZnRlcih0b05vZGVPclN0cmluZ1ZlY3RvcihzdGF0ZSksIGVjKTsKKyAgICBzZXRET01FeGNl
cHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNW
YWx1ZSBKU0RvY3VtZW50VHlwZTo6cmVwbGFjZVdpdGgoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFs
dWUgSlNEb2N1bWVudFR5cGU6OnJlcGxhY2VXaXRoKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wbCgpLnJlcGxhY2VXaXRoKHRvTm9kZU9yU3Ry
aW5nVmVjdG9yKCpzdGF0ZSksIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsK
KyAgICBpbXBsKCkucmVwbGFjZVdpdGgodG9Ob2RlT3JTdHJpbmdWZWN0b3Ioc3RhdGUpLCBlYyk7
CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogCiAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0VsZW1l
bnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFbGVtZW50Q3VzdG9t
LmNwcAppbmRleCA4ZWIwZWRhOTJjMzVhYWFiYzgxMTMyZjZjZTQ0YTcwMjAxOWIwNGFhLi43MmRk
MzhlZWNjZDgxZWM2ZmI0OWJkZGMzMTNiNTE0NzdlNDkyMTFhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0VsZW1lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRWxlbWVudEN1c3RvbS5jcHAKQEAgLTY3LDQ3ICs2Nyw0NyBAQCBK
U1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoRXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgRWxlbWVudCogZQogICAgIHJldHVybiB3cmFwcGVyOyAgICAKIH0KIAotSlNW
YWx1ZSBKU0VsZW1lbnQ6OmJlZm9yZShFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0VsZW1l
bnQ6OmJlZm9yZShFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIGltcGwoKS5iZWZvcmUodG9Ob2RlT3JTdHJpbmdWZWN0b3IoKnN0YXRlKSwgZWMpOwot
ICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOworICAgIGltcGwoKS5iZWZvcmUodG9Ob2Rl
T3JTdHJpbmdWZWN0b3Ioc3RhdGUpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwg
ZWMpOwogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNFbGVtZW50
OjphZnRlcihFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0VsZW1lbnQ6OmFmdGVyKEV4ZWNT
dGF0ZSYgc3RhdGUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wbCgpLmFm
dGVyKHRvTm9kZU9yU3RyaW5nVmVjdG9yKCpzdGF0ZSksIGVjKTsKLSAgICBzZXRET01FeGNlcHRp
b24oc3RhdGUsIGVjKTsKKyAgICBpbXBsKCkuYWZ0ZXIodG9Ob2RlT3JTdHJpbmdWZWN0b3Ioc3Rh
dGUpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogCiAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNFbGVtZW50OjpyZXBsYWNlV2l0aChFeGVj
U3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0VsZW1lbnQ6OnJlcGxhY2VXaXRoKEV4ZWNTdGF0ZSYg
c3RhdGUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wbCgpLnJlcGxhY2VX
aXRoKHRvTm9kZU9yU3RyaW5nVmVjdG9yKCpzdGF0ZSksIGVjKTsKLSAgICBzZXRET01FeGNlcHRp
b24oc3RhdGUsIGVjKTsKKyAgICBpbXBsKCkucmVwbGFjZVdpdGgodG9Ob2RlT3JTdHJpbmdWZWN0
b3Ioc3RhdGUpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogCiAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNFbGVtZW50OjpwcmVwZW5kKEV4
ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTRWxlbWVudDo6cHJlcGVuZChFeGVjU3RhdGUmIHN0
YXRlKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGltcGwoKS5wcmVwZW5kKHRv
Tm9kZU9yU3RyaW5nVmVjdG9yKCpzdGF0ZSksIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oc3Rh
dGUsIGVjKTsKKyAgICBpbXBsKCkucHJlcGVuZCh0b05vZGVPclN0cmluZ1ZlY3RvcihzdGF0ZSks
IGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0VsZW1lbnQ6OmFwcGVuZChFeGVjU3RhdGUqIHN0
YXRlKQorSlNWYWx1ZSBKU0VsZW1lbnQ6OmFwcGVuZChFeGVjU3RhdGUmIHN0YXRlKQogewogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGltcGwoKS5hcHBlbmQodG9Ob2RlT3JTdHJpbmdW
ZWN0b3IoKnN0YXRlKSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOworICAg
IGltcGwoKS5hcHBlbmQodG9Ob2RlT3JTdHJpbmdWZWN0b3Ioc3RhdGUpLCBlYyk7CisgICAgc2V0
RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCmluZGV4IGFm
N2MzYjAxMTA4ZmViMzVlMDA2Y2FhNTllZTUyOTg1NTkxOGE3NjMuLjUxZTlmMGQ5MzBmNmM5ZjY5
OGZkMjBhY2E5YjgwMWE2ODdhZjg3ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRXZlbnRDdXN0b20uY3BwCkBAIC00NCw5ICs0NCw5IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSBKU0V2ZW50OjpjbGlwYm9hcmREYXRh
KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgSlNFdmVudDo6Y2xpcGJvYXJkRGF0YShF
eGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewotICAgIHJldHVybiBpbXBsKCkuaXNDbGlwYm9hcmRF
dmVudCgpID8gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgpLmNsaXBib2FyZERhdGEo
KSkgOiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBpbXBsKCkuaXNDbGlwYm9hcmRFdmVudCgp
ID8gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBpbXBsKCkuY2xpcGJvYXJkRGF0YSgpKSA6
IGpzVW5kZWZpbmVkKCk7CiB9CiAKICNkZWZpbmUgVFJZX1RPX1dSQVBfV0lUSF9JTlRFUkZBQ0Uo
aW50ZXJmYWNlTmFtZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNGaWxlUmVhZGVyQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmls
ZVJlYWRlckN1c3RvbS5jcHAKaW5kZXggYjFlOWM3NWU5OGQ4ZWYwN2E0MzRlMGM4MDE4YTlmZGVm
Njk2MTQzYy4uNTFmYmY0ZmExODJmNGMzYmM0NmJhNThmYmRlMDdjNWVmNThmMTA2OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJDdXN0b20uY3BwCkBA
IC00MSwxMiArNDEsMTIgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1KU1ZhbHVlIEpTRmlsZVJlYWRlcjo6cmVzdWx0KEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKK0pTVmFsdWUgSlNGaWxlUmVhZGVyOjpyZXN1bHQoRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QK
IHsKICAgICBGaWxlUmVhZGVyJiBpbXAgPSBpbXBsKCk7CiAgICAgaWYgKGltcC5yZWFkVHlwZSgp
ID09IEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRBc0FycmF5QnVmZmVyKQotICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wLmFycmF5QnVmZmVyUmVz
dWx0KCkpKTsKLSAgICByZXR1cm4ganNPd25lZFN0cmluZ09yTnVsbChleGVjLCBpbXAuc3RyaW5n
UmVzdWx0KCkpOworICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBX
VEY6OmdldFB0cihpbXAuYXJyYXlCdWZmZXJSZXN1bHQoKSkpOworICAgIHJldHVybiBqc093bmVk
U3RyaW5nT3JOdWxsKCZzdGF0ZSwgaW1wLnN0cmluZ1Jlc3VsdCgpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNH
ZW9sb2NhdGlvbkN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0dlb2xv
Y2F0aW9uQ3VzdG9tLmNwcAppbmRleCAxMjcwMjQ3NzRjMTlhMDMzZThkZWQwODcwMjhhZGU4YWUw
NmUzZGJjLi41MjdkMjEzZDcyMzUzMTNlY2FmYjZlZTcyMzdiNzRhZWE2OTA1NWIwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcApA
QCAtOTYsMjEgKzk2LDIxIEBAIHN0YXRpYyBSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBjcmVhdGVQ
b3NpdGlvbk9wdGlvbnMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhCiAgICAgcmV0dXJuIG9w
dGlvbnM7CiB9CiAKLUpTVmFsdWUgSlNHZW9sb2NhdGlvbjo6Z2V0Q3VycmVudFBvc2l0aW9uKEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNHZW9sb2NhdGlvbjo6Z2V0Q3VycmVudFBvc2l0aW9u
KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgLy8gQXJndW1lbnRzOiBQb3NpdGlvbkNhbGxiYWNr
LCAob3B0aW9uYWwpUG9zaXRpb25FcnJvckNhbGxiYWNrLCAob3B0aW9uYWwpUG9zaXRpb25PcHRp
b25zCiAKLSAgICBSZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4gcG9zaXRpb25DYWxsYmFjayA9IGNy
ZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTUG9zaXRpb25DYWxsYmFjaz4oZXhlYywgZ2xvYmFs
T2JqZWN0KCksIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+IHBvc2l0aW9uQ2FsbGJhY2sgPSBjcmVh
dGVGdW5jdGlvbk9ubHlDYWxsYmFjazxKU1Bvc2l0aW9uQ2FsbGJhY2s+KCZzdGF0ZSwgZ2xvYmFs
T2JqZWN0KCksIHN0YXRlLmFyZ3VtZW50KDApKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIEFTU0VSVChwb3NpdGlvbkNh
bGxiYWNrKTsKIAotICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+IHBvc2l0aW9uRXJy
b3JDYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTUG9zaXRpb25FcnJvckNh
bGxiYWNrPihleGVjLCBnbG9iYWxPYmplY3QoKSwgZXhlYy0+YXJndW1lbnQoMSksIENhbGxiYWNr
QWxsb3dVbmRlZmluZWQgfCBDYWxsYmFja0FsbG93TnVsbCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+IHBvc2l0aW9uRXJy
b3JDYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTUG9zaXRpb25FcnJvckNh
bGxiYWNrPigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBzdGF0ZS5hcmd1bWVudCgxKSwgQ2FsbGJh
Y2tBbGxvd1VuZGVmaW5lZCB8IENhbGxiYWNrQWxsb3dOdWxsKTsKKyAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgUmVmUHRy
PFBvc2l0aW9uT3B0aW9ucz4gcG9zaXRpb25PcHRpb25zID0gY3JlYXRlUG9zaXRpb25PcHRpb25z
KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gcG9zaXRpb25PcHRpb25zID0gY3JlYXRlUG9z
aXRpb25PcHRpb25zKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMikpOworICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgQVNTRVJU
KHBvc2l0aW9uT3B0aW9ucyk7CiAKQEAgLTExOCwyMSArMTE4LDIxIEBAIEpTVmFsdWUgSlNHZW9s
b2NhdGlvbjo6Z2V0Q3VycmVudFBvc2l0aW9uKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0dlb2xvY2F0aW9uOjp3YXRjaFBvc2l0aW9u
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNHZW9sb2NhdGlvbjo6d2F0Y2hQb3NpdGlvbihF
eGVjU3RhdGUmIHN0YXRlKQogewogICAgIC8vIEFyZ3VtZW50czogUG9zaXRpb25DYWxsYmFjaywg
KG9wdGlvbmFsKVBvc2l0aW9uRXJyb3JDYWxsYmFjaywgKG9wdGlvbmFsKVBvc2l0aW9uT3B0aW9u
cwogCi0gICAgUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+IHBvc2l0aW9uQ2FsbGJhY2sgPSBjcmVh
dGVGdW5jdGlvbk9ubHlDYWxsYmFjazxKU1Bvc2l0aW9uQ2FsbGJhY2s+KGV4ZWMsIGdsb2JhbE9i
amVjdCgpLCBleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIFJlZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBwb3NpdGlvbkNhbGxiYWNrID0gY3JlYXRl
RnVuY3Rpb25Pbmx5Q2FsbGJhY2s8SlNQb3NpdGlvbkNhbGxiYWNrPigmc3RhdGUsIGdsb2JhbE9i
amVjdCgpLCBzdGF0ZS5hcmd1bWVudCgwKSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBBU1NFUlQocG9zaXRpb25DYWxs
YmFjayk7CiAKLSAgICBSZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPiBwb3NpdGlvbkVycm9y
Q2FsbGJhY2sgPSBjcmVhdGVGdW5jdGlvbk9ubHlDYWxsYmFjazxKU1Bvc2l0aW9uRXJyb3JDYWxs
YmFjaz4oZXhlYywgZ2xvYmFsT2JqZWN0KCksIGV4ZWMtPmFyZ3VtZW50KDEpLCBDYWxsYmFja0Fs
bG93VW5kZWZpbmVkIHwgQ2FsbGJhY2tBbGxvd051bGwpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBSZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPiBwb3NpdGlvbkVycm9y
Q2FsbGJhY2sgPSBjcmVhdGVGdW5jdGlvbk9ubHlDYWxsYmFjazxKU1Bvc2l0aW9uRXJyb3JDYWxs
YmFjaz4oJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgc3RhdGUuYXJndW1lbnQoMSksIENhbGxiYWNr
QWxsb3dVbmRlZmluZWQgfCBDYWxsYmFja0FsbG93TnVsbCk7CisgICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIFJlZlB0cjxQ
b3NpdGlvbk9wdGlvbnM+IHBvc2l0aW9uT3B0aW9ucyA9IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucyhl
eGVjLCBleGVjLT5hcmd1bWVudCgyKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIFJlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IHBvc2l0aW9uT3B0aW9ucyA9IGNyZWF0ZVBvc2l0
aW9uT3B0aW9ucygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIpKTsKKyAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIEFTU0VSVChw
b3NpdGlvbk9wdGlvbnMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCmluZGV4IDc1Y2ZlNWY2NmNiZDBiMzE0
MTU4NjMzMzQxMjI0NTcwMjYyYmQzNzMuLjI1OTJmNDY3MmU4YTIxNzBlYmZmZWEyMmQ4MzM1NTgx
MzM5ZjIxZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFs
bENvbGxlY3Rpb25DdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCkBAIC0zNiwxOCArMzYsMTggQEAgdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgSlNWYWx1ZSBuYW1l
ZEl0ZW1zKEV4ZWNTdGF0ZSogZXhlYywgSlNIVE1MQWxsQ29sbGVjdGlvbiogY29sbGVjdGlvbiwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3N0YXRpYyBKU1ZhbHVlIG5hbWVkSXRlbXMoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNIVE1MQWxsQ29sbGVjdGlvbiogY29sbGVjdGlvbiwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBWZWN0b3I8UmVmPEVsZW1lbnQ+PiBuYW1lZEl0ZW1z
ID0gY29sbGVjdGlvbi0+aW1wbCgpLm5hbWVkSXRlbXMocHJvcGVydHlOYW1lVG9BdG9taWNTdHJp
bmcocHJvcGVydHlOYW1lKSk7CiAKICAgICBpZiAobmFtZWRJdGVtcy5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGlmIChuYW1lZEl0ZW1zLnNpemUoKSA9PSAx
KQotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBjb2xsZWN0aW9uLT5nbG9iYWxPYmplY3QoKSwg
bmFtZWRJdGVtc1swXS5wdHIoKSk7CisgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgY29sbGVj
dGlvbi0+Z2xvYmFsT2JqZWN0KCksIG5hbWVkSXRlbXNbMF0ucHRyKCkpOwogCiAgICAgLy8gRklY
TUU6IEhUTUw1IHNwZWNpZmljYXRpb24gc2F5cyB0aGlzIHNob3VsZCBiZSBhIEhUTUxDb2xsZWN0
aW9uLgogICAgIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50
LXdvcmsvbXVsdGlwYWdlL2NvbW1vbi1kb20taW50ZXJmYWNlcy5odG1sI2h0bWxhbGxjb2xsZWN0
aW9uCi0gICAgcmV0dXJuIHRvSlMoZXhlYywgY29sbGVjdGlvbi0+Z2xvYmFsT2JqZWN0KCksIFN0
YXRpY0VsZW1lbnRMaXN0OjphZG9wdChuYW1lZEl0ZW1zKS5nZXQoKSk7CisgICAgcmV0dXJuIHRv
SlMoJnN0YXRlLCBjb2xsZWN0aW9uLT5nbG9iYWxPYmplY3QoKSwgU3RhdGljRWxlbWVudExpc3Q6
OmFkb3B0KG5hbWVkSXRlbXMpLmdldCgpKTsKIH0KIAogLy8gSFRNTEFsbENvbGxlY3Rpb25zIGFy
ZSBzdHJhbmdlIG9iamVjdHMsIHRoZXkgc3VwcG9ydCBib3RoIGdldCBhbmQgY2FsbC4KQEAgLTY5
LDcgKzY5LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhUTUxB
bGxDb2xsZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodG9KUyhleGVjLCBqc0NvbGxlY3Rpb24tPmdsb2JhbE9iamVjdCgpLCBjb2xsZWN0
aW9uLml0ZW0oaW5kZXgudmFsdWUoKSkpKTsKIAogICAgICAgICAvLyBTdXBwb3J0IGZvciBkb2N1
bWVudC5pbWFnZXMoJzxuYW1lPicpIGV0Yy4KLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShuYW1lZEl0ZW1zKGV4ZWMsIGpzQ29sbGVjdGlvbiwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhl
eGVjLCBzdHJpbmcpKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobmFtZWRJdGVt
cygqZXhlYywganNDb2xsZWN0aW9uLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIHN0cmlu
ZykpKTsKICAgICB9CiAKICAgICAvLyBUaGUgc2Vjb25kIGFyZywgaWYgc2V0LCBpcyB0aGUgaW5k
ZXggb2YgdGhlIGl0ZW0gd2Ugd2FudApAQCAtODgsOSArODgsOSBAQCBDYWxsVHlwZSBKU0hUTUxB
bGxDb2xsZWN0aW9uOjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCiAg
ICAgcmV0dXJuIENhbGxUeXBlSG9zdDsKIH0KIAotYm9vbCBKU0hUTUxBbGxDb2xsZWN0aW9uOjpu
YW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSYgdmFsdWUpCitib29sIEpTSFRNTEFsbENvbGxlY3Rpb246Om5hbWVHZXR0ZXIoRXhlY1N0
YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSYgdmFsdWUpCiB7
Ci0gICAgSlNWYWx1ZSBpdGVtcyA9IG5hbWVkSXRlbXMoZXhlYywgdGhpcywgcHJvcGVydHlOYW1l
KTsKKyAgICBKU1ZhbHVlIGl0ZW1zID0gbmFtZWRJdGVtcygqc3RhdGUsIHRoaXMsIHByb3BlcnR5
TmFtZSk7CiAgICAgaWYgKGl0ZW1zLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApAQCAtOTgsMTYgKzk4LDE2IEBAIGJvb2wgSlNIVE1MQWxsQ29sbGVjdGlvbjo6bmFtZUdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLUpTVmFsdWUgSlNIVE1MQWxsQ29sbGVjdGlvbjo6aXRlbShFeGVjU3Rh
dGUqIGV4ZWMpCitKU1ZhbHVlIEpTSFRNTEFsbENvbGxlY3Rpb246Oml0ZW0oRXhlY1N0YXRlJiBz
dGF0ZSkKIHsKLSAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleCgq
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLmltcGwoKSkpCi0g
ICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbXBsKCkuaXRlbShpbmRl
eC52YWx1ZSgpKSk7Ci0gICAgcmV0dXJuIG5hbWVkSXRlbXMoZXhlYywgdGhpcywgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyhleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpKTsKKyAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRl
eCgqc3RhdGUuYXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKS5pbXBs
KCkpKQorICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBpbXBsKCku
aXRlbShpbmRleC52YWx1ZSgpKSk7CisgICAgcmV0dXJuIG5hbWVkSXRlbXMoc3RhdGUsIHRoaXMs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKS50b1N0cmlu
Zygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpKSk7CiB9CiAKLUpTVmFsdWUgSlNIVE1MQWxsQ29sbGVj
dGlvbjo6bmFtZWRJdGVtKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNIVE1MQWxsQ29sbGVj
dGlvbjo6bmFtZWRJdGVtKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9
IG5hbWVkSXRlbXMoZXhlYywgdGhpcywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBleGVj
LT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKKyAgICBKU1ZhbHVl
IHZhbHVlID0gbmFtZWRJdGVtcyhzdGF0ZSwgdGhpcywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
c3RhdGUsIHN0YXRlLmFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSkp
KTsKICAgICByZXR1cm4gdmFsdWUuaXNVbmRlZmluZWQoKSA/IGpzTnVsbCgpIDogdmFsdWU7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0Vs
ZW1lbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFz
RWxlbWVudEN1c3RvbS5jcHAKaW5kZXggMmZjY2NmZmJmNWViNDAzZGQzZThmMTg1YzA4OGU0NDMz
ZjZjMjU3MS4uZTZlYzhkYzNjZWFmNGZhZjEzM2U0OGU5NDU5Yjk4YTYyODhkYzY4MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3Rv
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVu
dEN1c3RvbS5jcHAKQEAgLTQ0LDE0ICs0NCwxNCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgRU5BQkxFKFdFQkdMKQotc3RhdGljIHZvaWQgZ2V0M0RD
b250ZXh0QXR0cmlidXRlcyhFeGVjU3RhdGUqIGV4ZWMsIFJlZlB0cjxDYW52YXNDb250ZXh0QXR0
cmlidXRlcz4mIGF0dHJzKQorc3RhdGljIHZvaWQgZ2V0M0RDb250ZXh0QXR0cmlidXRlcyhFeGVj
U3RhdGUmIHN0YXRlLCBSZWZQdHI8Q2FudmFzQ29udGV4dEF0dHJpYnV0ZXM+JiBhdHRycykKIHsK
LSAgICBKU1ZhbHVlIGluaXRpYWxpemVyVmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKTsKKyAgICBK
U1ZhbHVlIGluaXRpYWxpemVyVmFsdWUgPSBzdGF0ZS5hcmd1bWVudCgxKTsKICAgICBpZiAoaW5p
dGlhbGl6ZXJWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm47CiAgICAg
Ci0gICAgSlNPYmplY3QqIGluaXRpYWxpemVyT2JqZWN0ID0gaW5pdGlhbGl6ZXJWYWx1ZS50b09i
amVjdChleGVjKTsKLSAgICBKU0RpY3Rpb25hcnkgZGljdGlvbmFyeShleGVjLCBpbml0aWFsaXpl
ck9iamVjdCk7CisgICAgSlNPYmplY3QqIGluaXRpYWxpemVyT2JqZWN0ID0gaW5pdGlhbGl6ZXJW
YWx1ZS50b09iamVjdCgmc3RhdGUpOworICAgIEpTRGljdGlvbmFyeSBkaWN0aW9uYXJ5KCZzdGF0
ZSwgaW5pdGlhbGl6ZXJPYmplY3QpOwogICAgIAogICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRy
aWJ1dGVzIGdyYXBoaWNzQXR0cnM7CiAgICAgCkBAIC02NiwxNiArNjYsMTYgQEAgc3RhdGljIHZv
aWQgZ2V0M0RDb250ZXh0QXR0cmlidXRlcyhFeGVjU3RhdGUqIGV4ZWMsIFJlZlB0cjxDYW52YXND
b250ZXh0QXR0cmlidXQKIH0KICNlbmRpZgogCi1KU1ZhbHVlIEpTSFRNTENhbnZhc0VsZW1lbnQ6
OmdldENvbnRleHQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50
OjpnZXRDb250ZXh0KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgSFRNTENhbnZhc0VsZW1lbnQm
IGNhbnZhcyA9IGltcGwoKTsKLSAgICBjb25zdCBTdHJpbmcmIGNvbnRleHRJZCA9IGV4ZWMtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICBjb25zdCBTdHJpbmcm
IGNvbnRleHRJZCA9IHN0YXRlLmFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZz
dGF0ZSk7CiAgICAgCiAgICAgUmVmUHRyPENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzPiBhdHRyczsK
ICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgaWYgKEhUTUxDYW52YXNFbGVtZW50OjppczNkVHlwZShj
b250ZXh0SWQpKSB7Ci0gICAgICAgIGdldDNEQ29udGV4dEF0dHJpYnV0ZXMoZXhlYywgYXR0cnMp
OwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGdldDNEQ29udGV4
dEF0dHJpYnV0ZXMoc3RhdGUsIGF0dHJzKTsKKyAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogI2VuZGlmCkBA
IC04MywyMyArODMsMjMgQEAgSlNWYWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0
KEV4ZWNTdGF0ZSogZXhlYykKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0g
Y2FudmFzLmdldENvbnRleHQoY29udGV4dElkLCBhdHRycy5nZXQoKSk7CiAgICAgaWYgKCFjb250
ZXh0KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGNvbnRleHQpKTsKKyAgICByZXR1cm4gdG9KUygmc3Rh
dGUsIGdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihjb250ZXh0KSk7CiB9CiAKLUpTVmFsdWUg
SlNIVE1MQ2FudmFzRWxlbWVudDo6cHJvYmFibHlTdXBwb3J0c0NvbnRleHQoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50Ojpwcm9iYWJseVN1cHBvcnRzQ29udGV4
dChFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXMgPSBp
bXBsKCk7Ci0gICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgaWYgKCFzdGF0ZS5h
cmd1bWVudENvdW50KCkpCiAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2UpOwotICAgIGNv
bnN0IFN0cmluZyYgY29udGV4dElkID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBjb25zdCBTdHJpbmcmIGNvbnRleHRJZCA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRv
U3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAKICAgICBSZWZQdHI8Q2Fu
dmFzQ29udGV4dEF0dHJpYnV0ZXM+IGF0dHJzOwogI2lmIEVOQUJMRShXRUJHTCkKICAgICBpZiAo
SFRNTENhbnZhc0VsZW1lbnQ6OmlzM2RUeXBlKGNvbnRleHRJZCkpIHsKLSAgICAgICAgZ2V0M0RD
b250ZXh0QXR0cmlidXRlcyhleGVjLCBhdHRycyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgZ2V0M0RDb250ZXh0QXR0cmlidXRlcyhzdGF0ZSwgYXR0cnMpOwor
ICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICB9CiAjZW5kaWYKQEAgLTEwNywyNCArMTA3LDI0IEBAIEpTVmFsdWUg
SlNIVE1MQ2FudmFzRWxlbWVudDo6cHJvYmFibHlTdXBwb3J0c0NvbnRleHQoRXhlY1N0YXRlKiBl
eGVjKQogICAgIHJldHVybiBqc0Jvb2xlYW4oY2FudmFzLnByb2JhYmx5U3VwcG9ydHNDb250ZXh0
KGNvbnRleHRJZCwgYXR0cnMuZ2V0KCkpKTsKIH0KIAotSlNWYWx1ZSBKU0hUTUxDYW52YXNFbGVt
ZW50Ojp0b0RhdGFVUkwoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0hUTUxDYW52YXNFbGVt
ZW50Ojp0b0RhdGFVUkwoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBIVE1MQ2FudmFzRWxlbWVu
dCYgY2FudmFzID0gaW1wbCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogCi0gICAgY29u
c3QgU3RyaW5nJiB0eXBlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhl
eGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAgY29uc3QgU3RyaW5nJiB0eXBlID0gdmFsdWVU
b1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDAp
KTsKICAgICBkb3VibGUgcXVhbGl0eTsKICAgICBkb3VibGUqIHF1YWxpdHlQdHIgPSAwOwotICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAxKSB7Ci0gICAgICAgIEpTVmFsdWUgdiA9IGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkg
PiAxKSB7CisgICAgICAgIEpTVmFsdWUgdiA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpOwog
ICAgICAgICBpZiAodi5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICBxdWFsaXR5ID0gdi50b051
bWJlcihleGVjKTsKKyAgICAgICAgICAgIHF1YWxpdHkgPSB2LnRvTnVtYmVyKCZzdGF0ZSk7CiAg
ICAgICAgICAgICBxdWFsaXR5UHRyID0gJnF1YWxpdHk7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IEpTQzo6anNTdHJpbmcoZXhlYywgY2FudmFzLnRvRGF0YVVSTCh0
eXBlLCBxdWFsaXR5UHRyLCBlYykpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6OmpzU3RyaW5nKCZzdGF0ZSwgY2FudmFzLnRvRGF0YVVS
TCh0eXBlLCBxdWFsaXR5UHRyLCBlYykpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVj
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAKaW5kZXggMDUyYTU0NjU3ZTBkNjdhNTg0
YjU3NjhkN2E5YjYzOWIxOTlhYTk5MC4uNDMxNzQyODU0NjhhZWFmNzE4NzFlMDk2NGY0MjYxMTJl
YzVhNjAwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9j
dW1lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERv
Y3VtZW50Q3VzdG9tLmNwcApAQCAtMTA4LDI2ICsxMDgsMjYgQEAgYm9vbCBKU0hUTUxEb2N1bWVu
dDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTVmEKIAogLy8gQ3VzdG9tIGF0dHJpYnV0ZXMKIAotSlNWYWx1ZSBKU0hUTUxEb2N1bWVudDo6
YWxsKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgSlNIVE1MRG9jdW1lbnQ6OmFsbChF
eGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewogICAgIC8vIElmICJhbGwiIGhhcyBiZWVuIG92ZXJ3
cml0dGVuLCByZXR1cm4gdGhlIG92ZXJ3cml0dGVuIHZhbHVlCi0gICAgSlNWYWx1ZSB2ID0gZ2V0
RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImFsbCIpKTsK
KyAgICBKU1ZhbHVlIHYgPSBnZXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUsICJhbGwiKSk7CiAgICAgaWYgKHYpCiAgICAgICAgIHJldHVybiB2OwogCi0g
ICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGltcGwoKS5hbGwoKSk7CisgICAg
cmV0dXJuIHRvSlMoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgpLmFsbCgpKTsKIH0KIAot
dm9pZCBKU0hUTUxEb2N1bWVudDo6c2V0QWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSkKK3ZvaWQgSlNIVE1MRG9jdW1lbnQ6OnNldEFsbChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVl
IHZhbHVlKQogewogICAgIC8vIEFkZCAiYWxsIiB0byB0aGUgcHJvcGVydHkgbWFwLgotICAgIHB1
dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJhbGwiKSwg
dmFsdWUpOworICAgIHB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZSwgImFsbCIpLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBEb2N1bWVudCogZmluZENhbGxp
bmdEb2N1bWVudChFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgRG9jdW1lbnQqIGZpbmRDYWxsaW5n
RG9jdW1lbnQoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBDYWxsZXJGdW5jdG9yIGZ1bmN0b3I7
Ci0gICAgZXhlYy0+aXRlcmF0ZShmdW5jdG9yKTsKKyAgICBzdGF0ZS5pdGVyYXRlKGZ1bmN0b3Ip
OwogICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBmdW5jdG9yLmNhbGxlckZyYW1lKCk7CiAg
ICAgaWYgKCFjYWxsZXJGcmFtZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMzcsMTkg
KzEzNywxOSBAQCBzdGF0aWMgRG9jdW1lbnQqIGZpbmRDYWxsaW5nRG9jdW1lbnQoRXhlY1N0YXRl
KiBleGVjKQogCiAvLyBDdXN0b20gZnVuY3Rpb25zCiAKLUpTVmFsdWUgSlNIVE1MRG9jdW1lbnQ6
Om9wZW4oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0hUTUxEb2N1bWVudDo6b3BlbihFeGVj
U3RhdGUmIHN0YXRlKQogewogICAgIC8vIEZvciBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgYnJv
d3NlcnMsIHBhc3Mgb3BlbiBjYWxscyB3aXRoIG1vcmUgdGhhbiAyIHBhcmFtZXRlcnMgdG8gdGhl
IHdpbmRvdy4KLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMikgeworICAgIGlmIChz
dGF0ZS5hcmd1bWVudENvdW50KCkgPiAyKSB7CiAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBp
bXBsKCkuZnJhbWUoKSkgewotICAgICAgICAgICAgSlNET01XaW5kb3dTaGVsbCogd3JhcHBlciA9
IHRvSlNET01XaW5kb3dTaGVsbChmcmFtZSwgY3VycmVudFdvcmxkKGV4ZWMpKTsKKyAgICAgICAg
ICAgIEpTRE9NV2luZG93U2hlbGwqIHdyYXBwZXIgPSB0b0pTRE9NV2luZG93U2hlbGwoZnJhbWUs
IGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsKICAgICAgICAgICAgIGlmICh3cmFwcGVyKSB7Ci0gICAg
ICAgICAgICAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IHdyYXBwZXItPmdldChleGVjLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJvcGVuIikpOworICAgICAgICAgICAgICAgIEpTVmFsdWUg
ZnVuY3Rpb24gPSB3cmFwcGVyLT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZSwgIm9wZW4iKSk7CiAgICAgICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAg
ICAgICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSA6OmdldENhbGxEYXRhKGZ1bmN0aW9uLCBj
YWxsRGF0YSk7CiAgICAgICAgICAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgICAg
ICAgICAgICAgIHJldHVybiBKU0M6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxs
RGF0YSwgd3JhcHBlciwgQXJnTGlzdChleGVjKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOworICAgICAgICAgICAgICAgIHJldHVybiBKU0M6OmNh
bGwoJnN0YXRlLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB3cmFwcGVyLCBBcmdMaXN0
KCZzdGF0ZSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwpAQCAtMTU3LDcgKzE1Nyw3IEBAIEpTVmFsdWUgSlNIVE1MRG9jdW1lbnQ6Om9w
ZW4oRXhlY1N0YXRlKiBleGVjKQogCiAgICAgLy8gZG9jdW1lbnQub3BlbiBjbG9iYmVycyB0aGUg
c2VjdXJpdHkgY29udGV4dCBvZiB0aGUgZG9jdW1lbnQgYW5kCiAgICAgLy8gYWxpYXNlcyBpdCB3
aXRoIHRoZSBhY3RpdmUgc2VjdXJpdHkgY29udGV4dC4KLSAgICBEb2N1bWVudCogYWN0aXZlRG9j
dW1lbnQgPSBhc0pTRE9NV2luZG93KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPmltcGwo
KS5kb2N1bWVudCgpOworICAgIERvY3VtZW50KiBhY3RpdmVEb2N1bWVudCA9IGFzSlNET01XaW5k
b3coc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+aW1wbCgpLmRvY3VtZW50KCk7CiAKICAg
ICAvLyBJbiB0aGUgY2FzZSBvZiB0d28gcGFyYW1ldGVycyBvciBmZXdlciwgZG8gYSBub3JtYWwg
ZG9jdW1lbnQgb3Blbi4KICAgICBpbXBsKCkub3BlbihhY3RpdmVEb2N1bWVudCk7CkBAIC0xNjYs
MjEgKzE2NiwyMSBAQCBKU1ZhbHVlIEpTSFRNTERvY3VtZW50OjpvcGVuKEV4ZWNTdGF0ZSogZXhl
YykKIAogZW51bSBOZXdsaW5lUmVxdWlyZW1lbnQgeyBEb05vdEFkZE5ld2xpbmUsIERvQWRkTmV3
bGluZSB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgZG9jdW1lbnRXcml0ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTSFRNTERvY3VtZW50KiB0aGlzRG9jdW1lbnQsIE5ld2xpbmVSZXF1aXJlbWVudCBhZGRO
ZXdsaW5lKQorc3RhdGljIGlubGluZSB2b2lkIGRvY3VtZW50V3JpdGUoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNIVE1MRG9jdW1lbnQqIHRoaXNEb2N1bWVudCwgTmV3bGluZVJlcXVpcmVtZW50IGFkZE5l
d2xpbmUpCiB7CiAgICAgSFRNTERvY3VtZW50KiBkb2N1bWVudCA9ICZ0aGlzRG9jdW1lbnQtPmlt
cGwoKTsKICAgICAvLyBET00gb25seSBzcGVjaWZpZXMgc2luZ2xlIHN0cmluZyBhcmd1bWVudCwg
YnV0IGJyb3dzZXJzIGFsbG93IG11bHRpcGxlIG9yIG5vIGFyZ3VtZW50cy4KIAotICAgIHNpemVf
dCBzaXplID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgIHNpemVfdCBzaXplID0gc3RhdGUu
YXJndW1lbnRDb3VudCgpOwogCi0gICAgU3RyaW5nIGZpcnN0U3RyaW5nID0gZXhlYy0+YXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIFN0cmluZyBmaXJzdFN0cmlu
ZyA9IHN0YXRlLmFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CiAg
ICAgU2VnbWVudGVkU3RyaW5nIHNlZ21lbnRlZFN0cmluZyA9IGZpcnN0U3RyaW5nOwogICAgIGlm
IChzaXplICE9IDEpIHsKICAgICAgICAgaWYgKCFzaXplKQogICAgICAgICAgICAgc2VnbWVudGVk
U3RyaW5nLmNsZWFyKCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDE7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgc3Vic2VxdWVu
dFN0cmluZyA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc3Vic2VxdWVudFN0cmluZyA9IHN0YXRl
LnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CiAg
ICAgICAgICAgICAgICAgc2VnbWVudGVkU3RyaW5nLmFwcGVuZChTZWdtZW50ZWRTdHJpbmcoc3Vi
c2VxdWVudFN0cmluZykpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xODgsMTkgKzE4
OCwxOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZG9jdW1lbnRXcml0ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTSFRNTERvY3VtZW50KiB0aGlzRG9jdW1lbnQsCiAgICAgaWYgKGFkZE5ld2xpbmUpCiAgICAg
ICAgIHNlZ21lbnRlZFN0cmluZy5hcHBlbmQoU2VnbWVudGVkU3RyaW5nKFN0cmluZygmbmV3bGlu
ZUNoYXJhY3RlciwgMSkpKTsKIAotICAgIERvY3VtZW50KiBhY3RpdmVEb2N1bWVudCA9IGZpbmRD
YWxsaW5nRG9jdW1lbnQoZXhlYyk7CisgICAgRG9jdW1lbnQqIGFjdGl2ZURvY3VtZW50ID0gZmlu
ZENhbGxpbmdEb2N1bWVudChzdGF0ZSk7CiAgICAgZG9jdW1lbnQtPndyaXRlKHNlZ21lbnRlZFN0
cmluZywgYWN0aXZlRG9jdW1lbnQpOwogfQogCi1KU1ZhbHVlIEpTSFRNTERvY3VtZW50Ojp3cml0
ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTSFRNTERvY3VtZW50Ojp3cml0ZShFeGVjU3Rh
dGUmIHN0YXRlKQogewotICAgIGRvY3VtZW50V3JpdGUoZXhlYywgdGhpcywgRG9Ob3RBZGROZXds
aW5lKTsKKyAgICBkb2N1bWVudFdyaXRlKHN0YXRlLCB0aGlzLCBEb05vdEFkZE5ld2xpbmUpOwog
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTSFRNTERvY3VtZW50Ojp3
cml0ZWxuKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNIVE1MRG9jdW1lbnQ6OndyaXRlbG4o
RXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBkb2N1bWVudFdyaXRlKGV4ZWMsIHRoaXMsIERvQWRk
TmV3bGluZSk7CisgICAgZG9jdW1lbnRXcml0ZShzdGF0ZSwgdGhpcywgRG9BZGROZXdsaW5lKTsK
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbkN1c3RvbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uQ3Vz
dG9tLmNwcAppbmRleCBlYzdmN2RiYjZiODQxZTFjMmU0MGUwZjkyNDE2MjdkYzkwM2VhZGRiLi44
YjU1ZmE3ZGUzNmU1YzYwNzg4OWM5YjFlOWE1MWMzZWM4YTY4Yjc2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uQ3VzdG9t
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGb3JtQ29udHJvbHND
b2xsZWN0aW9uQ3VzdG9tLmNwcApAQCAtMzAsNyArMzAsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlND
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBKU1ZhbHVlIG5hbWVkSXRlbXMoRXhl
Y1N0YXRlKiBleGVjLCBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uKiBjb2xsZWN0aW9uLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorc3RhdGljIEpTVmFsdWUgbmFtZWRJdGVtcyhFeGVj
U3RhdGUmIHN0YXRlLCBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uKiBjb2xsZWN0aW9uLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSA9IHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSk7CiAgICAgVmVjdG9y
PFJlZjxFbGVtZW50Pj4gbmFtZWRJdGVtcyA9IGNvbGxlY3Rpb24tPmltcGwoKS5uYW1lZEl0ZW1z
KG5hbWUpOwpAQCAtMzgsMTUgKzM4LDE1IEBAIHN0YXRpYyBKU1ZhbHVlIG5hbWVkSXRlbXMoRXhl
Y1N0YXRlKiBleGVjLCBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uKiBjb2xsZWN0CiAgICAg
aWYgKG5hbWVkSXRlbXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICBpZiAobmFtZWRJdGVtcy5zaXplKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhl
YywgY29sbGVjdGlvbi0+Z2xvYmFsT2JqZWN0KCksIG5hbWVkSXRlbXNbMF0ucHRyKCkpOworICAg
ICAgICByZXR1cm4gdG9KUygmc3RhdGUsIGNvbGxlY3Rpb24tPmdsb2JhbE9iamVjdCgpLCBuYW1l
ZEl0ZW1zWzBdLnB0cigpKTsKIAogICAgIEFTU0VSVChjb2xsZWN0aW9uLT5pbXBsKCkudHlwZSgp
ID09IEZvcm1Db250cm9scyk7Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgY29sbGVjdGlvbi0+Z2xv
YmFsT2JqZWN0KCksIGNvbGxlY3Rpb24tPmltcGwoKS5vd25lck5vZGUoKS5yYWRpb05vZGVMaXN0
KG5hbWUpLmdldCgpKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGNvbGxlY3Rpb24tPmdsb2Jh
bE9iamVjdCgpLCBjb2xsZWN0aW9uLT5pbXBsKCkub3duZXJOb2RlKCkucmFkaW9Ob2RlTGlzdChu
YW1lKS5nZXQoKSk7CiB9CiAKLWJvb2wgSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6bmFt
ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUmIHZhbHVlKQorYm9vbCBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOjpuYW1lR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUmIHZh
bHVlKQogewotICAgIGF1dG8gaXRlbXMgPSBuYW1lZEl0ZW1zKGV4ZWMsIHRoaXMsIHByb3BlcnR5
TmFtZSk7CisgICAgYXV0byBpdGVtcyA9IG5hbWVkSXRlbXMoKnN0YXRlLCB0aGlzLCBwcm9wZXJ0
eU5hbWUpOwogICAgIGlmIChpdGVtcy5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKQEAgLTU0LDkgKzU0LDkgQEAgYm9vbCBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9u
OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3AKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotSlNWYWx1ZSBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOjpuYW1l
ZEl0ZW0oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0
aW9uOjpuYW1lZEl0ZW0oRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHZhbHVlID0g
bmFtZWRJdGVtcyhleGVjLCB0aGlzLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIGV4ZWMt
PmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOworICAgIEpTVmFsdWUg
dmFsdWUgPSBuYW1lZEl0ZW1zKHN0YXRlLCB0aGlzLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZSwgc3RhdGUuYXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKSkp
OwogICAgIHJldHVybiB2YWx1ZS5pc1VuZGVmaW5lZCgpID8ganNOdWxsKCkgOiB2YWx1ZTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRnJhbWVFbGVt
ZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZyYW1lRWxl
bWVudEN1c3RvbS5jcHAKaW5kZXggYTRlZDQzMGQzMmI0ZDg1ZTJhMjkzNmU5M2U3ZmRiNjY1NjNl
NjMxMS4uYWIwMDBmNzEzMDE5ZTliOGEwYmY1OGUyMzVkNzQxM2E5YWNiOTU0MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRnJhbWVFbGVtZW50Q3VzdG9tLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGcmFtZUVsZW1lbnRDdXN0
b20uY3BwCkBAIC00MSwyMiArNDEsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwogCi1zdGF0aWMgaW5saW5lIGJvb2wgYWxsb3dTZXR0aW5nSmF2
YXNjcmlwdFVSTChFeGVjU3RhdGUqIGV4ZWMsIEhUTUxGcmFtZUVsZW1lbnQqIGltcCwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBhbGxvd1NldHRpbmdKYXZhc2NyaXB0
VVJMKEV4ZWNTdGF0ZSYgc3RhdGUsIEhUTUxGcmFtZUVsZW1lbnQqIGltcCwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKIHsKICAgICBpZiAocHJvdG9jb2xJc0phdmFTY3JpcHQoc3RyaXBMZWFkaW5nQW5k
VHJhaWxpbmdIVE1MU3BhY2VzKHZhbHVlKSkpIHsKICAgICAgICAgRG9jdW1lbnQqIGNvbnRlbnRE
b2N1bWVudCA9IGltcC0+Y29udGVudERvY3VtZW50KCk7Ci0gICAgICAgIGlmIChjb250ZW50RG9j
dW1lbnQgJiYgIXNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKGV4ZWMsIGNvbnRlbnREb2N1bWVudCkp
CisgICAgICAgIGlmIChjb250ZW50RG9jdW1lbnQgJiYgIXNob3VsZEFsbG93QWNjZXNzVG9Ob2Rl
KCZzdGF0ZSwgY29udGVudERvY3VtZW50KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSlNIVE1MRnJhbWVFbGVtZW50OjpzZXRM
b2NhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit2b2lkIEpTSFRNTEZyYW1l
RWxlbWVudDo6c2V0TG9jYXRpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsK
ICAgICBIVE1MRnJhbWVFbGVtZW50JiBpbXAgPSBpbXBsKCk7Ci0gICAgU3RyaW5nIGxvY2F0aW9u
VmFsdWUgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1ZSk7CisgICAgU3Ry
aW5nIGxvY2F0aW9uVmFsdWUgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjaygmc3RhdGUsIHZh
bHVlKTsKIAotICAgIGlmICghYWxsb3dTZXR0aW5nSmF2YXNjcmlwdFVSTChleGVjLCAmaW1wLCBs
b2NhdGlvblZhbHVlKSkKKyAgICBpZiAoIWFsbG93U2V0dGluZ0phdmFzY3JpcHRVUkwoc3RhdGUs
ICZpbXAsIGxvY2F0aW9uVmFsdWUpKQogICAgICAgICByZXR1cm47CiAKICAgICBpbXAuc2V0TG9j
YXRpb24obG9jYXRpb25WYWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MSW5wdXRFbGVtZW50Q3VzdG9tLmNwcAppbmRleCA0MmViYWQzMTU5NDI0ZDdh
ZDk5NmFjYzk5ZjJkZTM2NDBjNGZkYTA5Li44ZjQyZGJlZjUyNGZkNmZkOGNlM2RhYTExMTlkZGZk
YjNiOWIwMTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJ
bnB1dEVsZW1lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTElucHV0RWxlbWVudEN1c3RvbS5jcHAKQEAgLTMzLDcxICszMyw3MSBAQCB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNIVE1MSW5wdXRF
bGVtZW50OjpzZWxlY3Rpb25TdGFydChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpT
SFRNTElucHV0RWxlbWVudDo6c2VsZWN0aW9uU3RhcnQoRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QK
IHsKICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGltcGwoKTsKICAgICBpZiAoIWlucHV0
LmNhbkhhdmVTZWxlY3Rpb24oKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMp
OworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKIAogICAgIHJldHVybiBq
c051bWJlcihpbnB1dC5zZWxlY3Rpb25TdGFydCgpKTsKIH0KIAotdm9pZCBKU0hUTUxJbnB1dEVs
ZW1lbnQ6OnNldFNlbGVjdGlvblN0YXJ0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkK
K3ZvaWQgSlNIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25TdGFydChFeGVjU3RhdGUmIHN0
YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gaW1w
bCgpOwogICAgIGlmICghaW5wdXQuY2FuSGF2ZVNlbGVjdGlvbigpKQotICAgICAgICB0aHJvd1R5
cGVFcnJvcihleGVjKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKIAotICAgIGlu
cHV0LnNldFNlbGVjdGlvblN0YXJ0KHZhbHVlLnRvSW50MzIoZXhlYykpOworICAgIGlucHV0LnNl
dFNlbGVjdGlvblN0YXJ0KHZhbHVlLnRvSW50MzIoJnN0YXRlKSk7CiB9CiAKLUpTVmFsdWUgSlNI
VE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25FbmQoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNW
YWx1ZSBKU0hUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGlvbkVuZChFeGVjU3RhdGUmIHN0YXRlKSBj
b25zdAogewogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gaW1wbCgpOwogICAgIGlmICgh
aW5wdXQuY2FuSGF2ZVNlbGVjdGlvbigpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3Io
ZXhlYyk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOwogCiAgICAgcmV0
dXJuIGpzTnVtYmVyKGlucHV0LnNlbGVjdGlvbkVuZCgpKTsKIH0KIAotdm9pZCBKU0hUTUxJbnB1
dEVsZW1lbnQ6OnNldFNlbGVjdGlvbkVuZChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUp
Cit2b2lkIEpTSFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uRW5kKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBpbXBs
KCk7CiAgICAgaWYgKCFpbnB1dC5jYW5IYXZlU2VsZWN0aW9uKCkpCi0gICAgICAgIHRocm93VHlw
ZUVycm9yKGV4ZWMpOworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOwogCi0gICAgaW5w
dXQuc2V0U2VsZWN0aW9uRW5kKHZhbHVlLnRvSW50MzIoZXhlYykpOworICAgIGlucHV0LnNldFNl
bGVjdGlvbkVuZCh2YWx1ZS50b0ludDMyKCZzdGF0ZSkpOwogfQogCi1KU1ZhbHVlIEpTSFRNTElu
cHV0RWxlbWVudDo6c2VsZWN0aW9uRGlyZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pT
VmFsdWUgSlNIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25EaXJlY3Rpb24oRXhlY1N0YXRlJiBz
dGF0ZSkgY29uc3QKIHsKICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGltcGwoKTsKICAg
ICBpZiAoIWlucHV0LmNhbkhhdmVTZWxlY3Rpb24oKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlw
ZUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKIAot
ICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBpbnB1dC5zZWxlY3Rpb25EaXJlY3Rp
b24oKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgaW5wdXQuc2VsZWN0
aW9uRGlyZWN0aW9uKCkpOwogfQogCi12b2lkIEpTSFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0
aW9uRGlyZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNIVE1M
SW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25EaXJlY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKIHsKICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGltcGwoKTsKICAg
ICBpZiAoIWlucHV0LmNhbkhhdmVTZWxlY3Rpb24oKSkgewotICAgICAgICB0aHJvd1R5cGVFcnJv
cihleGVjKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGlucHV0LnNldFNlbGVjdGlvbkRpcmVjdGlvbih2YWx1ZS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAgIGlucHV0LnNldFNlbGVjdGlvbkRpcmVjdGlvbih2
YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpKTsKIH0KIAotSlNWYWx1ZSBKU0hU
TUxJbnB1dEVsZW1lbnQ6OnNldFNlbGVjdGlvblJhbmdlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFs
dWUgSlNIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25SYW5nZShFeGVjU3RhdGUmIHN0YXRl
KQogewogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gaW1wbCgpOwogICAgIGlmICghaW5w
dXQuY2FuSGF2ZVNlbGVjdGlvbigpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhl
Yyk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOwogCi0gICAgaW50IHN0
YXJ0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKLSAgICBpbnQgZW5kID0gZXhl
Yy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKLSAgICBTdHJpbmcgZGlyZWN0aW9uID0gZXhl
Yy0+YXJndW1lbnQoMikudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIGludCBzdGFy
dCA9IHN0YXRlLmFyZ3VtZW50KDApLnRvSW50MzIoJnN0YXRlKTsKKyAgICBpbnQgZW5kID0gc3Rh
dGUuYXJndW1lbnQoMSkudG9JbnQzMigmc3RhdGUpOworICAgIFN0cmluZyBkaXJlY3Rpb24gPSBz
dGF0ZS5hcmd1bWVudCgyKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwogCiAgICAg
aW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCwgZGlyZWN0aW9uKTsKICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSFRNTE1lZGlhRWxlbWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hUTUxNZWRpYUVsZW1lbnRDdXN0b20uY3BwCmluZGV4IDIwN2FiNzFkYWJlMzNmNzYwZjMw
NWRjYmQzOWQwZmQ5Y2IzMjhiYzQuLjQ0MDA5NzYxZDEzOWQxMzE4NjQ2YjVjOGU1MWUyNWJhZDBl
YjE0MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE1lZGlh
RWxlbWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
TWVkaWFFbGVtZW50Q3VzdG9tLmNwcApAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXZvaWQgSlNIVE1MTWVkaWFFbGVtZW50Ojpz
ZXRDb250cm9sbGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUgdmFsdWUpCit2b2lkIEpTSFRNTE1lZGlh
RWxlbWVudDo6c2V0Q29udHJvbGxlcihFeGVjU3RhdGUmLCBKU1ZhbHVlIHZhbHVlKQogewogICAg
IC8vIDQuOC4xMC4xMS4yIE1lZGlhIGNvbnRyb2xsZXJzOiBjb250cm9sbGVyIGF0dHJpYnV0ZS4K
ICAgICAvLyBPbiBzZXR0aW5nLCBpdCBtdXN0IGZpcnN0IHJlbW92ZSB0aGUgZWxlbWVudCdzIG1l
ZGlhZ3JvdXAgYXR0cmlidXRlLCBpZiBhbnksIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwCmluZGV4
IGZiMzc1ZWY5OTdkODI0ODFjMGUwYTNiY2IxZmMxYTVlNmM2ZjVjY2EuLjkxNWUwMjg3Yzc4Y2Rj
MDk1ZGIxYWRlMzM1ZDc2MGNkM2I1ODNlN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAKQEAg
LTQ3LDExICs0NywxMSBAQCBib29sIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjpuYW1lR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TgogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjpzZXRMZW5ndGgoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbjo6c2V0
TGVuZ3RoKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CiAgICAgdW5zaWduZWQgbmV3TGVuZ3RoID0gMDsKLSAgICBkb3VibGUgbGVu
Z3RoVmFsdWUgPSB2YWx1ZS50b051bWJlcihleGVjKTsKKyAgICBkb3VibGUgbGVuZ3RoVmFsdWUg
PSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwogICAgIGlmICghc3RkOjppc25hbihsZW5ndGhWYWx1
ZSkgJiYgIXN0ZDo6aXNpbmYobGVuZ3RoVmFsdWUpKSB7CiAgICAgICAgIGlmIChsZW5ndGhWYWx1
ZSA8IDAuMCkKICAgICAgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CkBAIC02Miw3ICs2Miw3
IEBAIHZvaWQgSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb246OnNldExlbmd0aChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdmFsdWUpCiAgICAgfQogICAgIGlmICghZWMpCiAgICAgICAgIGltcGwoKS5z
ZXRMZW5ndGgobmV3TGVuZ3RoLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
KyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiB9CiAKIHZvaWQgSlNIVE1MT3B0aW9u
c0NvbGxlY3Rpb246OmluZGV4U2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgs
IEpTVmFsdWUgdmFsdWUpCkBAIC03MCwxNCArNzAsMTQgQEAgdm9pZCBKU0hUTUxPcHRpb25zQ29s
bGVjdGlvbjo6aW5kZXhTZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNW
YWwKICAgICBzZWxlY3RJbmRleFNldHRlcigmaW1wbCgpLnNlbGVjdEVsZW1lbnQoKSwgZXhlYywg
aW5kZXgsIHZhbHVlKTsKIH0KIAotSlNWYWx1ZSBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbjo6cmVt
b3ZlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb246OnJl
bW92ZShFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIC8vIFRoZSBhcmd1bWVudCBjYW4gYmUgYW4g
SFRNTE9wdGlvbkVsZW1lbnQgb3IgYW4gaW5kZXguCi0gICAgSlNWYWx1ZSBhcmd1bWVudCA9IGV4
ZWMtPmFyZ3VtZW50KDApOworICAgIEpTVmFsdWUgYXJndW1lbnQgPSBzdGF0ZS5hcmd1bWVudCgw
KTsKICAgICBpZiAoSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IEpTSFRNTE9wdGlvbkVsZW1l
bnQ6OnRvV3JhcHBlZChhcmd1bWVudCkpCiAgICAgICAgIGltcGwoKS5yZW1vdmUob3B0aW9uKTsK
ICAgICBlbHNlCi0gICAgICAgIGltcGwoKS5yZW1vdmUoYXJndW1lbnQudG9JbnQzMihleGVjKSk7
CisgICAgICAgIGltcGwoKS5yZW1vdmUoYXJndW1lbnQudG9JbnQzMigmc3RhdGUpKTsKICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcAppbmRleCAxNDZlMjQyYTA1
ZDhkOGI1NGUxZTI5YjE3MGUyNDQyMzM3MmM5NzI4Li5iM2RmMTNmNzJlYWE4ZmJhYTA3ODYwNWY0
NzYzMzkyN2ViZTAyY2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcApAQCAtMzIsMjEgKzMyLDIxIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwogCi1KU1ZhbHVlIEpTSFRNTFNlbGVjdEVsZW1lbnQ6OnJlbW92ZShFeGVjU3Rh
dGUqIGV4ZWMpCitKU1ZhbHVlIEpTSFRNTFNlbGVjdEVsZW1lbnQ6OnJlbW92ZShFeGVjU3RhdGUm
IHN0YXRlKQogewogICAgIEhUTUxTZWxlY3RFbGVtZW50JiBzZWxlY3QgPSBpbXBsKCk7CiAKLSAg
ICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgeworICAgIGlmICghc3RhdGUuYXJndW1lbnRD
b3VudCgpKSB7CiAgICAgICAgIC8vIFdoZW4gY2FsbGVkIHdpdGggbm8gYXJndW1lbnQsIHdlIHNo
b3VsZCBjYWxsIEVsZW1lbnQ6OnJlbW92ZSgpIHRvIGRldGFjaC4KICAgICAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CiAgICAgICAgIHNlbGVjdC5yZW1vdmUoZWMpOwotICAgICAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gVGhlIEhUTUxTZWxlY3RFbGVtZW50OjpyZW1vdmUo
KSBmdW5jdGlvbiBjYW4gdGFrZSBlaXRoZXIgYW4gb3B0aW9uIG9iamVjdCBvciB0aGUgaW5kZXgg
b2YgYW4gb3B0aW9uLgotICAgICAgICBpZiAoSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IEpT
SFRNTE9wdGlvbkVsZW1lbnQ6OnRvV3JhcHBlZChleGVjLT5hcmd1bWVudCgwKSkpCisgICAgICAg
IGlmIChIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uID0gSlNIVE1MT3B0aW9uRWxlbWVudDo6dG9X
cmFwcGVkKHN0YXRlLmFyZ3VtZW50KDApKSkKICAgICAgICAgICAgIHNlbGVjdC5yZW1vdmUob3B0
aW9uKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2VsZWN0LnJlbW92ZUJ5SW5kZXgoZXhl
Yy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKSk7CisgICAgICAgICAgICBzZWxlY3QucmVtb3Zl
QnlJbmRleChzdGF0ZS5hcmd1bWVudCgwKS50b0ludDMyKCZzdGF0ZSkpOwogICAgIH0KIAogICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHAKaW5kZXggZTEyMTk5ZjFi
NTQ3N2RmNWNiMTU4ODc3OTc1M2RhYmJlNWUwZmZkZi4uMWJiODZkZjg4YzlkZWVhYjA5YmEwNmYz
MjVkZTdiZGY2NmQ0NDhhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3BwCkBAIC00Myw5ICs0Myw5IEBA
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSBK
U0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OmNvbnRlbnQoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNW
YWx1ZSBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OmNvbnRlbnQoRXhlY1N0YXRlJiBzdGF0ZSkgY29u
c3QKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
aygmc3RhdGUpOwogCiAgICAgRG9jdW1lbnRGcmFnbWVudCogY29udGVudCA9IGltcGwoKS5jb250
ZW50KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9y
eUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20u
Y3BwCmluZGV4IGQ0MDczNTE4NjQxMmQ4OTQ2NmY0ZGE1YzhmM2M3ZWE2OTEzZWM3OWQuLjc3N2Zl
MDZjNGEzMmQxMzAxYTRjMGYwZTQ3YzY0Nzc2OGZjNTZjMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcApAQCAtMTA1LDcgKzEwNSw3IEBAIHZv
aWQgSlNIaXN0b3J5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOCiAgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAotSlNWYWx1ZSBKU0hpc3Rv
cnk6OnN0YXRlKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QKK0pTVmFsdWUgSlNIaXN0b3J5OjpzdGF0
ZShFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewogICAgIEhpc3RvcnkmIGhpc3RvcnkgPSBpbXBs
KCk7CiAKQEAgLTExNCw2MyArMTE0LDYzIEBAIEpTVmFsdWUgSlNIaXN0b3J5OjpzdGF0ZShFeGVj
U3RhdGUgKmV4ZWMpIGNvbnN0CiAgICAgICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKIAogICAgIFJl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWQgPSBoaXN0b3J5LnN0YXRlKCk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBzZXJpYWxpemVkID8gc2VyaWFsaXplZC0+ZGVzZXJpYWxp
emUoZXhlYywgZ2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7Ci0gICAgY29uc3RfY2FzdDxK
U0hpc3RvcnkqPih0aGlzKS0+bV9zdGF0ZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgcmVzdWx0KTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IHNlcmlhbGl6ZWQgPyBzZXJpYWxpemVkLT5kZXNlcmlhbGl6
ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpOworICAgIGNvbnN0X2Nhc3Q8
SlNIaXN0b3J5Kj4odGhpcyktPm1fc3RhdGUuc2V0KHN0YXRlLnZtKCksIHRoaXMsIHJlc3VsdCk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSBKU0hpc3Rvcnk6OnB1c2hTdGF0ZShF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTSGlzdG9yeTo6cHVzaFN0YXRlKEV4ZWNTdGF0ZSYg
c3RhdGUpCiB7Ci0gICAgaWYgKCFzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoZXhlYywgaW1wbCgp
LmZyYW1lKCkpKQorICAgIGlmICghc2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKCZzdGF0ZSwgaW1w
bCgpLmZyYW1lKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIFJlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGhpc3RvcnlTdGF0ZSA9IFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCAwLCAwKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gaGlz
dG9yeVN0YXRlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoJnN0YXRlLCBzdGF0ZS5h
cmd1bWVudCgwKSwgMCwgMCk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIFN0cmluZyB0aXRsZSA9IHZhbHVlVG9TdHJp
bmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQoMSkpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBTdHJpbmcgdGl0bGUgPSB2YWx1ZVRvU3Ry
aW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMSkpOwor
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7Ci0gICAgICAgIAorCiAgICAgU3RyaW5nIHVybDsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRD
b3VudCgpID4gMikgewotICAgICAgICB1cmwgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9y
TnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPiAyKSB7CisgICAg
ICAgIHVybCA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBz
dGF0ZS5hcmd1bWVudCgyKSk7CisgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwogICAgIGltcGwoKS5zdGF0ZU9iamVjdEFkZGVkKGhpc3RvcnlTdGF0ZS5yZWxl
YXNlKCksIHRpdGxlLCB1cmwsIEhpc3Rvcnk6OlN0YXRlT2JqZWN0VHlwZTo6UHVzaCwgZWMpOwot
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0
ZSwgZWMpOwogCiAgICAgbV9zdGF0ZS5jbGVhcigpOwogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKLUpTVmFsdWUgSlNIaXN0b3J5OjpyZXBsYWNlU3RhdGUoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU0hpc3Rvcnk6OnJlcGxhY2VTdGF0ZShFeGVjU3RhdGUmIHN0YXRlKQogewot
ICAgIGlmICghc2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKGV4ZWMsIGltcGwoKS5mcmFtZSgpKSkK
KyAgICBpZiAoIXNob3VsZEFsbG93QWNjZXNzVG9GcmFtZSgmc3RhdGUsIGltcGwoKS5mcmFtZSgp
KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBoaXN0b3J5U3RhdGUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgMCwgMCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGhpc3RvcnlTdGF0ZSA9
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCks
IDAsIDApOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKLSAgICBTdHJpbmcgdGl0bGUgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVm
aW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgU3RyaW5nIHRpdGxlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRl
ZmluZWRPck51bGxDaGVjaygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDEpKTsKKyAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAg
ICAKKwogICAgIFN0cmluZyB1cmw7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDIp
IHsKLSAgICAgICAgdXJsID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhl
eGVjLCBleGVjLT5hcmd1bWVudCgyKSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID4gMikgeworICAgICAgICB1cmwgPSB2
YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKCZzdGF0ZSwgc3RhdGUuYXJndW1l
bnQoMikpOworICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICBpbXBsKCkuc3RhdGVPYmplY3RBZGRlZChoaXN0b3J5U3RhdGUucmVsZWFzZSgpLCB0aXRs
ZSwgdXJsLCBIaXN0b3J5OjpTdGF0ZU9iamVjdFR5cGU6OlJlcGxhY2UsIGVjKTsKLSAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsK
IAogICAgIG1fc3RhdGUuY2xlYXIoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJREJEYXRhYmFzZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcAppbmRleCBhMjVkY2E5OTE4YzNhZTJlZTc2YTE4
MDVhMjBkMGIxMGJkYWYxOWQzLi5lNTM1MDhmMWI2NWQzYWFhYzg2Y2MzZTU0OTBjMGE5M2U4M2E0
MGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNl
Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNl
Q3VzdG9tLmNwcApAQCAtNDQsNDAgKzQ0LDQwIEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSBKU0lEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RT
dG9yZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVj
dFN0b3JlKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA8IDEpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1l
bnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24o
JnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAotICAgIFN0
cmluZyBuYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBTdHJpbmcgbmFtZSA9IHN0YXRl
LmFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAg
IEpTVmFsdWUgb3B0aW9uc1ZhbHVlID0gZXhlYy0+YXJndW1lbnQoMSk7CisgICAgSlNWYWx1ZSBv
cHRpb25zVmFsdWUgPSBzdGF0ZS5hcmd1bWVudCgxKTsKICAgICBpZiAoIW9wdGlvbnNWYWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpICYmICFvcHRpb25zVmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAg
cmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMsICJOb3QgYW4gb2JqZWN0LiIpOworICAgICAgICBy
ZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCAiTm90IGFuIG9iamVjdC4iKTsKIAogICAgIElE
QktleVBhdGgga2V5UGF0aDsKICAgICBib29sIGF1dG9JbmNyZW1lbnQgPSBmYWxzZTsKICAgICBp
ZiAoIW9wdGlvbnNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgIEpTVmFsdWUg
a2V5UGF0aFZhbHVlID0gb3B0aW9uc1ZhbHVlLmdldChleGVjLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKGV4ZWMsICJrZXlQYXRoIikpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIEpTVmFsdWUga2V5UGF0aFZhbHVlID0gb3B0aW9uc1ZhbHVlLmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAia2V5UGF0aCIpKTsKKyAgICAgICAgaWYg
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKICAgICAgICAgaWYgKCFrZXlQYXRoVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAg
ICAgICAgICAga2V5UGF0aCA9IGlkYktleVBhdGhGcm9tVmFsdWUoZXhlYywga2V5UGF0aFZhbHVl
KTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGtl
eVBhdGggPSBpZGJLZXlQYXRoRnJvbVZhbHVlKCZzdGF0ZSwga2V5UGF0aFZhbHVlKTsKKyAgICAg
ICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG9JbmNyZW1lbnQgPSBvcHRp
b25zVmFsdWUuZ2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImF1dG9JbmNy
ZW1lbnQiKSkudG9Cb29sZWFuKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIGF1dG9JbmNyZW1lbnQgPSBvcHRpb25zVmFsdWUuZ2V0KCZzdGF0ZSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJhdXRvSW5jcmVtZW50IikpLnRvQm9vbGVhbigm
c3RhdGUpOworICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGltcGwoKS5j
cmVhdGVPYmplY3RTdG9yZShuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50LCBlYykuZ2V0KCkp
OwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIGltcGwoKS5jcmVhdGVPYmplY3RTdG9yZShuYW1l
LCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50LCBlYykuZ2V0KCkpOworICAgIHNldERPTUV4Y2VwdGlv
bigmc3RhdGUsIGVjKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCmluZGV4IDg1
MDdlNDk0YTM3NmRiNzk5ZTU2ZmJlZThiZDFjYzZkOWQxNjc4MjguLjAxMjg4YzZlYWNhZjc1Nzg0
MzRjNDEyMTg1ZDA1NGQ1NjgyOGI5ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCkBAIC00Myw0MiArNDMsNDIgQEAg
dXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpT
SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNJ
REJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwor
ICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJv
d0V4Y2VwdGlvbihleGVjLCBjcmVhdGVSZWZlcmVuY2VFcnJvcihleGVjLCAiSURCT2JqZWN0U3Rv
cmUgc2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIikpOworICAgICAgICBy
ZXR1cm4gc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZVJlZmVyZW5jZUVy
cm9yKCZzdGF0ZSwgIklEQk9iamVjdFN0b3JlIHNjcmlwdCAmc3RhdGV1dGlvbiBjb250ZXh0IGlz
IHVuYXZhaWxhYmxlIikpOwogCi0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCi0g
ICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgp
IDwgMikKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAotICAgIFN0cmluZyBuYW1l
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBTdHJpbmcgbmFtZSA9IHN0YXRlLmFyZ3VtZW50
KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIElEQktleVBh
dGgga2V5UGF0aCA9IGlkYktleVBhdGhGcm9tVmFsdWUoZXhlYywgZXhlYy0+YXJndW1lbnQoMSkp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBJREJLZXlQYXRoIGtleVBhdGgg
PSBpZGJLZXlQYXRoRnJvbVZhbHVlKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMSkpOworICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAK
LSAgICBKU1ZhbHVlIG9wdGlvbnNWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDIpOworICAgIEpTVmFs
dWUgb3B0aW9uc1ZhbHVlID0gc3RhdGUuYXJndW1lbnQoMik7CiAgICAgaWYgKCFvcHRpb25zVmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSAmJiAhb3B0aW9uc1ZhbHVlLmlzT2JqZWN0KCkpCi0gICAg
ICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCAiTm90IGFuIG9iamVjdC4iKTsKKyAgICAg
ICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgIk5vdCBhbiBvYmplY3QuIik7CiAKICAg
ICBib29sIHVuaXF1ZSA9IGZhbHNlOwogICAgIGJvb2wgbXVsdGlFbnRyeSA9IGZhbHNlOwogICAg
IGlmICghb3B0aW9uc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgdW5pcXVl
ID0gb3B0aW9uc1ZhbHVlLmdldChleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJ1
bmlxdWUiKSkudG9Cb29sZWFuKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIHVuaXF1ZSA9IG9wdGlvbnNWYWx1ZS5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZSwgInVuaXF1ZSIpKS50b0Jvb2xlYW4oJnN0YXRlKTsKKyAgICAg
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAKLSAgICAgICAgbXVsdGlFbnRyeSA9IG9wdGlvbnNWYWx1ZS5nZXQoZXhlYywgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAibXVsdGlFbnRyeSIpKS50b0Jvb2xlYW4oZXhlYyk7
Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgbXVsdGlFbnRyeSA9
IG9wdGlvbnNWYWx1ZS5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
Im11bHRpRW50cnkiKSkudG9Cb29sZWFuKCZzdGF0ZSk7CisgICAgICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QoKSwgaW1wbCgpLmNyZWF0ZUluZGV4KGNvbnRleHQsIG5hbWUsIGtleVBh
dGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSwgZWMpLmdldCgpKTsKLSAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgZWMpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVj
dCgpLCBpbXBsKCkuY3JlYXRlSW5kZXgoY29udGV4dCwgbmFtZSwga2V5UGF0aCwgdW5pcXVlLCBt
dWx0aUVudHJ5LCBlYykuZ2V0KCkpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAKaW5kZXggODdi
YjI3NzRmMjZlYjk2M2U5NWJhYzIzOTNlODdkM2UwZTJhN2YzMS4uZTI2YmJlNzhkOWZiYmM0OTIw
Y2UxZWZjYjRjMzUwZmQ3YTEzMjRiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcApAQCAtOTEs
MTYgKzkxLDE2IEBAIHN0YXRpYyB2b2lkIHBvcHVsYXRlQ29udGV4dE1lbnVJdGVtcyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCBDb250ZXh0TWVuCiB9CiAjZW5kaWYKIAotSlNWYWx1
ZSBKU0luc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0NvbnRleHRNZW51KEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUgSlNJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDb250ZXh0TWVudShFeGVj
U3RhdGUmIHN0YXRlKQogewogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQotICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPCAyKQorICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPCAy
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBFdmVudCogZXZlbnQgPSBKU0V2
ZW50Ojp0b1dyYXBwZWQoZXhlYy0+YXJndW1lbnQoMCkpOworICAgIEV2ZW50KiBldmVudCA9IEpT
RXZlbnQ6OnRvV3JhcHBlZChzdGF0ZS5hcmd1bWVudCgwKSk7CiAKLSAgICBKU0FycmF5KiBhcnJh
eSA9IGFzQXJyYXkoZXhlYy0+YXJndW1lbnQoMSkpOworICAgIEpTQXJyYXkqIGFycmF5ID0gYXNB
cnJheShzdGF0ZS5hcmd1bWVudCgxKSk7CiAgICAgQ29udGV4dE1lbnUgbWVudTsKLSAgICBwb3B1
bGF0ZUNvbnRleHRNZW51SXRlbXMoZXhlYywgYXJyYXksIG1lbnUpOworICAgIHBvcHVsYXRlQ29u
dGV4dE1lbnVJdGVtcygmc3RhdGUsIGFycmF5LCBtZW51KTsKIAogI2lmICFVU0UoQ1JPU1NfUExB
VEZPUk1fQ09OVEVYVF9NRU5VUykKICAgICBWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiBpdGVtcyA9
IGNvbnRleHRNZW51SXRlbVZlY3RvcihtZW51LnBsYXRmb3JtRGVzY3JpcHRpb24oKSk7CkBAIC0x
MDksNyArMTA5LDcgQEAgSlNWYWx1ZSBKU0luc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0NvbnRl
eHRNZW51KEV4ZWNTdGF0ZSogZXhlYykKICNlbmRpZgogICAgIGltcGwoKS5zaG93Q29udGV4dE1l
bnUoZXZlbnQsIGl0ZW1zKTsKICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAjZW5kaWYKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20u
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAKaW5k
ZXggMmE2OGJiNWE5OTI5NzQ1MDFjYmQ0YjZjOGZjZDdlZTg1NTU2ZDllMi4uMTMxZTI4NzBiZGI1
OWQ2MDUzNmE5MTBhNzcxZGQ1MDc3MmMwNmU0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAKQEAgLTEzMiwxMyArMTMyLDEzIEBAIGJvb2wg
SlNMb2NhdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hCiAgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CiB9
CiAKLUpTVmFsdWUgSlNMb2NhdGlvbjo6dG9TdHJpbmdGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTTG9jYXRpb246OnRvU3RyaW5nRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSkK
IHsKICAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCkuZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lIHx8
ICFzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoZXhlYywgZnJhbWUpKQorICAgIGlmICghZnJhbWUg
fHwgIXNob3VsZEFsbG93QWNjZXNzVG9GcmFtZSgmc3RhdGUsIGZyYW1lKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywg
aW1wbCgpLnRvU3RyaW5nKCkpOworICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUs
IGltcGwoKS50b1N0cmluZygpKTsKIH0KIAogYm9vbCBKU0xvY2F0aW9uUHJvdG90eXBlOjpwdXRE
ZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU01lZGlhU291cmNlU3RhdGVzQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTWVkaWFTb3VyY2VTdGF0ZXNDdXN0b20uY3BwCmluZGV4IGNhMzRhYzEwNjA2ZmY5
MDVlMTRjOWY0NjFhNDU2YTIzM2E5NzIyZjkuLjgwMThiMjYzM2I3OGU5Y2UxZGUyOTEzM2Q5ZDk0
ZTY3MDJlYTM1MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVk
aWFTb3VyY2VTdGF0ZXNDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTWVkaWFTb3VyY2VTdGF0ZXNDdXN0b20uY3BwCkBAIC0zNSw3ICszNSw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSBKU01lZGlhU291
cmNlU3RhdGVzOjp3aWR0aChFeGVjU3RhdGUqKSBjb25zdAorSlNWYWx1ZSBKU01lZGlhU291cmNl
U3RhdGVzOjp3aWR0aChFeGVjU3RhdGUmKSBjb25zdAogewogICAgIGlmICghaW1wbCgpLmhhc1Zp
ZGVvU291cmNlKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtNDMsNyArNDMs
NyBAQCBKU1ZhbHVlIEpTTWVkaWFTb3VyY2VTdGF0ZXM6OndpZHRoKEV4ZWNTdGF0ZSopIGNvbnN0
CiAgICAgcmV0dXJuIGpzTnVtYmVyKGltcGwoKS53aWR0aCgpKTsKIH0KIAotSlNWYWx1ZSBKU01l
ZGlhU291cmNlU3RhdGVzOjpoZWlnaHQoRXhlY1N0YXRlKikgY29uc3QKK0pTVmFsdWUgSlNNZWRp
YVNvdXJjZVN0YXRlczo6aGVpZ2h0KEV4ZWNTdGF0ZSYpIGNvbnN0CiB7CiAgICAgaWYgKCFpbXBs
KCkuaGFzVmlkZW9Tb3VyY2UoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC01
MSw3ICs1MSw3IEBAIEpTVmFsdWUgSlNNZWRpYVNvdXJjZVN0YXRlczo6aGVpZ2h0KEV4ZWNTdGF0
ZSopIGNvbnN0CiAgICAgcmV0dXJuIGpzTnVtYmVyKGltcGwoKS5oZWlnaHQoKSk7CiB9CiAKLUpT
VmFsdWUgSlNNZWRpYVNvdXJjZVN0YXRlczo6ZnJhbWVSYXRlKEV4ZWNTdGF0ZSopIGNvbnN0CitK
U1ZhbHVlIEpTTWVkaWFTb3VyY2VTdGF0ZXM6OmZyYW1lUmF0ZShFeGVjU3RhdGUmKSBjb25zdAog
ewogICAgIGlmICghaW1wbCgpLmhhc1ZpZGVvU291cmNlKCkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwpAQCAtNTksNyArNTksNyBAQCBKU1ZhbHVlIEpTTWVkaWFTb3VyY2VTdGF0ZXM6
OmZyYW1lUmF0ZShFeGVjU3RhdGUqKSBjb25zdAogICAgIHJldHVybiBqc051bWJlcihpbXBsKCku
ZnJhbWVSYXRlKCkpOwogfQogCi1KU1ZhbHVlIEpTTWVkaWFTb3VyY2VTdGF0ZXM6OmFzcGVjdFJh
dGlvKEV4ZWNTdGF0ZSopIGNvbnN0CitKU1ZhbHVlIEpTTWVkaWFTb3VyY2VTdGF0ZXM6OmFzcGVj
dFJhdGlvKEV4ZWNTdGF0ZSYpIGNvbnN0CiB7CiAgICAgaWYgKCFpbXBsKCkuaGFzVmlkZW9Tb3Vy
Y2UoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC02Nyw3ICs2Nyw3IEBAIEpT
VmFsdWUgSlNNZWRpYVNvdXJjZVN0YXRlczo6YXNwZWN0UmF0aW8oRXhlY1N0YXRlKikgY29uc3QK
ICAgICByZXR1cm4ganNOdW1iZXIoaW1wbCgpLmFzcGVjdFJhdGlvKCkpOwogfQogCi1KU1ZhbHVl
IEpTTWVkaWFTb3VyY2VTdGF0ZXM6OmZhY2luZ01vZGUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAor
SlNWYWx1ZSBKU01lZGlhU291cmNlU3RhdGVzOjpmYWNpbmdNb2RlKEV4ZWNTdGF0ZSYgc3RhdGUp
IGNvbnN0CiB7CiAgICAgaWYgKCFpbXBsKCkuaGFzVmlkZW9Tb3VyY2UoKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC03NiwxMCArNzYsMTAgQEAgSlNWYWx1ZSBKU01lZGlhU291
cmNlU3RhdGVzOjpmYWNpbmdNb2RlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICBpZiAobW9k
ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIAotICAgIHJl
dHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBpbXBsKCkuZmFjaW5nTW9kZSgpKTsKKyAgICBy
ZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsKCkuZmFjaW5nTW9kZSgpKTsKIH0K
IAotSlNWYWx1ZSBKU01lZGlhU291cmNlU3RhdGVzOjp2b2x1bWUoRXhlY1N0YXRlKikgY29uc3QK
K0pTVmFsdWUgSlNNZWRpYVNvdXJjZVN0YXRlczo6dm9sdW1lKEV4ZWNTdGF0ZSYpIGNvbnN0CiB7
CiAgICAgaWYgKGltcGwoKS5oYXNWaWRlb1NvdXJjZSgpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2Fn
ZUV2ZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2
ZW50Q3VzdG9tLmNwcAppbmRleCBiZTY0NWMwZWI4MjU4Zjc4NmRkOTQ5MDZlOTQxOTM1OTliNGM1
MDA3Li5jYjg3ZDg5NTFmOTczNGU5YWQwODNkMDNjOTg2MzRjZGZiMDg2ZWU2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCkBA
IC00NCwxMSArNDQsMTEgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1KU1ZhbHVlIEpTTWVzc2FnZUV2ZW50OjpkYXRhKEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKK0pTVmFsdWUgSlNNZXNzYWdlRXZlbnQ6OmRhdGEoRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QK
IHsKICAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IG1fZGF0YS5nZXQoKSkgewogICAgICAg
ICAvLyBXZSBjYW5ub3QgdXNlIGEgY2FjaGVkIG9iamVjdCBpZiB3ZSBhcmUgaW4gYSBkaWZmZXJl
bnQgd29ybGQgdGhhbiB0aGUgb25lIGl0IHdhcyBjcmVhdGVkIGluLgotICAgICAgICBpZiAoIWNh
Y2hlZFZhbHVlLmlzT2JqZWN0KCkgfHwgJndvcmxkRm9yRE9NT2JqZWN0KGNhY2hlZFZhbHVlLmdl
dE9iamVjdCgpKSA9PSAmY3VycmVudFdvcmxkKGV4ZWMpKQorICAgICAgICBpZiAoIWNhY2hlZFZh
bHVlLmlzT2JqZWN0KCkgfHwgJndvcmxkRm9yRE9NT2JqZWN0KGNhY2hlZFZhbHVlLmdldE9iamVj
dCgpKSA9PSAmY3VycmVudFdvcmxkKCZzdGF0ZSkpCiAgICAgICAgICAgICByZXR1cm4gY2FjaGVk
VmFsdWU7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTY0LDEwICs2
NCwxMCBAQCBKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50OjpkYXRhKEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKICAgICAgICAgICAgIEpTVmFsdWUgZGF0YVZhbHVlID0gc2NyaXB0VmFsdWUuanNWYWx1ZSgp
OwogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgTWVzc2FnZUV2ZW50cyBkbyBu
b3QgbGVhayBvYmplY3RzIGluIHRoZWlyIHN0YXRlIHByb3BlcnR5IGFjcm9zcyBpc29sYXRlZCBE
T00gd29ybGRzLgogICAgICAgICAgICAgLy8gSWRlYWxseSwgd2Ugd291bGQgY2hlY2sgdGhhdCB0
aGUgd29ybGRzIGhhdmUgZGlmZmVyZW50IHByaXZpbGVnZXMgYnV0IHRoYXQncyBub3QgcG9zc2li
bGUgeWV0LgotICAgICAgICAgICAgaWYgKGRhdGFWYWx1ZS5pc09iamVjdCgpICYmICZ3b3JsZEZv
ckRPTU9iamVjdChkYXRhVmFsdWUuZ2V0T2JqZWN0KCkpICE9ICZjdXJyZW50V29ybGQoZXhlYykp
IHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxp
emVkVmFsdWUgPSBldmVudC50cnlTZXJpYWxpemVEYXRhKGV4ZWMpOworICAgICAgICAgICAgaWYg
KGRhdGFWYWx1ZS5pc09iamVjdCgpICYmICZ3b3JsZEZvckRPTU9iamVjdChkYXRhVmFsdWUuZ2V0
T2JqZWN0KCkpICE9ICZjdXJyZW50V29ybGQoJnN0YXRlKSkgeworICAgICAgICAgICAgICAgIFJl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IGV2ZW50LnRyeVNl
cmlhbGl6ZURhdGEoJnN0YXRlKTsKICAgICAgICAgICAgICAgICBpZiAoc2VyaWFsaXplZFZhbHVl
KQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzZXJpYWxpemVkVmFsdWUtPmRlc2VyaWFs
aXplKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gc2VyaWFsaXplZFZhbHVlLT5kZXNlcmlhbGl6ZSgmc3RhdGUsIGdsb2JhbE9iamVj
dCgpLCBudWxscHRyKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdCA9IGpzTnVsbCgpOwogICAgICAgICAgICAgfSBlbHNlCkBAIC04MCw2NCArODAsNjQg
QEAgSlNWYWx1ZSBKU01lc3NhZ2VFdmVudDo6ZGF0YShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAg
ICAgICAgIGlmIChSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUg
PSBldmVudC5kYXRhQXNTZXJpYWxpemVkU2NyaXB0VmFsdWUoKSkgewogICAgICAgICAgICAgTWVz
c2FnZVBvcnRBcnJheSBwb3J0cyA9IGltcGwoKS5wb3J0cygpOwogICAgICAgICAgICAgLy8gRklY
TUU6IFdoeSBkb2VzIHRoaXMgc3VwcHJlc3MgZXhjZXB0aW9ucz8KLSAgICAgICAgICAgIHJlc3Vs
dCA9IHNlcmlhbGl6ZWRWYWx1ZS0+ZGVzZXJpYWxpemUoZXhlYywgZ2xvYmFsT2JqZWN0KCksICZw
b3J0cywgTm9uVGhyb3dpbmcpOworICAgICAgICAgICAgcmVzdWx0ID0gc2VyaWFsaXplZFZhbHVl
LT5kZXNlcmlhbGl6ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCAmcG9ydHMsIE5vblRocm93aW5n
KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXN1bHQgPSBqc051bGwoKTsKICAgICAg
ICAgYnJlYWs7CiAKICAgICBjYXNlIE1lc3NhZ2VFdmVudDo6RGF0YVR5cGVTdHJpbmc6Ci0gICAg
ICAgIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGV2ZW50LmRhdGFBc1N0cmluZygp
KTsKKyAgICAgICAgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBldmVudC5kYXRh
QXNTdHJpbmcoKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBNZXNzYWdlRXZlbnQ6OkRh
dGFUeXBlQmxvYjoKLSAgICAgICAgcmVzdWx0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwg
ZXZlbnQuZGF0YUFzQmxvYigpKTsKKyAgICAgICAgcmVzdWx0ID0gdG9KUygmc3RhdGUsIGdsb2Jh
bE9iamVjdCgpLCBldmVudC5kYXRhQXNCbG9iKCkpOwogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgTWVzc2FnZUV2ZW50OjpEYXRhVHlwZUFycmF5QnVmZmVyOgotICAgICAgICByZXN1bHQgPSB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBldmVudC5kYXRhQXNBcnJheUJ1ZmZlcigpKTsKKyAg
ICAgICAgcmVzdWx0ID0gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBldmVudC5kYXRhQXNB
cnJheUJ1ZmZlcigpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgLy8gU2F2ZSB0aGUg
cmVzdWx0IHNvIHdlIGRvbid0IGhhdmUgdG8gZGVzZXJpYWxpemUgdGhlIHZhbHVlIGFnYWluLgot
ICAgIGNvbnN0X2Nhc3Q8SlNNZXNzYWdlRXZlbnQqPih0aGlzKS0+bV9kYXRhLnNldChleGVjLT52
bSgpLCB0aGlzLCByZXN1bHQpOworICAgIGNvbnN0X2Nhc3Q8SlNNZXNzYWdlRXZlbnQqPih0aGlz
KS0+bV9kYXRhLnNldChzdGF0ZS52bSgpLCB0aGlzLCByZXN1bHQpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXN0YXRpYyBKU0M6OkpTVmFsdWUgaGFuZGxlSW5pdE1lc3NhZ2VFdmVudChKU01l
c3NhZ2VFdmVudCoganNFdmVudCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNDOjpK
U1ZhbHVlIGhhbmRsZUluaXRNZXNzYWdlRXZlbnQoSlNNZXNzYWdlRXZlbnQqIGpzRXZlbnQsIEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBjb25zdCBTdHJpbmcmIHR5cGVBcmcgPSBleGVj
LT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgYm9vbCBjYW5C
dWJibGVBcmcgPSBleGVjLT5hcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgYm9vbCBj
YW5jZWxhYmxlQXJnID0gZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpOwotICAgIGNv
bnN0IFN0cmluZyBvcmlnaW5BcmcgPSBleGVjLT5hcmd1bWVudCg0KS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7Ci0gICAgY29uc3QgU3RyaW5nIGxhc3RFdmVudElkQXJnID0gZXhlYy0+YXJn
dW1lbnQoNSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIERPTVdpbmRvdyogc291
cmNlQXJnID0gSlNET01XaW5kb3c6OnRvV3JhcHBlZChleGVjLT5hcmd1bWVudCg2KSk7CisgICAg
Y29uc3QgU3RyaW5nJiB0eXBlQXJnID0gc3RhdGUuYXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRl
KS0+dmFsdWUoJnN0YXRlKTsKKyAgICBib29sIGNhbkJ1YmJsZUFyZyA9IHN0YXRlLmFyZ3VtZW50
KDEpLnRvQm9vbGVhbigmc3RhdGUpOworICAgIGJvb2wgY2FuY2VsYWJsZUFyZyA9IHN0YXRlLmFy
Z3VtZW50KDIpLnRvQm9vbGVhbigmc3RhdGUpOworICAgIGNvbnN0IFN0cmluZyBvcmlnaW5Bcmcg
PSBzdGF0ZS5hcmd1bWVudCg0KS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOworICAg
IGNvbnN0IFN0cmluZyBsYXN0RXZlbnRJZEFyZyA9IHN0YXRlLmFyZ3VtZW50KDUpLnRvU3RyaW5n
KCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgRE9NV2luZG93KiBzb3VyY2VBcmcgPSBKU0RP
TVdpbmRvdzo6dG9XcmFwcGVkKHN0YXRlLmFyZ3VtZW50KDYpKTsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8TWVzc2FnZVBvcnRBcnJheT4gbWVzc2FnZVBvcnRzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxB
cnJheUJ1ZmZlckFycmF5PiBhcnJheUJ1ZmZlcnM7Ci0gICAgaWYgKCFleGVjLT5hcmd1bWVudCg3
KS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgaWYgKCFzdGF0ZS5hcmd1bWVudCg3KS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAgIG1lc3NhZ2VQb3J0cyA9IHN0ZDo6bWFrZV91bmlx
dWU8TWVzc2FnZVBvcnRBcnJheT4oKTsKICAgICAgICAgYXJyYXlCdWZmZXJzID0gc3RkOjptYWtl
X3VuaXF1ZTxBcnJheUJ1ZmZlckFycmF5PigpOwotICAgICAgICBmaWxsTWVzc2FnZVBvcnRBcnJh
eShleGVjLCBleGVjLT5hcmd1bWVudCg3KSwgKm1lc3NhZ2VQb3J0cywgKmFycmF5QnVmZmVycyk7
Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgZmlsbE1lc3NhZ2VQ
b3J0QXJyYXkoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDcpLCAqbWVzc2FnZVBvcnRzLCAqYXJyYXlC
dWZmZXJzKTsKKyAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQotICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
IGRhdGFBcmcgPSBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZShleGVjLT52bSgpLCBleGVjLT5hcmd1
bWVudCgzKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlIGRhdGFBcmcgPSBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZShzdGF0ZS52bSgp
LCBzdGF0ZS5hcmd1bWVudCgzKSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIE1lc3NhZ2VFdmVudCYgZXZlbnQgPSBq
c0V2ZW50LT5pbXBsKCk7CiAgICAgZXZlbnQuaW5pdE1lc3NhZ2VFdmVudCh0eXBlQXJnLCBjYW5C
dWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIGRhdGFBcmcsIG9yaWdpbkFyZywgbGFzdEV2ZW50SWRB
cmcsIHNvdXJjZUFyZywgV1RGOjptb3ZlKG1lc3NhZ2VQb3J0cykpOwotICAgIGpzRXZlbnQtPm1f
ZGF0YS5zZXQoZXhlYy0+dm0oKSwganNFdmVudCwgZGF0YUFyZy5qc1ZhbHVlKCkpOworICAgIGpz
RXZlbnQtPm1fZGF0YS5zZXQoc3RhdGUudm0oKSwganNFdmVudCwgZGF0YUFyZy5qc1ZhbHVlKCkp
OwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNNZXNzYWdl
RXZlbnQ6OmluaXRNZXNzYWdlRXZlbnQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCitKU0M6OkpTVmFs
dWUgSlNNZXNzYWdlRXZlbnQ6OmluaXRNZXNzYWdlRXZlbnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
KQogewotICAgIHJldHVybiBoYW5kbGVJbml0TWVzc2FnZUV2ZW50KHRoaXMsIGV4ZWMpOworICAg
IHJldHVybiBoYW5kbGVJbml0TWVzc2FnZUV2ZW50KHRoaXMsIHN0YXRlKTsKIH0KIAotSlNDOjpK
U1ZhbHVlIEpTTWVzc2FnZUV2ZW50Ojp3ZWJraXRJbml0TWVzc2FnZUV2ZW50KEpTQzo6RXhlY1N0
YXRlKiBleGVjKQorSlNDOjpKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50Ojp3ZWJraXRJbml0TWVzc2Fn
ZUV2ZW50KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1cm4gaGFuZGxlSW5pdE1l
c3NhZ2VFdmVudCh0aGlzLCBleGVjKTsKKyAgICByZXR1cm4gaGFuZGxlSW5pdE1lc3NhZ2VFdmVu
dCh0aGlzLCBzdGF0ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAKaW5kZXggOThh
NzRiNTE5MWIyNGM1MmEwOWVmOWVlMjhkMDczNzIwNTFiMzFiZi4uMjM5ZjQ3YWZkNmRhNWViZTUx
OTBlN2NiYjU5M2UzM2JlYmY5MWUxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAKQEAgLTUyLDEyICs1MiwxMiBAQCB2b2lkIEpT
TWVzc2FnZVBvcnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QocG9ydCk7CiB9CiAKLUpTQzo6SlNWYWx1
ZSBKU01lc3NhZ2VQb3J0Ojpwb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK0pTQzo6
SlNWYWx1ZSBKU01lc3NhZ2VQb3J0Ojpwb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUp
CiB7Ci0gICAgcmV0dXJuIGhhbmRsZVBvc3RNZXNzYWdlKGV4ZWMsICZpbXBsKCkpOworICAgIHJl
dHVybiBoYW5kbGVQb3N0TWVzc2FnZShzdGF0ZSwgJmltcGwoKSk7CiB9CiAKLXZvaWQgZmlsbE1l
c3NhZ2VQb3J0QXJyYXkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
TWVzc2FnZVBvcnRBcnJheSYgcG9ydEFycmF5LCBBcnJheUJ1ZmZlckFycmF5JiBhcnJheUJ1ZmZl
cnMpCit2b2lkIGZpbGxNZXNzYWdlUG9ydEFycmF5KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBNZXNzYWdlUG9ydEFycmF5JiBwb3J0QXJyYXksIEFycmF5QnVmZmVy
QXJyYXkmIGFycmF5QnVmZmVycykKIHsKICAgICAvLyBDb252ZXJ0IGZyb20gdGhlIHBhc3NlZC1p
biBKUyBhcnJheS1saWtlIG9iamVjdCB0byBhIE1lc3NhZ2VQb3J0QXJyYXkuCiAgICAgLy8gQWxz
byB2YWxpZGF0ZXMgdGhlIGVsZW1lbnRzIHBlciBzZWN0aW9ucyA0LjEuMTMgYW5kIDQuMS4xNSBv
ZiB0aGUgV2ViSURMIHNwZWMgYW5kIHNlY3Rpb24gOC4zLjMgb2YgdGhlIEhUTUw1IHNwZWMuCkBA
IC02OSwxNyArNjksMTcgQEAgdm9pZCBmaWxsTWVzc2FnZVBvcnRBcnJheShKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlLCBNZXNzYWdlUG9ydEEKIAogICAgIC8vIFZhbGlk
YXRpb24gb2Ygc2VxdWVuY2UgdHlwZXMsIHBlciBXZWJJREwgc3BlYyA0LjEuMTMuCiAgICAgdW5z
aWduZWQgbGVuZ3RoID0gMDsKLSAgICBKU09iamVjdCogb2JqZWN0ID0gdG9KU1NlcXVlbmNlKGV4
ZWMsIHZhbHVlLCBsZW5ndGgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBK
U09iamVjdCogb2JqZWN0ID0gdG9KU1NlcXVlbmNlKCZzdGF0ZSwgdmFsdWUsIGxlbmd0aCk7Cisg
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwIDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBvYmplY3QtPmdldChleGVjLCBpKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBpKTsKKyAg
ICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAvLyBWYWxpZGF0aW9uIG9mIG5vbi1udWxsIG9iamVjdHMsIHBlciBIVE1MNSBzcGVjIDEw
LjMuMy4KICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAg
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBJTlZBTElEX1NUQVRFX0VSUik7CisgICAgICAgICAg
ICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBJTlZBTElEX1NUQVRFX0VSUik7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtODgsNyArODgsNyBAQCB2b2lkIGZpbGxNZXNzYWdl
UG9ydEFycmF5KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUsIE1lc3Nh
Z2VQb3J0QQogICAgICAgICBpZiAocG9ydCkgewogICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGR1
cGxpY2F0ZSBwb3J0cy4KICAgICAgICAgICAgIGlmIChwb3J0QXJyYXkuY29udGFpbnMocG9ydCkp
IHsKLSAgICAgICAgICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgSU5WQUxJRF9TVEFURV9F
UlIpOworICAgICAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIElOVkFMSURfU1RB
VEVfRVJSKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBwb3J0QXJyYXkuYXBwZW5kKHBvcnQucmVsZWFzZSgpKTsKQEAgLTk3LDcgKzk3LDcgQEAg
dm9pZCBmaWxsTWVzc2FnZVBvcnRBcnJheShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBNZXNzYWdlUG9ydEEKICAgICAgICAgICAgIGlmIChhcnJheUJ1ZmZlcikKICAg
ICAgICAgICAgICAgICBhcnJheUJ1ZmZlcnMuYXBwZW5kKGFycmF5QnVmZmVyKTsKICAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgICAg
ICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmgKaW5kZXggZTQ1MmJhMWRlZDc5MzRiYTIxOWZkNmNk
OWFkOTljNzEzNDY3ZmZkZS4uN2JkOWRmMzUxNWY5MzUyMzVjMjkwYThlMzRiZTUyZDNmMjBlNWQz
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1
c3RvbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0
b20uaApAQCAtNDMsMjIgKzQzLDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gd2hpY2ggcHVsbHMgdGhlIHZhbHVlcyBvdXQgb2YgYSBKUyBzZXF1ZW5jZSBh
bmQgaW50byBhIE1lc3NhZ2VQb3J0QXJyYXkuCiAgICAgLy8gQWxzbyB2YWxpZGF0ZXMgdGhlIGVs
ZW1lbnRzIHBlciBzZWN0aW9ucyA0LjEuMTMgYW5kIDQuMS4xNSBvZiB0aGUgV2ViSURMIHNwZWMg
YW5kIHNlY3Rpb24gOC4zLjMgb2YgdGhlIEhUTUw1IHNwZWMuCiAgICAgLy8gTWF5IGdlbmVyYXRl
IGFuIGV4Y2VwdGlvbiB2aWEgdGhlIHBhc3NlZCBFeGVjU3RhdGUuCi0gICAgdm9pZCBmaWxsTWVz
c2FnZVBvcnRBcnJheShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgTWVzc2FnZVBvcnRB
cnJheSYsIEFycmF5QnVmZmVyQXJyYXkmKTsKKyAgICB2b2lkIGZpbGxNZXNzYWdlUG9ydEFycmF5
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBNZXNzYWdlUG9ydEFycmF5JiwgQXJyYXlC
dWZmZXJBcnJheSYpOwogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgZnJvbSBK
UyBwb3N0TWVzc2FnZSBhcmd1bWVudHMgdG8gV2ViQ29yZSBwb3N0TWVzc2FnZSBhcmd1bWVudHMu
CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIEpTQzo6SlNWYWx1ZSBoYW5k
bGVQb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgVCogaW1wbCkKKyAgICBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGhhbmRsZVBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVCog
aW1wbCkKICAgICB7CiAgICAgICAgIE1lc3NhZ2VQb3J0QXJyYXkgcG9ydEFycmF5OwogICAgICAg
ICBBcnJheUJ1ZmZlckFycmF5IGFycmF5QnVmZmVyQXJyYXk7Ci0gICAgICAgIGZpbGxNZXNzYWdl
UG9ydEFycmF5KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpLCBwb3J0QXJyYXksIGFycmF5QnVmZmVy
QXJyYXkpOwotICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtZXNzYWdlID0g
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksICZw
b3J0QXJyYXksICZhcnJheUJ1ZmZlckFycmF5KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICBmaWxsTWVzc2FnZVBvcnRBcnJheShzdGF0ZSwgc3RhdGUuYXJndW1l
bnQoMSksIHBvcnRBcnJheSwgYXJyYXlCdWZmZXJBcnJheSk7CisgICAgICAgIFJlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IG1lc3NhZ2UgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZSgmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDApLCAmcG9ydEFycmF5LCAmYXJyYXlCdWZmZXJBcnJh
eSk7CisgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVy
biBKU0M6OmpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAg
ICAgICAgIGltcGwtPnBvc3RNZXNzYWdlKG1lc3NhZ2UucmVsZWFzZSgpLCAmcG9ydEFycmF5LCBl
Yyk7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4
Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsK
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTW9ja0Nv
bnRlbnRGaWx0ZXJTZXR0aW5nc0N1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3NDdXN0b20uY3BwCmluZGV4IDliYzE0ZWIzYTM0
NmFiYzRjM2EyYjJjNTVjZTc2OGIxYzE2YzI0YjMuLmM0NjhhYWQ2YTYxNGU0OWYyYTdmYzk5MjJl
YzJiYWQyNDI0MmVjNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nc0N1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzQ3VzdG9tLmNwcApAQCAtMzgs
NyArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBEZWNpc2lvbiA9IE1vY2tDb250
ZW50RmlsdGVyU2V0dGluZ3M6OkRlY2lzaW9uOwogdXNpbmcgRGVjaXNpb25Qb2ludCA9IE1vY2tD
b250ZW50RmlsdGVyU2V0dGluZ3M6OkRlY2lzaW9uUG9pbnQ7CiAKLUpTVmFsdWUgSlNNb2NrQ29u
dGVudEZpbHRlclNldHRpbmdzOjpkZWNpc2lvblBvaW50KEV4ZWNTdGF0ZSopIGNvbnN0CitKU1Zh
bHVlIEpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nczo6ZGVjaXNpb25Qb2ludChFeGVjU3RhdGUm
KSBjb25zdAogewogICAgIERlY2lzaW9uUG9pbnQgZGVjaXNpb25Qb2ludCA9IGltcGwoKS5kZWNp
c2lvblBvaW50KCk7CiAgICAgc3dpdGNoIChkZWNpc2lvblBvaW50KSB7CkBAIC01NSwxMCArNTUs
MTAgQEAgSlNWYWx1ZSBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OmRlY2lzaW9uUG9pbnQo
RXhlY1N0YXRlKikgY29uc3QKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBK
U01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OnNldERlY2lzaW9uUG9pbnQoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OnNl
dERlY2lzaW9uUG9pbnQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICB1
aW50OF90IG5hdGl2ZVZhbHVlIHsgdG9VSW50OChleGVjLCB2YWx1ZSwgRW5mb3JjZVJhbmdlKSB9
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICB1aW50OF90IG5hdGl2ZVZhbHVl
IHsgdG9VSW50OCgmc3RhdGUsIHZhbHVlLCBFbmZvcmNlUmFuZ2UpIH07CisgICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAKICAgICBEZWNpc2lvblBvaW50IGRl
Y2lzaW9uUG9pbnQgeyBzdGF0aWNfY2FzdDxEZWNpc2lvblBvaW50PihuYXRpdmVWYWx1ZSkgfTsK
QEAgLTczLDcgKzczLDcgQEAgdm9pZCBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OnNldERl
Y2lzaW9uUG9pbnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHUKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmluZzo6Zm9ybWF0KCIldSBp
cyBub3QgYSB2YWxpZCBkZWNpc2lvblBvaW50IHZhbHVlLiIsIG5hdGl2ZVZhbHVlKSk7CisgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBTdHJpbmc6OmZvcm1hdCgiJXUgaXMgbm90IGEgdmFsaWQg
ZGVjaXNpb25Qb2ludCB2YWx1ZS4iLCBuYXRpdmVWYWx1ZSkpOwogfQogCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUgdG9KU1ZhbHVlKERlY2lzaW9uIGRlY2lzaW9uKQpAQCAtODgsMTAgKzg4LDEwIEBA
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSB0b0pTVmFsdWUoRGVjaXNpb24gZGVjaXNpb24pCiAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRGVjaXNpb24gdG9EZWNp
c2lvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCitzdGF0aWMgaW5saW5lIERlY2lz
aW9uIHRvRGVjaXNpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICB1
aW50OF90IG5hdGl2ZVZhbHVlIHsgdG9VSW50OChleGVjLCB2YWx1ZSwgRW5mb3JjZVJhbmdlKSB9
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICB1aW50OF90IG5hdGl2ZVZhbHVl
IHsgdG9VSW50OCgmc3RhdGUsIHZhbHVlLCBFbmZvcmNlUmFuZ2UpIH07CisgICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gRGVjaXNpb246OkFsbG93OwogCiAgICAg
RGVjaXNpb24gZGVjaXNpb24geyBzdGF0aWNfY2FzdDxEZWNpc2lvbj4obmF0aXZlVmFsdWUpIH07
CkBAIC0xMDEsMzMgKzEwMSwzMyBAQCBzdGF0aWMgaW5saW5lIERlY2lzaW9uIHRvRGVjaXNpb24o
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogICAgICAgICByZXR1cm4gZGVjaXNpb247
CiAgICAgfQogCi0gICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaW5nOjpmb3JtYXQoIiV1IGlz
IG5vdCBhIHZhbGlkIGRlY2lzaW9uIHZhbHVlLiIsIG5hdGl2ZVZhbHVlKSk7CisgICAgdGhyb3dU
eXBlRXJyb3IoJnN0YXRlLCBTdHJpbmc6OmZvcm1hdCgiJXUgaXMgbm90IGEgdmFsaWQgZGVjaXNp
b24gdmFsdWUuIiwgbmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gRGVjaXNpb246OkFsbG93Owog
fQogCi1KU1ZhbHVlIEpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nczo6ZGVjaXNpb24oRXhlY1N0
YXRlKikgY29uc3QKK0pTVmFsdWUgSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzOjpkZWNpc2lv
bihFeGVjU3RhdGUmKSBjb25zdAogewogICAgIHJldHVybiB0b0pTVmFsdWUoaW1wbCgpLmRlY2lz
aW9uKCkpOwogfQogCi12b2lkIEpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nczo6c2V0RGVjaXNp
b24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU01vY2tDb250ZW50Rmls
dGVyU2V0dGluZ3M6OnNldERlY2lzaW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUp
CiB7Ci0gICAgRGVjaXNpb24gZGVjaXNpb24geyB0b0RlY2lzaW9uKGV4ZWMsIHZhbHVlKSB9Owot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBEZWNpc2lvbiBkZWNpc2lvbiB7IHRv
RGVjaXNpb24oc3RhdGUsIHZhbHVlKSB9OworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaW1wbCgpLnNldERlY2lzaW9uKGRlY2lzaW9uKTsKIH0K
IAotSlNWYWx1ZSBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OnVuYmxvY2tSZXF1ZXN0RGVj
aXNpb24oRXhlY1N0YXRlKikgY29uc3QKK0pTVmFsdWUgSlNNb2NrQ29udGVudEZpbHRlclNldHRp
bmdzOjp1bmJsb2NrUmVxdWVzdERlY2lzaW9uKEV4ZWNTdGF0ZSYpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIHRvSlNWYWx1ZShpbXBsKCkudW5ibG9ja1JlcXVlc3REZWNpc2lvbigpKTsKIH0KIAotdm9p
ZCBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OnNldFVuYmxvY2tSZXF1ZXN0RGVjaXNpb24o
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU01vY2tDb250ZW50RmlsdGVy
U2V0dGluZ3M6OnNldFVuYmxvY2tSZXF1ZXN0RGVjaXNpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKIHsKLSAgICBEZWNpc2lvbiB1bmJsb2NrUmVxdWVzdERlY2lzaW9uIHsgdG9E
ZWNpc2lvbihleGVjLCB2YWx1ZSkgfTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgRGVjaXNpb24gdW5ibG9ja1JlcXVlc3REZWNpc2lvbiB7IHRvRGVjaXNpb24oc3RhdGUsIHZh
bHVlKSB9OworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaW1wbCgpLnNldFVuYmxvY2tSZXF1ZXN0RGVjaXNpb24odW5ibG9ja1JlcXVlc3REZWNp
c2lvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRv
ckN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3Rv
bS5jcHAKaW5kZXggMmFmMzU2MzhkMjExZTY2NDcwZjk1NTJlZmFiM2JjZmZiNTE3YTUwOC4uM2Q1
ZmUxMjQ4NjQ4NjM0YTY0YTFkODk3NWM0YWMxYmMzZDFiZDliOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcApAQCAtNDIsNDEgKzQyLDQx
IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1
ZSBKU05hdmlnYXRvcjo6d2Via2l0R2V0VXNlck1lZGlhKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFs
dWUgSlNOYXZpZ2F0b3I6OndlYmtpdEdldFVzZXJNZWRpYShFeGVjU3RhdGUmIHN0YXRlKQogewot
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAzKSB7Ci0gICAgICAgIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAgaWYgKHN0
YXRlLmFyZ3VtZW50Q291bnQoKSA8IDMpIHsKKyAgICAgICAgdGhyb3dWTUVycm9yKCZzdGF0ZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIERpY3Rpb25hcnkgb3B0aW9ucyhleGVjLCBleGVj
LT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIERpY3Rp
b25hcnkgb3B0aW9ucygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDApKTsKKyAgICBpZiAoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYg
KCFvcHRpb25zLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZVR5cGVFcnJvcihleGVjLCAiRmlyc3QgYXJndW1lbnQgb2Ygd2Via2l0R2V0VXNlck1lZGlhIG11
c3QgYmUgYSB2YWxpZCBEaWN0aW9uYXJ5IikpOworICAgICAgICB0aHJvd1ZNRXJyb3IoJnN0YXRl
LCBjcmVhdGVUeXBlRXJyb3IoJnN0YXRlLCAiRmlyc3QgYXJndW1lbnQgb2Ygd2Via2l0R2V0VXNl
ck1lZGlhIG11c3QgYmUgYSB2YWxpZCBEaWN0aW9uYXJ5IikpOwogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDEpLmlzRnVuY3Rp
b24oKSkgewotICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsICJBcmd1bWVudCAyICgnc3Vj
Y2Vzc0NhbGxiYWNrJykgdG8gTmF2aWdhdG9yLndlYmtpdEdldFVzZXJNZWRpYSBtdXN0IGJlIGEg
ZnVuY3Rpb24iKTsKKyAgICBpZiAoIXN0YXRlLmFyZ3VtZW50KDEpLmlzRnVuY3Rpb24oKSkgewor
ICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgIkFyZ3VtZW50IDIgKCdzdWNjZXNzQ2Fs
bGJhY2snKSB0byBOYXZpZ2F0b3Iud2Via2l0R2V0VXNlck1lZGlhIG11c3QgYmUgYSBmdW5jdGlv
biIpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBpZiAoIWV4
ZWMtPmFyZ3VtZW50KDIpLmlzRnVuY3Rpb24oKSkgewotICAgICAgICB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMsICJBcmd1bWVudCAzICgnZXJyb3JDYWxsYmFjaycpIHRvIE5hdmlnYXRvci53ZWJraXRH
ZXRVc2VyTWVkaWEgbXVzdCBiZSBhIGZ1bmN0aW9uIik7CisgICAgaWYgKCFzdGF0ZS5hcmd1bWVu
dCgyKS5pc0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsICJB
cmd1bWVudCAzICgnZXJyb3JDYWxsYmFjaycpIHRvIE5hdmlnYXRvci53ZWJraXRHZXRVc2VyTWVk
aWEgbXVzdCBiZSBhIGZ1bmN0aW9uIik7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIH0KIAogICAgIGlmICghaW1wbCgpLmZyYW1lKCkpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZz
dGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICB9CiAKICAgICAvLyBXZSBkbyBub3QgbmVlZCB0byBwcm90ZWN0IHRoZSBjb250ZXh0IChp
LmUuIGRvY3VtZW50KSBoZXJlIGFzIFVzZXJNZWRpYVJlcXVlc3QgaXMgb2JzZXJ2aW5nIGNvbnRl
eHQgZGVzdHJ1Y3Rpb24gYW5kIHdpbGwgY2hlY2sgdmFsaWRpdHkgYmVmb3JlIHJlc29sdmluZy9y
ZWplY3RpbmcgcHJvbWlzZS4KICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBpbXBsKCkuZnJhbWUo
KS0+ZG9jdW1lbnQoKTsKIAotICAgIFJlZlB0cjxOYXZpZ2F0b3JVc2VyTWVkaWFTdWNjZXNzQ2Fs
bGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayA9IEpTTmF2aWdhdG9yVXNlck1lZGlhU3VjY2Vzc0NhbGxi
YWNrOjpjcmVhdGUoYXNPYmplY3QoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpLCBnbG9iYWxP
YmplY3QoKSk7CisgICAgUmVmUHRyPE5hdmlnYXRvclVzZXJNZWRpYVN1Y2Nlc3NDYWxsYmFjaz4g
c3VjY2Vzc0NhbGxiYWNrID0gSlNOYXZpZ2F0b3JVc2VyTWVkaWFTdWNjZXNzQ2FsbGJhY2s6OmNy
ZWF0ZShhc09iamVjdChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSksIGdsb2JhbE9iamVjdCgp
KTsKICAgICBhdXRvIHJlc29sdmVDYWxsYmFjayA9IFtzdWNjZXNzQ2FsbGJhY2ssIGRvY3VtZW50
XShjb25zdCBSZWZQdHI8TWVkaWFTdHJlYW0+JiBzdHJlYW0pIG11dGFibGUgewogICAgICAgICBS
ZWZQdHI8TWVkaWFTdHJlYW0+IHByb3RlY3RlZFN0cmVhbSA9IHN0cmVhbTsKICAgICAgICAgZG9j
dW1lbnQtPnBvc3RUYXNrKFtzdWNjZXNzQ2FsbGJhY2ssIHByb3RlY3RlZFN0cmVhbV0oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYpIHsKQEAgLTg0LDcgKzg0LDcgQEAgSlNWYWx1ZSBKU05hdmlnYXRv
cjo6d2Via2l0R2V0VXNlck1lZGlhKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgfSk7CiAgICAg
fTsKIAotICAgIFJlZlB0cjxOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvckNhbGxiYWNrPiBlcnJvckNh
bGxiYWNrID0gSlNOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvckNhbGxiYWNrOjpjcmVhdGUoYXNPYmpl
Y3QoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMikpLCBnbG9iYWxPYmplY3QoKSk7CisgICAgUmVm
UHRyPE5hdmlnYXRvclVzZXJNZWRpYUVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2sgPSBKU05h
dmlnYXRvclVzZXJNZWRpYUVycm9yQ2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudCgyKSksIGdsb2JhbE9iamVjdCgpKTsKICAgICBhdXRvIHJlamVjdENhbGxi
YWNrID0gW2Vycm9yQ2FsbGJhY2ssIGRvY3VtZW50XShjb25zdCBSZWZQdHI8TmF2aWdhdG9yVXNl
ck1lZGlhRXJyb3I+JiBlcnJvcikgbXV0YWJsZSB7CiAgICAgICAgIFJlZlB0cjxOYXZpZ2F0b3JV
c2VyTWVkaWFFcnJvcj4gcHJvdGVjdGVkRXJyb3IgPSBlcnJvcjsKICAgICAgICAgZG9jdW1lbnQt
PnBvc3RUYXNrKFtlcnJvckNhbGxiYWNrLCBwcm90ZWN0ZWRFcnJvcl0oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYpIHsKQEAgLTk0LDcgKzk0LDcgQEAgSlNWYWx1ZSBKU05hdmlnYXRvcjo6d2Via2l0
R2V0VXNlck1lZGlhKEV4ZWNTdGF0ZSogZXhlYykKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwogICAgIFVzZXJNZWRpYVJlcXVlc3Q6OnN0YXJ0KGRvY3VtZW50LCBvcHRpb25zLCBNZWRpYURl
dmljZXM6OlByb21pc2UoV1RGOjptb3ZlKHJlc29sdmVDYWxsYmFjayksIFdURjo6bW92ZShyZWpl
Y3RDYWxsYmFjaykpLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBz
ZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCmluZGV4IGFl
YWMwODdkOWRjZmE1MTEwNzkzZDJmZjJjOWFmYzIzZTEyYjgxNTIuLmRlZWU2NzVhOTI1MTIxMDU0
ZjE3MjMyN2U1MzZhYTRkZjhlNWY3NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNOb2RlQ3VzdG9tLmNwcApAQCAtMTEzLDQzICsxMTMsNDMgQEAgYm9vbCBKU05vZGVPd25lcjo6
aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpKU0NlbGwmIGNlbGwsIHZvaWQqLCBTbG90
VmlzaXQKICAgICByZXR1cm4gaXNSZWFjaGFibGVGcm9tRE9NKGpzTm9kZS5pbXBsKCksIHZpc2l0
b3IpOwogfQogCi1KU1ZhbHVlIEpTTm9kZTo6aW5zZXJ0QmVmb3JlKEV4ZWNTdGF0ZSogZXhlYykK
K0pTVmFsdWUgSlNOb2RlOjppbnNlcnRCZWZvcmUoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBib29sIG9rID0gaW1wbCgpLmluc2VydEJlZm9yZShK
U05vZGU6OnRvV3JhcHBlZChleGVjLT5hcmd1bWVudCgwKSksIEpTTm9kZTo6dG9XcmFwcGVkKGV4
ZWMtPmFyZ3VtZW50KDEpKSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Cisg
ICAgYm9vbCBvayA9IGltcGwoKS5pbnNlcnRCZWZvcmUoSlNOb2RlOjp0b1dyYXBwZWQoc3RhdGUu
YXJndW1lbnQoMCkpLCBKU05vZGU6OnRvV3JhcHBlZChzdGF0ZS5hcmd1bWVudCgxKSksIGVjKTsK
KyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgaWYgKG9rKQotICAgICAgICBy
ZXR1cm4gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgICAgIHJldHVybiBzdGF0ZS5hcmd1bWVudCgw
KTsKICAgICByZXR1cm4ganNOdWxsKCk7CiB9CiAKLUpTVmFsdWUgSlNOb2RlOjpyZXBsYWNlQ2hp
bGQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU05vZGU6OnJlcGxhY2VDaGlsZChFeGVjU3Rh
dGUmIHN0YXRlKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGJvb2wgb2sgPSBp
bXBsKCkucmVwbGFjZUNoaWxkKEpTTm9kZTo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDApKSwg
SlNOb2RlOjp0b1dyYXBwZWQoZXhlYy0+YXJndW1lbnQoMSkpLCBlYyk7Ci0gICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBib29sIG9rID0gaW1wbCgpLnJlcGxhY2VDaGlsZChKU05v
ZGU6OnRvV3JhcHBlZChzdGF0ZS5hcmd1bWVudCgwKSksIEpTTm9kZTo6dG9XcmFwcGVkKHN0YXRl
LmFyZ3VtZW50KDEpKSwgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAg
ICBpZiAob2spCi0gICAgICAgIHJldHVybiBleGVjLT5hcmd1bWVudCgxKTsKKyAgICAgICAgcmV0
dXJuIHN0YXRlLmFyZ3VtZW50KDEpOwogICAgIHJldHVybiBqc051bGwoKTsKIH0KIAotSlNWYWx1
ZSBKU05vZGU6OnJlbW92ZUNoaWxkKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNOb2RlOjpy
ZW1vdmVDaGlsZChFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIGJvb2wgb2sgPSBpbXBsKCkucmVtb3ZlQ2hpbGQoSlNOb2RlOjp0b1dyYXBwZWQoZXhl
Yy0+YXJndW1lbnQoMCkpLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAg
ICBib29sIG9rID0gaW1wbCgpLnJlbW92ZUNoaWxkKEpTTm9kZTo6dG9XcmFwcGVkKHN0YXRlLmFy
Z3VtZW50KDApKSwgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICBp
ZiAob2spCi0gICAgICAgIHJldHVybiBleGVjLT5hcmd1bWVudCgwKTsKKyAgICAgICAgcmV0dXJu
IHN0YXRlLmFyZ3VtZW50KDApOwogICAgIHJldHVybiBqc051bGwoKTsKIH0KIAotSlNWYWx1ZSBK
U05vZGU6OmFwcGVuZENoaWxkKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNOb2RlOjphcHBl
bmRDaGlsZChFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIGJvb2wgb2sgPSBpbXBsKCkuYXBwZW5kQ2hpbGQoSlNOb2RlOjp0b1dyYXBwZWQoZXhlYy0+
YXJndW1lbnQoMCkpLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBi
b29sIG9rID0gaW1wbCgpLmFwcGVuZENoaWxkKEpTTm9kZTo6dG9XcmFwcGVkKHN0YXRlLmFyZ3Vt
ZW50KDApKSwgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICBpZiAo
b2spCi0gICAgICAgIHJldHVybiBleGVjLT5hcmd1bWVudCgwKTsKKyAgICAgICAgcmV0dXJuIHN0
YXRlLmFyZ3VtZW50KDApOwogICAgIHJldHVybiBqc051bGwoKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNPc2NpbGxhdG9yTm9kZUN1c3RvbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09zY2lsbGF0b3JOb2RlQ3VzdG9tLmNwcAppbmRl
eCAwMmMyYWJlMjVlNTc4MTU4NTExM2M2NjVlOWVmODc2NzhmNWNkNjEyLi45OGM4ODE0OWYzOWUy
YjBjYmE4MWQzNTJlNWI5YmRiMjkwNWNiMjk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU09zY2lsbGF0b3JOb2RlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU09zY2lsbGF0b3JOb2RlQ3VzdG9tLmNwcApAQCAtMzcsMjggKzM3LDI4
IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBK
U09zY2lsbGF0b3JOb2RlOjpzZXRUeXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkK
K3ZvaWQgSlNPc2NpbGxhdG9yTm9kZTo6c2V0VHlwZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVl
IHZhbHVlKQogewogICAgIE9zY2lsbGF0b3JOb2RlJiBpbXAgPSBpbXBsKCk7CiAKICNpZiBFTkFC
TEUoTEVHQUNZX1dFQl9BVURJTykKICAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkgewotICAgICAg
ICB1aW50MzJfdCB0eXBlID0gdmFsdWUudG9VSW50MzIoZXhlYyk7CisgICAgICAgIHVpbnQzMl90
IHR5cGUgPSB2YWx1ZS50b1VJbnQzMigmc3RhdGUpOwogICAgICAgICBpZiAoIWltcC5zZXRUeXBl
KHR5cGUpKQotICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVh
dGVUeXBlRXJyb3IoZXhlYywgIklsbGVnYWwgT3NjaWxsYXRvck5vZGUgdHlwZSIpKTsKKyAgICAg
ICAgICAgIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVUeXBlRXJyb3Io
JnN0YXRlLCAiSWxsZWdhbCBPc2NpbGxhdG9yTm9kZSB0eXBlIikpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogI2VuZGlmCiAKICAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICBT
dHJpbmcgdHlwZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICAgICAg
U3RyaW5nIHR5cGUgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwogICAg
ICAgICBpZiAodHlwZSA9PSAic2luZSIgfHwgdHlwZSA9PSAic3F1YXJlIiB8fCB0eXBlID09ICJz
YXd0b290aCIgfHwgdHlwZSA9PSAidHJpYW5nbGUiKSB7CiAgICAgICAgICAgICBpbXAuc2V0VHlw
ZSh0eXBlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAg
ICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAi
SWxsZWdhbCBPc2NpbGxhdG9yTm9kZSB0eXBlIikpOworICAgIHN0YXRlLnZtKCkudGhyb3dFeGNl
cHRpb24oJnN0YXRlLCBjcmVhdGVUeXBlRXJyb3IoJnN0YXRlLCAiSWxsZWdhbCBPc2NpbGxhdG9y
Tm9kZSB0eXBlIikpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Bhbm5lck5vZGVDdXN0b20uY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYW5uZXJOb2RlQ3VzdG9tLmNwcAppbmRleCAwNWFhYjY5
OGNkNTk0ZjNjYTJhM2I4ODJlYzVlMzczN2QxZGYxMWI1Li44NmMwM2VkM2ZiODkyNTlhY2Y5OGNl
MzMyYTY5MjQyODdlZTNiMDFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1Bhbm5lck5vZGVDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTUGFubmVyTm9kZUN1c3RvbS5jcHAKQEAgLTM3LDUyICszNyw1MiBAQCB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNQYW5uZXJOb2RlOjpzZXRQ
YW5uaW5nTW9kZWwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU1Bhbm5l
ck5vZGU6OnNldFBhbm5pbmdNb2RlbChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQog
ewogICAgIFBhbm5lck5vZGUmIGltcCA9IGltcGwoKTsKIAogI2lmIEVOQUJMRShMRUdBQ1lfV0VC
X0FVRElPKQogICAgIGlmICh2YWx1ZS5pc051bWJlcigpKSB7Ci0gICAgICAgIHVpbnQzMl90IG1v
ZGVsID0gdmFsdWUudG9VSW50MzIoZXhlYyk7CisgICAgICAgIHVpbnQzMl90IG1vZGVsID0gdmFs
dWUudG9VSW50MzIoJnN0YXRlKTsKICAgICAgICAgaWYgKCFpbXAuc2V0UGFubmluZ01vZGVsKG1v
ZGVsKSkKLSAgICAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRl
VHlwZUVycm9yKGV4ZWMsICJJbGxlZ2FsIHBhbm5pbmdNb2RlbCIpKTsKKyAgICAgICAgICAgIHN0
YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVUeXBlRXJyb3IoJnN0YXRlLCAi
SWxsZWdhbCBwYW5uaW5nTW9kZWwiKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYK
IAogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIFN0cmluZyBtb2RlbCA9IHZh
bHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICAgICAgU3RyaW5nIG1vZGVsID0g
dmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKICAgICAgICAgaWYgKG1vZGVs
ID09ICJlcXVhbHBvd2VyIiB8fCBtb2RlbCA9PSAiSFJURiIgfHwgbW9kZWwgPT0gInNvdW5kZmll
bGQiKSB7CiAgICAgICAgICAgICBpbXAuc2V0UGFubmluZ01vZGVsKG1vZGVsKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBleGVjLT52bSgpLnRocm93
RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiSWxsZWdhbCBwYW5uaW5nTW9k
ZWwiKSk7CisgICAgc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZVR5cGVF
cnJvcigmc3RhdGUsICJJbGxlZ2FsIHBhbm5pbmdNb2RlbCIpKTsKIH0KIAotdm9pZCBKU1Bhbm5l
ck5vZGU6OnNldERpc3RhbmNlTW9kZWwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQor
dm9pZCBKU1Bhbm5lck5vZGU6OnNldERpc3RhbmNlTW9kZWwoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKIHsKICAgICBQYW5uZXJOb2RlJiBpbXAgPSBpbXBsKCk7CiAKICNpZiBFTkFC
TEUoTEVHQUNZX1dFQl9BVURJTykKICAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkgewotICAgICAg
ICB1aW50MzJfdCBtb2RlbCA9IHZhbHVlLnRvVUludDMyKGV4ZWMpOworICAgICAgICB1aW50MzJf
dCBtb2RlbCA9IHZhbHVlLnRvVUludDMyKCZzdGF0ZSk7CiAgICAgICAgIGlmICghaW1wLnNldERp
c3RhbmNlTW9kZWwobW9kZWwpKQotICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlv
bihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIklsbGVnYWwgZGlzdGFuY2VNb2RlbCIpKTsK
KyAgICAgICAgICAgIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVUeXBl
RXJyb3IoJnN0YXRlLCAiSWxsZWdhbCBkaXN0YW5jZU1vZGVsIikpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogI2VuZGlmCiAKICAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICBT
dHJpbmcgbW9kZWwgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAg
IFN0cmluZyBtb2RlbCA9IHZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CiAg
ICAgICAgIGlmIChtb2RlbCA9PSAibGluZWFyIiB8fCBtb2RlbCA9PSAiaW52ZXJzZSIgfHwgbW9k
ZWwgPT0gImV4cG9uZW50aWFsIikgewogICAgICAgICAgICAgaW1wLnNldERpc3RhbmNlTW9kZWwo
bW9kZWwpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJJ
bGxlZ2FsIGRpc3RhbmNlTW9kZWwiKSk7CisgICAgc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigm
c3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJJbGxlZ2FsIGRpc3RhbmNlTW9kZWwiKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1BvcFN0YXRlRXZlbnRDdXN0b20uY3BwCmluZGV4IDUwMmU0OGJmYWE4ZjNh
ZTkwMzFiOGZhMDRhZjhhMDAyYzNhNTNiYTUuLjU1ZmU5NGJkOWRmZWZlNmQyMGU0MTdjMzI3MmZl
ZjUwOWViNjQzZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9w
U3RhdGVFdmVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQ
b3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcApAQCAtNDAsMTggKzQwLDE4IEBAIHVzaW5nIG5hbWVzcGFj
ZSBKU0M7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIFNhdmUgdGhlIHN0YXRlIHZhbHVlIHRv
IHRoZSBtX3N0YXRlIG1lbWJlciBvZiBhIEpTUG9wU3RhdGVFdmVudCwgYW5kIHJldHVybiBpdCwg
Zm9yIGNvbnZlbmllbmNlLgotc3RhdGljIGNvbnN0IEpTVmFsdWUmIGNhY2hlU3RhdGUoRXhlY1N0
YXRlKiBleGVjLCBKU1BvcFN0YXRlRXZlbnQqIGV2ZW50LCBjb25zdCBKU1ZhbHVlJiBzdGF0ZSkK
K3N0YXRpYyBjb25zdCBKU1ZhbHVlJiBjYWNoZVN0YXRlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTUG9w
U3RhdGVFdmVudCogZXZlbnQsIGNvbnN0IEpTVmFsdWUmIGV2ZW50U3RhdGUpCiB7Ci0gICAgZXZl
bnQtPm1fc3RhdGUuc2V0KGV4ZWMtPnZtKCksIGV2ZW50LCBzdGF0ZSk7Ci0gICAgcmV0dXJuIHN0
YXRlOworICAgIGV2ZW50LT5tX3N0YXRlLnNldChzdGF0ZS52bSgpLCBldmVudCwgZXZlbnRTdGF0
ZSk7CisgICAgcmV0dXJuIGV2ZW50U3RhdGU7CiB9CiAKLUpTVmFsdWUgSlNQb3BTdGF0ZUV2ZW50
OjpzdGF0ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTUG9wU3RhdGVFdmVudDo6
c3RhdGUoRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICAgICBKU1ZhbHVlIGNhY2hlZFZhbHVl
ID0gbV9zdGF0ZS5nZXQoKTsKICAgICBpZiAoIWNhY2hlZFZhbHVlLmlzRW1wdHkoKSkgewogICAg
ICAgICAvLyBXZSBjYW5ub3QgdXNlIGEgY2FjaGVkIG9iamVjdCBpZiB3ZSBhcmUgaW4gYSBkaWZm
ZXJlbnQgd29ybGQgdGhhbiB0aGUgb25lIGl0IHdhcyBjcmVhdGVkIGluLgotICAgICAgICBpZiAo
IWNhY2hlZFZhbHVlLmlzT2JqZWN0KCkgfHwgJndvcmxkRm9yRE9NT2JqZWN0KGNhY2hlZFZhbHVl
LmdldE9iamVjdCgpKSA9PSAmY3VycmVudFdvcmxkKGV4ZWMpKQorICAgICAgICBpZiAoIWNhY2hl
ZFZhbHVlLmlzT2JqZWN0KCkgfHwgJndvcmxkRm9yRE9NT2JqZWN0KGNhY2hlZFZhbHVlLmdldE9i
amVjdCgpKSA9PSAmY3VycmVudFdvcmxkKCZzdGF0ZSkpCiAgICAgICAgICAgICByZXR1cm4gY2Fj
aGVkVmFsdWU7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTYxLDIw
ICs2MSwyMCBAQCBKU1ZhbHVlIEpTUG9wU3RhdGVFdmVudDo6c3RhdGUoRXhlY1N0YXRlKiBleGVj
KSBjb25zdAogICAgIGlmICghZXZlbnQuc3RhdGUoKS5oYXNOb1ZhbHVlKCkpIHsKICAgICAgICAg
Ly8gV2UgbmVlZCB0byBtYWtlIHN1cmUgYSBQb3BTdGF0ZUV2ZW50IGRvZXMgbm90IGxlYWsgb2Jq
ZWN0cyBpbiBpdHMgc3RhdGUgcHJvcGVydHkgYWNyb3NzIGlzb2xhdGVkIERPTSB3b3JsZHMuCiAg
ICAgICAgIC8vIElkZWFsbHksIHdlIHdvdWxkIGNoZWNrIHRoYXQgdGhlIHdvcmxkcyBoYXZlIGRp
ZmZlcmVudCBwcml2aWxlZ2VzIGJ1dCB0aGF0J3Mgbm90IHBvc3NpYmxlIHlldC4KLSAgICAgICAg
SlNWYWx1ZSBzdGF0ZSA9IGV2ZW50LnN0YXRlKCkuanNWYWx1ZSgpOwotICAgICAgICBpZiAoc3Rh
dGUuaXNPYmplY3QoKSAmJiAmd29ybGRGb3JET01PYmplY3Qoc3RhdGUuZ2V0T2JqZWN0KCkpICE9
ICZjdXJyZW50V29ybGQoZXhlYykpIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBldmVudC50cnlTZXJpYWxpemVTdGF0ZShl
eGVjKSkKLSAgICAgICAgICAgICAgICBzdGF0ZSA9IHNlcmlhbGl6ZWRWYWx1ZS0+ZGVzZXJpYWxp
emUoZXhlYywgZ2xvYmFsT2JqZWN0KCksIG51bGxwdHIpOworICAgICAgICBKU1ZhbHVlIGV2ZW50
U3RhdGUgPSBldmVudC5zdGF0ZSgpLmpzVmFsdWUoKTsKKyAgICAgICAgaWYgKGV2ZW50U3RhdGUu
aXNPYmplY3QoKSAmJiAmd29ybGRGb3JET01PYmplY3QoZXZlbnRTdGF0ZS5nZXRPYmplY3QoKSkg
IT0gJmN1cnJlbnRXb3JsZCgmc3RhdGUpKSB7CisgICAgICAgICAgICBpZiAoUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gZXZlbnQudHJ5U2VyaWFsaXplU3Rh
dGUoJnN0YXRlKSkKKyAgICAgICAgICAgICAgICBldmVudFN0YXRlID0gc2VyaWFsaXplZFZhbHVl
LT5kZXNlcmlhbGl6ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBudWxscHRyKTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdGF0ZSA9IGpzTnVsbCgpOworICAgICAgICAgICAg
ICAgIGV2ZW50U3RhdGUgPSBqc051bGwoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
cmV0dXJuIGNhY2hlU3RhdGUoZXhlYywgY29uc3RfY2FzdDxKU1BvcFN0YXRlRXZlbnQqPih0aGlz
KSwgc3RhdGUpOworICAgICAgICByZXR1cm4gY2FjaGVTdGF0ZShzdGF0ZSwgY29uc3RfY2FzdDxK
U1BvcFN0YXRlRXZlbnQqPih0aGlzKSwgZXZlbnRTdGF0ZSk7CiAgICAgfQogICAgIAogICAgIEhp
c3RvcnkqIGhpc3RvcnkgPSBldmVudC5oaXN0b3J5KCk7CiAgICAgaWYgKCFoaXN0b3J5IHx8ICFl
dmVudC5zZXJpYWxpemVkU3RhdGUoKSkKLSAgICAgICAgcmV0dXJuIGNhY2hlU3RhdGUoZXhlYywg
Y29uc3RfY2FzdDxKU1BvcFN0YXRlRXZlbnQqPih0aGlzKSwganNOdWxsKCkpOworICAgICAgICBy
ZXR1cm4gY2FjaGVTdGF0ZShzdGF0ZSwgY29uc3RfY2FzdDxKU1BvcFN0YXRlRXZlbnQqPih0aGlz
KSwganNOdWxsKCkpOwogCiAgICAgLy8gVGhlcmUncyBubyBjYWNoZWQgdmFsdWUgZnJvbSBhIHBy
ZXZpb3VzIGludm9jYXRpb24sIG5vciBhIHN0YXRlIHZhbHVlIHdhcyBwcm92aWRlZCBieSB0aGUK
ICAgICAvLyBldmVudCwgYnV0IHRoZXJlIGlzIGEgaGlzdG9yeSBvYmplY3QsIHNvIGZpcnN0IHdl
IG5lZWQgdG8gc2VlIGlmIHRoZSBzdGF0ZSBvYmplY3QgaGFzIGJlZW4KQEAgLTg2LDEyICs4Niwx
MiBAQCBKU1ZhbHVlIEpTUG9wU3RhdGVFdmVudDo6c3RhdGUoRXhlY1N0YXRlKiBleGVjKSBjb25z
dAogICAgIEpTVmFsdWUgcmVzdWx0OwogCiAgICAgaWYgKGlzU2FtZVN0YXRlKSB7Ci0gICAgICAg
IEpTSGlzdG9yeSoganNIaXN0b3J5ID0ganNDYXN0PEpTSGlzdG9yeSo+KHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0KCksIGhpc3RvcnkpLmFzQ2VsbCgpKTsKLSAgICAgICAgcmVzdWx0ID0ganNIaXN0
b3J5LT5zdGF0ZShleGVjKTsKKyAgICAgICAgSlNIaXN0b3J5KiBqc0hpc3RvcnkgPSBqc0Nhc3Q8
SlNIaXN0b3J5Kj4odG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBoaXN0b3J5KS5hc0NlbGwo
KSk7CisgICAgICAgIHJlc3VsdCA9IGpzSGlzdG9yeS0+c3RhdGUoc3RhdGUpOwogICAgIH0gZWxz
ZQotICAgICAgICByZXN1bHQgPSBldmVudC5zZXJpYWxpemVkU3RhdGUoKS0+ZGVzZXJpYWxpemUo
ZXhlYywgZ2xvYmFsT2JqZWN0KCksIDApOworICAgICAgICByZXN1bHQgPSBldmVudC5zZXJpYWxp
emVkU3RhdGUoKS0+ZGVzZXJpYWxpemUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgMCk7CiAKLSAg
ICByZXR1cm4gY2FjaGVTdGF0ZShleGVjLCBjb25zdF9jYXN0PEpTUG9wU3RhdGVFdmVudCo+KHRo
aXMpLCByZXN1bHQpOworICAgIHJldHVybiBjYWNoZVN0YXRlKHN0YXRlLCBjb25zdF9jYXN0PEpT
UG9wU3RhdGVFdmVudCo+KHRoaXMpLCByZXN1bHQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3Ry
ZWFtQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJl
YW1DdXN0b20uY3BwCmluZGV4IDM0OGQxNmIyZmViZTc5ODdkMmRkNjZmNWNjODY2NWY1YTdjMGVl
NGEuLjljZjA5NmJhYmE2MjA4MDVjMTU1MWRjOWI1ZWJjYmE5ZGNhNGUzMjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1DdXN0b20uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1DdXN0b20uY3Bw
CkBAIC00NywxNiArNDcsMTYgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1KU1ZhbHVlIEpTUmVhZGFibGVTdHJlYW06OnBpcGVUbyhFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTUmVhZGFibGVTdHJlYW06OnBpcGVUbyhFeGVjU3RhdGUmIHN0YXRlKQog
ewotICAgIEpTVmFsdWUgZXJyb3IgPSBjcmVhdGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoInBp
cGVUbyBpcyBub3QgaW1wbGVtZW50ZWQiKSk7Ci0gICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dF
eGNlcHRpb24oZXhlYywgZXJyb3IpOworICAgIEpTVmFsdWUgZXJyb3IgPSBjcmVhdGVFcnJvcigm
c3RhdGUsIEFTQ0lJTGl0ZXJhbCgicGlwZVRvIGlzIG5vdCBpbXBsZW1lbnRlZCIpKTsKKyAgICBy
ZXR1cm4gc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGVycm9yKTsKIH0KIAotSlNW
YWx1ZSBKU1JlYWRhYmxlU3RyZWFtOjpwaXBlVGhyb3VnaChFeGVjU3RhdGUqIGV4ZWMpCitKU1Zh
bHVlIEpTUmVhZGFibGVTdHJlYW06OnBpcGVUaHJvdWdoKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0g
ICAgSlNWYWx1ZSBlcnJvciA9IGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgicGlwZVRo
cm91Z2ggaXMgbm90IGltcGxlbWVudGVkIikpOwotICAgIHJldHVybiBleGVjLT52bSgpLnRocm93
RXhjZXB0aW9uKGV4ZWMsIGVycm9yKTsKKyAgICBKU1ZhbHVlIGVycm9yID0gY3JlYXRlRXJyb3Io
JnN0YXRlLCBBU0NJSUxpdGVyYWwoInBpcGVUaHJvdWdoIGlzIG5vdCBpbXBsZW1lbnRlZCIpKTsK
KyAgICByZXR1cm4gc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGVycm9yKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbVJlYWRlckN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtUmVhZGVyQ3VzdG9tLmNwcAppbmRleCAwNjNh
Y2NiMDc2Yzg2NmQ3YThmZGY2ZTA0ZDQwZmVkMWU0NDFkMDE5Li43NTY0MmYzNWI3ZGE2Y2MzZDhm
MzU1OGI0MmY5NDIzY2I2ZjlhMWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1JlYWRhYmxlU3RyZWFtUmVhZGVyQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtUmVhZGVyQ3VzdG9tLmNwcApAQCAtNDQsMTIg
KzQ0LDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
SlNWYWx1ZSBKU1JlYWRhYmxlU3RyZWFtUmVhZGVyOjpjbG9zZWQoRXhlY1N0YXRlKiBleGVjKSBj
b25zdAorSlNWYWx1ZSBKU1JlYWRhYmxlU3RyZWFtUmVhZGVyOjpjbG9zZWQoRXhlY1N0YXRlJiBz
dGF0ZSkgY29uc3QKIHsKICAgICBpZiAoIW1fY2xvc2VkKSB7Ci0gICAgICAgIEpTUHJvbWlzZURl
ZmVycmVkKiBjbG9zZWRQcm9taXNlID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBn
bG9iYWxPYmplY3QoKSk7Ci0gICAgICAgIGNvbnN0X2Nhc3Q8SlNSZWFkYWJsZVN0cmVhbVJlYWRl
cio+KHRoaXMpLT5tX2Nsb3NlZC5zZXQoZXhlYy0+dm0oKSwgdGhpcywgY2xvc2VkUHJvbWlzZS0+
cHJvbWlzZSgpKTsKLSAgICAgICAgaW1wbCgpLmNsb3NlZChEZWZlcnJlZFdyYXBwZXIoZXhlYywg
Z2xvYmFsT2JqZWN0KCksIGNsb3NlZFByb21pc2UpKTsKKyAgICAgICAgSlNQcm9taXNlRGVmZXJy
ZWQqIGNsb3NlZFByb21pc2UgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xv
YmFsT2JqZWN0KCkpOworICAgICAgICBjb25zdF9jYXN0PEpTUmVhZGFibGVTdHJlYW1SZWFkZXIq
Pih0aGlzKS0+bV9jbG9zZWQuc2V0KHN0YXRlLnZtKCksIHRoaXMsIGNsb3NlZFByb21pc2UtPnBy
b21pc2UoKSk7CisgICAgICAgIGltcGwoKS5jbG9zZWQoRGVmZXJyZWRXcmFwcGVyKCZzdGF0ZSwg
Z2xvYmFsT2JqZWN0KCksIGNsb3NlZFByb21pc2UpKTsKICAgICB9CiAgICAgcmV0dXJuIG1fY2xv
c2VkLmdldCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNT
UUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAKaW5kZXggOGM5ZWI4ZjljMTlmOTBhMDBh
MzZkZjUzNWY5OTNiYWM3YTEzZWJlYi4uNDlhMGVmZGM0NTg1Y2QyNWQxZDJlNDVhYzEzODczNDMz
Zjk1MmE0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxSZXN1
bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwCkBAIC0zOSwyMCArMzksMjAgQEAgdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTU1FMUmVz
dWx0U2V0Um93TGlzdDo6aXRlbShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTU1FMUmVzdWx0
U2V0Um93TGlzdDo6aXRlbShFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIGJvb2wgaW5kZXhPazsK
LSAgICBpbnQgaW5kZXggPSBmaW5pdGVJbnQzMlZhbHVlKGV4ZWMtPmFyZ3VtZW50KDApLCBleGVj
LCBpbmRleE9rKTsKKyAgICBpbnQgaW5kZXggPSBmaW5pdGVJbnQzMlZhbHVlKHN0YXRlLmFyZ3Vt
ZW50KDApLCAmc3RhdGUsIGluZGV4T2spOwogICAgIGlmICghaW5kZXhPaykgewotICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOworICAgICAgICBzZXRET01F
eGNlcHRpb24oJnN0YXRlLCBUWVBFX01JU01BVENIX0VSUik7CiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIH0KICAgICBpZiAoaW5kZXggPCAwIHx8ICh1bnNpZ25lZClpbmRleCA+
PSBtX2ltcGwtPmxlbmd0aCgpKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBJTkRF
WF9TSVpFX0VSUik7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIElOREVYX1NJWkVf
RVJSKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgSlNPYmpl
Y3QqIG9iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOworICAgIEpTT2JqZWN0KiBv
YmplY3QgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwogCiAgICAgdW5zaWduZWQgbnVt
Q29sdW1ucyA9IG1faW1wbC0+Y29sdW1uTmFtZXMoKS5zaXplKCk7CiAgICAgdW5zaWduZWQgdmFs
dWVzSW5kZXggPSBpbmRleCAqIG51bUNvbHVtbnM7CkBAIC02MSwyMCArNjEsMjAgQEAgSlNWYWx1
ZSBKU1NRTFJlc3VsdFNldFJvd0xpc3Q6Oml0ZW0oRXhlY1N0YXRlKiBleGVjKQogICAgICAgICBK
U1ZhbHVlIGpzVmFsdWU7CiAKICAgICAgICAgc3dpdGNoICh2YWx1ZS50eXBlKCkpIHsKLSAgICAg
ICAgICAgIGNhc2UgU1FMVmFsdWU6OlN0cmluZ1ZhbHVlOgotICAgICAgICAgICAgICBqc1ZhbHVl
ID0ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgdmFsdWUuc3RyaW5nKCkpOwotICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBjYXNlIFNRTFZhbHVlOjpOdWxsVmFsdWU6Ci0gICAgICAgICAg
ICAgIGpzVmFsdWUgPSBqc051bGwoKTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
Y2FzZSBTUUxWYWx1ZTo6TnVtYmVyVmFsdWU6Ci0gICAgICAgICAgICAgIGpzVmFsdWUgPSBqc051
bWJlcih2YWx1ZS5udW1iZXIoKSk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNl
IFNRTFZhbHVlOjpTdHJpbmdWYWx1ZToKKyAgICAgICAgICAgIGpzVmFsdWUgPSBqc1N0cmluZ1dp
dGhDYWNoZSgmc3RhdGUsIHZhbHVlLnN0cmluZygpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFNRTFZhbHVlOjpOdWxsVmFsdWU6CisgICAgICAgICAgICBqc1ZhbHVlID0ganNO
dWxsKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTUUxWYWx1ZTo6TnVtYmVy
VmFsdWU6CisgICAgICAgICAgICBqc1ZhbHVlID0ganNOdW1iZXIodmFsdWUubnVtYmVyKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCi0gICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KGV4
ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgbV9pbXBsLT5jb2x1bW5OYW1l
cygpW2ldKSwganNWYWx1ZSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgb2JqZWN0
LT5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsIG1f
aW1wbC0+Y29sdW1uTmFtZXMoKVtpXSksIGpzVmFsdWUsIERvbnREZWxldGUgfCBSZWFkT25seSk7
CiAgICAgfQogCiAgICAgcmV0dXJuIG9iamVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAKaW5kZXggMjUyNzA4MGEzNGQ5
MmViNWUzNTAyYjg0NGEzZmNlZDYxODNkMWQ0NS4uM2M3MzRhNTA5ZGZiZjgxMWZmMjU1NWZiZDhk
MjgwYWEwOTc4ZjQ0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNT
UUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAKQEAgLTQxLDM2ICs0MSwzNiBAQCB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNTUUxUcmFuc2Fj
dGlvbjo6ZXhlY3V0ZVNxbChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rp
b246OmV4ZWN1dGVTcWwoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoIWV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSkgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgU1lOVEFYX0VSUik7
CisgICAgaWYgKCFzdGF0ZS5hcmd1bWVudENvdW50KCkpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKCZzdGF0ZSwgU1lOVEFYX0VSUik7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIH0KIAotICAgIFN0cmluZyBzcWxTdGF0ZW1lbnQgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIFN0cmluZyBzcWxTdGF0ZW1lbnQgPSBzdGF0ZS5hcmd1bWVudCgwKS50b1N0cmluZygmc3Rh
dGUpLT52YWx1ZSgmc3RhdGUpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAvLyBOb3cgYXNzZW1ibGUgdGhlIGxpc3Qg
b2YgU1FMIGFyZ3VtZW50cwogICAgIFZlY3RvcjxTUUxWYWx1ZT4gc3FsVmFsdWVzOwotICAgIGlm
ICghZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICBKU09i
amVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMSkuZ2V0T2JqZWN0KCk7CisgICAgaWYgKCFz
dGF0ZS5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBzdGF0ZS5hcmd1bWVudCgxKS5nZXRPYmplY3QoKTsKICAgICAgICAgaWYgKCFv
YmplY3QpIHsKLSAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENI
X0VSUik7CisgICAgICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBUWVBFX01JU01BVENI
X0VSUik7CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgfQogCi0g
ICAgICAgIEpTVmFsdWUgbGVuZ3RoVmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubGVuZ3RoKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICBKU1ZhbHVlIGxlbmd0aFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBzdGF0ZS5w
cm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKKyAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIHVuc2lnbmVkIGxl
bmd0aCA9IGxlbmd0aFZhbHVlLnRvVUludDMyKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGxlbmd0aFZhbHVlLnRvVUlu
dDMyKCZzdGF0ZSk7CisgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDAg
OyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3Qt
PmdldChleGVjLCBpKTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIGkpOworICAgICAg
ICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCiAgICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKQEAgLTc5LDE4ICs3OSwxOCBAQCBKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVT
cWwoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAgICAgIHNxbFZhbHVlcy5hcHBlbmQodmFs
dWUuYXNOdW1iZXIoKSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBD
b252ZXJ0IHRoZSBhcmd1bWVudCB0byBhIHN0cmluZyBhbmQgYXBwZW5kIGl0Ci0gICAgICAgICAg
ICAgICAgc3FsVmFsdWVzLmFwcGVuZCh2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykp
OwotICAgICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAg
ICAgICBzcWxWYWx1ZXMuYXBwZW5kKHZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0
ZSkpOworICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9CiAKICAgICBSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNrOwot
ICAgIGlmICghZXhlYy0+YXJndW1lbnQoMikuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAg
ICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMikuZ2V0T2JqZWN0KCk7CisgICAg
aWYgKCFzdGF0ZS5hcmd1bWVudCgyKS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBzdGF0ZS5hcmd1bWVudCgyKS5nZXRPYmplY3QoKTsKICAgICAgICAg
aWYgKCFvYmplY3QpIHsKLSAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01J
U01BVENIX0VSUik7CisgICAgICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBUWVBFX01J
U01BVENIX0VSUik7CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAg
fQogCkBAIC05OCwxMCArOTgsMTAgQEAgSlNWYWx1ZSBKU1NRTFRyYW5zYWN0aW9uOjpleGVjdXRl
U3FsKEV4ZWNTdGF0ZSogZXhlYykKICAgICB9CiAKICAgICBSZWZQdHI8U1FMU3RhdGVtZW50RXJy
b3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjazsKLSAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDMpLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFy
Z3VtZW50KDMpLmdldE9iamVjdCgpOworICAgIGlmICghc3RhdGUuYXJndW1lbnQoMykuaXNVbmRl
ZmluZWRPck51bGwoKSkgeworICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gc3RhdGUuYXJndW1l
bnQoMykuZ2V0T2JqZWN0KCk7CiAgICAgICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOworICAgICAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKCZzdGF0ZSwgVFlQRV9NSVNNQVRDSF9FUlIpOwogICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KIApAQCAtMTEwLDcgKzExMCw3IEBAIEpTVmFs
dWUgSlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNxbChFeGVjU3RhdGUqIGV4ZWMpCiAKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBtX2ltcGwtPmV4ZWN1dGVTUUwoc3FsU3RhdGVtZW50
LCBzcWxWYWx1ZXMsIGNhbGxiYWNrLnJlbGVhc2UoKSwgZXJyb3JDYWxsYmFjay5yZWxlYXNlKCks
IGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHNldERPTUV4Y2VwdGlv
bigmc3RhdGUsIGVjKTsKIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdMZW5ndGhDdXN0b20uY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdMZW5ndGhDdXN0b20uY3BwCmluZGV4IDE1YzUw
ZTViYWJiYjNhZWY0ZjkzMzlkMDBhOTA4MTkwOWIxOWJmOTMuLmI2ZjBjZjgzNjE1ZjcxZTY1NTg4
Y2UzZGUzZmNiYmFkZDE1YjZlZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1NWR0xlbmd0aEN1c3RvbS5jcHAKQEAgLTMxLDI5ICszMSwyOSBAQCB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNTVkdMZW5ndGg6OnZh
bHVlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgSlNTVkdMZW5ndGg6OnZhbHVlKEV4
ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0CiB7CiAgICAgU1ZHTGVuZ3RoJiBwb2RJbXAgPSBpbXBsKCku
cHJvcGVydHlSZWZlcmVuY2UoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTVkdM
ZW5ndGhDb250ZXh0IGxlbmd0aENvbnRleHQoaW1wbCgpLmNvbnRleHRFbGVtZW50KCkpOwogICAg
IGZsb2F0IHZhbHVlID0gcG9kSW1wLnZhbHVlKGxlbmd0aENvbnRleHQsIGVjKTsKICAgICBpZiAo
ZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgc2V0RE9N
RXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICB9CiAKICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOwogfQogCi12b2lkIEpTU1ZHTGVuZ3Ro
OjpzZXRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit2b2lkIEpTU1ZHTGVu
Z3RoOjpzZXRWYWx1ZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGlm
IChpbXBsKCkuaXNSZWFkT25seSgpKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBO
T19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIpOworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0
YXRlLCBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgaWYgKCF2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICF2YWx1ZS5pc051bWJl
cigpICYmICF2YWx1ZS5pc0Jvb2xlYW4oKSkgewotICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMpOworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTYxLDM2ICs2MSwzNiBAQCB2b2lkIEpTU1ZHTGVuZ3RoOjpzZXRWYWx1ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKICAgICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0aENvbnRleHQoaW1wbCgpLmNvbnRleHRFbGVt
ZW50KCkpOwotICAgIHBvZEltcC5zZXRWYWx1ZSh2YWx1ZS50b0Zsb2F0KGV4ZWMpLCBsZW5ndGhD
b250ZXh0LCBlYyk7CisgICAgcG9kSW1wLnNldFZhbHVlKHZhbHVlLnRvRmxvYXQoJnN0YXRlKSwg
bGVuZ3RoQ29udGV4dCwgZWMpOwogICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpOworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBpbXBsKCkuY29tbWl0Q2hhbmdlKCk7CiB9CiAKLUpT
VmFsdWUgSlNTVkdMZW5ndGg6OmNvbnZlcnRUb1NwZWNpZmllZFVuaXRzKEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUgSlNTVkdMZW5ndGg6OmNvbnZlcnRUb1NwZWNpZmllZFVuaXRzKEV4ZWNTdGF0
ZSYgc3RhdGUpCiB7CiAgICAgaWYgKGltcGwoKS5pc1JlYWRPbmx5KCkpIHsKLSAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUik7CisgICAgICAg
IHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUik7CiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIFNWR0xlbmd0aCYgcG9k
SW1wID0gaW1wbCgpLnByb3BlcnR5UmVmZXJlbmNlKCk7CiAKLSAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24o
ZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlmIChzdGF0
ZS5hcmd1bWVudENvdW50KCkgPCAxKQorICAgICAgICByZXR1cm4gc3RhdGUudm0oKS50aHJvd0V4
Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwog
Ci0gICAgdW5zaWduZWQgc2hvcnQgdW5pdFR5cGUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgw
KS50b1VJbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgdW5z
aWduZWQgc2hvcnQgdW5pdFR5cGUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b1VJbnQz
Migmc3RhdGUpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTVkdMZW5n
dGhDb250ZXh0IGxlbmd0aENvbnRleHQoaW1wbCgpLmNvbnRleHRFbGVtZW50KCkpOwogICAgIHBv
ZEltcC5jb252ZXJ0VG9TcGVjaWZpZWRVbml0cyh1bml0VHlwZSwgbGVuZ3RoQ29udGV4dCwgZWMp
OwogICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAg
ICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNTdWJ0bGVDcnlwdG9DdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNT
dWJ0bGVDcnlwdG9DdXN0b20uY3BwCmluZGV4IGQ4YzdmZjE1Nzg3M2Q3NWZkNzMzNzQ2ZGEzOWUz
ODliMTdmYjZkODguLjY4ZTZkNTY4MTk3MTAwNWQ1NGE3YzU4MGQ4MGUwYjI5NmQxYjVkYTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3VidGxlQ3J5cHRvQ3VzdG9t
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N1YnRsZUNyeXB0b0N1c3Rv
bS5jcHAKQEAgLTYxLDI0ICs2MSwyNCBAQCBlbnVtIGNsYXNzIENyeXB0b0tleUZvcm1hdCB7CiAg
ICAgSldLCiB9OwogCi1zdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobT4gY3Jl
YXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQor
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG0+IGNyZWF0ZUFsZ29yaXRobUZy
b21KU1ZhbHVlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG1JZGVudGlmaWVyOwotICAgIGlmICghSlNDcnlw
dG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpnZXRBbGdvcml0aG1JZGVudGlmaWVyKGV4ZWMsIHZhbHVl
LCBhbGdvcml0aG1JZGVudGlmaWVyKSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpOworICAgIGlmICghSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpnZXRBbGdvcml0
aG1JZGVudGlmaWVyKCZzdGF0ZSwgdmFsdWUsIGFsZ29yaXRobUlkZW50aWZpZXIpKSB7CisgICAg
ICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAogICAgIGF1dG8gcmVzdWx0ID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNp
bmdsZXRvbigpLmNyZWF0ZShhbGdvcml0aG1JZGVudGlmaWVyKTsKICAgICBpZiAoIXJlc3VsdCkK
LSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXN0YXRpYyBib29sIGNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgQ3J5cHRvS2V5Rm9ybWF0JiByZXN1bHQpCitz
dGF0aWMgYm9vbCBjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlLCBDcnlwdG9LZXlGb3JtYXQmIHJlc3VsdCkKIHsKLSAgICBTdHJpbmcga2V5
Rm9ybWF0U3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBTdHJpbmcga2V5Rm9ybWF0U3RyaW5nID0gdmFs
dWUudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoa2V5Rm9ybWF0U3RyaW5n
ID09ICJyYXciKQogICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlGb3JtYXQ6OlJhdzsKQEAgLTg5
LDE2ICs4OSwxNiBAQCBzdGF0aWMgYm9vbCBjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIENyeXB0b0tleQogICAgIGVsc2UgaWYgKGtleUZv
cm1hdFN0cmluZyA9PSAiandrIikKICAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5Rm9ybWF0OjpK
V0s7CiAgICAgZWxzZSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsICJVbmtub3duIGtl
eSBmb3JtYXQiKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCAiVW5rbm93biBrZXkg
Zm9ybWF0Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXN0YXRpYyBib29sIGNyeXB0b0tleVVzYWdlc0Zyb21KU1ZhbHVlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSB2YWx1ZSwgQ3J5cHRvS2V5VXNhZ2UmIHJlc3VsdCkKK3N0YXRpYyBib29s
IGNyeXB0b0tleVVzYWdlc0Zyb21KU1ZhbHVlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFs
dWUsIENyeXB0b0tleVVzYWdlJiByZXN1bHQpCiB7CiAgICAgaWYgKCFpc0pTQXJyYXkodmFsdWUp
KSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgICAgICB0aHJvd1R5cGVFcnJv
cigmc3RhdGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xMDYsOSArMTA2
LDkgQEAgc3RhdGljIGJvb2wgY3J5cHRvS2V5VXNhZ2VzRnJvbUpTVmFsdWUoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHZhbHVlLCBDcnlwdG9LZXkKIAogICAgIEpTQXJyYXkqIGFycmF5ID0gYXNB
cnJheSh2YWx1ZSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheS0+bGVuZ3RoKCk7
ICsraSkgewotICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBhcnJheS0+Z2V0SW5kZXgoZXhlYywg
aSk7Ci0gICAgICAgIFN0cmluZyB1c2FnZVN0cmluZyA9IGVsZW1lbnQudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IEpTVmFsdWUgZWxlbWVudCA9IGFycmF5LT5nZXRJbmRleCgmc3RhdGUsIGkpOworICAgICAgICBT
dHJpbmcgdXNhZ2VTdHJpbmcgPSBlbGVtZW50LnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0
ZSk7CisgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgaWYgKHVzYWdlU3RyaW5nID09ICJlbmNyeXB0IikKICAgICAgICAg
ICAgIHJlc3VsdCB8PSBDcnlwdG9LZXlVc2FnZUVuY3J5cHQ7CkBAIC0xMzAsNDIgKzEzMCw0MiBA
QCBzdGF0aWMgYm9vbCBjcnlwdG9LZXlVc2FnZXNGcm9tSlNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgdmFsdWUsIENyeXB0b0tleQogICAgIHJldHVybiB0cnVlOwogfQogCi1KU1ZhbHVl
IEpTU3VidGxlQ3J5cHRvOjplbmNyeXB0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNTdWJ0
bGVDcnlwdG86OmVuY3J5cHQoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpIDwgMykKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRp
b24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlmIChz
dGF0ZS5hcmd1bWVudENvdW50KCkgPCAzKQorICAgICAgICByZXR1cm4gc3RhdGUudm0oKS50aHJv
d0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkp
OwogCi0gICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShleGVj
LCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBhbGdvcml0aG0gPSBjcmVh
dGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkp
OwogICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRp
b24oKSk7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5
cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckVuY3J5cHQoZXhlYywg
YWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAg
ICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBh
cmFtZXRlcnNGb3JFbmNyeXB0KCZzdGF0ZSwgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIHN0YXRl
LnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBpZiAoIXBhcmFtZXRlcnMpIHsKLSAgICAgICAg
QVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAg
UmVmUHRyPENyeXB0b0tleT4ga2V5ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBlZChleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgxKSk7CisgICAgUmVmUHRyPENyeXB0b0tleT4ga2V5ID0gSlNDcnlwdG9L
ZXk6OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSk7CiAgICAgaWYgKCFrZXkp
Ci0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKCZzdGF0ZSk7CiAKICAgICBpZiAoIWtleS0+YWxsb3dzKENyeXB0b0tleVVz
YWdlRW5jcnlwdCkpIHsKICAgICAgICAgbV9pbXBsLT5kb2N1bWVudCgpLT5hZGRDb25zb2xlTWVz
c2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgQVNDSUlMaXRlcmFs
KCJLZXkgdXNhZ2VzIGRvIG5vdCBpbmNsdWRlICdlbmNyeXB0JyIpKTsKLSAgICAgICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIpOwogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICB9CiAKICAgICBDcnlwdG9PcGVyYXRpb25EYXRhIGRhdGE7Ci0gICAgaWYgKCFj
cnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoMiksIGRhdGEpKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7Cisg
ICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudCgyKSwgZGF0YSkpIHsKKyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgCi0g
ICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVk
OjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KCkpOwotICAgIERlZmVycmVkV3JhcHBlciB3cmFw
cGVyKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOworICAgIEpTUHJvbWlz
ZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZz
dGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOworICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVyKCZzdGF0
ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CiAgICAgYXV0byBzdWNjZXNzQ2Fs
bGJhY2sgPSBbd3JhcHBlcl0oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiByZXN1bHQpIG11dGFibGUg
ewogICAgICAgICB3cmFwcGVyLnJlc29sdmUocmVzdWx0KTsKICAgICB9OwpAQCAtMTc2LDQ4ICsx
NzYsNDggQEAgSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6ZW5jcnlwdChFeGVjU3RhdGUqIGV4ZWMp
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYWxnb3JpdGhtLT5lbmNyeXB0KCpwYXJh
bWV0ZXJzLCAqa2V5LCBkYXRhLCBXVEY6Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGOjptb3Zl
KGZhaWx1cmVDYWxsYmFjayksIGVjKTsKICAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICByZXR1cm4gcHJvbWlz
ZURlZmVycmVkLT5wcm9taXNlKCk7CiB9CiAKLUpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OmRlY3J5
cHQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6ZGVjcnlwdChFeGVj
U3RhdGUmIHN0YXRlKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAzKQotICAg
ICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA8
IDMpCisgICAgICAgIHJldHVybiBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKLSAgICBhdXRvIGFsZ29yaXRo
bSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKKyAgICBhdXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVl
KHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgaWYgKCFhbGdvcml0aG0p
IHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJU
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgfQogCi0gICAgYXV0byBwYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5
OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRGVjcnlwdChleGVjLCBhbGdvcml0aG0tPmlkZW50aWZpZXIo
KSwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpT
Q3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckRlY3J5cHQoJnN0
YXRlLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkp
OwogICAgIGlmICghcGFyYW1ldGVycykgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpOworICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBSZWZQdHI8Q3J5cHRvS2V5PiBrZXkg
PSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAg
ICBSZWZQdHI8Q3J5cHRvS2V5PiBrZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKHN0YXRlLnVu
Y2hlY2tlZEFyZ3VtZW50KDEpKTsKICAgICBpZiAoIWtleSkKLSAgICAgICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsK
IAogICAgIGlmICgha2V5LT5hbGxvd3MoQ3J5cHRvS2V5VXNhZ2VEZWNyeXB0KSkgewogICAgICAg
ICBtX2ltcGwtPmRvY3VtZW50KCktPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpT
LCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBBU0NJSUxpdGVyYWwoIktleSB1c2FnZXMgZG8gbm90IGlu
Y2x1ZGUgJ2RlY3J5cHQnIikpOwotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NV
UFBPUlRFRF9FUlIpOworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9S
VEVEX0VSUik7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIENy
eXB0b09wZXJhdGlvbkRhdGEgZGF0YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9t
SlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKSwgZGF0YSkpIHsKLSAgICAg
ICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBpZiAoIWNyeXB0b09wZXJhdGlv
bkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRh
KSkgeworICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlz
ZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3Qo
KSk7Ci0gICAgRGVmZXJyZWRXcmFwcGVyIHdyYXBwZXIoZXhlYywgZ2xvYmFsT2JqZWN0KCksIHBy
b21pc2VEZWZlcnJlZCk7CisgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9
IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSk7CisgICAg
RGVmZXJyZWRXcmFwcGVyIHdyYXBwZXIoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURl
ZmVycmVkKTsKICAgICBhdXRvIHN1Y2Nlc3NDYWxsYmFjayA9IFt3cmFwcGVyXShjb25zdCBWZWN0
b3I8dWludDhfdD4mIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgIHdyYXBwZXIucmVzb2x2ZShy
ZXN1bHQpOwogICAgIH07CkBAIC0yMjgsNDggKzIyOCw0OCBAQCBKU1ZhbHVlIEpTU3VidGxlQ3J5
cHRvOjpkZWNyeXB0KEV4ZWNTdGF0ZSogZXhlYykKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICBhbGdvcml0aG0tPmRlY3J5cHQoKnBhcmFtZXRlcnMsICprZXksIGRhdGEsIFdURjo6bW92
ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEY6Om1vdmUoZmFpbHVyZUNhbGxiYWNrKSwgZWMpOwogICAg
IGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBz
ZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgIH0KIAogICAgIHJldHVybiBwcm9taXNlRGVmZXJyZWQtPnByb21pc2UoKTsKIH0KIAot
SlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6c2lnbihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
U3VidGxlQ3J5cHRvOjpzaWduKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA8IDMpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0
aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAo
c3RhdGUuYXJndW1lbnRDb3VudCgpIDwgMykKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhy
b3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUp
KTsKIAotICAgIGF1dG8gYWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoZXhl
YywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYWxnb3JpdGhtID0gY3Jl
YXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDAp
KTsKICAgICBpZiAoIWFsZ29yaXRobSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpOworICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU0Ny
eXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JTaWduKGV4ZWMsIGFs
Z29yaXRobS0+aWRlbnRpZmllcigpLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAg
YXV0byBwYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJh
bWV0ZXJzRm9yU2lnbigmc3RhdGUsIGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgaWYgKCFwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VS
VChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRp
b24oKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIFJlZlB0
cjxDcnlwdG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMSkpOworICAgIFJlZlB0cjxDcnlwdG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5Ojp0
b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOwogICAgIGlmICgha2V5KQotICAg
ICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiB0aHJvd1R5
cGVFcnJvcigmc3RhdGUpOwogCiAgICAgaWYgKCFrZXktPmFsbG93cyhDcnlwdG9LZXlVc2FnZVNp
Z24pKSB7CiAgICAgICAgIG1faW1wbC0+ZG9jdW1lbnQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVz
c2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiS2V5IHVz
YWdlcyBkbyBub3QgaW5jbHVkZSAnc2lnbiciKSk7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUs
IE5PVF9TVVBQT1JURURfRVJSKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
fQogCiAgICAgQ3J5cHRvT3BlcmF0aW9uRGF0YSBkYXRhOwotICAgIGlmICghY3J5cHRvT3BlcmF0
aW9uRGF0YUZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRh
KSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIGlmICghY3J5
cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1l
bnQoMiksIGRhdGEpKSB7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIEpTUHJvbWlzZURlZmVy
cmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGds
b2JhbE9iamVjdCgpKTsKLSAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcihleGVjLCBnbG9iYWxP
YmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKKyAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlz
ZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVj
dCgpKTsKKyAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcigmc3RhdGUsIGdsb2JhbE9iamVjdCgp
LCBwcm9taXNlRGVmZXJyZWQpOwogICAgIGF1dG8gc3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJd
KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAgd3JhcHBl
ci5yZXNvbHZlKHJlc3VsdCk7CiAgICAgfTsKQEAgLTI4MCw1NCArMjgwLDU0IEBAIEpTVmFsdWUg
SlNTdWJ0bGVDcnlwdG86OnNpZ24oRXhlY1N0YXRlKiBleGVjKQogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwogICAgIGFsZ29yaXRobS0+c2lnbigqcGFyYW1ldGVycywgKmtleSwgZGF0YSwgV1RG
Ojptb3ZlKHN1Y2Nlc3NDYWxsYmFjayksIFdURjo6bW92ZShmYWlsdXJlQ2FsbGJhY2spLCBlYyk7
CiAgICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAg
ICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHByb21pc2VEZWZlcnJlZC0+cHJvbWlzZSgpOwog
fQogCi1KU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjp2ZXJpZnkoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU1N1YnRsZUNyeXB0bzo6dmVyaWZ5KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDQpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRo
cm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsK
KyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpIDwgNCkKKyAgICAgICAgcmV0dXJuIHN0YXRl
LnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cigmc3RhdGUpKTsKIAotICAgIGF1dG8gYWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpT
VmFsdWUoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gYWxnb3Jp
dGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFy
Z3VtZW50KDApKTsKICAgICBpZiAoIWFsZ29yaXRobSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBhdXRvIHBhcmFtZXRl
cnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JWZXJp
ZnkoZXhlYywgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDApKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6
OmNyZWF0ZVBhcmFtZXRlcnNGb3JWZXJpZnkoJnN0YXRlLCBhbGdvcml0aG0tPmlkZW50aWZpZXIo
KSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmICghcGFyYW1ldGVycykgewot
ICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9
CiAKLSAgICBSZWZQdHI8Q3J5cHRvS2V5PiBrZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICBSZWZQdHI8Q3J5cHRvS2V5PiBrZXkgPSBK
U0NyeXB0b0tleTo6dG9XcmFwcGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKICAgICBp
ZiAoIWtleSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgICAgICBy
ZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKIAogICAgIGlmICgha2V5LT5hbGxvd3MoQ3J5
cHRvS2V5VXNhZ2VWZXJpZnkpKSB7CiAgICAgICAgIG1faW1wbC0+ZG9jdW1lbnQoKS0+YWRkQ29u
c29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIEFTQ0lJ
TGl0ZXJhbCgiS2V5IHVzYWdlcyBkbyBub3QgaW5jbHVkZSAndmVyaWZ5JyIpKTsKLSAgICAgICAg
c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgc2V0RE9N
RXhjZXB0aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIpOwogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICB9CiAKICAgICBDcnlwdG9PcGVyYXRpb25EYXRhIHNpZ25hdHVyZTsK
LSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZShleGVjLCBleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgyKSwgc2lnbmF0dXJlKSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpOworICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZz
dGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMiksIHNpZ25hdHVyZSkpIHsKKyAgICAgICAg
QVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgfQogCiAgICAgQ3J5cHRvT3BlcmF0aW9uRGF0YSBkYXRhOwotICAgIGlmICghY3J5
cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDMpLCBkYXRhKSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAg
IGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoMyksIGRhdGEpKSB7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRp
b24oKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIEpTUHJv
bWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRl
KGV4ZWMsIGdsb2JhbE9iamVjdCgpKTsKLSAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcihleGVj
LCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKKyAgICBKU1Byb21pc2VEZWZlcnJl
ZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGds
b2JhbE9iamVjdCgpKTsKKyAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcigmc3RhdGUsIGdsb2Jh
bE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwogICAgIGF1dG8gc3VjY2Vzc0NhbGxiYWNrID0g
W3dyYXBwZXJdKGJvb2wgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAgd3JhcHBlci5yZXNvbHZl
KHJlc3VsdCk7CiAgICAgfTsKQEAgLTMzOCwzOCArMzM4LDM4IEBAIEpTVmFsdWUgSlNTdWJ0bGVD
cnlwdG86OnZlcmlmeShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CiAgICAgYWxnb3JpdGhtLT52ZXJpZnkoKnBhcmFtZXRlcnMsICprZXksIHNpZ25hdHVyZSwgZGF0
YSwgV1RGOjptb3ZlKHN1Y2Nlc3NDYWxsYmFjayksIFdURjo6bW92ZShmYWlsdXJlQ2FsbGJhY2sp
LCBlYyk7CiAgICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHByb21pc2VEZWZlcnJlZC0+cHJvbWlz
ZSgpOwogfQogCi1KU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjpkaWdlc3QoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6ZGlnZXN0KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0g
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCi0gICAgICAgIHJldHVybiBleGVjLT52
bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4
ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpIDwgMikKKyAgICAgICAgcmV0dXJu
IHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcigmc3RhdGUpKTsKIAotICAgIGF1dG8gYWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGht
RnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8g
YWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hl
Y2tlZEFyZ3VtZW50KDApKTsKICAgICBpZiAoIWFsZ29yaXRobSkgewotICAgICAgICBBU1NFUlQo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBhdXRvIHBh
cmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNG
b3JEaWdlc3QoZXhlYywgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDApKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rp
b25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JEaWdlc3QoJnN0YXRlLCBhbGdvcml0aG0tPmlkZW50
aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmICghcGFyYW1ldGVy
cykgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NF
UlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICB9CiAKICAgICBDcnlwdG9PcGVyYXRpb25EYXRhIGRhdGE7Ci0gICAgaWYgKCFjcnlwdG9P
cGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSks
IGRhdGEpKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgaWYg
KCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRB
cmd1bWVudCgxKSwgZGF0YSkpIHsKKyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgSlNQcm9taXNl
RGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhl
YywgZ2xvYmFsT2JqZWN0KCkpOwotICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVyKGV4ZWMsIGds
b2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOworICAgIEpTUHJvbWlzZURlZmVycmVkKiBw
cm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFs
T2JqZWN0KCkpOworICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVyKCZzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CiAgICAgYXV0byBzdWNjZXNzQ2FsbGJhY2sgPSBbd3Jh
cHBlcl0oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiByZXN1bHQpIG11dGFibGUgewogICAgICAgICB3
cmFwcGVyLnJlc29sdmUocmVzdWx0KTsKICAgICB9OwpAQCAtMzgwLDQ3ICszODAsNDcgQEAgSlNW
YWx1ZSBKU1N1YnRsZUNyeXB0bzo6ZGlnZXN0KEV4ZWNTdGF0ZSogZXhlYykKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICBhbGdvcml0aG0tPmRpZ2VzdCgqcGFyYW1ldGVycywgZGF0YSwg
V1RGOjptb3ZlKHN1Y2Nlc3NDYWxsYmFjayksIFdURjo6bW92ZShmYWlsdXJlQ2FsbGJhY2spLCBl
Yyk7CiAgICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Cisg
ICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHByb21pc2VEZWZlcnJlZC0+cHJvbWlzZSgp
OwogfQogCi1KU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjpnZW5lcmF0ZUtleShFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjpnZW5lcmF0ZUtleShFeGVjU3RhdGUmIHN0YXRl
KQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQotICAgICAgICByZXR1cm4g
ZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihleGVjKSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgICAg
IHJldHVybiBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKLSAgICBhdXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFs
Z29yaXRobUZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAg
ICBhdXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0
ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgaWYgKCFhbGdvcml0aG0pIHsKLSAgICAgICAg
QVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAg
YXV0byBwYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJh
bWV0ZXJzRm9yR2VuZXJhdGVLZXkoZXhlYywgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0Fs
Z29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JHZW5lcmF0ZUtleSgmc3RhdGUs
IGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAg
ICAgaWYgKCFwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24o
KSk7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIGJvb2wgZXh0cmFjdGFibGUgPSBmYWxzZTsK
LSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpIHsKLSAgICAgICAgZXh0cmFjdGFi
bGUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgp
ID49IDIpIHsKKyAgICAgICAgZXh0cmFjdGFibGUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgx
KS50b0Jvb2xlYW4oJnN0YXRlKTsKKyAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgQ3J5cHRvS2V5
VXNhZ2Uga2V5VXNhZ2VzID0gMDsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDMp
IHsKLSAgICAgICAgaWYgKCFjcnlwdG9LZXlVc2FnZXNGcm9tSlNWYWx1ZShleGVjLCBleGVjLT5h
cmd1bWVudCgyKSwga2V5VXNhZ2VzKSkgewotICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID49IDMpIHsKKyAgICAg
ICAgaWYgKCFjcnlwdG9LZXlVc2FnZXNGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQo
MiksIGtleVVzYWdlcykpIHsKKyAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24o
KSk7CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgfQogICAgIH0K
IAotICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZl
cnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCgpKTsKLSAgICBEZWZlcnJlZFdyYXBwZXIg
d3JhcHBlcihleGVjLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKKyAgICBKU1By
b21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0
ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKKyAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcigm
c3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwogICAgIGF1dG8gc3VjY2Vz
c0NhbGxiYWNrID0gW3dyYXBwZXJdKENyeXB0b0tleSoga2V5LCBDcnlwdG9LZXlQYWlyKiBrZXlQ
YWlyKSBtdXRhYmxlIHsKICAgICAgICAgQVNTRVJUKGtleSB8fCBrZXlQYWlyKTsKICAgICAgICAg
QVNTRVJUKCFrZXkgfHwgIWtleVBhaXIpOwpAQCAtNDM2LDE0ICs0MzYsMTQgQEAgSlNWYWx1ZSBK
U1N1YnRsZUNyeXB0bzo6Z2VuZXJhdGVLZXkoRXhlY1N0YXRlKiBleGVjKQogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwogICAgIGFsZ29yaXRobS0+Z2VuZXJhdGVLZXkoKnBhcmFtZXRlcnMsIGV4
dHJhY3RhYmxlLCBrZXlVc2FnZXMsIFdURjo6bW92ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEY6Om1v
dmUoZmFpbHVyZUNhbGxiYWNrKSwgZWMpOwogICAgIGlmIChlYykgewotICAgICAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIHJldHVybiBwcm9t
aXNlRGVmZXJyZWQtPnByb21pc2UoKTsKIH0KIAotc3RhdGljIHZvaWQgaW1wb3J0S2V5KEV4ZWNT
dGF0ZSogZXhlYywgQ3J5cHRvS2V5Rm9ybWF0IGtleUZvcm1hdCwgQ3J5cHRvT3BlcmF0aW9uRGF0
YSBkYXRhLCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtPiBhbGdvcml0aG0sIHN0ZDo6
dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBwYXJhbWV0ZXJzLCBib29sIGV4
dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSBrZXlVc2FnZXMsIENyeXB0b0FsZ29yaXRobTo6S2V5
Q2FsbGJhY2sgY2FsbGJhY2ssIENyeXB0b0FsZ29yaXRobTo6Vm9pZENhbGxiYWNrIGZhaWx1cmVD
YWxsYmFjaykKK3N0YXRpYyB2b2lkIGltcG9ydEtleShFeGVjU3RhdGUmIHN0YXRlLCBDcnlwdG9L
ZXlGb3JtYXQga2V5Rm9ybWF0LCBDcnlwdG9PcGVyYXRpb25EYXRhIGRhdGEsIHN0ZDo6dW5pcXVl
X3B0cjxDcnlwdG9BbGdvcml0aG0+IGFsZ29yaXRobSwgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0Fs
Z29yaXRobVBhcmFtZXRlcnM+IHBhcmFtZXRlcnMsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tl
eVVzYWdlIGtleVVzYWdlcywgQ3J5cHRvQWxnb3JpdGhtOjpLZXlDYWxsYmFjayBjYWxsYmFjaywg
Q3J5cHRvQWxnb3JpdGhtOjpWb2lkQ2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrKQogewogICAgIHN0
ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlTZXJpYWxpemF0aW9uPiBrZXlTZXJpYWxpemF0aW9uOwog
ICAgIHN3aXRjaCAoa2V5Rm9ybWF0KSB7CkBAIC00NTMsMTAyICs0NTMsMTAyIEBAIHN0YXRpYyB2
b2lkIGltcG9ydEtleShFeGVjU3RhdGUqIGV4ZWMsIENyeXB0b0tleUZvcm1hdCBrZXlGb3JtYXQs
IENyeXB0b09wZXJhdGlvCiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6OkpXSzogewogICAgICAg
ICBTdHJpbmcgandrU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChkYXRhLmZpcnN0LCBkYXRhLnNl
Y29uZCk7CiAgICAgICAgIGlmIChqd2tTdHJpbmcuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHRo
cm93VHlwZUVycm9yKGV4ZWMsICJKV0sgSlNPTiBzZXJpYWxpemF0aW9uIGlzIG5vdCB2YWxpZCBV
VEYtOCIpOworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCAiSldLIEpTT04gc2Vy
aWFsaXphdGlvbiBpcyBub3QgdmFsaWQgVVRGLTgiKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBrZXlTZXJpYWxpemF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxKU0Ny
eXB0b0tleVNlcmlhbGl6YXRpb25KV0s+KGV4ZWMsIGp3a1N0cmluZyk7Ci0gICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAga2V5U2VyaWFsaXphdGlvbiA9IHN0ZDo6bWFr
ZV91bmlxdWU8SlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLPigmc3RhdGUsIGp3a1N0cmluZyk7
CisgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHRocm93VHlwZUVy
cm9yKGV4ZWMsICJVbnN1cHBvcnRlZCBrZXkgZm9ybWF0IGZvciBpbXBvcnQiKTsKKyAgICAgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCAiVW5zdXBwb3J0ZWQga2V5IGZvcm1hdCBmb3IgaW1wb3J0
Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBBU1NFUlQoa2V5U2VyaWFsaXphdGlv
bik7CiAKICAgICBpZiAoIWtleVNlcmlhbGl6YXRpb24tPnJlY29uY2lsZUFsZ29yaXRobShhbGdv
cml0aG0sIHBhcmFtZXRlcnMpKSB7Ci0gICAgICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkp
Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiQWxnb3JpdGhtIHNwZWNpZmllZCBp
biBrZXkgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBvbmUgcGFzc2VkIHRvIGltcG9ydEtleSBhcyBh
cmd1bWVudCIpOworICAgICAgICBpZiAoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCAiQWxnb3JpdGhtIHNwZWNpZmllZCBpbiBrZXkgaXMg
bm90IGNvbXBhdGlibGUgd2l0aCBvbmUgcGFzc2VkIHRvIGltcG9ydEtleSBhcyBhcmd1bWVudCIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
ICghYWxnb3JpdGhtKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsICJOZWl0aGVyIGtl
eSBub3IgZnVuY3Rpb24gYXJndW1lbnQgaGFzIGNyeXB0byBhbGdvcml0aG0gc3BlY2lmaWVkIik7
CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgIk5laXRoZXIga2V5IG5vciBmdW5jdGlv
biBhcmd1bWVudCBoYXMgY3J5cHRvIGFsZ29yaXRobSBzcGVjaWZpZWQiKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBBU1NFUlQocGFyYW1ldGVycyk7CiAKICAgICBrZXlTZXJpYWxpemF0
aW9uLT5yZWNvbmNpbGVFeHRyYWN0YWJsZShleHRyYWN0YWJsZSk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAga2V5U2VyaWFsaXphdGlvbi0+cmVjb25jaWxlVXNhZ2VzKGtleVVzYWdlcyk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBrZXlEYXRhID0ga2V5U2VyaWFsaXph
dGlvbi0+a2V5RGF0YSgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwogICAgIGFsZ29yaXRobS0+aW1wb3J0S2V5KCpwYXJhbWV0ZXJzLCAqa2V5RGF0
YSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgV1RGOjptb3ZlKGNhbGxiYWNrKSwgV1RGOjptb3Zl
KGZhaWx1cmVDYWxsYmFjayksIGVjKTsKICAgICBpZiAoZWMpCi0gICAgICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKIH0K
IAotSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6aW1wb3J0S2V5KEV4ZWNTdGF0ZSogZXhlYykKK0pT
VmFsdWUgSlNTdWJ0bGVDcnlwdG86OmltcG9ydEtleShFeGVjU3RhdGUmIHN0YXRlKQogewotICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAzKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0o
KS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVj
KSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA8IDMpCisgICAgICAgIHJldHVybiBz
dGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IoJnN0YXRlKSk7CiAKICAgICBDcnlwdG9LZXlGb3JtYXQga2V5Rm9ybWF0OwotICAgIGlm
ICghY3J5cHRvS2V5Rm9ybWF0RnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIGtl
eUZvcm1hdCkpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBp
ZiAoIWNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwg
a2V5Rm9ybWF0KSkgeworICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBDcnlwdG9PcGVyYXRpb25E
YXRhIGRhdGE7Ci0gICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoZXhlYywg
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSksIGRhdGEpKSB7Ci0gICAgICAgIEFTU0VSVChleGVj
LT5oYWRFeGNlcHRpb24oKSk7CisgICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFs
dWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSwgZGF0YSkpIHsKKyAgICAgICAg
QVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgfQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobT4gYWxnb3Jp
dGhtOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBwYXJh
bWV0ZXJzOwotICAgIGlmICghZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMikuaXNOdWxsKCkpIHsK
LSAgICAgICAgYWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoZXhlYywgZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMikpOworICAgIGlmICghc3RhdGUudW5jaGVja2VkQXJndW1l
bnQoMikuaXNOdWxsKCkpIHsKKyAgICAgICAgYWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJv
bUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKICAgICAgICAgaWYg
KCFhbGdvcml0aG0pIHsKLSAgICAgICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7
CisgICAgICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KLSAgICAgICAgcGFyYW1ldGVycyA9IEpT
Q3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckltcG9ydEtleShl
eGVjLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMikp
OworICAgICAgICBwYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVh
dGVQYXJhbWV0ZXJzRm9ySW1wb3J0S2V5KCZzdGF0ZSwgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCks
IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKICAgICAgICAgaWYgKCFwYXJhbWV0ZXJzKSB7
Ci0gICAgICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICAgICAg
QVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgYm9vbCBleHRyYWN0YWJsZSA9IGZhbHNl
OwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gNCkgewotICAgICAgICBleHRyYWN0
YWJsZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDMpLnRvQm9vbGVhbihleGVjKTsKLSAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50
KCkgPj0gNCkgeworICAgICAgICBleHRyYWN0YWJsZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50
KDMpLnRvQm9vbGVhbigmc3RhdGUpOworICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBDcnlwdG9L
ZXlVc2FnZSBrZXlVc2FnZXMgPSAwOwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0g
NSkgewotICAgICAgICBpZiAoIWNyeXB0b0tleVVzYWdlc0Zyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMt
PmFyZ3VtZW50KDQpLCBrZXlVc2FnZXMpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPj0gNSkgeworICAg
ICAgICBpZiAoIWNyeXB0b0tleVVzYWdlc0Zyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVu
dCg0KSwga2V5VXNhZ2VzKSkgeworICAgICAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKTsKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICB9CiAgICAg
fQogCi0gICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURl
ZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KCkpOwotICAgIERlZmVycmVkV3JhcHBl
ciB3cmFwcGVyKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOworICAgIEpT
UHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3Jl
YXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOworICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVy
KCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CiAgICAgYXV0byBzdWNj
ZXNzQ2FsbGJhY2sgPSBbd3JhcHBlcl0oQ3J5cHRvS2V5JiByZXN1bHQpIG11dGFibGUgewogICAg
ICAgICB3cmFwcGVyLnJlc29sdmUoJnJlc3VsdCk7CiAgICAgfTsKQEAgLTU1NiwxNyArNTU2LDE3
IEBAIEpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OmltcG9ydEtleShFeGVjU3RhdGUqIGV4ZWMpCiAg
ICAgICAgIHdyYXBwZXIucmVqZWN0KG51bGxwdHIpOwogICAgIH07CiAKLSAgICBXZWJDb3JlOjpp
bXBvcnRLZXkoZXhlYywga2V5Rm9ybWF0LCBkYXRhLCBXVEY6Om1vdmUoYWxnb3JpdGhtKSwgV1RG
Ojptb3ZlKHBhcmFtZXRlcnMpLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCBXVEY6Om1vdmUoc3Vj
Y2Vzc0NhbGxiYWNrKSwgV1RGOjptb3ZlKGZhaWx1cmVDYWxsYmFjaykpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBXZWJDb3JlOjppbXBvcnRLZXkoc3RhdGUsIGtleUZvcm1h
dCwgZGF0YSwgV1RGOjptb3ZlKGFsZ29yaXRobSksIFdURjo6bW92ZShwYXJhbWV0ZXJzKSwgZXh0
cmFjdGFibGUsIGtleVVzYWdlcywgV1RGOjptb3ZlKHN1Y2Nlc3NDYWxsYmFjayksIFdURjo6bW92
ZShmYWlsdXJlQ2FsbGJhY2spKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgcmV0dXJuIHByb21pc2VEZWZlcnJlZC0+
cHJvbWlzZSgpOwogfQogCi1zdGF0aWMgdm9pZCBleHBvcnRLZXkoRXhlY1N0YXRlKiBleGVjLCBD
cnlwdG9LZXlGb3JtYXQga2V5Rm9ybWF0LCBjb25zdCBDcnlwdG9LZXkmIGtleSwgQ3J5cHRvQWxn
b3JpdGhtOjpWZWN0b3JDYWxsYmFjayBjYWxsYmFjaywgQ3J5cHRvQWxnb3JpdGhtOjpWb2lkQ2Fs
bGJhY2sgZmFpbHVyZUNhbGxiYWNrKQorc3RhdGljIHZvaWQgZXhwb3J0S2V5KEV4ZWNTdGF0ZSYg
c3RhdGUsIENyeXB0b0tleUZvcm1hdCBrZXlGb3JtYXQsIGNvbnN0IENyeXB0b0tleSYga2V5LCBD
cnlwdG9BbGdvcml0aG06OlZlY3RvckNhbGxiYWNrIGNhbGxiYWNrLCBDcnlwdG9BbGdvcml0aG06
OlZvaWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2spCiB7CiAgICAgaWYgKCFrZXkuZXh0cmFjdGFi
bGUoKSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiS2V5IGlzIG5vdCBleHRyYWN0
YWJsZSIpOworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsICJLZXkgaXMgbm90IGV4dHJh
Y3RhYmxlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU4MCw4ICs1ODAsOCBAQCBz
dGF0aWMgdm9pZCBleHBvcnRLZXkoRXhlY1N0YXRlKiBleGVjLCBDcnlwdG9LZXlGb3JtYXQga2V5
Rm9ybWF0LCBjb25zdCBDcnlwdG9LZQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBD
cnlwdG9LZXlGb3JtYXQ6OkpXSzogewotICAgICAgICBTdHJpbmcgcmVzdWx0ID0gSlNDcnlwdG9L
ZXlTZXJpYWxpemF0aW9uSldLOjpzZXJpYWxpemUoZXhlYywga2V5KTsKLSAgICAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBTdHJpbmcgcmVzdWx0ID0gSlNDcnlwdG9LZXlT
ZXJpYWxpemF0aW9uSldLOjpzZXJpYWxpemUoJnN0YXRlLCBrZXkpOworICAgICAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIENTdHJpbmcg
dXRmOFN0cmluZyA9IHJlc3VsdC51dGY4KFN0cmljdENvbnZlcnNpb24pOwogICAgICAgICBWZWN0
b3I8dWludDhfdD4gcmVzdWx0QnVmZmVyOwpAQCAtNTkwLDI4ICs1OTAsMjggQEAgc3RhdGljIHZv
aWQgZXhwb3J0S2V5KEV4ZWNTdGF0ZSogZXhlYywgQ3J5cHRvS2V5Rm9ybWF0IGtleUZvcm1hdCwg
Y29uc3QgQ3J5cHRvS2UKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHRocm93VHlwZUVycm9yKGV4ZWMsICJVbnN1cHBvcnRlZCBrZXkgZm9ybWF0IGZvciBleHBv
cnQiKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCAiVW5zdXBwb3J0ZWQga2V5IGZv
cm1hdCBmb3IgZXhwb3J0Iik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIAotSlNWYWx1ZSBK
U1N1YnRsZUNyeXB0bzo6ZXhwb3J0S2V5KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNTdWJ0
bGVDcnlwdG86OmV4cG9ydEtleShFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgPCAyKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2Vw
dGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAgaWYg
KHN0YXRlLmFyZ3VtZW50Q291bnQoKSA8IDIpCisgICAgICAgIHJldHVybiBzdGF0ZS52bSgpLnRo
cm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRl
KSk7CiAKICAgICBDcnlwdG9LZXlGb3JtYXQga2V5Rm9ybWF0OwotICAgIGlmICghY3J5cHRvS2V5
Rm9ybWF0RnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIGtleUZvcm1hdCkpIHsK
LSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBpZiAoIWNyeXB0b0tl
eUZvcm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwga2V5Rm9ybWF0KSkg
eworICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBSZWZQdHI8Q3J5cHRvS2V5PiBrZXkgPSBKU0Ny
eXB0b0tleTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICBSZWZQ
dHI8Q3J5cHRvS2V5PiBrZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKHN0YXRlLnVuY2hlY2tl
ZEFyZ3VtZW50KDEpKTsKICAgICBpZiAoIWtleSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVy
cm9yKGV4ZWMpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKIAotICAg
IEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6
Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCgpKTsKLSAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBl
cihleGVjLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKKyAgICBKU1Byb21pc2VE
ZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3Rh
dGUsIGdsb2JhbE9iamVjdCgpKTsKKyAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcigmc3RhdGUs
IGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwogICAgIGF1dG8gc3VjY2Vzc0NhbGxi
YWNrID0gW3dyYXBwZXJdKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KSBtdXRhYmxlIHsK
ICAgICAgICAgd3JhcHBlci5yZXNvbHZlKHJlc3VsdCk7CiAgICAgfTsKQEAgLTYxOSw1MiArNjE5
LDUyIEBAIEpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OmV4cG9ydEtleShFeGVjU3RhdGUqIGV4ZWMp
CiAgICAgICAgIHdyYXBwZXIucmVqZWN0KG51bGxwdHIpOwogICAgIH07CiAKLSAgICBXZWJDb3Jl
OjpleHBvcnRLZXkoZXhlYywga2V5Rm9ybWF0LCAqa2V5LCBXVEY6Om1vdmUoc3VjY2Vzc0NhbGxi
YWNrKSwgV1RGOjptb3ZlKGZhaWx1cmVDYWxsYmFjaykpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBXZWJDb3JlOjpleHBvcnRLZXkoc3RhdGUsIGtleUZvcm1hdCwgKmtleSwg
V1RGOjptb3ZlKHN1Y2Nlc3NDYWxsYmFjayksIFdURjo6bW92ZShmYWlsdXJlQ2FsbGJhY2spKTsK
KyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCiAgICAgcmV0dXJuIHByb21pc2VEZWZlcnJlZC0+cHJvbWlzZSgpOwogfQogCi1KU1Zh
bHVlIEpTU3VidGxlQ3J5cHRvOjp3cmFwS2V5KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNT
dWJ0bGVDcnlwdG86OndyYXBLZXkoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpIDwgNCkKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNl
cHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlm
IChzdGF0ZS5hcmd1bWVudENvdW50KCkgPCA0KQorICAgICAgICByZXR1cm4gc3RhdGUudm0oKS50
aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0
ZSkpOwogCiAgICAgQ3J5cHRvS2V5Rm9ybWF0IGtleUZvcm1hdDsKLSAgICBpZiAoIWNyeXB0b0tl
eUZvcm1hdEZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBrZXlGb3JtYXQpKSB7
Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgaWYgKCFjcnlwdG9L
ZXlGb3JtYXRGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksIGtleUZvcm1hdCkp
IHsKKyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgUmVmUHRyPENyeXB0b0tleT4ga2V5ID0gSlND
cnlwdG9LZXk6OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgUmVm
UHRyPENyeXB0b0tleT4ga2V5ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNr
ZWRBcmd1bWVudCgxKSk7CiAgICAgaWYgKCFrZXkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVF
cnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CiAKLSAg
ICBSZWZQdHI8Q3J5cHRvS2V5PiB3cmFwcGluZ0tleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQo
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMikpOworICAgIFJlZlB0cjxDcnlwdG9LZXk+IHdyYXBw
aW5nS2V5ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgy
KSk7CiAgICAgaWYgKCFrZXkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsK
KyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CiAKICAgICBpZiAoIXdyYXBw
aW5nS2V5LT5hbGxvd3MoQ3J5cHRvS2V5VXNhZ2VXcmFwS2V5KSkgewogICAgICAgICBtX2ltcGwt
PmRvY3VtZW50KCktPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdl
TGV2ZWw6OkVycm9yLCBBU0NJSUxpdGVyYWwoIktleSB1c2FnZXMgZG8gbm90IGluY2x1ZGUgJ3dy
YXBLZXknIikpOwotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRFRF9F
UlIpOworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VSUik7
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIGF1dG8gYWxnb3Jp
dGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMykpOworICAgIGF1dG8gYWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFs
dWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDMpKTsKICAgICBpZiAoIWFsZ29yaXRo
bSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NF
UlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICB9CiAKLSAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25h
cnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JFbmNyeXB0KGV4ZWMsIGFsZ29yaXRobS0+aWRlbnRpZmll
cigpLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgzKSk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0g
SlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRW5jcnlwdCgm
c3RhdGUsIGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgz
KSk7CiAgICAgaWYgKCFwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNl
cHRpb24oKSk7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIEpTUHJvbWlzZURlZmVycmVkKiBw
cm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9i
amVjdCgpKTsKLSAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcihleGVjLCBnbG9iYWxPYmplY3Qo
KSwgcHJvbWlzZURlZmVycmVkKTsKKyAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVy
cmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsK
KyAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9t
aXNlRGVmZXJyZWQpOwogCiAgICAgQ3J5cHRvQWxnb3JpdGhtKiBhbGdvcml0aG1QdHIgPSBhbGdv
cml0aG0ucmVsZWFzZSgpOwogICAgIENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMqIHBhcmFtZXRl
cnNQdHIgPSBwYXJhbWV0ZXJzLnJlbGVhc2UoKTsKQEAgLTY5NSw5MCArNjk1LDkwIEBAIEpTVmFs
dWUgSlNTdWJ0bGVDcnlwdG86OndyYXBLZXkoRXhlY1N0YXRlKiBleGVjKQogICAgIH07CiAKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBXZWJDb3JlOjpleHBvcnRLZXkoZXhlYywga2V5
Rm9ybWF0LCAqa2V5LCBXVEY6Om1vdmUoZXhwb3J0U3VjY2Vzc0NhbGxiYWNrKSwgV1RGOjptb3Zl
KGV4cG9ydEZhaWx1cmVDYWxsYmFjaykpOworICAgIFdlYkNvcmU6OmV4cG9ydEtleShzdGF0ZSwg
a2V5Rm9ybWF0LCAqa2V5LCBXVEY6Om1vdmUoZXhwb3J0U3VjY2Vzc0NhbGxiYWNrKSwgV1RGOjpt
b3ZlKGV4cG9ydEZhaWx1cmVDYWxsYmFjaykpOwogICAgIGlmIChlYykgewogICAgICAgICBkZWxl
dGUgYWxnb3JpdGhtUHRyOwogICAgICAgICBkZWxldGUgcGFyYW1ldGVyc1B0cjsKLSAgICAgICAg
c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0
ZSwgZWMpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICByZXR1
cm4gcHJvbWlzZURlZmVycmVkLT5wcm9taXNlKCk7CiB9CiAKLUpTVmFsdWUgSlNTdWJ0bGVDcnlw
dG86OnVud3JhcEtleShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjp1
bndyYXBLZXkoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpIDwgNSkKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlmIChzdGF0ZS5hcmd1
bWVudENvdW50KCkgPCA1KQorICAgICAgICByZXR1cm4gc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlv
bigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAg
Q3J5cHRvS2V5Rm9ybWF0IGtleUZvcm1hdDsKLSAgICBpZiAoIWNyeXB0b0tleUZvcm1hdEZyb21K
U1ZhbHVlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBrZXlGb3JtYXQpKSB7Ci0gICAgICAgIEFT
U0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgaWYgKCFjcnlwdG9LZXlGb3JtYXRGcm9t
SlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksIGtleUZvcm1hdCkpIHsKKyAgICAgICAg
QVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgfQogCiAgICAgQ3J5cHRvT3BlcmF0aW9uRGF0YSB3cmFwcGVkS2V5RGF0YTsKLSAg
ICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgxKSwgd3JhcHBlZEtleURhdGEpKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5o
YWRFeGNlcHRpb24oKSk7CisgICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUo
JnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSwgd3JhcHBlZEtleURhdGEpKSB7Cisg
ICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIH0KIAotICAgIFJlZlB0cjxDcnlwdG9LZXk+IHVud3JhcHBpbmdLZXkg
PSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKKyAg
ICBSZWZQdHI8Q3J5cHRvS2V5PiB1bndyYXBwaW5nS2V5ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBl
ZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSk7CiAgICAgaWYgKCF1bndyYXBwaW5nS2V5KQot
ICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiB0aHJv
d1R5cGVFcnJvcigmc3RhdGUpOwogCiAgICAgaWYgKCF1bndyYXBwaW5nS2V5LT5hbGxvd3MoQ3J5
cHRvS2V5VXNhZ2VVbndyYXBLZXkpKSB7CiAgICAgICAgIG1faW1wbC0+ZG9jdW1lbnQoKS0+YWRk
Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIEFT
Q0lJTGl0ZXJhbCgiS2V5IHVzYWdlcyBkbyBub3QgaW5jbHVkZSAndW53cmFwS2V5JyIpKTsKLSAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAg
c2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIpOwogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxn
b3JpdGhtPiB1bndyYXBBbGdvcml0aG07CiAgICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29y
aXRobVBhcmFtZXRlcnM+IHVud3JhcEFsZ29yaXRobVBhcmFtZXRlcnM7Ci0gICAgdW53cmFwQWxn
b3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMykpOworICAgIHVud3JhcEFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21K
U1ZhbHVlKHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgzKSk7CiAgICAgaWYgKCF1bndy
YXBBbGdvcml0aG0pIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAg
ICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgfQotICAgIHVud3JhcEFsZ29yaXRobVBhcmFtZXRlcnMgPSBKU0NyeXB0
b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JEZWNyeXB0KGV4ZWMsIHVu
d3JhcEFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgzKSk7
CisgICAgdW53cmFwQWxnb3JpdGhtUGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlv
bmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckRlY3J5cHQoJnN0YXRlLCB1bndyYXBBbGdvcml0aG0t
PmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMykpOwogICAgIGlmICghdW53
cmFwQWxnb3JpdGhtUGFyYW1ldGVycykgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpOworICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRv
QWxnb3JpdGhtPiB1bndyYXBwZWRLZXlBbGdvcml0aG07CiAgICAgc3RkOjp1bmlxdWVfcHRyPENy
eXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IHVud3JhcHBlZEtleUFsZ29yaXRobVBhcmFtZXRlcnM7
Ci0gICAgaWYgKCFleGVjLT51bmNoZWNrZWRBcmd1bWVudCg0KS5pc051bGwoKSkgewotICAgICAg
ICB1bndyYXBwZWRLZXlBbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShleGVj
LCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCg0KSk7CisgICAgaWYgKCFzdGF0ZS51bmNoZWNrZWRB
cmd1bWVudCg0KS5pc051bGwoKSkgeworICAgICAgICB1bndyYXBwZWRLZXlBbGdvcml0aG0gPSBj
cmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQo
NCkpOwogICAgICAgICBpZiAoIXVud3JhcHBlZEtleUFsZ29yaXRobSkgewotICAgICAgICAgICAg
QVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5o
YWRFeGNlcHRpb24oKSk7CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAg
ICAgfQotICAgICAgICB1bndyYXBwZWRLZXlBbGdvcml0aG1QYXJhbWV0ZXJzID0gSlNDcnlwdG9B
bGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9ySW1wb3J0S2V5KGV4ZWMsIHVu
d3JhcHBlZEtleUFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCg0KSk7CisgICAgICAgIHVud3JhcHBlZEtleUFsZ29yaXRobVBhcmFtZXRlcnMgPSBKU0NyeXB0
b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JJbXBvcnRLZXkoJnN0YXRl
LCB1bndyYXBwZWRLZXlBbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJn
dW1lbnQoNCkpOwogICAgICAgICBpZiAoIXVud3JhcHBlZEtleUFsZ29yaXRobVBhcmFtZXRlcnMp
IHsKLSAgICAgICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgICAg
ICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBib29sIGV4dHJhY3RhYmxlID0gZmFs
c2U7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSA2KSB7Ci0gICAgICAgIGV4dHJh
Y3RhYmxlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoNSkudG9Cb29sZWFuKGV4ZWMpOwotICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291
bnQoKSA+PSA2KSB7CisgICAgICAgIGV4dHJhY3RhYmxlID0gc3RhdGUudW5jaGVja2VkQXJndW1l
bnQoNSkudG9Cb29sZWFuKCZzdGF0ZSk7CisgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIENyeXB0
b0tleVVzYWdlIGtleVVzYWdlcyA9IDA7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+
PSA3KSB7Ci0gICAgICAgIGlmICghY3J5cHRvS2V5VXNhZ2VzRnJvbUpTVmFsdWUoZXhlYywgZXhl
Yy0+YXJndW1lbnQoNiksIGtleVVzYWdlcykpIHsKLSAgICAgICAgICAgIEFTU0VSVChleGVjLT5o
YWRFeGNlcHRpb24oKSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+PSA3KSB7Cisg
ICAgICAgIGlmICghY3J5cHRvS2V5VXNhZ2VzRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLmFyZ3Vt
ZW50KDYpLCBrZXlVc2FnZXMpKSB7CisgICAgICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpOwogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNl
RGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QoKSk7Ci0gICAgRGVmZXJyZWRXcmFw
cGVyIHdyYXBwZXIoZXhlYywgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7Ci0gICAg
U3Ryb25nPEpTRE9NR2xvYmFsT2JqZWN0PiBkb21HbG9iYWxPYmplY3QoZXhlYy0+dm0oKSwgZ2xv
YmFsT2JqZWN0KCkpOworICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBK
U1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOworICAgIERl
ZmVycmVkV3JhcHBlciB3cmFwcGVyKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZl
cnJlZCk7CisgICAgU3Ryb25nPEpTRE9NR2xvYmFsT2JqZWN0PiBkb21HbG9iYWxPYmplY3Qoc3Rh
dGUudm0oKSwgZ2xvYmFsT2JqZWN0KCkpOwogCiAgICAgQ3J5cHRvQWxnb3JpdGhtKiB1bndyYXBw
ZWRLZXlBbGdvcml0aG1QdHIgPSB1bndyYXBwZWRLZXlBbGdvcml0aG0ucmVsZWFzZSgpOwogICAg
IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMqIHVud3JhcHBlZEtleUFsZ29yaXRobVBhcmFtZXRl
cnNQdHIgPSB1bndyYXBwZWRLZXlBbGdvcml0aG1QYXJhbWV0ZXJzLnJlbGVhc2UoKTsKQEAgLTc5
MCwxMSArNzkwLDExIEBAIEpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OnVud3JhcEtleShFeGVjU3Rh
dGUqIGV4ZWMpCiAgICAgICAgIGF1dG8gaW1wb3J0RmFpbHVyZUNhbGxiYWNrID0gW3dyYXBwZXJd
KCkgbXV0YWJsZSB7CiAgICAgICAgICAgICB3cmFwcGVyLnJlamVjdChudWxscHRyKTsKICAgICAg
ICAgfTsKLSAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZG9tR2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCk7Ci0gICAgICAgIFdlYkNvcmU6OmltcG9ydEtleShleGVjLCBrZXlGb3JtYXQsIHN0ZDo6
bWFrZV9wYWlyKHJlc3VsdC5kYXRhKCksIHJlc3VsdC5zaXplKCkpLCBzdGQ6OnVuaXF1ZV9wdHI8
Q3J5cHRvQWxnb3JpdGhtPih1bndyYXBwZWRLZXlBbGdvcml0aG1QdHIpLCBzdGQ6OnVuaXF1ZV9w
dHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4odW53cmFwcGVkS2V5QWxnb3JpdGhtUGFyYW1l
dGVyc1B0ciksIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIFdURjo6bW92ZShpbXBvcnRTdWNjZXNz
Q2FsbGJhY2spLCBXVEY6Om1vdmUoaW1wb3J0RmFpbHVyZUNhbGxiYWNrKSk7Ci0gICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBFeGVjU3RhdGUmIHN0YXRlID0gKmRv
bUdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgICAgICBXZWJDb3JlOjppbXBvcnRLZXko
c3RhdGUsIGtleUZvcm1hdCwgc3RkOjptYWtlX3BhaXIocmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNp
emUoKSksIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG0+KHVud3JhcHBlZEtleUFsZ29y
aXRobVB0ciksIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPih1bndy
YXBwZWRLZXlBbGdvcml0aG1QYXJhbWV0ZXJzUHRyKSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywg
V1RGOjptb3ZlKGltcG9ydFN1Y2Nlc3NDYWxsYmFjayksIFdURjo6bW92ZShpbXBvcnRGYWlsdXJl
Q2FsbGJhY2spKTsKKyAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSB7CiAgICAgICAg
ICAgICAvLyBGSVhNRTogUmVwb3J0IGV4Y2VwdGlvbiBkZXRhaWxzIHRvIGNvbnNvbGUsIGFuZCBw
b3NzaWJseSB0byBjYWxsaW5nIHNjcmlwdCBvbmNlIHRoZXJlIGlzIGEgc3RhbmRhcmRpemVkIHdh
eSB0byBwYXNzIGVycm9ycyB0byBXZWJDcnlwdG8gcHJvbWlzZSByZWplY3QgZnVuY3Rpb25zLgot
ICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIHN0YXRlLmNs
ZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICBpbXBvcnRGYWlsdXJlQ2FsbGJhY2soKTsKICAg
ICAgICAgfQogICAgIH07CkBAIC04MTAsNyArODEwLDcgQEAgSlNWYWx1ZSBKU1N1YnRsZUNyeXB0
bzo6dW53cmFwS2V5KEV4ZWNTdGF0ZSogZXhlYykKICAgICBpZiAoZWMpIHsKICAgICAgICAgZGVs
ZXRlIHVud3JhcHBlZEtleUFsZ29yaXRobVB0cjsKICAgICAgICAgZGVsZXRlIHVud3JhcHBlZEtl
eUFsZ29yaXRobVBhcmFtZXRlcnNQdHI7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBl
Yyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1RleHRUcmFja0N1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1RleHRUcmFja0N1c3RvbS5jcHAKaW5kZXggMTg4NWM1NzdlNTI1OGFlM2RlNWQyZDJkMmFk
ZmNiMzA5MzkxZmY3Ny4uZWIxOWYyNTc4NzE5OWYxZTcwZTk5YWY3YWQyZmIwNDI3Y2U5Zjc1ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNw
cApAQCAtNDEsMjggKzQxLDI4IEBAIHZvaWQgSlNUZXh0VHJhY2s6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChy
b290KCZpbXBsKCkpKTsKIH0KIAotdm9pZCBKU1RleHRUcmFjazo6c2V0S2luZChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit2b2lkIEpTVGV4dFRyYWNrOjpzZXRLaW5kKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKLSAg
ICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3Ry
aW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm47CiAgICAgaW1wbCgpLnNldEtpbmQoc3RyaW5nKTsKICNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHZhbHVlKTsKICNlbmRpZgogfQogCi12b2lkIEpTVGV4dFRyYWNrOjpzZXRMYW5n
dWFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit2b2lkIEpTVGV4dFRyYWNrOjpz
ZXRMYW5ndWFnZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogI2lmIEVOQUJM
RShNRURJQV9TT1VSQ0UpCi0gICAgYXV0byYgc3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBhdXRvJiBz
dHJpbmcgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOworICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwoKS5zZXRMYW5n
dWFnZShzdHJpbmcpOwogI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odmFsdWUpOwogI2VuZGlmCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyYWNrRXZlbnRDdXN0b20uY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmFja0V2ZW50Q3VzdG9tLmNwcAppbmRl
eCA5NzllZTJhMzIwOWJmMmYwM2Y1ZDc4N2IwOWM1ZWEzMWNiNDEzMzA4Li5mNTFkM2I5NjNjODE4
MDNjZmU3MWI5NDdiNDJjOWRiZDAyYmI4NWJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1RyYWNrRXZlbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTVHJhY2tFdmVudEN1c3RvbS5jcHAKQEAgLTM2LDEzICszNiwxMyBAQCB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNUcmFj
a0V2ZW50Ojp0cmFjayhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTVHJhY2tFdmVu
dDo6dHJhY2soRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICAgICBUcmFja0Jhc2UqIHRyYWNr
ID0gaW1wbCgpLnRyYWNrKCk7CiAgICAgaWYgKCF0cmFjaykKICAgICAgICAgcmV0dXJuIGpzTnVs
bCgpOwogCi0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIHRyYWNrKTsKKyAg
ICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCB0cmFjayk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTVmlkZW9UcmFja0N1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Zp
ZGVvVHJhY2tDdXN0b20uY3BwCmluZGV4IDk0ODY3ODhhNjZiMjQyMTM3N2RhYzUxMDZiNmJmNTUy
Njc2MjdmMDAuLjZmMGFmNWFmNWE4ZWExZTFlYTdlNWZlMTkxZTBjODA3YzIwNDFlOTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcApA
QCAtNDAsMjggKzQwLDI4IEBAIHZvaWQgSlNWaWRlb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9v
dCgmaW1wbCgpKSk7CiB9CiAKLXZvaWQgSlNWaWRlb1RyYWNrOjpzZXRLaW5kKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNWaWRlb1RyYWNrOjpzZXRLaW5kKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKLSAg
ICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3Ry
aW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm47CiAgICAgaW1wbCgpLnNldEtpbmQoc3RyaW5nKTsKICNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHZhbHVlKTsKICNlbmRpZgogfQogCi12b2lkIEpTVmlkZW9UcmFjazo6c2V0TGFu
Z3VhZ2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU1ZpZGVvVHJhY2s6
OnNldExhbmd1YWdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAjaWYgRU5B
QkxFKE1FRElBX1NPVVJDRSkKLSAgICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGF1dG8m
IHN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgaWYg
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbCgpLnNldExh
bmd1YWdlKHN0cmluZyk7CiAjZWxzZQotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CiAjZW5kaWYKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwCmluZGV4IDI3MGIxMjBhMjNlY2Y4ZmYzNjkyYjQ5
YmQ1YzZkMjA1MDQ2NmQ0MmEuLjRlNGU1Y2E5OGZjMTQ5MDJhMmNjMDAwYjZhYjA2Mzg5MGEyMWIx
NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcApAQCAtMTY4LDE4ICsxNjgsMTgg
QEAgZW51bSBPYmplY3RUeXBlIHsKICAgICBrQnVmZmVyLCBrUmVuZGVyYnVmZmVyLCBrVGV4dHVy
ZSwga1ZlcnRleEF0dHJpYgogfTsKIAotc3RhdGljIEpTVmFsdWUgZ2V0T2JqZWN0UGFyYW1ldGVy
KEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogb2JqLCBFeGVjU3RhdGUqIGV4ZWMsIE9iamVj
dFR5cGUgb2JqZWN0VHlwZSkKK3N0YXRpYyBKU1ZhbHVlIGdldE9iamVjdFBhcmFtZXRlcihKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIG9iaiwgRXhlY1N0YXRlJiBzdGF0ZSwgT2JqZWN0VHlw
ZSBvYmplY3RUeXBlKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKLSAg
ICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkg
IT0gMikKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKICAgICAKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0g
b2JqLT5pbXBsKCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoMCkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
dW5zaWduZWQgdGFyZ2V0ID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMigmc3Rh
dGUpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgx
KS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICB1bnNp
Z25lZCBwbmFtZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoJnN0YXRlKTsK
KyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIFdlYkdMR2V0SW5mbyBpbmZvOwogICAgIHN3aXRjaCAob2JqZWN0VHlwZSkgewpA
QCAtMjAxLDEwICsyMDEsMTAgQEAgc3RhdGljIEpTVmFsdWUgZ2V0T2JqZWN0UGFyYW1ldGVyKEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogb2JqLCBFeGVjU3RhdGUqIGUKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywg
ZWMpOworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIH0KLSAgICByZXR1cm4gdG9KUyhleGVjLCBvYmotPmdsb2Jh
bE9iamVjdCgpLCBpbmZvKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIG9iai0+Z2xvYmFsT2Jq
ZWN0KCksIGluZm8pOwogfQogCiBlbnVtIFdoaWNoUHJvZ3JhbUNhbGwgewpAQCAtMjY4LDEzNyAr
MjY4LDEzNyBAQCB2b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KCZpbXBsKCkpOwogfQogCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
Z2V0QXR0YWNoZWRTaGFkZXJzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpnZXRBdHRhY2hlZFNoYWRlcnMoRXhlY1N0YXRlJiBzdGF0ZSkKIHsK
LSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIGV4ZWMt
PnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
ZXhlYykpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPCAxKQorICAgICAgICByZXR1
cm4gc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKCZzdGF0ZSkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAgV2ViR0xQcm9ncmFt
KiBwcm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1
bWVudCgwKSk7Ci0gICAgaWYgKCFwcm9ncmFtICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgw
KS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhl
Yyk7CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBl
ZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFwcm9ncmFtICYmICFzdGF0
ZS51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1
cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKICAgICBWZWN0b3I8UmVmUHRyPFdlYkdMU2hhZGVy
Pj4gc2hhZGVyczsKICAgICBib29sIHN1Y2NlZWQgPSBjb250ZXh0LmdldEF0dGFjaGVkU2hhZGVy
cyhwcm9ncmFtLCBzaGFkZXJzLCBlYyk7CiAgICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4
Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsK
ICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIH0KICAgICBpZiAoIXN1Y2NlZWQpCiAgICAg
ICAgIHJldHVybiBqc051bGwoKTsKICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7
CiAgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHNoYWRlcnMuc2l6ZSgpOyArK2lpKQotICAg
ICAgICBsaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBzaGFkZXJzW2lpXS5n
ZXQoKSkpOwotICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCAwLCBnbG9iYWxPYmplY3Qo
KSwgbGlzdCk7CisgICAgICAgIGxpc3QuYXBwZW5kKHRvSlMoJnN0YXRlLCBnbG9iYWxPYmplY3Qo
KSwgc2hhZGVyc1tpaV0uZ2V0KCkpKTsKKyAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoJnN0YXRl
LCAwLCBnbG9iYWxPYmplY3QoKSwgbGlzdCk7CiB9CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpnZXRFeHRlbnNpb24oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEV4dGVuc2lvbihFeGVjU3RhdGUmIHN0YXRlKQog
ewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQotICAgICAgICByZXR1cm4gZXhl
Yy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihleGVjKSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgICAgIHJl
dHVybiBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAgICAgCiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSYgY29udGV4dCA9IGltcGwoKTsKLSAgICBjb25zdCBTdHJpbmcgbmFtZSA9IGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgY29uc3QgU3RyaW5nIG5hbWUgPSBzdGF0ZS51bmNoZWNr
ZWRBcmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOworICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
V2ViR0xFeHRlbnNpb24qIGV4dGVuc2lvbiA9IGNvbnRleHQuZ2V0RXh0ZW5zaW9uKG5hbWUpOwot
ICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBleHRlbnNpb24pOworICAgIHJl
dHVybiB0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIGV4dGVuc2lvbik7CiB9CiAKLUpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCdWZmZXJQYXJhbWV0ZXIoRXhlY1N0
YXRlKiBleGVjKQorSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEJ1ZmZl
clBhcmFtZXRlcihFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIHJldHVybiBnZXRPYmplY3RQYXJh
bWV0ZXIodGhpcywgZXhlYywga0J1ZmZlcik7CisgICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRl
cih0aGlzLCBzdGF0ZSwga0J1ZmZlcik7CiB9CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEZyYW1lYnVmZmVy
QXR0YWNobWVudFBhcmFtZXRlcihFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgIT0gMykKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNl
cHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlm
IChzdGF0ZS5hcmd1bWVudENvdW50KCkgIT0gMykKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCku
dGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3Rh
dGUpKTsKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIHVuc2lnbmVkIHRhcmdldCA9IHN0YXRlLnVuY2hlY2tlZEFyZ3Vt
ZW50KDApLnRvSW50MzIoJnN0YXRlKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHVuc2lnbmVkIGF0dGFjaG1lbnQgPSBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICB1bnNpZ25lZCBhdHRhY2htZW50ID0gc3RhdGUudW5jaGVja2Vk
QXJndW1lbnQoMSkudG9JbnQzMigmc3RhdGUpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgdW5zaWduZWQgcG5hbWUgPSBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICB1bnNpZ25lZCBwbmFtZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3Vt
ZW50KDIpLnRvSW50MzIoJnN0YXRlKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29u
dGV4dC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIodGFyZ2V0LCBhdHRhY2htZW50
LCBwbmFtZSwgZWMpOwogICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgZWMpOworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxP
YmplY3QoKSwgaW5mbyk7CisgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwg
aW5mbyk7CiB9CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRQYXJh
bWV0ZXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmdldFBhcmFtZXRlcihFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgIT0gMSkKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRp
b24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlmIChz
dGF0ZS5hcmd1bWVudENvdW50KCkgIT0gMSkKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhy
b3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUp
KTsKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgdW5zaWduZWQgcG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgw
KS50b0ludDMyKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQu
Z2V0UGFyYW1ldGVyKHBuYW1lLCBlYyk7CiAgICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4
Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQotICAgIHJldHVybiB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2Jh
bE9iamVjdCgpLCBpbmZvKTsKIH0KIAotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmdldFByb2dyYW1QYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFByb2dyYW1QYXJhbWV0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSkKIHsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCi0gICAgICAgIHJldHVy
biBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpICE9IDIpCisgICAg
ICAgIHJldHVybiBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IGltcGwoKTsKLSAg
ICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBKU1dlYkdMUHJvZ3JhbTo6dG9XcmFwcGVkKGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIXByb2dyYW0gJiYgIWV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiB0aHJv
d1R5cGVFcnJvcihleGVjKTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9IEpTV2ViR0xQcm9ncmFtOjp0b1dyYXBwZWQoc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmICghcHJvZ3JhbSAmJiAhc3RhdGUudW5j
aGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKCZzdGF0ZSk7CisgICAgdW5zaWduZWQgcG5hbWUgPSBzdGF0ZS51bmNoZWNr
ZWRBcmd1bWVudCgxKS50b0ludDMyKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBXZWJHTEdldEluZm8gaW5m
byA9IGNvbnRleHQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBwbmFtZSwgZWMpOwogICAg
IGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBz
ZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgIH0KLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7Cisg
ICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7CiB9CiAKLUpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIo
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Omdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIHJldHVybiBn
ZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhlYywga1JlbmRlcmJ1ZmZlcik7CisgICAgcmV0dXJu
IGdldE9iamVjdFBhcmFtZXRlcih0aGlzLCBzdGF0ZSwga1JlbmRlcmJ1ZmZlcik7CiB9CiAKLUpT
VmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRTaGFkZXJQYXJhbWV0ZXIoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFNo
YWRlclBhcmFtZXRlcihFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgIT0gMikKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24o
ZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlmIChzdGF0
ZS5hcmd1bWVudENvdW50KCkgIT0gMikKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dF
eGNlcHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsK
ICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlJiBjb250ZXh0ID0gaW1wbCgpOwotICAgIGlmICghZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCku
aW5oZXJpdHMoSlNXZWJHTFNoYWRlcjo6aW5mbygpKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlw
ZUVycm9yKGV4ZWMpOwotICAgIFdlYkdMU2hhZGVyKiBzaGFkZXIgPSBKU1dlYkdMU2hhZGVyOjp0
b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIHVuc2lnbmVkIHBuYW1l
ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKCFzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS5p
c1VuZGVmaW5lZE9yTnVsbCgpICYmICFzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS5pbmhlcml0
cyhKU1dlYkdMU2hhZGVyOjppbmZvKCkpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3Io
JnN0YXRlKTsKKyAgICBXZWJHTFNoYWRlciogc2hhZGVyID0gSlNXZWJHTFNoYWRlcjo6dG9XcmFw
cGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICB1bnNpZ25lZCBwbmFtZSA9IHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoJnN0YXRlKTsKKyAgICBpZiAoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdM
R2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBwbmFtZSwg
ZWMpOwogICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwor
ICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIH0KLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwg
aW5mbyk7CisgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7CiB9
CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRTdXBwb3J0ZWRFeHRl
bnNpb25zKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpnZXRTdXBwb3J0ZWRFeHRlbnNpb25zKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IGltcGwoKTsKICAgICBpZiAoY29udGV4
dC5pc0NvbnRleHRMb3N0KCkpCkBAIC00MDYsNTkgKzQwNiw1OSBAQCBKU1ZhbHVlIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucyhFeGVjU3RhdGUqIGV4
ZWMpCiAgICAgVmVjdG9yPFN0cmluZz4gdmFsdWUgPSBjb250ZXh0LmdldFN1cHBvcnRlZEV4dGVu
c2lvbnMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwogICAgIGZvciAoc2l6ZV90
IGlpID0gMDsgaWkgPCB2YWx1ZS5zaXplKCk7ICsraWkpCi0gICAgICAgIGxpc3QuYXBwZW5kKGpz
U3RyaW5nV2l0aENhY2hlKGV4ZWMsIHZhbHVlW2lpXSkpOwotICAgIHJldHVybiBjb25zdHJ1Y3RB
cnJheShleGVjLCAwLCBnbG9iYWxPYmplY3QoKSwgbGlzdCk7CisgICAgICAgIGxpc3QuYXBwZW5k
KGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWVbaWldKSk7CisgICAgcmV0dXJuIGNvbnN0
cnVjdEFycmF5KCZzdGF0ZSwgMCwgZ2xvYmFsT2JqZWN0KCksIGxpc3QpOwogfQogCi1KU1ZhbHVl
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VGV4UGFyYW1ldGVyKEV4ZWNTdGF0ZSog
ZXhlYykKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRUZXhQYXJhbWV0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRo
aXMsIGV4ZWMsIGtUZXh0dXJlKTsKKyAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMs
IHN0YXRlLCBrVGV4dHVyZSk7CiB9CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpnZXRVbmlmb3JtKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpnZXRVbmlmb3JtKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJv
d0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Cisg
ICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gc3RhdGUu
dm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KCZzdGF0ZSkpOwogICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAgV2ViR0xQcm9ncmFtKiBw
cm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7Ci0gICAgaWYgKCFwcm9ncmFtICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7
Ci0gICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2Nh
dGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKLSAgICBpZiAoIWxv
Y2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgV2ViR0xQcm9ncmFt
KiBwcm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1
bWVudCgwKSk7CisgICAgaWYgKCFwcm9ncmFtICYmICFzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgw
KS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0
YXRlKTsKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9y
bUxvY2F0aW9uOjp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIGlm
ICghbG9jYXRpb24gJiYgIXN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOwogICAgIFdlYkdM
R2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRVbmlmb3JtKHByb2dyYW0sIGxvY2F0aW9uLCBlYyk7
CiAgICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAg
ICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgfQotICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZv
KTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKIH0KIAot
SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFZlcnRleEF0dHJpYihFeGVj
U3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VmVy
dGV4QXR0cmliKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIGdldE9iamVjdFBhcmFt
ZXRlcih0aGlzLCBleGVjLCBrVmVydGV4QXR0cmliKTsKKyAgICByZXR1cm4gZ2V0T2JqZWN0UGFy
YW1ldGVyKHRoaXMsIHN0YXRlLCBrVmVydGV4QXR0cmliKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotYm9vbCB0b1ZlY3RvcihKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlLCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2
ZWN0b3IpCitib29sIHRvVmVjdG9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCiB7CiAgICAgaWYgKCF2
YWx1ZS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgSlNDOjpK
U09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwotICAgIGludDMyX3QgbGVuZ3RoID0g
b2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvSW50
MzIoZXhlYyk7CisgICAgaW50MzJfdCBsZW5ndGggPSBvYmplY3QtPmdldCgmc3RhdGUsIHN0YXRl
LnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b0ludDMyKCZzdGF0ZSk7CiAgICAgCiAgICAg
aWYgKCF2ZWN0b3IudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB2ZWN0b3IucmVzaXplKGxlbmd0aCk7CiAgICAgCiAgICAgZm9yIChpbnQzMl90
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNDOjpKU1ZhbHVlIHYgPSBvYmpl
Y3QtPmdldChleGVjLCBpKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICBKU0M6OkpTVmFsdWUgdiA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgaSk7CisgICAgICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgdmVjdG9yW2ldID0gc3RhdGljX2Nhc3Q8VD4odi50b051bWJlcihleGVjKSk7CisgICAgICAg
IHZlY3RvcltpXSA9IHN0YXRpY19jYXN0PFQ+KHYudG9OdW1iZXIoJnN0YXRlKSk7CiAgICAgfQog
ICAgIAogICAgIHJldHVybiB0cnVlOwpAQCAtNDg2LDI2ICs0ODYsMjYgQEAgc3RhdGljIGJvb2wg
ZnVuY3Rpb25Gb3JVbmlmb3JtKERhdGFGdW5jdGlvblRvQ2FsbCBmKQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25mKERhdGFGdW5jdGlvblRv
Q2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYg
Y29udGV4dCkKK3N0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uZihEYXRhRnVuY3Rpb25U
b0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
JiBjb250ZXh0KQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKLSAgICAg
ICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgIT0g
MikKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKICAgICAKICAgICBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24gPSAwOwogICAgIGxvbmcgaW5kZXggPSAtMTsKICAgICAKICAg
ICBpZiAoZnVuY3Rpb25Gb3JVbmlmb3JtKGYpKSB7Ci0gICAgICAgIGxvY2F0aW9uID0gSlNXZWJH
TFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsK
LSAgICAgICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNV
bmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVj
KTsKKyAgICAgICAgbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQo
c3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgICAgICBpZiAoIWxvY2F0aW9uICYmICFz
dGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAg
ICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGlu
ZGV4ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAgICAgICAg
aW5kZXggPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKCZzdGF0ZSk7CiAgICAg
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgCi0gICAgUmVmUHRyPEZs
b2F0MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvRmxvYXQzMkFycmF5KGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDEpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpICAgIAorICAgIFJlZlB0
cjxGbG9hdDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0b0Zsb2F0MzJBcnJheShzdGF0ZS51bmNoZWNr
ZWRBcmd1bWVudCgxKSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAg
LTUzNywxMyArNTM3LDEzIEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uZihEYXRh
RnVuY3Rpb25Ub0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFdlCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IGVjKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAgICAgCiAgICAgVmVjdG9yPGZsb2F0LCA2ND4gYXJy
YXk7Ci0gICAgaWYgKCF0b1ZlY3RvcihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSwg
YXJyYXkpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgaWYgKCF0
b1ZlY3RvcihzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSksIGFycmF5KSkKKyAgICAg
ICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CiAgICAgCiAgICAgc3dpdGNoIChmKSB7
CiAgICAgY2FzZSBmX3VuaWZvcm0xdjoKQEAgLTU3MiwyMCArNTcyLDIwIEBAIHN0YXRpYyBKU0M6
OkpTVmFsdWUgZGF0YUZ1bmN0aW9uZihEYXRhRnVuY3Rpb25Ub0NhbGwgZiwgSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIFdlCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKLSAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rp
b25pKERhdGFGdW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkKK3N0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0
aW9uaShEYXRhRnVuY3Rpb25Ub0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0KQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgIT0gMikKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhl
YywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlmIChzdGF0ZS5h
cmd1bWVudENvdW50KCkgIT0gMikKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNl
cHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKICAg
ICAKLSAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxv
Y2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICgh
bG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQo
c3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmICghbG9jYXRpb24gJiYgIXN0YXRl
LnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVy
biB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOwogICAgIAotICAgIFJlZlB0cjxJbnQzMkFycmF5PiB3
ZWJHTEFycmF5ID0gdG9JbnQzMkFycmF5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAg
ICBSZWZQdHI8SW50MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvSW50MzJBcnJheShzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudCgxKSk7CiAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAg
aWYgKHdlYkdMQXJyYXkpIHsKQEAgLTYwNiwxNCArNjA2LDE0IEBAIHN0YXRpYyBKU0M6OkpTVmFs
dWUgZGF0YUZ1bmN0aW9uaShEYXRhRnVuY3Rpb25Ub0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIFdlCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0
ZSwgZWMpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAgICAgCiAgICAg
CiAgICAgVmVjdG9yPGludCwgNjQ+IGFycmF5OwotICAgIGlmICghdG9WZWN0b3IoZXhlYywgZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMSksIGFycmF5KSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlw
ZUVycm9yKGV4ZWMpOworICAgIGlmICghdG9WZWN0b3Ioc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFy
Z3VtZW50KDEpLCBhcnJheSkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUp
OwogICAgIAogICAgIHN3aXRjaCAoZikgewogICAgIGNhc2UgZl91bmlmb3JtMXY6CkBAIC02MzIs
MjQgKzYzMiwyNCBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmkoRGF0YUZ1bmN0
aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZQogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBzZXRET01FeGNl
cHRpb24oJnN0YXRlLCBlYyk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRp
YyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uTWF0cml4KERhdGFGdW5jdGlvbk1hdHJpeFRvQ2Fs
bCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29u
dGV4dCkKK3N0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uTWF0cml4KERhdGFGdW5jdGlv
bk1hdHJpeFRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UmIGNvbnRleHQpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAz
KQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291
bnQoKSAhPSAzKQorICAgICAgICByZXR1cm4gc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3Rh
dGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogICAgIAotICAgIFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRv
V3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFsb2NhdGlvbiAm
JiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAg
ICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFsb2NhdGlvbiAmJiAhc3RhdGUudW5jaGVja2Vk
QXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlw
ZUVycm9yKCZzdGF0ZSk7CiAgICAgCi0gICAgYm9vbCB0cmFuc3Bvc2UgPSBleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSAgICAKKyAgICBib29sIHRyYW5zcG9zZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEp
LnRvQm9vbGVhbigmc3RhdGUpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgCi0gICAgUmVmUHRyPEZsb2F0MzJBcnJheT4g
d2ViR0xBcnJheSA9IHRvRmxvYXQzMkFycmF5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsK
KyAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9GbG9hdDMyQXJyYXkoc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMikpOwogICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwogICAgIGlmICh3ZWJHTEFycmF5KSB7CkBAIC02NjUsMTMgKzY2NSwxMyBAQCBzdGF0aWMgSlND
OjpKU1ZhbHVlIGRhdGFGdW5jdGlvbk1hdHJpeChEYXRhRnVuY3Rpb25NYXRyaXhUb0NhbGwgZiwg
SlNDOjpFeGVjU3RhdAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlv
bigmc3RhdGUsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogICAg
IAogICAgIFZlY3RvcjxmbG9hdCwgNjQ+IGFycmF5OwotICAgIGlmICghdG9WZWN0b3IoZXhlYywg
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMiksIGFycmF5KSkKLSAgICAgICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKGV4ZWMpOworICAgIGlmICghdG9WZWN0b3Ioc3RhdGUsIHN0YXRlLnVuY2hlY2tl
ZEFyZ3VtZW50KDIpLCBhcnJheSkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3Rh
dGUpOwogICAgIAogICAgIHN3aXRjaCAoZikgewogICAgIGNhc2UgZl91bmlmb3JtTWF0cml4MmZ2
OgpAQCAtNjg1LDgzICs2ODUsODMgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25N
YXRyaXgoRGF0YUZ1bmN0aW9uTWF0cml4VG9DYWxsIGYsIEpTQzo6RXhlY1N0YXQKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIAotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAg
c2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
fQogCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMWZ2
KEpTQzo6RXhlY1N0YXRlKiBleGVjKQorSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dW5pZm9ybTFmdihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJu
IGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtMXYsIGV4ZWMsIGltcGwoKSk7CisgICAgcmV0dXJuIGRh
dGFGdW5jdGlvbmYoZl91bmlmb3JtMXYsIHN0YXRlLCBpbXBsKCkpOwogfQogCi1KU0M6OkpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMWl2KEpTQzo6RXhlY1N0YXRl
KiBleGVjKQorSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9y
bTFpdihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmko
Zl91bmlmb3JtMXYsIGV4ZWMsIGltcGwoKSk7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91
bmlmb3JtMXYsIHN0YXRlLCBpbXBsKCkpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQorSlNDOjpK
U1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTJmdihKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtMnYsIGV4
ZWMsIGltcGwoKSk7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtMnYsIHN0YXRl
LCBpbXBsKCkpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp1bmlmb3JtMml2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQorSlNDOjpKU1ZhbHVlIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTJpdihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCiB7
Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtMnYsIGV4ZWMsIGltcGwoKSk7Cisg
ICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtMnYsIHN0YXRlLCBpbXBsKCkpOwogfQog
Ci1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtM2Z2KEpT
Qzo6RXhlY1N0YXRlKiBleGVjKQorSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dW5pZm9ybTNmdihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIGRh
dGFGdW5jdGlvbmYoZl91bmlmb3JtM3YsIGV4ZWMsIGltcGwoKSk7CisgICAgcmV0dXJuIGRhdGFG
dW5jdGlvbmYoZl91bmlmb3JtM3YsIHN0YXRlLCBpbXBsKCkpOwogfQogCi1KU0M6OkpTVmFsdWUg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtM2l2KEpTQzo6RXhlY1N0YXRlKiBl
eGVjKQorSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNp
dihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91
bmlmb3JtM3YsIGV4ZWMsIGltcGwoKSk7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlm
b3JtM3YsIHN0YXRlLCBpbXBsKCkpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp1bmlmb3JtNGZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQorSlNDOjpKU1Zh
bHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTRmdihKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtNHYsIGV4ZWMs
IGltcGwoKSk7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtNHYsIHN0YXRlLCBp
bXBsKCkpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1
bmlmb3JtNGl2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQorSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTRpdihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0g
ICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtNHYsIGV4ZWMsIGltcGwoKSk7CisgICAg
cmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtNHYsIHN0YXRlLCBpbXBsKCkpOwogfQogCi1K
U0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4MmZ2
KEpTQzo6RXhlY1N0YXRlKiBleGVjKQorSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dW5pZm9ybU1hdHJpeDJmdihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAg
cmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXgyZnYsIGV4ZWMsIGltcGwo
KSk7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXgyZnYsIHN0
YXRlLCBpbXBsKCkpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp1bmlmb3JtTWF0cml4M2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQorSlNDOjpKU1ZhbHVl
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybU1hdHJpeDNmdihKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1N
YXRyaXgzZnYsIGV4ZWMsIGltcGwoKSk7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChm
X3VuaWZvcm1NYXRyaXgzZnYsIHN0YXRlLCBpbXBsKCkpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4NGZ2KEpTQzo6RXhlY1N0YXRl
KiBleGVjKQorSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9y
bU1hdHJpeDRmdihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5j
dGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXg0ZnYsIGV4ZWMsIGltcGwoKSk7CisgICAgcmV0dXJu
IGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXg0ZnYsIHN0YXRlLCBpbXBsKCkpOwog
fQogCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRy
aWIxZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIxZnYoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQogewot
ICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliMXYsIGV4ZWMsIGltcGwoKSk7
CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIxdiwgc3RhdGUsIGltcGwo
KSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRl
eEF0dHJpYjJmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjJmdihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUp
CiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIydiwgZXhlYywgaW1w
bCgpKTsKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRleEF0dHJpYjJ2LCBzdGF0ZSwg
aW1wbCgpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dmVydGV4QXR0cmliM2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQorSlNDOjpKU1ZhbHVlIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliM2Z2KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSkKIHsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRleEF0dHJpYjN2LCBleGVj
LCBpbXBsKCkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliM3YsIHN0
YXRlLCBpbXBsKCkpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp2ZXJ0ZXhBdHRyaWI0ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCitKU0M6OkpTVmFsdWUg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWI0ZnYoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlKQogewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliNHYs
IGV4ZWMsIGltcGwoKSk7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWI0
diwgc3RhdGUsIGltcGwoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcAppbmRleCAyMTc1ZmM2ZTFh
MWNlYjU1ZDY4MDgzN2FlZTgxZDQ2ZWZjZTc4ZmNmLi4wNWE5ZTcwMmU3YzgxOWJmN2I3NTFkOWJl
NzdjMTEyYmUzNTk0ZmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dvcmtlckN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3Jr
ZXJDdXN0b20uY3BwCkBAIC00MCw5ICs0MCw5IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotSlNDOjpKU1ZhbHVlIEpTV29ya2VyOjpwb3N0TWVzc2FnZShK
U0M6OkV4ZWNTdGF0ZSogZXhlYykKK0pTQzo6SlNWYWx1ZSBKU1dvcmtlcjo6cG9zdE1lc3NhZ2Uo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIHJldHVybiBoYW5kbGVQb3N0TWVzc2FnZShl
eGVjLCAmaW1wbCgpKTsKKyAgICByZXR1cm4gaGFuZGxlUG9zdE1lc3NhZ2Uoc3RhdGUsICZpbXBs
KCkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV29ya2Vy
KEV4ZWNTdGF0ZSogZXhlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAKaW5kZXggODU3ZDQ4MDlhN2QxY2FlZjRi
OGM2MWE1NjkwODVlNmI4NmQ1MjAxYS4uMTI4OThjYzk3NWJlZjUwMGIzYjEwZGJhZjFmNjUwYTg2
ZGMzYzMwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJH
bG9iYWxTY29wZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNX
b3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAKQEAgLTY3LDQzICs2Nyw0MyBAQCBib29sIEpTV29y
a2VyR2xvYmFsU2NvcGU6OmdldE93blByb3BlcnR5U2xvdERlbGVnYXRlKEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotSlNWYWx1ZSBKU1dvcmtlckds
b2JhbFNjb3BlOjppbXBvcnRTY3JpcHRzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNXb3Jr
ZXJHbG9iYWxTY29wZTo6aW1wb3J0U2NyaXB0cyhFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlm
ICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAgIGlmICghc3RhdGUuYXJndW1lbnRDb3VudCgp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IHVy
bHM7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsg
aSsrKSB7Ci0gICAgICAgIHVybHMuYXBwZW5kKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUuYXJndW1lbnRDb3VudCgp
OyArK2kpIHsKKyAgICAgICAgdXJscy5hcHBlbmQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSku
dG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKSk7CisgICAgICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKIAogICAgIGltcGwoKS5pbXBvcnRTY3JpcHRzKHVybHMs
IGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHNldERPTUV4Y2VwdGlv
bigmc3RhdGUsIGVjKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBK
U1dvcmtlckdsb2JhbFNjb3BlOjpzZXRUaW1lb3V0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUg
SlNXb3JrZXJHbG9iYWxTY29wZTo6c2V0VGltZW91dChFeGVjU3RhdGUmIHN0YXRlKQogewotICAg
IHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlv
bjo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCgpLT53b3JsZCgpLCBpbXBsKCkuY29udGVudFNl
Y3VyaXR5UG9saWN5KCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0aW9uPiBhY3Rpb24gPSBTY2hlZHVsZWRBY3Rpb246OmNy
ZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLT53b3JsZCgpLCBpbXBsKCkuY29udGVudFNlY3Vy
aXR5UG9saWN5KCkpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaWYgKCFhY3Rpb24pCiAgICAgICAgIHJldHVybiBqc051
bWJlcigwKTsKLSAgICBpbnQgZGVsYXkgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMp
OworICAgIGludCBkZWxheSA9IHN0YXRlLmFyZ3VtZW50KDEpLnRvSW50MzIoJnN0YXRlKTsKICAg
ICByZXR1cm4ganNOdW1iZXIoaW1wbCgpLnNldFRpbWVvdXQoV1RGOjptb3ZlKGFjdGlvbiksIGRl
bGF5KSk7CiB9CiAKLUpTVmFsdWUgSlNXb3JrZXJHbG9iYWxTY29wZTo6c2V0SW50ZXJ2YWwoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjpzZXRJbnRlcnZhbChF
eGVjU3RhdGUmIHN0YXRlKQogewotICAgIHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+
IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCgpLT53
b3JsZCgpLCBpbXBsKCkuY29udGVudFNlY3VyaXR5UG9saWN5KCkpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0aW9uPiBhY3Rp
b24gPSBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLT53b3Js
ZCgpLCBpbXBsKCkuY29udGVudFNlY3VyaXR5UG9saWN5KCkpOworICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaWYgKCFhY3Rp
b24pCiAgICAgICAgIHJldHVybiBqc051bWJlcigwKTsKLSAgICBpbnQgZGVsYXkgPSBleGVjLT5h
cmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOworICAgIGludCBkZWxheSA9IHN0YXRlLmFyZ3VtZW50
KDEpLnRvSW50MzIoJnN0YXRlKTsKICAgICByZXR1cm4ganNOdW1iZXIoaW1wbCgpLnNldEludGVy
dmFsKFdURjo6bW92ZShhY3Rpb24pLCBkZWxheSkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCmluZGV4IDBmOWMx
Y2FmMDAyMmFhZjFlN2E4ZDI0NmQ1ODE1ZmI4MTUyMDI2Y2UuLjExNTQ1NzQ1MzFkY2ZkNWM5Mzdh
NjVmOTI1ZDA0MTM2YzA3YjE2ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCkBAIC03MiwyMiArNzIsMjIgQEAgdm9p
ZCBKU1hNTEh0dHBSZXF1ZXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKIH0KIAogLy8gQ3VzdG9tIGZ1bmN0aW9ucwotSlNWYWx1ZSBKU1hNTEh0dHBSZXF1
ZXN0OjpvcGVuKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6b3Bl
bihFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAy
KQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291
bnQoKSA8IDIpCisgICAgICAgIHJldHVybiBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKLSAgICBjb25zdCBV
UkwmIHVybCA9IGltcGwoKS5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmNvbXBsZXRlVVJMKGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0g
ICAgU3RyaW5nIG1ldGhvZCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKKyAgICBjb25zdCBVUkwmIHVybCA9IGltcGwoKS5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPmNvbXBsZXRlVVJMKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRv
U3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSkpOworICAgIFN0cmluZyBtZXRob2QgPSBzdGF0
ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwog
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA+PSAzKSB7Ci0gICAgICAgIGJvb2wgYXN5bmMgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgy
KS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgICAgIGlmICghZXhlYy0+YXJndW1lbnQoMykuaXNVbmRl
ZmluZWQoKSkgewotICAgICAgICAgICAgU3RyaW5nIHVzZXIgPSB2YWx1ZVRvU3RyaW5nV2l0aE51
bGxDaGVjayhleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgzKSk7CisgICAgaWYgKHN0YXRl
LmFyZ3VtZW50Q291bnQoKSA+PSAzKSB7CisgICAgICAgIGJvb2wgYXN5bmMgPSBzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudCgyKS50b0Jvb2xlYW4oJnN0YXRlKTsKKyAgICAgICAgaWYgKCFzdGF0ZS5h
cmd1bWVudCgzKS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgICAgICBTdHJpbmcgdXNlciA9IHZh
bHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQo
MykpOwogCi0gICAgICAgICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDQpLmlzVW5kZWZpbmVkKCkp
IHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgcGFzc3dvcmQgPSB2YWx1ZVRvU3RyaW5nV2l0aE51
bGxDaGVjayhleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCg0KSk7CisgICAgICAgICAgICBp
ZiAoIXN0YXRlLmFyZ3VtZW50KDQpLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgICAgICAgICBT
dHJpbmcgcGFzc3dvcmQgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjaygmc3RhdGUsIHN0YXRl
LnVuY2hlY2tlZEFyZ3VtZW50KDQpKTsKICAgICAgICAgICAgICAgICBpbXBsKCkub3BlbihtZXRo
b2QsIHVybCwgYXN5bmMsIHVzZXIsIHBhc3N3b3JkLCBlYyk7CiAgICAgICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgICAgICBpbXBsKCkub3BlbihtZXRob2QsIHVybCwgYXN5bmMsIHVzZXIsIGVj
KTsKQEAgLTk2LDcgKzk2LDcgQEAgSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0OjpvcGVuKEV4ZWNT
dGF0ZSogZXhlYykKICAgICB9IGVsc2UKICAgICAgICAgaW1wbCgpLm9wZW4obWV0aG9kLCB1cmws
IGVjKTsKIAotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0
aW9uKCZzdGF0ZSwgZWMpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkBAIC0xMzYs
MTIgKzEzNiwxMiBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX3VybDsKIH07CiAKLUpTVmFsdWUg
SlNYTUxIdHRwUmVxdWVzdDo6c2VuZChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTWE1MSHR0
cFJlcXVlc3Q6OnNlbmQoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OndpbGxTZW5kWE1MSHR0cFJlcXVlc3QoaW1wbCgpLnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSwgaW1wbCgpLnVybCgpKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IEpTVmFsdWUgdmFsID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgSlNWYWx1ZSB2YWwgPSBzdGF0
ZS5hcmd1bWVudCgwKTsKICAgICBpZiAodmFsLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAg
IGltcGwoKS5zZW5kKGVjKTsKICAgICBlbHNlIGlmICh2YWwuaW5oZXJpdHMoSlNEb2N1bWVudDo6
aW5mbygpKSkKQEAgLTE1NiwyOCArMTU2LDI4IEBAIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6
c2VuZChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IHZp
ZXcgPSB0b0FycmF5QnVmZmVyVmlldyh2YWwpOwogICAgICAgICBpbXBsKCkuc2VuZCh2aWV3Lmdl
dCgpLCBlYyk7CiAgICAgfSBlbHNlCi0gICAgICAgIGltcGwoKS5zZW5kKHZhbC50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyksIGVjKTsKKyAgICAgICAgaW1wbCgpLnNlbmQodmFsLnRvU3RyaW5n
KCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSksIGVjKTsKIAogICAgIFNlbmRGdW5jdG9yIGZ1bmN0b3I7
Ci0gICAgZXhlYy0+aXRlcmF0ZShmdW5jdG9yKTsKKyAgICBzdGF0ZS5pdGVyYXRlKGZ1bmN0b3Ip
OwogICAgIGltcGwoKS5zZXRMYXN0U2VuZExpbmVBbmRDb2x1bW5OdW1iZXIoZnVuY3Rvci5saW5l
KCksIGZ1bmN0b3IuY29sdW1uKCkpOwogICAgIGltcGwoKS5zZXRMYXN0U2VuZFVSTChmdW5jdG9y
LnVybCgpKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHNldERPTUV4Y2Vw
dGlvbigmc3RhdGUsIGVjKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1
ZSBKU1hNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZVRleHQoRXhlY1N0YXRlKiBleGVjKSBjb25zdAor
SlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZVRleHQoRXhlY1N0YXRlJiBzdGF0ZSkg
Y29uc3QKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTdHJpbmcgdGV4dCA9IGlt
cGwoKS5yZXNwb25zZVRleHQoZWMpOwogICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgZWMpOworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KLSAgICByZXR1cm4ganNPd25lZFN0
cmluZ09yTnVsbChleGVjLCB0ZXh0KTsKKyAgICByZXR1cm4ganNPd25lZFN0cmluZ09yTnVsbCgm
c3RhdGUsIHRleHQpOwogfQogCi1KU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlKEV4
ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2Uo
RXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogVXNlIENhY2hlZEF0dHJp
YnV0ZSBmb3Igb3RoZXIgdHlwZXMgdGhhbiBKU09OIGFzIHdlbGwuCiAgICAgaWYgKG1fcmVzcG9u
c2UgJiYgaW1wbCgpLnJlc3BvbnNlQ2FjaGVJc1ZhbGlkKCkpCkBAIC0xODksMTUgKzE4OSwxNSBA
QCBKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlKEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKICAgICBzd2l0Y2ggKGltcGwoKS5yZXNwb25zZVR5cGVDb2RlKCkpIHsKICAgICBjYXNlIFhN
TEh0dHBSZXF1ZXN0OjpSZXNwb25zZVR5cGVEZWZhdWx0OgogICAgIGNhc2UgWE1MSHR0cFJlcXVl
c3Q6OlJlc3BvbnNlVHlwZVRleHQ6Ci0gICAgICAgIHJldHVybiByZXNwb25zZVRleHQoZXhlYyk7
CisgICAgICAgIHJldHVybiByZXNwb25zZVRleHQoc3RhdGUpOwogCiAgICAgY2FzZSBYTUxIdHRw
UmVxdWVzdDo6UmVzcG9uc2VUeXBlSlNPTjoKICAgICAgICAgewotICAgICAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTT05QYXJzZShleGVjLCBpbXBsKCkucmVzcG9uc2VUZXh0SWdub3JpbmdSZXNw
b25zZVR5cGUoKSk7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSlNPTlBhcnNlKCZzdGF0
ZSwgaW1wbCgpLnJlc3BvbnNlVGV4dElnbm9yaW5nUmVzcG9uc2VUeXBlKCkpOwogICAgICAgICAg
ICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgICAgICB2YWx1ZSA9IGpzTnVsbCgpOwogICAgICAg
ICAgICAgSlNYTUxIdHRwUmVxdWVzdCoganNSZXF1ZXN0ID0gY29uc3RfY2FzdDxKU1hNTEh0dHBS
ZXF1ZXN0Kj4odGhpcyk7Ci0gICAgICAgICAgICBqc1JlcXVlc3QtPm1fcmVzcG9uc2Uuc2V0KGV4
ZWMtPnZtKCksIGpzUmVxdWVzdCwgdmFsdWUpOworICAgICAgICAgICAganNSZXF1ZXN0LT5tX3Jl
c3BvbnNlLnNldChzdGF0ZS52bSgpLCBqc1JlcXVlc3QsIHZhbHVlKTsKIAogICAgICAgICAgICAg
aW1wbCgpLmRpZENhY2hlUmVzcG9uc2VKU09OKCk7CiAKQEAgLTIwOSwxNyArMjA5LDE3IEBAIEpT
VmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2UoRXhlY1N0YXRlKiBleGVjKSBjb25zdAog
ICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgICAgICAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBpbXBsKCkucmVzcG9uc2VYTUwoZWMpOwogICAgICAgICAgICAgaWYgKGVjKSB7
Ci0gICAgICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgICAg
ICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QoKSwgZG9jdW1lbnQpOworICAgICAgICAgICAgcmV0dXJuIHRvSlMo
JnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgZG9jdW1lbnQpOwogICAgICAgICB9CiAKICAgICBjYXNl
IFhNTEh0dHBSZXF1ZXN0OjpSZXNwb25zZVR5cGVCbG9iOgotICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgpLnJlc3BvbnNlQmxvYigpKTsKKyAgICAgICAgcmV0
dXJuIHRvSlMoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgpLnJlc3BvbnNlQmxvYigpKTsK
IAogICAgIGNhc2UgWE1MSHR0cFJlcXVlc3Q6OlJlc3BvbnNlVHlwZUFycmF5QnVmZmVyOgotICAg
ICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgpLnJlc3BvbnNlQXJy
YXlCdWZmZXIoKSk7CisgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCks
IGltcGwoKS5yZXNwb25zZUFycmF5QnVmZmVyKCkpOwogICAgIH0KIAogICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xU
UHJvY2Vzc29yQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFBy
b2Nlc3NvckN1c3RvbS5jcHAKaW5kZXggZDk4YWUwNDJlMTJjMDU4MDI2YzVkZTVlMjliMTY2Yjdm
NTZiODFhYy4uMzMxYjlmMWIwYmJmNTc5YWM0NTJkMDdlZGMxYjlmNjU4ZmNmNjE1ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDdXN0b20u
Y3BwCkBAIC00NiwzMyArNDYsMzMgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTWFNMVFByb2Nlc3Nvcjo6c2V0UGFyYW1ldGVyKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNYU0xUUHJvY2Vzc29yOjpzZXRQYXJhbWV0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51
bGwoKSB8fCBleGVjLT5hcmd1bWVudCgyKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgIGlmIChz
dGF0ZS5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpIHx8IHN0YXRlLmFyZ3VtZW50KDIp
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOyAvLyBU
aHJvdyBleGNlcHRpb24/Ci0gICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBTdHJpbmcgbG9j
YWxOYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwotICAgIFN0cmluZyB2YWx1ZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsK
KyAgICBTdHJpbmcgbG9jYWxOYW1lID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkudG9TdHJp
bmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKKyAgICBTdHJpbmcgdmFsdWUgPSBzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudCgyKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwogICAgIGlt
cGwoKS5zZXRQYXJhbWV0ZXIobmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUsIHZhbHVlKTsKICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6OmdldFBh
cmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTWFNMVFByb2Nlc3Nvcjo6Z2V0UGFy
YW1ldGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDEpLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCisgICAgaWYgKHN0YXRlLmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVk
T3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFN0cmluZyBuYW1l
c3BhY2VVUkkgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7Ci0gICAgU3RyaW5nIGxvY2FsTmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICBTdHJpbmcgbmFtZXNwYWNlVVJJ
ID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0
YXRlKTsKKyAgICBTdHJpbmcgbG9jYWxOYW1lID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSku
dG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKICAgICBTdHJpbmcgdmFsdWUgPSBpbXBs
KCkuZ2V0UGFyYW1ldGVyKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKTsKLSAgICByZXR1cm4ganNT
dHJpbmdPclVuZGVmaW5lZChleGVjLCB2YWx1ZSk7CisgICAgcmV0dXJuIGpzU3RyaW5nT3JVbmRl
ZmluZWQoJnN0YXRlLCB2YWx1ZSk7CiB9CiAKLUpTVmFsdWUgSlNYU0xUUHJvY2Vzc29yOjpyZW1v
dmVQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6OnJl
bW92ZVBhcmFtZXRlcihFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChleGVjLT5hcmd1bWVu
dCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgIGlmIChzdGF0ZS5hcmd1bWVudCgxKS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBTdHJp
bmcgbmFtZXNwYWNlVVJJID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwotICAgIFN0cmluZyBsb2NhbE5hbWUgPSBleGVjLT51bmNoZWNrZWRB
cmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgU3RyaW5nIG5hbWVz
cGFjZVVSSSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZh
bHVlKCZzdGF0ZSk7CisgICAgU3RyaW5nIGxvY2FsTmFtZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3Vt
ZW50KDEpLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CiAgICAgaW1wbCgpLnJlbW92
ZVBhcmFtZXRlcihuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSk7CiAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCmluZGV4IGRmNDRkMmZlZGI3Y2ZmZDFlZjMzNjI5ZTg4ZTUxOGRiOGM4YmZh
NDguLmUxOTE1YWEzYTBjZDc0MzQ5YmRlNDkwYzhlNDY4NDYxNWZiMmQxYjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC0x
MDc3LDEyICsxMDc3LDEyIEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICAgICAgaWYgKEhh
c0N1c3RvbUdldHRlcigkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcykp
IHsKICAgICAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2lmICR7Y29uZGl0aW9u
YWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAgICAgICAgICAgICAgICAgbXkg
JG1ldGhvZE5hbWUgPSAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkYXR0cmlidXRlLT5zaWdu
YXR1cmUtPm5hbWUpOwotICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
SlNDOjpKU1ZhbHVlICIgLiAkbWV0aG9kTmFtZSAuICIoSlNDOjpFeGVjU3RhdGUqKSBjb25zdDtc
biIpOworICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgSlNDOjpKU1Zh
bHVlICIgLiAkbWV0aG9kTmFtZSAuICIoSlNDOjpFeGVjU3RhdGUmKSBjb25zdDtcbiIpOwogICAg
ICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjZW5kaWZcbiIpIGlmICRjb25kaXRp
b25hbFN0cmluZzsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChIYXNDdXN0b21TZXR0
ZXIoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMpICYmICFJc1JlYWRv
bmx5KCRhdHRyaWJ1dGUpKSB7CiAgICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwotICAg
ICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCBzZXQiIC4gJGNvZGVH
ZW5lcmF0b3ItPldLX3VjZmlyc3QoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lKSAuICIoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICB2b2lkIHNldCIgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJz
dCgkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUpIC4gIihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2Vu
ZGlmXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
QEAgLTExMTcsNyArMTExNyw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICAgICAgbXkg
JGNvbmRpdGlvbmFsU3RyaW5nID0gJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ29uZGl0aW9uYWxT
dHJpbmcoJGZ1bmN0aW9uLT5zaWduYXR1cmUpOwogICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5n
OwogICAgICAgICAgICAgbXkgJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lID0gJGZ1bmN0aW9u
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbXBsZW1lbnRlZEFzIn0gfHwgJGNv
ZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUpOwotICAg
ICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAiIC4gKCRmdW5jdGlvbi0+aXNTdGF0
aWMgPyAic3RhdGljICIgOiAiIikgLiAiSlNDOjpKU1ZhbHVlICIgLiAkZnVuY3Rpb25JbXBsZW1l
bnRhdGlvbk5hbWUgLiAiKEpTQzo6RXhlY1N0YXRlKik7XG4iKTsKKyAgICAgICAgICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIgICAgIiAuICgkZnVuY3Rpb24tPmlzU3RhdGljID8gInN0YXRpYyAi
IDogIiIpIC4gIkpTQzo6SlNWYWx1ZSAiIC4gJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lIC4g
IihKU0M6OkV4ZWNTdGF0ZSYpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiI2VuZGlmXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAgICAgICAgIH0KICAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgJGVuZEFwcGxlQ29weXJpZ2h0KSBpZiAkaW5BcHBsZUNvcHly
aWdodDsKQEAgLTIzMzMsNyArMjMzMyw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAg
ICAgICAgICAgICB9ICMgYXR0cmlidXRlIE5vbmRldGVybWluaXN0aWMKIAogICAgICAgICAgICAg
aWYgKEhhc0N1c3RvbUdldHRlcigkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmli
dXRlcykpIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKHN0YXRl
KSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCpzdGF0
ZSkpO1xuIik7CiAgICAgICAgICAgICB9IGVsc2lmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJDaGVja1NlY3VyaXR5Rm9yTm9kZSJ9KSB7CiAgICAgICAgICAg
ICAgICAgJGltcGxJbmNsdWRlc3siSlNET01CaW5kaW5nLmgifSA9IDE7CiAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwo
KTtcbiIpOwpAQCAtMjYxOCw3ICsyNjE4LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24K
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKEhhc0N1c3RvbVNldHRlcigkYXR0cmli
dXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcykpIHsKLSAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBjYXN0ZWRUaGlzLT5zZXQkaW1wbFNldHRlckZ1bmN0aW9u
TmFtZShzdGF0ZSwgdmFsdWUpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgY2FzdGVkVGhpcy0+c2V0JGltcGxTZXR0ZXJGdW5jdGlvbk5hbWUoKnN0YXRlLCB2
YWx1ZSk7XG4iKTsKICAgICAgICAgICAgIH0gZWxzaWYgKCR0eXBlIGVxICJFdmVudEhhbmRsZXIi
KSB7CiAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siSlNFdmVudExpc3RlbmVyLmgifSA9
IDE7CiAgICAgICAgICAgICAgICAgbXkgJGV2ZW50TmFtZSA9IEV2ZW50SGFuZGxlckF0dHJpYnV0
ZUV2ZW50TmFtZSgkYXR0cmlidXRlKTsKQEAgLTI4NzQsNyArMjg3NCw3IEBAIHN1YiBHZW5lcmF0
ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYg
KCRpc0N1c3RvbSkgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPiIgLiAkZnVuY3Rpb25JbXBsZW1l
bnRhdGlvbk5hbWUgLiAiKHN0YXRlKSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT4iIC4g
JGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lIC4gIigqc3RhdGUpKTtcbiIpOwogICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7XG4iKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCRzdmdQcm9wZXJ0eVR5cGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKaW5kZXgg
YThjMTVlNjAwM2ZkNDI3NTFhZWI1ZDc0N2E2ZjZkN2YxOTI2NTY0Mi4uYTRjYWQwY2MwYzdmOWMx
OGIxZWNkYjM0NGI0MmJiNDVkMTgyNDhiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKQEAgLTUx
NSw3ICs1MTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3Ry
MyhFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhcwogICAgIFVOVVNFRF9QQVJBTShz
bG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgYXV0byogY2FzdGVk
VGhpcyA9IGpzQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihzbG90QmFzZSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5pbXBsZW1lbnRzU3RyMyhzdGF0ZSkpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+aW1wbGVtZW50c1N0cjMoKnN0YXRlKSk7
CiB9CiAKICNlbmRpZgpAQCAtNjA4LDcgKzYwOCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdElu
dGVyZmFjZVN1cHBsZW1lbnRhbFN0cjMoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RC
CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdEludGVyZmFjZSo+KHNsb3RC
YXNlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnN1cHBsZW1lbnRh
bFN0cjMoc3RhdGUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnN1
cHBsZW1lbnRhbFN0cjMoKnN0YXRlKSk7CiB9CiAKICNlbmRpZgpAQCAtNzA0LDcgKzcwNCw3IEBA
IHZvaWQgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjMoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNPYmplY3QqIGJhc2VPYmplY3QsIEVuCiAgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxK
U1Rlc3RJbnRlcmZhY2UqPihiYXNlT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGNhc3RlZFRoaXMtPnNldEltcGxlbWVu
dHNTdHIzKHN0YXRlLCB2YWx1ZSk7CisgICAgY2FzdGVkVGhpcy0+c2V0SW1wbGVtZW50c1N0cjMo
KnN0YXRlLCB2YWx1ZSk7CiB9CiAKICNlbmRpZgpAQCAtNzc1LDcgKzc3NSw3IEBAIHZvaWQgc2V0
SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMyhFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVj
dCogYmFzZU9iamVjdCwKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdEludGVy
ZmFjZSo+KGJhc2VPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgY2FzdGVkVGhpcy0+c2V0U3VwcGxlbWVudGFsU3RyMyhz
dGF0ZSwgdmFsdWUpOworICAgIGNhc3RlZFRoaXMtPnNldFN1cHBsZW1lbnRhbFN0cjMoKnN0YXRl
LCB2YWx1ZSk7CiB9CiAKICNlbmRpZgpAQCAtODU5LDcgKzg1OSw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRz
TWV0aG9kMyhFCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKICAgICAgICAgcmV0dXJu
IHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNN
ZXRob2QzIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rl
c3RJbnRlcmZhY2U6OmluZm8oKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRU
aGlzLT5pbXBsZW1lbnRzTWV0aG9kMyhzdGF0ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoY2FzdGVkVGhpcy0+aW1wbGVtZW50c01ldGhvZDMoKnN0YXRlKSk7CiB9CiAKICNlbmRpZgpA
QCAtOTI1LDcgKzkyNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50
ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QzCiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkKICAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3Rh
dGUsICJUZXN0SW50ZXJmYWNlIiwgInN1cHBsZW1lbnRhbE1ldGhvZDMiKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdEludGVyZmFjZTo6aW5mbygpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnN1cHBsZW1lbnRhbE1ldGhv
ZDMoc3RhdGUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnN1cHBs
ZW1lbnRhbE1ldGhvZDMoKnN0YXRlKSk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5oCmlu
ZGV4IDQ3ZjA3ODI5MWZjN2UzMjBjMGQ4YjhmNGMwNGY2ZGNhMjNmYWVkMjkuLjEwY2Y4ZmIyNDA2
MTIxZDBhNzBiZWEyY2I1NWFhYjM4OGVhZTRjMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmgKQEAgLTYw
LDI0ICs2MCwyNCBAQCBwdWJsaWM6CiAKICAgICAvLyBDdXN0b20gYXR0cmlidXRlcwogI2lmIEVO
QUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotICAgIEpTQzo6SlNWYWx1
ZSBpbXBsZW1lbnRzU3RyMyhKU0M6OkV4ZWNTdGF0ZSopIGNvbnN0OworICAgIEpTQzo6SlNWYWx1
ZSBpbXBsZW1lbnRzU3RyMyhKU0M6OkV4ZWNTdGF0ZSYpIGNvbnN0OwogI2VuZGlmCiAjaWYgRU5B
QkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi0gICAgdm9pZCBzZXRJbXBs
ZW1lbnRzU3RyMyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSk7CisgICAgdm9pZCBzZXRJ
bXBsZW1lbnRzU3RyMyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CiAjZW5kaWYKICNp
ZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLSAgICBKU0M6OkpT
VmFsdWUgc3VwcGxlbWVudGFsU3RyMyhKU0M6OkV4ZWNTdGF0ZSopIGNvbnN0OworICAgIEpTQzo6
SlNWYWx1ZSBzdXBwbGVtZW50YWxTdHIzKEpTQzo6RXhlY1N0YXRlJikgY29uc3Q7CiAjZW5kaWYK
ICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLSAgICB2b2lk
IHNldFN1cHBsZW1lbnRhbFN0cjMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpOworICAg
IHZvaWQgc2V0U3VwcGxlbWVudGFsU3RyMyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
CiAjZW5kaWYKIAogICAgIC8vIEN1c3RvbSBmdW5jdGlvbnMKICNpZiBFTkFCTEUoQ29uZGl0aW9u
MjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLSAgICBKU0M6OkpTVmFsdWUgaW1wbGVtZW50c01l
dGhvZDMoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBKU0M6OkpTVmFsdWUgaW1wbGVtZW50c01ldGhv
ZDMoSlNDOjpFeGVjU3RhdGUmKTsKICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwg
RU5BQkxFKENvbmRpdGlvbjEyKQotICAgIEpTQzo6SlNWYWx1ZSBzdXBwbGVtZW50YWxNZXRob2Qz
KEpTQzo6RXhlY1N0YXRlKik7CisgICAgSlNDOjpKU1ZhbHVlIHN1cHBsZW1lbnRhbE1ldGhvZDMo
SlNDOjpFeGVjU3RhdGUmKTsKICNlbmRpZgogICAgIFRlc3RJbnRlcmZhY2UmIGltcGwoKSBjb25z
dCB7IHJldHVybiAqbV9pbXBsOyB9CiAgICAgdm9pZCByZWxlYXNlSW1wbCgpIHsgc3RkOjpleGNo
YW5nZShtX2ltcGwsIG51bGxwdHIpLT5kZXJlZigpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IGEwMjJhZjRi
MmQ1YjAwODdlMzA0MzAzOTU1ZDQ4OWQ5MTMwMmE1ZjEuLjgwMTk3OGRlMWI0MGY0ZmIwN2U0YWQw
ZmI3NmE0Y2VlYWJkNWY0MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBAIC0xMzAyLDcgKzEzMDIsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDdXN0b21BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0
KiBzbG90QmFzZSwgRW5jb2RlZAogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rl
c3RPYmoqPihzbG90QmFzZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlz
LT5jdXN0b21BdHRyKHN0YXRlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRU
aGlzLT5jdXN0b21BdHRyKCpzdGF0ZSkpOwogfQogCiAKQEAgLTI1NzMsNyArMjU3Myw3IEBAIHZv
aWQgc2V0SlNUZXN0T2JqQ3VzdG9tQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFz
ZU9iamVjdCwgRW5jb2RlZEpTVmFsCiAgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rl
c3RPYmoqPihiYXNlT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGNhc3RlZFRoaXMtPnNldEN1c3RvbUF0dHIoc3RhdGUs
IHZhbHVlKTsKKyAgICBjYXN0ZWRUaGlzLT5zZXRDdXN0b21BdHRyKCpzdGF0ZSwgdmFsdWUpOwog
fQogCiAKQEAgLTM0ODcsNyArMzQ4Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2QoRXhlY1N0YXRlKiBzCiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKICAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVF
cnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImN1c3RvbU1ldGhvZCIpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+Y3VzdG9tTWV0aG9kKHN0YXRlKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5jdXN0b21NZXRob2QoKnN0YXRlKSk7
CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25DdXN0b21NZXRob2RXaXRoQXJncyhFeGVjU3RhdGUqIHN0YXRlKQpAQCAtMzQ5Nyw3ICsz
NDk3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkN1c3RvbU1ldGhvZFdpdGhBcmdzKEV4ZWMKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKQogICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RP
YmoiLCAiY3VzdG9tTWV0aG9kV2l0aEFyZ3MiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGNhc3RlZFRoaXMtPmN1c3RvbU1ldGhvZFdpdGhBcmdzKHN0YXRlKSk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5jdXN0b21NZXRob2RXaXRoQXJncygqc3Rh
dGUpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBzdGF0ZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAppbmRleCAz
NTQ2MzExYjRiNWZkZmQxYmU4ODA3MmVhMmQ5NmJiYmZmZjY4NGU5Li44OGNhYjg2OTAyYmJjZWI2
ODYwNTcxYmUwZGRjMDQ1NjQ0MTMxZTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCkBAIC01OCwxMyArNTgsMTMgQEAgcHVi
bGljOgogCiAKICAgICAvLyBDdXN0b20gYXR0cmlidXRlcwotICAgIEpTQzo6SlNWYWx1ZSBjdXN0
b21BdHRyKEpTQzo6RXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgdm9pZCBzZXRDdXN0b21BdHRyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsKKyAgICBKU0M6OkpTVmFsdWUgY3VzdG9tQXR0
cihKU0M6OkV4ZWNTdGF0ZSYpIGNvbnN0OworICAgIHZvaWQgc2V0Q3VzdG9tQXR0cihKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CiAKICAgICAvLyBDdXN0b20gZnVuY3Rpb25zCi0gICAg
SlNDOjpKU1ZhbHVlIGN1c3RvbU1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOwotICAgIEpTQzo6SlNW
YWx1ZSBjdXN0b21NZXRob2RXaXRoQXJncyhKU0M6OkV4ZWNTdGF0ZSopOwotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY2xhc3NNZXRob2QyKEpTQzo6RXhlY1N0YXRlKik7CisgICAgSlNDOjpKU1Zh
bHVlIGN1c3RvbU1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYpOworICAgIEpTQzo6SlNWYWx1ZSBjdXN0
b21NZXRob2RXaXRoQXJncyhKU0M6OkV4ZWNTdGF0ZSYpOworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY2xhc3NNZXRob2QyKEpTQzo6RXhlY1N0YXRlJik7CiAgICAgVGVzdE9iaiYgaW1wbCgpIGNv
bnN0IHsgcmV0dXJuICptX2ltcGw7IH0KICAgICB2b2lkIHJlbGVhc2VJbXBsKCkgeyBzdGQ6OmV4
Y2hhbmdlKG1faW1wbCwgbnVsbHB0ciktPmRlcmVmKCk7IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261623</attachid>
            <date>2015-09-20 19:01:19 -0700</date>
            <delta_ts>2015-09-20 19:42:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149393-20150920190104.patch</filename>
            <type>text/plain</type>
            <size>244380</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwMDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzhjYWVkYmY4N2EwMjcx
ZGUzY2Y0NDA4NzMzNzAzOWRiODUxODdlOC4uOTYxNGE4MjE5OTAwYTU3OTQ0YzE1M2U1OWZmZTI2
YzhlNmQzNmI4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1IEBACiAyMDE1LTA5LTIwICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgUGFzcyBKU0M6OkV4ZWNTdGF0
ZSB0byB0aGUgY3VzdG9tIGJpbmRpbmdzIGJ5IHJlZmVyZW5jZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5MzkzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGFzcyBKU0M6OkV4ZWNTdGF0ZSB0byB0aGUg
Y3VzdG9tIGJpbmRpbmdzIGJ5IHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGJ5CisgICAgICAgIHBvaW50
ZXIgYXMgaXQgaXMgZXhwZWN0ZWQgdG8gYmUgbm9uLW51bGwuCisKKzIwMTUtMDktMjAgIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwogICAgICAgICBSZWdyZXNzaW9uKHIxOTAwMjMp
OiBmYXN0L2RvbS9uYXZpZ2F0aW9uLXdpdGgtc2lkZWVmZmVjdHMtY3Jhc2guaHRtbCBpcyBjcmFz
aGluZwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5
MzkyCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1Rp
bWVQbHVnaW5SZXBsYWNlbWVudC5tbSBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9R
dWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQppbmRleCBmMmFhZWU2M2NmYmI5YzU1OGYwNTdl
OGY0NjNhYmM1NTJmOGYxZWY3Li4xNmJiMThiYTViMjZlMTY5ZmJjZWZhYzVlNDZhYzZlMTIzODk1
NWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5z
L1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCkBAIC0zNjYsNyArMzY2LDcgQEAgc3RhdGlj
IEpTVmFsdWUgKmpzVmFsdWVXaXRoQVZNZXRhZGF0YUl0ZW1JbkNvbnRleHQoQVZNZXRhZGF0YUl0
ZW1UeXBlICppdGVtLCBKU0MKIH0KICNlbmRpZgogCi1KU0M6OkpTVmFsdWUgSlNRdWlja1RpbWVQ
bHVnaW5SZXBsYWNlbWVudDo6dGltZWRNZXRhRGF0YShKU0M6OkV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKK0pTQzo6SlNWYWx1ZSBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Ojp0aW1lZE1ldGFE
YXRhKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICNpZiBQTEFURk9STShJT1MpCiAg
ICAgSFRNTFZpZGVvRWxlbWVudCogcGFyZW50ID0gaW1wbCgpLnBhcmVudEVsZW1lbnQoKTsKQEAg
LTM4NCwxNCArMzg0LDE0IEBAIEpTQzo6SlNWYWx1ZSBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2Vt
ZW50Ojp0aW1lZE1ldGFEYXRhKEpTQzo6RXhlY1N0YXRlKiBleGVjKSBjCiAgICAgSlNDb250ZXh0
ICpqc0NvbnRleHQgPSBmcmFtZS0+c2NyaXB0KCkuamF2YVNjcmlwdENvbnRleHQoKTsKICAgICBK
U1ZhbHVlICptZXRhRGF0YVZhbHVlID0ganNWYWx1ZVdpdGhWYWx1ZUluQ29udGV4dChtZXRhRGF0
YSwganNDb250ZXh0KTsKICAgICAKLSAgICByZXR1cm4gdG9KUyhleGVjLCBbbWV0YURhdGFWYWx1
ZSBKU1ZhbHVlUmVmXSk7CisgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBbbWV0YURhdGFWYWx1ZSBK
U1ZhbHVlUmVmXSk7CiAjZWxzZQotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwogI2VuZGlmCiB9CiAKLUpT
Qzo6SlNWYWx1ZSBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjphY2Nlc3NMb2coSlNDOjpF
eGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU0M6OkpTVmFsdWUgSlNRdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudDo6YWNjZXNzTG9nKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICNpZiBQ
TEFURk9STShJT1MpCiAgICAgSFRNTFZpZGVvRWxlbWVudCogcGFyZW50ID0gaW1wbCgpLnBhcmVu
dEVsZW1lbnQoKTsKQEAgLTQwNiwxNCArNDA2LDE0IEBAIEpTQzo6SlNWYWx1ZSBKU1F1aWNrVGlt
ZVBsdWdpblJlcGxhY2VtZW50OjphY2Nlc3NMb2coSlNDOjpFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
CiAgICAgU3RyaW5nIGFjY2Vzc0xvZ1N0cmluZyA9IHBhcmVudC0+cGxheWVyKCktPmFjY2Vzc0xv
ZygpOwogICAgIFtkaWN0aW9uYXJ5IHNldFZhbHVlOnN0YXRpY19jYXN0PE5TU3RyaW5nICo+KGFj
Y2Vzc0xvZ1N0cmluZykgZm9yUHJvcGVydHk6KE5TU3RyaW5nICopQ0ZTVFIoImV4dGVuZGVkTG9n
IildOwogCi0gICAgcmV0dXJuIHRvSlMoZXhlYywgW2RpY3Rpb25hcnkgSlNWYWx1ZVJlZl0pOwor
ICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgW2RpY3Rpb25hcnkgSlNWYWx1ZVJlZl0pOwogI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBy
ZXR1cm4gSlNDOjpqc051bGwoKTsKICNlbmRpZgogfQogCi1KU0M6OkpTVmFsdWUgSlNRdWlja1Rp
bWVQbHVnaW5SZXBsYWNlbWVudDo6ZXJyb3JMb2coSlNDOjpFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
CitKU0M6OkpTVmFsdWUgSlNRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6ZXJyb3JMb2coSlND
OjpFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewogI2lmIFBMQVRGT1JNKElPUykKICAgICBIVE1M
VmlkZW9FbGVtZW50KiBwYXJlbnQgPSBpbXBsKCkucGFyZW50RWxlbWVudCgpOwpAQCAtNDI4LDkg
KzQyOCw5IEBAIEpTQzo6SlNWYWx1ZSBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjplcnJv
ckxvZyhKU0M6OkV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICBTdHJpbmcgZXJyb3JMb2dTdHJp
bmcgPSBwYXJlbnQtPnBsYXllcigpLT5lcnJvckxvZygpOwogICAgIFtkaWN0aW9uYXJ5IHNldFZh
bHVlOnN0YXRpY19jYXN0PE5TU3RyaW5nICo+KGVycm9yTG9nU3RyaW5nKSBmb3JQcm9wZXJ0eToo
TlNTdHJpbmcgKilDRlNUUigiZXh0ZW5kZWRMb2ciKV07CiAKLSAgICByZXR1cm4gdG9KUyhleGVj
LCBbZGljdGlvbmFyeSBKU1ZhbHVlUmVmXSk7CisgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBbZGlj
dGlvbmFyeSBKU1ZhbHVlUmVmXSk7CiAjZWxzZQotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwogI2VuZGlm
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVy
U291cmNlTm9kZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlv
QnVmZmVyU291cmNlTm9kZUN1c3RvbS5jcHAKaW5kZXggZjNkOWRiZjM3MGJmMWM5YWE1NjFjNzIx
ZmZkOTUzZDM3YTY5ODk2OC4uMWM5YzMyOGIxMjEyNWQ5YmJlMzkyY2UzMWUyNjM4MTZlMmYxMzRl
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0J1ZmZlclNv
dXJjZU5vZGVDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVk
aW9CdWZmZXJTb3VyY2VOb2RlQ3VzdG9tLmNwcApAQCAtMzksMTYgKzM5LDE2IEBAIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0F1ZGlvQnVmZmVy
U291cmNlTm9kZTo6c2V0QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3Zv
aWQgSlNBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OnNldEJ1ZmZlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQogewogICAgIEF1ZGlvQnVmZmVyKiBidWZmZXIgPSBKU0F1ZGlvQnVmZmVy
Ojp0b1dyYXBwZWQodmFsdWUpOwogICAgIGlmICghYnVmZmVyKSB7Ci0gICAgICAgIGV4ZWMtPnZt
KCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJWYWx1ZSBpcyBu
b3Qgb2YgdHlwZSBBdWRpb0J1ZmZlciIpKTsKKyAgICAgICAgc3RhdGUudm0oKS50aHJvd0V4Y2Vw
dGlvbigmc3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJWYWx1ZSBpcyBub3Qgb2YgdHlw
ZSBBdWRpb0J1ZmZlciIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAo
IWltcGwoKS5zZXRCdWZmZXIoYnVmZmVyKSkKLSAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2Vw
dGlvbihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkF1ZGlvQnVmZmVyIHVuc3VwcG9ydGVk
IG51bWJlciBvZiBjaGFubmVscyIpKTsKKyAgICAgICAgc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlv
bigmc3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJBdWRpb0J1ZmZlciB1bnN1cHBvcnRl
ZCBudW1iZXIgb2YgY2hhbm5lbHMiKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCmlu
ZGV4IDQ0MDA1NzllMzY0OTc3MTc3NmM2NWQ2YTQ2ZjVkODNiMmVhODZjYzYuLjM2ZjMxZDlkNjJl
Y2Q3OGZkMWFhZjE5MWMyMmI5YTU1MDAyMjc3M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcApAQCAtNDAsMjggKzQwLDI4IEBAIHZv
aWQgSlNBdWRpb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmaW1wbCgpKSk7CiB9CiAKLXZv
aWQgSlNBdWRpb1RyYWNrOjpzZXRLaW5kKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkK
K3ZvaWQgSlNBdWRpb1RyYWNrOjpzZXRLaW5kKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFs
dWUpCiB7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKLSAgICBhdXRvJiBzdHJpbmcgPSB2YWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZz
dGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAg
ICAgaW1wbCgpLnNldEtpbmQoc3RyaW5nKTsKICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGV4ZWMp
OworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKICNl
bmRpZgogfQogCi12b2lkIEpTQXVkaW9UcmFjazo6c2V0TGFuZ3VhZ2UoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU0F1ZGlvVHJhY2s6OnNldExhbmd1YWdlKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKLSAg
ICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3Ry
aW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm47CiAgICAgaW1wbCgpLnNldExhbmd1YWdlKHN0cmluZyk7CiAjZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh2YWx1ZSk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQmlxdWFkRmlsdGVyTm9kZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0JpcXVhZEZpbHRlck5vZGVDdXN0b20uY3BwCmluZGV4IGY4YzEz
ODUzMDlkODIwMDRlNjJlZmUwZmE0OTJlZjUwZDJmZjM1YTEuLmY2ZmE4NmY1YzM3NGZlYmJjMGI4
MWJmZmNhZmM1ZWVkY2E0MWIzMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQmlxdWFkRmlsdGVyTm9kZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNCaXF1YWRGaWx0ZXJOb2RlQ3VzdG9tLmNwcApAQCAtMzcsMjYgKzM3LDI2IEBA
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0Jp
cXVhZEZpbHRlck5vZGU6OnNldFR5cGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQor
dm9pZCBKU0JpcXVhZEZpbHRlck5vZGU6OnNldFR5cGUoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSkKIHsKICNpZiBFTkFCTEUoTEVHQUNZX1dFQl9BVURJTykKICAgICBpZiAodmFsdWUu
aXNOdW1iZXIoKSkgewotICAgICAgICB1aW50MzJfdCB0eXBlID0gdmFsdWUudG9VSW50MzIoZXhl
Yyk7CisgICAgICAgIHVpbnQzMl90IHR5cGUgPSB2YWx1ZS50b1VJbnQzMigmc3RhdGUpOwogICAg
ICAgICBpZiAoIWltcGwoKS5zZXRUeXBlKHR5cGUpKQotICAgICAgICAgICAgZXhlYy0+dm0oKS50
aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIklsbGVnYWwgQmlxdWFk
RmlsdGVyTm9kZSB0eXBlIikpOworICAgICAgICAgICAgc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlv
bigmc3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJJbGxlZ2FsIEJpcXVhZEZpbHRlck5v
ZGUgdHlwZSIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgogCiAgICAgaWYgKHZh
bHVlLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgU3RyaW5nIHR5cGUgPSB2YWx1ZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAgIFN0cmluZyB0eXBlID0gdmFsdWUudG9TdHJpbmco
JnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKICAgICAgICAgaWYgKHR5cGUgPT0gImxvd3Bhc3MiIHx8
IHR5cGUgPT0gImhpZ2hwYXNzIiB8fCB0eXBlID09ICJiYW5kcGFzcyIgfHwgdHlwZSA9PSAibG93
c2hlbGYiIHx8IHR5cGUgPT0gImhpZ2hzaGVsZiIgfHwgdHlwZSA9PSAicGVha2luZyIgfHwgdHlw
ZSA9PSAibm90Y2giIHx8IHR5cGUgPT0gImFsbHBhc3MiKSB7CiAgICAgICAgICAgICBpbXBsKCku
c2V0VHlwZSh0eXBlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KICAg
ICAKLSAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCAiSWxsZWdhbCBCaXF1YWRGaWx0ZXJOb2RlIHR5cGUiKSk7CisgICAgc3RhdGUudm0oKS50
aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsICJJbGxlZ2FsIEJp
cXVhZEZpbHRlck5vZGUgdHlwZSIpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9u
Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJh
dGlvbkN1c3RvbS5jcHAKaW5kZXggZTk5ZGUyMWE3NWQ3MzljMzk0YWE0MmJkZDE4Yjc1OWM4OTgw
MTAwNy4uZGUyZjkwNzM0NWE3NjhmNWNlZjM2ODg0OTYyN2NiNDJkNWU0NTFlYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9t
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRp
b25DdXN0b20uY3BwCkBAIC0zNDcsMTAgKzM0NywxMCBAQCBib29sIEpTQ1NTU3R5bGVEZWNsYXJh
dGlvbjo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YQogICAgIHJldHVybiB0cnVlOwogfQogCi1KU1ZhbHVlIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6
Z2V0UHJvcGVydHlDU1NWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ1NTU3R5bGVE
ZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShFeGVjU3RhdGUmIHN0YXRlKQogewotICAg
IGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBj
b25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSA9IHN0YXRlLmFyZ3VtZW50KDApLnRvU3RyaW5nKCZz
dGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFs
dWUgPSBpbXBsKCkuZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eU5hbWUpOwpAQCAtMzU4LDcg
KzM1OCw3IEBAIEpTVmFsdWUgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1Zh
bHVlKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCiAgICAgZ2xv
YmFsT2JqZWN0KCktPndvcmxkKCkubV9jc3NWYWx1ZVJvb3RzLmFkZChjc3NWYWx1ZS5nZXQoKSwg
cm9vdCgmaW1wbCgpKSk7IC8vIEJhbGFuY2VkIGJ5IEpTQ1NTVmFsdWVPd25lcjo6ZmluYWxpemUo
KS4KLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoY3Nz
VmFsdWUpKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBXVEY6Omdl
dFB0cihjc3NWYWx1ZSkpOwogfQogCiB2b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQ3VzdG9tLmNwcAppbmRleCBlZmE1MzlmYjU0Yjg2OTRiZGQzYmM5Zjc0NGYyYTY1
NDIxMDZmMjZkLi5kYzViNTFlOGI5N2VmNTllMjViN2ZiYmY3MDIwNTI4YjM3MDM5ODc5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCkBAIC01OSwzNyArNTksMzcgQEAgc3RhdGljIENh
bnZhc1N0eWxlIHRvSFRNTENhbnZhc1N0eWxlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgdmFsdWUpCiAg
ICAgcmV0dXJuIENhbnZhc1N0eWxlKCk7CiB9CiAKLUpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnN0cm9rZVN0eWxlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVN0eWxlKEV4ZWNTdGF0ZSYgc3RhdGUpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGltcGwoKS5zdHJv
a2VTdHlsZSgpKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBpbXBs
KCkuc3Ryb2tlU3R5bGUoKSk7CiB9CiAKLXZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnNldFN0cm9rZVN0eWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZVN0eWxlKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEJiBjb250ZXh0
ID0gaW1wbCgpOwogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIGNvbnRleHQu
c2V0U3Ryb2tlQ29sb3IoYXNTdHJpbmcodmFsdWUpLT52YWx1ZShleGVjKSk7CisgICAgICAgIGNv
bnRleHQuc2V0U3Ryb2tlQ29sb3IoYXNTdHJpbmcodmFsdWUpLT52YWx1ZSgmc3RhdGUpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKHRvSFRNTENh
bnZhc1N0eWxlKGV4ZWMsIHZhbHVlKSk7CisgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZSh0b0hU
TUxDYW52YXNTdHlsZSgmc3RhdGUsIHZhbHVlKSk7CiB9CiAKLUpTVmFsdWUgSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmZpbGxTdHlsZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVl
IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsU3R5bGUoRXhlY1N0YXRlJiBzdGF0ZSkg
Y29uc3QKIHsKLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgpLmZp
bGxTdHlsZSgpKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBpbXBs
KCkuZmlsbFN0eWxlKCkpOwogfQogCi12b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
ZXRGaWxsU3R5bGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbFN0eWxlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgdmFsdWUpCiB7CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEJiBjb250ZXh0ID0gaW1w
bCgpOwogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIGNvbnRleHQuc2V0Rmls
bENvbG9yKGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUoZXhlYykpOworICAgICAgICBjb250ZXh0LnNl
dEZpbGxDb2xvcihhc1N0cmluZyh2YWx1ZSktPnZhbHVlKCZzdGF0ZSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIGNvbnRleHQuc2V0RmlsbFN0eWxlKHRvSFRNTENhbnZhc1N0eWxlKGV4
ZWMsIHZhbHVlKSk7CisgICAgY29udGV4dC5zZXRGaWxsU3R5bGUodG9IVE1MQ2FudmFzU3R5bGUo
JnN0YXRlLCB2YWx1ZSkpOwogfQogCi1KU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Ojp3ZWJraXRMaW5lRGFzaChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjp3ZWJraXRMaW5lRGFzaChFeGVjU3RhdGUmIHN0YXRlKSBjb25z
dAogewogICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGRhc2ggPSBpbXBsKCkuZ2V0TGluZURhc2go
KTsKIApAQCAtOTcsMTAgKzk3LDEwIEBAIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OndlYmtpdExpbmVEYXNoKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICBWZWN0b3I8Zmxv
YXQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBkYXNoLmVuZCgpOwogICAgIGZvciAoVmVjdG9yPGZs
b2F0Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXNoLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
ICAgICAgICAgbGlzdC5hcHBlbmQoSlNWYWx1ZSgqaXQpKTsKLSAgICByZXR1cm4gY29uc3RydWN0
QXJyYXkoZXhlYywgMCwgZ2xvYmFsT2JqZWN0KCksIGxpc3QpOworICAgIHJldHVybiBjb25zdHJ1
Y3RBcnJheSgmc3RhdGUsIDAsIGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKIH0KIAotdm9pZCBKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0V2Via2l0TGluZURhc2goRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0V2Vi
a2l0TGluZURhc2goRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAo
IWlzSlNBcnJheSh2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwOCw3ICsxMDgsNyBAQCB2
b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRXZWJraXRMaW5lRGFzaChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdmFsdQogICAgIFZlY3RvcjxmbG9hdD4gZGFzaDsKICAgICBKU0Fy
cmF5KiB2YWx1ZUFycmF5ID0gYXNBcnJheSh2YWx1ZSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZhbHVlQXJyYXktPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgZmxvYXQgZWxlbSA9
IHZhbHVlQXJyYXktPmdldEluZGV4KGV4ZWMsIGkpLnRvRmxvYXQoZXhlYyk7CisgICAgICAgIGZs
b2F0IGVsZW0gPSB2YWx1ZUFycmF5LT5nZXRJbmRleCgmc3RhdGUsIGkpLnRvRmxvYXQoJnN0YXRl
KTsKICAgICAgICAgaWYgKGVsZW0gPD0gMCB8fCAhc3RkOjppc2Zpbml0ZShlbGVtKSkKICAgICAg
ICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDaGFyYWN0ZXJEYXRhQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q2hhcmFjdGVyRGF0YUN1c3RvbS5jcHAKaW5kZXggNzY0MzQ0ZGRjMTc3ZTczMTAyZGE5MjQ1MWIz
N2JkZjVlYTlhMTMyYy4uY2I4MzFkMDRjZmI4ZWY4NTY4NDc2YmQ4ZmRlM2Y4ZjgyZTlhN2M5MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDaGFyYWN0ZXJEYXRhQ3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NoYXJhY3RlckRhdGFD
dXN0b20uY3BwCkBAIC0zMywyOSArMzMsMjkgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTQ2hhcmFjdGVyRGF0YTo6YmVmb3JlKEV4ZWNT
dGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ2hhcmFjdGVyRGF0YTo6YmVmb3JlKEV4ZWNTdGF0ZSYg
c3RhdGUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wbCgpLmJlZm9yZSh0
b05vZGVPclN0cmluZ1ZlY3Rvcigqc3RhdGUpLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKHN0
YXRlLCBlYyk7CisgICAgaW1wbCgpLmJlZm9yZSh0b05vZGVPclN0cmluZ1ZlY3RvcihzdGF0ZSks
IGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0NoYXJhY3RlckRhdGE6OmFmdGVyKEV4ZWNTdGF0
ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ2hhcmFjdGVyRGF0YTo6YWZ0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCkuYWZ0ZXIodG9Ob2Rl
T3JTdHJpbmdWZWN0b3IoKnN0YXRlKSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwg
ZWMpOworICAgIGltcGwoKS5hZnRlcih0b05vZGVPclN0cmluZ1ZlY3RvcihzdGF0ZSksIGVjKTsK
KyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0NoYXJhY3RlckRhdGE6OnJlcGxhY2VXaXRoKEV4ZWNTdGF0
ZSogc3RhdGUpCitKU1ZhbHVlIEpTQ2hhcmFjdGVyRGF0YTo6cmVwbGFjZVdpdGgoRXhlY1N0YXRl
JiBzdGF0ZSkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCkucmVwbGFj
ZVdpdGgodG9Ob2RlT3JTdHJpbmdWZWN0b3IoKnN0YXRlKSwgZWMpOwotICAgIHNldERPTUV4Y2Vw
dGlvbihzdGF0ZSwgZWMpOworICAgIGltcGwoKS5yZXBsYWNlV2l0aCh0b05vZGVPclN0cmluZ1Zl
Y3RvcihzdGF0ZSksIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9tLmNwcAppbmRleCA4ZDJkMDIw
NjRlNTdlYWE0NzgxODBiYjhlNDViZDMwMDRlOGYzMTdiLi5iMDY1ZDVjZmYxY2YxYjUwNjQ3NDU5
NjJiZGNkOGQ2MWRmNzY3ZjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NvbW1hbmRMaW5lQVBJSG9zdEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDb21tYW5kTGluZUFQSUhvc3RDdXN0b20uY3BwCkBAIC01NSwyMyArNTUsMjMg
QEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVl
IEpTQ29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0ZWRPYmplY3QoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0NvbW1hbmRMaW5lQVBJSG9zdDo6aW5zcGVjdGVkT2JqZWN0KEV4ZWNTdGF0ZSYg
c3RhdGUpCiB7CiAgICAgQ29tbWFuZExpbmVBUElIb3N0OjpJbnNwZWN0YWJsZU9iamVjdCogb2Jq
ZWN0ID0gaW1wbCgpLmluc3BlY3RlZE9iamVjdCgpOwogICAgIGlmICghb2JqZWN0KQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwot
ICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHNjcmlwdFZhbHVlID0gb2JqZWN0LT5nZXQoZXhl
Yyk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soJnN0YXRlKTsKKyAgICBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSBzY3JpcHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSk7CiAgICAgaWYgKHNjcmlw
dFZhbHVlLmhhc05vVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAg
ICByZXR1cm4gc2NyaXB0VmFsdWUuanNWYWx1ZSgpOwogfQogCi1zdGF0aWMgSlNBcnJheSogZ2V0
SlNMaXN0ZW5lckZ1bmN0aW9ucyhFeGVjU3RhdGUqIGV4ZWMsIERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgRXZlbnRMaXN0ZW5lckluZm8mIGxpc3RlbmVySW5mbykKK3N0YXRpYyBKU0FycmF5KiBn
ZXRKU0xpc3RlbmVyRnVuY3Rpb25zKEV4ZWNTdGF0ZSYgc3RhdGUsIERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgRXZlbnRMaXN0ZW5lckluZm8mIGxpc3RlbmVySW5mbykKIHsKLSAgICBKU0FycmF5
KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpOworICAgIEpTQXJy
YXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoJnN0YXRlLCBudWxscHRyKTsKICAgICBz
aXplX3QgaGFuZGxlcnNDb3VudCA9IGxpc3RlbmVySW5mby5ldmVudExpc3RlbmVyVmVjdG9yLnNp
emUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMCwgb3V0cHV0SW5kZXggPSAwOyBpIDwgaGFuZGxl
cnNDb3VudDsgKytpKSB7CiAgICAgICAgIGNvbnN0IEpTRXZlbnRMaXN0ZW5lcioganNMaXN0ZW5l
ciA9IEpTRXZlbnRMaXN0ZW5lcjo6Y2FzdChsaXN0ZW5lckluZm8uZXZlbnRMaXN0ZW5lclZlY3Rv
cltpXS5saXN0ZW5lci5nZXQoKSk7CkBAIC04MSwyNyArODEsMjcgQEAgc3RhdGljIEpTQXJyYXkq
IGdldEpTTGlzdGVuZXJGdW5jdGlvbnMoRXhlY1N0YXRlKiBleGVjLCBEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnMKICAgICAgICAgfQogCiAgICAgICAgIC8vIEhpZGUgbGlzdGVuZXJzIGZyb20gb3Ro
ZXIgY29udGV4dHMuCi0gICAgICAgIGlmICgmanNMaXN0ZW5lci0+aXNvbGF0ZWRXb3JsZCgpICE9
ICZjdXJyZW50V29ybGQoZXhlYykpCisgICAgICAgIGlmICgmanNMaXN0ZW5lci0+aXNvbGF0ZWRX
b3JsZCgpICE9ICZjdXJyZW50V29ybGQoJnN0YXRlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
CiAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzTGlzdGVuZXItPmpzRnVuY3Rpb24oZG9j
dW1lbnQpOwogICAgICAgICBpZiAoIWZ1bmN0aW9uKQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgSlNPYmplY3QqIGxpc3RlbmVyRW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChl
eGVjKTsKLSAgICAgICAgbGlzdGVuZXJFbnRyeS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImxpc3RlbmVyIiksIGZ1bmN0aW9uKTsKLSAgICAgICAg
bGlzdGVuZXJFbnRyeS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgInVzZUNhcHR1cmUiKSwganNCb29sZWFuKGxpc3RlbmVySW5mby5ldmVudExpc3Rl
bmVyVmVjdG9yW2ldLnVzZUNhcHR1cmUpKTsKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRl
eChleGVjLCBvdXRwdXRJbmRleCsrLCBKU1ZhbHVlKGxpc3RlbmVyRW50cnkpKTsKKyAgICAgICAg
SlNPYmplY3QqIGxpc3RlbmVyRW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwor
ICAgICAgICBsaXN0ZW5lckVudHJ5LT5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUsICJsaXN0ZW5lciIpLCBmdW5jdGlvbik7CisgICAgICAgIGxpc3Rl
bmVyRW50cnktPnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZSwgInVzZUNhcHR1cmUiKSwganNCb29sZWFuKGxpc3RlbmVySW5mby5ldmVudExpc3RlbmVy
VmVjdG9yW2ldLnVzZUNhcHR1cmUpKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleCgm
c3RhdGUsIG91dHB1dEluZGV4KyssIEpTVmFsdWUobGlzdGVuZXJFbnRyeSkpOwogICAgIH0KICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlIEpTQ29tbWFuZExpbmVBUElIb3N0OjpnZXRF
dmVudExpc3RlbmVycyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTQ29tbWFuZExpbmVBUElI
b3N0OjpnZXRFdmVudExpc3RlbmVycyhFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPCAxKQorICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPCAx
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIEpTVmFsdWUgdmFsdWUgPSBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gc3RhdGUudW5j
aGVja2VkQXJndW1lbnQoMCk7CiAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpIHx8IHZhbHVlLmlz
TnVsbCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIApAQCAtMTEyLDQ5ICsxMTIs
NDkgQEAgSlNWYWx1ZSBKU0NvbW1hbmRMaW5lQVBJSG9zdDo6Z2V0RXZlbnRMaXN0ZW5lcnMoRXhl
Y1N0YXRlKiBleGVjKQogICAgIFZlY3RvcjxFdmVudExpc3RlbmVySW5mbz4gbGlzdGVuZXJzQXJy
YXk7CiAgICAgaW1wbCgpLmdldEV2ZW50TGlzdGVuZXJzSW1wbChub2RlLCBsaXN0ZW5lcnNBcnJh
eSk7CiAKLSAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7
CisgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0ZW5lcnNBcnJheS5zaXplKCk7ICsraSkgewot
ICAgICAgICBKU0FycmF5KiBsaXN0ZW5lcnMgPSBnZXRKU0xpc3RlbmVyRnVuY3Rpb25zKGV4ZWMs
ICZub2RlLT5kb2N1bWVudCgpLCBsaXN0ZW5lcnNBcnJheVtpXSk7CisgICAgICAgIEpTQXJyYXkq
IGxpc3RlbmVycyA9IGdldEpTTGlzdGVuZXJGdW5jdGlvbnMoc3RhdGUsICZub2RlLT5kb2N1bWVu
dCgpLCBsaXN0ZW5lcnNBcnJheVtpXSk7CiAgICAgICAgIGlmICghbGlzdGVuZXJzLT5sZW5ndGgo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBBdG9taWNTdHJpbmcgZXZlbnRUeXBl
ID0gbGlzdGVuZXJzQXJyYXlbaV0uZXZlbnRUeXBlOwotICAgICAgICByZXN1bHQtPnB1dERpcmVj
dChleGVjLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIGV2ZW50VHlwZS5pbXBs
KCkpLCBKU1ZhbHVlKGxpc3RlbmVycykpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdChzdGF0
ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgZXZlbnRUeXBlLmltcGwoKSks
IEpTVmFsdWUobGlzdGVuZXJzKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
SlNWYWx1ZSBKU0NvbW1hbmRMaW5lQVBJSG9zdDo6aW5zcGVjdChFeGVjU3RhdGUqIGV4ZWMpCitK
U1ZhbHVlIEpTQ29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7
Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7Ci0gICAgICAgIERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlIG9iamVjdChleGVjLT52bSgpLCBleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7Ci0gICAgICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGhpbnRzKGV4ZWMtPnZtKCks
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKLSAgICAgICAgaW1wbCgpLmluc3BlY3RJbXBs
KG9iamVjdC50b0luc3BlY3RvclZhbHVlKGV4ZWMpLCBoaW50cy50b0luc3BlY3RvclZhbHVlKGV4
ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID49IDIpIHsKKyAgICAgICAgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUgb2JqZWN0KHN0YXRlLnZtKCksIHN0YXRlLnVuY2hlY2tlZEFy
Z3VtZW50KDApKTsKKyAgICAgICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgaGludHMoc3RhdGUu
dm0oKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgICAgICBpbXBsKCkuaW5zcGVj
dEltcGwob2JqZWN0LnRvSW5zcGVjdG9yVmFsdWUoJnN0YXRlKSwgaGludHMudG9JbnNwZWN0b3JW
YWx1ZSgmc3RhdGUpKTsKICAgICB9CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAot
SlNWYWx1ZSBKU0NvbW1hbmRMaW5lQVBJSG9zdDo6ZGF0YWJhc2VJZChFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTQ29tbWFuZExpbmVBUElIb3N0OjpkYXRhYmFzZUlkKEV4ZWNTdGF0ZSYgc3Rh
dGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgaWYgKHN0YXRl
LmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0g
ICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gSlNEYXRhYmFzZTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApKTsKKyAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSBKU0RhdGFiYXNlOjp0
b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmIChkYXRhYmFzZSkK
LSAgICAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGltcGwoKS5kYXRhYmFzZUlk
SW1wbChkYXRhYmFzZSkpOworICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRl
LCBpbXBsKCkuZGF0YWJhc2VJZEltcGwoZGF0YWJhc2UpKTsKIAogICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTQ29tbWFuZExpbmVBUElIb3N0OjpzdG9yYWdlSWQoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NvbW1hbmRMaW5lQVBJSG9zdDo6c3RvcmFnZUlkKEV4
ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisg
ICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogCi0gICAgU3RvcmFnZSogc3RvcmFnZSA9IEpTU3RvcmFnZTo6dG9XcmFwcGVkKGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBTdG9yYWdlKiBzdG9yYWdlID0gSlNTdG9y
YWdlOjp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmIChzdG9y
YWdlKQotICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgaW1wbCgpLnN0b3Jh
Z2VJZEltcGwoc3RvcmFnZSkpOworICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoJnN0
YXRlLCBpbXBsKCkuc3RvcmFnZUlkSW1wbChzdG9yYWdlKSk7CiAKICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5
cHRvQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQ3VzdG9t
LmNwcAppbmRleCAxNThiMzU2Y2QxZjEwOTk3NWUxOTZhZWY2ZGZiNmE5ZGRjM2JkYjc0Li5kMDdi
ZWFjYTE1YTU0NzJiNDY5MGFhYzQ1YzFhZDc1NGNmNWQ5YTM5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDcnlwdG9DdXN0b20uY3BwCkBAIC0zNSwyMSArMzUsMjEgQEAgdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTQ3J5
cHRvOjpnZXRSYW5kb21WYWx1ZXMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0NyeXB0bzo6
Z2V0UmFuZG9tVmFsdWVzKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9u
KGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3Rh
dGUuYXJndW1lbnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dF
eGNlcHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsK
IAotICAgIEpTVmFsdWUgYnVmZmVyID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgSlNWYWx1ZSBi
dWZmZXIgPSBzdGF0ZS5hcmd1bWVudCgwKTsKICAgICBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBh
cnJheUJ1ZmZlclZpZXcgPSB0b0FycmF5QnVmZmVyVmlldyhidWZmZXIpOwogICAgIGlmICghYXJy
YXlCdWZmZXJWaWV3KQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAg
ICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CiAgICAgaW1wbCgpLmdldFJhbmRvbVZhbHVlcyhhcnJheUJ1ZmZlclZpZXcuZ2V0KCks
IGVjKTsKIAogICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDcnlwdG9LZXlDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDcnlwdG9LZXlDdXN0b20uY3BwCmluZGV4IGIyNGFlMGNjMGUxMjY0ZmRhMzc4NzFmMGJmZDcx
M2YwODJlMTY4YmUuLmFkODFlNGQ0NWIxZTYxZWFlMTg3MGFhZWM3M2RlM2FlNWRiYzg5ZjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5Q3VzdG9tLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleUN1c3RvbS5jcHAK
QEAgLTM1LDkgKzM1LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1KU1ZhbHVlIEpTQ3J5cHRvS2V5OjphbGdvcml0aG0oSlNDOjpFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0CitKU1ZhbHVlIEpTQ3J5cHRvS2V5OjphbGdvcml0aG0oSlNDOjpFeGVjU3RhdGUm
IHN0YXRlKSBjb25zdAogewotICAgIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlciBidWlsZGVyKGV4
ZWMpOworICAgIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlciBidWlsZGVyKCZzdGF0ZSk7CiAgICAg
aW1wbCgpLmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oYnVpbGRlcik7CiAgICAgcmV0dXJuIGJ1
aWxkZXIucmVzdWx0KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q3VzdG9tRXZlbnRDdXN0b20uY3BwCmluZGV4IGRhZDczYTJhNDIwYzZiNjM0OTg1MzRlMWVjZDE2
OGUwYjA2MmI3MWEuLmFmMTQ5ZGFhZjA1NDI1MTIzZmU4ODY5NDk5ZDViN2JlZjU4MDNlNWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0b20u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0b20u
Y3BwCkBAIC0zNiw3ICszNiw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAKLUpTVmFsdWUgSlNDdXN0b21FdmVudDo6ZGV0YWlsKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKK0pTVmFsdWUgSlNDdXN0b21FdmVudDo6ZGV0YWlsKEV4ZWNTdGF0ZSYgc3Rh
dGUpIGNvbnN0CiB7CiAgICAgQ3VzdG9tRXZlbnQmIGV2ZW50ID0gaW1wbCgpOwogICAgIApAQCAt
NDUsMTUgKzQ1LDE1IEBAIEpTVmFsdWUgSlNDdXN0b21FdmVudDo6ZGV0YWlsKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKIAogICAgIEpTVmFsdWUgZGV0YWlsID0gZXZlbnQuZGV0YWlsKCkuanNWYWx1
ZSgpOwogICAgIAotICAgIGlmIChkZXRhaWwuaXNPYmplY3QoKSAmJiAmd29ybGRGb3JET01PYmpl
Y3QoZGV0YWlsLmdldE9iamVjdCgpKSAhPSAmY3VycmVudFdvcmxkKGV4ZWMpKSB7CisgICAgaWYg
KGRldGFpbC5pc09iamVjdCgpICYmICZ3b3JsZEZvckRPTU9iamVjdChkZXRhaWwuZ2V0T2JqZWN0
KCkpICE9ICZjdXJyZW50V29ybGQoJnN0YXRlKSkgewogICAgICAgICAvLyBXZSBuZWVkIHRvIG1h
a2Ugc3VyZSBDdXN0b21FdmVudHMgZG8gbm90IGxlYWsgdGhlaXIgZGV0YWlsIHByb3BlcnR5IGFj
cm9zcyBpc29sYXRlZCBET00gd29ybGRzLgogICAgICAgICAvLyBJZGVhbGx5LCB3ZSB3b3VsZCBj
aGVjayB0aGF0IHRoZSB3b3JsZHMgaGF2ZSBkaWZmZXJlbnQgcHJpdmlsZWdlcyBidXQgdGhhdCdz
IG5vdCBwb3NzaWJsZSB5ZXQuCi0gICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHNlcmlhbGl6ZWREZXRhaWwgPSBldmVudC50cnlTZXJpYWxpemVEZXRhaWwoZXhlYyk7CisgICAg
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWREZXRhaWwgPSBldmVu
dC50cnlTZXJpYWxpemVEZXRhaWwoJnN0YXRlKTsKICAgICAgICAgCiAgICAgICAgIGlmICghc2Vy
aWFsaXplZERldGFpbCkKICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICAgICAgCi0g
ICAgICAgIHJldHVybiBzZXJpYWxpemVkRGV0YWlsLT5kZXNlcmlhbGl6ZShleGVjLCBnbG9iYWxP
YmplY3QoKSwgbnVsbHB0cik7CisgICAgICAgIHJldHVybiBzZXJpYWxpemVkRGV0YWlsLT5kZXNl
cmlhbGl6ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBudWxscHRyKTsKICAgICB9CiAgICAgCiAg
ICAgcmV0dXJuIGRldGFpbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NRm9ybURhdGFDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01Gb3JtRGF0YUN1c3RvbS5jcHAKaW5kZXggN2VjMjQ5NWRkZWJmYzRhMzUyNmFkNmMzZjM4ZTI0
NDk2YjRhY2IwYS4uMTNmZGI1MmQ2YzI1MzE5YzE5MzhhNzQyOTIyNDIyMDZhY2ZlYzY3OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Gb3JtRGF0YUN1c3RvbS5j
cHAKQEAgLTU1LDE4ICs1NSwxOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0
cnVjdEpTRE9NRm9ybURhdGEoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwg
ZG9tRm9ybURhdGEuZ2V0KCkpKSk7CiB9CiAKLUpTVmFsdWUgSlNET01Gb3JtRGF0YTo6YXBwZW5k
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNET01Gb3JtRGF0YTo6YXBwZW5kKEV4ZWNTdGF0
ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7Ci0gICAg
ICAgIFN0cmluZyBuYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+YXJndW1lbnQoMSk7CisgICAg
aWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0g
c3RhdGUuYXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKKyAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IHN0YXRlLmFyZ3VtZW50KDEpOwogICAgICAgICBpZiAodmFsdWUu
aW5oZXJpdHMoSlNCbG9iOjppbmZvKCkpKSB7CiAgICAgICAgICAgICBTdHJpbmcgZmlsZW5hbWU7
Ci0gICAgICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDMgJiYgIWV4ZWMtPmFy
Z3VtZW50KDIpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICAgICAgZmlsZW5hbWUg
PSBleGVjLT5hcmd1bWVudCgyKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAg
ICAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID49IDMgJiYgIXN0YXRlLmFyZ3VtZW50KDIp
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBzdGF0ZS5h
cmd1bWVudCgyKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwogICAgICAgICAgICAg
aW1wbCgpLmFwcGVuZChuYW1lLCBKU0Jsb2I6OnRvV3JhcHBlZCh2YWx1ZSksIGZpbGVuYW1lKTsK
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpbXBsKCkuYXBwZW5kKG5hbWUsIHZhbHVlLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgICAgICAgICBpbXBsKCkuYXBwZW5kKG5h
bWUsIHZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSkpOwogICAgIH0KIAogICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01Ub2tlbkxpc3RDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Ub2tlbkxpc3RDdXN0b20uY3BwCmluZGV4IDBhMTlmYzZkNzhhYmJmZTJkZGM1Y2Q0
ZjIyZGI5M2JkMjM3ODIxZGEuLmJkZDQ4Nzc4NDllY2E3Y2NjOTFiYjZkYTViYzQzZDE2NjI4ZGRk
Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NVG9rZW5MaXN0
Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVRva2VuTGlz
dEN1c3RvbS5jcHAKQEAgLTM0LDIzICszNCwyMyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNET01Ub2tlbkxpc3Q6OnRvZ2dsZShFeGVj
U3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0RPTVRva2VuTGlzdDo6dG9nZ2xlKEV4ZWNTdGF0ZSYg
c3RhdGUpCiB7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
LSAgICAgICAgcmV0dXJuIHN0YXRlLT52bSgpLnRocm93RXhjZXB0aW9uKHN0YXRlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS5h
cmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNl
cHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFN0cmluZyB0b2tlbiA9IHN0YXRlLT5hcmd1
bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBTdHJpbmcgdG9rZW4gPSBzdGF0ZS5hcmd1bWVu
dCgwKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOworICAgIGlmIChVTkxJS0VMWShz
dGF0ZS5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAg
ICAgLy8gdG9nZ2xlKCkgbmVlZHMgdG8gYmUgYWJsZSB0byBkaXN0aW5ndWlzaCB1bmRlZmluZWQv
bWlzc2luZyBmcm9tIHRoZSBmYWxzZSB2YWx1ZSBmb3IgdGhlICdmb3JjZScgcGFyYW1ldGVyLgot
ICAgIE9wdGlvbmFsPGJvb2w+IGZvcmNlID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVk
KCkgPyBOdWxsb3B0IDogT3B0aW9uYWw8Ym9vbD4oc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEp
LnRvQm9vbGVhbihzdGF0ZSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIE9wdGlvbmFsPGJvb2w+IGZvcmNlID0gc3RhdGUuYXJndW1lbnQoMSkuaXNVbmRl
ZmluZWQoKSA/IE51bGxvcHQgOiBPcHRpb25hbDxib29sPihzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgxKS50b0Jvb2xlYW4oJnN0YXRlKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc0Jvb2xlYW4oaW1wbCgpLnRvZ2dsZSh0b2tlbiwgZm9yY2UsIGVjKSk7CiAKLSAgICBz
ZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBl
Yyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCmluZGV4IDQ4YTg2YzQ4ZGU4N2M4YjVmYjk4MzY1
MzAyYmJlYTYxMDhiZDIyNjYuLjI1N2E5NTg2MzllZGU3N2MwYmEyYTFhMTZmNDhlYTc5MzUwOWRk
YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3Rv
bS5jcHAKQEAgLTQ2OSw3NiArNDY5LDc2IEBAIGJvb2wgSlNET01XaW5kb3c6OmRlZmluZU93blBy
b3BlcnR5KEpTQzo6SlNPYmplY3QqIG9iamVjdCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsCiAKIC8v
IEN1c3RvbSBBdHRyaWJ1dGVzCiAKLXZvaWQgSlNET01XaW5kb3c6OnNldExvY2F0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNET01XaW5kb3c6OnNldExvY2F0aW9u
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAjaWYgRU5BQkxFKERBU0hCT0FS
RF9TVVBQT1JUKQogICAgIC8vIFRvIGF2b2lkIGJyZWFraW5nIG9sZCB3aWRnZXRzLCBtYWtlICJ2
YXIgbG9jYXRpb24gPSIgaW4gYSB0b3AtbGV2ZWwgZnJhbWUgY3JlYXRlCiAgICAgLy8gYSBwcm9w
ZXJ0eSBuYW1lZCAibG9jYXRpb24iIGluc3RlYWQgb2YgcGVyZm9ybWluZyBhIG5hdmlnYXRpb24g
KDxyZGFyOi8vcHJvYmxlbS81Njg4MDM5PikuCi0gICAgaWYgKEZyYW1lKiBhY3RpdmVGcmFtZSA9
IGFjdGl2ZURPTVdpbmRvdyhleGVjKS5mcmFtZSgpKSB7CisgICAgaWYgKEZyYW1lKiBhY3RpdmVG
cmFtZSA9IGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpLmZyYW1lKCkpIHsKICAgICAgICAgaWYgKGFj
dGl2ZUZyYW1lLT5zZXR0aW5ncygpLnVzZXNEYXNoYm9hcmRCYWNrd2FyZENvbXBhdGliaWxpdHlN
b2RlKCkgJiYgIWFjdGl2ZUZyYW1lLT50cmVlKCkucGFyZW50KCkpIHsKLSAgICAgICAgICAgIGlm
IChCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coZXhlYywgaW1w
bCgpKSkKLSAgICAgICAgICAgICAgICBwdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhleGVjLCAibG9jYXRpb24iKSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKEJp
bmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygmc3RhdGUsIGltcGwo
KSkpCisgICAgICAgICAgICAgICAgcHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLCAibG9jYXRpb24iKSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAKLSAgICBTdHJpbmcgbG9jYXRpb25TdHJpbmcg
PSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIFN0cmluZyBsb2NhdGlvblN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCZz
dGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoTG9jYXRpb24qIGxvY2F0aW9uID0gaW1wbCgpLmxvY2F0
aW9uKCkpCi0gICAgICAgIGxvY2F0aW9uLT5zZXRIcmVmKGFjdGl2ZURPTVdpbmRvdyhleGVjKSwg
Zmlyc3RET01XaW5kb3coZXhlYyksIGxvY2F0aW9uU3RyaW5nKTsKKyAgICAgICAgbG9jYXRpb24t
PnNldEhyZWYoYWN0aXZlRE9NV2luZG93KCZzdGF0ZSksIGZpcnN0RE9NV2luZG93KCZzdGF0ZSks
IGxvY2F0aW9uU3RyaW5nKTsKIH0KIAotSlNWYWx1ZSBKU0RPTVdpbmRvdzo6ZXZlbnQoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6ZXZlbnQoRXhlY1N0YXRlJiBz
dGF0ZSkgY29uc3QKIHsKICAgICBFdmVudCogZXZlbnQgPSBjdXJyZW50RXZlbnQoKTsKICAgICBp
ZiAoIWV2ZW50KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gdG9K
UyhleGVjLCBjb25zdF9jYXN0PEpTRE9NV2luZG93Kj4odGhpcyksIGV2ZW50KTsKKyAgICByZXR1
cm4gdG9KUygmc3RhdGUsIGNvbnN0X2Nhc3Q8SlNET01XaW5kb3cqPih0aGlzKSwgZXZlbnQpOwog
fQogCi1KU1ZhbHVlIEpTRE9NV2luZG93OjppbWFnZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitK
U1ZhbHVlIEpTRE9NV2luZG93OjppbWFnZShFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewotICAg
IHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU0ltYWdlQ29uc3RydWN0b3I+KGV4ZWMtPnZtKCks
IHRoaXMpOworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU0ltYWdlQ29uc3RydWN0b3I+
KHN0YXRlLnZtKCksIHRoaXMpOwogfQogCiAjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi1K
U1ZhbHVlIEpTRE9NV2luZG93Ojp0b3VjaChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVl
IEpTRE9NV2luZG93Ojp0b3VjaChFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewotICAgIHJldHVy
biBnZXRET01Db25zdHJ1Y3RvcjxKU1RvdWNoQ29uc3RydWN0b3I+KGV4ZWMtPnZtKCksIHRoaXMp
OworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1RvdWNoQ29uc3RydWN0b3I+KHN0YXRl
LnZtKCksIHRoaXMpOwogfQogCi1KU1ZhbHVlIEpTRE9NV2luZG93Ojp0b3VjaExpc3QoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6dG91Y2hMaXN0KEV4ZWNTdGF0
ZSYgc3RhdGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVG91Y2hM
aXN0Q29uc3RydWN0b3I+KGV4ZWMtPnZtKCksIHRoaXMpOworICAgIHJldHVybiBnZXRET01Db25z
dHJ1Y3RvcjxKU1RvdWNoTGlzdENvbnN0cnVjdG9yPihzdGF0ZS52bSgpLCB0aGlzKTsKIH0KICNl
bmRpZgogCiAvLyBDdXN0b20gZnVuY3Rpb25zCiAKLUpTVmFsdWUgSlNET01XaW5kb3c6Om9wZW4o
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6b3BlbihFeGVjU3RhdGUmIHN0
YXRlKQogewotICAgIFN0cmluZyB1cmxTdHJpbmcgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5l
ZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgU3RyaW5nIHVybFN0cmluZyA9IHZhbHVlVG9TdHJpbmdXaXRoVW5k
ZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSk7CisgICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBB
dG9taWNTdHJpbmcgZnJhbWVOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51
bGwoKSA/ICJfYmxhbmsiIDogZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBBdG9taWNTdHJpbmcg
ZnJhbWVOYW1lID0gc3RhdGUuYXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSA/ICJfYmxh
bmsiIDogc3RhdGUuYXJndW1lbnQoMSkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsK
KyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgIFN0cmluZyB3aW5kb3dGZWF0dXJlc1N0cmluZyA9IHZhbHVlVG9TdHJpbmdXaXRo
VW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQoMikpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBTdHJpbmcgd2luZG93RmVhdHVyZXNTdHJpbmcgPSB2
YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKCZzdGF0ZSwgc3RhdGUuYXJndW1l
bnQoMikpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKLSAgICBSZWZQdHI8RE9NV2luZG93PiBvcGVuZWRXaW5kb3cgPSBpbXBs
KCkub3Blbih1cmxTdHJpbmcsIGZyYW1lTmFtZSwgd2luZG93RmVhdHVyZXNTdHJpbmcsIGFjdGl2
ZURPTVdpbmRvdyhleGVjKSwgZmlyc3RET01XaW5kb3coZXhlYykpOworICAgIFJlZlB0cjxET01X
aW5kb3c+IG9wZW5lZFdpbmRvdyA9IGltcGwoKS5vcGVuKHVybFN0cmluZywgZnJhbWVOYW1lLCB3
aW5kb3dGZWF0dXJlc1N0cmluZywgYWN0aXZlRE9NV2luZG93KCZzdGF0ZSksIGZpcnN0RE9NV2lu
ZG93KCZzdGF0ZSkpOwogICAgIGlmICghb3BlbmVkV2luZG93KQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICByZXR1cm4gdG9KUyhleGVjLCBvcGVuZWRXaW5kb3cuZ2V0KCkpOwor
ICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgb3BlbmVkV2luZG93LmdldCgpKTsKIH0KIAogY2xhc3Mg
RGlhbG9nSGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgRGlhbG9nSGFuZGxlcihFeGVj
U3RhdGUqIGV4ZWMpCisgICAgZXhwbGljaXQgRGlhbG9nSGFuZGxlcihFeGVjU3RhdGUmIGV4ZWMp
CiAgICAgICAgIDogbV9leGVjKGV4ZWMpCiAgICAgewogICAgIH0KQEAgLTU0Nyw3ICs1NDcsNyBA
QCBwdWJsaWM6CiAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSgpIGNvbnN0OwogCiBwcml2YXRlOgot
ICAgIEV4ZWNTdGF0ZSogbV9leGVjOworICAgIEV4ZWNTdGF0ZSYgbV9leGVjOwogICAgIFJlZlB0
cjxGcmFtZT4gbV9mcmFtZTsKIH07CiAKQEAgLTU1Nyw0MiArNTU3LDQyIEBAIGlubGluZSB2b2lk
IERpYWxvZ0hhbmRsZXI6OmRpYWxvZ0NyZWF0ZWQoRE9NV2luZG93JiBkaWFsb2cpCiAgICAgCiAg
ICAgLy8gRklYTUU6IFRoaXMgbG9va3MgbGlrZSBhIGxlYWsgYmV0d2VlbiB0aGUgbm9ybWFsIHdv
cmxkIGFuZCBhbiBpc29sYXRlZAogICAgIC8vICAgICAgICB3b3JsZCBpZiBkaWFsb2dBcmd1bWVu
dHMgY29tZXMgZnJvbSBhbiBpc29sYXRlZCB3b3JsZC4KLSAgICBKU0RPTVdpbmRvdyogZ2xvYmFs
T2JqZWN0ID0gdG9KU0RPTVdpbmRvdyhtX2ZyYW1lLmdldCgpLCBub3JtYWxXb3JsZChtX2V4ZWMt
PnZtKCkpKTsKLSAgICBpZiAoSlNWYWx1ZSBkaWFsb2dBcmd1bWVudHMgPSBtX2V4ZWMtPmFyZ3Vt
ZW50KDEpKQotICAgICAgICBnbG9iYWxPYmplY3QtPnB1dERpcmVjdChtX2V4ZWMtPnZtKCksIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcobV9leGVjLCAiZGlhbG9nQXJndW1lbnRzIiksIGRpYWxvZ0Fy
Z3VtZW50cyk7CisgICAgSlNET01XaW5kb3cqIGdsb2JhbE9iamVjdCA9IHRvSlNET01XaW5kb3co
bV9mcmFtZS5nZXQoKSwgbm9ybWFsV29ybGQobV9leGVjLnZtKCkpKTsKKyAgICBpZiAoSlNWYWx1
ZSBkaWFsb2dBcmd1bWVudHMgPSBtX2V4ZWMuYXJndW1lbnQoMSkpCisgICAgICAgIGdsb2JhbE9i
amVjdC0+cHV0RGlyZWN0KG1fZXhlYy52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZtX2V4
ZWMsICJkaWFsb2dBcmd1bWVudHMiKSwgZGlhbG9nQXJndW1lbnRzKTsKIH0KIAogaW5saW5lIEpT
VmFsdWUgRGlhbG9nSGFuZGxlcjo6cmV0dXJuVmFsdWUoKSBjb25zdAogewotICAgIEpTRE9NV2lu
ZG93KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NV2luZG93KG1fZnJhbWUuZ2V0KCksIG5vcm1hbFdv
cmxkKG1fZXhlYy0+dm0oKSkpOworICAgIEpTRE9NV2luZG93KiBnbG9iYWxPYmplY3QgPSB0b0pT
RE9NV2luZG93KG1fZnJhbWUuZ2V0KCksIG5vcm1hbFdvcmxkKG1fZXhlYy52bSgpKSk7CiAgICAg
aWYgKCFnbG9iYWxPYmplY3QpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIElk
ZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcobV9leGVjLCAicmV0
dXJuVmFsdWUiKTsKKyAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZtX2V4ZWMsICJyZXR1cm5WYWx1ZSIpOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGds
b2JhbE9iamVjdCk7Ci0gICAgaWYgKCFKU0dsb2JhbE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
KGdsb2JhbE9iamVjdCwgbV9leGVjLCBpZGVudGlmaWVyLCBzbG90KSkKKyAgICBpZiAoIUpTR2xv
YmFsT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0LCAmbV9leGVjLCBpZGVu
dGlmaWVyLCBzbG90KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJu
IHNsb3QuZ2V0VmFsdWUobV9leGVjLCBpZGVudGlmaWVyKTsKKyAgICByZXR1cm4gc2xvdC5nZXRW
YWx1ZSgmbV9leGVjLCBpZGVudGlmaWVyKTsKIH0KIAotSlNWYWx1ZSBKU0RPTVdpbmRvdzo6c2hv
d01vZGFsRGlhbG9nKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNET01XaW5kb3c6OnNob3dN
b2RhbERpYWxvZyhFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIFN0cmluZyB1cmxTdHJpbmcgPSB2
YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50
KDApKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgU3RyaW5nIHVybFN0cmlu
ZyA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS5h
cmd1bWVudCgwKSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICBTdHJpbmcgZGlhbG9nRmVhdHVyZXNTdHJpbmcgPSB2YWx1
ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIp
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgU3RyaW5nIGRpYWxvZ0ZlYXR1
cmVzU3RyaW5nID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygmc3RhdGUs
IHN0YXRlLmFyZ3VtZW50KDIpKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgRGlhbG9nSGFuZGxlciBoYW5kbGVyKGV4
ZWMpOworICAgIERpYWxvZ0hhbmRsZXIgaGFuZGxlcihzdGF0ZSk7CiAKLSAgICBpbXBsKCkuc2hv
d01vZGFsRGlhbG9nKHVybFN0cmluZywgZGlhbG9nRmVhdHVyZXNTdHJpbmcsIGFjdGl2ZURPTVdp
bmRvdyhleGVjKSwgZmlyc3RET01XaW5kb3coZXhlYyksIFsmaGFuZGxlcl0oRE9NV2luZG93JiBk
aWFsb2cpIHsKKyAgICBpbXBsKCkuc2hvd01vZGFsRGlhbG9nKHVybFN0cmluZywgZGlhbG9nRmVh
dHVyZXNTdHJpbmcsIGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpLCBmaXJzdERPTVdpbmRvdygmc3Rh
dGUpLCBbJmhhbmRsZXJdKERPTVdpbmRvdyYgZGlhbG9nKSB7CiAgICAgICAgIGhhbmRsZXIuZGlh
bG9nQ3JlYXRlZChkaWFsb2cpOwogICAgIH0pOwogCiAgICAgcmV0dXJuIGhhbmRsZXIucmV0dXJu
VmFsdWUoKTsKIH0KIAotc3RhdGljIEpTVmFsdWUgaGFuZGxlUG9zdE1lc3NhZ2UoRE9NV2luZG93
KiBpbXBsLCBFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNWYWx1ZSBoYW5kbGVQb3N0TWVzc2Fn
ZShET01XaW5kb3cmIGltcGwsIEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgTWVzc2FnZVBvcnRB
cnJheSBtZXNzYWdlUG9ydHM7CiAgICAgQXJyYXlCdWZmZXJBcnJheSBhcnJheUJ1ZmZlcnM7CkBA
IC02MDQsMTAyICs2MDQsMTAyIEBAIHN0YXRpYyBKU1ZhbHVlIGhhbmRsZVBvc3RNZXNzYWdlKERP
TVdpbmRvdyogaW1wbCwgRXhlY1N0YXRlKiBleGVjKQogICAgIC8vIExlZ2FjeSBub24tc3RhbmRh
cmQgaW1wbGVtZW50YXRpb25zIGluIHdlYmtpdCBhbGxvd2VkOgogICAgIC8vICAgcG9zdE1lc3Nh
Z2UobWVzc2FnZSwge3NlcXVlbmNlIG9mIHRyYW5zZmVycmFibGVzfSwgdGFyZ2V0T3JpZ2luKTsK
ICAgICBpbnQgdGFyZ2V0T3JpZ2luQXJnSW5kZXggPSAxOwotICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPiAyKSB7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+IDIpIHsKICAg
ICAgICAgaW50IHRyYW5zZmVyYWJsZXNBcmdJbmRleCA9IDI7Ci0gICAgICAgIGlmIChleGVjLT5h
cmd1bWVudCgyKS5pc1N0cmluZygpKSB7CisgICAgICAgIGlmIChzdGF0ZS5hcmd1bWVudCgyKS5p
c1N0cmluZygpKSB7CiAgICAgICAgICAgICB0YXJnZXRPcmlnaW5BcmdJbmRleCA9IDI7CiAgICAg
ICAgICAgICB0cmFuc2ZlcmFibGVzQXJnSW5kZXggPSAxOwogICAgICAgICB9Ci0gICAgICAgIGZp
bGxNZXNzYWdlUG9ydEFycmF5KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KHRyYW5zZmVyYWJsZXNBcmdJ
bmRleCksIG1lc3NhZ2VQb3J0cywgYXJyYXlCdWZmZXJzKTsKKyAgICAgICAgZmlsbE1lc3NhZ2VQ
b3J0QXJyYXkoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KHRyYW5zZmVyYWJsZXNBcmdJbmRleCksIG1l
c3NhZ2VQb3J0cywgYXJyYXlCdWZmZXJzKTsKICAgICB9Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtZXNzYWdl
ID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCks
CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSA9IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6Y3JlYXRlKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJm1lc3NhZ2VQb3J0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXJyYXlCdWZmZXJzKTsKIAot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgU3RyaW5nIHRhcmdldE9y
aWdpbiA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+
YXJndW1lbnQodGFyZ2V0T3JpZ2luQXJnSW5kZXgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgU3RyaW5nIHRhcmdldE9yaWdpbiA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZp
bmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCh0YXJnZXRPcmlnaW5BcmdJbmRl
eCkpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsLT5wb3N0TWVz
c2FnZShtZXNzYWdlLnJlbGVhc2UoKSwgJm1lc3NhZ2VQb3J0cywgdGFyZ2V0T3JpZ2luLCBhY3Rp
dmVET01XaW5kb3coZXhlYyksIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwor
ICAgIGltcGwucG9zdE1lc3NhZ2UobWVzc2FnZS5yZWxlYXNlKCksICZtZXNzYWdlUG9ydHMsIHRh
cmdldE9yaWdpbiwgYWN0aXZlRE9NV2luZG93KCZzdGF0ZSksIGVjKTsKKyAgICBzZXRET01FeGNl
cHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNW
YWx1ZSBKU0RPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBK
U0RPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1cm4g
aGFuZGxlUG9zdE1lc3NhZ2UoJmltcGwoKSwgZXhlYyk7CisgICAgcmV0dXJuIGhhbmRsZVBvc3RN
ZXNzYWdlKGltcGwoKSwgc3RhdGUpOwogfQogCi1KU1ZhbHVlIEpTRE9NV2luZG93OjpzZXRUaW1l
b3V0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNET01XaW5kb3c6OnNldFRpbWVvdXQoRXhl
Y1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBDb250ZW50U2VjdXJpdHlQb2xpY3kqIGNvbnRlbnRTZWN1
cml0eVBvbGljeSA9IGltcGwoKS5kb2N1bWVudCgpID8gaW1wbCgpLmRvY3VtZW50KCktPmNvbnRl
bnRTZWN1cml0eVBvbGljeSgpIDogMDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0
aW9uPiBhY3Rpb24gPSBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3Qo
KS0+d29ybGQoKSwgY29udGVudFNlY3VyaXR5UG9saWN5KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgQ29udGVudFNlY3VyaXR5UG9saWN5KiBjb250ZW50U2VjdXJpdHlQb2xp
Y3kgPSBpbXBsKCkuZG9jdW1lbnQoKSA/IGltcGwoKS5kb2N1bWVudCgpLT5jb250ZW50U2VjdXJp
dHlQb2xpY3koKSA6IG51bGxwdHI7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNjaGVkdWxlZEFjdGlv
bj4gYWN0aW9uID0gU2NoZWR1bGVkQWN0aW9uOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3Qo
KS0+d29ybGQoKSwgY29udGVudFNlY3VyaXR5UG9saWN5KTsKKyAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKCFhY3Rp
b24pCiAgICAgICAgIHJldHVybiBqc051bWJlcigwKTsKIAotICAgIGludCBkZWxheSA9IGV4ZWMt
PmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgaW50IGRlbGF5ID0gc3RhdGUuYXJndW1l
bnQoMSkudG9JbnQzMigmc3RhdGUpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAg
aW50IHJlc3VsdCA9IGltcGwoKS5zZXRUaW1lb3V0KFdURjo6bW92ZShhY3Rpb24pLCBkZWxheSwg
ZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9u
KCZzdGF0ZSwgZWMpOwogCiAgICAgcmV0dXJuIGpzTnVtYmVyKHJlc3VsdCk7CiB9CiAKLUpTVmFs
dWUgSlNET01XaW5kb3c6OnNldEludGVydmFsKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNE
T01XaW5kb3c6OnNldEludGVydmFsKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgQ29udGVudFNl
Y3VyaXR5UG9saWN5KiBjb250ZW50U2VjdXJpdHlQb2xpY3kgPSBpbXBsKCkuZG9jdW1lbnQoKSA/
IGltcGwoKS5kb2N1bWVudCgpLT5jb250ZW50U2VjdXJpdHlQb2xpY3koKSA6IDA7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFNjaGVkdWxlZEFjdGlvbj4gYWN0aW9uID0gU2NoZWR1bGVkQWN0aW9uOjpj
cmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KCktPndvcmxkKCksIGNvbnRlbnRTZWN1cml0eVBvbGlj
eSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIENvbnRlbnRTZWN1cml0eVBv
bGljeSogY29udGVudFNlY3VyaXR5UG9saWN5ID0gaW1wbCgpLmRvY3VtZW50KCkgPyBpbXBsKCku
ZG9jdW1lbnQoKS0+Y29udGVudFNlY3VyaXR5UG9saWN5KCkgOiBudWxscHRyOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3Jl
YXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCktPndvcmxkKCksIGNvbnRlbnRTZWN1cml0eVBvbGlj
eSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICBpbnQgZGVsYXkgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMp
OworICAgIGludCBkZWxheSA9IHN0YXRlLmFyZ3VtZW50KDEpLnRvSW50MzIoJnN0YXRlKTsKIAog
ICAgIGlmICghYWN0aW9uKQogICAgICAgICByZXR1cm4ganNOdW1iZXIoMCk7CiAKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKICAgICBpbnQgcmVzdWx0ID0gaW1wbCgpLnNldEludGVydmFsKFdU
Rjo6bW92ZShhY3Rpb24pLCBkZWxheSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBl
Yyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogCiAgICAgcmV0dXJuIGpzTnVt
YmVyKHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUgSlNET01XaW5kb3c6OmFkZEV2ZW50TGlzdGVuZXIo
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5lcihF
eGVjU3RhdGUmIHN0YXRlKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS5mcmFtZSgpOwog
ICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgSlNW
YWx1ZSBsaXN0ZW5lciA9IGV4ZWMtPmFyZ3VtZW50KDEpOworICAgIEpTVmFsdWUgbGlzdGVuZXIg
PSBzdGF0ZS5hcmd1bWVudCgxKTsKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLmFkZEV2ZW50TGlzdGVuZXIo
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnRvQXRvbWljU3RyaW5nKGV4ZWMpLCBK
U0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBn
bG9iYWxPYmplY3QoKS0+d29ybGQoKSksIGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVj
KSk7CisgICAgaW1wbCgpLmFkZEV2ZW50TGlzdGVuZXIoc3RhdGUuYXJndW1lbnQoMCkudG9TdHJp
bmcoJnN0YXRlKS0+dG9BdG9taWNTdHJpbmcoJnN0YXRlKSwgSlNFdmVudExpc3RlbmVyOjpjcmVh
dGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgZ2xvYmFsT2JqZWN0KCktPndvcmxk
KCkpLCBzdGF0ZS5hcmd1bWVudCgyKS50b0Jvb2xlYW4oJnN0YXRlKSk7CiAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVu
ZXIoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0
ZW5lcihFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS5mcmFt
ZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0g
ICAgSlNWYWx1ZSBsaXN0ZW5lciA9IGV4ZWMtPmFyZ3VtZW50KDEpOworICAgIEpTVmFsdWUgbGlz
dGVuZXIgPSBzdGF0ZS5hcmd1bWVudCgxKTsKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLnJlbW92ZUV2ZW50
TGlzdGVuZXIoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnRvQXRvbWljU3RyaW5n
KGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIHRoaXMs
IGZhbHNlLCBnbG9iYWxPYmplY3QoKS0+d29ybGQoKSkucHRyKCksIGV4ZWMtPmFyZ3VtZW50KDIp
LnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1wbCgpLnJlbW92ZUV2ZW50TGlzdGVuZXIoc3RhdGUu
YXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dG9BdG9taWNTdHJpbmcoJnN0YXRlKSwgSlNF
dmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgZ2xv
YmFsT2JqZWN0KCktPndvcmxkKCkpLnB0cigpLCBzdGF0ZS5hcmd1bWVudCgyKS50b0Jvb2xlYW4o
JnN0YXRlKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YUN1ZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RhdGFDdWVDdXN0b20uY3BwCmluZGV4IDJhM2M5YThiM2IzMjA1
NDZjNzE4YjA1YjA0Nzc3ZmQzMjQ3MmQzMWUuLjdhYjMyNDVkMGJiYzJiZDdkZjU3ZjJiNzU5YjM0
YjA0ODBmMzM1YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0
YUN1ZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhQ3Vl
Q3VzdG9tLmNwcApAQCAtMzYsMTQgKzM2LDE0IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICNpZiBFTkFCTEUoREFUQUNVRV9WQUxVRSkKLUpTVmFsdWUgSlNE
YXRhQ3VlOjp2YWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTRGF0YUN1ZTo6
dmFsdWUoRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKLSAgICByZXR1cm4gaW1wbCgpLnZhbHVl
KGV4ZWMpOworICAgIHJldHVybiBpbXBsKCkudmFsdWUoJnN0YXRlKTsKIH0KIAotdm9pZCBKU0Rh
dGFDdWU6OnNldFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNE
YXRhQ3VlOjpzZXRWYWx1ZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewotICAg
IGltcGwoKS5zZXRWYWx1ZShleGVjLCB2YWx1ZSk7CisgICAgaW1wbCgpLnNldFZhbHVlKCZzdGF0
ZSwgdmFsdWUpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRGF0YVRyYW5zZmVyQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRGF0YVRyYW5zZmVyQ3VzdG9tLmNwcAppbmRleCA3OTE4ZjQwZTcwMDdjNjQ1ZmJiN2Rj
MjAwM2NkNWYzYTJlNzA3NzUzLi4wYjBmYTkwNzYwMTY1NjcxMzFjYjhkNzAzM2M5Yzg2MThjMGEx
ZGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFUcmFuc2Zl
ckN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhVHJhbnNm
ZXJDdXN0b20uY3BwCkBAIC0zNSwxMCArMzUsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTRGF0YVRyYW5zZmVyOjp0eXBlcyhFeGVj
U3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTRGF0YVRyYW5zZmVyOjp0eXBlcyhFeGVjU3Rh
dGUmIHN0YXRlKSBjb25zdAogewogICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzID0gaW1wbCgpLnR5
cGVzKCk7Ci0gICAgcmV0dXJuIHR5cGVzLmlzRW1wdHkoKSA/IGpzTnVsbCgpIDoganNBcnJheShl
eGVjLCBnbG9iYWxPYmplY3QoKSwgdHlwZXMpOworICAgIHJldHVybiB0eXBlcy5pc0VtcHR5KCkg
PyBqc051bGwoKSA6IGpzQXJyYXkoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgdHlwZXMpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3Bw
CmluZGV4IGVhNjJlMjhlZGM2MGQxYmY3ZTY4NTFlN2QxMzRjYTQxMDQ2YTgxZDUuLjgzODlkNjFl
NTgzMTM4NTRmNTU2MzNjMmM5M2Q1MTE3MzBjM2VhMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2Nv
cGVDdXN0b20uY3BwCkBAIC0zOSw5ICszOSw5IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotSlNDOjpKU1ZhbHVlIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFs
U2NvcGU6OnBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQorSlNDOjpKU1ZhbHVlIEpT
RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6OnBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSkKIHsKLSAgICByZXR1cm4gaGFuZGxlUG9zdE1lc3NhZ2UoZXhlYywgJmltcGwoKSk7Cisg
ICAgcmV0dXJuIGhhbmRsZVBvc3RNZXNzYWdlKHN0YXRlLCAmaW1wbCgpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEZXZpY2VNb3Rpb25FdmVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RldmljZU1vdGlvbkV2ZW50Q3VzdG9tLmNwcAppbmRleCBiODg2NTAxZjdlMmUwZDlkNWE2
MTY4MjU3NDY3ZTI4N2JhZTI2MjYyLi43ZDgwZjZmMWI4ZmVhMWQwYTc3ZWRmODg4NmIzZWQzMzBm
NjZiZjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RldmljZU1v
dGlvbkV2ZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Rl
dmljZU1vdGlvbkV2ZW50Q3VzdG9tLmNwcApAQCAtNDAsMzYgKzQwLDM2IEBAIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFJlZlB0cjxEZXZpY2VN
b3Rpb25EYXRhOjpBY2NlbGVyYXRpb24+IHJlYWRBY2NlbGVyYXRpb25Bcmd1bWVudChKU1ZhbHVl
IHZhbHVlLCBFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgUmVmUHRyPERldmljZU1vdGlvbkRhdGE6
OkFjY2VsZXJhdGlvbj4gcmVhZEFjY2VsZXJhdGlvbkFyZ3VtZW50KEpTVmFsdWUgdmFsdWUsIEV4
ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgLy8gR2l2ZW4gdGhlIGFib3ZlIHRlc3QsIHRo
aXMgd2lsbCBhbHdheXMgeWllbGQgYW4gb2JqZWN0LgotICAgIEpTT2JqZWN0KiBvYmplY3QgPSB2
YWx1ZS50b09iamVjdChleGVjKTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0gdmFsdWUudG9PYmpl
Y3QoJnN0YXRlKTsKIAotICAgIEpTVmFsdWUgeFZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAieCIpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgSlNWYWx1ZSB4VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAieCIpKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGJvb2wgY2FuUHJvdmlkZVggPSAheFZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7Ci0gICAgZG91YmxlIHggPSB4VmFsdWUudG9OdW1iZXIo
ZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGRvdWJsZSB4ID0geFZh
bHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIEpTVmFsdWUgeVZhbHVlID0gb2JqZWN0LT5nZXQo
ZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAieSIpKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgSlNWYWx1ZSB5VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAieSIpKTsKKyAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGJvb2wgY2FuUHJvdmlk
ZVkgPSAheVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7Ci0gICAgZG91YmxlIHkgPSB5VmFsdWUu
dG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGRvdWJs
ZSB5ID0geVZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIEpTVmFsdWUgelZhbHVlID0gb2Jq
ZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAieiIpKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgSlNWYWx1ZSB6VmFsdWUgPSBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAieiIpKTsKKyAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGJvb2wg
Y2FuUHJvdmlkZVogPSAhelZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7Ci0gICAgZG91YmxlIHog
PSB6VmFsdWUudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGRvdWJsZSB6ID0gelZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmICghY2FuUHJv
dmlkZVggJiYgIWNhblByb3ZpZGVZICYmICFjYW5Qcm92aWRlWikKQEAgLTc4LDM2ICs3OCwzNiBA
QCBzdGF0aWMgUmVmUHRyPERldmljZU1vdGlvbkRhdGE6OkFjY2VsZXJhdGlvbj4gcmVhZEFjY2Vs
ZXJhdGlvbkFyZ3VtZW50KEpTVmFsdWUgdgogICAgIHJldHVybiBEZXZpY2VNb3Rpb25EYXRhOjpB
Y2NlbGVyYXRpb246OmNyZWF0ZShjYW5Qcm92aWRlWCwgeCwgY2FuUHJvdmlkZVksIHksIGNhblBy
b3ZpZGVaLCB6KTsKIH0KIAotc3RhdGljIFJlZlB0cjxEZXZpY2VNb3Rpb25EYXRhOjpSb3RhdGlv
blJhdGU+IHJlYWRSb3RhdGlvblJhdGVBcmd1bWVudChKU1ZhbHVlIHZhbHVlLCBFeGVjU3RhdGUq
IGV4ZWMpCitzdGF0aWMgUmVmUHRyPERldmljZU1vdGlvbkRhdGE6OlJvdGF0aW9uUmF0ZT4gcmVh
ZFJvdGF0aW9uUmF0ZUFyZ3VtZW50KEpTVmFsdWUgdmFsdWUsIEV4ZWNTdGF0ZSYgc3RhdGUpCiB7
CiAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgLy8gR2l2ZW4gdGhlIGFib3ZlIHRlc3QsIHRoaXMgd2lsbCBhbHdheXMgeWll
bGQgYW4gb2JqZWN0LgotICAgIEpTT2JqZWN0KiBvYmplY3QgPSB2YWx1ZS50b09iamVjdChleGVj
KTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0gdmFsdWUudG9PYmplY3QoJnN0YXRlKTsKIAotICAg
IEpTVmFsdWUgYWxwaGFWYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoZXhlYywgImFscGhhIikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBKU1ZhbHVlIGFscGhhVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLCAiYWxwaGEiKSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBib29sIGNhblByb3ZpZGVBbHBoYSA9ICFh
bHBoYVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7Ci0gICAgZG91YmxlIGFscGhhID0gYWxwaGFW
YWx1ZS50b051bWJlcihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ZG91YmxlIGFscGhhID0gYWxwaGFWYWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBKU1ZhbHVl
IGJldGFWYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhl
YywgImJldGEiKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIEpTVmFsdWUg
YmV0YVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZSwgImJldGEiKSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICBib29sIGNhblByb3ZpZGVCZXRhID0gIWJldGFWYWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpOwotICAgIGRvdWJsZSBiZXRhID0gYmV0YVZhbHVlLnRvTnVtYmVyKGV4
ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBkb3VibGUgYmV0YSA9IGJl
dGFWYWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBKU1ZhbHVlIGdhbW1hVmFsdWUgPSBvYmpl
Y3QtPmdldChleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJnYW1tYSIpKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgSlNWYWx1ZSBnYW1tYVZhbHVlID0gb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImdhbW1hIikp
OworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgYm9vbCBjYW5Qcm92aWRlR2FtbWEgPSAhZ2FtbWFWYWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpOwotICAgIGRvdWJsZSBnYW1tYSA9IGdhbW1hVmFsdWUudG9OdW1iZXIoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGRvdWJsZSBnYW1tYSA9IGdhbW1hVmFsdWUu
dG9OdW1iZXIoJnN0YXRlKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKCFjYW5Qcm92aWRlQWxwaGEgJiYgIWNhblByb3Zp
ZGVCZXRhICYmICFjYW5Qcm92aWRlR2FtbWEpCkBAIC0xMTYsNDkgKzExNiw0OSBAQCBzdGF0aWMg
UmVmUHRyPERldmljZU1vdGlvbkRhdGE6OlJvdGF0aW9uUmF0ZT4gcmVhZFJvdGF0aW9uUmF0ZUFy
Z3VtZW50KEpTVmFsdWUgdgogICAgIHJldHVybiBEZXZpY2VNb3Rpb25EYXRhOjpSb3RhdGlvblJh
dGU6OmNyZWF0ZShjYW5Qcm92aWRlQWxwaGEsIGFscGhhLCBjYW5Qcm92aWRlQmV0YSwgYmV0YSwg
Y2FuUHJvdmlkZUdhbW1hLCBnYW1tYSk7CiB9CiAKLXN0YXRpYyBKU09iamVjdCogY3JlYXRlQWNj
ZWxlcmF0aW9uT2JqZWN0KGNvbnN0IERldmljZU1vdGlvbkRhdGE6OkFjY2VsZXJhdGlvbiogYWNj
ZWxlcmF0aW9uLCBFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgSlNPYmplY3QqIGNyZWF0ZUFjY2Vs
ZXJhdGlvbk9iamVjdChjb25zdCBEZXZpY2VNb3Rpb25EYXRhOjpBY2NlbGVyYXRpb24qIGFjY2Vs
ZXJhdGlvbiwgRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBKU09iamVjdCogb2JqZWN0ID0gY29u
c3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+dm0o
KSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAieCIpLCBhY2NlbGVyYXRpb24tPmNhblBy
b3ZpZGVYKCkgPyBqc051bWJlcihhY2NlbGVyYXRpb24tPngoKSkgOiBqc051bGwoKSk7Ci0gICAg
b2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVj
LCAieSIpLCBhY2NlbGVyYXRpb24tPmNhblByb3ZpZGVZKCkgPyBqc051bWJlcihhY2NlbGVyYXRp
b24tPnkoKSkgOiBqc051bGwoKSk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAieiIpLCBhY2NlbGVyYXRpb24tPmNhblByb3Zp
ZGVaKCkgPyBqc051bWJlcihhY2NlbGVyYXRpb24tPnooKSkgOiBqc051bGwoKSk7CisgICAgSlNP
YmplY3QqIG9iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7CisgICAgb2JqZWN0
LT5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ4
IiksIGFjY2VsZXJhdGlvbi0+Y2FuUHJvdmlkZVgoKSA/IGpzTnVtYmVyKGFjY2VsZXJhdGlvbi0+
eCgpKSA6IGpzTnVsbCgpKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdChzdGF0ZS52bSgpLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInkiKSwgYWNjZWxlcmF0aW9uLT5jYW5Qcm92aWRl
WSgpID8ganNOdW1iZXIoYWNjZWxlcmF0aW9uLT55KCkpIDoganNOdWxsKCkpOworICAgIG9iamVj
dC0+cHV0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAi
eiIpLCBhY2NlbGVyYXRpb24tPmNhblByb3ZpZGVaKCkgPyBqc051bWJlcihhY2NlbGVyYXRpb24t
PnooKSkgOiBqc051bGwoKSk7CiAgICAgcmV0dXJuIG9iamVjdDsKIH0KIAotc3RhdGljIEpTT2Jq
ZWN0KiBjcmVhdGVSb3RhdGlvblJhdGVPYmplY3QoY29uc3QgRGV2aWNlTW90aW9uRGF0YTo6Um90
YXRpb25SYXRlKiByb3RhdGlvblJhdGUsIEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBKU09iamVj
dCogY3JlYXRlUm90YXRpb25SYXRlT2JqZWN0KGNvbnN0IERldmljZU1vdGlvbkRhdGE6OlJvdGF0
aW9uUmF0ZSogcm90YXRpb25SYXRlLCBFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICBvYmplY3QtPnB1dERp
cmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJhbHBoYSIpLCBy
b3RhdGlvblJhdGUtPmNhblByb3ZpZGVBbHBoYSgpID8ganNOdW1iZXIocm90YXRpb25SYXRlLT5h
bHBoYSgpKSA6IGpzTnVsbCgpKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJiZXRhIiksICByb3RhdGlvblJhdGUtPmNhblBy
b3ZpZGVCZXRhKCkgID8ganNOdW1iZXIocm90YXRpb25SYXRlLT5iZXRhKCkpICA6IGpzTnVsbCgp
KTsKLSAgICBvYmplY3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKGV4ZWMsICJnYW1tYSIpLCByb3RhdGlvblJhdGUtPmNhblByb3ZpZGVHYW1tYSgpID8ganNO
dW1iZXIocm90YXRpb25SYXRlLT5nYW1tYSgpKSA6IGpzTnVsbCgpKTsKKyAgICBKU09iamVjdCog
b2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKKyAgICBvYmplY3QtPnB1dERp
cmVjdChzdGF0ZS52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImFscGhhIiks
IHJvdGF0aW9uUmF0ZS0+Y2FuUHJvdmlkZUFscGhhKCkgPyBqc051bWJlcihyb3RhdGlvblJhdGUt
PmFscGhhKCkpIDoganNOdWxsKCkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0KHN0YXRlLnZtKCks
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYmV0YSIpLCAgcm90YXRpb25SYXRlLT5j
YW5Qcm92aWRlQmV0YSgpICA/IGpzTnVtYmVyKHJvdGF0aW9uUmF0ZS0+YmV0YSgpKSAgOiBqc051
bGwoKSk7CisgICAgb2JqZWN0LT5wdXREaXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmc3RhdGUsICJnYW1tYSIpLCByb3RhdGlvblJhdGUtPmNhblByb3ZpZGVHYW1tYSgp
ID8ganNOdW1iZXIocm90YXRpb25SYXRlLT5nYW1tYSgpKSA6IGpzTnVsbCgpKTsKICAgICByZXR1
cm4gb2JqZWN0OwogfQogCi1KU1ZhbHVlIEpTRGV2aWNlTW90aW9uRXZlbnQ6OmFjY2VsZXJhdGlv
bihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTRGV2aWNlTW90aW9uRXZlbnQ6OmFj
Y2VsZXJhdGlvbihFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewogICAgIERldmljZU1vdGlvbkV2
ZW50JiBpbXAgPSBpbXBsKCk7CiAgICAgaWYgKCFpbXAuZGV2aWNlTW90aW9uRGF0YSgpLT5hY2Nl
bGVyYXRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIHJldHVybiBjcmVhdGVB
Y2NlbGVyYXRpb25PYmplY3QoaW1wLmRldmljZU1vdGlvbkRhdGEoKS0+YWNjZWxlcmF0aW9uKCks
IGV4ZWMpOworICAgIHJldHVybiBjcmVhdGVBY2NlbGVyYXRpb25PYmplY3QoaW1wLmRldmljZU1v
dGlvbkRhdGEoKS0+YWNjZWxlcmF0aW9uKCksIHN0YXRlKTsKIH0KIAotSlNWYWx1ZSBKU0Rldmlj
ZU1vdGlvbkV2ZW50OjphY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5KEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKK0pTVmFsdWUgSlNEZXZpY2VNb3Rpb25FdmVudDo6YWNjZWxlcmF0aW9uSW5jbHVk
aW5nR3Jhdml0eShFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewogICAgIERldmljZU1vdGlvbkV2
ZW50JiBpbXAgPSBpbXBsKCk7CiAgICAgaWYgKCFpbXAuZGV2aWNlTW90aW9uRGF0YSgpLT5hY2Nl
bGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5KCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKLSAg
ICByZXR1cm4gY3JlYXRlQWNjZWxlcmF0aW9uT2JqZWN0KGltcC5kZXZpY2VNb3Rpb25EYXRhKCkt
PmFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkoKSwgZXhlYyk7CisgICAgcmV0dXJuIGNyZWF0
ZUFjY2VsZXJhdGlvbk9iamVjdChpbXAuZGV2aWNlTW90aW9uRGF0YSgpLT5hY2NlbGVyYXRpb25J
bmNsdWRpbmdHcmF2aXR5KCksIHN0YXRlKTsKIH0KIAotSlNWYWx1ZSBKU0RldmljZU1vdGlvbkV2
ZW50Ojpyb3RhdGlvblJhdGUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU0Rldmlj
ZU1vdGlvbkV2ZW50Ojpyb3RhdGlvblJhdGUoRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICAg
ICBEZXZpY2VNb3Rpb25FdmVudCYgaW1wID0gaW1wbCgpOwogICAgIGlmICghaW1wLmRldmljZU1v
dGlvbkRhdGEoKS0+cm90YXRpb25SYXRlKCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKLSAg
ICByZXR1cm4gY3JlYXRlUm90YXRpb25SYXRlT2JqZWN0KGltcC5kZXZpY2VNb3Rpb25EYXRhKCkt
PnJvdGF0aW9uUmF0ZSgpLCBleGVjKTsKKyAgICByZXR1cm4gY3JlYXRlUm90YXRpb25SYXRlT2Jq
ZWN0KGltcC5kZXZpY2VNb3Rpb25EYXRhKCktPnJvdGF0aW9uUmF0ZSgpLCBzdGF0ZSk7CiB9CiAK
LUpTVmFsdWUgSlNEZXZpY2VNb3Rpb25FdmVudDo6aW50ZXJ2YWwoRXhlY1N0YXRlKikgY29uc3QK
K0pTVmFsdWUgSlNEZXZpY2VNb3Rpb25FdmVudDo6aW50ZXJ2YWwoRXhlY1N0YXRlJikgY29uc3QK
IHsKICAgICBEZXZpY2VNb3Rpb25FdmVudCYgaW1wID0gaW1wbCgpOwogICAgIGlmICghaW1wLmRl
dmljZU1vdGlvbkRhdGEoKS0+Y2FuUHJvdmlkZUludGVydmFsKCkpCkBAIC0xNjYsMjggKzE2Niwy
OCBAQCBKU1ZhbHVlIEpTRGV2aWNlTW90aW9uRXZlbnQ6OmludGVydmFsKEV4ZWNTdGF0ZSopIGNv
bnN0CiAgICAgcmV0dXJuIGpzTnVtYmVyKGltcC5kZXZpY2VNb3Rpb25EYXRhKCktPmludGVydmFs
KCkpOwogfQogCi1KU1ZhbHVlIEpTRGV2aWNlTW90aW9uRXZlbnQ6OmluaXREZXZpY2VNb3Rpb25F
dmVudChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTRGV2aWNlTW90aW9uRXZlbnQ6OmluaXRE
ZXZpY2VNb3Rpb25FdmVudChFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGNvbnN0IFN0cmluZyB0
eXBlID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAg
IGJvb2wgYnViYmxlcyA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvQm9vbGVhbihleGVjKTsKLSAgICBi
b29sIGNhbmNlbGFibGUgPSBleGVjLT5hcmd1bWVudCgyKS50b0Jvb2xlYW4oZXhlYyk7CisgICAg
Y29uc3QgU3RyaW5nIHR5cGUgPSBzdGF0ZS5hcmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUpLT52
YWx1ZSgmc3RhdGUpOworICAgIGJvb2wgYnViYmxlcyA9IHN0YXRlLmFyZ3VtZW50KDEpLnRvQm9v
bGVhbigmc3RhdGUpOworICAgIGJvb2wgY2FuY2VsYWJsZSA9IHN0YXRlLmFyZ3VtZW50KDIpLnRv
Qm9vbGVhbigmc3RhdGUpOwogCiAgICAgLy8gSWYgYW55IG9mIHRoZSBwYXJhbWV0ZXJzIGFyZSBu
dWxsIG9yIHVuZGVmaW5lZCwgbWFyayB0aGVtIGFzIG5vdCBwcm92aWRlZC4KICAgICAvLyBPdGhl
cndpc2UsIHVzZSB0aGUgc3RhbmRhcmQgSmF2YVNjcmlwdCBjb252ZXJzaW9uLgotICAgIFJlZlB0
cjxEZXZpY2VNb3Rpb25EYXRhOjpBY2NlbGVyYXRpb24+IGFjY2VsZXJhdGlvbiA9IHJlYWRBY2Nl
bGVyYXRpb25Bcmd1bWVudChleGVjLT5hcmd1bWVudCgzKSwgZXhlYyk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIFJlZlB0cjxEZXZpY2VNb3Rpb25EYXRhOjpBY2NlbGVyYXRp
b24+IGFjY2VsZXJhdGlvbiA9IHJlYWRBY2NlbGVyYXRpb25Bcmd1bWVudChzdGF0ZS5hcmd1bWVu
dCgzKSwgc3RhdGUpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBSZWZQdHI8RGV2aWNlTW90aW9uRGF0YTo6QWNjZWxl
cmF0aW9uPiBhY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5ID0gcmVhZEFjY2VsZXJhdGlvbkFy
Z3VtZW50KGV4ZWMtPmFyZ3VtZW50KDQpLCBleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgUmVmUHRyPERldmljZU1vdGlvbkRhdGE6OkFjY2VsZXJhdGlvbj4gYWNjZWxl
cmF0aW9uSW5jbHVkaW5nR3Jhdml0eSA9IHJlYWRBY2NlbGVyYXRpb25Bcmd1bWVudChzdGF0ZS5h
cmd1bWVudCg0KSwgc3RhdGUpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBSZWZQdHI8RGV2aWNlTW90aW9uRGF0YTo6
Um90YXRpb25SYXRlPiByb3RhdGlvblJhdGUgPSByZWFkUm90YXRpb25SYXRlQXJndW1lbnQoZXhl
Yy0+YXJndW1lbnQoNSksIGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBSZWZQdHI8RGV2aWNlTW90aW9uRGF0YTo6Um90YXRpb25SYXRlPiByb3RhdGlvblJhdGUgPSBy
ZWFkUm90YXRpb25SYXRlQXJndW1lbnQoc3RhdGUuYXJndW1lbnQoNSksIHN0YXRlKTsKKyAgICBp
ZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
Ci0gICAgYm9vbCBpbnRlcnZhbFByb3ZpZGVkID0gIWV4ZWMtPmFyZ3VtZW50KDYpLmlzVW5kZWZp
bmVkT3JOdWxsKCk7Ci0gICAgZG91YmxlIGludGVydmFsID0gZXhlYy0+YXJndW1lbnQoNikudG9O
dW1iZXIoZXhlYyk7CisgICAgYm9vbCBpbnRlcnZhbFByb3ZpZGVkID0gIXN0YXRlLmFyZ3VtZW50
KDYpLmlzVW5kZWZpbmVkT3JOdWxsKCk7CisgICAgZG91YmxlIGludGVydmFsID0gc3RhdGUuYXJn
dW1lbnQoNikudG9OdW1iZXIoJnN0YXRlKTsKICAgICBSZWZQdHI8RGV2aWNlTW90aW9uRGF0YT4g
ZGV2aWNlTW90aW9uRGF0YSA9IERldmljZU1vdGlvbkRhdGE6OmNyZWF0ZShhY2NlbGVyYXRpb24s
IGFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHksIHJvdGF0aW9uUmF0ZSwgaW50ZXJ2YWxQcm92
aWRlZCwgaW50ZXJ2YWwpOwogICAgIGltcGwoKS5pbml0RGV2aWNlTW90aW9uRXZlbnQodHlwZSwg
YnViYmxlcywgY2FuY2VsYWJsZSwgZGV2aWNlTW90aW9uRGF0YS5nZXQoKSk7CiAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RldmljZU9yaWVudGF0aW9uRXZlbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50Q3VzdG9tLmNwcAppbmRleCAyMzU3NWZkMTgw
ZTljOTFhNzNkMWM1NzQ1NWRjN2JlMzQ2NjY5YjNmLi4xMTI3MDUyYmM2MDVlN2FjZGY2ZDVkYTY2
ZGM0MjhmOGE4YmY4ZWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RldmljZU9yaWVudGF0aW9uRXZlbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRGV2aWNlT3JpZW50YXRpb25FdmVudEN1c3RvbS5jcHAKQEAgLTM4LDcgKzM4
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1Zh
bHVlIEpTRGV2aWNlT3JpZW50YXRpb25FdmVudDo6YWxwaGEoRXhlY1N0YXRlKikgY29uc3QKK0pT
VmFsdWUgSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50OjphbHBoYShFeGVjU3RhdGUmKSBjb25zdAog
ewogICAgIERldmljZU9yaWVudGF0aW9uRXZlbnQmIGltcCA9IGltcGwoKTsKICAgICBpZiAoIWlt
cC5vcmllbnRhdGlvbigpLT5jYW5Qcm92aWRlQWxwaGEoKSkKQEAgLTQ2LDcgKzQ2LDcgQEAgSlNW
YWx1ZSBKU0RldmljZU9yaWVudGF0aW9uRXZlbnQ6OmFscGhhKEV4ZWNTdGF0ZSopIGNvbnN0CiAg
ICAgcmV0dXJuIGpzTnVtYmVyKGltcC5vcmllbnRhdGlvbigpLT5hbHBoYSgpKTsKIH0KIAotSlNW
YWx1ZSBKU0RldmljZU9yaWVudGF0aW9uRXZlbnQ6OmJldGEoRXhlY1N0YXRlKikgY29uc3QKK0pT
VmFsdWUgSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50OjpiZXRhKEV4ZWNTdGF0ZSYpIGNvbnN0CiB7
CiAgICAgRGV2aWNlT3JpZW50YXRpb25FdmVudCYgaW1wID0gaW1wbCgpOwogICAgIGlmICghaW1w
Lm9yaWVudGF0aW9uKCktPmNhblByb3ZpZGVCZXRhKCkpCkBAIC01NCw3ICs1NCw3IEBAIEpTVmFs
dWUgSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50OjpiZXRhKEV4ZWNTdGF0ZSopIGNvbnN0CiAgICAg
cmV0dXJuIGpzTnVtYmVyKGltcC5vcmllbnRhdGlvbigpLT5iZXRhKCkpOwogfQogCi1KU1ZhbHVl
IEpTRGV2aWNlT3JpZW50YXRpb25FdmVudDo6Z2FtbWEoRXhlY1N0YXRlKikgY29uc3QKK0pTVmFs
dWUgSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50OjpnYW1tYShFeGVjU3RhdGUmKSBjb25zdAogewog
ICAgIERldmljZU9yaWVudGF0aW9uRXZlbnQmIGltcCA9IGltcGwoKTsKICAgICBpZiAoIWltcC5v
cmllbnRhdGlvbigpLT5jYW5Qcm92aWRlR2FtbWEoKSkKQEAgLTYzLDcgKzYzLDcgQEAgSlNWYWx1
ZSBKU0RldmljZU9yaWVudGF0aW9uRXZlbnQ6OmdhbW1hKEV4ZWNTdGF0ZSopIGNvbnN0CiB9CiAK
ICNpZiBQTEFURk9STShJT1MpCi1KU1ZhbHVlIEpTRGV2aWNlT3JpZW50YXRpb25FdmVudDo6d2Vi
a2l0Q29tcGFzc0hlYWRpbmcoRXhlY1N0YXRlKikgY29uc3QKK0pTVmFsdWUgSlNEZXZpY2VPcmll
bnRhdGlvbkV2ZW50Ojp3ZWJraXRDb21wYXNzSGVhZGluZyhFeGVjU3RhdGUmKSBjb25zdAogewog
ICAgIERldmljZU9yaWVudGF0aW9uRXZlbnQmIGltcCA9IGltcGwoKTsKICAgICBpZiAoIWltcC5v
cmllbnRhdGlvbigpLT5jYW5Qcm92aWRlQ29tcGFzc0hlYWRpbmcoKSkKQEAgLTcxLDcgKzcxLDcg
QEAgSlNWYWx1ZSBKU0RldmljZU9yaWVudGF0aW9uRXZlbnQ6OndlYmtpdENvbXBhc3NIZWFkaW5n
KEV4ZWNTdGF0ZSopIGNvbnN0CiAgICAgcmV0dXJuIGpzTnVtYmVyKGltcC5vcmllbnRhdGlvbigp
LT5jb21wYXNzSGVhZGluZygpKTsKIH0KIAotSlNWYWx1ZSBKU0RldmljZU9yaWVudGF0aW9uRXZl
bnQ6OndlYmtpdENvbXBhc3NBY2N1cmFjeShFeGVjU3RhdGUqKSBjb25zdAorSlNWYWx1ZSBKU0Rl
dmljZU9yaWVudGF0aW9uRXZlbnQ6OndlYmtpdENvbXBhc3NBY2N1cmFjeShFeGVjU3RhdGUmKSBj
b25zdAogewogICAgIERldmljZU9yaWVudGF0aW9uRXZlbnQmIGltcCA9IGltcGwoKTsKICAgICBp
ZiAoIWltcC5vcmllbnRhdGlvbigpLT5jYW5Qcm92aWRlQ29tcGFzc0FjY3VyYWN5KCkpCkBAIC04
MSw3ICs4MSw3IEBAIEpTVmFsdWUgSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50Ojp3ZWJraXRDb21w
YXNzQWNjdXJhY3koRXhlY1N0YXRlKikgY29uc3QKICNlbmRpZgogCiAjaWYgIVBMQVRGT1JNKElP
UykKLUpTVmFsdWUgSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50OjphYnNvbHV0ZShFeGVjU3RhdGUq
KSBjb25zdAorSlNWYWx1ZSBKU0RldmljZU9yaWVudGF0aW9uRXZlbnQ6OmFic29sdXRlKEV4ZWNT
dGF0ZSYpIGNvbnN0CiB7CiAgICAgRGV2aWNlT3JpZW50YXRpb25FdmVudCYgaW1wID0gaW1wbCgp
OwogICAgIGlmICghaW1wLm9yaWVudGF0aW9uKCktPmNhblByb3ZpZGVBYnNvbHV0ZSgpKQpAQCAt
OTAsMjggKzkwLDI4IEBAIEpTVmFsdWUgSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50OjphYnNvbHV0
ZShFeGVjU3RhdGUqKSBjb25zdAogfQogI2VuZGlmCiAKLUpTVmFsdWUgSlNEZXZpY2VPcmllbnRh
dGlvbkV2ZW50Ojppbml0RGV2aWNlT3JpZW50YXRpb25FdmVudChFeGVjU3RhdGUqIGV4ZWMpCitK
U1ZhbHVlIEpTRGV2aWNlT3JpZW50YXRpb25FdmVudDo6aW5pdERldmljZU9yaWVudGF0aW9uRXZl
bnQoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBjb25zdCBTdHJpbmcgdHlwZSA9IGV4ZWMtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBib29sIGJ1YmJsZXMg
PSBleGVjLT5hcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgYm9vbCBjYW5jZWxhYmxl
ID0gZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpOworICAgIGNvbnN0IFN0cmluZyB0
eXBlID0gc3RhdGUuYXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsK
KyAgICBib29sIGJ1YmJsZXMgPSBzdGF0ZS5hcmd1bWVudCgxKS50b0Jvb2xlYW4oJnN0YXRlKTsK
KyAgICBib29sIGNhbmNlbGFibGUgPSBzdGF0ZS5hcmd1bWVudCgyKS50b0Jvb2xlYW4oJnN0YXRl
KTsKICAgICAvLyBJZiBhbHBoYSwgYmV0YSBvciBnYW1tYSBhcmUgbnVsbCBvciB1bmRlZmluZWQs
IG1hcmsgdGhlbSBhcyBub3QgcHJvdmlkZWQuCiAgICAgLy8gT3RoZXJ3aXNlLCB1c2UgdGhlIHN0
YW5kYXJkIEphdmFTY3JpcHQgY29udmVyc2lvbi4KLSAgICBib29sIGFscGhhUHJvdmlkZWQgPSAh
ZXhlYy0+YXJndW1lbnQoMykuaXNVbmRlZmluZWRPck51bGwoKTsKLSAgICBkb3VibGUgYWxwaGEg
PSBleGVjLT5hcmd1bWVudCgzKS50b051bWJlcihleGVjKTsKLSAgICBib29sIGJldGFQcm92aWRl
ZCA9ICFleGVjLT5hcmd1bWVudCg0KS5pc1VuZGVmaW5lZE9yTnVsbCgpOwotICAgIGRvdWJsZSBi
ZXRhID0gZXhlYy0+YXJndW1lbnQoNCkudG9OdW1iZXIoZXhlYyk7Ci0gICAgYm9vbCBnYW1tYVBy
b3ZpZGVkID0gIWV4ZWMtPmFyZ3VtZW50KDUpLmlzVW5kZWZpbmVkT3JOdWxsKCk7Ci0gICAgZG91
YmxlIGdhbW1hID0gZXhlYy0+YXJndW1lbnQoNSkudG9OdW1iZXIoZXhlYyk7CisgICAgYm9vbCBh
bHBoYVByb3ZpZGVkID0gIXN0YXRlLmFyZ3VtZW50KDMpLmlzVW5kZWZpbmVkT3JOdWxsKCk7Cisg
ICAgZG91YmxlIGFscGhhID0gc3RhdGUuYXJndW1lbnQoMykudG9OdW1iZXIoJnN0YXRlKTsKKyAg
ICBib29sIGJldGFQcm92aWRlZCA9ICFzdGF0ZS5hcmd1bWVudCg0KS5pc1VuZGVmaW5lZE9yTnVs
bCgpOworICAgIGRvdWJsZSBiZXRhID0gc3RhdGUuYXJndW1lbnQoNCkudG9OdW1iZXIoJnN0YXRl
KTsKKyAgICBib29sIGdhbW1hUHJvdmlkZWQgPSAhc3RhdGUuYXJndW1lbnQoNSkuaXNVbmRlZmlu
ZWRPck51bGwoKTsKKyAgICBkb3VibGUgZ2FtbWEgPSBzdGF0ZS5hcmd1bWVudCg1KS50b051bWJl
cigmc3RhdGUpOwogI2lmIFBMQVRGT1JNKElPUykKLSAgICBib29sIGNvbXBhc3NIZWFkaW5nUHJv
dmlkZWQgPSAhZXhlYy0+YXJndW1lbnQoNikuaXNVbmRlZmluZWRPck51bGwoKTsKLSAgICBkb3Vi
bGUgY29tcGFzc0hlYWRpbmcgPSBleGVjLT5hcmd1bWVudCg2KS50b051bWJlcihleGVjKTsKLSAg
ICBib29sIGNvbXBhc3NBY2N1cmFjeVByb3ZpZGVkID0gIWV4ZWMtPmFyZ3VtZW50KDcpLmlzVW5k
ZWZpbmVkT3JOdWxsKCk7Ci0gICAgZG91YmxlIGNvbXBhc3NBY2N1cmFjeSA9IGV4ZWMtPmFyZ3Vt
ZW50KDcpLnRvTnVtYmVyKGV4ZWMpOworICAgIGJvb2wgY29tcGFzc0hlYWRpbmdQcm92aWRlZCA9
ICFzdGF0ZS5hcmd1bWVudCg2KS5pc1VuZGVmaW5lZE9yTnVsbCgpOworICAgIGRvdWJsZSBjb21w
YXNzSGVhZGluZyA9IHN0YXRlLmFyZ3VtZW50KDYpLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgYm9v
bCBjb21wYXNzQWNjdXJhY3lQcm92aWRlZCA9ICFzdGF0ZS5hcmd1bWVudCg3KS5pc1VuZGVmaW5l
ZE9yTnVsbCgpOworICAgIGRvdWJsZSBjb21wYXNzQWNjdXJhY3kgPSBzdGF0ZS5hcmd1bWVudCg3
KS50b051bWJlcigmc3RhdGUpOwogICAgIFJlZlB0cjxEZXZpY2VPcmllbnRhdGlvbkRhdGE+IG9y
aWVudGF0aW9uID0gRGV2aWNlT3JpZW50YXRpb25EYXRhOjpjcmVhdGUoYWxwaGFQcm92aWRlZCwg
YWxwaGEsIGJldGFQcm92aWRlZCwgYmV0YSwgZ2FtbWFQcm92aWRlZCwgZ2FtbWEsIGNvbXBhc3NI
ZWFkaW5nUHJvdmlkZWQsIGNvbXBhc3NIZWFkaW5nLCBjb21wYXNzQWNjdXJhY3lQcm92aWRlZCwg
Y29tcGFzc0FjY3VyYWN5KTsKICNlbHNlCi0gICAgYm9vbCBhYnNvbHV0ZVByb3ZpZGVkID0gIWV4
ZWMtPmFyZ3VtZW50KDYpLmlzVW5kZWZpbmVkT3JOdWxsKCk7Ci0gICAgYm9vbCBhYnNvbHV0ZSA9
IGV4ZWMtPmFyZ3VtZW50KDYpLnRvQm9vbGVhbihleGVjKTsKKyAgICBib29sIGFic29sdXRlUHJv
dmlkZWQgPSAhc3RhdGUuYXJndW1lbnQoNikuaXNVbmRlZmluZWRPck51bGwoKTsKKyAgICBib29s
IGFic29sdXRlID0gc3RhdGUuYXJndW1lbnQoNikudG9Cb29sZWFuKCZzdGF0ZSk7CiAgICAgUmVm
UHRyPERldmljZU9yaWVudGF0aW9uRGF0YT4gb3JpZW50YXRpb24gPSBEZXZpY2VPcmllbnRhdGlv
bkRhdGE6OmNyZWF0ZShhbHBoYVByb3ZpZGVkLCBhbHBoYSwgYmV0YVByb3ZpZGVkLCBiZXRhLCBn
YW1tYVByb3ZpZGVkLCBnYW1tYSwgYWJzb2x1dGVQcm92aWRlZCwgYWJzb2x1dGUpOwogI2VuZGlm
CiAgICAgaW1wbCgpLmluaXREZXZpY2VPcmllbnRhdGlvbkV2ZW50KHR5cGUsIGJ1YmJsZXMsIGNh
bmNlbGFibGUsIG9yaWVudGF0aW9uLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RpY3Rpb25hcnkuY3BwCmluZGV4IGY2N2MyMzQ4NWZmNDQ0MDNmOGVlZTM4YWVlMzYwYzgw
ZDhjZWFhODEuLmUwOTQ5NDQzNDg3NjBhNGFkYjM3NWY5MGQ3ZTc0NWQwNmFlZjliOWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcApAQCAtMTc2LDcgKzE3
Niw3IEBAIHZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoRXhlY1N0YXRlKiwgSlNWYWx1
ZSB2YWx1ZSwgUmVmUHRyPFN0b3JhZ2U+JiByZXN1CiB2b2lkIEpTRGljdGlvbmFyeTo6Y29udmVy
dFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgTWVzc2FnZVBvcnRBcnJheSYg
cmVzdWx0KQogewogICAgIEFycmF5QnVmZmVyQXJyYXkgYXJyYXlCdWZmZXJzOwotICAgIGZpbGxN
ZXNzYWdlUG9ydEFycmF5KGV4ZWMsIHZhbHVlLCByZXN1bHQsIGFycmF5QnVmZmVycyk7CisgICAg
ZmlsbE1lc3NhZ2VQb3J0QXJyYXkoKmV4ZWMsIHZhbHVlLCByZXN1bHQsIGFycmF5QnVmZmVycyk7
CiB9CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCmluZGV4IDQ0ODJiY2JiZGU5NGU5ZjM5MjI1YTdm
YTFiYThiMDU4NTBiNjIyODAuLmVjMGI5YzJiYTMwZTg2MGY2ZTJiYTk4MDE3MGQ4ZjcwMmI0NDUy
ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0
b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20u
Y3BwCkBAIC0xMDAsMzMgKzEwMCwzMyBAQCBKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRG9jdQogICAgIHJl
dHVybiBkb2N1bWVudCA/IGNyZWF0ZU5ld0RvY3VtZW50V3JhcHBlcigqc3RhdGUsICpnbG9iYWxP
YmplY3QsICpkb2N1bWVudCkgOiBqc051bGwoKTsKIH0KIAotSlNWYWx1ZSBKU0RvY3VtZW50Ojpw
cmVwZW5kKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTRG9jdW1lbnQ6OnByZXBlbmQoRXhl
Y1N0YXRlJiBzdGF0ZSkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCku
cHJlcGVuZCh0b05vZGVPclN0cmluZ1ZlY3Rvcigqc3RhdGUpLCBlYyk7Ci0gICAgc2V0RE9NRXhj
ZXB0aW9uKHN0YXRlLCBlYyk7CisgICAgaW1wbCgpLnByZXBlbmQodG9Ob2RlT3JTdHJpbmdWZWN0
b3Ioc3RhdGUpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogCiAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNEb2N1bWVudDo6YXBwZW5kKEV4
ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTRG9jdW1lbnQ6OmFwcGVuZChFeGVjU3RhdGUmIHN0
YXRlKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGltcGwoKS5hcHBlbmQodG9O
b2RlT3JTdHJpbmdWZWN0b3IoKnN0YXRlKSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihzdGF0
ZSwgZWMpOworICAgIGltcGwoKS5hcHBlbmQodG9Ob2RlT3JTdHJpbmdWZWN0b3Ioc3RhdGUpLCBl
Yyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogCiAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotSlNWYWx1ZSBKU0RvY3Vt
ZW50OjpjcmVhdGVUb3VjaExpc3QoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0RvY3VtZW50
OjpjcmVhdGVUb3VjaExpc3QoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBSZWZQdHI8VG91Y2hM
aXN0PiB0b3VjaExpc3QgPSBUb3VjaExpc3Q6OmNyZWF0ZSgpOwogCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50KCk7IGkrKykKLSAgICAgICAgdG91Y2hMaXN0
LT5hcHBlbmQoSlNUb3VjaDo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KGkpKSk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzdGF0ZS5hcmd1bWVudENvdW50KCk7IGkrKykKKyAgICAgICAg
dG91Y2hMaXN0LT5hcHBlbmQoSlNUb3VjaDo6dG9XcmFwcGVkKHN0YXRlLmFyZ3VtZW50KGkpKSk7
CiAKLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgdG91Y2hMaXN0LnJlbGVh
c2UoKSk7CisgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgdG91Y2hMaXN0
LnJlbGVhc2UoKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNEb2N1bWVudEZyYWdtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRG9jdW1lbnRGcmFnbWVudEN1c3RvbS5jcHAKaW5kZXggYzZhMmEzYTljZDhk
MGM0M2U1MThjZTRiOWUzYTEwMTk2ZTQ5ZTRiYy4uYzM1MmQ1ZGI5N2JiY2RlMGM2Y2ZjOTYxZGJh
ZWE0ODFjYjcyMTVjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
b2N1bWVudEZyYWdtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RvY3VtZW50RnJhZ21lbnRDdXN0b20uY3BwCkBAIC0zNCwyMCArMzQsMjAgQEAgdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTRG9jdW1l
bnRGcmFnbWVudDo6cHJlcGVuZChFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0RvY3VtZW50
RnJhZ21lbnQ6OnByZXBlbmQoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICBpbXBsKCkucHJlcGVuZCh0b05vZGVPclN0cmluZ1ZlY3Rvcigqc3RhdGUp
LCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CisgICAgaW1wbCgpLnByZXBl
bmQodG9Ob2RlT3JTdHJpbmdWZWN0b3Ioc3RhdGUpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9u
KCZzdGF0ZSwgZWMpOwogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUg
SlNEb2N1bWVudEZyYWdtZW50OjphcHBlbmQoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNE
b2N1bWVudEZyYWdtZW50OjphcHBlbmQoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCkuYXBwZW5kKHRvTm9kZU9yU3RyaW5nVmVjdG9yKCpz
dGF0ZSksIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKKyAgICBpbXBsKCku
YXBwZW5kKHRvTm9kZU9yU3RyaW5nVmVjdG9yKHN0YXRlKSwgZWMpOworICAgIHNldERPTUV4Y2Vw
dGlvbigmc3RhdGUsIGVjKTsKIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudFR5cGVDdXN0b20uY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudFR5cGVDdXN0b20uY3BwCmlu
ZGV4IDM3YWYyNmZlZGQzNjZkNjY2NWFjZDM4N2IwMWFkNjZkMjY0YTc5NzQuLjgzMzM4NzIwMWJi
ZjYwMmI1NTUzNjA4YmViNTUxMDYyOWNlY2I5NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRUeXBlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50VHlwZUN1c3RvbS5jcHAKQEAgLTMzLDI5ICszMywyOSBA
QCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUg
SlNEb2N1bWVudFR5cGU6OmJlZm9yZShFeGVjU3RhdGUqIHN0YXRlKQorSlNWYWx1ZSBKU0RvY3Vt
ZW50VHlwZTo6YmVmb3JlKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgaW1wbCgpLmJlZm9yZSh0b05vZGVPclN0cmluZ1ZlY3Rvcigqc3RhdGUpLCBl
Yyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CisgICAgaW1wbCgpLmJlZm9yZSh0
b05vZGVPclN0cmluZ1ZlY3RvcihzdGF0ZSksIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0
YXRlLCBlYyk7CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0Rv
Y3VtZW50VHlwZTo6YWZ0ZXIoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNEb2N1bWVudFR5
cGU6OmFmdGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgaW1wbCgpLmFmdGVyKHRvTm9kZU9yU3RyaW5nVmVjdG9yKCpzdGF0ZSksIGVjKTsKLSAg
ICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKKyAgICBpbXBsKCkuYWZ0ZXIodG9Ob2RlT3JT
dHJpbmdWZWN0b3Ioc3RhdGUpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMp
OwogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNEb2N1bWVudFR5
cGU6OnJlcGxhY2VXaXRoKEV4ZWNTdGF0ZSogc3RhdGUpCitKU1ZhbHVlIEpTRG9jdW1lbnRUeXBl
OjpyZXBsYWNlV2l0aChFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgIGltcGwoKS5yZXBsYWNlV2l0aCh0b05vZGVPclN0cmluZ1ZlY3Rvcigqc3RhdGUp
LCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CisgICAgaW1wbCgpLnJlcGxh
Y2VXaXRoKHRvTm9kZU9yU3RyaW5nVmVjdG9yKHN0YXRlKSwgZWMpOworICAgIHNldERPTUV4Y2Vw
dGlvbigmc3RhdGUsIGVjKTsKIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFbGVtZW50Q3VzdG9tLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRWxlbWVudEN1c3RvbS5jcHAKaW5kZXggOGViMGVk
YTkyYzM1YWFhYmM4MTEzMmY2Y2U0NGE3MDIwMTliMDRhYS4uNzJkZDM4ZWVjY2Q4MWVjNmZiNDli
ZGRjMzEzYjUxNDc3ZTQ5MjExYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNFbGVtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0VsZW1lbnRDdXN0b20uY3BwCkBAIC02Nyw0NyArNjcsNDcgQEAgSlNWYWx1ZSB0b0pTTmV3bHlD
cmVhdGVkKEV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVsZW1l
bnQqIGUKICAgICByZXR1cm4gd3JhcHBlcjsgICAgCiB9CiAKLUpTVmFsdWUgSlNFbGVtZW50Ojpi
ZWZvcmUoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNFbGVtZW50OjpiZWZvcmUoRXhlY1N0
YXRlJiBzdGF0ZSkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCkuYmVm
b3JlKHRvTm9kZU9yU3RyaW5nVmVjdG9yKCpzdGF0ZSksIGVjKTsKLSAgICBzZXRET01FeGNlcHRp
b24oc3RhdGUsIGVjKTsKKyAgICBpbXBsKCkuYmVmb3JlKHRvTm9kZU9yU3RyaW5nVmVjdG9yKHN0
YXRlKSwgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKIAogICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlIEpTRWxlbWVudDo6YWZ0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSkKK0pTVmFsdWUgSlNFbGVtZW50OjphZnRlcihFeGVjU3RhdGUmIHN0YXRlKQogewog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGltcGwoKS5hZnRlcih0b05vZGVPclN0cmlu
Z1ZlY3Rvcigqc3RhdGUpLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7Cisg
ICAgaW1wbCgpLmFmdGVyKHRvTm9kZU9yU3RyaW5nVmVjdG9yKHN0YXRlKSwgZWMpOworICAgIHNl
dERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
fQogCi1KU1ZhbHVlIEpTRWxlbWVudDo6cmVwbGFjZVdpdGgoRXhlY1N0YXRlKiBzdGF0ZSkKK0pT
VmFsdWUgSlNFbGVtZW50OjpyZXBsYWNlV2l0aChFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGltcGwoKS5yZXBsYWNlV2l0aCh0b05vZGVPclN0cmlu
Z1ZlY3Rvcigqc3RhdGUpLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7Cisg
ICAgaW1wbCgpLnJlcGxhY2VXaXRoKHRvTm9kZU9yU3RyaW5nVmVjdG9yKHN0YXRlKSwgZWMpOwor
ICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKIAogICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCi1KU1ZhbHVlIEpTRWxlbWVudDo6cHJlcGVuZChFeGVjU3RhdGUqIHN0YXRlKQor
SlNWYWx1ZSBKU0VsZW1lbnQ6OnByZXBlbmQoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCkucHJlcGVuZCh0b05vZGVPclN0cmluZ1ZlY3Rv
cigqc3RhdGUpLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CisgICAgaW1w
bCgpLnByZXBlbmQodG9Ob2RlT3JTdHJpbmdWZWN0b3Ioc3RhdGUpLCBlYyk7CisgICAgc2V0RE9N
RXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAK
LUpTVmFsdWUgSlNFbGVtZW50OjphcHBlbmQoRXhlY1N0YXRlKiBzdGF0ZSkKK0pTVmFsdWUgSlNF
bGVtZW50OjphcHBlbmQoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKLSAgICBpbXBsKCkuYXBwZW5kKHRvTm9kZU9yU3RyaW5nVmVjdG9yKCpzdGF0ZSksIGVj
KTsKLSAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKKyAgICBpbXBsKCkuYXBwZW5kKHRv
Tm9kZU9yU3RyaW5nVmVjdG9yKHN0YXRlKSwgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3Rh
dGUsIGVjKTsKIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAppbmRleCBhZjdjM2IwMTEwOGZlYjM1ZTAw
NmNhYTU5ZWU1Mjk4NTU5MThhNzYzLi41MWU5ZjBkOTMwZjZjOWY2OThmZDIwYWNhOWI4MDFhNjg3
YWY4N2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNw
cApAQCAtNDQsOSArNDQsOSBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUpTVmFsdWUgSlNFdmVudDo6Y2xpcGJvYXJkRGF0YShFeGVjU3RhdGUqIGV4ZWMp
IGNvbnN0CitKU1ZhbHVlIEpTRXZlbnQ6OmNsaXBib2FyZERhdGEoRXhlY1N0YXRlJiBzdGF0ZSkg
Y29uc3QKIHsKLSAgICByZXR1cm4gaW1wbCgpLmlzQ2xpcGJvYXJkRXZlbnQoKSA/IHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0KCksIGltcGwoKS5jbGlwYm9hcmREYXRhKCkpIDoganNVbmRlZmluZWQo
KTsKKyAgICByZXR1cm4gaW1wbCgpLmlzQ2xpcGJvYXJkRXZlbnQoKSA/IHRvSlMoJnN0YXRlLCBn
bG9iYWxPYmplY3QoKSwgaW1wbCgpLmNsaXBib2FyZERhdGEoKSkgOiBqc1VuZGVmaW5lZCgpOwog
fQogCiAjZGVmaW5lIFRSWV9UT19XUkFQX1dJVEhfSU5URVJGQUNFKGludGVyZmFjZU5hbWUpIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3Rv
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJDdXN0b20uY3Bw
CmluZGV4IGIxZTljNzVlOThkOGVmMDdhNDM0ZTBjODAxOGE5ZmRlZjY5NjE0M2MuLjUxZmJmNGZh
MTgyZjRjM2JjNDZiYTU4ZmJkZTA3YzVlZjU4ZjEwNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcApAQCAtNDEsMTIgKzQxLDEyIEBA
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSBK
U0ZpbGVSZWFkZXI6OnJlc3VsdChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTRmls
ZVJlYWRlcjo6cmVzdWx0KEV4ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0CiB7CiAgICAgRmlsZVJlYWRl
ciYgaW1wID0gaW1wbCgpOwogICAgIGlmIChpbXAucmVhZFR5cGUoKSA9PSBGaWxlUmVhZGVyTG9h
ZGVyOjpSZWFkQXNBcnJheUJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcC5hcnJheUJ1ZmZlclJlc3VsdCgpKSk7Ci0gICAgcmV0
dXJuIGpzT3duZWRTdHJpbmdPck51bGwoZXhlYywgaW1wLnN0cmluZ1Jlc3VsdCgpKTsKKyAgICAg
ICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wLmFy
cmF5QnVmZmVyUmVzdWx0KCkpKTsKKyAgICByZXR1cm4ganNPd25lZFN0cmluZ09yTnVsbCgmc3Rh
dGUsIGltcC5zdHJpbmdSZXN1bHQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20u
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAK
aW5kZXggMTI3MDI0Nzc0YzE5YTAzM2U4ZGVkMDg3MDI4YWRlOGFlMDZlM2RiYy4uNTI3ZDIxM2Q3
MjM1MzEzZWNhZmI2ZWU3MjM3Yjc0YWVhNjkwNTViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAKQEAgLTk2LDIxICs5NiwyMSBA
QCBzdGF0aWMgUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gY3JlYXRlUG9zaXRpb25PcHRpb25zKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YQogICAgIHJldHVybiBvcHRpb25zOwogfQogCi1KU1Zh
bHVlIEpTR2VvbG9jYXRpb246OmdldEN1cnJlbnRQb3NpdGlvbihFeGVjU3RhdGUqIGV4ZWMpCitK
U1ZhbHVlIEpTR2VvbG9jYXRpb246OmdldEN1cnJlbnRQb3NpdGlvbihFeGVjU3RhdGUmIHN0YXRl
KQogewogICAgIC8vIEFyZ3VtZW50czogUG9zaXRpb25DYWxsYmFjaywgKG9wdGlvbmFsKVBvc2l0
aW9uRXJyb3JDYWxsYmFjaywgKG9wdGlvbmFsKVBvc2l0aW9uT3B0aW9ucwogCi0gICAgUmVmUHRy
PFBvc2l0aW9uQ2FsbGJhY2s+IHBvc2l0aW9uQ2FsbGJhY2sgPSBjcmVhdGVGdW5jdGlvbk9ubHlD
YWxsYmFjazxKU1Bvc2l0aW9uQ2FsbGJhY2s+KGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBleGVjLT5h
cmd1bWVudCgwKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIFJlZlB0cjxQ
b3NpdGlvbkNhbGxiYWNrPiBwb3NpdGlvbkNhbGxiYWNrID0gY3JlYXRlRnVuY3Rpb25Pbmx5Q2Fs
bGJhY2s8SlNQb3NpdGlvbkNhbGxiYWNrPigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBzdGF0ZS5h
cmd1bWVudCgwKSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICBBU1NFUlQocG9zaXRpb25DYWxsYmFjayk7CiAKLSAgICBS
ZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPiBwb3NpdGlvbkVycm9yQ2FsbGJhY2sgPSBjcmVh
dGVGdW5jdGlvbk9ubHlDYWxsYmFjazxKU1Bvc2l0aW9uRXJyb3JDYWxsYmFjaz4oZXhlYywgZ2xv
YmFsT2JqZWN0KCksIGV4ZWMtPmFyZ3VtZW50KDEpLCBDYWxsYmFja0FsbG93VW5kZWZpbmVkIHwg
Q2FsbGJhY2tBbGxvd051bGwpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBS
ZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPiBwb3NpdGlvbkVycm9yQ2FsbGJhY2sgPSBjcmVh
dGVGdW5jdGlvbk9ubHlDYWxsYmFjazxKU1Bvc2l0aW9uRXJyb3JDYWxsYmFjaz4oJnN0YXRlLCBn
bG9iYWxPYmplY3QoKSwgc3RhdGUuYXJndW1lbnQoMSksIENhbGxiYWNrQWxsb3dVbmRlZmluZWQg
fCBDYWxsYmFja0FsbG93TnVsbCk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIFJlZlB0cjxQb3NpdGlvbk9wdGlvbnM+
IHBvc2l0aW9uT3B0aW9ucyA9IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucyhleGVjLCBleGVjLT5hcmd1
bWVudCgyKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIFJlZlB0cjxQb3Np
dGlvbk9wdGlvbnM+IHBvc2l0aW9uT3B0aW9ucyA9IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucygmc3Rh
dGUsIHN0YXRlLmFyZ3VtZW50KDIpKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIEFTU0VSVChwb3NpdGlvbk9wdGlvbnMp
OwogCkBAIC0xMTgsMjEgKzExOCwyMSBAQCBKU1ZhbHVlIEpTR2VvbG9jYXRpb246OmdldEN1cnJl
bnRQb3NpdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9
CiAKLUpTVmFsdWUgSlNHZW9sb2NhdGlvbjo6d2F0Y2hQb3NpdGlvbihFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTR2VvbG9jYXRpb246OndhdGNoUG9zaXRpb24oRXhlY1N0YXRlJiBzdGF0ZSkK
IHsKICAgICAvLyBBcmd1bWVudHM6IFBvc2l0aW9uQ2FsbGJhY2ssIChvcHRpb25hbClQb3NpdGlv
bkVycm9yQ2FsbGJhY2ssIChvcHRpb25hbClQb3NpdGlvbk9wdGlvbnMKIAotICAgIFJlZlB0cjxQ
b3NpdGlvbkNhbGxiYWNrPiBwb3NpdGlvbkNhbGxiYWNrID0gY3JlYXRlRnVuY3Rpb25Pbmx5Q2Fs
bGJhY2s8SlNQb3NpdGlvbkNhbGxiYWNrPihleGVjLCBnbG9iYWxPYmplY3QoKSwgZXhlYy0+YXJn
dW1lbnQoMCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBSZWZQdHI8UG9z
aXRpb25DYWxsYmFjaz4gcG9zaXRpb25DYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxi
YWNrPEpTUG9zaXRpb25DYWxsYmFjaz4oJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgc3RhdGUuYXJn
dW1lbnQoMCkpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgQVNTRVJUKHBvc2l0aW9uQ2FsbGJhY2spOwogCi0gICAgUmVm
UHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4gcG9zaXRpb25FcnJvckNhbGxiYWNrID0gY3JlYXRl
RnVuY3Rpb25Pbmx5Q2FsbGJhY2s8SlNQb3NpdGlvbkVycm9yQ2FsbGJhY2s+KGV4ZWMsIGdsb2Jh
bE9iamVjdCgpLCBleGVjLT5hcmd1bWVudCgxKSwgQ2FsbGJhY2tBbGxvd1VuZGVmaW5lZCB8IENh
bGxiYWNrQWxsb3dOdWxsKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgUmVm
UHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4gcG9zaXRpb25FcnJvckNhbGxiYWNrID0gY3JlYXRl
RnVuY3Rpb25Pbmx5Q2FsbGJhY2s8SlNQb3NpdGlvbkVycm9yQ2FsbGJhY2s+KCZzdGF0ZSwgZ2xv
YmFsT2JqZWN0KCksIHN0YXRlLmFyZ3VtZW50KDEpLCBDYWxsYmFja0FsbG93VW5kZWZpbmVkIHwg
Q2FsbGJhY2tBbGxvd051bGwpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBw
b3NpdGlvbk9wdGlvbnMgPSBjcmVhdGVQb3NpdGlvbk9wdGlvbnMoZXhlYywgZXhlYy0+YXJndW1l
bnQoMikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBSZWZQdHI8UG9zaXRp
b25PcHRpb25zPiBwb3NpdGlvbk9wdGlvbnMgPSBjcmVhdGVQb3NpdGlvbk9wdGlvbnMoJnN0YXRl
LCBzdGF0ZS5hcmd1bWVudCgyKSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBBU1NFUlQocG9zaXRpb25PcHRpb25zKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVj
dGlvbkN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xs
ZWN0aW9uQ3VzdG9tLmNwcAppbmRleCA3NWNmZTVmNjZjYmQwYjMxNDE1ODYzMzM0MTIyNDU3MDI2
MmJkMzczLi4yNTkyZjQ2NzJlOGEyMTcwZWJmZmVhMjJkODMzNTU4MTMzOWYyMWY5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9t
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9u
Q3VzdG9tLmNwcApAQCAtMzYsMTggKzM2LDE4IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIEpTVmFsdWUgbmFtZWRJdGVtcyhFeGVjU3RhdGUq
IGV4ZWMsIEpTSFRNTEFsbENvbGxlY3Rpb24qIGNvbGxlY3Rpb24sIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCitzdGF0aWMgSlNWYWx1ZSBuYW1lZEl0ZW1zKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
SFRNTEFsbENvbGxlY3Rpb24qIGNvbGxlY3Rpb24sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUp
CiB7CiAgICAgVmVjdG9yPFJlZjxFbGVtZW50Pj4gbmFtZWRJdGVtcyA9IGNvbGxlY3Rpb24tPmlt
cGwoKS5uYW1lZEl0ZW1zKHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSkp
OwogCiAgICAgaWYgKG5hbWVkSXRlbXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICBpZiAobmFtZWRJdGVtcy5zaXplKCkgPT0gMSkKLSAgICAgICAgcmV0dXJu
IHRvSlMoZXhlYywgY29sbGVjdGlvbi0+Z2xvYmFsT2JqZWN0KCksIG5hbWVkSXRlbXNbMF0ucHRy
KCkpOworICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsIGNvbGxlY3Rpb24tPmdsb2JhbE9iamVj
dCgpLCBuYW1lZEl0ZW1zWzBdLnB0cigpKTsKIAogICAgIC8vIEZJWE1FOiBIVE1MNSBzcGVjaWZp
Y2F0aW9uIHNheXMgdGhpcyBzaG91bGQgYmUgYSBIVE1MQ29sbGVjdGlvbi4KICAgICAvLyBodHRw
Oi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9j
b21tb24tZG9tLWludGVyZmFjZXMuaHRtbCNodG1sYWxsY29sbGVjdGlvbgotICAgIHJldHVybiB0
b0pTKGV4ZWMsIGNvbGxlY3Rpb24tPmdsb2JhbE9iamVjdCgpLCBTdGF0aWNFbGVtZW50TGlzdDo6
YWRvcHQobmFtZWRJdGVtcykuZ2V0KCkpOworICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgY29sbGVj
dGlvbi0+Z2xvYmFsT2JqZWN0KCksIFN0YXRpY0VsZW1lbnRMaXN0OjphZG9wdChuYW1lZEl0ZW1z
KS5nZXQoKSk7CiB9CiAKIC8vIEhUTUxBbGxDb2xsZWN0aW9ucyBhcmUgc3RyYW5nZSBvYmplY3Rz
LCB0aGV5IHN1cHBvcnQgYm90aCBnZXQgYW5kIGNhbGwuCkBAIC02OSw3ICs2OSw3IEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxIVE1MQWxsQ29sbGVjdGlvbihFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoZXhl
YywganNDb2xsZWN0aW9uLT5nbG9iYWxPYmplY3QoKSwgY29sbGVjdGlvbi5pdGVtKGluZGV4LnZh
bHVlKCkpKSk7CiAKICAgICAgICAgLy8gU3VwcG9ydCBmb3IgZG9jdW1lbnQuaW1hZ2VzKCc8bmFt
ZT4nKSBldGMuCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobmFtZWRJdGVtcyhleGVj
LCBqc0NvbGxlY3Rpb24sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgc3RyaW5nKSkpOwor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG5hbWVkSXRlbXMoKmV4ZWMsIGpzQ29sbGVj
dGlvbiwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBzdHJpbmcpKSk7CiAgICAgfQogCiAg
ICAgLy8gVGhlIHNlY29uZCBhcmcsIGlmIHNldCwgaXMgdGhlIGluZGV4IG9mIHRoZSBpdGVtIHdl
IHdhbnQKQEAgLTg4LDkgKzg4LDkgQEAgQ2FsbFR5cGUgSlNIVE1MQWxsQ29sbGVjdGlvbjo6Z2V0
Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQogICAgIHJldHVybiBDYWxsVHlw
ZUhvc3Q7CiB9CiAKLWJvb2wgSlNIVE1MQWxsQ29sbGVjdGlvbjo6bmFtZUdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUmIHZhbHVlKQorYm9v
bCBKU0hUTUxBbGxDb2xsZWN0aW9uOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUmIHZhbHVlKQogewotICAgIEpTVmFsdWUgaXRl
bXMgPSBuYW1lZEl0ZW1zKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSk7CisgICAgSlNWYWx1ZSBp
dGVtcyA9IG5hbWVkSXRlbXMoKnN0YXRlLCB0aGlzLCBwcm9wZXJ0eU5hbWUpOwogICAgIGlmIChp
dGVtcy5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTk4LDE2ICs5
OCwxNiBAQCBib29sIEpTSFRNTEFsbENvbGxlY3Rpb246Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAogICAgIHJldHVybiB0cnVlOwogfQogCi1K
U1ZhbHVlIEpTSFRNTEFsbENvbGxlY3Rpb246Oml0ZW0oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0hUTUxBbGxDb2xsZWN0aW9uOjppdGVtKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYg
KE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgoKmV4ZWMtPmFyZ3VtZW50KDAp
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKS5pbXBsKCkpKQotICAgICAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgpLml0ZW0oaW5kZXgudmFsdWUoKSkpOwotICAg
IHJldHVybiBuYW1lZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhl
YywgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CisgICAg
aWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgoKnN0YXRlLmFyZ3VtZW50
KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSkuaW1wbCgpKSkKKyAgICAgICAgcmV0
dXJuIHRvSlMoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgpLml0ZW0oaW5kZXgudmFsdWUo
KSkpOworICAgIHJldHVybiBuYW1lZEl0ZW1zKHN0YXRlLCB0aGlzLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUo
JnN0YXRlKSkpOwogfQogCi1KU1ZhbHVlIEpTSFRNTEFsbENvbGxlY3Rpb246Om5hbWVkSXRlbShF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTSFRNTEFsbENvbGxlY3Rpb246Om5hbWVkSXRlbShF
eGVjU3RhdGUmIHN0YXRlKQogewotICAgIEpTVmFsdWUgdmFsdWUgPSBuYW1lZEl0ZW1zKGV4ZWMs
IHRoaXMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IG5hbWVkSXRl
bXMoc3RhdGUsIHRoaXMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCBzdGF0ZS5hcmd1
bWVudCgwKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpKSk7CiAgICAgcmV0dXJuIHZh
bHVlLmlzVW5kZWZpbmVkKCkgPyBqc051bGwoKSA6IHZhbHVlOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3Bw
CmluZGV4IDJmY2NjZmZiZjVlYjQwM2RkM2U4ZjE4NWMwODhlNDQzM2Y2YzI1NzEuLmU2ZWM4ZGMz
Y2VhZjRmYWYxMzNlNDhlOTQ1OWI5OGE2Mjg4ZGM2ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCkBAIC00
NCwxNCArNDQsMTQgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogI2lmIEVOQUJMRShXRUJHTCkKLXN0YXRpYyB2b2lkIGdldDNEQ29udGV4dEF0dHJpYnV0ZXMo
RXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8Q2FudmFzQ29udGV4dEF0dHJpYnV0ZXM+JiBhdHRycykK
K3N0YXRpYyB2b2lkIGdldDNEQ29udGV4dEF0dHJpYnV0ZXMoRXhlY1N0YXRlJiBzdGF0ZSwgUmVm
UHRyPENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzPiYgYXR0cnMpCiB7Ci0gICAgSlNWYWx1ZSBpbml0
aWFsaXplclZhbHVlID0gZXhlYy0+YXJndW1lbnQoMSk7CisgICAgSlNWYWx1ZSBpbml0aWFsaXpl
clZhbHVlID0gc3RhdGUuYXJndW1lbnQoMSk7CiAgICAgaWYgKGluaXRpYWxpemVyVmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEpTT2JqZWN0KiBp
bml0aWFsaXplck9iamVjdCA9IGluaXRpYWxpemVyVmFsdWUudG9PYmplY3QoZXhlYyk7Ci0gICAg
SlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnkoZXhlYywgaW5pdGlhbGl6ZXJPYmplY3QpOworICAgIEpT
T2JqZWN0KiBpbml0aWFsaXplck9iamVjdCA9IGluaXRpYWxpemVyVmFsdWUudG9PYmplY3QoJnN0
YXRlKTsKKyAgICBKU0RpY3Rpb25hcnkgZGljdGlvbmFyeSgmc3RhdGUsIGluaXRpYWxpemVyT2Jq
ZWN0KTsKICAgICAKICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBncmFwaGljc0F0
dHJzOwogICAgIApAQCAtNjYsMTYgKzY2LDE2IEBAIHN0YXRpYyB2b2lkIGdldDNEQ29udGV4dEF0
dHJpYnV0ZXMoRXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8Q2FudmFzQ29udGV4dEF0dHJpYnV0CiB9
CiAjZW5kaWYKIAotSlNWYWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dChFeGVj
U3RhdGUmIHN0YXRlKQogewogICAgIEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXMgPSBpbXBsKCk7
Ci0gICAgY29uc3QgU3RyaW5nJiBjb250ZXh0SWQgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgY29uc3QgU3RyaW5nJiBjb250ZXh0SWQgPSBzdGF0
ZS5hcmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwogICAgIAogICAg
IFJlZlB0cjxDYW52YXNDb250ZXh0QXR0cmlidXRlcz4gYXR0cnM7CiAjaWYgRU5BQkxFKFdFQkdM
KQogICAgIGlmIChIVE1MQ2FudmFzRWxlbWVudDo6aXMzZFR5cGUoY29udGV4dElkKSkgewotICAg
ICAgICBnZXQzRENvbnRleHRBdHRyaWJ1dGVzKGV4ZWMsIGF0dHJzKTsKLSAgICAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBnZXQzRENvbnRleHRBdHRyaWJ1dGVzKHN0YXRl
LCBhdHRycyk7CisgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KICNlbmRpZgpAQCAtODMsMjMgKzgzLDIzIEBA
IEpTVmFsdWUgSlNIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dChFeGVjU3RhdGUqIGV4ZWMp
CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0
KGNvbnRleHRJZCwgYXR0cnMuZ2V0KCkpOwogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0
dXJuIGpzTnVsbCgpOwotICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBXVEY6
OmdldFB0cihjb250ZXh0KSk7CisgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBnbG9iYWxPYmplY3Qo
KSwgV1RGOjpnZXRQdHIoY29udGV4dCkpOwogfQogCi1KU1ZhbHVlIEpTSFRNTENhbnZhc0VsZW1l
bnQ6OnByb2JhYmx5U3VwcG9ydHNDb250ZXh0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNI
VE1MQ2FudmFzRWxlbWVudDo6cHJvYmFibHlTdXBwb3J0c0NvbnRleHQoRXhlY1N0YXRlJiBzdGF0
ZSkKIHsKICAgICBIVE1MQ2FudmFzRWxlbWVudCYgY2FudmFzID0gaW1wbCgpOwotICAgIGlmICgh
ZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAgIGlmICghc3RhdGUuYXJndW1lbnRDb3VudCgpKQog
ICAgICAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKLSAgICBjb25zdCBTdHJpbmcmIGNvbnRl
eHRJZCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgY29uc3QgU3RyaW5nJiBj
b250ZXh0SWQgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUpLT52
YWx1ZSgmc3RhdGUpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgCiAgICAgUmVmUHRyPENhbnZhc0NvbnRleHRBdHRyaWJ1
dGVzPiBhdHRyczsKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgaWYgKEhUTUxDYW52YXNFbGVtZW50
OjppczNkVHlwZShjb250ZXh0SWQpKSB7Ci0gICAgICAgIGdldDNEQ29udGV4dEF0dHJpYnV0ZXMo
ZXhlYywgYXR0cnMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGdldDNEQ29udGV4dEF0dHJpYnV0ZXMoc3RhdGUsIGF0dHJzKTsKKyAgICAgICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
fQogI2VuZGlmCkBAIC0xMDcsMjQgKzEwNywyNCBAQCBKU1ZhbHVlIEpTSFRNTENhbnZhc0VsZW1l
bnQ6OnByb2JhYmx5U3VwcG9ydHNDb250ZXh0KEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4g
anNCb29sZWFuKGNhbnZhcy5wcm9iYWJseVN1cHBvcnRzQ29udGV4dChjb250ZXh0SWQsIGF0dHJz
LmdldCgpKSk7CiB9CiAKLUpTVmFsdWUgSlNIVE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMKEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNIVE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMKEV4
ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgSFRNTENhbnZhc0VsZW1lbnQmIGNhbnZhcyA9IGltcGwo
KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKIAotICAgIGNvbnN0IFN0cmluZyYgdHlwZSA9
IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1l
bnQoMCkpOworICAgIGNvbnN0IFN0cmluZyYgdHlwZSA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZp
bmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSk7CiAgICAgZG91YmxlIHF1
YWxpdHk7CiAgICAgZG91YmxlKiBxdWFsaXR5UHRyID0gMDsKLSAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpID4gMSkgewotICAgICAgICBKU1ZhbHVlIHYgPSBleGVjLT51bmNoZWNrZWRBcmd1
bWVudCgxKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID4gMSkgeworICAgICAgICBK
U1ZhbHVlIHYgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKTsKICAgICAgICAgaWYgKHYuaXNO
dW1iZXIoKSkgewotICAgICAgICAgICAgcXVhbGl0eSA9IHYudG9OdW1iZXIoZXhlYyk7CisgICAg
ICAgICAgICBxdWFsaXR5ID0gdi50b051bWJlcigmc3RhdGUpOwogICAgICAgICAgICAgcXVhbGl0
eVB0ciA9ICZxdWFsaXR5OwogICAgICAgICB9CiAgICAgfQogCi0gICAgSlNWYWx1ZSByZXN1bHQg
PSBKU0M6OmpzU3RyaW5nKGV4ZWMsIGNhbnZhcy50b0RhdGFVUkwodHlwZSwgcXVhbGl0eVB0ciwg
ZWMpKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0gSlNDOjpqc1N0cmluZygmc3RhdGUsIGNhbnZhcy50b0RhdGFVUkwodHlwZSwgcXVhbGl0eVB0
ciwgZWMpKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
RG9jdW1lbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9j
dW1lbnRDdXN0b20uY3BwCmluZGV4IDA1MmE1NDY1N2UwZDY3YTU4NGI1NzY4ZDdhOWI2MzliMTk5
YWE5OTAuLjQzMTc0Mjg1NDY4YWVhZjcxODcxZTA5NjRmNDI2MTEyZWM1YTYwMDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAK
QEAgLTEwOCwyNiArMTA4LDI2IEBAIGJvb2wgSlNIVE1MRG9jdW1lbnQ6Om5hbWVHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhCiAKIC8vIEN1c3Rv
bSBhdHRyaWJ1dGVzCiAKLUpTVmFsdWUgSlNIVE1MRG9jdW1lbnQ6OmFsbChFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0CitKU1ZhbHVlIEpTSFRNTERvY3VtZW50OjphbGwoRXhlY1N0YXRlJiBzdGF0ZSkg
Y29uc3QKIHsKICAgICAvLyBJZiAiYWxsIiBoYXMgYmVlbiBvdmVyd3JpdHRlbiwgcmV0dXJuIHRo
ZSBvdmVyd3JpdHRlbiB2YWx1ZQotICAgIEpTVmFsdWUgdiA9IGdldERpcmVjdChleGVjLT52bSgp
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJhbGwiKSk7CisgICAgSlNWYWx1ZSB2ID0g
Z2V0RGlyZWN0KHN0YXRlLnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYWxs
IikpOwogICAgIGlmICh2KQogICAgICAgICByZXR1cm4gdjsKIAotICAgIHJldHVybiB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCgpLCBpbXBsKCkuYWxsKCkpOworICAgIHJldHVybiB0b0pTKCZzdGF0
ZSwgZ2xvYmFsT2JqZWN0KCksIGltcGwoKS5hbGwoKSk7CiB9CiAKLXZvaWQgSlNIVE1MRG9jdW1l
bnQ6OnNldEFsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit2b2lkIEpTSFRNTERv
Y3VtZW50OjpzZXRBbGwoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICAv
LyBBZGQgImFsbCIgdG8gdGhlIHByb3BlcnR5IG1hcC4KLSAgICBwdXREaXJlY3QoZXhlYy0+dm0o
KSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiYWxsIiksIHZhbHVlKTsKKyAgICBwdXRE
aXJlY3Qoc3RhdGUudm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJhbGwiKSwg
dmFsdWUpOwogfQogCi1zdGF0aWMgRG9jdW1lbnQqIGZpbmRDYWxsaW5nRG9jdW1lbnQoRXhlY1N0
YXRlKiBleGVjKQorc3RhdGljIERvY3VtZW50KiBmaW5kQ2FsbGluZ0RvY3VtZW50KEV4ZWNTdGF0
ZSYgc3RhdGUpCiB7CiAgICAgQ2FsbGVyRnVuY3RvciBmdW5jdG9yOwotICAgIGV4ZWMtPml0ZXJh
dGUoZnVuY3Rvcik7CisgICAgc3RhdGUuaXRlcmF0ZShmdW5jdG9yKTsKICAgICBDYWxsRnJhbWUq
IGNhbGxlckZyYW1lID0gZnVuY3Rvci5jYWxsZXJGcmFtZSgpOwogICAgIGlmICghY2FsbGVyRnJh
bWUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTM3LDE5ICsxMzcsMTkgQEAgc3RhdGlj
IERvY3VtZW50KiBmaW5kQ2FsbGluZ0RvY3VtZW50KEV4ZWNTdGF0ZSogZXhlYykKIAogLy8gQ3Vz
dG9tIGZ1bmN0aW9ucwogCi1KU1ZhbHVlIEpTSFRNTERvY3VtZW50OjpvcGVuKEV4ZWNTdGF0ZSog
ZXhlYykKK0pTVmFsdWUgSlNIVE1MRG9jdW1lbnQ6Om9wZW4oRXhlY1N0YXRlJiBzdGF0ZSkKIHsK
ICAgICAvLyBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGJyb3dzZXJzLCBwYXNzIG9wZW4g
Y2FsbHMgd2l0aCBtb3JlIHRoYW4gMiBwYXJhbWV0ZXJzIHRvIHRoZSB3aW5kb3cuCi0gICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDIpIHsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3Vu
dCgpID4gMikgewogICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gaW1wbCgpLmZyYW1lKCkpIHsK
LSAgICAgICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHdyYXBwZXIgPSB0b0pTRE9NV2luZG93U2hl
bGwoZnJhbWUsIGN1cnJlbnRXb3JsZChleGVjKSk7CisgICAgICAgICAgICBKU0RPTVdpbmRvd1No
ZWxsKiB3cmFwcGVyID0gdG9KU0RPTVdpbmRvd1NoZWxsKGZyYW1lLCBjdXJyZW50V29ybGQoJnN0
YXRlKSk7CiAgICAgICAgICAgICBpZiAod3JhcHBlcikgewotICAgICAgICAgICAgICAgIEpTVmFs
dWUgZnVuY3Rpb24gPSB3cmFwcGVyLT5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhl
eGVjLCAib3BlbiIpKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gd3JhcHBl
ci0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJvcGVuIikpOwog
ICAgICAgICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICAgICAgICAgIENhbGxU
eXBlIGNhbGxUeXBlID0gOjpnZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwogICAgICAg
ICAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
SlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHdyYXBwZXIsIEFy
Z0xpc3QoZXhlYykpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3Io
JnN0YXRlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNDOjpjYWxsKCZzdGF0ZSwgZnVuY3Rp
b24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgd3JhcHBlciwgQXJnTGlzdCgmc3RhdGUpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTE1
Nyw3ICsxNTcsNyBAQCBKU1ZhbHVlIEpTSFRNTERvY3VtZW50OjpvcGVuKEV4ZWNTdGF0ZSogZXhl
YykKIAogICAgIC8vIGRvY3VtZW50Lm9wZW4gY2xvYmJlcnMgdGhlIHNlY3VyaXR5IGNvbnRleHQg
b2YgdGhlIGRvY3VtZW50IGFuZAogICAgIC8vIGFsaWFzZXMgaXQgd2l0aCB0aGUgYWN0aXZlIHNl
Y3VyaXR5IGNvbnRleHQuCi0gICAgRG9jdW1lbnQqIGFjdGl2ZURvY3VtZW50ID0gYXNKU0RPTVdp
bmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCkuZG9jdW1lbnQoKTsKKyAg
ICBEb2N1bWVudCogYWN0aXZlRG9jdW1lbnQgPSBhc0pTRE9NV2luZG93KHN0YXRlLmxleGljYWxH
bG9iYWxPYmplY3QoKSktPmltcGwoKS5kb2N1bWVudCgpOwogCiAgICAgLy8gSW4gdGhlIGNhc2Ug
b2YgdHdvIHBhcmFtZXRlcnMgb3IgZmV3ZXIsIGRvIGEgbm9ybWFsIGRvY3VtZW50IG9wZW4uCiAg
ICAgaW1wbCgpLm9wZW4oYWN0aXZlRG9jdW1lbnQpOwpAQCAtMTY2LDIxICsxNjYsMjEgQEAgSlNW
YWx1ZSBKU0hUTUxEb2N1bWVudDo6b3BlbihFeGVjU3RhdGUqIGV4ZWMpCiAKIGVudW0gTmV3bGlu
ZVJlcXVpcmVtZW50IHsgRG9Ob3RBZGROZXdsaW5lLCBEb0FkZE5ld2xpbmUgfTsKIAotc3RhdGlj
IGlubGluZSB2b2lkIGRvY3VtZW50V3JpdGUoRXhlY1N0YXRlKiBleGVjLCBKU0hUTUxEb2N1bWVu
dCogdGhpc0RvY3VtZW50LCBOZXdsaW5lUmVxdWlyZW1lbnQgYWRkTmV3bGluZSkKK3N0YXRpYyBp
bmxpbmUgdm9pZCBkb2N1bWVudFdyaXRlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTSFRNTERvY3VtZW50
KiB0aGlzRG9jdW1lbnQsIE5ld2xpbmVSZXF1aXJlbWVudCBhZGROZXdsaW5lKQogewogICAgIEhU
TUxEb2N1bWVudCogZG9jdW1lbnQgPSAmdGhpc0RvY3VtZW50LT5pbXBsKCk7CiAgICAgLy8gRE9N
IG9ubHkgc3BlY2lmaWVzIHNpbmdsZSBzdHJpbmcgYXJndW1lbnQsIGJ1dCBicm93c2VycyBhbGxv
dyBtdWx0aXBsZSBvciBubyBhcmd1bWVudHMuCiAKLSAgICBzaXplX3Qgc2l6ZSA9IGV4ZWMtPmFy
Z3VtZW50Q291bnQoKTsKKyAgICBzaXplX3Qgc2l6ZSA9IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsK
IAotICAgIFN0cmluZyBmaXJzdFN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKKyAgICBTdHJpbmcgZmlyc3RTdHJpbmcgPSBzdGF0ZS5hcmd1bWVu
dCgwKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwogICAgIFNlZ21lbnRlZFN0cmlu
ZyBzZWdtZW50ZWRTdHJpbmcgPSBmaXJzdFN0cmluZzsKICAgICBpZiAoc2l6ZSAhPSAxKSB7CiAg
ICAgICAgIGlmICghc2l6ZSkKICAgICAgICAgICAgIHNlZ21lbnRlZFN0cmluZy5jbGVhcigpOwog
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc2l6ZTsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHN1YnNlcXVlbnRTdHJpbmcgPSBleGVjLT51
bmNoZWNrZWRBcmd1bWVudChpKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAg
ICAgICAgICAgU3RyaW5nIHN1YnNlcXVlbnRTdHJpbmcgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dChpKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwogICAgICAgICAgICAgICAgIHNl
Z21lbnRlZFN0cmluZy5hcHBlbmQoU2VnbWVudGVkU3RyaW5nKHN1YnNlcXVlbnRTdHJpbmcpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTg4LDE5ICsxODgsMTkgQEAgc3RhdGljIGlu
bGluZSB2b2lkIGRvY3VtZW50V3JpdGUoRXhlY1N0YXRlKiBleGVjLCBKU0hUTUxEb2N1bWVudCog
dGhpc0RvY3VtZW50LAogICAgIGlmIChhZGROZXdsaW5lKQogICAgICAgICBzZWdtZW50ZWRTdHJp
bmcuYXBwZW5kKFNlZ21lbnRlZFN0cmluZyhTdHJpbmcoJm5ld2xpbmVDaGFyYWN0ZXIsIDEpKSk7
CiAKLSAgICBEb2N1bWVudCogYWN0aXZlRG9jdW1lbnQgPSBmaW5kQ2FsbGluZ0RvY3VtZW50KGV4
ZWMpOworICAgIERvY3VtZW50KiBhY3RpdmVEb2N1bWVudCA9IGZpbmRDYWxsaW5nRG9jdW1lbnQo
c3RhdGUpOwogICAgIGRvY3VtZW50LT53cml0ZShzZWdtZW50ZWRTdHJpbmcsIGFjdGl2ZURvY3Vt
ZW50KTsKIH0KIAotSlNWYWx1ZSBKU0hUTUxEb2N1bWVudDo6d3JpdGUoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU0hUTUxEb2N1bWVudDo6d3JpdGUoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAg
ICBkb2N1bWVudFdyaXRlKGV4ZWMsIHRoaXMsIERvTm90QWRkTmV3bGluZSk7CisgICAgZG9jdW1l
bnRXcml0ZShzdGF0ZSwgdGhpcywgRG9Ob3RBZGROZXdsaW5lKTsKICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0hUTUxEb2N1bWVudDo6d3JpdGVsbihFeGVjU3RhdGUq
IGV4ZWMpCitKU1ZhbHVlIEpTSFRNTERvY3VtZW50Ojp3cml0ZWxuKEV4ZWNTdGF0ZSYgc3RhdGUp
CiB7Ci0gICAgZG9jdW1lbnRXcml0ZShleGVjLCB0aGlzLCBEb0FkZE5ld2xpbmUpOworICAgIGRv
Y3VtZW50V3JpdGUoc3RhdGUsIHRoaXMsIERvQWRkTmV3bGluZSk7CiAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb25DdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbkN1c3RvbS5jcHAKaW5kZXggZWM3
ZjdkYmI2Yjg0MWUxYzJlNDBlMGY5MjQxNjI3ZGM5MDNlYWRkYi4uOGI1NWZhN2RlMzZlNWM2MDc4
ODljOWIxZTlhNTFjM2VjOGE2OGI3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbkN1c3RvbS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbkN1c3RvbS5j
cHAKQEAgLTMwLDcgKzMwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1zdGF0aWMgSlNWYWx1ZSBuYW1lZEl0ZW1zKEV4ZWNTdGF0ZSogZXhlYywgSlNI
VE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbiogY29sbGVjdGlvbiwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSkKK3N0YXRpYyBKU1ZhbHVlIG5hbWVkSXRlbXMoRXhlY1N0YXRlJiBzdGF0ZSwgSlNI
VE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbiogY29sbGVjdGlvbiwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSkKIHsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBwcm9wZXJ0eU5hbWVU
b0F0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpOwogICAgIFZlY3RvcjxSZWY8RWxlbWVudD4+IG5h
bWVkSXRlbXMgPSBjb2xsZWN0aW9uLT5pbXBsKCkubmFtZWRJdGVtcyhuYW1lKTsKQEAgLTM4LDE1
ICszOCwxNSBAQCBzdGF0aWMgSlNWYWx1ZSBuYW1lZEl0ZW1zKEV4ZWNTdGF0ZSogZXhlYywgSlNI
VE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbiogY29sbGVjdAogICAgIGlmIChuYW1lZEl0ZW1zLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaWYgKG5hbWVkSXRl
bXMuc2l6ZSgpID09IDEpCi0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGNvbGxlY3Rpb24tPmds
b2JhbE9iamVjdCgpLCBuYW1lZEl0ZW1zWzBdLnB0cigpKTsKKyAgICAgICAgcmV0dXJuIHRvSlMo
JnN0YXRlLCBjb2xsZWN0aW9uLT5nbG9iYWxPYmplY3QoKSwgbmFtZWRJdGVtc1swXS5wdHIoKSk7
CiAKICAgICBBU1NFUlQoY29sbGVjdGlvbi0+aW1wbCgpLnR5cGUoKSA9PSBGb3JtQ29udHJvbHMp
OwotICAgIHJldHVybiB0b0pTKGV4ZWMsIGNvbGxlY3Rpb24tPmdsb2JhbE9iamVjdCgpLCBjb2xs
ZWN0aW9uLT5pbXBsKCkub3duZXJOb2RlKCkucmFkaW9Ob2RlTGlzdChuYW1lKS5nZXQoKSk7Cisg
ICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBjb2xsZWN0aW9uLT5nbG9iYWxPYmplY3QoKSwgY29sbGVj
dGlvbi0+aW1wbCgpLm93bmVyTm9kZSgpLnJhZGlvTm9kZUxpc3QobmFtZSkuZ2V0KCkpOwogfQog
Ci1ib29sIEpTSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb246Om5hbWVHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlJiB2YWx1ZSkKK2Jvb2wg
SlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6bmFtZUdldHRlcihFeGVjU3RhdGUqIHN0YXRl
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBhdXRv
IGl0ZW1zID0gbmFtZWRJdGVtcyhleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUpOworICAgIGF1dG8g
aXRlbXMgPSBuYW1lZEl0ZW1zKCpzdGF0ZSwgdGhpcywgcHJvcGVydHlOYW1lKTsKICAgICBpZiAo
aXRlbXMuaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC01NCw5ICs1
NCw5IEBAIGJvb2wgSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6bmFtZUdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUpT
VmFsdWUgSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6bmFtZWRJdGVtKEV4ZWNTdGF0ZSog
ZXhlYykKK0pTVmFsdWUgSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6bmFtZWRJdGVtKEV4
ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IG5hbWVkSXRlbXMoZXhlYywg
dGhpcywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gbmFtZWRJdGVt
cyhzdGF0ZSwgdGhpcywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsIHN0YXRlLmFyZ3Vt
ZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSkpKTsKICAgICByZXR1cm4gdmFs
dWUuaXNVbmRlZmluZWQoKSA/IGpzTnVsbCgpIDogdmFsdWU7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZyYW1lRWxlbWVudEN1c3RvbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGcmFtZUVsZW1lbnRDdXN0b20uY3BwCmlu
ZGV4IGE0ZWQ0MzBkMzJiNGQ4NWUyYTI5MzZlOTNlN2ZkYjY2NTYzZTYzMTEuLmFiMDAwZjcxMzAx
OWU5YjhhMGJmNThlMjM1ZDc0MTNhOWFjYjk1NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSFRNTEZyYW1lRWxlbWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRnJhbWVFbGVtZW50Q3VzdG9tLmNwcApAQCAtNDEsMjIg
KzQxLDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIAotc3RhdGljIGlubGluZSBib29sIGFsbG93U2V0dGluZ0phdmFzY3JpcHRVUkwoRXhlY1N0
YXRlKiBleGVjLCBIVE1MRnJhbWVFbGVtZW50KiBpbXAsIGNvbnN0IFN0cmluZyYgdmFsdWUpCitz
dGF0aWMgaW5saW5lIGJvb2wgYWxsb3dTZXR0aW5nSmF2YXNjcmlwdFVSTChFeGVjU3RhdGUmIHN0
YXRlLCBIVE1MRnJhbWVFbGVtZW50KiBpbXAsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAg
aWYgKHByb3RvY29sSXNKYXZhU2NyaXB0KHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNl
cyh2YWx1ZSkpKSB7CiAgICAgICAgIERvY3VtZW50KiBjb250ZW50RG9jdW1lbnQgPSBpbXAtPmNv
bnRlbnREb2N1bWVudCgpOwotICAgICAgICBpZiAoY29udGVudERvY3VtZW50ICYmICFzaG91bGRB
bGxvd0FjY2Vzc1RvTm9kZShleGVjLCBjb250ZW50RG9jdW1lbnQpKQorICAgICAgICBpZiAoY29u
dGVudERvY3VtZW50ICYmICFzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZSgmc3RhdGUsIGNvbnRlbnRE
b2N1bWVudCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIEpTSFRNTEZyYW1lRWxlbWVudDo6c2V0TG9jYXRpb24oRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU0hUTUxGcmFtZUVsZW1lbnQ6OnNldExvY2F0
aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgSFRNTEZyYW1lRWxl
bWVudCYgaW1wID0gaW1wbCgpOwotICAgIFN0cmluZyBsb2NhdGlvblZhbHVlID0gdmFsdWVUb1N0
cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpOworICAgIFN0cmluZyBsb2NhdGlvblZhbHVl
ID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soJnN0YXRlLCB2YWx1ZSk7CiAKLSAgICBpZiAo
IWFsbG93U2V0dGluZ0phdmFzY3JpcHRVUkwoZXhlYywgJmltcCwgbG9jYXRpb25WYWx1ZSkpCisg
ICAgaWYgKCFhbGxvd1NldHRpbmdKYXZhc2NyaXB0VVJMKHN0YXRlLCAmaW1wLCBsb2NhdGlvblZh
bHVlKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaW1wLnNldExvY2F0aW9uKGxvY2F0aW9uVmFs
dWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MSW5wdXRF
bGVtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTElucHV0
RWxlbWVudEN1c3RvbS5jcHAKaW5kZXggNDJlYmFkMzE1OTQyNGQ3YWQ5OTZhY2M5OWYyZGUzNjQw
YzRmZGEwOS4uOGY0MmRiZWY1MjRmZDZmZDhjZTNkYWExMTE5ZGRmZGIzYjliMDE1NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50Q3VzdG9t
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRD
dXN0b20uY3BwCkBAIC0zMyw3MSArMzMsNzEgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTSFRNTElucHV0RWxlbWVudDo6c2VsZWN0aW9u
U3RhcnQoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU0hUTUxJbnB1dEVsZW1lbnQ6
OnNlbGVjdGlvblN0YXJ0KEV4ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0CiB7CiAgICAgSFRNTElucHV0
RWxlbWVudCYgaW5wdXQgPSBpbXBsKCk7CiAgICAgaWYgKCFpbnB1dC5jYW5IYXZlU2VsZWN0aW9u
KCkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJu
IHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CiAKICAgICByZXR1cm4ganNOdW1iZXIoaW5wdXQuc2Vs
ZWN0aW9uU3RhcnQoKSk7CiB9CiAKLXZvaWQgSlNIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rp
b25TdGFydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit2b2lkIEpTSFRNTElucHV0
RWxlbWVudDo6c2V0U2VsZWN0aW9uU3RhcnQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1
ZSkKIHsKICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGltcGwoKTsKICAgICBpZiAoIWlu
cHV0LmNhbkhhdmVTZWxlY3Rpb24oKSkKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7Cisg
ICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CiAKLSAgICBpbnB1dC5zZXRTZWxlY3Rpb25T
dGFydCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsKKyAgICBpbnB1dC5zZXRTZWxlY3Rpb25TdGFydCh2
YWx1ZS50b0ludDMyKCZzdGF0ZSkpOwogfQogCi1KU1ZhbHVlIEpTSFRNTElucHV0RWxlbWVudDo6
c2VsZWN0aW9uRW5kKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgSlNIVE1MSW5wdXRF
bGVtZW50OjpzZWxlY3Rpb25FbmQoRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICAgICBIVE1M
SW5wdXRFbGVtZW50JiBpbnB1dCA9IGltcGwoKTsKICAgICBpZiAoIWlucHV0LmNhbkhhdmVTZWxl
Y3Rpb24oKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgICAgICBy
ZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKIAogICAgIHJldHVybiBqc051bWJlcihpbnB1
dC5zZWxlY3Rpb25FbmQoKSk7CiB9CiAKLXZvaWQgSlNIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxl
Y3Rpb25FbmQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU0hUTUxJbnB1
dEVsZW1lbnQ6OnNldFNlbGVjdGlvbkVuZChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
KQogewogICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gaW1wbCgpOwogICAgIGlmICghaW5w
dXQuY2FuSGF2ZVNlbGVjdGlvbigpKQotICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKIAotICAgIGlucHV0LnNldFNlbGVjdGlvbkVu
ZCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsKKyAgICBpbnB1dC5zZXRTZWxlY3Rpb25FbmQodmFsdWUu
dG9JbnQzMigmc3RhdGUpKTsKIH0KIAotSlNWYWx1ZSBKU0hUTUxJbnB1dEVsZW1lbnQ6OnNlbGVj
dGlvbkRpcmVjdGlvbihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTSFRNTElucHV0
RWxlbWVudDo6c2VsZWN0aW9uRGlyZWN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0CiB7CiAg
ICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBpbXBsKCk7CiAgICAgaWYgKCFpbnB1dC5jYW5I
YXZlU2VsZWN0aW9uKCkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAg
ICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CiAKLSAgICByZXR1cm4ganNTdHJp
bmdXaXRoQ2FjaGUoZXhlYywgaW5wdXQuc2VsZWN0aW9uRGlyZWN0aW9uKCkpOworICAgIHJldHVy
biBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGlucHV0LnNlbGVjdGlvbkRpcmVjdGlvbigpKTsK
IH0KIAotdm9pZCBKU0hUTUxJbnB1dEVsZW1lbnQ6OnNldFNlbGVjdGlvbkRpcmVjdGlvbihFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit2b2lkIEpTSFRNTElucHV0RWxlbWVudDo6c2V0
U2VsZWN0aW9uRGlyZWN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAg
ICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBpbXBsKCk7CiAgICAgaWYgKCFpbnB1dC5jYW5I
YXZlU2VsZWN0aW9uKCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgICAg
IHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBp
bnB1dC5zZXRTZWxlY3Rpb25EaXJlY3Rpb24odmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpKTsKKyAgICBpbnB1dC5zZXRTZWxlY3Rpb25EaXJlY3Rpb24odmFsdWUudG9TdHJpbmcoJnN0
YXRlKS0+dmFsdWUoJnN0YXRlKSk7CiB9CiAKLUpTVmFsdWUgSlNIVE1MSW5wdXRFbGVtZW50Ojpz
ZXRTZWxlY3Rpb25SYW5nZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTSFRNTElucHV0RWxl
bWVudDo6c2V0U2VsZWN0aW9uUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBIVE1MSW5w
dXRFbGVtZW50JiBpbnB1dCA9IGltcGwoKTsKICAgICBpZiAoIWlucHV0LmNhbkhhdmVTZWxlY3Rp
b24oKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgICAgICByZXR1
cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKIAotICAgIGludCBzdGFydCA9IGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvSW50MzIoZXhlYyk7Ci0gICAgaW50IGVuZCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRv
SW50MzIoZXhlYyk7Ci0gICAgU3RyaW5nIGRpcmVjdGlvbiA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICBpbnQgc3RhcnQgPSBzdGF0ZS5hcmd1bWVu
dCgwKS50b0ludDMyKCZzdGF0ZSk7CisgICAgaW50IGVuZCA9IHN0YXRlLmFyZ3VtZW50KDEpLnRv
SW50MzIoJnN0YXRlKTsKKyAgICBTdHJpbmcgZGlyZWN0aW9uID0gc3RhdGUuYXJndW1lbnQoMiku
dG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKIAogICAgIGlucHV0LnNldFNlbGVjdGlv
blJhbmdlKHN0YXJ0LCBlbmQsIGRpcmVjdGlvbik7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxNZWRpYUVsZW1l
bnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MTWVkaWFFbGVt
ZW50Q3VzdG9tLmNwcAppbmRleCAyMDdhYjcxZGFiZTMzZjc2MGYzMDVkY2JkMzlkMGZkOWNiMzI4
YmM0Li40NDAwOTc2MWQxMzlkMTMxODY0NmI1YzhlNTFlMjViYWQwZWIxNDAzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxNZWRpYUVsZW1lbnRDdXN0b20uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE1lZGlhRWxlbWVudEN1c3Rv
bS5jcHAKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCi12b2lkIEpTSFRNTE1lZGlhRWxlbWVudDo6c2V0Q29udHJvbGxlcihFeGVj
U3RhdGUqLCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU0hUTUxNZWRpYUVsZW1lbnQ6OnNldENvbnRy
b2xsZXIoRXhlY1N0YXRlJiwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICAvLyA0LjguMTAuMTEuMiBN
ZWRpYSBjb250cm9sbGVyczogY29udHJvbGxlciBhdHRyaWJ1dGUuCiAgICAgLy8gT24gc2V0dGlu
ZywgaXQgbXVzdCBmaXJzdCByZW1vdmUgdGhlIGVsZW1lbnQncyBtZWRpYWdyb3VwIGF0dHJpYnV0
ZSwgaWYgYW55LCAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcAppbmRleCBmYjM3NWVmOTk3ZDgyNDgx
YzBlMGEzYmNiMWZjMWE1ZTZjNmY1Y2NhLi45MTVlMDI4N2M3OGNkYzA5NWRiMWFkZTMzNWQ3NjBj
ZDNiNTgzZTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxP
cHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwCkBAIC00NywxMSArNDcsMTEgQEAg
Ym9vbCBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbjo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKU0hU
TUxPcHRpb25zQ29sbGVjdGlvbjo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2
YWx1ZSkKK3ZvaWQgSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb246OnNldExlbmd0aChFeGVjU3RhdGUm
IHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAg
IHVuc2lnbmVkIG5ld0xlbmd0aCA9IDA7Ci0gICAgZG91YmxlIGxlbmd0aFZhbHVlID0gdmFsdWUu
dG9OdW1iZXIoZXhlYyk7CisgICAgZG91YmxlIGxlbmd0aFZhbHVlID0gdmFsdWUudG9OdW1iZXIo
JnN0YXRlKTsKICAgICBpZiAoIXN0ZDo6aXNuYW4obGVuZ3RoVmFsdWUpICYmICFzdGQ6OmlzaW5m
KGxlbmd0aFZhbHVlKSkgewogICAgICAgICBpZiAobGVuZ3RoVmFsdWUgPCAwLjApCiAgICAgICAg
ICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwpAQCAtNjIsNyArNjIsNyBAQCB2b2lkIEpTSFRNTE9w
dGlvbnNDb2xsZWN0aW9uOjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
KQogICAgIH0KICAgICBpZiAoIWVjKQogICAgICAgICBpbXBsKCkuc2V0TGVuZ3RoKG5ld0xlbmd0
aCwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0
aW9uKCZzdGF0ZSwgZWMpOwogfQogCiB2b2lkIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjppbmRl
eFNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlKQpA
QCAtNzAsMTQgKzcwLDE0IEBAIHZvaWQgSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb246OmluZGV4U2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTVmFsCiAgICAgc2VsZWN0SW5k
ZXhTZXR0ZXIoJmltcGwoKS5zZWxlY3RFbGVtZW50KCksIGV4ZWMsIGluZGV4LCB2YWx1ZSk7CiB9
CiAKLUpTVmFsdWUgSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb246OnJlbW92ZShFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjpyZW1vdmUoRXhlY1N0YXRlJiBz
dGF0ZSkKIHsKICAgICAvLyBUaGUgYXJndW1lbnQgY2FuIGJlIGFuIEhUTUxPcHRpb25FbGVtZW50
IG9yIGFuIGluZGV4LgotICAgIEpTVmFsdWUgYXJndW1lbnQgPSBleGVjLT5hcmd1bWVudCgwKTsK
KyAgICBKU1ZhbHVlIGFyZ3VtZW50ID0gc3RhdGUuYXJndW1lbnQoMCk7CiAgICAgaWYgKEhUTUxP
cHRpb25FbGVtZW50KiBvcHRpb24gPSBKU0hUTUxPcHRpb25FbGVtZW50Ojp0b1dyYXBwZWQoYXJn
dW1lbnQpKQogICAgICAgICBpbXBsKCkucmVtb3ZlKG9wdGlvbik7CiAgICAgZWxzZQotICAgICAg
ICBpbXBsKCkucmVtb3ZlKGFyZ3VtZW50LnRvSW50MzIoZXhlYykpOworICAgICAgICBpbXBsKCku
cmVtb3ZlKGFyZ3VtZW50LnRvSW50MzIoJnN0YXRlKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFNl
bGVjdEVsZW1lbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
U2VsZWN0RWxlbWVudEN1c3RvbS5jcHAKaW5kZXggMTQ2ZTI0MmEwNWQ4ZDhiNTRlMWUyOWIxNzBl
MjQ0MjMzNzJjOTcyOC4uYjNkZjEzZjcyZWFhOGZiYWEwNzg2MDVmNDc2MzM5MjdlYmUwMmNjNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MU2VsZWN0RWxlbWVu
dEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MU2VsZWN0
RWxlbWVudEN1c3RvbS5jcHAKQEAgLTMyLDIxICszMiwyMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSlNW
YWx1ZSBKU0hUTUxTZWxlY3RFbGVtZW50OjpyZW1vdmUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1
ZSBKU0hUTUxTZWxlY3RFbGVtZW50OjpyZW1vdmUoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBI
VE1MU2VsZWN0RWxlbWVudCYgc2VsZWN0ID0gaW1wbCgpOwogCi0gICAgaWYgKCFleGVjLT5hcmd1
bWVudENvdW50KCkpIHsKKyAgICBpZiAoIXN0YXRlLmFyZ3VtZW50Q291bnQoKSkgewogICAgICAg
ICAvLyBXaGVuIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50LCB3ZSBzaG91bGQgY2FsbCBFbGVtZW50
OjpyZW1vdmUoKSB0byBkZXRhY2guCiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAg
ICAgICBzZWxlY3QucmVtb3ZlKGVjKTsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVj
KTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIC8vIFRoZSBIVE1MU2VsZWN0RWxlbWVudDo6cmVtb3ZlKCkgZnVuY3Rpb24gY2FuIHRh
a2UgZWl0aGVyIGFuIG9wdGlvbiBvYmplY3Qgb3IgdGhlIGluZGV4IG9mIGFuIG9wdGlvbi4KLSAg
ICAgICAgaWYgKEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSBKU0hUTUxPcHRpb25FbGVtZW50
Ojp0b1dyYXBwZWQoZXhlYy0+YXJndW1lbnQoMCkpKQorICAgICAgICBpZiAoSFRNTE9wdGlvbkVs
ZW1lbnQqIG9wdGlvbiA9IEpTSFRNTE9wdGlvbkVsZW1lbnQ6OnRvV3JhcHBlZChzdGF0ZS5hcmd1
bWVudCgwKSkpCiAgICAgICAgICAgICBzZWxlY3QucmVtb3ZlKG9wdGlvbik7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHNlbGVjdC5yZW1vdmVCeUluZGV4KGV4ZWMtPmFyZ3VtZW50KDApLnRv
SW50MzIoZXhlYykpOworICAgICAgICAgICAgc2VsZWN0LnJlbW92ZUJ5SW5kZXgoc3RhdGUuYXJn
dW1lbnQoMCkudG9JbnQzMigmc3RhdGUpKTsKICAgICB9CiAKICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFRlbXBs
YXRlRWxlbWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxU
ZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3BwCmluZGV4IGUxMjE5OWYxYjU0NzdkZjVjYjE1ODg3Nzk3
NTNkYWJiZTVlMGZmZGYuLjFiYjg2ZGY4OGM5ZGVlYWIwOWJhMDZmMzI1ZGU3YmRmNjZkNDQ4YWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxl
bWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MVGVt
cGxhdGVFbGVtZW50Q3VzdG9tLmNwcApAQCAtNDMsOSArNDMsOSBAQCB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNIVE1MVGVtcGxhdGVFbGVt
ZW50Ojpjb250ZW50KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgSlNIVE1MVGVtcGxh
dGVFbGVtZW50Ojpjb250ZW50KEV4ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0CiB7Ci0gICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soJnN0YXRlKTsKIAogICAg
IERvY3VtZW50RnJhZ21lbnQqIGNvbnRlbnQgPSBpbXBsKCkuY29udGVudCgpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAppbmRleCBkNDA3MzUx
ODY0MTJkODk0NjZmNGRhNWM4ZjNjN2VhNjkxM2VjNzlkLi43NzdmZTA2YzRhMzJkMTMwMWE0YzBm
MGU0N2M2NDc3NjhmYzU2YzI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hpc3RvcnlDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SGlzdG9yeUN1c3RvbS5jcHAKQEAgLTEwNSw3ICsxMDUsNyBAQCB2b2lkIEpTSGlzdG9yeTo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TgogICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lcywgbW9kZSk7CiB9CiAKLUpTVmFsdWUgSlNIaXN0b3J5OjpzdGF0ZShFeGVjU3Rh
dGUgKmV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTSGlzdG9yeTo6c3RhdGUoRXhlY1N0YXRlJiBzdGF0
ZSkgY29uc3QKIHsKICAgICBIaXN0b3J5JiBoaXN0b3J5ID0gaW1wbCgpOwogCkBAIC0xMTQsNjMg
KzExNCw2MyBAQCBKU1ZhbHVlIEpTSGlzdG9yeTo6c3RhdGUoRXhlY1N0YXRlICpleGVjKSBjb25z
dAogICAgICAgICByZXR1cm4gY2FjaGVkVmFsdWU7CiAKICAgICBSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBzZXJpYWxpemVkID0gaGlzdG9yeS5zdGF0ZSgpOwotICAgIEpTVmFsdWUgcmVz
dWx0ID0gc2VyaWFsaXplZCA/IHNlcmlhbGl6ZWQtPmRlc2VyaWFsaXplKGV4ZWMsIGdsb2JhbE9i
amVjdCgpLCAwKSA6IGpzTnVsbCgpOwotICAgIGNvbnN0X2Nhc3Q8SlNIaXN0b3J5Kj4odGhpcykt
Pm1fc3RhdGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIHJlc3VsdCk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSBzZXJpYWxpemVkID8gc2VyaWFsaXplZC0+ZGVzZXJpYWxpemUoJnN0YXRlLCBnbG9iYWxP
YmplY3QoKSwgMCkgOiBqc051bGwoKTsKKyAgICBjb25zdF9jYXN0PEpTSGlzdG9yeSo+KHRoaXMp
LT5tX3N0YXRlLnNldChzdGF0ZS52bSgpLCB0aGlzLCByZXN1bHQpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLUpTVmFsdWUgSlNIaXN0b3J5OjpwdXNoU3RhdGUoRXhlY1N0YXRlKiBleGVjKQor
SlNWYWx1ZSBKU0hpc3Rvcnk6OnB1c2hTdGF0ZShFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlm
ICghc2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKGV4ZWMsIGltcGwoKS5mcmFtZSgpKSkKKyAgICBp
ZiAoIXNob3VsZEFsbG93QWNjZXNzVG9GcmFtZSgmc3RhdGUsIGltcGwoKS5mcmFtZSgpKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBoaXN0b3J5U3RhdGUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVj
LCBleGVjLT5hcmd1bWVudCgwKSwgMCwgMCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGhpc3RvcnlTdGF0ZSA9IFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksIDAsIDAp
OworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAKLSAgICBTdHJpbmcgdGl0bGUgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9y
TnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgU3RyaW5nIHRpdGxlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRP
ck51bGxDaGVjaygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDEpKTsKKyAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICAKKwog
ICAgIFN0cmluZyB1cmw7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDIpIHsKLSAg
ICAgICAgdXJsID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBl
eGVjLT5hcmd1bWVudCgyKSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID4gMikgeworICAgICAgICB1cmwgPSB2YWx1ZVRv
U3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMikp
OworICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBp
bXBsKCkuc3RhdGVPYmplY3RBZGRlZChoaXN0b3J5U3RhdGUucmVsZWFzZSgpLCB0aXRsZSwgdXJs
LCBIaXN0b3J5OjpTdGF0ZU9iamVjdFR5cGU6OlB1c2gsIGVjKTsKLSAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKIAogICAgIG1f
c3RhdGUuY2xlYXIoKTsKIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVl
IEpTSGlzdG9yeTo6cmVwbGFjZVN0YXRlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNIaXN0
b3J5OjpyZXBsYWNlU3RhdGUoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoIXNob3VsZEFs
bG93QWNjZXNzVG9GcmFtZShleGVjLCBpbXBsKCkuZnJhbWUoKSkpCisgICAgaWYgKCFzaG91bGRB
bGxvd0FjY2Vzc1RvRnJhbWUoJnN0YXRlLCBpbXBsKCkuZnJhbWUoKSkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogCi0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gaGlz
dG9yeVN0YXRlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgZXhlYy0+YXJn
dW1lbnQoMCksIDAsIDApOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBoaXN0b3J5U3RhdGUgPSBTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmNyZWF0ZSgmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDApLCAwLCAwKTsKKyAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0g
ICAgU3RyaW5nIHRpdGxlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhl
eGVjLCBleGVjLT5hcmd1bWVudCgxKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIFN0cmluZyB0aXRsZSA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2so
JnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgxKSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgCisKICAgICBTdHJpbmcg
dXJsOwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAyKSB7Ci0gICAgICAgIHVybCA9
IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1l
bnQoMikpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKHN0YXRl
LmFyZ3VtZW50Q291bnQoKSA+IDIpIHsKKyAgICAgICAgdXJsID0gdmFsdWVUb1N0cmluZ1dpdGhV
bmRlZmluZWRPck51bGxDaGVjaygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIpKTsKKyAgICAgICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgfQogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaW1wbCgpLnN0YXRl
T2JqZWN0QWRkZWQoaGlzdG9yeVN0YXRlLnJlbGVhc2UoKSwgdGl0bGUsIHVybCwgSGlzdG9yeTo6
U3RhdGVPYmplY3RUeXBlOjpSZXBsYWNlLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAKICAgICBtX3N0YXRlLmNs
ZWFyKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCRGF0
YWJhc2VDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJEYXRhYmFz
ZUN1c3RvbS5jcHAKaW5kZXggYTI1ZGNhOTkxOGMzYWUyZWU3NmExODA1YTIwZDBiMTBiZGFmMTlk
My4uZTUzNTA4ZjFiNjVkM2FhYWM4NmNjM2U1NDkwYzBhOTNlODNhNDBlYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJEYXRhYmFzZUN1c3RvbS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJEYXRhYmFzZUN1c3RvbS5jcHAKQEAgLTQ0
LDQwICs0NCw0MCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUpTVmFsdWUgSlNJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoRXhlY1N0YXRlKiBl
eGVjKQorSlNWYWx1ZSBKU0lEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZShFeGVjU3RhdGUm
IHN0YXRlKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQotICAgICAgICBy
ZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihleGVjKSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA8IDEpCisg
ICAgICAgIHJldHVybiBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKLSAgICBTdHJpbmcgbmFtZSA9IGV4ZWMt
PmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZS5hcmd1bWVudCgwKS50b1N0
cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBKU1ZhbHVlIG9wdGlvbnNW
YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpOworICAgIEpTVmFsdWUgb3B0aW9uc1ZhbHVlID0gc3Rh
dGUuYXJndW1lbnQoMSk7CiAgICAgaWYgKCFvcHRpb25zVmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSAmJiAhb3B0aW9uc1ZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVF
cnJvcihleGVjLCAiTm90IGFuIG9iamVjdC4iKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVy
cm9yKCZzdGF0ZSwgIk5vdCBhbiBvYmplY3QuIik7CiAKICAgICBJREJLZXlQYXRoIGtleVBhdGg7
CiAgICAgYm9vbCBhdXRvSW5jcmVtZW50ID0gZmFsc2U7CiAgICAgaWYgKCFvcHRpb25zVmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICBKU1ZhbHVlIGtleVBhdGhWYWx1ZSA9IG9w
dGlvbnNWYWx1ZS5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAia2V5UGF0
aCIpKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBKU1ZhbHVl
IGtleVBhdGhWYWx1ZSA9IG9wdGlvbnNWYWx1ZS5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgImtleVBhdGgiKSk7CisgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgICAgIGlmICgh
a2V5UGF0aFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgICAgIGtleVBhdGgg
PSBpZGJLZXlQYXRoRnJvbVZhbHVlKGV4ZWMsIGtleVBhdGhWYWx1ZSk7Ci0gICAgICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBrZXlQYXRoID0gaWRiS2V5UGF0
aEZyb21WYWx1ZSgmc3RhdGUsIGtleVBhdGhWYWx1ZSk7CisgICAgICAgICAgICBpZiAoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgICAgIH0KIAotICAgICAgICBhdXRvSW5jcmVtZW50ID0gb3B0aW9uc1ZhbHVlLmdldChleGVj
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJhdXRvSW5jcmVtZW50IikpLnRvQm9vbGVh
bihleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBhdXRv
SW5jcmVtZW50ID0gb3B0aW9uc1ZhbHVlLmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLCAiYXV0b0luY3JlbWVudCIpKS50b0Jvb2xlYW4oJnN0YXRlKTsKKyAgICAgICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgfQogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbXBsKCkuY3JlYXRlT2JqZWN0U3RvcmUo
bmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwgZWMpLmdldCgpKTsKLSAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgZWMpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUygmc3RhdGUsIGdsb2Jh
bE9iamVjdCgpLCBpbXBsKCkuY3JlYXRlT2JqZWN0U3RvcmUobmFtZSwga2V5UGF0aCwgYXV0b0lu
Y3JlbWVudCwgZWMpLmdldCgpKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcAppbmRleCA4NTA3ZTQ5NGEzNzZkYjc5OWU1
NmZiZWU4YmQxY2M2ZDlkMTY3ODI4Li4wMTI4OGM2ZWFjYWY3NTc4NDM0YzQxMjE4NWQwNTRkNTY4
MjhiOWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVj
dFN0b3JlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9i
amVjdFN0b3JlQ3VzdG9tLmNwcApAQCAtNDMsNDIgKzQzLDQyIEBAIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSBKU0lEQk9iamVjdFN0b3JlOjpj
cmVhdGVJbmRleChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTSURCT2JqZWN0U3RvcmU6OmNy
ZWF0ZUluZGV4KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4
aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICgh
Y29udGV4dCkKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywg
Y3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhlYywgIklEQk9iamVjdFN0b3JlIHNjcmlwdCBleGVjdXRp
b24gY29udGV4dCBpcyB1bmF2YWlsYWJsZSIpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCku
dGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVSZWZlcmVuY2VFcnJvcigmc3RhdGUsICJJREJP
YmplY3RTdG9yZSBzY3JpcHQgJnN0YXRldXRpb24gY29udGV4dCBpcyB1bmF2YWlsYWJsZSIpKTsK
IAotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAyKQotICAgICAgICByZXR1cm4gZXhl
Yy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihleGVjKSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA8IDIpCisgICAgICAgIHJl
dHVybiBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKLSAgICBTdHJpbmcgbmFtZSA9IGV4ZWMtPmFyZ3VtZW50
KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZS5hcmd1bWVudCgwKS50b1N0cmluZygmc3Rh
dGUpLT52YWx1ZSgmc3RhdGUpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBJREJLZXlQYXRoIGtleVBhdGggPSBpZGJL
ZXlQYXRoRnJvbVZhbHVlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgSURCS2V5UGF0aCBrZXlQYXRoID0gaWRiS2V5UGF0aEZyb21W
YWx1ZSgmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDEpKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgSlNWYWx1ZSBvcHRp
b25zVmFsdWUgPSBleGVjLT5hcmd1bWVudCgyKTsKKyAgICBKU1ZhbHVlIG9wdGlvbnNWYWx1ZSA9
IHN0YXRlLmFyZ3VtZW50KDIpOwogICAgIGlmICghb3B0aW9uc1ZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkgJiYgIW9wdGlvbnNWYWx1ZS5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gdGhyb3dU
eXBlRXJyb3IoZXhlYywgIk5vdCBhbiBvYmplY3QuIik7CisgICAgICAgIHJldHVybiB0aHJvd1R5
cGVFcnJvcigmc3RhdGUsICJOb3QgYW4gb2JqZWN0LiIpOwogCiAgICAgYm9vbCB1bmlxdWUgPSBm
YWxzZTsKICAgICBib29sIG11bHRpRW50cnkgPSBmYWxzZTsKICAgICBpZiAoIW9wdGlvbnNWYWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgIHVuaXF1ZSA9IG9wdGlvbnNWYWx1ZS5n
ZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAidW5pcXVlIikpLnRvQm9vbGVh
bihleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICB1bmlx
dWUgPSBvcHRpb25zVmFsdWUuZ2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJ1bmlxdWUiKSkudG9Cb29sZWFuKCZzdGF0ZSk7CisgICAgICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgICAg
IG11bHRpRW50cnkgPSBvcHRpb25zVmFsdWUuZ2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgIm11bHRpRW50cnkiKSkudG9Cb29sZWFuKGV4ZWMpOwotICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIG11bHRpRW50cnkgPSBvcHRpb25zVmFsdWUuZ2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJtdWx0aUVudHJ5IikpLnRv
Qm9vbGVhbigmc3RhdGUpOworICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAg
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCks
IGltcGwoKS5jcmVhdGVJbmRleChjb250ZXh0LCBuYW1lLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRp
RW50cnksIGVjKS5nZXQoKSk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IHRvSlMoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgaW1wbCgpLmNyZWF0
ZUluZGV4KGNvbnRleHQsIG5hbWUsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSwgZWMpLmdl
dCgpKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0
b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
bnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCmluZGV4IDg3YmIyNzc0ZjI2ZWI5NjNlOTVi
YWMyMzkzZTg3ZDNlMGUyYTdmMzEuLmUyNmJiZTc4ZDlmYmJjNDkyMGNlMWVmY2I0YzM1MGZkN2Ex
MzI0YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9y
RnJvbnRlbmRIb3N0Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAKQEAgLTkxLDE2ICs5MSwxNiBAQCBzdGF0
aWMgdm9pZCBwb3B1bGF0ZUNvbnRleHRNZW51SXRlbXMoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5
KiBhcnJheSwgQ29udGV4dE1lbgogfQogI2VuZGlmCiAKLUpTVmFsdWUgSlNJbnNwZWN0b3JGcm9u
dGVuZEhvc3Q6OnNob3dDb250ZXh0TWVudShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTSW5z
cGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93Q29udGV4dE1lbnUoRXhlY1N0YXRlJiBzdGF0ZSkKIHsK
ICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
IDwgMikKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpIDwgMikKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci0gICAgRXZlbnQqIGV2ZW50ID0gSlNFdmVudDo6dG9XcmFwcGVkKGV4
ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBFdmVudCogZXZlbnQgPSBKU0V2ZW50Ojp0b1dyYXBwZWQo
c3RhdGUuYXJndW1lbnQoMCkpOwogCi0gICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KGV4ZWMt
PmFyZ3VtZW50KDEpKTsKKyAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkoc3RhdGUuYXJndW1l
bnQoMSkpOwogICAgIENvbnRleHRNZW51IG1lbnU7Ci0gICAgcG9wdWxhdGVDb250ZXh0TWVudUl0
ZW1zKGV4ZWMsIGFycmF5LCBtZW51KTsKKyAgICBwb3B1bGF0ZUNvbnRleHRNZW51SXRlbXMoJnN0
YXRlLCBhcnJheSwgbWVudSk7CiAKICNpZiAhVVNFKENST1NTX1BMQVRGT1JNX0NPTlRFWFRfTUVO
VVMpCiAgICAgVmVjdG9yPENvbnRleHRNZW51SXRlbT4gaXRlbXMgPSBjb250ZXh0TWVudUl0ZW1W
ZWN0b3IobWVudS5wbGF0Zm9ybURlc2NyaXB0aW9uKCkpOwpAQCAtMTA5LDcgKzEwOSw3IEBAIEpT
VmFsdWUgSlNJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDb250ZXh0TWVudShFeGVjU3RhdGUq
IGV4ZWMpCiAjZW5kaWYKICAgICBpbXBsKCkuc2hvd0NvbnRleHRNZW51KGV2ZW50LCBpdGVtcyk7
CiAjZWxzZQotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogI2VuZGlmCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCmluZGV4IDJhNjhiYjVhOTkyOTc0
NTAxY2JkNGI2YzhmY2Q3ZWU4NTU1NmQ5ZTIuLjEzMWUyODcwYmRiNTlkNjA1MzZhOTEwYTc3MWRk
NTA3NzJjMDZlNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9j
YXRpb25DdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRp
b25DdXN0b20uY3BwCkBAIC0xMzIsMTMgKzEzMiwxMyBAQCBib29sIEpTTG9jYXRpb246OmRlZmlu
ZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YQogICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwogfQogCi1KU1ZhbHVlIEpTTG9j
YXRpb246OnRvU3RyaW5nRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0xvY2F0
aW9uOjp0b1N0cmluZ0Z1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgRnJhbWUqIGZy
YW1lID0gaW1wbCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSB8fCAhc2hvdWxkQWxsb3dBY2Nl
c3NUb0ZyYW1lKGV4ZWMsIGZyYW1lKSkKKyAgICBpZiAoIWZyYW1lIHx8ICFzaG91bGRBbGxvd0Fj
Y2Vzc1RvRnJhbWUoJnN0YXRlLCBmcmFtZSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCi0gICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGltcGwoKS50b1N0cmluZygp
KTsKKyAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBpbXBsKCkudG9TdHJpbmco
KSk7CiB9CiAKIGJvb2wgSlNMb2NhdGlvblByb3RvdHlwZTo6cHV0RGVsZWdhdGUoRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZWRpYVNvdXJj
ZVN0YXRlc0N1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lZGlhU291
cmNlU3RhdGVzQ3VzdG9tLmNwcAppbmRleCBjYTM0YWMxMDYwNmZmOTA1ZTE0YzlmNDYxYTQ1NmEy
MzNhOTcyMmY5Li44MDE4YjI2MzNiNzhlOWNlMWRlMjkxMzNkOWQ5NGU2NzAyZWEzNTFlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lZGlhU291cmNlU3RhdGVzQ3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lZGlhU291cmNlU3Rh
dGVzQ3VzdG9tLmNwcApAQCAtMzUsNyArMzUsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNNZWRpYVNvdXJjZVN0YXRlczo6d2lkdGgo
RXhlY1N0YXRlKikgY29uc3QKK0pTVmFsdWUgSlNNZWRpYVNvdXJjZVN0YXRlczo6d2lkdGgoRXhl
Y1N0YXRlJikgY29uc3QKIHsKICAgICBpZiAoIWltcGwoKS5oYXNWaWRlb1NvdXJjZSgpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTQzLDcgKzQzLDcgQEAgSlNWYWx1ZSBKU01l
ZGlhU291cmNlU3RhdGVzOjp3aWR0aChFeGVjU3RhdGUqKSBjb25zdAogICAgIHJldHVybiBqc051
bWJlcihpbXBsKCkud2lkdGgoKSk7CiB9CiAKLUpTVmFsdWUgSlNNZWRpYVNvdXJjZVN0YXRlczo6
aGVpZ2h0KEV4ZWNTdGF0ZSopIGNvbnN0CitKU1ZhbHVlIEpTTWVkaWFTb3VyY2VTdGF0ZXM6Omhl
aWdodChFeGVjU3RhdGUmKSBjb25zdAogewogICAgIGlmICghaW1wbCgpLmhhc1ZpZGVvU291cmNl
KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtNTEsNyArNTEsNyBAQCBKU1Zh
bHVlIEpTTWVkaWFTb3VyY2VTdGF0ZXM6OmhlaWdodChFeGVjU3RhdGUqKSBjb25zdAogICAgIHJl
dHVybiBqc051bWJlcihpbXBsKCkuaGVpZ2h0KCkpOwogfQogCi1KU1ZhbHVlIEpTTWVkaWFTb3Vy
Y2VTdGF0ZXM6OmZyYW1lUmF0ZShFeGVjU3RhdGUqKSBjb25zdAorSlNWYWx1ZSBKU01lZGlhU291
cmNlU3RhdGVzOjpmcmFtZVJhdGUoRXhlY1N0YXRlJikgY29uc3QKIHsKICAgICBpZiAoIWltcGwo
KS5oYXNWaWRlb1NvdXJjZSgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTU5
LDcgKzU5LDcgQEAgSlNWYWx1ZSBKU01lZGlhU291cmNlU3RhdGVzOjpmcmFtZVJhdGUoRXhlY1N0
YXRlKikgY29uc3QKICAgICByZXR1cm4ganNOdW1iZXIoaW1wbCgpLmZyYW1lUmF0ZSgpKTsKIH0K
IAotSlNWYWx1ZSBKU01lZGlhU291cmNlU3RhdGVzOjphc3BlY3RSYXRpbyhFeGVjU3RhdGUqKSBj
b25zdAorSlNWYWx1ZSBKU01lZGlhU291cmNlU3RhdGVzOjphc3BlY3RSYXRpbyhFeGVjU3RhdGUm
KSBjb25zdAogewogICAgIGlmICghaW1wbCgpLmhhc1ZpZGVvU291cmNlKCkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtNjcsNyArNjcsNyBAQCBKU1ZhbHVlIEpTTWVkaWFTb3Vy
Y2VTdGF0ZXM6OmFzcGVjdFJhdGlvKEV4ZWNTdGF0ZSopIGNvbnN0CiAgICAgcmV0dXJuIGpzTnVt
YmVyKGltcGwoKS5hc3BlY3RSYXRpbygpKTsKIH0KIAotSlNWYWx1ZSBKU01lZGlhU291cmNlU3Rh
dGVzOjpmYWNpbmdNb2RlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgSlNNZWRpYVNv
dXJjZVN0YXRlczo6ZmFjaW5nTW9kZShFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogewogICAgIGlm
ICghaW1wbCgpLmhhc1ZpZGVvU291cmNlKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwpAQCAtNzYsMTAgKzc2LDEwIEBAIEpTVmFsdWUgSlNNZWRpYVNvdXJjZVN0YXRlczo6ZmFjaW5n
TW9kZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgaWYgKG1vZGUuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAKLSAgICByZXR1cm4ganNTdHJpbmdXaXRo
Q2FjaGUoZXhlYywgaW1wbCgpLmZhY2luZ01vZGUoKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nV2l0
aENhY2hlKCZzdGF0ZSwgaW1wbCgpLmZhY2luZ01vZGUoKSk7CiB9CiAKLUpTVmFsdWUgSlNNZWRp
YVNvdXJjZVN0YXRlczo6dm9sdW1lKEV4ZWNTdGF0ZSopIGNvbnN0CitKU1ZhbHVlIEpTTWVkaWFT
b3VyY2VTdGF0ZXM6OnZvbHVtZShFeGVjU3RhdGUmKSBjb25zdAogewogICAgIGlmIChpbXBsKCku
aGFzVmlkZW9Tb3VyY2UoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAKaW5k
ZXggYmU2NDVjMGViODI1OGY3ODZkZDk0OTA2ZTk0MTkzNTk5YjRjNTAwNy4uY2I4N2Q4OTUxZjk3
MzRlOWFkMDgzZDAzYzk4NjM0Y2RmYjA4NmVlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcApAQCAtNDQsMTEgKzQ0LDExIEBA
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSBK
U01lc3NhZ2VFdmVudDo6ZGF0YShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTTWVz
c2FnZUV2ZW50OjpkYXRhKEV4ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0CiB7CiAgICAgaWYgKEpTVmFs
dWUgY2FjaGVkVmFsdWUgPSBtX2RhdGEuZ2V0KCkpIHsKICAgICAgICAgLy8gV2UgY2Fubm90IHVz
ZSBhIGNhY2hlZCBvYmplY3QgaWYgd2UgYXJlIGluIGEgZGlmZmVyZW50IHdvcmxkIHRoYW4gdGhl
IG9uZSBpdCB3YXMgY3JlYXRlZCBpbi4KLSAgICAgICAgaWYgKCFjYWNoZWRWYWx1ZS5pc09iamVj
dCgpIHx8ICZ3b3JsZEZvckRPTU9iamVjdChjYWNoZWRWYWx1ZS5nZXRPYmplY3QoKSkgPT0gJmN1
cnJlbnRXb3JsZChleGVjKSkKKyAgICAgICAgaWYgKCFjYWNoZWRWYWx1ZS5pc09iamVjdCgpIHx8
ICZ3b3JsZEZvckRPTU9iamVjdChjYWNoZWRWYWx1ZS5nZXRPYmplY3QoKSkgPT0gJmN1cnJlbnRX
b3JsZCgmc3RhdGUpKQogICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFZhbHVlOwogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC02NCwxMCArNjQsMTAgQEAgSlNWYWx1ZSBK
U01lc3NhZ2VFdmVudDo6ZGF0YShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgICAgICAgICBK
U1ZhbHVlIGRhdGFWYWx1ZSA9IHNjcmlwdFZhbHVlLmpzVmFsdWUoKTsKICAgICAgICAgICAgIC8v
IFdlIG5lZWQgdG8gbWFrZSBzdXJlIE1lc3NhZ2VFdmVudHMgZG8gbm90IGxlYWsgb2JqZWN0cyBp
biB0aGVpciBzdGF0ZSBwcm9wZXJ0eSBhY3Jvc3MgaXNvbGF0ZWQgRE9NIHdvcmxkcy4KICAgICAg
ICAgICAgIC8vIElkZWFsbHksIHdlIHdvdWxkIGNoZWNrIHRoYXQgdGhlIHdvcmxkcyBoYXZlIGRp
ZmZlcmVudCBwcml2aWxlZ2VzIGJ1dCB0aGF0J3Mgbm90IHBvc3NpYmxlIHlldC4KLSAgICAgICAg
ICAgIGlmIChkYXRhVmFsdWUuaXNPYmplY3QoKSAmJiAmd29ybGRGb3JET01PYmplY3QoZGF0YVZh
bHVlLmdldE9iamVjdCgpKSAhPSAmY3VycmVudFdvcmxkKGV4ZWMpKSB7Ci0gICAgICAgICAgICAg
ICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gZXZlbnQu
dHJ5U2VyaWFsaXplRGF0YShleGVjKTsKKyAgICAgICAgICAgIGlmIChkYXRhVmFsdWUuaXNPYmpl
Y3QoKSAmJiAmd29ybGRGb3JET01PYmplY3QoZGF0YVZhbHVlLmdldE9iamVjdCgpKSAhPSAmY3Vy
cmVudFdvcmxkKCZzdGF0ZSkpIHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBldmVudC50cnlTZXJpYWxpemVEYXRhKCZzdGF0
ZSk7CiAgICAgICAgICAgICAgICAgaWYgKHNlcmlhbGl6ZWRWYWx1ZSkKLSAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gc2VyaWFsaXplZFZhbHVlLT5kZXNlcmlhbGl6ZShleGVjLCBnbG9iYWxP
YmplY3QoKSwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlcmlhbGl6
ZWRWYWx1ZS0+ZGVzZXJpYWxpemUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgbnVsbHB0cik7CiAg
ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBqc051bGwo
KTsKICAgICAgICAgICAgIH0gZWxzZQpAQCAtODAsNjQgKzgwLDY0IEBAIEpTVmFsdWUgSlNNZXNz
YWdlRXZlbnQ6OmRhdGEoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAgICAgICBpZiAoUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gZXZlbnQuZGF0YUFzU2Vy
aWFsaXplZFNjcmlwdFZhbHVlKCkpIHsKICAgICAgICAgICAgIE1lc3NhZ2VQb3J0QXJyYXkgcG9y
dHMgPSBpbXBsKCkucG9ydHMoKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXaHkgZG9lcyB0aGlz
IHN1cHByZXNzIGV4Y2VwdGlvbnM/Ci0gICAgICAgICAgICByZXN1bHQgPSBzZXJpYWxpemVkVmFs
dWUtPmRlc2VyaWFsaXplKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCAmcG9ydHMsIE5vblRocm93aW5n
KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlcmlhbGl6ZWRWYWx1ZS0+ZGVzZXJpYWxpemUoJnN0
YXRlLCBnbG9iYWxPYmplY3QoKSwgJnBvcnRzLCBOb25UaHJvd2luZyk7CiAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgcmVzdWx0ID0ganNOdWxsKCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAg
Y2FzZSBNZXNzYWdlRXZlbnQ6OkRhdGFUeXBlU3RyaW5nOgotICAgICAgICByZXN1bHQgPSBqc1N0
cmluZ1dpdGhDYWNoZShleGVjLCBldmVudC5kYXRhQXNTdHJpbmcoKSk7CisgICAgICAgIHJlc3Vs
dCA9IGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgZXZlbnQuZGF0YUFzU3RyaW5nKCkpOwogICAg
ICAgICBicmVhazsKIAogICAgIGNhc2UgTWVzc2FnZUV2ZW50OjpEYXRhVHlwZUJsb2I6Ci0gICAg
ICAgIHJlc3VsdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGV2ZW50LmRhdGFBc0Jsb2Io
KSk7CisgICAgICAgIHJlc3VsdCA9IHRvSlMoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgZXZlbnQu
ZGF0YUFzQmxvYigpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE1lc3NhZ2VFdmVudDo6
RGF0YVR5cGVBcnJheUJ1ZmZlcjoKLSAgICAgICAgcmVzdWx0ID0gdG9KUyhleGVjLCBnbG9iYWxP
YmplY3QoKSwgZXZlbnQuZGF0YUFzQXJyYXlCdWZmZXIoKSk7CisgICAgICAgIHJlc3VsdCA9IHRv
SlMoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgZXZlbnQuZGF0YUFzQXJyYXlCdWZmZXIoKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIC8vIFNhdmUgdGhlIHJlc3VsdCBzbyB3ZSBkb24n
dCBoYXZlIHRvIGRlc2VyaWFsaXplIHRoZSB2YWx1ZSBhZ2Fpbi4KLSAgICBjb25zdF9jYXN0PEpT
TWVzc2FnZUV2ZW50Kj4odGhpcyktPm1fZGF0YS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgcmVzdWx0
KTsKKyAgICBjb25zdF9jYXN0PEpTTWVzc2FnZUV2ZW50Kj4odGhpcyktPm1fZGF0YS5zZXQoc3Rh
dGUudm0oKSwgdGhpcywgcmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMg
SlNDOjpKU1ZhbHVlIGhhbmRsZUluaXRNZXNzYWdlRXZlbnQoSlNNZXNzYWdlRXZlbnQqIGpzRXZl
bnQsIEpTQzo6RXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEpTQzo6SlNWYWx1ZSBoYW5kbGVJbml0
TWVzc2FnZUV2ZW50KEpTTWVzc2FnZUV2ZW50KiBqc0V2ZW50LCBKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUpCiB7Ci0gICAgY29uc3QgU3RyaW5nJiB0eXBlQXJnID0gZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGJvb2wgY2FuQnViYmxlQXJnID0gZXhlYy0+
YXJndW1lbnQoMSkudG9Cb29sZWFuKGV4ZWMpOwotICAgIGJvb2wgY2FuY2VsYWJsZUFyZyA9IGV4
ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVjKTsKLSAgICBjb25zdCBTdHJpbmcgb3JpZ2lu
QXJnID0gZXhlYy0+YXJndW1lbnQoNCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAg
IGNvbnN0IFN0cmluZyBsYXN0RXZlbnRJZEFyZyA9IGV4ZWMtPmFyZ3VtZW50KDUpLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBET01XaW5kb3cqIHNvdXJjZUFyZyA9IEpTRE9NV2lu
ZG93Ojp0b1dyYXBwZWQoZXhlYy0+YXJndW1lbnQoNikpOworICAgIGNvbnN0IFN0cmluZyYgdHlw
ZUFyZyA9IHN0YXRlLmFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7
CisgICAgYm9vbCBjYW5CdWJibGVBcmcgPSBzdGF0ZS5hcmd1bWVudCgxKS50b0Jvb2xlYW4oJnN0
YXRlKTsKKyAgICBib29sIGNhbmNlbGFibGVBcmcgPSBzdGF0ZS5hcmd1bWVudCgyKS50b0Jvb2xl
YW4oJnN0YXRlKTsKKyAgICBjb25zdCBTdHJpbmcgb3JpZ2luQXJnID0gc3RhdGUuYXJndW1lbnQo
NCkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKKyAgICBjb25zdCBTdHJpbmcgbGFz
dEV2ZW50SWRBcmcgPSBzdGF0ZS5hcmd1bWVudCg1KS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgm
c3RhdGUpOworICAgIERPTVdpbmRvdyogc291cmNlQXJnID0gSlNET01XaW5kb3c6OnRvV3JhcHBl
ZChzdGF0ZS5hcmd1bWVudCg2KSk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1lc3NhZ2VQb3J0QXJy
YXk+IG1lc3NhZ2VQb3J0czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJBcnJheT4g
YXJyYXlCdWZmZXJzOwotICAgIGlmICghZXhlYy0+YXJndW1lbnQoNykuaXNVbmRlZmluZWRPck51
bGwoKSkgeworICAgIGlmICghc3RhdGUuYXJndW1lbnQoNykuaXNVbmRlZmluZWRPck51bGwoKSkg
ewogICAgICAgICBtZXNzYWdlUG9ydHMgPSBzdGQ6Om1ha2VfdW5pcXVlPE1lc3NhZ2VQb3J0QXJy
YXk+KCk7CiAgICAgICAgIGFycmF5QnVmZmVycyA9IHN0ZDo6bWFrZV91bmlxdWU8QXJyYXlCdWZm
ZXJBcnJheT4oKTsKLSAgICAgICAgZmlsbE1lc3NhZ2VQb3J0QXJyYXkoZXhlYywgZXhlYy0+YXJn
dW1lbnQoNyksICptZXNzYWdlUG9ydHMsICphcnJheUJ1ZmZlcnMpOwotICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGZpbGxNZXNzYWdlUG9ydEFycmF5KHN0YXRlLCBz
dGF0ZS5hcmd1bWVudCg3KSwgKm1lc3NhZ2VQb3J0cywgKmFycmF5QnVmZmVycyk7CisgICAgICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIH0KLSAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBkYXRhQXJnID0gRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUoZXhlYy0+dm0oKSwgZXhlYy0+YXJndW1lbnQoMykpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBkYXRh
QXJnID0gRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUoc3RhdGUudm0oKSwgc3RhdGUuYXJndW1lbnQo
MykpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKICAgICBNZXNzYWdlRXZlbnQmIGV2ZW50ID0ganNFdmVudC0+aW1wbCgpOwog
ICAgIGV2ZW50LmluaXRNZXNzYWdlRXZlbnQodHlwZUFyZywgY2FuQnViYmxlQXJnLCBjYW5jZWxh
YmxlQXJnLCBkYXRhQXJnLCBvcmlnaW5BcmcsIGxhc3RFdmVudElkQXJnLCBzb3VyY2VBcmcsIFdU
Rjo6bW92ZShtZXNzYWdlUG9ydHMpKTsKLSAgICBqc0V2ZW50LT5tX2RhdGEuc2V0KGV4ZWMtPnZt
KCksIGpzRXZlbnQsIGRhdGFBcmcuanNWYWx1ZSgpKTsKKyAgICBqc0V2ZW50LT5tX2RhdGEuc2V0
KHN0YXRlLnZtKCksIGpzRXZlbnQsIGRhdGFBcmcuanNWYWx1ZSgpKTsKICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50Ojppbml0TWVzc2Fn
ZUV2ZW50KEpTQzo6RXhlY1N0YXRlKiBleGVjKQorSlNDOjpKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50
Ojppbml0TWVzc2FnZUV2ZW50KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1cm4g
aGFuZGxlSW5pdE1lc3NhZ2VFdmVudCh0aGlzLCBleGVjKTsKKyAgICByZXR1cm4gaGFuZGxlSW5p
dE1lc3NhZ2VFdmVudCh0aGlzLCBzdGF0ZSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU01lc3NhZ2VF
dmVudDo6d2Via2l0SW5pdE1lc3NhZ2VFdmVudChKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK0pTQzo6
SlNWYWx1ZSBKU01lc3NhZ2VFdmVudDo6d2Via2l0SW5pdE1lc3NhZ2VFdmVudChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIGhhbmRsZUluaXRNZXNzYWdlRXZlbnQodGhpcywg
ZXhlYyk7CisgICAgcmV0dXJuIGhhbmRsZUluaXRNZXNzYWdlRXZlbnQodGhpcywgc3RhdGUpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCmluZGV4IDk4YTc0YjUxOTFiMjRjNTJhMDll
ZjllZTI4ZDA3MzcyMDUxYjMxYmYuLjIzOWY0N2FmZDZkYTVlYmU1MTkwZTdjYmI1OTNlMzNiZWJm
OTFlMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBv
cnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBv
cnRDdXN0b20uY3BwCkBAIC01MiwxMiArNTIsMTIgQEAgdm9pZCBKU01lc3NhZ2VQb3J0Ojp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KHBvcnQpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNNZXNzYWdlUG9ydDo6
cG9zdE1lc3NhZ2UoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCitKU0M6OkpTVmFsdWUgSlNNZXNzYWdl
UG9ydDo6cG9zdE1lc3NhZ2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIHJldHVybiBo
YW5kbGVQb3N0TWVzc2FnZShleGVjLCAmaW1wbCgpKTsKKyAgICByZXR1cm4gaGFuZGxlUG9zdE1l
c3NhZ2Uoc3RhdGUsICZpbXBsKCkpOwogfQogCi12b2lkIGZpbGxNZXNzYWdlUG9ydEFycmF5KEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUsIE1lc3NhZ2VQb3J0QXJyYXkm
IHBvcnRBcnJheSwgQXJyYXlCdWZmZXJBcnJheSYgYXJyYXlCdWZmZXJzKQordm9pZCBmaWxsTWVz
c2FnZVBvcnRBcnJheShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
TWVzc2FnZVBvcnRBcnJheSYgcG9ydEFycmF5LCBBcnJheUJ1ZmZlckFycmF5JiBhcnJheUJ1ZmZl
cnMpCiB7CiAgICAgLy8gQ29udmVydCBmcm9tIHRoZSBwYXNzZWQtaW4gSlMgYXJyYXktbGlrZSBv
YmplY3QgdG8gYSBNZXNzYWdlUG9ydEFycmF5LgogICAgIC8vIEFsc28gdmFsaWRhdGVzIHRoZSBl
bGVtZW50cyBwZXIgc2VjdGlvbnMgNC4xLjEzIGFuZCA0LjEuMTUgb2YgdGhlIFdlYklETCBzcGVj
IGFuZCBzZWN0aW9uIDguMy4zIG9mIHRoZSBIVE1MNSBzcGVjLgpAQCAtNjksMTcgKzY5LDE3IEBA
IHZvaWQgZmlsbE1lc3NhZ2VQb3J0QXJyYXkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgTWVzc2FnZVBvcnRBCiAKICAgICAvLyBWYWxpZGF0aW9uIG9mIHNlcXVlbmNl
IHR5cGVzLCBwZXIgV2ViSURMIHNwZWMgNC4xLjEzLgogICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7
Ci0gICAgSlNPYmplY3QqIG9iamVjdCA9IHRvSlNTZXF1ZW5jZShleGVjLCB2YWx1ZSwgbGVuZ3Ro
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgSlNPYmplY3QqIG9iamVjdCA9
IHRvSlNTZXF1ZW5jZSgmc3RhdGUsIHZhbHVlLCBsZW5ndGgpOworICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCA7
IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQo
ZXhlYywgaSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgaSk7CisgICAgICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgLy8gVmFsaWRhdGlv
biBvZiBub24tbnVsbCBvYmplY3RzLCBwZXIgSFRNTDUgc3BlYyAxMC4zLjMuCiAgICAgICAgIGlm
ICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgSU5WQUxJRF9TVEFURV9FUlIpOworICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KCZzdGF0ZSwgSU5WQUxJRF9TVEFURV9FUlIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBmaWxsTWVzc2FnZVBvcnRBcnJheShKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlLCBNZXNzYWdlUG9ydEEKICAgICAgICAg
aWYgKHBvcnQpIHsKICAgICAgICAgICAgIC8vIENoZWNrIGZvciBkdXBsaWNhdGUgcG9ydHMuCiAg
ICAgICAgICAgICBpZiAocG9ydEFycmF5LmNvbnRhaW5zKHBvcnQpKSB7Ci0gICAgICAgICAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIElOVkFMSURfU1RBVEVfRVJSKTsKKyAgICAgICAgICAg
ICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBJTlZBTElEX1NUQVRFX0VSUik7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcG9ydEFycmF5LmFw
cGVuZChwb3J0LnJlbGVhc2UoKSk7CkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgZmlsbE1lc3NhZ2VQ
b3J0QXJyYXkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgTWVzc2Fn
ZVBvcnRBCiAgICAgICAgICAgICBpZiAoYXJyYXlCdWZmZXIpCiAgICAgICAgICAgICAgICAgYXJy
YXlCdWZmZXJzLmFwcGVuZChhcnJheUJ1ZmZlcik7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAgICAgICAgICAgICB0aHJvd1R5
cGVFcnJvcigmc3RhdGUpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNz
YWdlUG9ydEN1c3RvbS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9y
dEN1c3RvbS5oCmluZGV4IGU0NTJiYTFkZWQ3OTM0YmEyMTlmZDZjZDlhZDk5YzcxMzQ2N2ZmZGUu
LjdiZDlkZjM1MTVmOTM1MjM1YzI5MGE4ZTM0YmU1MmQzZjIwZTVkM2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmgKQEAgLTQzLDIyICs0
MywyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHdoaWNo
IHB1bGxzIHRoZSB2YWx1ZXMgb3V0IG9mIGEgSlMgc2VxdWVuY2UgYW5kIGludG8gYSBNZXNzYWdl
UG9ydEFycmF5LgogICAgIC8vIEFsc28gdmFsaWRhdGVzIHRoZSBlbGVtZW50cyBwZXIgc2VjdGlv
bnMgNC4xLjEzIGFuZCA0LjEuMTUgb2YgdGhlIFdlYklETCBzcGVjIGFuZCBzZWN0aW9uIDguMy4z
IG9mIHRoZSBIVE1MNSBzcGVjLgogICAgIC8vIE1heSBnZW5lcmF0ZSBhbiBleGNlcHRpb24gdmlh
IHRoZSBwYXNzZWQgRXhlY1N0YXRlLgotICAgIHZvaWQgZmlsbE1lc3NhZ2VQb3J0QXJyYXkoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIE1lc3NhZ2VQb3J0QXJyYXkmLCBBcnJheUJ1ZmZl
ckFycmF5Jik7CisgICAgdm9pZCBmaWxsTWVzc2FnZVBvcnRBcnJheShKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSwgTWVzc2FnZVBvcnRBcnJheSYsIEFycmF5QnVmZmVyQXJyYXkmKTsKIAog
ICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGZyb20gSlMgcG9zdE1lc3NhZ2UgYXJn
dW1lbnRzIHRvIFdlYkNvcmUgcG9zdE1lc3NhZ2UgYXJndW1lbnRzLgogICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPgotICAgIGlubGluZSBKU0M6OkpTVmFsdWUgaGFuZGxlUG9zdE1lc3NhZ2UoSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIFQqIGltcGwpCisgICAgaW5saW5lIEpTQzo6SlNWYWx1ZSBoYW5k
bGVQb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFQqIGltcGwpCiAgICAgewogICAg
ICAgICBNZXNzYWdlUG9ydEFycmF5IHBvcnRBcnJheTsKICAgICAgICAgQXJyYXlCdWZmZXJBcnJh
eSBhcnJheUJ1ZmZlckFycmF5OwotICAgICAgICBmaWxsTWVzc2FnZVBvcnRBcnJheShleGVjLCBl
eGVjLT5hcmd1bWVudCgxKSwgcG9ydEFycmF5LCBhcnJheUJ1ZmZlckFycmF5KTsKLSAgICAgICAg
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSA9IFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCAmcG9ydEFycmF5LCAmYXJyYXlC
dWZmZXJBcnJheSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
ZmlsbE1lc3NhZ2VQb3J0QXJyYXkoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDEpLCBwb3J0QXJyYXks
IGFycmF5QnVmZmVyQXJyYXkpOworICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBtZXNzYWdlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoJnN0YXRlLCBzdGF0ZS5h
cmd1bWVudCgwKSwgJnBvcnRBcnJheSwgJmFycmF5QnVmZmVyQXJyYXkpOworICAgICAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5l
ZCgpOwogCiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgICAgICBpbXBsLT5wb3N0
TWVzc2FnZShtZXNzYWdlLnJlbGVhc2UoKSwgJnBvcnRBcnJheSwgZWMpOwotICAgICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBl
Yyk7CiAgICAgICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01vY2tDb250ZW50RmlsdGVyU2V0dGlu
Z3NDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNb2NrQ29udGVudEZp
bHRlclNldHRpbmdzQ3VzdG9tLmNwcAppbmRleCA5YmMxNGViM2EzNDZhYmM0YzNhMmIyYzU1Y2U3
NjhiMWMxNmMyNGIzLi5jNDY4YWFkNmE2MTRlNDlmMmE3ZmM5OTIyZWMyYmFkMjQyNDJlYzVkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01vY2tDb250ZW50RmlsdGVy
U2V0dGluZ3NDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTW9j
a0NvbnRlbnRGaWx0ZXJTZXR0aW5nc0N1c3RvbS5jcHAKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogdXNpbmcgRGVjaXNpb24gPSBNb2NrQ29udGVudEZpbHRlclNldHRpbmdz
OjpEZWNpc2lvbjsKIHVzaW5nIERlY2lzaW9uUG9pbnQgPSBNb2NrQ29udGVudEZpbHRlclNldHRp
bmdzOjpEZWNpc2lvblBvaW50OwogCi1KU1ZhbHVlIEpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5n
czo6ZGVjaXNpb25Qb2ludChFeGVjU3RhdGUqKSBjb25zdAorSlNWYWx1ZSBKU01vY2tDb250ZW50
RmlsdGVyU2V0dGluZ3M6OmRlY2lzaW9uUG9pbnQoRXhlY1N0YXRlJikgY29uc3QKIHsKICAgICBE
ZWNpc2lvblBvaW50IGRlY2lzaW9uUG9pbnQgPSBpbXBsKCkuZGVjaXNpb25Qb2ludCgpOwogICAg
IHN3aXRjaCAoZGVjaXNpb25Qb2ludCkgewpAQCAtNTUsMTAgKzU1LDEwIEBAIEpTVmFsdWUgSlNN
b2NrQ29udGVudEZpbHRlclNldHRpbmdzOjpkZWNpc2lvblBvaW50KEV4ZWNTdGF0ZSopIGNvbnN0
CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgSlNNb2NrQ29udGVudEZpbHRl
clNldHRpbmdzOjpzZXREZWNpc2lvblBvaW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSkKK3ZvaWQgSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzOjpzZXREZWNpc2lvblBvaW50KEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgdWludDhfdCBuYXRpdmVWYWx1
ZSB7IHRvVUludDgoZXhlYywgdmFsdWUsIEVuZm9yY2VSYW5nZSkgfTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgdWludDhfdCBuYXRpdmVWYWx1ZSB7IHRvVUludDgoJnN0YXRl
LCB2YWx1ZSwgRW5mb3JjZVJhbmdlKSB9OworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgRGVjaXNpb25Qb2ludCBkZWNpc2lvblBvaW50IHsgc3Rh
dGljX2Nhc3Q8RGVjaXNpb25Qb2ludD4obmF0aXZlVmFsdWUpIH07CkBAIC03Myw3ICs3Myw3IEBA
IHZvaWQgSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzOjpzZXREZWNpc2lvblBvaW50KEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB0
aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpbmc6OmZvcm1hdCgiJXUgaXMgbm90IGEgdmFsaWQgZGVj
aXNpb25Qb2ludCB2YWx1ZS4iLCBuYXRpdmVWYWx1ZSkpOworICAgIHRocm93VHlwZUVycm9yKCZz
dGF0ZSwgU3RyaW5nOjpmb3JtYXQoIiV1IGlzIG5vdCBhIHZhbGlkIGRlY2lzaW9uUG9pbnQgdmFs
dWUuIiwgbmF0aXZlVmFsdWUpKTsKIH0KIAogc3RhdGljIGlubGluZSBKU1ZhbHVlIHRvSlNWYWx1
ZShEZWNpc2lvbiBkZWNpc2lvbikKQEAgLTg4LDEwICs4OCwxMCBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUgdG9KU1ZhbHVlKERlY2lzaW9uIGRlY2lzaW9uKQogICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCi1zdGF0aWMgaW5saW5lIERlY2lzaW9uIHRvRGVjaXNpb24oRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHZhbHVlKQorc3RhdGljIGlubGluZSBEZWNpc2lvbiB0b0RlY2lzaW9uKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgdWludDhfdCBuYXRpdmVWYWx1
ZSB7IHRvVUludDgoZXhlYywgdmFsdWUsIEVuZm9yY2VSYW5nZSkgfTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgdWludDhfdCBuYXRpdmVWYWx1ZSB7IHRvVUludDgoJnN0YXRl
LCB2YWx1ZSwgRW5mb3JjZVJhbmdlKSB9OworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgcmV0dXJuIERlY2lzaW9uOjpBbGxvdzsKIAogICAgIERlY2lzaW9uIGRlY2lzaW9u
IHsgc3RhdGljX2Nhc3Q8RGVjaXNpb24+KG5hdGl2ZVZhbHVlKSB9OwpAQCAtMTAxLDMzICsxMDEs
MzMgQEAgc3RhdGljIGlubGluZSBEZWNpc2lvbiB0b0RlY2lzaW9uKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSB2YWx1ZSkKICAgICAgICAgcmV0dXJuIGRlY2lzaW9uOwogICAgIH0KIAotICAgIHRo
cm93VHlwZUVycm9yKGV4ZWMsIFN0cmluZzo6Zm9ybWF0KCIldSBpcyBub3QgYSB2YWxpZCBkZWNp
c2lvbiB2YWx1ZS4iLCBuYXRpdmVWYWx1ZSkpOworICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwg
U3RyaW5nOjpmb3JtYXQoIiV1IGlzIG5vdCBhIHZhbGlkIGRlY2lzaW9uIHZhbHVlLiIsIG5hdGl2
ZVZhbHVlKSk7CiAgICAgcmV0dXJuIERlY2lzaW9uOjpBbGxvdzsKIH0KIAotSlNWYWx1ZSBKU01v
Y2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OmRlY2lzaW9uKEV4ZWNTdGF0ZSopIGNvbnN0CitKU1Zh
bHVlIEpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nczo6ZGVjaXNpb24oRXhlY1N0YXRlJikgY29u
c3QKIHsKICAgICByZXR1cm4gdG9KU1ZhbHVlKGltcGwoKS5kZWNpc2lvbigpKTsKIH0KIAotdm9p
ZCBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OnNldERlY2lzaW9uKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzOjpzZXRE
ZWNpc2lvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIERlY2lzaW9u
IGRlY2lzaW9uIHsgdG9EZWNpc2lvbihleGVjLCB2YWx1ZSkgfTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgRGVjaXNpb24gZGVjaXNpb24geyB0b0RlY2lzaW9uKHN0YXRlLCB2
YWx1ZSkgfTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGltcGwoKS5zZXREZWNpc2lvbihkZWNpc2lvbik7CiB9CiAKLUpTVmFsdWUgSlNNb2Nr
Q29udGVudEZpbHRlclNldHRpbmdzOjp1bmJsb2NrUmVxdWVzdERlY2lzaW9uKEV4ZWNTdGF0ZSop
IGNvbnN0CitKU1ZhbHVlIEpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nczo6dW5ibG9ja1JlcXVl
c3REZWNpc2lvbihFeGVjU3RhdGUmKSBjb25zdAogewogICAgIHJldHVybiB0b0pTVmFsdWUoaW1w
bCgpLnVuYmxvY2tSZXF1ZXN0RGVjaXNpb24oKSk7CiB9CiAKLXZvaWQgSlNNb2NrQ29udGVudEZp
bHRlclNldHRpbmdzOjpzZXRVbmJsb2NrUmVxdWVzdERlY2lzaW9uKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzOjpzZXRVbmJs
b2NrUmVxdWVzdERlY2lzaW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0g
ICAgRGVjaXNpb24gdW5ibG9ja1JlcXVlc3REZWNpc2lvbiB7IHRvRGVjaXNpb24oZXhlYywgdmFs
dWUpIH07Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIERlY2lzaW9uIHVuYmxv
Y2tSZXF1ZXN0RGVjaXNpb24geyB0b0RlY2lzaW9uKHN0YXRlLCB2YWx1ZSkgfTsKKyAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGltcGwoKS5zZXRV
bmJsb2NrUmVxdWVzdERlY2lzaW9uKHVuYmxvY2tSZXF1ZXN0RGVjaXNpb24pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwCmluZGV4IDJhZjM1
NjM4ZDIxMWU2NjQ3MGY5NTUyZWZhYjNiY2ZmYjUxN2E1MDguLjNkNWZlMTI0ODY0ODYzNGE2NGEx
ZDg5NzVjNGFjMWJjM2QxYmQ5YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05hdmlnYXRvckN1c3RvbS5jcHAKQEAgLTQyLDQxICs0Miw0MSBAQCB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNOYXZpZ2F0b3I6Ondl
YmtpdEdldFVzZXJNZWRpYShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTTmF2aWdhdG9yOjp3
ZWJraXRHZXRVc2VyTWVkaWEoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpIDwgMykgewotICAgICAgICB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50
KCkgPCAzKSB7CisgICAgICAgIHRocm93Vk1FcnJvcigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICB9CiAKLSAgICBEaWN0aW9uYXJ5IG9wdGlvbnMoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBEaWN0aW9uYXJ5IG9wdGlvbnMoJnN0
YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGlmICghb3B0aW9ucy5pc09iamVj
dCgpKSB7Ci0gICAgICAgIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
IkZpcnN0IGFyZ3VtZW50IG9mIHdlYmtpdEdldFVzZXJNZWRpYSBtdXN0IGJlIGEgdmFsaWQgRGlj
dGlvbmFyeSIpKTsKKyAgICAgICAgdGhyb3dWTUVycm9yKCZzdGF0ZSwgY3JlYXRlVHlwZUVycm9y
KCZzdGF0ZSwgIkZpcnN0IGFyZ3VtZW50IG9mIHdlYmtpdEdldFVzZXJNZWRpYSBtdXN0IGJlIGEg
dmFsaWQgRGljdGlvbmFyeSIpKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
fQogCi0gICAgaWYgKCFleGVjLT5hcmd1bWVudCgxKS5pc0Z1bmN0aW9uKCkpIHsKLSAgICAgICAg
dGhyb3dWTVR5cGVFcnJvcihleGVjLCAiQXJndW1lbnQgMiAoJ3N1Y2Nlc3NDYWxsYmFjaycpIHRv
IE5hdmlnYXRvci53ZWJraXRHZXRVc2VyTWVkaWEgbXVzdCBiZSBhIGZ1bmN0aW9uIik7CisgICAg
aWYgKCFzdGF0ZS5hcmd1bWVudCgxKS5pc0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgdGhyb3dWTVR5
cGVFcnJvcigmc3RhdGUsICJBcmd1bWVudCAyICgnc3VjY2Vzc0NhbGxiYWNrJykgdG8gTmF2aWdh
dG9yLndlYmtpdEdldFVzZXJNZWRpYSBtdXN0IGJlIGEgZnVuY3Rpb24iKTsKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgaWYgKCFleGVjLT5hcmd1bWVudCgyKS5p
c0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCAiQXJndW1lbnQg
MyAoJ2Vycm9yQ2FsbGJhY2snKSB0byBOYXZpZ2F0b3Iud2Via2l0R2V0VXNlck1lZGlhIG11c3Qg
YmUgYSBmdW5jdGlvbiIpOworICAgIGlmICghc3RhdGUuYXJndW1lbnQoMikuaXNGdW5jdGlvbigp
KSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCAiQXJndW1lbnQgMyAoJ2Vycm9y
Q2FsbGJhY2snKSB0byBOYXZpZ2F0b3Iud2Via2l0R2V0VXNlck1lZGlhIG11c3QgYmUgYSBmdW5j
dGlvbiIpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBpZiAo
IWltcGwoKS5mcmFtZSgpKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBOT1RfU1VQ
UE9SVEVEX0VSUik7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIE5PVF9TVVBQT1JU
RURfRVJSKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgLy8g
V2UgZG8gbm90IG5lZWQgdG8gcHJvdGVjdCB0aGUgY29udGV4dCAoaS5lLiBkb2N1bWVudCkgaGVy
ZSBhcyBVc2VyTWVkaWFSZXF1ZXN0IGlzIG9ic2VydmluZyBjb250ZXh0IGRlc3RydWN0aW9uIGFu
ZCB3aWxsIGNoZWNrIHZhbGlkaXR5IGJlZm9yZSByZXNvbHZpbmcvcmVqZWN0aW5nIHByb21pc2Uu
CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gaW1wbCgpLmZyYW1lKCktPmRvY3VtZW50KCk7CiAK
LSAgICBSZWZQdHI8TmF2aWdhdG9yVXNlck1lZGlhU3VjY2Vzc0NhbGxiYWNrPiBzdWNjZXNzQ2Fs
bGJhY2sgPSBKU05hdmlnYXRvclVzZXJNZWRpYVN1Y2Nlc3NDYWxsYmFjazo6Y3JlYXRlKGFzT2Jq
ZWN0KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKSwgZ2xvYmFsT2JqZWN0KCkpOworICAgIFJl
ZlB0cjxOYXZpZ2F0b3JVc2VyTWVkaWFTdWNjZXNzQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayA9
IEpTTmF2aWdhdG9yVXNlck1lZGlhU3VjY2Vzc0NhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3Qoc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMSkpLCBnbG9iYWxPYmplY3QoKSk7CiAgICAgYXV0byByZXNv
bHZlQ2FsbGJhY2sgPSBbc3VjY2Vzc0NhbGxiYWNrLCBkb2N1bWVudF0oY29uc3QgUmVmUHRyPE1l
ZGlhU3RyZWFtPiYgc3RyZWFtKSBtdXRhYmxlIHsKICAgICAgICAgUmVmUHRyPE1lZGlhU3RyZWFt
PiBwcm90ZWN0ZWRTdHJlYW0gPSBzdHJlYW07CiAgICAgICAgIGRvY3VtZW50LT5wb3N0VGFzayhb
c3VjY2Vzc0NhbGxiYWNrLCBwcm90ZWN0ZWRTdHJlYW1dKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
KSB7CkBAIC04NCw3ICs4NCw3IEBAIEpTVmFsdWUgSlNOYXZpZ2F0b3I6OndlYmtpdEdldFVzZXJN
ZWRpYShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIH0pOwogICAgIH07CiAKLSAgICBSZWZQdHI8
TmF2aWdhdG9yVXNlck1lZGlhRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayA9IEpTTmF2aWdh
dG9yVXNlck1lZGlhRXJyb3JDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDIpKSwgZ2xvYmFsT2JqZWN0KCkpOworICAgIFJlZlB0cjxOYXZpZ2F0b3JVc2Vy
TWVkaWFFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrID0gSlNOYXZpZ2F0b3JVc2VyTWVkaWFF
cnJvckNhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3Qoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMikp
LCBnbG9iYWxPYmplY3QoKSk7CiAgICAgYXV0byByZWplY3RDYWxsYmFjayA9IFtlcnJvckNhbGxi
YWNrLCBkb2N1bWVudF0oY29uc3QgUmVmUHRyPE5hdmlnYXRvclVzZXJNZWRpYUVycm9yPiYgZXJy
b3IpIG11dGFibGUgewogICAgICAgICBSZWZQdHI8TmF2aWdhdG9yVXNlck1lZGlhRXJyb3I+IHBy
b3RlY3RlZEVycm9yID0gZXJyb3I7CiAgICAgICAgIGRvY3VtZW50LT5wb3N0VGFzayhbZXJyb3JD
YWxsYmFjaywgcHJvdGVjdGVkRXJyb3JdKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7CkBAIC05
NCw3ICs5NCw3IEBAIEpTVmFsdWUgSlNOYXZpZ2F0b3I6OndlYmtpdEdldFVzZXJNZWRpYShFeGVj
U3RhdGUqIGV4ZWMpCiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBVc2VyTWVkaWFS
ZXF1ZXN0OjpzdGFydChkb2N1bWVudCwgb3B0aW9ucywgTWVkaWFEZXZpY2VzOjpQcm9taXNlKFdU
Rjo6bW92ZShyZXNvbHZlQ2FsbGJhY2spLCBXVEY6Om1vdmUocmVqZWN0Q2FsbGJhY2spKSwgZWMp
OwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZz
dGF0ZSwgZWMpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAppbmRleCBhZWFjMDg3ZDlkY2ZhNTExMDc5
M2QyZmYyYzlhZmMyM2UxMmI4MTUyLi5kZWVlNjc1YTkyNTEyMTA1NGYxNzIzMjdlNTM2YWE0ZGY4
ZTVmNzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0
b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAK
QEAgLTExMyw0MyArMTEzLDQzIEBAIGJvb2wgSlNOb2RlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SlNDZWxsJiBjZWxsLCB2b2lkKiwgU2xvdFZpc2l0CiAgICAgcmV0dXJu
IGlzUmVhY2hhYmxlRnJvbURPTShqc05vZGUuaW1wbCgpLCB2aXNpdG9yKTsKIH0KIAotSlNWYWx1
ZSBKU05vZGU6Omluc2VydEJlZm9yZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTTm9kZTo6
aW5zZXJ0QmVmb3JlKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgYm9vbCBvayA9IGltcGwoKS5pbnNlcnRCZWZvcmUoSlNOb2RlOjp0b1dyYXBwZWQo
ZXhlYy0+YXJndW1lbnQoMCkpLCBKU05vZGU6OnRvV3JhcHBlZChleGVjLT5hcmd1bWVudCgxKSks
IGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIGJvb2wgb2sgPSBpbXBs
KCkuaW5zZXJ0QmVmb3JlKEpTTm9kZTo6dG9XcmFwcGVkKHN0YXRlLmFyZ3VtZW50KDApKSwgSlNO
b2RlOjp0b1dyYXBwZWQoc3RhdGUuYXJndW1lbnQoMSkpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0
aW9uKCZzdGF0ZSwgZWMpOwogICAgIGlmIChvaykKLSAgICAgICAgcmV0dXJuIGV4ZWMtPmFyZ3Vt
ZW50KDApOworICAgICAgICByZXR1cm4gc3RhdGUuYXJndW1lbnQoMCk7CiAgICAgcmV0dXJuIGpz
TnVsbCgpOwogfQogCi1KU1ZhbHVlIEpTTm9kZTo6cmVwbGFjZUNoaWxkKEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUgSlNOb2RlOjpyZXBsYWNlQ2hpbGQoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBib29sIG9rID0gaW1wbCgpLnJlcGxhY2VDaGls
ZChKU05vZGU6OnRvV3JhcHBlZChleGVjLT5hcmd1bWVudCgwKSksIEpTTm9kZTo6dG9XcmFwcGVk
KGV4ZWMtPmFyZ3VtZW50KDEpKSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
CisgICAgYm9vbCBvayA9IGltcGwoKS5yZXBsYWNlQ2hpbGQoSlNOb2RlOjp0b1dyYXBwZWQoc3Rh
dGUuYXJndW1lbnQoMCkpLCBKU05vZGU6OnRvV3JhcHBlZChzdGF0ZS5hcmd1bWVudCgxKSksIGVj
KTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgaWYgKG9rKQotICAgICAg
ICByZXR1cm4gZXhlYy0+YXJndW1lbnQoMSk7CisgICAgICAgIHJldHVybiBzdGF0ZS5hcmd1bWVu
dCgxKTsKICAgICByZXR1cm4ganNOdWxsKCk7CiB9CiAKLUpTVmFsdWUgSlNOb2RlOjpyZW1vdmVD
aGlsZChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTTm9kZTo6cmVtb3ZlQ2hpbGQoRXhlY1N0
YXRlJiBzdGF0ZSkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBib29sIG9rID0g
aW1wbCgpLnJlbW92ZUNoaWxkKEpTTm9kZTo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDApKSwg
ZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgYm9vbCBvayA9IGltcGwo
KS5yZW1vdmVDaGlsZChKU05vZGU6OnRvV3JhcHBlZChzdGF0ZS5hcmd1bWVudCgwKSksIGVjKTsK
KyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgaWYgKG9rKQotICAgICAgICBy
ZXR1cm4gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgICAgIHJldHVybiBzdGF0ZS5hcmd1bWVudCgw
KTsKICAgICByZXR1cm4ganNOdWxsKCk7CiB9CiAKLUpTVmFsdWUgSlNOb2RlOjphcHBlbmRDaGls
ZChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTTm9kZTo6YXBwZW5kQ2hpbGQoRXhlY1N0YXRl
JiBzdGF0ZSkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBib29sIG9rID0gaW1w
bCgpLmFwcGVuZENoaWxkKEpTTm9kZTo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDApKSwgZWMp
OwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgYm9vbCBvayA9IGltcGwoKS5h
cHBlbmRDaGlsZChKU05vZGU6OnRvV3JhcHBlZChzdGF0ZS5hcmd1bWVudCgwKSksIGVjKTsKKyAg
ICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgaWYgKG9rKQotICAgICAgICByZXR1
cm4gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgICAgIHJldHVybiBzdGF0ZS5hcmd1bWVudCgwKTsK
ICAgICByZXR1cm4ganNOdWxsKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTT3NjaWxsYXRvck5vZGVDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNPc2NpbGxhdG9yTm9kZUN1c3RvbS5jcHAKaW5kZXggMDJjMmFiZTI1ZTU3ODE1
ODUxMTNjNjY1ZTllZjg3Njc4ZjVjZDYxMi4uOThjODgxNDlmMzllMmIwY2JhODFkMzUyZTViOWJk
YjI5MDVjYjI5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNPc2Np
bGxhdG9yTm9kZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNP
c2NpbGxhdG9yTm9kZUN1c3RvbS5jcHAKQEAgLTM3LDI4ICszNywyOCBAQCB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNPc2NpbGxhdG9yTm9kZTo6
c2V0VHlwZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit2b2lkIEpTT3NjaWxsYXRv
ck5vZGU6OnNldFR5cGUoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBP
c2NpbGxhdG9yTm9kZSYgaW1wID0gaW1wbCgpOwogCiAjaWYgRU5BQkxFKExFR0FDWV9XRUJfQVVE
SU8pCiAgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpIHsKLSAgICAgICAgdWludDMyX3QgdHlwZSA9
IHZhbHVlLnRvVUludDMyKGV4ZWMpOworICAgICAgICB1aW50MzJfdCB0eXBlID0gdmFsdWUudG9V
SW50MzIoJnN0YXRlKTsKICAgICAgICAgaWYgKCFpbXAuc2V0VHlwZSh0eXBlKSkKLSAgICAgICAg
ICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMs
ICJJbGxlZ2FsIE9zY2lsbGF0b3JOb2RlIHR5cGUiKSk7CisgICAgICAgICAgICBzdGF0ZS52bSgp
LnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlVHlwZUVycm9yKCZzdGF0ZSwgIklsbGVnYWwg
T3NjaWxsYXRvck5vZGUgdHlwZSIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgog
CiAgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgU3RyaW5nIHR5cGUgPSB2YWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAgIFN0cmluZyB0eXBlID0gdmFs
dWUudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKICAgICAgICAgaWYgKHR5cGUgPT0g
InNpbmUiIHx8IHR5cGUgPT0gInNxdWFyZSIgfHwgdHlwZSA9PSAic2F3dG9vdGgiIHx8IHR5cGUg
PT0gInRyaWFuZ2xlIikgewogICAgICAgICAgICAgaW1wLnNldFR5cGUodHlwZSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgZXhlYy0+dm0oKS50aHJv
d0V4Y2VwdGlvbihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIklsbGVnYWwgT3NjaWxsYXRv
ck5vZGUgdHlwZSIpKTsKKyAgICBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3Jl
YXRlVHlwZUVycm9yKCZzdGF0ZSwgIklsbGVnYWwgT3NjaWxsYXRvck5vZGUgdHlwZSIpKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNQYW5uZXJOb2RlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTUGFubmVyTm9kZUN1c3RvbS5jcHAKaW5kZXggMDVhYWI2OThjZDU5NGYzY2EyYTNiODgy
ZWM1ZTM3MzdkMWRmMTFiNS4uODZjMDNlZDNmYjg5MjU5YWNmOThjZTMzMmE2OTI0Mjg3ZWUzYjAx
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYW5uZXJOb2RlQ3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Bhbm5lck5vZGVDdXN0
b20uY3BwCkBAIC0zNyw1MiArMzcsNTIgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi12b2lkIEpTUGFubmVyTm9kZTo6c2V0UGFubmluZ01vZGVsKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNQYW5uZXJOb2RlOjpzZXRQYW5uaW5n
TW9kZWwoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBQYW5uZXJOb2Rl
JiBpbXAgPSBpbXBsKCk7CiAKICNpZiBFTkFCTEUoTEVHQUNZX1dFQl9BVURJTykKICAgICBpZiAo
dmFsdWUuaXNOdW1iZXIoKSkgewotICAgICAgICB1aW50MzJfdCBtb2RlbCA9IHZhbHVlLnRvVUlu
dDMyKGV4ZWMpOworICAgICAgICB1aW50MzJfdCBtb2RlbCA9IHZhbHVlLnRvVUludDMyKCZzdGF0
ZSk7CiAgICAgICAgIGlmICghaW1wLnNldFBhbm5pbmdNb2RlbChtb2RlbCkpCi0gICAgICAgICAg
ICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAi
SWxsZWdhbCBwYW5uaW5nTW9kZWwiKSk7CisgICAgICAgICAgICBzdGF0ZS52bSgpLnRocm93RXhj
ZXB0aW9uKCZzdGF0ZSwgY3JlYXRlVHlwZUVycm9yKCZzdGF0ZSwgIklsbGVnYWwgcGFubmluZ01v
ZGVsIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCiAKICAgICBpZiAodmFsdWUu
aXNTdHJpbmcoKSkgewotICAgICAgICBTdHJpbmcgbW9kZWwgPSB2YWx1ZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7CisgICAgICAgIFN0cmluZyBtb2RlbCA9IHZhbHVlLnRvU3RyaW5nKCZz
dGF0ZSktPnZhbHVlKCZzdGF0ZSk7CiAgICAgICAgIGlmIChtb2RlbCA9PSAiZXF1YWxwb3dlciIg
fHwgbW9kZWwgPT0gIkhSVEYiIHx8IG1vZGVsID09ICJzb3VuZGZpZWxkIikgewogICAgICAgICAg
ICAgaW1wLnNldFBhbm5pbmdNb2RlbChtb2RlbCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICB9CiAgICAgCi0gICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBj
cmVhdGVUeXBlRXJyb3IoZXhlYywgIklsbGVnYWwgcGFubmluZ01vZGVsIikpOworICAgIHN0YXRl
LnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVUeXBlRXJyb3IoJnN0YXRlLCAiSWxs
ZWdhbCBwYW5uaW5nTW9kZWwiKSk7CiB9CiAKLXZvaWQgSlNQYW5uZXJOb2RlOjpzZXREaXN0YW5j
ZU1vZGVsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNQYW5uZXJOb2Rl
OjpzZXREaXN0YW5jZU1vZGVsKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAg
ICAgUGFubmVyTm9kZSYgaW1wID0gaW1wbCgpOwogCiAjaWYgRU5BQkxFKExFR0FDWV9XRUJfQVVE
SU8pCiAgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpIHsKLSAgICAgICAgdWludDMyX3QgbW9kZWwg
PSB2YWx1ZS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgdWludDMyX3QgbW9kZWwgPSB2YWx1ZS50
b1VJbnQzMigmc3RhdGUpOwogICAgICAgICBpZiAoIWltcC5zZXREaXN0YW5jZU1vZGVsKG1vZGVs
KSkKLSAgICAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlVHlw
ZUVycm9yKGV4ZWMsICJJbGxlZ2FsIGRpc3RhbmNlTW9kZWwiKSk7CisgICAgICAgICAgICBzdGF0
ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlVHlwZUVycm9yKCZzdGF0ZSwgIkls
bGVnYWwgZGlzdGFuY2VNb2RlbCIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgog
CiAgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgU3RyaW5nIG1vZGVsID0gdmFs
dWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgICAgICBTdHJpbmcgbW9kZWwgPSB2
YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwogICAgICAgICBpZiAobW9kZWwg
PT0gImxpbmVhciIgfHwgbW9kZWwgPT0gImludmVyc2UiIHx8IG1vZGVsID09ICJleHBvbmVudGlh
bCIpIHsKICAgICAgICAgICAgIGltcC5zZXREaXN0YW5jZU1vZGVsKG1vZGVsKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBleGVjLT52bSgpLnRocm93
RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiSWxsZWdhbCBkaXN0YW5jZU1v
ZGVsIikpOworICAgIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVUeXBl
RXJyb3IoJnN0YXRlLCAiSWxsZWdhbCBkaXN0YW5jZU1vZGVsIikpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Bv
cFN0YXRlRXZlbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BT
dGF0ZUV2ZW50Q3VzdG9tLmNwcAppbmRleCA1MDJlNDhiZmFhOGYzYWU5MDMxYjhmYTA0YWY4YTAw
MmMzYTUzYmE1Li41NWZlOTRiZDlkZmVmZTZkMjBlNDE3YzMyNzJmZWY1MDllYjY0M2Y0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BvcFN0YXRlRXZlbnRDdXN0b20u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3Rv
bS5jcHAKQEAgLTQwLDE4ICs0MCwxOCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAvLyBTYXZlIHRoZSBzdGF0ZSB2YWx1ZSB0byB0aGUgbV9zdGF0ZSBtZW1i
ZXIgb2YgYSBKU1BvcFN0YXRlRXZlbnQsIGFuZCByZXR1cm4gaXQsIGZvciBjb252ZW5pZW5jZS4K
LXN0YXRpYyBjb25zdCBKU1ZhbHVlJiBjYWNoZVN0YXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNQb3BT
dGF0ZUV2ZW50KiBldmVudCwgY29uc3QgSlNWYWx1ZSYgc3RhdGUpCitzdGF0aWMgY29uc3QgSlNW
YWx1ZSYgY2FjaGVTdGF0ZShFeGVjU3RhdGUmIHN0YXRlLCBKU1BvcFN0YXRlRXZlbnQqIGV2ZW50
LCBjb25zdCBKU1ZhbHVlJiBldmVudFN0YXRlKQogewotICAgIGV2ZW50LT5tX3N0YXRlLnNldChl
eGVjLT52bSgpLCBldmVudCwgc3RhdGUpOwotICAgIHJldHVybiBzdGF0ZTsKKyAgICBldmVudC0+
bV9zdGF0ZS5zZXQoc3RhdGUudm0oKSwgZXZlbnQsIGV2ZW50U3RhdGUpOworICAgIHJldHVybiBl
dmVudFN0YXRlOwogfQogCi1KU1ZhbHVlIEpTUG9wU3RhdGVFdmVudDo6c3RhdGUoRXhlY1N0YXRl
KiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU1BvcFN0YXRlRXZlbnQ6OnN0YXRlKEV4ZWNTdGF0ZSYg
c3RhdGUpIGNvbnN0CiB7CiAgICAgSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IG1fc3RhdGUuZ2V0KCk7
CiAgICAgaWYgKCFjYWNoZWRWYWx1ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gV2UgY2Fubm90
IHVzZSBhIGNhY2hlZCBvYmplY3QgaWYgd2UgYXJlIGluIGEgZGlmZmVyZW50IHdvcmxkIHRoYW4g
dGhlIG9uZSBpdCB3YXMgY3JlYXRlZCBpbi4KLSAgICAgICAgaWYgKCFjYWNoZWRWYWx1ZS5pc09i
amVjdCgpIHx8ICZ3b3JsZEZvckRPTU9iamVjdChjYWNoZWRWYWx1ZS5nZXRPYmplY3QoKSkgPT0g
JmN1cnJlbnRXb3JsZChleGVjKSkKKyAgICAgICAgaWYgKCFjYWNoZWRWYWx1ZS5pc09iamVjdCgp
IHx8ICZ3b3JsZEZvckRPTU9iamVjdChjYWNoZWRWYWx1ZS5nZXRPYmplY3QoKSkgPT0gJmN1cnJl
bnRXb3JsZCgmc3RhdGUpKQogICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFZhbHVlOwogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC02MSwyMCArNjEsMjAgQEAgSlNWYWx1
ZSBKU1BvcFN0YXRlRXZlbnQ6OnN0YXRlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICBpZiAo
IWV2ZW50LnN0YXRlKCkuaGFzTm9WYWx1ZSgpKSB7CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gbWFr
ZSBzdXJlIGEgUG9wU3RhdGVFdmVudCBkb2VzIG5vdCBsZWFrIG9iamVjdHMgaW4gaXRzIHN0YXRl
IHByb3BlcnR5IGFjcm9zcyBpc29sYXRlZCBET00gd29ybGRzLgogICAgICAgICAvLyBJZGVhbGx5
LCB3ZSB3b3VsZCBjaGVjayB0aGF0IHRoZSB3b3JsZHMgaGF2ZSBkaWZmZXJlbnQgcHJpdmlsZWdl
cyBidXQgdGhhdCdzIG5vdCBwb3NzaWJsZSB5ZXQuCi0gICAgICAgIEpTVmFsdWUgc3RhdGUgPSBl
dmVudC5zdGF0ZSgpLmpzVmFsdWUoKTsKLSAgICAgICAgaWYgKHN0YXRlLmlzT2JqZWN0KCkgJiYg
JndvcmxkRm9yRE9NT2JqZWN0KHN0YXRlLmdldE9iamVjdCgpKSAhPSAmY3VycmVudFdvcmxkKGV4
ZWMpKSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2Vy
aWFsaXplZFZhbHVlID0gZXZlbnQudHJ5U2VyaWFsaXplU3RhdGUoZXhlYykpCi0gICAgICAgICAg
ICAgICAgc3RhdGUgPSBzZXJpYWxpemVkVmFsdWUtPmRlc2VyaWFsaXplKGV4ZWMsIGdsb2JhbE9i
amVjdCgpLCBudWxscHRyKTsKKyAgICAgICAgSlNWYWx1ZSBldmVudFN0YXRlID0gZXZlbnQuc3Rh
dGUoKS5qc1ZhbHVlKCk7CisgICAgICAgIGlmIChldmVudFN0YXRlLmlzT2JqZWN0KCkgJiYgJndv
cmxkRm9yRE9NT2JqZWN0KGV2ZW50U3RhdGUuZ2V0T2JqZWN0KCkpICE9ICZjdXJyZW50V29ybGQo
JnN0YXRlKSkgeworICAgICAgICAgICAgaWYgKFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHNlcmlhbGl6ZWRWYWx1ZSA9IGV2ZW50LnRyeVNlcmlhbGl6ZVN0YXRlKCZzdGF0ZSkpCisgICAg
ICAgICAgICAgICAgZXZlbnRTdGF0ZSA9IHNlcmlhbGl6ZWRWYWx1ZS0+ZGVzZXJpYWxpemUoJnN0
YXRlLCBnbG9iYWxPYmplY3QoKSwgbnVsbHB0cik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgc3RhdGUgPSBqc051bGwoKTsKKyAgICAgICAgICAgICAgICBldmVudFN0YXRlID0g
anNOdWxsKCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHJldHVybiBjYWNoZVN0YXRl
KGV4ZWMsIGNvbnN0X2Nhc3Q8SlNQb3BTdGF0ZUV2ZW50Kj4odGhpcyksIHN0YXRlKTsKKyAgICAg
ICAgcmV0dXJuIGNhY2hlU3RhdGUoc3RhdGUsIGNvbnN0X2Nhc3Q8SlNQb3BTdGF0ZUV2ZW50Kj4o
dGhpcyksIGV2ZW50U3RhdGUpOwogICAgIH0KICAgICAKICAgICBIaXN0b3J5KiBoaXN0b3J5ID0g
ZXZlbnQuaGlzdG9yeSgpOwogICAgIGlmICghaGlzdG9yeSB8fCAhZXZlbnQuc2VyaWFsaXplZFN0
YXRlKCkpCi0gICAgICAgIHJldHVybiBjYWNoZVN0YXRlKGV4ZWMsIGNvbnN0X2Nhc3Q8SlNQb3BT
dGF0ZUV2ZW50Kj4odGhpcyksIGpzTnVsbCgpKTsKKyAgICAgICAgcmV0dXJuIGNhY2hlU3RhdGUo
c3RhdGUsIGNvbnN0X2Nhc3Q8SlNQb3BTdGF0ZUV2ZW50Kj4odGhpcyksIGpzTnVsbCgpKTsKIAog
ICAgIC8vIFRoZXJlJ3Mgbm8gY2FjaGVkIHZhbHVlIGZyb20gYSBwcmV2aW91cyBpbnZvY2F0aW9u
LCBub3IgYSBzdGF0ZSB2YWx1ZSB3YXMgcHJvdmlkZWQgYnkgdGhlCiAgICAgLy8gZXZlbnQsIGJ1
dCB0aGVyZSBpcyBhIGhpc3Rvcnkgb2JqZWN0LCBzbyBmaXJzdCB3ZSBuZWVkIHRvIHNlZSBpZiB0
aGUgc3RhdGUgb2JqZWN0IGhhcyBiZWVuCkBAIC04NiwxMiArODYsMTIgQEAgSlNWYWx1ZSBKU1Bv
cFN0YXRlRXZlbnQ6OnN0YXRlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICBKU1ZhbHVlIHJl
c3VsdDsKIAogICAgIGlmIChpc1NhbWVTdGF0ZSkgewotICAgICAgICBKU0hpc3RvcnkqIGpzSGlz
dG9yeSA9IGpzQ2FzdDxKU0hpc3RvcnkqPih0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBoaXN0
b3J5KS5hc0NlbGwoKSk7Ci0gICAgICAgIHJlc3VsdCA9IGpzSGlzdG9yeS0+c3RhdGUoZXhlYyk7
CisgICAgICAgIEpTSGlzdG9yeSoganNIaXN0b3J5ID0ganNDYXN0PEpTSGlzdG9yeSo+KHRvSlMo
JnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgaGlzdG9yeSkuYXNDZWxsKCkpOworICAgICAgICByZXN1
bHQgPSBqc0hpc3RvcnktPnN0YXRlKHN0YXRlKTsKICAgICB9IGVsc2UKLSAgICAgICAgcmVzdWx0
ID0gZXZlbnQuc2VyaWFsaXplZFN0YXRlKCktPmRlc2VyaWFsaXplKGV4ZWMsIGdsb2JhbE9iamVj
dCgpLCAwKTsKKyAgICAgICAgcmVzdWx0ID0gZXZlbnQuc2VyaWFsaXplZFN0YXRlKCktPmRlc2Vy
aWFsaXplKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIDApOwogCi0gICAgcmV0dXJuIGNhY2hlU3Rh
dGUoZXhlYywgY29uc3RfY2FzdDxKU1BvcFN0YXRlRXZlbnQqPih0aGlzKSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4gY2FjaGVTdGF0ZShzdGF0ZSwgY29uc3RfY2FzdDxKU1BvcFN0YXRlRXZlbnQqPih0
aGlzKSwgcmVzdWx0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbUN1c3RvbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtQ3VzdG9tLmNwcAppbmRl
eCAzNDhkMTZiMmZlYmU3OTg3ZDJkZDY2ZjVjYzg2NjVmNWE3YzBlZTRhLi45Y2YwOTZiYWJhNjIw
ODA1YzE1NTFkYzliNWViY2JhOWRjYTRlMzIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtQ3VzdG9tLmNwcApAQCAtNDcsMTYgKzQ3LDE2
IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1
ZSBKU1JlYWRhYmxlU3RyZWFtOjpwaXBlVG8oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1Jl
YWRhYmxlU3RyZWFtOjpwaXBlVG8oRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIGVy
cm9yID0gY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJwaXBlVG8gaXMgbm90IGltcGxl
bWVudGVkIikpOwotICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGVy
cm9yKTsKKyAgICBKU1ZhbHVlIGVycm9yID0gY3JlYXRlRXJyb3IoJnN0YXRlLCBBU0NJSUxpdGVy
YWwoInBpcGVUbyBpcyBub3QgaW1wbGVtZW50ZWQiKSk7CisgICAgcmV0dXJuIHN0YXRlLnZtKCku
dGhyb3dFeGNlcHRpb24oJnN0YXRlLCBlcnJvcik7CiB9CiAKLUpTVmFsdWUgSlNSZWFkYWJsZVN0
cmVhbTo6cGlwZVRocm91Z2goRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1JlYWRhYmxlU3Ry
ZWFtOjpwaXBlVGhyb3VnaChFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIEpTVmFsdWUgZXJyb3Ig
PSBjcmVhdGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoInBpcGVUaHJvdWdoIGlzIG5vdCBpbXBs
ZW1lbnRlZCIpKTsKLSAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBl
cnJvcik7CisgICAgSlNWYWx1ZSBlcnJvciA9IGNyZWF0ZUVycm9yKCZzdGF0ZSwgQVNDSUlMaXRl
cmFsKCJwaXBlVGhyb3VnaCBpcyBub3QgaW1wbGVtZW50ZWQiKSk7CisgICAgcmV0dXJuIHN0YXRl
LnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBlcnJvcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFi
bGVTdHJlYW1SZWFkZXJDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNS
ZWFkYWJsZVN0cmVhbVJlYWRlckN1c3RvbS5jcHAKaW5kZXggMDYzYWNjYjA3NmM4NjZkN2E4ZmRm
NmUwNGQ0MGZlZDFlNDQxZDAxOS4uNzU2NDJmMzViN2RhNmNjM2Q4ZjM1NThiNDJmOTQyM2NiNmY5
YTFhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0
cmVhbVJlYWRlckN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNS
ZWFkYWJsZVN0cmVhbVJlYWRlckN1c3RvbS5jcHAKQEAgLTQ0LDEyICs0NCwxMiBAQCB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNSZWFkYWJs
ZVN0cmVhbVJlYWRlcjo6Y2xvc2VkKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgSlNS
ZWFkYWJsZVN0cmVhbVJlYWRlcjo6Y2xvc2VkKEV4ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX2Nsb3NlZCkgewotICAgICAgICBKU1Byb21pc2VEZWZlcnJlZCogY2xvc2VkUHJv
bWlzZSA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KCkpOwot
ICAgICAgICBjb25zdF9jYXN0PEpTUmVhZGFibGVTdHJlYW1SZWFkZXIqPih0aGlzKS0+bV9jbG9z
ZWQuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIGNsb3NlZFByb21pc2UtPnByb21pc2UoKSk7Ci0gICAg
ICAgIGltcGwoKS5jbG9zZWQoRGVmZXJyZWRXcmFwcGVyKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBj
bG9zZWRQcm9taXNlKSk7CisgICAgICAgIEpTUHJvbWlzZURlZmVycmVkKiBjbG9zZWRQcm9taXNl
ID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKKyAg
ICAgICAgY29uc3RfY2FzdDxKU1JlYWRhYmxlU3RyZWFtUmVhZGVyKj4odGhpcyktPm1fY2xvc2Vk
LnNldChzdGF0ZS52bSgpLCB0aGlzLCBjbG9zZWRQcm9taXNlLT5wcm9taXNlKCkpOworICAgICAg
ICBpbXBsKCkuY2xvc2VkKERlZmVycmVkV3JhcHBlcigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBj
bG9zZWRQcm9taXNlKSk7CiAgICAgfQogICAgIHJldHVybiBtX2Nsb3NlZC5nZXQoKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMUmVzdWx0U2V0Um93TGlz
dEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFJlc3VsdFNldFJv
d0xpc3RDdXN0b20uY3BwCmluZGV4IDhjOWViOGY5YzE5ZjkwYTAwYTM2ZGY1MzVmOTkzYmFjN2Ex
M2ViZWIuLjQ5YTBlZmRjNDU4NWNkMjVkMWQyZTQ1YWMxMzg3MzQzM2Y5NTJhNDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3Rv
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxSZXN1bHRTZXRSb3dM
aXN0Q3VzdG9tLmNwcApAQCAtMzksMjAgKzM5LDIwIEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSBKU1NRTFJlc3VsdFNldFJvd0xpc3Q6Oml0
ZW0oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1NRTFJlc3VsdFNldFJvd0xpc3Q6Oml0ZW0o
RXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBib29sIGluZGV4T2s7Ci0gICAgaW50IGluZGV4ID0g
ZmluaXRlSW50MzJWYWx1ZShleGVjLT5hcmd1bWVudCgwKSwgZXhlYywgaW5kZXhPayk7CisgICAg
aW50IGluZGV4ID0gZmluaXRlSW50MzJWYWx1ZShzdGF0ZS5hcmd1bWVudCgwKSwgJnN0YXRlLCBp
bmRleE9rKTsKICAgICBpZiAoIWluZGV4T2spIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwg
VFlQRV9NSVNNQVRDSF9FUlIpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9
CiAgICAgaWYgKGluZGV4IDwgMCB8fCAodW5zaWduZWQpaW5kZXggPj0gbV9pbXBsLT5sZW5ndGgo
KSkgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgSU5ERVhfU0laRV9FUlIpOworICAg
ICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBJTkRFWF9TSVpFX0VSUik7CiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBjb25z
dHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0gY29uc3RydWN0
RW1wdHlPYmplY3QoJnN0YXRlKTsKIAogICAgIHVuc2lnbmVkIG51bUNvbHVtbnMgPSBtX2ltcGwt
PmNvbHVtbk5hbWVzKCkuc2l6ZSgpOwogICAgIHVuc2lnbmVkIHZhbHVlc0luZGV4ID0gaW5kZXgg
KiBudW1Db2x1bW5zOwpAQCAtNjEsMjAgKzYxLDIwIEBAIEpTVmFsdWUgSlNTUUxSZXN1bHRTZXRS
b3dMaXN0OjppdGVtKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlOwog
CiAgICAgICAgIHN3aXRjaCAodmFsdWUudHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFNRTFZh
bHVlOjpTdHJpbmdWYWx1ZToKLSAgICAgICAgICAgICAganNWYWx1ZSA9IGpzU3RyaW5nV2l0aENh
Y2hlKGV4ZWMsIHZhbHVlLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSBTUUxWYWx1ZTo6TnVsbFZhbHVlOgotICAgICAgICAgICAgICBqc1ZhbHVlID0ganNO
dWxsKCk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgU1FMVmFsdWU6Ok51
bWJlclZhbHVlOgotICAgICAgICAgICAgICBqc1ZhbHVlID0ganNOdW1iZXIodmFsdWUubnVtYmVy
KCkpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBTUUxWYWx1ZTo6U3RyaW5n
VmFsdWU6CisgICAgICAgICAgICBqc1ZhbHVlID0ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2
YWx1ZS5zdHJpbmcoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTUUxWYWx1
ZTo6TnVsbFZhbHVlOgorICAgICAgICAgICAganNWYWx1ZSA9IGpzTnVsbCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1FMVmFsdWU6Ok51bWJlclZhbHVlOgorICAgICAgICAg
ICAganNWYWx1ZSA9IGpzTnVtYmVyKHZhbHVlLm51bWJlcigpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIH0KIAotICAgICAgICBvYmplY3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKGV4ZWMsIG1faW1wbC0+Y29sdW1uTmFtZXMoKVtpXSksIGpzVmFsdWUs
IERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KHN0YXRl
LnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCBtX2ltcGwtPmNvbHVtbk5hbWVz
KClbaV0pLCBqc1ZhbHVlLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIH0KIAogICAgIHJl
dHVybiBvYmplY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NR
TFRyYW5zYWN0aW9uQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FM
VHJhbnNhY3Rpb25DdXN0b20uY3BwCmluZGV4IDI1MjcwODBhMzRkOTJlYjVlMzUwMmI4NDRhM2Zj
ZWQ2MTgzZDFkNDUuLjNjNzM0YTUwOWRmYmY4MTFmZjI1NTVmYmQ4ZDI4MGFhMDk3OGY0NGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25DdXN0
b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25D
dXN0b20uY3BwCkBAIC00MSwzNiArNDEsMzYgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwo
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1NRTFRyYW5zYWN0aW9uOjpleGVjdXRlU3FsKEV4
ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpIHsKLSAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFNZTlRBWF9FUlIpOworICAgIGlmICghc3RhdGUu
YXJndW1lbnRDb3VudCgpKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIFNZTlRB
WF9FUlIpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBTdHJp
bmcgc3FsU3RhdGVtZW50ID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBTdHJpbmcgc3FsU3Rh
dGVtZW50ID0gc3RhdGUuYXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRl
KTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogCiAgICAgLy8gTm93IGFzc2VtYmxlIHRoZSBsaXN0IG9mIFNRTCBhcmd1bWVudHMK
ICAgICBWZWN0b3I8U1FMVmFsdWU+IHNxbFZhbHVlczsKLSAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50
KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4
ZWMtPmFyZ3VtZW50KDEpLmdldE9iamVjdCgpOworICAgIGlmICghc3RhdGUuYXJndW1lbnQoMSku
aXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gc3RhdGUu
YXJndW1lbnQoMSkuZ2V0T2JqZWN0KCk7CiAgICAgICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAg
ICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOworICAgICAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgVFlQRV9NSVNNQVRDSF9FUlIpOwogICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KIAotICAgICAgICBKU1ZhbHVlIGxl
bmd0aFZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0
aCk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgSlNWYWx1ZSBs
ZW5ndGhWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgc3RhdGUucHJvcGVydHlOYW1lcygpLmxl
bmd0aCk7CisgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBsZW5ndGhWYWx1
ZS50b1VJbnQzMihleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBsZW5ndGhWYWx1ZS50b1VJbnQzMigmc3RhdGUpOworICAg
ICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwIDsgaSA8IGxlbmd0aDsgKytp
KSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgaSk7Ci0g
ICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBpKTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAog
ICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCkBAIC03OSwxOCArNzks
MTggQEAgSlNWYWx1ZSBKU1NRTFRyYW5zYWN0aW9uOjpleGVjdXRlU3FsKEV4ZWNTdGF0ZSogZXhl
YykKICAgICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKHZhbHVlLmFzTnVtYmVyKCkpOwog
ICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgYXJndW1l
bnQgdG8gYSBzdHJpbmcgYW5kIGFwcGVuZCBpdAotICAgICAgICAgICAgICAgIHNxbFZhbHVlcy5h
cHBlbmQodmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICAgICAgICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgc3FsVmFsdWVzLmFw
cGVuZCh2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCiAgICAg
UmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjazsKLSAgICBpZiAoIWV4ZWMtPmFy
Z3VtZW50KDIpLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgSlNPYmplY3QqIG9iamVj
dCA9IGV4ZWMtPmFyZ3VtZW50KDIpLmdldE9iamVjdCgpOworICAgIGlmICghc3RhdGUuYXJndW1l
bnQoMikuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAgICBKU09iamVjdCogb2JqZWN0ID0g
c3RhdGUuYXJndW1lbnQoMikuZ2V0T2JqZWN0KCk7CiAgICAgICAgIGlmICghb2JqZWN0KSB7Ci0g
ICAgICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOworICAg
ICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgVFlQRV9NSVNNQVRDSF9FUlIpOwogICAg
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KIApAQCAtOTgsMTAgKzk4
LDEwIEBAIEpTVmFsdWUgSlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNxbChFeGVjU3RhdGUqIGV4
ZWMpCiAgICAgfQogCiAgICAgUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGVycm9y
Q2FsbGJhY2s7Ci0gICAgaWYgKCFleGVjLT5hcmd1bWVudCgzKS5pc1VuZGVmaW5lZE9yTnVsbCgp
KSB7Ci0gICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgzKS5nZXRPYmpl
Y3QoKTsKKyAgICBpZiAoIXN0YXRlLmFyZ3VtZW50KDMpLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsK
KyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IHN0YXRlLmFyZ3VtZW50KDMpLmdldE9iamVjdCgp
OwogICAgICAgICBpZiAoIW9iamVjdCkgewotICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3Rh
dGUsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgICAgICB9CiAKQEAgLTExMCw3ICsxMTAsNyBAQCBKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rp
b246OmV4ZWN1dGVTcWwoRXhlY1N0YXRlKiBleGVjKQogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CiAgICAgbV9pbXBsLT5leGVjdXRlU1FMKHNxbFN0YXRlbWVudCwgc3FsVmFsdWVzLCBjYWxs
YmFjay5yZWxlYXNlKCksIGVycm9yQ2FsbGJhY2sucmVsZWFzZSgpLCBlYyk7Ci0gICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAK
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAppbmRleCAxNWM1MGU1YmFiYmIzYWVmNGY5MzM5
ZDAwYTkwODE5MDliMTliZjkzLi5iNmYwY2Y4MzYxNWY3MWU2NTU4OGNlM2RlM2ZjYmJhZGQxNWI2
ZWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1
c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdMZW5ndGhDdXN0
b20uY3BwCkBAIC0zMSwyOSArMzEsMjkgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTU1ZHTGVuZ3RoOjp2YWx1ZShFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0CitKU1ZhbHVlIEpTU1ZHTGVuZ3RoOjp2YWx1ZShFeGVjU3RhdGUmIHN0YXRlKSBj
b25zdAogewogICAgIFNWR0xlbmd0aCYgcG9kSW1wID0gaW1wbCgpLnByb3BlcnR5UmVmZXJlbmNl
KCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5n
dGhDb250ZXh0KGltcGwoKS5jb250ZXh0RWxlbWVudCgpKTsKICAgICBmbG9hdCB2YWx1ZSA9IHBv
ZEltcC52YWx1ZShsZW5ndGhDb250ZXh0LCBlYyk7CiAgICAgaWYgKGVjKSB7Ci0gICAgICAgIHNl
dERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUs
IGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgcmV0dXJu
IGpzTnVtYmVyKHZhbHVlKTsKIH0KIAotdm9pZCBKU1NWR0xlbmd0aDo6c2V0VmFsdWUoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU1NWR0xlbmd0aDo6c2V0VmFsdWUoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAoaW1wbCgpLmlzUmVhZE9u
bHkoKSkgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9fTU9ESUZJQ0FUSU9OX0FM
TE9XRURfRVJSKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgTk9fTU9ESUZJQ0FU
SU9OX0FMTE9XRURfRVJSKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICghdmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSAmJiAhdmFsdWUuaXNOdW1iZXIoKSAmJiAhdmFsdWUuaXNC
b29sZWFuKCkpIHsKLSAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKKyAgICAgICAgdGhy
b3dWTVR5cGVFcnJvcigmc3RhdGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC02MSwz
NiArNjEsMzYgQEAgdm9pZCBKU1NWR0xlbmd0aDo6c2V0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHZhbHVlKQogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgU1ZHTGVuZ3Ro
Q29udGV4dCBsZW5ndGhDb250ZXh0KGltcGwoKS5jb250ZXh0RWxlbWVudCgpKTsKLSAgICBwb2RJ
bXAuc2V0VmFsdWUodmFsdWUudG9GbG9hdChleGVjKSwgbGVuZ3RoQ29udGV4dCwgZWMpOworICAg
IHBvZEltcC5zZXRWYWx1ZSh2YWx1ZS50b0Zsb2F0KCZzdGF0ZSksIGxlbmd0aENvbnRleHQsIGVj
KTsKICAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgaW1wbCgpLmNvbW1pdENoYW5nZSgpOwogfQogCi1KU1ZhbHVlIEpTU1ZHTGVuZ3Ro
Ojpjb252ZXJ0VG9TcGVjaWZpZWRVbml0cyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTU1ZH
TGVuZ3RoOjpjb252ZXJ0VG9TcGVjaWZpZWRVbml0cyhFeGVjU3RhdGUmIHN0YXRlKQogewogICAg
IGlmIChpbXBsKCkuaXNSZWFkT25seSgpKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIpOworICAgICAgICBzZXRET01FeGNlcHRpb24o
JnN0YXRlLCBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIpOwogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICB9CiAKICAgICBTVkdMZW5ndGgmIHBvZEltcCA9IGltcGwoKS5wcm9w
ZXJ0eVJlZmVyZW5jZSgpOwogCi0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCi0g
ICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgp
IDwgMSkKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAotICAgIHVuc2lnbmVkIHNo
b3J0IHVuaXRUeXBlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIHVuc2lnbmVkIHNob3J0IHVuaXRU
eXBlID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9VSW50MzIoJnN0YXRlKTsKKyAgICBp
ZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5ndGhD
b250ZXh0KGltcGwoKS5jb250ZXh0RWxlbWVudCgpKTsKICAgICBwb2RJbXAuY29udmVydFRvU3Bl
Y2lmaWVkVW5pdHModW5pdFR5cGUsIGxlbmd0aENvbnRleHQsIGVjKTsKICAgICBpZiAoZWMpIHsK
LSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKCZzdGF0ZSwgZWMpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3VidGxlQ3J5cHRvQ3Vz
dG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3VidGxlQ3J5cHRvQ3VzdG9t
LmNwcAppbmRleCBkOGM3ZmYxNTc4NzNkNzVmZDczMzc0NmRhMzllMzg5YjE3ZmI2ZDg4Li42OGU2
ZDU2ODE5NzEwMDVkNTRhN2M1ODBkODBlMGIyOTZkMWI1ZGExIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N1YnRsZUNyeXB0b0N1c3RvbS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdWJ0bGVDcnlwdG9DdXN0b20uY3BwCkBAIC02MSwyNCAr
NjEsMjQgQEAgZW51bSBjbGFzcyBDcnlwdG9LZXlGb3JtYXQgewogICAgIEpXSwogfTsKIAotc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG0+IGNyZWF0ZUFsZ29yaXRobUZyb21K
U1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3N0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtPiBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXIgYWxnb3JpdGhtSWRlbnRpZmllcjsKLSAgICBpZiAoIUpTQ3J5cHRvQWxnb3JpdGhtRGljdGlv
bmFyeTo6Z2V0QWxnb3JpdGhtSWRlbnRpZmllcihleGVjLCB2YWx1ZSwgYWxnb3JpdGhtSWRlbnRp
ZmllcikpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBpZiAo
IUpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Z2V0QWxnb3JpdGhtSWRlbnRpZmllcigmc3Rh
dGUsIHZhbHVlLCBhbGdvcml0aG1JZGVudGlmaWVyKSkgeworICAgICAgICBBU1NFUlQoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBh
dXRvIHJlc3VsdCA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5jcmVhdGUo
YWxnb3JpdGhtSWRlbnRpZmllcik7CiAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHNldERPTUV4
Y2VwdGlvbihleGVjLCBOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgICAgIHNldERPTUV4Y2VwdGlv
bigmc3RhdGUsIE5PVF9TVVBQT1JURURfRVJSKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1z
dGF0aWMgYm9vbCBjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUsIENyeXB0b0tleUZvcm1hdCYgcmVzdWx0KQorc3RhdGljIGJvb2wgY3J5cHRv
S2V5Rm9ybWF0RnJvbUpTVmFsdWUoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgQ3J5
cHRvS2V5Rm9ybWF0JiByZXN1bHQpCiB7Ci0gICAgU3RyaW5nIGtleUZvcm1hdFN0cmluZyA9IHZh
bHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgU3RyaW5nIGtleUZvcm1hdFN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCZzdGF0
ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGtleUZvcm1hdFN0cmluZyA9PSAicmF3IikKICAgICAg
ICAgcmVzdWx0ID0gQ3J5cHRvS2V5Rm9ybWF0OjpSYXc7CkBAIC04OSwxNiArODksMTYgQEAgc3Rh
dGljIGJvb2wgY3J5cHRvS2V5Rm9ybWF0RnJvbUpTVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIHZhbHVlLCBDcnlwdG9LZXkKICAgICBlbHNlIGlmIChrZXlGb3JtYXRTdHJpbmcgPT0gImp3
ayIpCiAgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUZvcm1hdDo6SldLOwogICAgIGVsc2Ugewot
ICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiVW5rbm93biBrZXkgZm9ybWF0Iik7CisgICAg
ICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgIlVua25vd24ga2V5IGZvcm1hdCIpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9v
bCBjcnlwdG9LZXlVc2FnZXNGcm9tSlNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFs
dWUsIENyeXB0b0tleVVzYWdlJiByZXN1bHQpCitzdGF0aWMgYm9vbCBjcnlwdG9LZXlVc2FnZXNG
cm9tSlNWYWx1ZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBDcnlwdG9LZXlVc2Fn
ZSYgcmVzdWx0KQogewogICAgIGlmICghaXNKU0FycmF5KHZhbHVlKSkgewotICAgICAgICB0aHJv
d1R5cGVFcnJvcihleGVjKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMTA2LDkgKzEwNiw5IEBAIHN0YXRpYyBib29s
IGNyeXB0b0tleVVzYWdlc0Zyb21KU1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSwgQ3J5cHRvS2V5CiAKICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodmFsdWUpOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAg
SlNWYWx1ZSBlbGVtZW50ID0gYXJyYXktPmdldEluZGV4KGV4ZWMsIGkpOwotICAgICAgICBTdHJp
bmcgdXNhZ2VTdHJpbmcgPSBlbGVtZW50LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBKU1ZhbHVlIGVsZW1lbnQg
PSBhcnJheS0+Z2V0SW5kZXgoJnN0YXRlLCBpKTsKKyAgICAgICAgU3RyaW5nIHVzYWdlU3RyaW5n
ID0gZWxlbWVudC50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOworICAgICAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IGlmICh1c2FnZVN0cmluZyA9PSAiZW5jcnlwdCIpCiAgICAgICAgICAgICByZXN1bHQgfD0gQ3J5
cHRvS2V5VXNhZ2VFbmNyeXB0OwpAQCAtMTMwLDQyICsxMzAsNDIgQEAgc3RhdGljIGJvb2wgY3J5
cHRvS2V5VXNhZ2VzRnJvbUpTVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBD
cnlwdG9LZXkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6
ZW5jcnlwdChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjplbmNyeXB0
KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDMp
Ci0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3Vu
dCgpIDwgMykKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAotICAgIGF1dG8gYWxn
b3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOworICAgIGF1dG8gYWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpT
VmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBpZiAoIWFsZ29y
aXRobSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBB
U1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICB9CiAKLSAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rp
b25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JFbmNyeXB0KGV4ZWMsIGFsZ29yaXRobS0+aWRlbnRp
ZmllcigpLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBwYXJhbWV0ZXJz
ID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRW5jcnlw
dCgmc3RhdGUsIGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7CiAgICAgaWYgKCFwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRF
eGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIFJlZlB0cjxDcnlwdG9LZXk+
IGtleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkp
OworICAgIFJlZlB0cjxDcnlwdG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMSkpOwogICAgIGlmICgha2V5KQotICAgICAgICByZXR1cm4g
dGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3Rh
dGUpOwogCiAgICAgaWYgKCFrZXktPmFsbG93cyhDcnlwdG9LZXlVc2FnZUVuY3J5cHQpKSB7CiAg
ICAgICAgIG1faW1wbC0+ZG9jdW1lbnQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJj
ZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiS2V5IHVzYWdlcyBkbyBu
b3QgaW5jbHVkZSAnZW5jcnlwdCciKSk7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBO
T1RfU1VQUE9SVEVEX0VSUik7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIE5PVF9T
VVBQT1JURURfRVJSKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAg
ICAgQ3J5cHRvT3BlcmF0aW9uRGF0YSBkYXRhOwotICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0
YUZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRhKSkgewot
ICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIGlmICghY3J5cHRvT3Bl
cmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMiks
IGRhdGEpKSB7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIAotICAgIEpTUHJvbWlzZURlZmVy
cmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGds
b2JhbE9iamVjdCgpKTsKLSAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcihleGVjLCBnbG9iYWxP
YmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKKyAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlz
ZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVj
dCgpKTsKKyAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcigmc3RhdGUsIGdsb2JhbE9iamVjdCgp
LCBwcm9taXNlRGVmZXJyZWQpOwogICAgIGF1dG8gc3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJd
KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAgd3JhcHBl
ci5yZXNvbHZlKHJlc3VsdCk7CiAgICAgfTsKQEAgLTE3Niw0OCArMTc2LDQ4IEBAIEpTVmFsdWUg
SlNTdWJ0bGVDcnlwdG86OmVuY3J5cHQoRXhlY1N0YXRlKiBleGVjKQogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwogICAgIGFsZ29yaXRobS0+ZW5jcnlwdCgqcGFyYW1ldGVycywgKmtleSwgZGF0
YSwgV1RGOjptb3ZlKHN1Y2Nlc3NDYWxsYmFjayksIFdURjo6bW92ZShmYWlsdXJlQ2FsbGJhY2sp
LCBlYyk7CiAgICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHByb21pc2VEZWZlcnJlZC0+cHJvbWlz
ZSgpOwogfQogCi1KU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjpkZWNyeXB0KEV4ZWNTdGF0ZSogZXhl
YykKK0pTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OmRlY3J5cHQoRXhlY1N0YXRlJiBzdGF0ZSkKIHsK
LSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMykKLSAgICAgICAgcmV0dXJuIGV4ZWMt
PnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
ZXhlYykpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPCAzKQorICAgICAgICByZXR1
cm4gc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKCZzdGF0ZSkpOwogCi0gICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0
aG1Gcm9tSlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0
byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5j
aGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAgIEFTU0VS
VChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRp
b24oKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIGF1dG8g
cGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVy
c0ZvckRlY3J5cHQoZXhlYywgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURp
Y3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JEZWNyeXB0KCZzdGF0ZSwgYWxnb3JpdGhtLT5p
ZGVudGlmaWVyKCksIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBpZiAoIXBhcmFt
ZXRlcnMpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAg
QVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgfQogCi0gICAgUmVmUHRyPENyeXB0b0tleT4ga2V5ID0gSlNDcnlwdG9LZXk6OnRv
V3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgUmVmUHRyPENyeXB0b0tl
eT4ga2V5ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgx
KSk7CiAgICAgaWYgKCFrZXkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsK
KyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CiAKICAgICBpZiAoIWtleS0+
YWxsb3dzKENyeXB0b0tleVVzYWdlRGVjcnlwdCkpIHsKICAgICAgICAgbV9pbXBsLT5kb2N1bWVu
dCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpF
cnJvciwgQVNDSUlMaXRlcmFsKCJLZXkgdXNhZ2VzIGRvIG5vdCBpbmNsdWRlICdkZWNyeXB0JyIp
KTsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIE5PVF9TVVBQT1JURURfRVJSKTsKKyAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIpOwogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBDcnlwdG9PcGVyYXRpb25EYXRh
IGRhdGE7Ci0gICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoZXhlYywgZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMiksIGRhdGEpKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5o
YWRFeGNlcHRpb24oKSk7CisgICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUo
JnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSwgZGF0YSkpIHsKKyAgICAgICAgQVNT
RVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgfQogCi0gICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJv
bWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KCkpOwotICAgIERlZmVycmVk
V3JhcHBlciB3cmFwcGVyKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwor
ICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJl
ZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOworICAgIERlZmVycmVkV3JhcHBlciB3
cmFwcGVyKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CiAgICAgYXV0
byBzdWNjZXNzQ2FsbGJhY2sgPSBbd3JhcHBlcl0oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiByZXN1
bHQpIG11dGFibGUgewogICAgICAgICB3cmFwcGVyLnJlc29sdmUocmVzdWx0KTsKICAgICB9OwpA
QCAtMjI4LDQ4ICsyMjgsNDggQEAgSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6ZGVjcnlwdChFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYWxnb3JpdGhtLT5k
ZWNyeXB0KCpwYXJhbWV0ZXJzLCAqa2V5LCBkYXRhLCBXVEY6Om1vdmUoc3VjY2Vzc0NhbGxiYWNr
KSwgV1RGOjptb3ZlKGZhaWx1cmVDYWxsYmFjayksIGVjKTsKICAgICBpZiAoZWMpIHsKLSAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZz
dGF0ZSwgZWMpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBy
ZXR1cm4gcHJvbWlzZURlZmVycmVkLT5wcm9taXNlKCk7CiB9CiAKLUpTVmFsdWUgSlNTdWJ0bGVD
cnlwdG86OnNpZ24oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6c2ln
bihFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAz
KQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291
bnQoKSA8IDMpCisgICAgICAgIHJldHVybiBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKLSAgICBhdXRvIGFs
Z29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21K
U1ZhbHVlKHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgaWYgKCFhbGdv
cml0aG0pIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAg
QVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgfQogCi0gICAgYXV0byBwYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0
aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yU2lnbihleGVjLCBhbGdvcml0aG0tPmlkZW50aWZp
ZXIoKSwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gcGFyYW1ldGVycyA9
IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvclNpZ24oJnN0
YXRlLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkp
OwogICAgIGlmICghcGFyYW1ldGVycykgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpOworICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBSZWZQdHI8Q3J5cHRvS2V5PiBrZXkg
PSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAg
ICBSZWZQdHI8Q3J5cHRvS2V5PiBrZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKHN0YXRlLnVu
Y2hlY2tlZEFyZ3VtZW50KDEpKTsKICAgICBpZiAoIWtleSkKLSAgICAgICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsK
IAogICAgIGlmICgha2V5LT5hbGxvd3MoQ3J5cHRvS2V5VXNhZ2VTaWduKSkgewogICAgICAgICBt
X2ltcGwtPmRvY3VtZW50KCktPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBN
ZXNzYWdlTGV2ZWw6OkVycm9yLCBBU0NJSUxpdGVyYWwoIktleSB1c2FnZXMgZG8gbm90IGluY2x1
ZGUgJ3NpZ24nIikpOwotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRF
RF9FUlIpOworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VS
Uik7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIENyeXB0b09w
ZXJhdGlvbkRhdGEgZGF0YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1
ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKSwgZGF0YSkpIHsKLSAgICAgICAgQVNT
RVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFG
cm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRhKSkgewor
ICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVy
cmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QoKSk7Ci0g
ICAgRGVmZXJyZWRXcmFwcGVyIHdyYXBwZXIoZXhlYywgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VE
ZWZlcnJlZCk7CisgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJv
bWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSk7CisgICAgRGVmZXJy
ZWRXcmFwcGVyIHdyYXBwZXIoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVk
KTsKICAgICBhdXRvIHN1Y2Nlc3NDYWxsYmFjayA9IFt3cmFwcGVyXShjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgIHdyYXBwZXIucmVzb2x2ZShyZXN1bHQp
OwogICAgIH07CkBAIC0yODAsNTQgKzI4MCw1NCBAQCBKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjpz
aWduKEV4ZWNTdGF0ZSogZXhlYykKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhbGdv
cml0aG0tPnNpZ24oKnBhcmFtZXRlcnMsICprZXksIGRhdGEsIFdURjo6bW92ZShzdWNjZXNzQ2Fs
bGJhY2spLCBXVEY6Om1vdmUoZmFpbHVyZUNhbGxiYWNrKSwgZWMpOwogICAgIGlmIChlYykgewot
ICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBzZXRET01FeGNlcHRp
b24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAog
ICAgIHJldHVybiBwcm9taXNlRGVmZXJyZWQtPnByb21pc2UoKTsKIH0KIAotSlNWYWx1ZSBKU1N1
YnRsZUNyeXB0bzo6dmVyaWZ5KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNTdWJ0bGVDcnlw
dG86OnZlcmlmeShFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgPCA0KQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVj
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAgaWYgKHN0YXRlLmFy
Z3VtZW50Q291bnQoKSA8IDQpCisgICAgICAgIHJldHVybiBzdGF0ZS52bSgpLnRocm93RXhjZXB0
aW9uKCZzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKLSAg
ICBhdXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29y
aXRobUZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAg
aWYgKCFhbGdvcml0aG0pIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsK
KyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgYXV0byBwYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdv
cml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yVmVyaWZ5KGV4ZWMsIGFsZ29yaXRo
bS0+aWRlbnRpZmllcigpLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBw
YXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJz
Rm9yVmVyaWZ5KCZzdGF0ZSwgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIHN0YXRlLnVuY2hlY2tl
ZEFyZ3VtZW50KDApKTsKICAgICBpZiAoIXBhcmFtZXRlcnMpIHsKLSAgICAgICAgQVNTRVJUKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgUmVmUHRyPENy
eXB0b0tleT4ga2V5ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1
bWVudCgxKSk7CisgICAgUmVmUHRyPENyeXB0b0tleT4ga2V5ID0gSlNDcnlwdG9LZXk6OnRvV3Jh
cHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSk7CiAgICAgaWYgKCFrZXkpCi0gICAgICAg
IHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVy
cm9yKCZzdGF0ZSk7CiAKICAgICBpZiAoIWtleS0+YWxsb3dzKENyeXB0b0tleVVzYWdlVmVyaWZ5
KSkgewogICAgICAgICBtX2ltcGwtPmRvY3VtZW50KCktPmFkZENvbnNvbGVNZXNzYWdlKE1lc3Nh
Z2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBBU0NJSUxpdGVyYWwoIktleSB1c2Fn
ZXMgZG8gbm90IGluY2x1ZGUgJ3ZlcmlmeSciKSk7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUs
IE5PVF9TVVBQT1JURURfRVJSKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
fQogCiAgICAgQ3J5cHRvT3BlcmF0aW9uRGF0YSBzaWduYXR1cmU7Ci0gICAgaWYgKCFjcnlwdG9P
cGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMiks
IHNpZ25hdHVyZSkpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAg
ICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hl
Y2tlZEFyZ3VtZW50KDIpLCBzaWduYXR1cmUpKSB7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRF
eGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAg
IENyeXB0b09wZXJhdGlvbkRhdGEgZGF0YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFG
cm9tSlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgzKSwgZGF0YSkpIHsKLSAg
ICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBpZiAoIWNyeXB0b09wZXJh
dGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDMpLCBk
YXRhKSkgeworICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJv
bWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmpl
Y3QoKSk7Ci0gICAgRGVmZXJyZWRXcmFwcGVyIHdyYXBwZXIoZXhlYywgZ2xvYmFsT2JqZWN0KCks
IHByb21pc2VEZWZlcnJlZCk7CisgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJl
ZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSk7Cisg
ICAgRGVmZXJyZWRXcmFwcGVyIHdyYXBwZXIoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlz
ZURlZmVycmVkKTsKICAgICBhdXRvIHN1Y2Nlc3NDYWxsYmFjayA9IFt3cmFwcGVyXShib29sIHJl
c3VsdCkgbXV0YWJsZSB7CiAgICAgICAgIHdyYXBwZXIucmVzb2x2ZShyZXN1bHQpOwogICAgIH07
CkBAIC0zMzgsMzggKzMzOCwzOCBAQCBKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjp2ZXJpZnkoRXhl
Y1N0YXRlKiBleGVjKQogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGFsZ29yaXRobS0+
dmVyaWZ5KCpwYXJhbWV0ZXJzLCAqa2V5LCBzaWduYXR1cmUsIGRhdGEsIFdURjo6bW92ZShzdWNj
ZXNzQ2FsbGJhY2spLCBXVEY6Om1vdmUoZmFpbHVyZUNhbGxiYWNrKSwgZWMpOwogICAgIGlmIChl
YykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBzZXRET01F
eGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IH0KIAogICAgIHJldHVybiBwcm9taXNlRGVmZXJyZWQtPnByb21pc2UoKTsKIH0KIAotSlNWYWx1
ZSBKU1N1YnRsZUNyeXB0bzo6ZGlnZXN0KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNTdWJ0
bGVDcnlwdG86OmRpZ2VzdChFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgPCAyKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlv
bihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAgaWYgKHN0
YXRlLmFyZ3VtZW50Q291bnQoKSA8IDIpCisgICAgICAgIHJldHVybiBzdGF0ZS52bSgpLnRocm93
RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7
CiAKLSAgICBhdXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKGV4ZWMs
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFsZ29yaXRobSA9IGNyZWF0
ZUFsZ29yaXRobUZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7
CiAgICAgaWYgKCFhbGdvcml0aG0pIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKTsKKyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgYXV0byBwYXJhbWV0ZXJzID0gSlNDcnlw
dG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRGlnZXN0KGV4ZWMsIGFs
Z29yaXRobS0+aWRlbnRpZmllcigpLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAg
YXV0byBwYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJh
bWV0ZXJzRm9yRGlnZXN0KCZzdGF0ZSwgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIHN0YXRlLnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBpZiAoIXBhcmFtZXRlcnMpIHsKLSAgICAgICAgQVNT
RVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgQ3J5
cHRvT3BlcmF0aW9uRGF0YSBkYXRhOwotICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21K
U1ZhbHVlKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBkYXRhKSkgewotICAgICAg
ICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIGlmICghY3J5cHRvT3BlcmF0aW9u
RGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSksIGRhdGEp
KSB7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNl
RGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCgp
KTsKLSAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcihleGVjLCBnbG9iYWxPYmplY3QoKSwgcHJv
bWlzZURlZmVycmVkKTsKKyAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0g
SlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKKyAgICBE
ZWZlcnJlZFdyYXBwZXIgd3JhcHBlcigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVm
ZXJyZWQpOwogICAgIGF1dG8gc3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAgd3JhcHBlci5yZXNvbHZlKHJl
c3VsdCk7CiAgICAgfTsKQEAgLTM4MCw0NyArMzgwLDQ3IEBAIEpTVmFsdWUgSlNTdWJ0bGVDcnlw
dG86OmRpZ2VzdChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAg
ICAgYWxnb3JpdGhtLT5kaWdlc3QoKnBhcmFtZXRlcnMsIGRhdGEsIFdURjo6bW92ZShzdWNjZXNz
Q2FsbGJhY2spLCBXVEY6Om1vdmUoZmFpbHVyZUNhbGxiYWNrKSwgZWMpOwogICAgIGlmIChlYykg
ewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBzZXRET01FeGNl
cHRpb24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0K
IAogICAgIHJldHVybiBwcm9taXNlRGVmZXJyZWQtPnByb21pc2UoKTsKIH0KIAotSlNWYWx1ZSBK
U1N1YnRsZUNyeXB0bzo6Z2VuZXJhdGVLZXkoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1N1
YnRsZUNyeXB0bzo6Z2VuZXJhdGVLZXkoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoZXhl
Yy0+YXJndW1lbnRDb3VudCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dF
eGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAg
IGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPCAxKQorICAgICAgICByZXR1cm4gc3RhdGUudm0o
KS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZz
dGF0ZSkpOwogCi0gICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1
ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBhbGdvcml0aG0g
PSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1l
bnQoMCkpOwogICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRF
eGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIGF1dG8gcGFyYW1ldGVycyA9
IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckdlbmVyYXRl
S2V5KGV4ZWMsIGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5
OjpjcmVhdGVQYXJhbWV0ZXJzRm9yR2VuZXJhdGVLZXkoJnN0YXRlLCBhbGdvcml0aG0tPmlkZW50
aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmICghcGFyYW1ldGVy
cykgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NF
UlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICB9CiAKICAgICBib29sIGV4dHJhY3RhYmxlID0gZmFsc2U7Ci0gICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA+PSAyKSB7Ci0gICAgICAgIGV4dHJhY3RhYmxlID0gZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMSkudG9Cb29sZWFuKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAg
IGV4dHJhY3RhYmxlID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkudG9Cb29sZWFuKCZzdGF0
ZSk7CisgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIENyeXB0b0tleVVzYWdlIGtleVVzYWdlcyA9
IDA7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAzKSB7Ci0gICAgICAgIGlmICgh
Y3J5cHRvS2V5VXNhZ2VzRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+YXJndW1lbnQoMiksIGtleVVz
YWdlcykpIHsKLSAgICAgICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAg
aWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+PSAzKSB7CisgICAgICAgIGlmICghY3J5cHRvS2V5
VXNhZ2VzRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIpLCBrZXlVc2FnZXMpKSB7
CisgICAgICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBKU1Byb21pc2VE
ZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVj
LCBnbG9iYWxPYmplY3QoKSk7Ci0gICAgRGVmZXJyZWRXcmFwcGVyIHdyYXBwZXIoZXhlYywgZ2xv
YmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CisgICAgSlNQcm9taXNlRGVmZXJyZWQqIHBy
b21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxP
YmplY3QoKSk7CisgICAgRGVmZXJyZWRXcmFwcGVyIHdyYXBwZXIoJnN0YXRlLCBnbG9iYWxPYmpl
Y3QoKSwgcHJvbWlzZURlZmVycmVkKTsKICAgICBhdXRvIHN1Y2Nlc3NDYWxsYmFjayA9IFt3cmFw
cGVyXShDcnlwdG9LZXkqIGtleSwgQ3J5cHRvS2V5UGFpcioga2V5UGFpcikgbXV0YWJsZSB7CiAg
ICAgICAgIEFTU0VSVChrZXkgfHwga2V5UGFpcik7CiAgICAgICAgIEFTU0VSVCgha2V5IHx8ICFr
ZXlQYWlyKTsKQEAgLTQzNiwxNCArNDM2LDE0IEBAIEpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86Omdl
bmVyYXRlS2V5KEV4ZWNTdGF0ZSogZXhlYykKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAg
ICBhbGdvcml0aG0tPmdlbmVyYXRlS2V5KCpwYXJhbWV0ZXJzLCBleHRyYWN0YWJsZSwga2V5VXNh
Z2VzLCBXVEY6Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGOjptb3ZlKGZhaWx1cmVDYWxsYmFj
ayksIGVjKTsKICAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVj
KTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICByZXR1cm4gcHJvbWlzZURlZmVycmVkLT5wcm9t
aXNlKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGltcG9ydEtleShFeGVjU3RhdGUqIGV4ZWMsIENyeXB0
b0tleUZvcm1hdCBrZXlGb3JtYXQsIENyeXB0b09wZXJhdGlvbkRhdGEgZGF0YSwgc3RkOjp1bmlx
dWVfcHRyPENyeXB0b0FsZ29yaXRobT4gYWxnb3JpdGhtLCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycz4gcGFyYW1ldGVycywgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRv
S2V5VXNhZ2Uga2V5VXNhZ2VzLCBDcnlwdG9BbGdvcml0aG06OktleUNhbGxiYWNrIGNhbGxiYWNr
LCBDcnlwdG9BbGdvcml0aG06OlZvaWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2spCitzdGF0aWMg
dm9pZCBpbXBvcnRLZXkoRXhlY1N0YXRlJiBzdGF0ZSwgQ3J5cHRvS2V5Rm9ybWF0IGtleUZvcm1h
dCwgQ3J5cHRvT3BlcmF0aW9uRGF0YSBkYXRhLCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3Jp
dGhtPiBhbGdvcml0aG0sIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJz
PiBwYXJhbWV0ZXJzLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSBrZXlVc2FnZXMs
IENyeXB0b0FsZ29yaXRobTo6S2V5Q2FsbGJhY2sgY2FsbGJhY2ssIENyeXB0b0FsZ29yaXRobTo6
Vm9pZENhbGxiYWNrIGZhaWx1cmVDYWxsYmFjaykKIHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5
cHRvS2V5U2VyaWFsaXphdGlvbj4ga2V5U2VyaWFsaXphdGlvbjsKICAgICBzd2l0Y2ggKGtleUZv
cm1hdCkgewpAQCAtNDUzLDEwMiArNDUzLDEwMiBAQCBzdGF0aWMgdm9pZCBpbXBvcnRLZXkoRXhl
Y1N0YXRlKiBleGVjLCBDcnlwdG9LZXlGb3JtYXQga2V5Rm9ybWF0LCBDcnlwdG9PcGVyYXRpbwog
ICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpKV0s6IHsKICAgICAgICAgU3RyaW5nIGp3a1N0cmlu
ZyA9IFN0cmluZzo6ZnJvbVVURjgoZGF0YS5maXJzdCwgZGF0YS5zZWNvbmQpOwogICAgICAgICBp
ZiAoandrU3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVj
LCAiSldLIEpTT04gc2VyaWFsaXphdGlvbiBpcyBub3QgdmFsaWQgVVRGLTgiKTsKKyAgICAgICAg
ICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgIkpXSyBKU09OIHNlcmlhbGl6YXRpb24gaXMgbm90
IHZhbGlkIFVURi04Iik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAg
a2V5U2VyaWFsaXphdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8SlNDcnlwdG9LZXlTZXJpYWxpemF0
aW9uSldLPihleGVjLCBqd2tTdHJpbmcpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIGtleVNlcmlhbGl6YXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPEpTQ3J5cHRv
S2V5U2VyaWFsaXphdGlvbkpXSz4oJnN0YXRlLCBqd2tTdHJpbmcpOworICAgICAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBkZWZhdWx0OgotICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiVW5zdXBw
b3J0ZWQga2V5IGZvcm1hdCBmb3IgaW1wb3J0Iik7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZz
dGF0ZSwgIlVuc3VwcG9ydGVkIGtleSBmb3JtYXQgZm9yIGltcG9ydCIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgQVNTRVJUKGtleVNlcmlhbGl6YXRpb24pOwogCiAgICAgaWYgKCFr
ZXlTZXJpYWxpemF0aW9uLT5yZWNvbmNpbGVBbGdvcml0aG0oYWxnb3JpdGhtLCBwYXJhbWV0ZXJz
KSkgewotICAgICAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZXhlYywgIkFsZ29yaXRobSBzcGVjaWZpZWQgaW4ga2V5IGlzIG5vdCBjb21w
YXRpYmxlIHdpdGggb25lIHBhc3NlZCB0byBpbXBvcnRLZXkgYXMgYXJndW1lbnQiKTsKKyAgICAg
ICAgaWYgKCFzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9y
KCZzdGF0ZSwgIkFsZ29yaXRobSBzcGVjaWZpZWQgaW4ga2V5IGlzIG5vdCBjb21wYXRpYmxlIHdp
dGggb25lIHBhc3NlZCB0byBpbXBvcnRLZXkgYXMgYXJndW1lbnQiKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWFsZ29yaXRobSkgewot
ICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiTmVpdGhlciBrZXkgbm9yIGZ1bmN0aW9uIGFy
Z3VtZW50IGhhcyBjcnlwdG8gYWxnb3JpdGhtIHNwZWNpZmllZCIpOworICAgICAgICB0aHJvd1R5
cGVFcnJvcigmc3RhdGUsICJOZWl0aGVyIGtleSBub3IgZnVuY3Rpb24gYXJndW1lbnQgaGFzIGNy
eXB0byBhbGdvcml0aG0gc3BlY2lmaWVkIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
QVNTRVJUKHBhcmFtZXRlcnMpOwogCiAgICAga2V5U2VyaWFsaXphdGlvbi0+cmVjb25jaWxlRXh0
cmFjdGFibGUoZXh0cmFjdGFibGUpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGtleVNl
cmlhbGl6YXRpb24tPnJlY29uY2lsZVVzYWdlcyhrZXlVc2FnZXMpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGF1dG8ga2V5RGF0YSA9IGtleVNlcmlhbGl6YXRpb24tPmtleURhdGEoKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm47CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBh
bGdvcml0aG0tPmltcG9ydEtleSgqcGFyYW1ldGVycywgKmtleURhdGEsIGV4dHJhY3RhYmxlLCBr
ZXlVc2FnZXMsIFdURjo6bW92ZShjYWxsYmFjayksIFdURjo6bW92ZShmYWlsdXJlQ2FsbGJhY2sp
LCBlYyk7CiAgICAgaWYgKGVjKQotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwor
ICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiB9CiAKLUpTVmFsdWUgSlNTdWJ0
bGVDcnlwdG86OmltcG9ydEtleShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTU3VidGxlQ3J5
cHRvOjppbXBvcnRLZXkoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpIDwgMykKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24o
ZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlmIChzdGF0
ZS5hcmd1bWVudENvdW50KCkgPCAzKQorICAgICAgICByZXR1cm4gc3RhdGUudm0oKS50aHJvd0V4
Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwog
CiAgICAgQ3J5cHRvS2V5Rm9ybWF0IGtleUZvcm1hdDsKLSAgICBpZiAoIWNyeXB0b0tleUZvcm1h
dEZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBrZXlGb3JtYXQpKSB7Ci0gICAg
ICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgaWYgKCFjcnlwdG9LZXlGb3Jt
YXRGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksIGtleUZvcm1hdCkpIHsKKyAg
ICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgfQogCiAgICAgQ3J5cHRvT3BlcmF0aW9uRGF0YSBkYXRhOwotICAgIGlm
ICghY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDEpLCBkYXRhKSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
OworICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUu
dW5jaGVja2VkQXJndW1lbnQoMSksIGRhdGEpKSB7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRF
eGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAg
IHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG0+IGFsZ29yaXRobTsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gcGFyYW1ldGVyczsKLSAgICBpZiAo
IWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLmlzTnVsbCgpKSB7Ci0gICAgICAgIGFsZ29yaXRo
bSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDIpKTsKKyAgICBpZiAoIXN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLmlzTnVsbCgpKSB7
CisgICAgICAgIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKHN0YXRlLCBz
dGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSk7CiAgICAgICAgIGlmICghYWxnb3JpdGhtKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICAgICAgQVNT
RVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgICAgICB9Ci0gICAgICAgIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURp
Y3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JJbXBvcnRLZXkoZXhlYywgYWxnb3JpdGhtLT5p
ZGVudGlmaWVyKCksIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKKyAgICAgICAgcGFyYW1l
dGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0Zvcklt
cG9ydEtleSgmc3RhdGUsIGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRB
cmd1bWVudCgyKSk7CiAgICAgICAgIGlmICghcGFyYW1ldGVycykgewotICAgICAgICAgICAgQVNT
RVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRF
eGNlcHRpb24oKSk7CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAg
fQogICAgIH0KIAogICAgIGJvb2wgZXh0cmFjdGFibGUgPSBmYWxzZTsKLSAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpID49IDQpIHsKLSAgICAgICAgZXh0cmFjdGFibGUgPSBleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgzKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID49IDQpIHsKKyAgICAg
ICAgZXh0cmFjdGFibGUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgzKS50b0Jvb2xlYW4oJnN0
YXRlKTsKKyAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgQ3J5cHRvS2V5VXNhZ2Uga2V5VXNhZ2Vz
ID0gMDsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDUpIHsKLSAgICAgICAgaWYg
KCFjcnlwdG9LZXlVc2FnZXNGcm9tSlNWYWx1ZShleGVjLCBleGVjLT5hcmd1bWVudCg0KSwga2V5
VXNhZ2VzKSkgewotICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAg
ICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID49IDUpIHsKKyAgICAgICAgaWYgKCFjcnlwdG9L
ZXlVc2FnZXNGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoNCksIGtleVVzYWdlcykp
IHsKKyAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIEpTUHJvbWlz
ZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4
ZWMsIGdsb2JhbE9iamVjdCgpKTsKLSAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcihleGVjLCBn
bG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKKyAgICBKU1Byb21pc2VEZWZlcnJlZCog
cHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2Jh
bE9iamVjdCgpKTsKKyAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcigmc3RhdGUsIGdsb2JhbE9i
amVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwogICAgIGF1dG8gc3VjY2Vzc0NhbGxiYWNrID0gW3dy
YXBwZXJdKENyeXB0b0tleSYgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAgd3JhcHBlci5yZXNv
bHZlKCZyZXN1bHQpOwogICAgIH07CkBAIC01NTYsMTcgKzU1NiwxNyBAQCBKU1ZhbHVlIEpTU3Vi
dGxlQ3J5cHRvOjppbXBvcnRLZXkoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICB3cmFwcGVyLnJl
amVjdChudWxscHRyKTsKICAgICB9OwogCi0gICAgV2ViQ29yZTo6aW1wb3J0S2V5KGV4ZWMsIGtl
eUZvcm1hdCwgZGF0YSwgV1RGOjptb3ZlKGFsZ29yaXRobSksIFdURjo6bW92ZShwYXJhbWV0ZXJz
KSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgV1RGOjptb3ZlKHN1Y2Nlc3NDYWxsYmFjayksIFdU
Rjo6bW92ZShmYWlsdXJlQ2FsbGJhY2spKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgV2ViQ29yZTo6aW1wb3J0S2V5KHN0YXRlLCBrZXlGb3JtYXQsIGRhdGEsIFdURjo6bW92
ZShhbGdvcml0aG0pLCBXVEY6Om1vdmUocGFyYW1ldGVycyksIGV4dHJhY3RhYmxlLCBrZXlVc2Fn
ZXMsIFdURjo6bW92ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEY6Om1vdmUoZmFpbHVyZUNhbGxiYWNr
KSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIAogICAgIHJldHVybiBwcm9taXNlRGVmZXJyZWQtPnByb21pc2UoKTsKIH0KIAot
c3RhdGljIHZvaWQgZXhwb3J0S2V5KEV4ZWNTdGF0ZSogZXhlYywgQ3J5cHRvS2V5Rm9ybWF0IGtl
eUZvcm1hdCwgY29uc3QgQ3J5cHRvS2V5JiBrZXksIENyeXB0b0FsZ29yaXRobTo6VmVjdG9yQ2Fs
bGJhY2sgY2FsbGJhY2ssIENyeXB0b0FsZ29yaXRobTo6Vm9pZENhbGxiYWNrIGZhaWx1cmVDYWxs
YmFjaykKK3N0YXRpYyB2b2lkIGV4cG9ydEtleShFeGVjU3RhdGUmIHN0YXRlLCBDcnlwdG9LZXlG
b3JtYXQga2V5Rm9ybWF0LCBjb25zdCBDcnlwdG9LZXkmIGtleSwgQ3J5cHRvQWxnb3JpdGhtOjpW
ZWN0b3JDYWxsYmFjayBjYWxsYmFjaywgQ3J5cHRvQWxnb3JpdGhtOjpWb2lkQ2FsbGJhY2sgZmFp
bHVyZUNhbGxiYWNrKQogewogICAgIGlmICgha2V5LmV4dHJhY3RhYmxlKCkpIHsKLSAgICAgICAg
dGhyb3dUeXBlRXJyb3IoZXhlYywgIktleSBpcyBub3QgZXh0cmFjdGFibGUiKTsKKyAgICAgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCAiS2V5IGlzIG5vdCBleHRyYWN0YWJsZSIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC01ODAsOCArNTgwLDggQEAgc3RhdGljIHZvaWQgZXhwb3J0
S2V5KEV4ZWNTdGF0ZSogZXhlYywgQ3J5cHRvS2V5Rm9ybWF0IGtleUZvcm1hdCwgY29uc3QgQ3J5
cHRvS2UKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpK
V0s6IHsKLSAgICAgICAgU3RyaW5nIHJlc3VsdCA9IEpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpX
Szo6c2VyaWFsaXplKGV4ZWMsIGtleSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IEpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSzo6
c2VyaWFsaXplKCZzdGF0ZSwga2V5KTsKKyAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBDU3RyaW5nIHV0ZjhTdHJpbmcgPSByZXN1
bHQudXRmOChTdHJpY3RDb252ZXJzaW9uKTsKICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3Vs
dEJ1ZmZlcjsKQEAgLTU5MCwyOCArNTkwLDI4IEBAIHN0YXRpYyB2b2lkIGV4cG9ydEtleShFeGVj
U3RhdGUqIGV4ZWMsIENyeXB0b0tleUZvcm1hdCBrZXlGb3JtYXQsIGNvbnN0IENyeXB0b0tlCiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgotICAgICAgICB0aHJvd1R5cGVFcnJv
cihleGVjLCAiVW5zdXBwb3J0ZWQga2V5IGZvcm1hdCBmb3IgZXhwb3J0Iik7CisgICAgICAgIHRo
cm93VHlwZUVycm9yKCZzdGF0ZSwgIlVuc3VwcG9ydGVkIGtleSBmb3JtYXQgZm9yIGV4cG9ydCIp
OwogICAgICAgICBicmVhazsKICAgICB9CiB9CiAKLUpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OmV4
cG9ydEtleShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjpleHBvcnRL
ZXkoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwg
MikKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENv
dW50KCkgPCAyKQorICAgICAgICByZXR1cm4gc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3Rh
dGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgQ3J5cHRv
S2V5Rm9ybWF0IGtleUZvcm1hdDsKLSAgICBpZiAoIWNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVl
KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBrZXlGb3JtYXQpKSB7Ci0gICAgICAgIEFTU0VSVChl
eGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgaWYgKCFjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1
ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksIGtleUZvcm1hdCkpIHsKKyAgICAgICAgQVNTRVJU
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgfQogCi0gICAgUmVmUHRyPENyeXB0b0tleT4ga2V5ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBl
ZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgUmVmUHRyPENyeXB0b0tleT4ga2V5
ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSk7CiAg
ICAgaWYgKCFrZXkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAg
ICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CiAKLSAgICBKU1Byb21pc2VEZWZlcnJl
ZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9i
YWxPYmplY3QoKSk7Ci0gICAgRGVmZXJyZWRXcmFwcGVyIHdyYXBwZXIoZXhlYywgZ2xvYmFsT2Jq
ZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CisgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VE
ZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3Qo
KSk7CisgICAgRGVmZXJyZWRXcmFwcGVyIHdyYXBwZXIoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwg
cHJvbWlzZURlZmVycmVkKTsKICAgICBhdXRvIHN1Y2Nlc3NDYWxsYmFjayA9IFt3cmFwcGVyXShj
b25zdCBWZWN0b3I8dWludDhfdD4mIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgIHdyYXBwZXIu
cmVzb2x2ZShyZXN1bHQpOwogICAgIH07CkBAIC02MTksNTIgKzYxOSw1MiBAQCBKU1ZhbHVlIEpT
U3VidGxlQ3J5cHRvOjpleHBvcnRLZXkoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICB3cmFwcGVy
LnJlamVjdChudWxscHRyKTsKICAgICB9OwogCi0gICAgV2ViQ29yZTo6ZXhwb3J0S2V5KGV4ZWMs
IGtleUZvcm1hdCwgKmtleSwgV1RGOjptb3ZlKHN1Y2Nlc3NDYWxsYmFjayksIFdURjo6bW92ZShm
YWlsdXJlQ2FsbGJhY2spKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgV2Vi
Q29yZTo6ZXhwb3J0S2V5KHN0YXRlLCBrZXlGb3JtYXQsICprZXksIFdURjo6bW92ZShzdWNjZXNz
Q2FsbGJhY2spLCBXVEY6Om1vdmUoZmFpbHVyZUNhbGxiYWNrKSk7CisgICAgaWYgKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIHJldHVy
biBwcm9taXNlRGVmZXJyZWQtPnByb21pc2UoKTsKIH0KIAotSlNWYWx1ZSBKU1N1YnRsZUNyeXB0
bzo6d3JhcEtleShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjp3cmFw
S2V5KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8
IDQpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRD
b3VudCgpIDwgNCkKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0
YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIENyeXB0
b0tleUZvcm1hdCBrZXlGb3JtYXQ7Ci0gICAgaWYgKCFjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1
ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwga2V5Rm9ybWF0KSkgewotICAgICAgICBBU1NFUlQo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIGlmICghY3J5cHRvS2V5Rm9ybWF0RnJvbUpTVmFs
dWUoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDApLCBrZXlGb3JtYXQpKSB7CisgICAgICAgIEFTU0VS
VChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIH0KIAotICAgIFJlZlB0cjxDcnlwdG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBw
ZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIFJlZlB0cjxDcnlwdG9LZXk+IGtl
eSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOwog
ICAgIGlmICgha2V5KQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAg
ICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOwogCi0gICAgUmVmUHRyPENyeXB0b0tl
eT4gd3JhcHBpbmdLZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDIpKTsKKyAgICBSZWZQdHI8Q3J5cHRvS2V5PiB3cmFwcGluZ0tleSA9IEpTQ3J5cHRv
S2V5Ojp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMikpOwogICAgIGlmICgha2V5
KQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiB0
aHJvd1R5cGVFcnJvcigmc3RhdGUpOwogCiAgICAgaWYgKCF3cmFwcGluZ0tleS0+YWxsb3dzKENy
eXB0b0tleVVzYWdlV3JhcEtleSkpIHsKICAgICAgICAgbV9pbXBsLT5kb2N1bWVudCgpLT5hZGRD
b25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgQVND
SUlMaXRlcmFsKCJLZXkgdXNhZ2VzIGRvIG5vdCBpbmNsdWRlICd3cmFwS2V5JyIpKTsKLSAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIpOwogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBhdXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29y
aXRobUZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDMpKTsKKyAgICBh
dXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS51
bmNoZWNrZWRBcmd1bWVudCgzKSk7CiAgICAgaWYgKCFhbGdvcml0aG0pIHsKLSAgICAgICAgQVNT
RVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgYXV0
byBwYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0
ZXJzRm9yRW5jcnlwdChleGVjLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMykpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGht
RGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckVuY3J5cHQoJnN0YXRlLCBhbGdvcml0aG0t
PmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMykpOwogICAgIGlmICghcGFy
YW1ldGVycykgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAg
ICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICB9CiAKLSAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0g
SlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QoKSk7Ci0gICAgRGVm
ZXJyZWRXcmFwcGVyIHdyYXBwZXIoZXhlYywgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJl
ZCk7CisgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURl
ZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSk7CisgICAgRGVmZXJyZWRXcmFw
cGVyIHdyYXBwZXIoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKIAog
ICAgIENyeXB0b0FsZ29yaXRobSogYWxnb3JpdGhtUHRyID0gYWxnb3JpdGhtLnJlbGVhc2UoKTsK
ICAgICBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzUHRyID0gcGFyYW1ldGVy
cy5yZWxlYXNlKCk7CkBAIC02OTUsOTAgKzY5NSw5MCBAQCBKU1ZhbHVlIEpTU3VidGxlQ3J5cHRv
Ojp3cmFwS2V5KEV4ZWNTdGF0ZSogZXhlYykKICAgICB9OwogCiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgV2ViQ29yZTo6ZXhwb3J0S2V5KGV4ZWMsIGtleUZvcm1hdCwgKmtleSwgV1RG
Ojptb3ZlKGV4cG9ydFN1Y2Nlc3NDYWxsYmFjayksIFdURjo6bW92ZShleHBvcnRGYWlsdXJlQ2Fs
bGJhY2spKTsKKyAgICBXZWJDb3JlOjpleHBvcnRLZXkoc3RhdGUsIGtleUZvcm1hdCwgKmtleSwg
V1RGOjptb3ZlKGV4cG9ydFN1Y2Nlc3NDYWxsYmFjayksIFdURjo6bW92ZShleHBvcnRGYWlsdXJl
Q2FsbGJhY2spKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgZGVsZXRlIGFsZ29yaXRobVB0cjsK
ICAgICAgICAgZGVsZXRlIHBhcmFtZXRlcnNQdHI7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHByb21pc2VEZWZlcnJl
ZC0+cHJvbWlzZSgpOwogfQogCi1KU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjp1bndyYXBLZXkoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6dW53cmFwS2V5KEV4ZWNTdGF0
ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDUpCi0gICAgICAg
IHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpIDwgNSkK
KyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIENyeXB0b0tleUZvcm1hdCBr
ZXlGb3JtYXQ7Ci0gICAgaWYgKCFjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShleGVjLCBleGVj
LT5hcmd1bWVudCgwKSwga2V5Rm9ybWF0KSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpOworICAgIGlmICghY3J5cHRvS2V5Rm9ybWF0RnJvbUpTVmFsdWUoc3RhdGUsIHN0
YXRlLmFyZ3VtZW50KDApLCBrZXlGb3JtYXQpKSB7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRF
eGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAg
IENyeXB0b09wZXJhdGlvbkRhdGEgd3JhcHBlZEtleURhdGE7Ci0gICAgaWYgKCFjcnlwdG9PcGVy
YXRpb25EYXRhRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSksIHdy
YXBwZWRLZXlEYXRhKSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwor
ICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5j
aGVja2VkQXJndW1lbnQoMSksIHdyYXBwZWRLZXlEYXRhKSkgeworICAgICAgICBBU1NFUlQoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9
CiAKLSAgICBSZWZQdHI8Q3J5cHRvS2V5PiB1bndyYXBwaW5nS2V5ID0gSlNDcnlwdG9LZXk6OnRv
V3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKSk7CisgICAgUmVmUHRyPENyeXB0b0tl
eT4gdW53cmFwcGluZ0tleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2Vk
QXJndW1lbnQoMikpOwogICAgIGlmICghdW53cmFwcGluZ0tleSkKLSAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRl
KTsKIAogICAgIGlmICghdW53cmFwcGluZ0tleS0+YWxsb3dzKENyeXB0b0tleVVzYWdlVW53cmFw
S2V5KSkgewogICAgICAgICBtX2ltcGwtPmRvY3VtZW50KCktPmFkZENvbnNvbGVNZXNzYWdlKE1l
c3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBBU0NJSUxpdGVyYWwoIktleSB1
c2FnZXMgZG8gbm90IGluY2x1ZGUgJ3Vud3JhcEtleSciKSk7Ci0gICAgICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigm
c3RhdGUsIE5PVF9TVVBQT1JURURfRVJSKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgfQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobT4gdW53cmFwQWxn
b3JpdGhtOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiB1
bndyYXBBbGdvcml0aG1QYXJhbWV0ZXJzOwotICAgIHVud3JhcEFsZ29yaXRobSA9IGNyZWF0ZUFs
Z29yaXRobUZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDMpKTsKKyAg
ICB1bndyYXBBbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMykpOwogICAgIGlmICghdW53cmFwQWxnb3JpdGhtKSB7Ci0g
ICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChzdGF0
ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0K
LSAgICB1bndyYXBBbGdvcml0aG1QYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9u
YXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRGVjcnlwdChleGVjLCB1bndyYXBBbGdvcml0aG0tPmlk
ZW50aWZpZXIoKSwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMykpOworICAgIHVud3JhcEFsZ29y
aXRobVBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFt
ZXRlcnNGb3JEZWNyeXB0KCZzdGF0ZSwgdW53cmFwQWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDMpKTsKICAgICBpZiAoIXVud3JhcEFsZ29yaXRobVBhcmFt
ZXRlcnMpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAg
QVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgfQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobT4gdW53cmFw
cGVkS2V5QWxnb3JpdGhtOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzPiB1bndyYXBwZWRLZXlBbGdvcml0aG1QYXJhbWV0ZXJzOwotICAgIGlmICghZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoNCkuaXNOdWxsKCkpIHsKLSAgICAgICAgdW53cmFwcGVkS2V5QWxn
b3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoNCkpOworICAgIGlmICghc3RhdGUudW5jaGVja2VkQXJndW1lbnQoNCkuaXNOdWxs
KCkpIHsKKyAgICAgICAgdW53cmFwcGVkS2V5QWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJv
bUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDQpKTsKICAgICAgICAgaWYg
KCF1bndyYXBwZWRLZXlBbGdvcml0aG0pIHsKLSAgICAgICAgICAgIEFTU0VSVChleGVjLT5oYWRF
eGNlcHRpb24oKSk7CisgICAgICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwog
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KLSAgICAgICAgdW53
cmFwcGVkS2V5QWxnb3JpdGhtUGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFy
eTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckltcG9ydEtleShleGVjLCB1bndyYXBwZWRLZXlBbGdvcml0
aG0tPmlkZW50aWZpZXIoKSwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoNCkpOworICAgICAgICB1
bndyYXBwZWRLZXlBbGdvcml0aG1QYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9u
YXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9ySW1wb3J0S2V5KCZzdGF0ZSwgdW53cmFwcGVkS2V5QWxn
b3JpdGhtLT5pZGVudGlmaWVyKCksIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDQpKTsKICAgICAg
ICAgaWYgKCF1bndyYXBwZWRLZXlBbGdvcml0aG1QYXJhbWV0ZXJzKSB7Ci0gICAgICAgICAgICBB
U1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICAgICAgQVNTRVJUKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAg
ICB9CiAgICAgfQogCiAgICAgYm9vbCBleHRyYWN0YWJsZSA9IGZhbHNlOwotICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPj0gNikgewotICAgICAgICBleHRyYWN0YWJsZSA9IGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDUpLnRvQm9vbGVhbihleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPj0gNikgeworICAg
ICAgICBleHRyYWN0YWJsZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDUpLnRvQm9vbGVhbigm
c3RhdGUpOworICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBDcnlwdG9LZXlVc2FnZSBrZXlVc2Fn
ZXMgPSAwOwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gNykgewotICAgICAgICBp
ZiAoIWNyeXB0b0tleVVzYWdlc0Zyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDYpLCBr
ZXlVc2FnZXMpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwor
ICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPj0gNykgeworICAgICAgICBpZiAoIWNyeXB0
b0tleVVzYWdlc0Zyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCg2KSwga2V5VXNhZ2Vz
KSkgeworICAgICAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgSlNQcm9t
aXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUo
ZXhlYywgZ2xvYmFsT2JqZWN0KCkpOwotICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVyKGV4ZWMs
IGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwotICAgIFN0cm9uZzxKU0RPTUdsb2Jh
bE9iamVjdD4gZG9tR2xvYmFsT2JqZWN0KGV4ZWMtPnZtKCksIGdsb2JhbE9iamVjdCgpKTsKKyAg
ICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6
OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKKyAgICBEZWZlcnJlZFdyYXBwZXIgd3Jh
cHBlcigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOworICAgIFN0cm9u
ZzxKU0RPTUdsb2JhbE9iamVjdD4gZG9tR2xvYmFsT2JqZWN0KHN0YXRlLnZtKCksIGdsb2JhbE9i
amVjdCgpKTsKIAogICAgIENyeXB0b0FsZ29yaXRobSogdW53cmFwcGVkS2V5QWxnb3JpdGhtUHRy
ID0gdW53cmFwcGVkS2V5QWxnb3JpdGhtLnJlbGVhc2UoKTsKICAgICBDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzKiB1bndyYXBwZWRLZXlBbGdvcml0aG1QYXJhbWV0ZXJzUHRyID0gdW53cmFwcGVk
S2V5QWxnb3JpdGhtUGFyYW1ldGVycy5yZWxlYXNlKCk7CkBAIC03OTAsMTEgKzc5MCwxMSBAQCBK
U1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjp1bndyYXBLZXkoRXhlY1N0YXRlKiBleGVjKQogICAgICAg
ICBhdXRvIGltcG9ydEZhaWx1cmVDYWxsYmFjayA9IFt3cmFwcGVyXSgpIG11dGFibGUgewogICAg
ICAgICAgICAgd3JhcHBlci5yZWplY3QobnVsbHB0cik7CiAgICAgICAgIH07Ci0gICAgICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IGRvbUdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAgICAgICBX
ZWJDb3JlOjppbXBvcnRLZXkoZXhlYywga2V5Rm9ybWF0LCBzdGQ6Om1ha2VfcGFpcihyZXN1bHQu
ZGF0YSgpLCByZXN1bHQuc2l6ZSgpKSwgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobT4o
dW53cmFwcGVkS2V5QWxnb3JpdGhtUHRyKSwgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnM+KHVud3JhcHBlZEtleUFsZ29yaXRobVBhcmFtZXRlcnNQdHIpLCBleHRyYWN0
YWJsZSwga2V5VXNhZ2VzLCBXVEY6Om1vdmUoaW1wb3J0U3VjY2Vzc0NhbGxiYWNrKSwgV1RGOjpt
b3ZlKGltcG9ydEZhaWx1cmVDYWxsYmFjaykpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpIHsKKyAgICAgICAgRXhlY1N0YXRlJiBzdGF0ZSA9ICpkb21HbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKTsKKyAgICAgICAgV2ViQ29yZTo6aW1wb3J0S2V5KHN0YXRlLCBrZXlGb3JtYXQs
IHN0ZDo6bWFrZV9wYWlyKHJlc3VsdC5kYXRhKCksIHJlc3VsdC5zaXplKCkpLCBzdGQ6OnVuaXF1
ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtPih1bndyYXBwZWRLZXlBbGdvcml0aG1QdHIpLCBzdGQ6OnVu
aXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4odW53cmFwcGVkS2V5QWxnb3JpdGht
UGFyYW1ldGVyc1B0ciksIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIFdURjo6bW92ZShpbXBvcnRT
dWNjZXNzQ2FsbGJhY2spLCBXVEY6Om1vdmUoaW1wb3J0RmFpbHVyZUNhbGxiYWNrKSk7CisgICAg
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IFJl
cG9ydCBleGNlcHRpb24gZGV0YWlscyB0byBjb25zb2xlLCBhbmQgcG9zc2libHkgdG8gY2FsbGlu
ZyBzY3JpcHQgb25jZSB0aGVyZSBpcyBhIHN0YW5kYXJkaXplZCB3YXkgdG8gcGFzcyBlcnJvcnMg
dG8gV2ViQ3J5cHRvIHByb21pc2UgcmVqZWN0IGZ1bmN0aW9ucy4KLSAgICAgICAgICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgICAgICBzdGF0ZS5jbGVhckV4Y2VwdGlvbigpOwog
ICAgICAgICAgICAgaW1wb3J0RmFpbHVyZUNhbGxiYWNrKCk7CiAgICAgICAgIH0KICAgICB9OwpA
QCAtODEwLDcgKzgxMCw3IEBAIEpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OnVud3JhcEtleShFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgaWYgKGVjKSB7CiAgICAgICAgIGRlbGV0ZSB1bndyYXBwZWRLZXlB
bGdvcml0aG1QdHI7CiAgICAgICAgIGRlbGV0ZSB1bndyYXBwZWRLZXlBbGdvcml0aG1QYXJhbWV0
ZXJzUHRyOwotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBzZXRE
T01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJh
Y2tDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0
b20uY3BwCmluZGV4IDE4ODVjNTc3ZTUyNThhZTNkZTVkMmQyZDJhZGZjYjMwOTM5MWZmNzcuLmVi
MTlmMjU3ODcxOTlmMWU3MGU5OWFmN2FkMmZiMDQyN2NlOWY3NWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1c3RvbS5jcHAKQEAgLTQxLDI4ICs0MSwy
OCBAQCB2b2lkIEpTVGV4dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmaW1wbCgpKSk7CiB9
CiAKLXZvaWQgSlNUZXh0VHJhY2s6OnNldEtpbmQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZh
bHVlKQordm9pZCBKU1RleHRUcmFjazo6c2V0S2luZChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVl
IHZhbHVlKQogewogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCi0gICAgYXV0byYgc3RyaW5nID0g
dmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1
ZSgmc3RhdGUpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGltcGwoKS5zZXRLaW5kKHN0cmluZyk7CiAjZWxzZQotICAgIFVOVVNFRF9QQVJBTShl
eGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7
CiAjZW5kaWYKIH0KIAotdm9pZCBKU1RleHRUcmFjazo6c2V0TGFuZ3VhZ2UoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU1RleHRUcmFjazo6c2V0TGFuZ3VhZ2UoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQot
ICAgIGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgYXV0byYgc3RyaW5nID0gdmFsdWUudG9T
dHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsKCkuc2V0TGFuZ3VhZ2Uoc3RyaW5nKTsKICNl
bHNlCi0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNUcmFja0V2ZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTVHJhY2tFdmVudEN1c3RvbS5jcHAKaW5kZXggOTc5ZWUyYTMyMDliZjJm
MDNmNWQ3ODdiMDljNWVhMzFjYjQxMzMwOC4uZjUxZDNiOTYzYzgxODAzY2ZlNzFiOTQ3YjQyYzlk
YmQwMmJiODViZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmFj
a0V2ZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyYWNr
RXZlbnRDdXN0b20uY3BwCkBAIC0zNiwxMyArMzYsMTMgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlIEpTVHJhY2tFdmVudDo6dHJhY2soRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU1RyYWNrRXZlbnQ6OnRyYWNrKEV4ZWNTdGF0
ZSYgc3RhdGUpIGNvbnN0CiB7CiAgICAgVHJhY2tCYXNlKiB0cmFjayA9IGltcGwoKS50cmFjaygp
OwogICAgIGlmICghdHJhY2spCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCB0cmFjayk7CisgICAgcmV0dXJuIHRvSlMoJnN0
YXRlLCBnbG9iYWxPYmplY3QoKSwgdHJhY2spOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0
b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNw
cAppbmRleCA5NDg2Nzg4YTY2YjI0MjEzNzdkYWM1MTA2YjZiZjU1MjY3NjI3ZjAwLi42ZjBhZjVh
ZjVhOGVhMWUxZWE3ZTVmZTE5MWUwYzgwN2MyMDQxZTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAKQEAgLTQwLDI4ICs0MCwyOCBA
QCB2b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJmltcGwoKSkpOwogfQog
Ci12b2lkIEpTVmlkZW9UcmFjazo6c2V0S2luZChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFs
dWUpCit2b2lkIEpTVmlkZW9UcmFjazo6c2V0S2luZChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVl
IHZhbHVlKQogewogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCi0gICAgYXV0byYgc3RyaW5nID0g
dmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1
ZSgmc3RhdGUpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGltcGwoKS5zZXRLaW5kKHN0cmluZyk7CiAjZWxzZQotICAgIFVOVVNFRF9QQVJBTShl
eGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7
CiAjZW5kaWYKIH0KIAotdm9pZCBKU1ZpZGVvVHJhY2s6OnNldExhbmd1YWdlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNWaWRlb1RyYWNrOjpzZXRMYW5ndWFnZShFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0Up
Ci0gICAgYXV0byYgc3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50
b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwoKS5zZXRMYW5ndWFnZShzdHJpbmcpOwog
I2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0odmFsdWUpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Q3VzdG9tLmNwcAppbmRleCAyNzBiMTIwYTIzZWNmOGZmMzY5MmI0OWJkNWM2ZDIwNTA0NjZkNDJh
Li40ZTRlNWNhOThmYzE0OTAyYTJjYzAwMGI2YWIwNjM4OTBhMjFiMTY1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0
b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZUN1c3RvbS5jcHAKQEAgLTE2OCwxOCArMTY4LDE4IEBAIGVudW0gT2JqZWN0VHlw
ZSB7CiAgICAga0J1ZmZlciwga1JlbmRlcmJ1ZmZlciwga1RleHR1cmUsIGtWZXJ0ZXhBdHRyaWIK
IH07CiAKLXN0YXRpYyBKU1ZhbHVlIGdldE9iamVjdFBhcmFtZXRlcihKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UqIG9iaiwgRXhlY1N0YXRlKiBleGVjLCBPYmplY3RUeXBlIG9iamVjdFR5cGUp
CitzdGF0aWMgSlNWYWx1ZSBnZXRPYmplY3RQYXJhbWV0ZXIoSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlKiBvYmosIEV4ZWNTdGF0ZSYgc3RhdGUsIE9iamVjdFR5cGUgb2JqZWN0VHlwZSkKIHsK
LSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCi0gICAgICAgIHJldHVybiBleGVj
LT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGV4ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpICE9IDIpCisgICAgICAgIHJl
dHVybiBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAg
ICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IG9iai0+aW1wbCgpOwotICAg
IHVuc2lnbmVkIHRhcmdldCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoZXhl
Yyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIHVuc2lnbmVkIHRhcmdldCA9
IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoJnN0YXRlKTsKKyAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHVu
c2lnbmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgdW5zaWduZWQgcG5hbWUgPSBzdGF0
ZS51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBXZWJHTEdl
dEluZm8gaW5mbzsKICAgICBzd2l0Y2ggKG9iamVjdFR5cGUpIHsKQEAgLTIwMSwxMCArMjAxLDEw
IEBAIHN0YXRpYyBKU1ZhbHVlIGdldE9iamVjdFBhcmFtZXRlcihKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UqIG9iaiwgRXhlY1N0YXRlKiBlCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBp
ZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgb2JqLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7
CisgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBvYmotPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKIH0K
IAogZW51bSBXaGljaFByb2dyYW1DYWxsIHsKQEAgLTI2OCwxMzcgKzI2OCwxMzcgQEAgdm9pZCBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmaW1wbCgpKTsKIH0K
IAotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEF0dGFjaGVkU2hhZGVy
cyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
Z2V0QXR0YWNoZWRTaGFkZXJzKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0
aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAo
c3RhdGUuYXJndW1lbnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhy
b3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUp
KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlJiBjb250ZXh0ID0gaW1wbCgpOwotICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9IEpTV2Vi
R0xQcm9ncmFtOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlm
ICghcHJvZ3JhbSAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51
bGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgIFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSA9IEpTV2ViR0xQcm9ncmFtOjp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2Vk
QXJndW1lbnQoMCkpOworICAgIGlmICghcHJvZ3JhbSAmJiAhc3RhdGUudW5jaGVja2VkQXJndW1l
bnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9y
KCZzdGF0ZSk7CiAgICAgVmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+IHNoYWRlcnM7CiAgICAg
Ym9vbCBzdWNjZWVkID0gY29udGV4dC5nZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgc2hhZGVy
cywgZWMpOwogICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBq
c051bGwoKTsKICAgICB9CiAgICAgaWYgKCFzdWNjZWVkKQogICAgICAgICByZXR1cm4ganNOdWxs
KCk7CiAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwogICAgIGZvciAoc2l6ZV90
IGlpID0gMDsgaWkgPCBzaGFkZXJzLnNpemUoKTsgKytpaSkKLSAgICAgICAgbGlzdC5hcHBlbmQo
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgc2hhZGVyc1tpaV0uZ2V0KCkpKTsKLSAgICByZXR1
cm4gY29uc3RydWN0QXJyYXkoZXhlYywgMCwgZ2xvYmFsT2JqZWN0KCksIGxpc3QpOworICAgICAg
ICBsaXN0LmFwcGVuZCh0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHNoYWRlcnNbaWldLmdl
dCgpKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KCZzdGF0ZSwgMCwgZ2xvYmFsT2JqZWN0
KCksIGxpc3QpOwogfQogCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0
RXh0ZW5zaW9uKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpnZXRFeHRlbnNpb24oRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNl
cHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlm
IChzdGF0ZS5hcmd1bWVudENvdW50KCkgPCAxKQorICAgICAgICByZXR1cm4gc3RhdGUudm0oKS50
aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0
ZSkpOwogICAgIAogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBpbXBs
KCk7Ci0gICAgY29uc3QgU3RyaW5nIG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGNvbnN0IFN0cmluZyBuYW1lID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9T
dHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMRXh0ZW5zaW9uKiBl
eHRlbnNpb24gPSBjb250ZXh0LmdldEV4dGVuc2lvbihuYW1lKTsKLSAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QoKSwgZXh0ZW5zaW9uKTsKKyAgICByZXR1cm4gdG9KUygmc3RhdGUs
IGdsb2JhbE9iamVjdCgpLCBleHRlbnNpb24pOwogfQogCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6Z2V0QnVmZmVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCdWZmZXJQYXJhbWV0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMs
IGtCdWZmZXIpOworICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgc3RhdGUsIGtC
dWZmZXIpOwogfQogCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0RnJh
bWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9
IDMpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRD
b3VudCgpICE9IDMpCisgICAgICAgIHJldHVybiBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZz
dGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAgICAgCiAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29u
dGV4dCA9IGltcGwoKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBleGVjLT51bmNoZWNrZWRBcmd1
bWVudCgwKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKCZz
dGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICB1bnNpZ25lZCBhdHRhY2htZW50ID0gZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMSkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgdW5zaWduZWQgYXR0YWNobWVudCA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50
MzIoJnN0YXRlKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMikudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgdW5zaWduZWQgcG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKS50b0ludDMyKCZz
dGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0RnJhbWVidWZm
ZXJBdHRhY2htZW50UGFyYW1ldGVyKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIGVjKTsKICAg
ICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAg
c2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwor
ICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwogfQogCi1KU1Zh
bHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UGFyYW1ldGVyKEV4ZWNTdGF0ZSog
ZXhlYykKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRQYXJhbWV0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDEp
Ci0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3Vu
dCgpICE9IDEpCisgICAgICAgIHJldHVybiBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAgICAgCiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4
dCA9IGltcGwoKTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIHVu
c2lnbmVkIHBuYW1lID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMigmc3RhdGUp
OworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFBhcmFtZXRlcihwbmFt
ZSwgZWMpOwogICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIH0KLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qo
KSwgaW5mbyk7CisgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7
CiB9CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRQcm9ncmFtUGFy
YW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpnZXRQcm9ncmFtUGFyYW1ldGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJv
d0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Cisg
ICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gc3RhdGUu
dm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KCZzdGF0ZSkpOwogICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAgV2ViR0xQcm9ncmFtKiBw
cm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7Ci0gICAgaWYgKCFwcm9ncmFtICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7
Ci0gICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMy
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBXZWJHTFByb2dyYW0q
IHByb2dyYW0gPSBKU1dlYkdMUHJvZ3JhbTo6dG9XcmFwcGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKKyAgICBpZiAoIXByb2dyYW0gJiYgIXN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDAp
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3Rh
dGUpOworICAgIHVuc2lnbmVkIHBuYW1lID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkudG9J
bnQzMigmc3RhdGUpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFBy
b2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgcG5hbWUsIGVjKTsKICAgICBpZiAoZWMpIHsKLSAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZz
dGF0ZSwgZWMpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgcmV0
dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOworICAgIHJldHVybiB0b0pTKCZz
dGF0ZSwgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwogfQogCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykK
K0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRSZW5kZXJidWZmZXJQYXJh
bWV0ZXIoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVy
KHRoaXMsIGV4ZWMsIGtSZW5kZXJidWZmZXIpOworICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0
ZXIodGhpcywgc3RhdGUsIGtSZW5kZXJidWZmZXIpOwogfQogCi1KU1ZhbHVlIEpTV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Z2V0U2hhZGVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKK0pT
VmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRTaGFkZXJQYXJhbWV0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCi0g
ICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgp
ICE9IDIpCisgICAgICAgIHJldHVybiBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAgICAgCiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9
IGltcGwoKTsKLSAgICBpZiAoIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVk
T3JOdWxsKCkgJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmluaGVyaXRzKEpTV2ViR0xT
aGFkZXI6OmluZm8oKSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAg
ICBXZWJHTFNoYWRlciogc2hhZGVyID0gSlNXZWJHTFNoYWRlcjo6dG9XcmFwcGVkKGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmICghc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwo
KSAmJiAhc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkuaW5oZXJpdHMoSlNXZWJHTFNoYWRlcjo6
aW5mbygpKSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CisgICAgV2Vi
R0xTaGFkZXIqIHNoYWRlciA9IEpTV2ViR0xTaGFkZXI6OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNr
ZWRBcmd1bWVudCgwKSk7CisgICAgdW5zaWduZWQgcG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1
bWVudCgxKS50b0ludDMyKCZzdGF0ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNv
bnRleHQuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgcG5hbWUsIGVjKTsKICAgICBpZiAoZWMp
IHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9
Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOworICAgIHJldHVy
biB0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwogfQogCi1KU1ZhbHVlIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucyhFeGVjU3RhdGUq
IGV4ZWMpCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0U3VwcG9ydGVk
RXh0ZW5zaW9ucyhFeGVjU3RhdGUmIHN0YXRlKQogewogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7CiAgICAgaWYgKGNvbnRleHQuaXNDb250ZXh0TG9zdCgp
KQpAQCAtNDA2LDU5ICs0MDYsNTkgQEAgSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoRXhlY1N0YXRlKiBleGVjKQogICAgIFZlY3RvcjxT
dHJpbmc+IHZhbHVlID0gY29udGV4dC5nZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7CiAgICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKICAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgdmFs
dWUuc2l6ZSgpOyArK2lpKQotICAgICAgICBsaXN0LmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShl
eGVjLCB2YWx1ZVtpaV0pKTsKLSAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgMCwgZ2xv
YmFsT2JqZWN0KCksIGxpc3QpOworICAgICAgICBsaXN0LmFwcGVuZChqc1N0cmluZ1dpdGhDYWNo
ZSgmc3RhdGUsIHZhbHVlW2lpXSkpOworICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheSgmc3RhdGUs
IDAsIGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKIH0KIAotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmdldFRleFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VGV4UGFyYW1ldGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUpCiB7Ci0gICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVjLCBrVGV4dHVy
ZSk7CisgICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRlcih0aGlzLCBzdGF0ZSwga1RleHR1cmUp
OwogfQogCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VW5pZm9ybShF
eGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0
VW5pZm9ybShFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkgIT0gMikKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlmIChzdGF0ZS5hcmd1
bWVudENvdW50KCkgIT0gMikKKyAgICAgICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRp
b24oJnN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKICAgICAK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
JiBjb250ZXh0ID0gaW1wbCgpOwotICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9IEpTV2ViR0xQ
cm9ncmFtOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICgh
cHJvZ3JhbSAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwo
KSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgIFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7Ci0gICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJu
IHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9IEpTV2Vi
R0xQcm9ncmFtOjp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlm
ICghcHJvZ3JhbSAmJiAhc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51
bGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CisgICAgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFw
cGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICBpZiAoIWxvY2F0aW9uICYmICFz
dGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKICAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNv
bnRleHQuZ2V0VW5pZm9ybShwcm9ncmFtLCBsb2NhdGlvbiwgZWMpOwogICAgIGlmIChlYykgewot
ICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBzZXRET01FeGNlcHRp
b24oJnN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KLSAg
ICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7CisgICAgcmV0dXJuIHRv
SlMoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7CiB9CiAKLUpTVmFsdWUgSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpnZXRWZXJ0ZXhBdHRyaWIoRXhlY1N0YXRlKiBleGVjKQorSlNW
YWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFZlcnRleEF0dHJpYihFeGVjU3Rh
dGUmIHN0YXRlKQogewotICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhlYywg
a1ZlcnRleEF0dHJpYik7CisgICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRlcih0aGlzLCBzdGF0
ZSwga1ZlcnRleEF0dHJpYik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eT4KLWJvb2wgdG9WZWN0b3IoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQorYm9vbCB0b1Zl
Y3RvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQogewogICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9
IGFzT2JqZWN0KHZhbHVlKTsKLSAgICBpbnQzMl90IGxlbmd0aCA9IG9iamVjdC0+Z2V0KGV4ZWMs
IGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b0ludDMyKGV4ZWMpOworICAgIGlu
dDMyX3QgbGVuZ3RoID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBzdGF0ZS52bSgpLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCkudG9JbnQzMigmc3RhdGUpOwogICAgIAogICAgIGlmICghdmVjdG9yLnRyeVJl
c2VydmVDYXBhY2l0eShsZW5ndGgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgdmVjdG9y
LnJlc2l6ZShsZW5ndGgpOwogICAgIAogICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7Ci0gICAgICAgIEpTQzo6SlNWYWx1ZSB2ID0gb2JqZWN0LT5nZXQoZXhlYywgaSk7
Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgSlNDOjpKU1ZhbHVl
IHYgPSBvYmplY3QtPmdldCgmc3RhdGUsIGkpOworICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHZlY3RvcltpXSA9IHN0
YXRpY19jYXN0PFQ+KHYudG9OdW1iZXIoZXhlYykpOworICAgICAgICB2ZWN0b3JbaV0gPSBzdGF0
aWNfY2FzdDxUPih2LnRvTnVtYmVyKCZzdGF0ZSkpOwogICAgIH0KICAgICAKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTQ4NiwyNiArNDg2LDI2IEBAIHN0YXRpYyBib29sIGZ1bmN0aW9uRm9yVW5pZm9y
bShEYXRhRnVuY3Rpb25Ub0NhbGwgZikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBK
U0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uZihEYXRhRnVuY3Rpb25Ub0NhbGwgZiwgSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCitzdGF0aWMg
SlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmYoRGF0YUZ1bmN0aW9uVG9DYWxsIGYsIEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkKIHsKLSAg
ICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCi0gICAgICAgIHJldHVybiBleGVjLT52
bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4
ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpICE9IDIpCisgICAgICAgIHJldHVy
biBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoJnN0YXRlKSk7CiAgICAgCiAgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uID0gMDsKICAgICBsb25nIGluZGV4ID0gLTE7CiAgICAgCiAgICAgaWYgKGZ1bmN0aW9uRm9y
VW5pZm9ybShmKSkgewotICAgICAgICBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246
OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgICAgIGlmICghbG9j
YXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkp
Ci0gICAgICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgICAgIGxvY2F0
aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVkKHN0YXRlLnVuY2hlY2tlZEFy
Z3VtZW50KDApKTsKKyAgICAgICAgaWYgKCFsb2NhdGlvbiAmJiAhc3RhdGUudW5jaGVja2VkQXJn
dW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd1R5
cGVFcnJvcigmc3RhdGUpOwogICAgIH0gZWxzZQotICAgICAgICBpbmRleCA9IGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgICAgIGluZGV4ID0gc3RhdGUudW5j
aGVja2VkQXJndW1lbnQoMCkudG9JbnQzMigmc3RhdGUpOwogICAgIAotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgIAotICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IHdlYkdM
QXJyYXkgPSB0b0Zsb2F0MzJBcnJheShleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKKyAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiB3
ZWJHTEFycmF5ID0gdG9GbG9hdDMyQXJyYXkoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOwor
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC01MzcsMTMgKzUzNywxMyBA
QCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmYoRGF0YUZ1bmN0aW9uVG9DYWxsIGYs
IEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHNl
dERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgfQogICAgIAogICAgIFZlY3RvcjxmbG9hdCwgNjQ+IGFycmF5OwotICAgIGlmICghdG9W
ZWN0b3IoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSksIGFycmF5KSkKLSAgICAgICAg
cmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgIGlmICghdG9WZWN0b3Ioc3RhdGUsIHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBhcnJheSkpCisgICAgICAgIHJldHVybiB0aHJvd1R5
cGVFcnJvcigmc3RhdGUpOwogICAgIAogICAgIHN3aXRjaCAoZikgewogICAgIGNhc2UgZl91bmlm
b3JtMXY6CkBAIC01NzIsMjAgKzU3MiwyMCBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5j
dGlvbmYoRGF0YUZ1bmN0aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZQogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
KyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKLXN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uaShEYXRhRnVuY3Rpb25U
b0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Um
IGNvbnRleHQpCitzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmkoRGF0YUZ1bmN0aW9u
VG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSYgY29udGV4dCkKIHsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCi0gICAg
ICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpICE9
IDIpCisgICAgICAgIHJldHVybiBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAgICAgCi0gICAgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVk
KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIWxvY2F0aW9uICYmICFleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1
cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVkKHN0YXRlLnVuY2hlY2tlZEFy
Z3VtZW50KDApKTsKKyAgICBpZiAoIWxvY2F0aW9uICYmICFzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3Io
JnN0YXRlKTsKICAgICAKLSAgICBSZWZQdHI8SW50MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvSW50
MzJBcnJheShleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgUmVmUHRyPEludDMyQXJy
YXk+IHdlYkdMQXJyYXkgPSB0b0ludDMyQXJyYXkoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkp
OwogICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGlmICh3ZWJHTEFycmF5KSB7
CkBAIC02MDYsMTQgKzYwNiwxNCBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmko
RGF0YUZ1bmN0aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBlYyk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogICAgIAogICAgIAogICAgIFZlY3RvcjxpbnQs
IDY0PiBhcnJheTsKLSAgICBpZiAoIXRvVmVjdG9yKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDEpLCBhcnJheSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAg
ICBpZiAoIXRvVmVjdG9yKHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSwgYXJyYXkp
KQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKICAgICAKICAgICBzd2l0
Y2ggKGYpIHsKICAgICBjYXNlIGZfdW5pZm9ybTF2OgpAQCAtNjMyLDI0ICs2MzIsMjQgQEAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25pKERhdGFGdW5jdGlvblRvQ2FsbCBmLCBKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgV2UKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIAotICAgIHNl
dERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMp
OwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgSlNDOjpKU1ZhbHVlIGRh
dGFGdW5jdGlvbk1hdHJpeChEYXRhRnVuY3Rpb25NYXRyaXhUb0NhbGwgZiwgSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCitzdGF0aWMgSlND
OjpKU1ZhbHVlIGRhdGFGdW5jdGlvbk1hdHJpeChEYXRhRnVuY3Rpb25NYXRyaXhUb0NhbGwgZiwg
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0
KQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMykKLSAgICAgICAgcmV0dXJu
IGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IoZXhlYykpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgIT0gMykKKyAgICAg
ICAgcmV0dXJuIHN0YXRlLnZtKCkudGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKICAgICAKLSAgICBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5
cGVFcnJvcihleGVjKTsKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSBKU1dl
YkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkp
OworICAgIGlmICghbG9jYXRpb24gJiYgIXN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUpOwog
ICAgIAotICAgIGJvb2wgdHJhbnNwb3NlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9C
b29sZWFuKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCisgICAgYm9v
bCB0cmFuc3Bvc2UgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKS50b0Jvb2xlYW4oJnN0YXRl
KTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgIAotICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0b0Zs
b2F0MzJBcnJheShleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKSk7CisgICAgUmVmUHRyPEZsb2F0
MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvRmxvYXQzMkFycmF5KHN0YXRlLnVuY2hlY2tlZEFyZ3Vt
ZW50KDIpKTsKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpZiAod2ViR0xB
cnJheSkgewpAQCAtNjY1LDEzICs2NjUsMTMgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVu
Y3Rpb25NYXRyaXgoRGF0YUZ1bmN0aW9uTWF0cml4VG9DYWxsIGYsIEpTQzo6RXhlY1N0YXQKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgZWMpOworICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KICAgICAKICAgICBWZWN0b3I8Zmxv
YXQsIDY0PiBhcnJheTsKLSAgICBpZiAoIXRvVmVjdG9yKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDIpLCBhcnJheSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsK
KyAgICBpZiAoIXRvVmVjdG9yKHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSwgYXJy
YXkpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKICAgICAKICAgICBz
d2l0Y2ggKGYpIHsKICAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDJmdjoKQEAgLTY4NSw4MyArNjg1
LDgzIEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uTWF0cml4KERhdGFGdW5jdGlv
bk1hdHJpeFRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICAKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigm
c3RhdGUsIGVjKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNDOjpKU1ZhbHVl
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTFmdihKU0M6OkV4ZWNTdGF0ZSog
ZXhlYykKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0x
ZnYoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZf
dW5pZm9ybTF2LCBleGVjLCBpbXBsKCkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5p
Zm9ybTF2LCBzdGF0ZSwgaW1wbCgpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dW5pZm9ybTFpdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK0pTQzo6SlNW
YWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0xaXYoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlKQogewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTF2LCBleGVj
LCBpbXBsKCkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTF2LCBzdGF0ZSwg
aW1wbCgpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dW5pZm9ybTJmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yZnYoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQogewot
ICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTJ2LCBleGVjLCBpbXBsKCkpOworICAg
IHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTJ2LCBzdGF0ZSwgaW1wbCgpKTsKIH0KIAot
SlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTJpdihKU0M6
OkV4ZWNTdGF0ZSogZXhlYykKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnVuaWZvcm0yaXYoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIHJldHVybiBkYXRh
RnVuY3Rpb25pKGZfdW5pZm9ybTJ2LCBleGVjLCBpbXBsKCkpOworICAgIHJldHVybiBkYXRhRnVu
Y3Rpb25pKGZfdW5pZm9ybTJ2LCBzdGF0ZSwgaW1wbCgpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNmdihKU0M6OkV4ZWNTdGF0ZSogZXhl
YykKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0zZnYo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5p
Zm9ybTN2LCBleGVjLCBpbXBsKCkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9y
bTN2LCBzdGF0ZSwgaW1wbCgpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dW5pZm9ybTNpdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK0pTQzo6SlNWYWx1
ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0zaXYoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlKQogewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTN2LCBleGVjLCBp
bXBsKCkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTN2LCBzdGF0ZSwgaW1w
bCgpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5p
Zm9ybTRmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnVuaWZvcm00ZnYoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQogewotICAg
IHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTR2LCBleGVjLCBpbXBsKCkpOworICAgIHJl
dHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTR2LCBzdGF0ZSwgaW1wbCgpKTsKIH0KIAotSlND
OjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTRpdihKU0M6OkV4
ZWNTdGF0ZSogZXhlYykKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnVuaWZvcm00aXYoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIHJldHVybiBkYXRhRnVu
Y3Rpb25pKGZfdW5pZm9ybTR2LCBleGVjLCBpbXBsKCkpOworICAgIHJldHVybiBkYXRhRnVuY3Rp
b25pKGZfdW5pZm9ybTR2LCBzdGF0ZSwgaW1wbCgpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybU1hdHJpeDJmdihKU0M6OkV4ZWNTdGF0ZSog
ZXhlYykKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1N
YXRyaXgyZnYoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIHJldHVybiBkYXRhRnVuY3Rp
b25NYXRyaXgoZl91bmlmb3JtTWF0cml4MmZ2LCBleGVjLCBpbXBsKCkpOworICAgIHJldHVybiBk
YXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4MmZ2LCBzdGF0ZSwgaW1wbCgpKTsKIH0K
IAotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybU1hdHJp
eDNmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnVuaWZvcm1NYXRyaXgzZnYoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQogewot
ICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4M2Z2LCBleGVjLCBp
bXBsKCkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4M2Z2
LCBzdGF0ZSwgaW1wbCgpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dW5pZm9ybU1hdHJpeDRmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK0pTQzo6SlNW
YWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1NYXRyaXg0ZnYoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlKQogewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlm
b3JtTWF0cml4NGZ2LCBleGVjLCBpbXBsKCkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRy
aXgoZl91bmlmb3JtTWF0cml4NGZ2LCBzdGF0ZSwgaW1wbCgpKTsKIH0KIAotSlNDOjpKU1ZhbHVl
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliMWZ2KEpTQzo6RXhlY1N0
YXRlKiBleGVjKQorSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVy
dGV4QXR0cmliMWZ2KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICByZXR1cm4gZGF0YUZ1
bmN0aW9uZihmX3ZlcnRleEF0dHJpYjF2LCBleGVjLCBpbXBsKCkpOworICAgIHJldHVybiBkYXRh
RnVuY3Rpb25mKGZfdmVydGV4QXR0cmliMXYsIHN0YXRlLCBpbXBsKCkpOwogfQogCi1KU0M6OkpT
VmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIyZnYoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp2ZXJ0ZXhBdHRyaWIyZnYoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQogewotICAgIHJldHVybiBk
YXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliMnYsIGV4ZWMsIGltcGwoKSk7CisgICAgcmV0dXJu
IGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIydiwgc3RhdGUsIGltcGwoKSk7CiB9CiAKLUpT
Qzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjNmdihK
U0M6OkV4ZWNTdGF0ZSogZXhlYykKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnZlcnRleEF0dHJpYjNmdihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0
dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIzdiwgZXhlYywgaW1wbCgpKTsKKyAgICBy
ZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRleEF0dHJpYjN2LCBzdGF0ZSwgaW1wbCgpKTsKIH0K
IAotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmli
NGZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQorSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dmVydGV4QXR0cmliNGZ2KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAg
ICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRleEF0dHJpYjR2LCBleGVjLCBpbXBsKCkpOwor
ICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliNHYsIHN0YXRlLCBpbXBsKCkp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dvcmtlckN1c3RvbS5jcHAKaW5kZXggMjE3NWZjNmUxYTFjZWI1NWQ2ODA4MzdhZWU4
MWQ0NmVmY2U3OGZjZi4uMDVhOWU3MDJlN2M4MTliZjdiNzUxZDliZTc3YzExMmJlMzU5NGZiMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcApAQCAt
NDAsOSArNDAsOSBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUpTQzo6SlNWYWx1ZSBKU1dvcmtlcjo6cG9zdE1lc3NhZ2UoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMpCitKU0M6OkpTVmFsdWUgSlNXb3JrZXI6OnBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSkKIHsKLSAgICByZXR1cm4gaGFuZGxlUG9zdE1lc3NhZ2UoZXhlYywgJmltcGwoKSk7Cisg
ICAgcmV0dXJuIGhhbmRsZVBvc3RNZXNzYWdlKHN0YXRlLCAmaW1wbCgpKTsKIH0KIAogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dvcmtlcihFeGVjU3RhdGUqIGV4ZWMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNj
b3BlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFs
U2NvcGVDdXN0b20uY3BwCmluZGV4IDg1N2Q0ODA5YTdkMWNhZWY0YjhjNjFhNTY5MDg1ZTZiODZk
NTIwMWEuLjEyODk4Y2M5NzViZWY1MDBiM2IxMGRiYWYxZjY1MGE4NmRjM2MzMDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVD
dXN0b20uY3BwCkBAIC02Nyw0MyArNjcsNDMgQEAgYm9vbCBKU1dvcmtlckdsb2JhbFNjb3BlOjpn
ZXRPd25Qcm9wZXJ0eVNsb3REZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmEKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLUpTVmFsdWUgSlNXb3JrZXJHbG9iYWxTY29wZTo6aW1wb3J0
U2NyaXB0cyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTV29ya2VyR2xvYmFsU2NvcGU6Omlt
cG9ydFNjcmlwdHMoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50
Q291bnQoKSkKKyAgICBpZiAoIXN0YXRlLmFyZ3VtZW50Q291bnQoKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiB1cmxzOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50KCk7IGkrKykgewotICAgICAgICB1
cmxzLmFwcGVuZChleGVjLT51bmNoZWNrZWRBcmd1bWVudChpKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAg
IHVybHMuYXBwZW5kKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvU3RyaW5nKCZzdGF0ZSkt
PnZhbHVlKCZzdGF0ZSkpOworICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAg
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CiAKICAgICBpbXBsKCkuaW1wb3J0U2NyaXB0cyh1cmxzLCBlYyk7Ci0gICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7CiAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNXb3JrZXJHbG9iYWxTY29w
ZTo6c2V0VGltZW91dChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTV29ya2VyR2xvYmFsU2Nv
cGU6OnNldFRpbWVvdXQoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
U2NoZWR1bGVkQWN0aW9uPiBhY3Rpb24gPSBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZShleGVjLCBn
bG9iYWxPYmplY3QoKS0+d29ybGQoKSwgaW1wbCgpLmNvbnRlbnRTZWN1cml0eVBvbGljeSgpKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgc3RkOjp1bmlxdWVfcHRyPFNjaGVk
dWxlZEFjdGlvbj4gYWN0aW9uID0gU2NoZWR1bGVkQWN0aW9uOjpjcmVhdGUoJnN0YXRlLCBnbG9i
YWxPYmplY3QoKS0+d29ybGQoKSwgaW1wbCgpLmNvbnRlbnRTZWN1cml0eVBvbGljeSgpKTsKKyAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgIGlmICghYWN0aW9uKQogICAgICAgICByZXR1cm4ganNOdW1iZXIoMCk7Ci0gICAgaW50
IGRlbGF5ID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKKyAgICBpbnQgZGVsYXkg
PSBzdGF0ZS5hcmd1bWVudCgxKS50b0ludDMyKCZzdGF0ZSk7CiAgICAgcmV0dXJuIGpzTnVtYmVy
KGltcGwoKS5zZXRUaW1lb3V0KFdURjo6bW92ZShhY3Rpb24pLCBkZWxheSkpOwogfQogCi1KU1Zh
bHVlIEpTV29ya2VyR2xvYmFsU2NvcGU6OnNldEludGVydmFsKEV4ZWNTdGF0ZSogZXhlYykKK0pT
VmFsdWUgSlNXb3JrZXJHbG9iYWxTY29wZTo6c2V0SW50ZXJ2YWwoRXhlY1N0YXRlJiBzdGF0ZSkK
IHsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0aW9uPiBhY3Rpb24gPSBTY2hlZHVs
ZWRBY3Rpb246OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QoKS0+d29ybGQoKSwgaW1wbCgpLmNv
bnRlbnRTZWN1cml0eVBvbGljeSgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgc3RkOjp1bmlxdWVfcHRyPFNjaGVkdWxlZEFjdGlvbj4gYWN0aW9uID0gU2NoZWR1bGVkQWN0
aW9uOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKS0+d29ybGQoKSwgaW1wbCgpLmNvbnRl
bnRTZWN1cml0eVBvbGljeSgpKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGlmICghYWN0aW9uKQogICAgICAgICByZXR1
cm4ganNOdW1iZXIoMCk7Ci0gICAgaW50IGRlbGF5ID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQz
MihleGVjKTsKKyAgICBpbnQgZGVsYXkgPSBzdGF0ZS5hcmd1bWVudCgxKS50b0ludDMyKCZzdGF0
ZSk7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGltcGwoKS5zZXRJbnRlcnZhbChXVEY6Om1vdmUoYWN0
aW9uKSwgZGVsYXkpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAppbmRleCAwZjljMWNhZjAwMjJhYWYxZTdhOGQy
NDZkNTgxNWZiODE1MjAyNmNlLi4xMTU0NTc0NTMxZGNmZDVjOTM3YTY1ZjkyNWQwNDEzNmMwN2Ix
NmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1
ZXN0Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBS
ZXF1ZXN0Q3VzdG9tLmNwcApAQCAtNzIsMjIgKzcyLDIyIEBAIHZvaWQgSlNYTUxIdHRwUmVxdWVz
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB9CiAKIC8v
IEN1c3RvbSBmdW5jdGlvbnMKLUpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6b3BlbihFeGVjU3Rh
dGUqIGV4ZWMpCitKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6Om9wZW4oRXhlY1N0YXRlJiBzdGF0
ZSkKIHsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikKLSAgICAgICAgcmV0dXJu
IGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IoZXhlYykpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPCAyKQorICAgICAg
ICByZXR1cm4gc3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCi0gICAgY29uc3QgVVJMJiB1cmwgPSBpbXBsKCku
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5jb21wbGV0ZVVSTChleGVjLT51bmNoZWNrZWRBcmd1
bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAgIFN0cmluZyBtZXRob2Qg
PSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
CisgICAgY29uc3QgVVJMJiB1cmwgPSBpbXBsKCkuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5j
b21wbGV0ZVVSTChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKS50b1N0cmluZygmc3RhdGUpLT52
YWx1ZSgmc3RhdGUpKTsKKyAgICBTdHJpbmcgbWV0aG9kID0gc3RhdGUudW5jaGVja2VkQXJndW1l
bnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKIAogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMykgewotICAgICAg
ICBib29sIGFzeW5jID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMp
OwotICAgICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDMpLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAg
ICAgICAgIFN0cmluZyB1c2VyID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMykpOworICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkg
Pj0gMykgeworICAgICAgICBib29sIGFzeW5jID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMiku
dG9Cb29sZWFuKCZzdGF0ZSk7CisgICAgICAgIGlmICghc3RhdGUuYXJndW1lbnQoMykuaXNVbmRl
ZmluZWQoKSkgeworICAgICAgICAgICAgU3RyaW5nIHVzZXIgPSB2YWx1ZVRvU3RyaW5nV2l0aE51
bGxDaGVjaygmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDMpKTsKIAotICAgICAgICAg
ICAgaWYgKCFleGVjLT5hcmd1bWVudCg0KS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgICAgICAg
ICAgU3RyaW5nIHBhc3N3b3JkID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoNCkpOworICAgICAgICAgICAgaWYgKCFzdGF0ZS5hcmd1bWVu
dCg0KS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHBhc3N3b3JkID0g
dmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCg0KSk7CiAgICAgICAgICAgICAgICAgaW1wbCgpLm9wZW4obWV0aG9kLCB1cmwsIGFzeW5jLCB1
c2VyLCBwYXNzd29yZCwgZWMpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAg
aW1wbCgpLm9wZW4obWV0aG9kLCB1cmwsIGFzeW5jLCB1c2VyLCBlYyk7CkBAIC05Niw3ICs5Niw3
IEBAIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6b3BlbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAg
fSBlbHNlCiAgICAgICAgIGltcGwoKS5vcGVuKG1ldGhvZCwgdXJsLCBlYyk7CiAKLSAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsK
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApAQCAtMTM2LDEyICsxMzYsMTIgQEAgcHJp
dmF0ZToKICAgICBTdHJpbmcgbV91cmw7CiB9OwogCi1KU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6
OnNlbmQoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0OjpzZW5kKEV4
ZWNTdGF0ZSYgc3RhdGUpCiB7CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsU2Vu
ZFhNTEh0dHBSZXF1ZXN0KGltcGwoKS5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGltcGwoKS51
cmwoKSk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBKU1ZhbHVlIHZhbCA9IGV4
ZWMtPmFyZ3VtZW50KDApOworICAgIEpTVmFsdWUgdmFsID0gc3RhdGUuYXJndW1lbnQoMCk7CiAg
ICAgaWYgKHZhbC5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICBpbXBsKCkuc2VuZChlYyk7
CiAgICAgZWxzZSBpZiAodmFsLmluaGVyaXRzKEpTRG9jdW1lbnQ6OmluZm8oKSkpCkBAIC0xNTYs
MjggKzE1NiwyOCBAQCBKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnNlbmQoRXhlY1N0YXRlKiBl
eGVjKQogICAgICAgICBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiB2aWV3ID0gdG9BcnJheUJ1ZmZl
clZpZXcodmFsKTsKICAgICAgICAgaW1wbCgpLnNlbmQodmlldy5nZXQoKSwgZWMpOwogICAgIH0g
ZWxzZQotICAgICAgICBpbXBsKCkuc2VuZCh2YWwudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
LCBlYyk7CisgICAgICAgIGltcGwoKS5zZW5kKHZhbC50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgm
c3RhdGUpLCBlYyk7CiAKICAgICBTZW5kRnVuY3RvciBmdW5jdG9yOwotICAgIGV4ZWMtPml0ZXJh
dGUoZnVuY3Rvcik7CisgICAgc3RhdGUuaXRlcmF0ZShmdW5jdG9yKTsKICAgICBpbXBsKCkuc2V0
TGFzdFNlbmRMaW5lQW5kQ29sdW1uTnVtYmVyKGZ1bmN0b3IubGluZSgpLCBmdW5jdG9yLmNvbHVt
bigpKTsKICAgICBpbXBsKCkuc2V0TGFzdFNlbmRVUkwoZnVuY3Rvci51cmwoKSk7Ci0gICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7
CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNYTUxIdHRwUmVxdWVz
dDo6cmVzcG9uc2VUZXh0KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgSlNYTUxIdHRw
UmVxdWVzdDo6cmVzcG9uc2VUZXh0KEV4ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0CiB7CiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgU3RyaW5nIHRleHQgPSBpbXBsKCkucmVzcG9uc2VUZXh0
KGVjKTsKICAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
KyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICB9Ci0gICAgcmV0dXJuIGpzT3duZWRTdHJpbmdPck51bGwoZXhlYywg
dGV4dCk7CisgICAgcmV0dXJuIGpzT3duZWRTdHJpbmdPck51bGwoJnN0YXRlLCB0ZXh0KTsKIH0K
IAotSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZShFeGVjU3RhdGUqIGV4ZWMpIGNv
bnN0CitKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlKEV4ZWNTdGF0ZSYgc3RhdGUp
IGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFVzZSBDYWNoZWRBdHRyaWJ1dGUgZm9yIG90aGVyIHR5
cGVzIHRoYW4gSlNPTiBhcyB3ZWxsLgogICAgIGlmIChtX3Jlc3BvbnNlICYmIGltcGwoKS5yZXNw
b25zZUNhY2hlSXNWYWxpZCgpKQpAQCAtMTg5LDE1ICsxODksMTUgQEAgSlNWYWx1ZSBKU1hNTEh0
dHBSZXF1ZXN0OjpyZXNwb25zZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgc3dpdGNoIChp
bXBsKCkucmVzcG9uc2VUeXBlQ29kZSgpKSB7CiAgICAgY2FzZSBYTUxIdHRwUmVxdWVzdDo6UmVz
cG9uc2VUeXBlRGVmYXVsdDoKICAgICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpSZXNwb25zZVR5cGVU
ZXh0OgotICAgICAgICByZXR1cm4gcmVzcG9uc2VUZXh0KGV4ZWMpOworICAgICAgICByZXR1cm4g
cmVzcG9uc2VUZXh0KHN0YXRlKTsKIAogICAgIGNhc2UgWE1MSHR0cFJlcXVlc3Q6OlJlc3BvbnNl
VHlwZUpTT046CiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBKU09OUGFy
c2UoZXhlYywgaW1wbCgpLnJlc3BvbnNlVGV4dElnbm9yaW5nUmVzcG9uc2VUeXBlKCkpOworICAg
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTT05QYXJzZSgmc3RhdGUsIGltcGwoKS5yZXNwb25z
ZVRleHRJZ25vcmluZ1Jlc3BvbnNlVHlwZSgpKTsKICAgICAgICAgICAgIGlmICghdmFsdWUpCiAg
ICAgICAgICAgICAgICAgdmFsdWUgPSBqc051bGwoKTsKICAgICAgICAgICAgIEpTWE1MSHR0cFJl
cXVlc3QqIGpzUmVxdWVzdCA9IGNvbnN0X2Nhc3Q8SlNYTUxIdHRwUmVxdWVzdCo+KHRoaXMpOwot
ICAgICAgICAgICAganNSZXF1ZXN0LT5tX3Jlc3BvbnNlLnNldChleGVjLT52bSgpLCBqc1JlcXVl
c3QsIHZhbHVlKTsKKyAgICAgICAgICAgIGpzUmVxdWVzdC0+bV9yZXNwb25zZS5zZXQoc3RhdGUu
dm0oKSwganNSZXF1ZXN0LCB2YWx1ZSk7CiAKICAgICAgICAgICAgIGltcGwoKS5kaWRDYWNoZVJl
c3BvbnNlSlNPTigpOwogCkBAIC0yMDksMTcgKzIwOSwxNyBAQCBKU1ZhbHVlIEpTWE1MSHR0cFJl
cXVlc3Q6OnJlc3BvbnNlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICAgICAgICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwogICAgICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gaW1wbCgp
LnJlc3BvbnNlWE1MKGVjKTsKICAgICAgICAgICAgIGlmIChlYykgewotICAgICAgICAgICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgICAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKCZzdGF0ZSwgZWMpOwogICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
KCksIGRvY3VtZW50KTsKKyAgICAgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0KCksIGRvY3VtZW50KTsKICAgICAgICAgfQogCiAgICAgY2FzZSBYTUxIdHRwUmVxdWVzdDo6
UmVzcG9uc2VUeXBlQmxvYjoKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
KCksIGltcGwoKS5yZXNwb25zZUJsb2IoKSk7CisgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwg
Z2xvYmFsT2JqZWN0KCksIGltcGwoKS5yZXNwb25zZUJsb2IoKSk7CiAKICAgICBjYXNlIFhNTEh0
dHBSZXF1ZXN0OjpSZXNwb25zZVR5cGVBcnJheUJ1ZmZlcjoKLSAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0KCksIGltcGwoKS5yZXNwb25zZUFycmF5QnVmZmVyKCkpOworICAg
ICAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBpbXBsKCkucmVzcG9uc2VB
cnJheUJ1ZmZlcigpKTsKICAgICB9CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDdXN0b20uY3Bw
CmluZGV4IGQ5OGFlMDQyZTEyYzA1ODAyNmM1ZGU1ZTI5YjE2NmI3ZjU2YjgxYWMuLjMzMWI5ZjFi
MGJiZjU3OWFjNDUyZDA3ZWRjMWI5ZjY1OGZjZjYxNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcApAQCAtNDYsMzMgKzQ2
LDMzIEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNW
YWx1ZSBKU1hTTFRQcm9jZXNzb3I6OnNldFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCitKU1Zh
bHVlIEpTWFNMVFByb2Nlc3Nvcjo6c2V0UGFyYW1ldGVyKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Ci0g
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkgfHwgZXhlYy0+YXJn
dW1lbnQoMikuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICBpZiAoc3RhdGUuYXJndW1lbnQoMSku
aXNVbmRlZmluZWRPck51bGwoKSB8fCBzdGF0ZS5hcmd1bWVudCgyKS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsgLy8gVGhyb3cgZXhjZXB0aW9uPwot
ICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgU3RyaW5nIGxvY2FsTmFtZSA9IGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBTdHJp
bmcgdmFsdWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CisgICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3Vt
ZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgU3RyaW5nIGxvY2Fs
TmFtZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVl
KCZzdGF0ZSk7CisgICAgU3RyaW5nIHZhbHVlID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMiku
dG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKICAgICBpbXBsKCkuc2V0UGFyYW1ldGVy
KG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lLCB2YWx1ZSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKLUpTVmFsdWUgSlNYU0xUUHJvY2Vzc29yOjpnZXRQYXJhbWV0ZXIoRXhlY1N0YXRl
KiBleGVjKQorSlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6OmdldFBhcmFtZXRlcihFeGVjU3RhdGUm
IHN0YXRlKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQorICAgIGlmIChzdGF0ZS5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIFN0
cmluZyBsb2NhbE5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7CisgICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IHN0YXRlLnVuY2hlY2tl
ZEFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CisgICAgU3RyaW5n
IGxvY2FsTmFtZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvU3RyaW5nKCZzdGF0ZSkt
PnZhbHVlKCZzdGF0ZSk7CiAgICAgU3RyaW5nIHZhbHVlID0gaW1wbCgpLmdldFBhcmFtZXRlcihu
YW1lc3BhY2VVUkksIGxvY2FsTmFtZSk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nT3JVbmRlZmluZWQo
ZXhlYywgdmFsdWUpOworICAgIHJldHVybiBqc1N0cmluZ09yVW5kZWZpbmVkKCZzdGF0ZSwgdmFs
dWUpOwogfQogCi1KU1ZhbHVlIEpTWFNMVFByb2Nlc3Nvcjo6cmVtb3ZlUGFyYW1ldGVyKEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNYU0xUUHJvY2Vzc29yOjpyZW1vdmVQYXJhbWV0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWRP
ck51bGwoKSkKKyAgICBpZiAoc3RhdGUuYXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
LSAgICBTdHJpbmcgbG9jYWxOYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIFN0cmluZyBuYW1lc3BhY2VVUkkgPSBzdGF0ZS51
bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOworICAg
IFN0cmluZyBsb2NhbE5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKS50b1N0cmluZygm
c3RhdGUpLT52YWx1ZSgmc3RhdGUpOwogICAgIGltcGwoKS5yZW1vdmVQYXJhbWV0ZXIobmFtZXNw
YWNlVVJJLCBsb2NhbE5hbWUpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0g
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRl
eCBkZjQ0ZDJmZWRiN2NmZmQxZWYzMzYyOWU4OGU1MThkYjhjOGJmYTQ4Li5lMTkxNWFhM2EwY2Q3
NDM0OWJkZTQ5MGM4ZTQ2ODQ2MTVmYjJkMWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQpAQCAtMTA3NywxMiArMTA3NywxMiBA
QCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgICAgIGlmIChIYXNDdXN0b21HZXR0ZXIoJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMpKSB7CiAgICAgICAgICAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYg
JGNvbmRpdGlvbmFsU3RyaW5nOwogICAgICAgICAgICAgICAgIG15ICRtZXRob2ROYW1lID0gJGNv
ZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lKTsKLSAg
ICAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIEpTQzo6SlNWYWx1ZSAiIC4g
JG1ldGhvZE5hbWUgLiAiKEpTQzo6RXhlY1N0YXRlKikgY29uc3Q7XG4iKTsKKyAgICAgICAgICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIEpTQzo6SlNWYWx1ZSAiIC4gJG1ldGhvZE5h
bWUgLiAiKEpTQzo6RXhlY1N0YXRlJikgY29uc3Q7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiI2VuZGlmXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBpZiAoSGFzQ3VzdG9tU2V0dGVyKCRhdHRyaWJ1dGUtPnNp
Z25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKSAmJiAhSXNSZWFkb25seSgkYXR0cmlidXRlKSkg
ewogICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjaWYgJHtjb25kaXRpb25h
bFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKLSAgICAgICAgICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgc2V0IiAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2Zp
cnN0KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSkgLiAiKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgdm9pZCBzZXQiIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGF0dHJpYnV0ZS0+c2ln
bmF0dXJlLT5uYW1lKSAuICIoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpO1xuIik7CiAg
ICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNlbmRpZlxuIikgaWYgJGNvbmRp
dGlvbmFsU3RyaW5nOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMTE3LDcgKzExMTcs
NyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgICAgIG15ICRjb25kaXRpb25hbFN0cmlu
ZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRmdW5jdGlvbi0+
c2lnbmF0dXJlKTsKICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjaWYgJHtjb25k
aXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKICAgICAgICAgICAgIG15
ICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRBcyJ9IHx8ICRjb2RlR2VuZXJhdG9yLT5XS19s
Y2ZpcnN0KCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lKTsKLSAgICAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgIiAuICgkZnVuY3Rpb24tPmlzU3RhdGljID8gInN0YXRpYyAiIDog
IiIpIC4gIkpTQzo6SlNWYWx1ZSAiIC4gJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lIC4gIihK
U0M6OkV4ZWNTdGF0ZSopO1xuIik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgICIgLiAoJGZ1bmN0aW9uLT5pc1N0YXRpYyA/ICJzdGF0aWMgIiA6ICIiKSAuICJKU0M6OkpT
VmFsdWUgIiAuICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSAuICIoSlNDOjpFeGVjU3RhdGUm
KTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNlbmRpZlxuIikgaWYg
JGNvbmRpdGlvbmFsU3RyaW5nOwogICAgICAgICB9CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICRlbmRBcHBsZUNvcHlyaWdodCkgaWYgJGluQXBwbGVDb3B5cmlnaHQ7CkBAIC0yMzMzLDcg
KzIzMzMsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgfSAjIGF0
dHJpYnV0ZSBOb25kZXRlcm1pbmlzdGljCiAKICAgICAgICAgICAgIGlmIChIYXNDdXN0b21HZXR0
ZXIoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMpKSB7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShj
YXN0ZWRUaGlzLT4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZShzdGF0ZSkpO1xuIik7CisgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShj
YXN0ZWRUaGlzLT4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgqc3RhdGUpKTtcbiIpOwogICAgICAg
ICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiQ2hlY2tTZWN1cml0eUZvck5vZGUifSkgewogICAgICAgICAgICAgICAgICRpbXBsSW5jbHVk
ZXN7IkpTRE9NQmluZGluZy5oIn0gPSAxOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7XG4iKTsKQEAgLTI2MTgs
NyArMjYxOCw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIGlmIChIYXNDdXN0b21TZXR0ZXIoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMpKSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgY2FzdGVkVGhpcy0+c2V0JGltcGxTZXR0ZXJGdW5jdGlvbk5hbWUoc3RhdGUsIHZhbHVl
KTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGNhc3RlZFRo
aXMtPnNldCRpbXBsU2V0dGVyRnVuY3Rpb25OYW1lKCpzdGF0ZSwgdmFsdWUpO1xuIik7CiAgICAg
ICAgICAgICB9IGVsc2lmICgkdHlwZSBlcSAiRXZlbnRIYW5kbGVyIikgewogICAgICAgICAgICAg
ICAgICRpbXBsSW5jbHVkZXN7IkpTRXZlbnRMaXN0ZW5lci5oIn0gPSAxOwogICAgICAgICAgICAg
ICAgIG15ICRldmVudE5hbWUgPSBFdmVudEhhbmRsZXJBdHRyaWJ1dGVFdmVudE5hbWUoJGF0dHJp
YnV0ZSk7CkBAIC0yODc0LDcgKzI4NzQsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgog
ICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmICgkaXNDdXN0b20pIHsKLSAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShjYXN0ZWRUaGlzLT4iIC4gJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lIC4gIihz
dGF0ZSkpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+IiAuICRmdW5jdGlvbkltcGxlbWVu
dGF0aW9uTmFtZSAuICIoKnN0YXRlKSk7XG4iKTsKICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+aW1wbCgpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIGlmICgkc3ZnUHJv
cGVydHlUeXBlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCmluZGV4IGE4YzE1ZTYwMDNmZDQyNzUx
YWViNWQ3NDdhNmY2ZDdmMTkyNjU2NDIuLmE0Y2FkMGNjMGM3ZjljMThiMWVjZGIzNDRiNDJiYjQ1
ZDE4MjQ4YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCkBAIC01MTUsNyArNTE1LDcgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjMoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNPYmplY3QqIHNsb3RCYXMKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVO
VVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNU
ZXN0SW50ZXJmYWNlKj4oc2xvdEJhc2UpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2Fz
dGVkVGhpcy0+aW1wbGVtZW50c1N0cjMoc3RhdGUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGNhc3RlZFRoaXMtPmltcGxlbWVudHNTdHIzKCpzdGF0ZSkpOwogfQogCiAjZW5kaWYKQEAg
LTYwOCw3ICs2MDgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50
YWxTdHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QgogICAgIFVOVVNFRF9QQVJB
TShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgYXV0byogY2Fz
dGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihzbG90QmFzZSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5zdXBwbGVtZW50YWxTdHIzKHN0YXRlKSk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5zdXBwbGVtZW50YWxTdHIzKCpz
dGF0ZSkpOwogfQogCiAjZW5kaWYKQEAgLTcwNCw3ICs3MDQsNyBAQCB2b2lkIHNldEpTVGVzdElu
dGVyZmFjZUltcGxlbWVudHNTdHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlT2Jq
ZWN0LCBFbgogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4o
YmFzZU9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKLSAgICBjYXN0ZWRUaGlzLT5zZXRJbXBsZW1lbnRzU3RyMyhzdGF0ZSwgdmFs
dWUpOworICAgIGNhc3RlZFRoaXMtPnNldEltcGxlbWVudHNTdHIzKCpzdGF0ZSwgdmFsdWUpOwog
fQogCiAjZW5kaWYKQEAgLTc3NSw3ICs3NzUsNyBAQCB2b2lkIHNldEpTVGVzdEludGVyZmFjZVN1
cHBsZW1lbnRhbFN0cjMoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsCiAg
ICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihiYXNlT2JqZWN0
KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwotICAgIGNhc3RlZFRoaXMtPnNldFN1cHBsZW1lbnRhbFN0cjMoc3RhdGUsIHZhbHVlKTsKKyAg
ICBjYXN0ZWRUaGlzLT5zZXRTdXBwbGVtZW50YWxTdHIzKCpzdGF0ZSwgdmFsdWUpOwogfQogCiAj
ZW5kaWYKQEAgLTg1OSw3ICs4NTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDMoRQogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpCiAgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJy
b3IoKnN0YXRlLCAiVGVzdEludGVyZmFjZSIsICJpbXBsZW1lbnRzTWV0aG9kMyIpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0SW50ZXJmYWNlOjppbmZv
KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+aW1wbGVtZW50c01l
dGhvZDMoc3RhdGUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmlt
cGxlbWVudHNNZXRob2QzKCpzdGF0ZSkpOwogfQogCiAjZW5kaWYKQEAgLTkyNSw3ICs5MjUsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1
bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
CiAgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdEludGVyZmFj
ZSIsICJzdXBwbGVtZW50YWxNZXRob2QzIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
UyhjYXN0ZWRUaGlzLCBKU1Rlc3RJbnRlcmZhY2U6OmluZm8oKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShjYXN0ZWRUaGlzLT5zdXBwbGVtZW50YWxNZXRob2QzKHN0YXRlKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5zdXBwbGVtZW50YWxNZXRob2QzKCpz
dGF0ZSkpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaAppbmRleCA0N2YwNzgyOTFmYzdl
MzIwYzBkOGI4ZjRjMDRmNmRjYTIzZmFlZDI5Li4xMGNmOGZiMjQwNjEyMWQwYTcwYmVhMmNiNTVh
YWIzODhlYWU0YzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5oCkBAIC02MCwyNCArNjAsMjQgQEAgcHVi
bGljOgogCiAgICAgLy8gQ3VzdG9tIGF0dHJpYnV0ZXMKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIp
IHx8IEVOQUJMRShDb25kaXRpb24yMykKLSAgICBKU0M6OkpTVmFsdWUgaW1wbGVtZW50c1N0cjMo
SlNDOjpFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBKU0M6OkpTVmFsdWUgaW1wbGVtZW50c1N0cjMo
SlNDOjpFeGVjU3RhdGUmKSBjb25zdDsKICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRpb24yMikg
fHwgRU5BQkxFKENvbmRpdGlvbjIzKQotICAgIHZvaWQgc2V0SW1wbGVtZW50c1N0cjMoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpOworICAgIHZvaWQgc2V0SW1wbGVtZW50c1N0cjMoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKENvbmRpdGlv
bjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0gICAgSlNDOjpKU1ZhbHVlIHN1cHBsZW1lbnRh
bFN0cjMoSlNDOjpFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBKU0M6OkpTVmFsdWUgc3VwcGxlbWVu
dGFsU3RyMyhKU0M6OkV4ZWNTdGF0ZSYpIGNvbnN0OwogI2VuZGlmCiAjaWYgRU5BQkxFKENvbmRp
dGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0gICAgdm9pZCBzZXRTdXBwbGVtZW50YWxT
dHIzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsKKyAgICB2b2lkIHNldFN1cHBsZW1l
bnRhbFN0cjMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwogI2VuZGlmCiAKICAgICAv
LyBDdXN0b20gZnVuY3Rpb25zCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMjMpCi0gICAgSlNDOjpKU1ZhbHVlIGltcGxlbWVudHNNZXRob2QzKEpTQzo6RXhlY1N0
YXRlKik7CisgICAgSlNDOjpKU1ZhbHVlIGltcGxlbWVudHNNZXRob2QzKEpTQzo6RXhlY1N0YXRl
Jik7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24x
MikKLSAgICBKU0M6OkpTVmFsdWUgc3VwcGxlbWVudGFsTWV0aG9kMyhKU0M6OkV4ZWNTdGF0ZSop
OworICAgIEpTQzo6SlNWYWx1ZSBzdXBwbGVtZW50YWxNZXRob2QzKEpTQzo6RXhlY1N0YXRlJik7
CiAjZW5kaWYKICAgICBUZXN0SW50ZXJmYWNlJiBpbXBsKCkgY29uc3QgeyByZXR1cm4gKm1faW1w
bDsgfQogICAgIHZvaWQgcmVsZWFzZUltcGwoKSB7IHN0ZDo6ZXhjaGFuZ2UobV9pbXBsLCBudWxs
cHRyKS0+ZGVyZWYoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAppbmRleCBhMDIyYWY0YjJkNWIwMDg3ZTMwNDMwMzk1
NWQ0ODlkOTEzMDJhNWYxLi44MDE5NzhkZTFiNDBmNGZiMDdlNGFkMGZiNzZhNGNlZWFiZDVmNDA1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T2JqLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T2JqLmNwcApAQCAtMTMwMiw3ICsxMzAyLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQ3VzdG9tQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29k
ZWQKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFs
dWUpOwogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oc2xvdEJhc2Up
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+Y3VzdG9tQXR0cihzdGF0
ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+Y3VzdG9tQXR0cigq
c3RhdGUpKTsKIH0KIAogCkBAIC0yNTczLDcgKzI1NzMsNyBAQCB2b2lkIHNldEpTVGVzdE9iakN1
c3RvbUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRK
U1ZhbAogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oYmFzZU9iamVj
dCk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKLSAgICBjYXN0ZWRUaGlzLT5zZXRDdXN0b21BdHRyKHN0YXRlLCB2YWx1ZSk7CisgICAgY2Fz
dGVkVGhpcy0+c2V0Q3VzdG9tQXR0cigqc3RhdGUsIHZhbHVlKTsKIH0KIAogCkBAIC0zNDg3LDcg
KzM0ODcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kKEV4ZWNTdGF0ZSogcwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpCiAgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJjdXN0b21NZXRob2QiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNh
c3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGNhc3RlZFRoaXMtPmN1c3RvbU1ldGhvZChzdGF0ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoY2FzdGVkVGhpcy0+Y3VzdG9tTWV0aG9kKCpzdGF0ZSkpOwogfQogCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9k
V2l0aEFyZ3MoRXhlY1N0YXRlKiBzdGF0ZSkKQEAgLTM0OTcsNyArMzQ5Nyw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRo
b2RXaXRoQXJncyhFeGVjCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKICAgICAgICAg
cmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImN1c3RvbU1ldGhv
ZFdpdGhBcmdzIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBK
U1Rlc3RPYmo6OmluZm8oKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlz
LT5jdXN0b21NZXRob2RXaXRoQXJncyhzdGF0ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoY2FzdGVkVGhpcy0+Y3VzdG9tTWV0aG9kV2l0aEFyZ3MoKnN0YXRlKSk7CiB9CiAKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BZGRFdmVu
dExpc3RlbmVyKEV4ZWNTdGF0ZSogc3RhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKaW5kZXggMzU0NjMxMWI0YjVmZGZkMWJl
ODgwNzJlYTJkOTZiYmJmZmY2ODRlOS4uODhjYWI4NjkwMmJiY2ViNjg2MDU3MWJlMGRkYzA0NTY0
NDEzMWU5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE9iai5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPYmouaApAQCAtNTgsMTMgKzU4LDEzIEBAIHB1YmxpYzoKIAogCiAgICAgLy8g
Q3VzdG9tIGF0dHJpYnV0ZXMKLSAgICBKU0M6OkpTVmFsdWUgY3VzdG9tQXR0cihKU0M6OkV4ZWNT
dGF0ZSopIGNvbnN0OwotICAgIHZvaWQgc2V0Q3VzdG9tQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSk7CisgICAgSlNDOjpKU1ZhbHVlIGN1c3RvbUF0dHIoSlNDOjpFeGVjU3RhdGUm
KSBjb25zdDsKKyAgICB2b2lkIHNldEN1c3RvbUF0dHIoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOwogCiAgICAgLy8gQ3VzdG9tIGZ1bmN0aW9ucwotICAgIEpTQzo6SlNWYWx1ZSBjdXN0
b21NZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICBKU0M6OkpTVmFsdWUgY3VzdG9tTWV0aG9k
V2l0aEFyZ3MoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNsYXNz
TWV0aG9kMihKU0M6OkV4ZWNTdGF0ZSopOworICAgIEpTQzo6SlNWYWx1ZSBjdXN0b21NZXRob2Qo
SlNDOjpFeGVjU3RhdGUmKTsKKyAgICBKU0M6OkpTVmFsdWUgY3VzdG9tTWV0aG9kV2l0aEFyZ3Mo
SlNDOjpFeGVjU3RhdGUmKTsKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNsYXNzTWV0aG9kMihK
U0M6OkV4ZWNTdGF0ZSYpOwogICAgIFRlc3RPYmomIGltcGwoKSBjb25zdCB7IHJldHVybiAqbV9p
bXBsOyB9CiAgICAgdm9pZCByZWxlYXNlSW1wbCgpIHsgc3RkOjpleGNoYW5nZShtX2ltcGwsIG51
bGxwdHIpLT5kZXJlZigpOyB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>