<?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>181021</bug_id>
          
          <creation_ts>2017-12-20 01:55:15 -0800</creation_ts>
          <short_desc>Move list and multicolumn building code from RenderTreeUpdater to RenderTreeBuilder</short_desc>
          <delta_ts>2017-12-20 08:35:12 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1383572</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-12-20 01:55:15 -0800</bug_when>
    <thetext>It is the place to be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383573</commentid>
    <comment_count>1</comment_count>
      <attachid>329905</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-12-20 01:58:12 -0800</bug_when>
    <thetext>Created attachment 329905
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383646</commentid>
    <comment_count>2</comment_count>
      <attachid>329905</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-12-20 08:33:41 -0800</bug_when>
    <thetext>Comment on attachment 329905
patch

Clearing flags on attachment: 329905

Committed r226179: &lt;https://trac.webkit.org/changeset/226179&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383647</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-12-20 08:33:42 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383650</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-12-20 08:35:12 -0800</bug_when>
    <thetext>&lt;rdar://problem/36156495&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329905</attachid>
            <date>2017-12-20 01:58:12 -0800</date>
            <delta_ts>2017-12-20 08:33:41 -0800</delta_ts>
            <desc>patch</desc>
            <filename>rtb-list-multicol-2.patch</filename>
            <type>text/plain</type>
            <size>57682</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNjE3MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDE3LTEyLTIwICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIGxpc3QgYW5kIG11bHRp
Y29sdW1uIGJ1aWxkaW5nIGNvZGUgZnJvbSBSZW5kZXJUcmVlVXBkYXRlciB0byBSZW5kZXJUcmVl
QnVpbGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTgxMDIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
UmVuZGVyVHJlZVVwZGF0ZXI6Okxpc3RJdGVtIC0+IFJlbmRlclRyZWVCdWlsZGVyOjpMaXN0Cisg
ICAgICAgIFJlbmRlclRyZWVVcGRhdGVyOjpNdWx0aUNvbHVtbiAtPiBSZW5kZXJUcmVlQnVpbGRl
cjo6TXVsdGlDb2x1bW4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dEF1
dG9TaXppbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9TaXppbmdWYWx1ZTo6YWRq
dXN0VGV4dE5vZGVTaXplcyk6CisgICAgICAgICogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRy
ZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVCdWlsZGVyOjpSZW5k
ZXJUcmVlQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQnVpbGRlcjo6dXBk
YXRlQWZ0ZXJEZXNjZW5kYW50cyk6CisgICAgICAgICogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRl
clRyZWVCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQnVpbGRlcjo6bGlz
dEJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZUJ1aWxkZXI6Om11bHRpQ29s
dW1uQnVpbGRlcik6CisgICAgICAgICogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWls
ZGVyTGlzdC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGlu
Zy9SZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRyZWVCdWlsZGVyOjpMaXN0OjpMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVC
dWlsZGVyOjpMaXN0Ojp1cGRhdGVJdGVtTWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRyZWVVcGRhdGVyOjpMaXN0SXRlbTo6dXBkYXRlTWFya2VyKTogRGVsZXRlZC4KKyAgICAgICAg
KiByZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJMaXN0Lmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlckxpc3RJ
dGVtLmguCisgICAgICAgICogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyTXVs
dGlDb2x1bW4uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRp
bmcvUmVuZGVyVHJlZVVwZGF0ZXJNdWx0aUNvbHVtbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUcmVlQnVpbGRlcjo6TXVsdGlDb2x1bW46Ok11bHRpQ29sdW1uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRyZWVCdWlsZGVyOjpNdWx0aUNvbHVtbjo6dXBkYXRlQWZ0ZXJEZXNjZW5k
YW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQnVpbGRlcjo6TXVsdGlDb2x1bW46
OmNyZWF0ZUZyYWdtZW50ZWRGbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVCdWls
ZGVyOjpNdWx0aUNvbHVtbjo6ZGVzdHJveUZyYWdtZW50ZWRGbG93KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRyZWVVcGRhdGVyOjpNdWx0aUNvbHVtbjo6dXBkYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVVcGRhdGVyOjpNdWx0aUNvbHVtbjo6Y3JlYXRlRnJh
Z21lbnRlZEZsb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZVVwZGF0
ZXI6Ok11bHRpQ29sdW1uOjpkZXN0cm95RnJhZ21lbnRlZEZsb3cpOiBEZWxldGVkLgorICAgICAg
ICAqIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlck11bHRpQ29sdW1uLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBk
YXRlck11bHRpQ29sdW1uLmguCisgICAgICAgICogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRy
ZWVVcGRhdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVVcGRhdGVyOjpjb21t
aXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZVVwZGF0ZXI6OnVwZGF0ZUFmdGVyRGVz
Y2VuZGFudHMpOgorICAgICAgICAqIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRl
ci5oOgorICAgICAgICAqIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlckdlbmVy
YXRlZENvbnRlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZVVwZGF0ZXI6Okdl
bmVyYXRlZENvbnRlbnQ6OnVwZGF0ZVBzZXVkb0VsZW1lbnQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5oOiBSZW1v
dmVkLgorICAgICAgICAqIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlck11bHRp
Q29sdW1uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVy
VHJlZVVwZGF0ZXJNdWx0aUNvbHVtbi5oOiBSZW1vdmVkLgorCiAyMDE3LTEyLTE5ICBNeWxlcyBD
LiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgUmVmYWN0b3IgdXNl
ci1pbnN0YWxsZWQgZm9udCBzZXR0aW5nIGZvciBjbGFyaXR5CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAko
cmV2aXNpb24gMjI2MTcyKQorKysgU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTE5ODEsMTIgKzE5ODEsMTIgQEAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnku
Y3BwCiAKIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5jcHAKIHJlbmRlcmlu
Zy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlckZpcnN0TGV0dGVyLmNwcAorcmVuZGVyaW5nL3Vw
ZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyTGlzdC5jcHAKK3JlbmRlcmluZy91cGRhdGluZy9SZW5k
ZXJUcmVlQnVpbGRlck11bHRpQ29sdW1uLmNwcAogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRy
ZWVCdWlsZGVyVGFibGUuY3BwCiByZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVBvc2l0aW9u
LmNwcAogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcAogcmVuZGVyaW5n
L3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5jcHAKLXJlbmRlcmlu
Zy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmNwcAotcmVuZGVyaW5nL3VwZGF0
aW5nL1JlbmRlclRyZWVVcGRhdGVyTXVsdGlDb2x1bW4uY3BwCiAKIHJlcGxheS9Vc2VySW5wdXRC
cmlkZ2UuY3BwCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNjE3MikKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDU4Miw4
ICs0NTgyLDggQEAKIAkJRTQ3QzM5MkYxRkU2RTBGOTAwQkJCQzZCIC8qIFJlbmRlclRyZWVVcGRh
dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdD
MzkyQzFGRTZFMERGMDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXIuaCAqLzsgfTsKIAkJRTQ3
QzM5MzAxRkU2RTBGRDAwQkJCQzZCIC8qIFJlbmRlclRyZWVCdWlsZGVyRmlyc3RMZXR0ZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0MzOTI2MUZF
NkUwREMwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlckZpcnN0TGV0dGVyLmggKi87IH07CiAJ
CUU0N0MzOTMxMUZFNkUxMDIwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENv
bnRlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
N0MzOTI1MUZFNkUwREIwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRl
bnQuaCAqLzsgfTsKLQkJRTQ3QzM5MzIxRkU2RTEwNTAwQkJCQzZCIC8qIFJlbmRlclRyZWVVcGRh
dGVyTGlzdEl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0N0MzOTI4MUZFNkUwREQwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVt
LmggKi87IH07Ci0JCUU0N0MzOTMzMUZFNkUxMDgwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRl
ck11bHRpQ29sdW1uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNDdDMzkyNzFGRTZFMERDMDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJNdWx0aUNv
bHVtbi5oICovOyB9OworCQlFNDdDMzkzMjFGRTZFMTA1MDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1
aWxkZXJMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNDdDMzkyODFGRTZFMEREMDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxkZXJMaXN0LmggKi87
IH07CisJCUU0N0MzOTMzMUZFNkUxMDgwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlck11bHRp
Q29sdW1uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
NDdDMzkyNzFGRTZFMERDMDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxkZXJNdWx0aUNvbHVtbi5o
ICovOyB9OwogCQlFNDdFMjc2NTE2MDM2RUQyMDBFRTJBRkIgLyogRXh0ZW5zaW9uU3R5bGVTaGVl
dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0Uy
NzY0MTYwMzZFRDIwMEVFMkFGQiAvKiBFeHRlbnNpb25TdHlsZVNoZWV0cy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0ODEzN0I5MURCM0I1MjYw
MDVDNTlCRiAvKiBTdHlsZVZhbGlkaXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNDgxMzdCODFEQjNCNTI2MDA1QzU5QkYgLyogU3R5bGVWYWxpZGl0
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0
ODk0NEEzMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDg5NDRBMTE4MEI1N0Q4MDBGMTY1
RDggLyogU2ltcGxlTGluZUxheW91dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0xMzkxMiwxNSArMTM5MTIsMTUgQEAKIAkJRTQ3QzM5MjAxRkU2
RTBEOTAwQkJCQzZCIC8qIFJlbmRlclRyZWVCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclRyZWVCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTQ3QzM5MjExRkU2RTBEQTAwQkJCQzZCIC8qIFJlbmRlclRyZWVCdWls
ZGVyRmlyc3RMZXR0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUU0N0MzOTIyMUZFNkUwREEwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlckdlbmVy
YXRlZENvbnRlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVu
ZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRTQ3QzM5MjMxRkU2RTBEQTAwQkJCQzZCIC8qIFJlbmRlclRyZWVVcGRhdGVyTXVs
dGlDb2x1bW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVy
VHJlZVVwZGF0ZXJNdWx0aUNvbHVtbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUU0N0MzOTIzMUZFNkUwREEwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlck11bHRpQ29sdW1u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclRyZWVCdWls
ZGVyTXVsdGlDb2x1bW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDdDMzky
NDFGRTZFMERCMDBCQkJDNkIgLyogUmVuZGVyVHJlZVBvc2l0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRyZWVQb3NpdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNDdDMzkyNTFGRTZFMERCMDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0
ZXJHZW5lcmF0ZWRDb250ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlclRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFNDdDMzkyNjFGRTZFMERDMDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxkZXJGaXJz
dExldHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUcmVlQnVp
bGRlckZpcnN0TGV0dGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0N0MzOTI3
MUZFNkUwREMwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlck11bHRpQ29sdW1uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRyZWVVcGRhdGVyTXVsdGlDb2x1bW4u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTQ3QzM5MjgxRkU2RTBERDAwQkJCQzZC
IC8qIFJlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlFNDdDMzkyNzFGRTZFMERDMDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxkZXJN
dWx0aUNvbHVtbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUcmVl
QnVpbGRlck11bHRpQ29sdW1uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0N0Mz
OTI4MUZFNkUwREQwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlckxpc3QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVHJlZUJ1aWxkZXJMaXN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0N0MzOTI5MUZFNkUwREUwMEJCQkM2QiAvKiBSZW5kZXJU
cmVlUG9zaXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVu
ZGVyVHJlZVBvc2l0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3QzM5
MkExRkU2RTBERTAwQkJCQzZCIC8qIFJlbmRlclRyZWVCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRyZWVCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUU0N0MzOTJCMUZFNkUwREYwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRl
ckxpc3RJdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRl
clRyZWVVcGRhdGVyTGlzdEl0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
NDdDMzkyQjFGRTZFMERGMDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxkZXJMaXN0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclRyZWVCdWlsZGVyTGlzdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0N0MzOTJDMUZFNkUwREYwMEJCQkM2
QiAvKiBSZW5kZXJUcmVlVXBkYXRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJUcmVlVXBkYXRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDdF
Mjc2NDE2MDM2RUQyMDBFRTJBRkIgLyogRXh0ZW5zaW9uU3R5bGVTaGVldHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uU3R5bGVTaGVldHMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3RTI3NjcxNjAzNkVEQzAwRUUyQUZCIC8qIEV4dGVuc2lv
blN0eWxlU2hlZXRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4
dGVuc2lvblN0eWxlU2hlZXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0
NTIxLDYgKzI0NTIxLDEwIEBACiAJCQkJRTQ3QzM5MkExRkU2RTBERTAwQkJCQzZCIC8qIFJlbmRl
clRyZWVCdWlsZGVyLmggKi8sCiAJCQkJRTQ3QzM5MjExRkU2RTBEQTAwQkJCQzZCIC8qIFJlbmRl
clRyZWVCdWlsZGVyRmlyc3RMZXR0ZXIuY3BwICovLAogCQkJCUU0N0MzOTI2MUZFNkUwREMwMEJC
QkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlckZpcnN0TGV0dGVyLmggKi8sCisJCQkJRTQ3QzM5MkIx
RkU2RTBERjAwQkJCQzZCIC8qIFJlbmRlclRyZWVCdWlsZGVyTGlzdC5jcHAgKi8sCisJCQkJRTQ3
QzM5MjgxRkU2RTBERDAwQkJCQzZCIC8qIFJlbmRlclRyZWVCdWlsZGVyTGlzdC5oICovLAorCQkJ
CUU0N0MzOTIzMUZFNkUwREEwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlck11bHRpQ29sdW1u
LmNwcCAqLywKKwkJCQlFNDdDMzkyNzFGRTZFMERDMDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxk
ZXJNdWx0aUNvbHVtbi5oICovLAogCQkJCTExOTM0MDc2MUZFOEI5MjMwMDkzNUYxRSAvKiBSZW5k
ZXJUcmVlQnVpbGRlclRhYmxlLmNwcCAqLywKIAkJCQkxMTkzNDA3NzFGRThCOTIzMDA5MzVGMUUg
LyogUmVuZGVyVHJlZUJ1aWxkZXJUYWJsZS5oICovLAogCQkJCUU0N0MzOTI5MUZFNkUwREUwMEJC
QkM2QiAvKiBSZW5kZXJUcmVlUG9zaXRpb24uY3BwICovLApAQCAtMjQ1MjksMTAgKzI0NTMzLDYg
QEAKIAkJCQlFNDdDMzkyQzFGRTZFMERGMDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXIuaCAq
LywKIAkJCQlFNDdDMzkyMjFGRTZFMERBMDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJHZW5l
cmF0ZWRDb250ZW50LmNwcCAqLywKIAkJCQlFNDdDMzkyNTFGRTZFMERCMDBCQkJDNkIgLyogUmVu
ZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmggKi8sCi0JCQkJRTQ3QzM5MkIxRkU2RTBE
RjAwQkJCQzZCIC8qIFJlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uY3BwICovLAotCQkJCUU0N0Mz
OTI4MUZFNkUwREQwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmggKi8sCi0J
CQkJRTQ3QzM5MjMxRkU2RTBEQTAwQkJCQzZCIC8qIFJlbmRlclRyZWVVcGRhdGVyTXVsdGlDb2x1
bW4uY3BwICovLAotCQkJCUU0N0MzOTI3MUZFNkUwREMwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBk
YXRlck11bHRpQ29sdW1uLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IHVwZGF0aW5nOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI4OTM4LDggKzI4OTM4LDggQEAKIAkJCQlFNDdDMzky
RTFGRTZFMEY3MDBCQkJDNkIgLyogUmVuZGVyVHJlZVBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFNDdDMzkyRjFGRTZFMEY5MDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUU0N0MzOTMxMUZFNkUxMDIwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBk
YXRlckdlbmVyYXRlZENvbnRlbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUU0N0MzOTMyMUZFNkUx
MDUwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmggaW4gSGVhZGVycyAqLywK
LQkJCQlFNDdDMzkzMzFGRTZFMTA4MDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJNdWx0aUNv
bHVtbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ3QzM5MzIxRkU2RTEwNTAwQkJCQzZCIC8qIFJl
bmRlclRyZWVCdWlsZGVyTGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ3QzM5MzMxRkU2RTEw
ODAwQkJCQzZCIC8qIFJlbmRlclRyZWVCdWlsZGVyTXVsdGlDb2x1bW4uaCBpbiBIZWFkZXJzICov
LAogCQkJCUU0NDYxNDUyMENENjhBMzUwMEZBREE3NSAvKiBSZW5kZXJWaWRlby5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNFQTQ4NjgwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclZpZXcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJFMjA1MDdFMThBNDU4QzIwMDgwNjQ3RSAvKiBSZW5kZXJWVFRDdWUu
aCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRv
U2l6aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1
dG9TaXppbmcuY3BwCShyZXZpc2lvbiAyMjYxNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvVGV4dEF1dG9TaXppbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNyw2IEBACiAj
aW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRGcmFnbWVudC5oIgog
I2luY2x1ZGUgIlJlbmRlclRyZWVCdWlsZGVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyVHJlZUJ1aWxk
ZXJGaXJzdExldHRlci5oIgotI2luY2x1ZGUgIlJlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uaCIK
ICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE2
Miw4ICsxNjAsNyBAQCBhdXRvIFRleHRBdXRvU2l6aW5nVmFsdWU6OmFkanVzdFRleHROb2RlCiAg
ICAgICAgIG5ld1BhcmVudFN0eWxlLmZvbnRDYXNjYWRlKCkudXBkYXRlKCZub2RlLT5kb2N1bWVu
dCgpLmZvbnRTZWxlY3RvcigpKTsKICAgICAgICAgcGFyZW50UmVuZGVyZXItPnNldFN0eWxlKFdU
Rk1vdmUobmV3UGFyZW50U3R5bGUpKTsKIAotICAgICAgICBpZiAoaXM8UmVuZGVyTGlzdEl0ZW0+
KCpwYXJlbnRSZW5kZXJlcikpCi0gICAgICAgICAgICBSZW5kZXJUcmVlVXBkYXRlcjo6TGlzdEl0
ZW06OnVwZGF0ZU1hcmtlcihidWlsZGVyLCBkb3duY2FzdDxSZW5kZXJMaXN0SXRlbT4oKnBhcmVu
dFJlbmRlcmVyKSk7CisgICAgICAgIGJ1aWxkZXIudXBkYXRlQWZ0ZXJEZXNjZW5kYW50cygqcGFy
ZW50UmVuZGVyZXIpOwogICAgIH0KIAogICAgIGZvciAoYXV0byYgbm9kZSA6IG1fYXV0b1NpemVk
Tm9kZXMpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJU
cmVlQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3Vw
ZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyLmNwcAkocmV2aXNpb24gMjI2MTcyKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUgIlJlbmRlclRhYmxlUm93LmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVCdWlsZGVyRmlyc3RM
ZXR0ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJUcmVlQnVpbGRlckxpc3QuaCIKKyNpbmNsdWRlICJS
ZW5kZXJUcmVlQnVpbGRlck11bHRpQ29sdW1uLmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZUJ1aWxk
ZXJUYWJsZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Miw2ICs0NCw4IEBAIFJlbmRl
clRyZWVCdWlsZGVyKiBSZW5kZXJUcmVlQnVpbGRlcjo6c18KIFJlbmRlclRyZWVCdWlsZGVyOjpS
ZW5kZXJUcmVlQnVpbGRlcihSZW5kZXJWaWV3JiB2aWV3KQogICAgIDogbV92aWV3KHZpZXcpCiAg
ICAgLCBtX2ZpcnN0TGV0dGVyQnVpbGRlcihzdGQ6Om1ha2VfdW5pcXVlPEZpcnN0TGV0dGVyPigq
dGhpcykpCisgICAgLCBtX2xpc3RCdWlsZGVyKHN0ZDo6bWFrZV91bmlxdWU8TGlzdD4oKnRoaXMp
KQorICAgICwgbV9tdWx0aUNvbHVtbkJ1aWxkZXIoc3RkOjptYWtlX3VuaXF1ZTxNdWx0aUNvbHVt
bj4oKnRoaXMpKQogICAgICwgbV90YWJsZUJ1aWxkZXIoc3RkOjptYWtlX3VuaXF1ZTxUYWJsZT4o
KnRoaXMpKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFzX2N1cnJlbnQgfHwgJm1fdmlldyAhPSAm
c19jdXJyZW50LT5tX3ZpZXcpOwpAQCAtOTUsNiArOTksMTAgQEAgdm9pZCBSZW5kZXJUcmVlQnVp
bGRlcjo6dXBkYXRlQWZ0ZXJEZXNjZQogewogICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVy
ZXIpKQogICAgICAgICBmaXJzdExldHRlckJ1aWxkZXIoKS51cGRhdGVBZnRlckRlc2NlbmRhbnRz
KGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcikpOworICAgIGlmIChpczxSZW5kZXJMaXN0
SXRlbT4ocmVuZGVyZXIpKQorICAgICAgICBsaXN0QnVpbGRlcigpLnVwZGF0ZUl0ZW1NYXJrZXIo
ZG93bmNhc3Q8UmVuZGVyTGlzdEl0ZW0+KHJlbmRlcmVyKSk7CisgICAgaWYgKGlzPFJlbmRlckJs
b2NrRmxvdz4ocmVuZGVyZXIpKQorICAgICAgICBtdWx0aUNvbHVtbkJ1aWxkZXIoKS51cGRhdGVB
ZnRlckRlc2NlbmRhbnRzKGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4ocmVuZGVyZXIpKTsKIH0K
IAogdm9pZCBSZW5kZXJUcmVlQnVpbGRlcjo6cnVieVJ1bkluc2VydENoaWxkKFJlbmRlclJ1YnlS
dW4mIHBhcmVudCwgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRlck9iamVjdCog
YmVmb3JlQ2hpbGQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVu
ZGVyVHJlZUJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
dXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuaAkocmV2aXNpb24gMjI2MTcyKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDExICs0OCwxNSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgY2xhc3Mg
Rmlyc3RMZXR0ZXI7CisgICAgY2xhc3MgTGlzdDsKKyAgICBjbGFzcyBNdWx0aUNvbHVtbjsKICAg
ICBjbGFzcyBUYWJsZTsKIAogICAgIHZvaWQgcnVieVJ1bkluc2VydENoaWxkKFJlbmRlclJ1YnlS
dW4mLCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVD
aGlsZCk7CiAKICAgICBGaXJzdExldHRlciYgZmlyc3RMZXR0ZXJCdWlsZGVyKCkgeyByZXR1cm4g
Km1fZmlyc3RMZXR0ZXJCdWlsZGVyOyB9CisgICAgTGlzdCYgbGlzdEJ1aWxkZXIoKSB7IHJldHVy
biAqbV9saXN0QnVpbGRlcjsgfQorICAgIE11bHRpQ29sdW1uJiBtdWx0aUNvbHVtbkJ1aWxkZXIo
KSB7IHJldHVybiAqbV9tdWx0aUNvbHVtbkJ1aWxkZXI7IH0KICAgICBUYWJsZSYgdGFibGVCdWls
ZGVyKCkgeyByZXR1cm4gKm1fdGFibGVCdWlsZGVyOyB9CiAKICAgICBSZW5kZXJWaWV3JiBtX3Zp
ZXc7CkBAIC02MSw2ICs2NSw4IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIFJlbmRlclRyZWVCdWls
ZGVyKiBzX2N1cnJlbnQ7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Rmlyc3RMZXR0ZXI+IG1fZmly
c3RMZXR0ZXJCdWlsZGVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxMaXN0PiBtX2xpc3RCdWlsZGVy
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxNdWx0aUNvbHVtbj4gbV9tdWx0aUNvbHVtbkJ1aWxkZXI7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFRhYmxlPiBtX3RhYmxlQnVpbGRlcjsKIH07CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlckxpc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5k
ZXJUcmVlQnVpbGRlckxpc3QuY3BwCShyZXZpc2lvbiAyMjYxNzIpCShmcm9tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmNwcDoyMjYx
NzIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxk
ZXJMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMyBAQAorLyoqCisgKiBDb3B5
cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAo
QykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqIENvcHlyaWdodCAo
QykgMjAwMy0yMDA2LCAyMDEwLCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBBbmRyZXcgV2VsbGluZ3RvbiAocHJvdG9uQHdpcmV0YXBw
ZWQubmV0KQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlclRyZWVVcGRh
dGVyTGlzdEl0ZW0uaCIKKworI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKKyNpbmNs
dWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCisjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93
LmgiCisjaW5jbHVkZSAiUmVuZGVyUnVieS5oIgorI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFJlbmRlckJsb2NrKiBnZXRQYXJlbnRPZkZp
cnN0TGluZUJveChSZW5kZXJCbG9jayYgY3VycmVudCwgUmVuZGVyT2JqZWN0JiBtYXJrZXIpCit7
CisgICAgYm9vbCBpblF1aXJrc01vZGUgPSBjdXJyZW50LmRvY3VtZW50KCkuaW5RdWlya3NNb2Rl
KCk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck9iamVjdD4o
Y3VycmVudCkpIHsKKyAgICAgICAgaWYgKCZjaGlsZCA9PSAmbWFya2VyKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgaWYgKGNoaWxkLmlzSW5saW5lKCkgJiYgKCFpczxSZW5kZXJJ
bmxpbmU+KGNoaWxkKSB8fCBjdXJyZW50LmdlbmVyYXRlc0xpbmVCb3hlc0ZvcklubGluZUNoaWxk
KCZjaGlsZCkpKQorICAgICAgICAgICAgcmV0dXJuICZjdXJyZW50OworCisgICAgICAgIGlmIChj
aGlsZC5pc0Zsb2F0aW5nKCkgfHwgY2hpbGQuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoIWlzPFJlbmRlckJsb2NrPihjaGlsZCkg
fHwgaXM8UmVuZGVyVGFibGU+KGNoaWxkKSB8fCBpczxSZW5kZXJSdWJ5QXNCbG9jaz4oY2hpbGQp
KQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGlzPFJlbmRlckJveD4oY2hpbGQp
ICYmIGRvd25jYXN0PFJlbmRlckJveD4oY2hpbGQpLmlzV3JpdGluZ01vZGVSb290KCkpCisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoaXM8UmVuZGVyTGlzdEl0ZW0+KGN1cnJlbnQp
ICYmIGluUXVpcmtzTW9kZSAmJiBjaGlsZC5ub2RlKCkgJiYgaXNIVE1MTGlzdEVsZW1lbnQoKmNo
aWxkLm5vZGUoKSkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoUmVuZGVyQmxv
Y2sqIGxpbmVCb3ggPSBnZXRQYXJlbnRPZkZpcnN0TGluZUJveChkb3duY2FzdDxSZW5kZXJCbG9j
az4oY2hpbGQpLCBtYXJrZXIpKQorICAgICAgICAgICAgcmV0dXJuIGxpbmVCb3g7CisgICAgfQor
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyBSZW5kZXJPYmplY3QqIGZpcnN0Tm9u
TWFya2VyQ2hpbGQoUmVuZGVyQmxvY2smIHBhcmVudCkKK3sKKyAgICBSZW5kZXJPYmplY3QqIGNo
aWxkID0gcGFyZW50LmZpcnN0Q2hpbGQoKTsKKyAgICB3aGlsZSAoaXM8UmVuZGVyTGlzdE1hcmtl
cj4oY2hpbGQpKQorICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOworICAgIHJl
dHVybiBjaGlsZDsKK30KKwordm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6TGlzdEl0ZW06OnVwZGF0
ZU1hcmtlcihSZW5kZXJUcmVlQnVpbGRlciYgYnVpbGRlciwgUmVuZGVyTGlzdEl0ZW0mIGxpc3RJ
dGVtUmVuZGVyZXIpCit7CisgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTighbGlzdEl0ZW1SZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgp
LmxheW91dFN0YXRlKCkpOworCisgICAgYXV0byYgc3R5bGUgPSBsaXN0SXRlbVJlbmRlcmVyLnN0
eWxlKCk7CisKKyAgICBpZiAoc3R5bGUubGlzdFN0eWxlVHlwZSgpID09IE5vbmVMaXN0U3R5bGUg
JiYgKCFzdHlsZS5saXN0U3R5bGVJbWFnZSgpIHx8IHN0eWxlLmxpc3RTdHlsZUltYWdlKCktPmVy
cm9yT2NjdXJyZWQoKSkpIHsKKyAgICAgICAgaWYgKGF1dG8qIG1hcmtlciA9IGxpc3RJdGVtUmVu
ZGVyZXIubWFya2VyUmVuZGVyZXIoKSkKKyAgICAgICAgICAgIG1hcmtlci0+cmVtb3ZlRnJvbVBh
cmVudEFuZERlc3Ryb3koKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gbmV3
U3R5bGUgPSBsaXN0SXRlbVJlbmRlcmVyLmNvbXB1dGVNYXJrZXJTdHlsZSgpOworICAgIFJlbmRl
clB0cjxSZW5kZXJMaXN0TWFya2VyPiBuZXdNYXJrZXJSZW5kZXJlcjsKKyAgICBhdXRvKiBtYXJr
ZXJSZW5kZXJlciA9IGxpc3RJdGVtUmVuZGVyZXIubWFya2VyUmVuZGVyZXIoKTsKKyAgICBpZiAo
bWFya2VyUmVuZGVyZXIpCisgICAgICAgIG1hcmtlclJlbmRlcmVyLT5zZXRTdHlsZShXVEZNb3Zl
KG5ld1N0eWxlKSk7CisgICAgZWxzZSB7CisgICAgICAgIG5ld01hcmtlclJlbmRlcmVyID0gV2Vi
Q29yZTo6Y3JlYXRlUmVuZGVyZXI8UmVuZGVyTGlzdE1hcmtlcj4obGlzdEl0ZW1SZW5kZXJlciwg
V1RGTW92ZShuZXdTdHlsZSkpOworICAgICAgICBuZXdNYXJrZXJSZW5kZXJlci0+aW5pdGlhbGl6
ZVN0eWxlKCk7CisgICAgICAgIG1hcmtlclJlbmRlcmVyID0gbmV3TWFya2VyUmVuZGVyZXIuZ2V0
KCk7CisgICAgICAgIGxpc3RJdGVtUmVuZGVyZXIuc2V0TWFya2VyUmVuZGVyZXIoKm1hcmtlclJl
bmRlcmVyKTsKKyAgICB9CisKKyAgICBSZW5kZXJFbGVtZW50KiBjdXJyZW50UGFyZW50ID0gbWFy
a2VyUmVuZGVyZXItPnBhcmVudCgpOworICAgIFJlbmRlckJsb2NrKiBuZXdQYXJlbnQgPSBnZXRQ
YXJlbnRPZkZpcnN0TGluZUJveChsaXN0SXRlbVJlbmRlcmVyLCAqbWFya2VyUmVuZGVyZXIpOwor
ICAgIGlmICghbmV3UGFyZW50KSB7CisgICAgICAgIC8vIElmIHRoZSBtYXJrZXIgaXMgY3VycmVu
dGx5IGNvbnRhaW5lZCBpbnNpZGUgYW4gYW5vbnltb3VzIGJveCwKKyAgICAgICAgLy8gdGhlbiB3
ZSBhcmUgdGhlIG9ubHkgaXRlbSBpbiB0aGF0IGFub255bW91cyBib3ggKHNpbmNlIG5vIGxpbmUg
Ym94CisgICAgICAgIC8vIHBhcmVudCB3YXMgZm91bmQpLiBJdCdzIG9rIHRvIGp1c3QgbGVhdmUg
dGhlIG1hcmtlciB3aGVyZSBpdCBpcworICAgICAgICAvLyBpbiB0aGlzIGNhc2UuCisgICAgICAg
IGlmIChjdXJyZW50UGFyZW50ICYmIGN1cnJlbnRQYXJlbnQtPmlzQW5vbnltb3VzQmxvY2soKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGF1dG8qIG11bHRpQ29sdW1uRmxvdyA9
IGxpc3RJdGVtUmVuZGVyZXIubXVsdGlDb2x1bW5GbG93KCkpCisgICAgICAgICAgICBuZXdQYXJl
bnQgPSBtdWx0aUNvbHVtbkZsb3c7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld1BhcmVu
dCA9ICZsaXN0SXRlbVJlbmRlcmVyOworICAgIH0KKworICAgIGlmIChuZXdQYXJlbnQgIT0gY3Vy
cmVudFBhcmVudCkgeworICAgICAgICBpZiAoY3VycmVudFBhcmVudCkKKyAgICAgICAgICAgIGJ1
aWxkZXIuaW5zZXJ0Q2hpbGQoKm5ld1BhcmVudCwgY3VycmVudFBhcmVudC0+dGFrZUNoaWxkKCpt
YXJrZXJSZW5kZXJlciksIGZpcnN0Tm9uTWFya2VyQ2hpbGQoKm5ld1BhcmVudCkpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBidWlsZGVyLmluc2VydENoaWxkKCpuZXdQYXJlbnQsIFdURk1v
dmUobmV3TWFya2VyUmVuZGVyZXIpLCBmaXJzdE5vbk1hcmtlckNoaWxkKCpuZXdQYXJlbnQpKTsK
KworICAgICAgICAvLyBJZiBjdXJyZW50IHBhcmVudCBpcyBhbiBhbm9ueW1vdXMgYmxvY2sgdGhh
dCBoYXMgbG9zdCBhbGwgaXRzIGNoaWxkcmVuLCBkZXN0cm95IGl0LgorICAgICAgICBpZiAoY3Vy
cmVudFBhcmVudCAmJiBjdXJyZW50UGFyZW50LT5pc0Fub255bW91c0Jsb2NrKCkgJiYgIWN1cnJl
bnRQYXJlbnQtPmZpcnN0Q2hpbGQoKSAmJiAhZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjdXJyZW50
UGFyZW50KS5jb250aW51YXRpb24oKSkKKyAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQtPnJlbW92
ZUZyb21QYXJlbnRBbmREZXN0cm95KCk7CisgICAgfQorfQorCit9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJMaXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxk
ZXJMaXN0LmNwcAkocmV2aXNpb24gMjI2MTcyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDcgKzIyLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVy
VHJlZVVwZGF0ZXJMaXN0SXRlbS5oIgorI2luY2x1ZGUgIlJlbmRlclRyZWVCdWlsZGVyTGlzdC5o
IgogCiAjaW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxp
c3RNYXJrZXIuaCIKQEAgLTY5LDEwICs2OSwxMyBAQCBzdGF0aWMgUmVuZGVyT2JqZWN0KiBmaXJz
dE5vbk1hcmtlckNoaWxkCiAgICAgcmV0dXJuIGNoaWxkOwogfQogCi12b2lkIFJlbmRlclRyZWVV
cGRhdGVyOjpMaXN0SXRlbTo6dXBkYXRlTWFya2VyKFJlbmRlclRyZWVCdWlsZGVyJiBidWlsZGVy
LCBSZW5kZXJMaXN0SXRlbSYgbGlzdEl0ZW1SZW5kZXJlcikKK1JlbmRlclRyZWVCdWlsZGVyOjpM
aXN0OjpMaXN0KFJlbmRlclRyZWVCdWlsZGVyJiBidWlsZGVyKQorICAgIDogbV9idWlsZGVyKGJ1
aWxkZXIpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTigh
bGlzdEl0ZW1SZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmxheW91
dFN0YXRlKCkpOworfQogCit2b2lkIFJlbmRlclRyZWVCdWlsZGVyOjpMaXN0Ojp1cGRhdGVJdGVt
TWFya2VyKFJlbmRlckxpc3RJdGVtJiBsaXN0SXRlbVJlbmRlcmVyKQorewogICAgIGF1dG8mIHN0
eWxlID0gbGlzdEl0ZW1SZW5kZXJlci5zdHlsZSgpOwogCiAgICAgaWYgKHN0eWxlLmxpc3RTdHls
ZVR5cGUoKSA9PSBOb25lTGlzdFN0eWxlICYmICghc3R5bGUubGlzdFN0eWxlSW1hZ2UoKSB8fCBz
dHlsZS5saXN0U3R5bGVJbWFnZSgpLT5lcnJvck9jY3VycmVkKCkpKSB7CkBAIC0xMDgsMTYgKzEx
MSwxNyBAQCB2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjpMaXN0SXRlbTo6dXBkYXRlCiAgICAgICAg
ICAgICBuZXdQYXJlbnQgPSAmbGlzdEl0ZW1SZW5kZXJlcjsKICAgICB9CiAKLSAgICBpZiAobmV3
UGFyZW50ICE9IGN1cnJlbnRQYXJlbnQpIHsKLSAgICAgICAgaWYgKGN1cnJlbnRQYXJlbnQpCi0g
ICAgICAgICAgICBidWlsZGVyLmluc2VydENoaWxkKCpuZXdQYXJlbnQsIGN1cnJlbnRQYXJlbnQt
PnRha2VDaGlsZCgqbWFya2VyUmVuZGVyZXIpLCBmaXJzdE5vbk1hcmtlckNoaWxkKCpuZXdQYXJl
bnQpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYnVpbGRlci5pbnNlcnRDaGlsZCgqbmV3
UGFyZW50LCBXVEZNb3ZlKG5ld01hcmtlclJlbmRlcmVyKSwgZmlyc3ROb25NYXJrZXJDaGlsZCgq
bmV3UGFyZW50KSk7CisgICAgaWYgKG5ld1BhcmVudCA9PSBjdXJyZW50UGFyZW50KQorICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgLy8gSWYgY3VycmVudCBwYXJlbnQgaXMgYW4gYW5vbnltb3Vz
IGJsb2NrIHRoYXQgaGFzIGxvc3QgYWxsIGl0cyBjaGlsZHJlbiwgZGVzdHJveSBpdC4KLSAgICAg
ICAgaWYgKGN1cnJlbnRQYXJlbnQgJiYgY3VycmVudFBhcmVudC0+aXNBbm9ueW1vdXNCbG9jaygp
ICYmICFjdXJyZW50UGFyZW50LT5maXJzdENoaWxkKCkgJiYgIWRvd25jYXN0PFJlbmRlckJsb2Nr
PigqY3VycmVudFBhcmVudCkuY29udGludWF0aW9uKCkpCi0gICAgICAgICAgICBjdXJyZW50UGFy
ZW50LT5yZW1vdmVGcm9tUGFyZW50QW5kRGVzdHJveSgpOwotICAgIH0KKyAgICBpZiAoY3VycmVu
dFBhcmVudCkKKyAgICAgICAgbV9idWlsZGVyLmluc2VydENoaWxkKCpuZXdQYXJlbnQsIGN1cnJl
bnRQYXJlbnQtPnRha2VDaGlsZCgqbWFya2VyUmVuZGVyZXIpLCBmaXJzdE5vbk1hcmtlckNoaWxk
KCpuZXdQYXJlbnQpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYnVpbGRlci5pbnNlcnRDaGlsZCgq
bmV3UGFyZW50LCBXVEZNb3ZlKG5ld01hcmtlclJlbmRlcmVyKSwgZmlyc3ROb25NYXJrZXJDaGls
ZCgqbmV3UGFyZW50KSk7CisKKyAgICAvLyBJZiBjdXJyZW50IHBhcmVudCBpcyBhbiBhbm9ueW1v
dXMgYmxvY2sgdGhhdCBoYXMgbG9zdCBhbGwgaXRzIGNoaWxkcmVuLCBkZXN0cm95IGl0LgorICAg
IGlmIChjdXJyZW50UGFyZW50ICYmIGN1cnJlbnRQYXJlbnQtPmlzQW5vbnltb3VzQmxvY2soKSAm
JiAhY3VycmVudFBhcmVudC0+Zmlyc3RDaGlsZCgpICYmICFkb3duY2FzdDxSZW5kZXJCbG9jaz4o
KmN1cnJlbnRQYXJlbnQpLmNvbnRpbnVhdGlvbigpKQorICAgICAgICBjdXJyZW50UGFyZW50LT5y
ZW1vdmVGcm9tUGFyZW50QW5kRGVzdHJveSgpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyTGlz
dC5oCShyZXZpc2lvbiAyMjYxNzIpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRh
dGluZy9SZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmg6MjI2MTcyKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyTGlzdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIlJlbmRlckxpc3RJdGVtLmgiCisjaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJUcmVlVXBkYXRlcjo6TGlzdEl0ZW0g
eworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHVwZGF0ZU1hcmtlcihSZW5kZXJUcmVlQnVpbGRl
ciYsIFJlbmRlckxpc3RJdGVtJik7Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJMaXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyTGlzdC5oCShy
ZXZpc2lvbiAyMjYxNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVu
ZGVyVHJlZUJ1aWxkZXJMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEzICsyNiwxOCBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgotI2luY2x1ZGUgIlJl
bmRlclRyZWVVcGRhdGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyVHJlZUJ1aWxkZXIuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBSZW5kZXJUcmVlVXBkYXRlcjo6TGlzdEl0ZW0gewor
Y2xhc3MgUmVuZGVyVHJlZUJ1aWxkZXI6Okxpc3QgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lk
IHVwZGF0ZU1hcmtlcihSZW5kZXJUcmVlQnVpbGRlciYsIFJlbmRlckxpc3RJdGVtJik7CisgICAg
TGlzdChSZW5kZXJUcmVlQnVpbGRlciYpOworCisgICAgdm9pZCB1cGRhdGVJdGVtTWFya2VyKFJl
bmRlckxpc3RJdGVtJik7CisKK3ByaXZhdGU6CisgICAgUmVuZGVyVHJlZUJ1aWxkZXImIG1fYnVp
bGRlcjsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9S
ZW5kZXJUcmVlQnVpbGRlck11bHRpQ29sdW1uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJNdWx0aUNvbHVtbi5jcHAJ
KHJldmlzaW9uIDIyNjE3MikJKGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5n
L1JlbmRlclRyZWVVcGRhdGVyTXVsdGlDb2x1bW4uY3BwOjIyNjE3MikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlck11bHRpQ29sdW1uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5
OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAxOTk5IEFudHRp
IEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDA3IERhdmlk
IFNtaXRoIChjYXRmaXNoLm1hbkBnbWFpbC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAx
NSwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlck11bHRpQ29sdW1u
LmgiCisKKyNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKKyNpbmNsdWRlICJSZW5kZXJDaGls
ZEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93LmgiCisjaW5jbHVk
ZSAiUmVuZGVyTXVsdGlDb2x1bW5TZXQuaCIKKyNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtblNw
YW5uZXJQbGFjZWhvbGRlci5oIgorI2luY2x1ZGUgIlJlbmRlclRyZWVCdWlsZGVyLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6TXVsdGlDb2x1bW46
OnVwZGF0ZShSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCit7CisgICAgYm9vbCBuZWVkc0ZyYWdtZW50
ZWRGbG93ID0gZmxvdy5yZXF1aXJlc0NvbHVtbnMoZmxvdy5zdHlsZSgpLmNvbHVtbkNvdW50KCkp
OworICAgIGJvb2wgaGFzRnJhZ21lbnRlZEZsb3cgPSBmbG93Lm11bHRpQ29sdW1uRmxvdygpOwor
CisgICAgaWYgKCFoYXNGcmFnbWVudGVkRmxvdyAmJiBuZWVkc0ZyYWdtZW50ZWRGbG93KSB7Cisg
ICAgICAgIGNyZWF0ZUZyYWdtZW50ZWRGbG93KGZsb3cpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGlmIChoYXNGcmFnbWVudGVkRmxvdyAmJiAhbmVlZHNGcmFnbWVudGVkRmxvdykgewor
ICAgICAgICBkZXN0cm95RnJhZ21lbnRlZEZsb3coZmxvdyk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9Cit9CisKK3ZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6Ok11bHRpQ29sdW1uOjpjcmVhdGVGcmFn
bWVudGVkRmxvdyhSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCit7CisgICAgZmxvdy5zZXRDaGlsZHJl
bklubGluZShmYWxzZSk7IC8vIERvIHRoaXMgdG8gYXZvaWQgd3JhcHBpbmcgaW5saW5lIGNoaWxk
cmVuIHRoYXQgYXJlIGp1c3QgZ29pbmcgdG8gbW92ZSBpbnRvIHRoZSBmbG93IHRocmVhZC4KKyAg
ICBmbG93LmRlbGV0ZUxpbmVzKCk7CisgICAgLy8gSWYgdGhpcyBzb29uLXRvLWJlIG11bHRpY29s
dW1uIGZsb3cgaXMgYWxyZWFkeSBwYXJ0IG9mIGEgbXVsdGljb2x1bW4gY29udGV4dCwgd2UgbmVl
ZCB0byBtb3ZlIGJhY2sgdGhlIGRlc2NlbmRhbnQgc3Bhbm5lcnMKKyAgICAvLyB0byB0aGVpciBv
cmlnaW5hbCBwb3NpdGlvbiBiZWZvcmUgbW92aW5nIHN1YnRyZWVzIGFyb3VuZC4KKyAgICBhdXRv
KiBlbmNsb3NpbmdmbG93ID0gZmxvdy5lbmNsb3NpbmdGcmFnbWVudGVkRmxvdygpOworICAgIGlm
IChpczxSZW5kZXJNdWx0aUNvbHVtbkZsb3c+KGVuY2xvc2luZ2Zsb3cpKSB7CisgICAgICAgIGF1
dG8mIHNwYW5uZXJzID0gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5GbG93PihlbmNsb3Npbmdm
bG93KS0+c3Bhbm5lck1hcCgpOworICAgICAgICBWZWN0b3I8UmVuZGVyTXVsdGlDb2x1bW5TcGFu
bmVyUGxhY2Vob2xkZXIqPiBwbGFjZWhvbGRlcnNUb0RlbGV0ZTsKKyAgICAgICAgZm9yIChhdXRv
JiBzcGFubmVyQW5kUGxhY2Vob2xkZXIgOiBzcGFubmVycykgeworICAgICAgICAgICAgYXV0byYg
cGxhY2Vob2xkZXIgPSAqc3Bhbm5lckFuZFBsYWNlaG9sZGVyLnZhbHVlOworICAgICAgICAgICAg
aWYgKCFwbGFjZWhvbGRlci5pc0Rlc2NlbmRhbnRPZigmZmxvdykpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBwbGFjZWhvbGRlcnNUb0RlbGV0ZS5hcHBlbmQoJnBsYWNl
aG9sZGVyKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGF1dG8qIHBsYWNlaG9sZGVyIDogcGxh
Y2Vob2xkZXJzVG9EZWxldGUpIHsKKyAgICAgICAgICAgIGF1dG8qIHNwYW5uZXIgPSBwbGFjZWhv
bGRlci0+c3Bhbm5lcigpOworICAgICAgICAgICAgaWYgKCFzcGFubmVyKSB7CisgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBNb3ZlIHRoZSBzcGFubmVyIGJhY2sgdG8gaXRz
IG9yaWdpbmFsIHBvc2l0aW9uLgorICAgICAgICAgICAgYXV0byYgc3Bhbm5lck9yaWdpbmFsUGFy
ZW50ID0gKnBsYWNlaG9sZGVyLT5wYXJlbnQoKTsKKyAgICAgICAgICAgIC8vIERldGFjaGluZyB0
aGUgc3Bhbm5lciB0YWtlcyBjYXJlIG9mIHJlbW92aW5nIHRoZSBwbGFjZWhvbGRlciAoYW5kIG1l
cmdlcyB0aGUgUmVuZGVyTXVsdGlDb2x1bW5TZXRzKS4KKyAgICAgICAgICAgIGF1dG8gc3Bhbm5l
clRvUmVJbnNlcnQgPSBzcGFubmVyLT5wYXJlbnQoKS0+dGFrZUNoaWxkKCpzcGFubmVyKTsKKyAg
ICAgICAgICAgIFJlbmRlclRyZWVCdWlsZGVyOjpjdXJyZW50KCktPmluc2VydENoaWxkKHNwYW5u
ZXJPcmlnaW5hbFBhcmVudCwgV1RGTW92ZShzcGFubmVyVG9SZUluc2VydCkpOworICAgICAgICB9
CisgICAgfQorCisgICAgYXV0byBuZXdGcmFnbWVudGVkRmxvdyA9IFdlYkNvcmU6OmNyZWF0ZVJl
bmRlcmVyPFJlbmRlck11bHRpQ29sdW1uRmxvdz4oZmxvdy5kb2N1bWVudCgpLCBSZW5kZXJTdHls
ZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShmbG93LnN0eWxlKCksIEJMT0NLKSk7
CisgICAgbmV3RnJhZ21lbnRlZEZsb3ctPmluaXRpYWxpemVTdHlsZSgpOworICAgIGF1dG8mIGZy
YWdtZW50ZWRGbG93ID0gKm5ld0ZyYWdtZW50ZWRGbG93OworICAgIGZsb3cuUmVuZGVyQmxvY2s6
OmFkZENoaWxkKCpSZW5kZXJUcmVlQnVpbGRlcjo6Y3VycmVudCgpLCBXVEZNb3ZlKG5ld0ZyYWdt
ZW50ZWRGbG93KSk7CisKKyAgICAvLyBSZXBhcmVudCBjaGlsZHJlbiBwcmVjZWRpbmcgdGhlIGZy
YWdtZW50ZWQgZmxvdyBpbnRvIHRoZSBmcmFnbWVudGVkIGZsb3cuCisgICAgZmxvdy5tb3ZlQ2hp
bGRyZW5UbygmZnJhZ21lbnRlZEZsb3csIGZsb3cuZmlyc3RDaGlsZCgpLCAmZnJhZ21lbnRlZEZs
b3csIFJlbmRlckJveE1vZGVsT2JqZWN0OjpOb3JtYWxpemVBZnRlckluc2VydGlvbjo6WWVzKTsK
KyAgICBpZiAoZmxvdy5pc0ZpZWxkc2V0KCkpIHsKKyAgICAgICAgLy8gS2VlcCBsZWdlbmRzIG91
dCBvZiB0aGUgZmxvdyB0aHJlYWQuCisgICAgICAgIGZvciAoYXV0byYgYm94IDogY2hpbGRyZW5P
ZlR5cGU8UmVuZGVyQm94PihmcmFnbWVudGVkRmxvdykpIHsKKyAgICAgICAgICAgIGlmIChib3gu
aXNMZWdlbmQoKSkKKyAgICAgICAgICAgICAgICBmcmFnbWVudGVkRmxvdy5tb3ZlQ2hpbGRUbygm
ZmxvdywgJmJveCwgUmVuZGVyQm94TW9kZWxPYmplY3Q6Ok5vcm1hbGl6ZUFmdGVySW5zZXJ0aW9u
OjpZZXMpOworICAgICAgICB9CisgICAgfQorCisgICAgZmxvdy5zZXRNdWx0aUNvbHVtbkZsb3co
ZnJhZ21lbnRlZEZsb3cpOworfQorCit2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjpNdWx0aUNvbHVt
bjo6ZGVzdHJveUZyYWdtZW50ZWRGbG93KFJlbmRlckJsb2NrRmxvdyYgZmxvdykKK3sKKyAgICBh
dXRvJiBtdWx0aUNvbHVtbkZsb3cgPSAqZmxvdy5tdWx0aUNvbHVtbkZsb3coKTsKKyAgICBtdWx0
aUNvbHVtbkZsb3cuZGVsZXRlTGluZXMoKTsKKworICAgIC8vIE1vdmUgc3Bhbm5lcnMgYmFjayB0
byB0aGVpciBvcmlnaW5hbCBET00gcG9zaXRpb24gaW4gdGhlIHRyZWUsIGFuZCBkZXN0cm95IHRo
ZSBwbGFjZWhvbGRlcnMuCisgICAgYXV0byYgc3Bhbm5lcnMgPSBtdWx0aUNvbHVtbkZsb3cuc3Bh
bm5lck1hcCgpOworICAgIFZlY3RvcjxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRl
cio+IHBsYWNlaG9sZGVyc1RvRGVsZXRlOworICAgIGZvciAoYXV0byYgc3Bhbm5lckFuZFBsYWNl
aG9sZGVyIDogc3Bhbm5lcnMpCisgICAgICAgIHBsYWNlaG9sZGVyc1RvRGVsZXRlLmFwcGVuZChz
cGFubmVyQW5kUGxhY2Vob2xkZXIudmFsdWUuZ2V0KCkpOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8
UmVuZGVyRWxlbWVudCosIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+Pj4gcGFyZW50QW5kU3Bhbm5l
ckxpc3Q7CisgICAgZm9yIChhdXRvKiBwbGFjZWhvbGRlciA6IHBsYWNlaG9sZGVyc1RvRGVsZXRl
KSB7CisgICAgICAgIGF1dG8qIHNwYW5uZXJPcmlnaW5hbFBhcmVudCA9IHBsYWNlaG9sZGVyLT5w
YXJlbnQoKTsKKyAgICAgICAgaWYgKHNwYW5uZXJPcmlnaW5hbFBhcmVudCA9PSAmbXVsdGlDb2x1
bW5GbG93KQorICAgICAgICAgICAgc3Bhbm5lck9yaWdpbmFsUGFyZW50ID0gJmZsb3c7CisgICAg
ICAgIC8vIERldGFjaGluZyB0aGUgc3Bhbm5lciB0YWtlcyBjYXJlIG9mIHJlbW92aW5nIHRoZSBw
bGFjZWhvbGRlciAoYW5kIG1lcmdlcyB0aGUgUmVuZGVyTXVsdGlDb2x1bW5TZXRzKS4KKyAgICAg
ICAgYXV0byogc3Bhbm5lciA9IHBsYWNlaG9sZGVyLT5zcGFubmVyKCk7CisgICAgICAgIHBhcmVu
dEFuZFNwYW5uZXJMaXN0LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihzcGFubmVyT3JpZ2luYWxQYXJl
bnQsIHNwYW5uZXItPnBhcmVudCgpLT50YWtlQ2hpbGQoKnNwYW5uZXIpKSk7CisgICAgfQorICAg
IHdoaWxlIChhdXRvKiBjb2x1bW5TZXQgPSBtdWx0aUNvbHVtbkZsb3cuZmlyc3RNdWx0aUNvbHVt
blNldCgpKQorICAgICAgICBjb2x1bW5TZXQtPnJlbW92ZUZyb21QYXJlbnRBbmREZXN0cm95KCk7
CisKKyAgICBmbG93LmNsZWFyTXVsdGlDb2x1bW5GbG93KCk7CisgICAgbXVsdGlDb2x1bW5GbG93
Lm1vdmVBbGxDaGlsZHJlblRvKCZmbG93LCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Tm9ybWFsaXpl
QWZ0ZXJJbnNlcnRpb246Olllcyk7CisgICAgbXVsdGlDb2x1bW5GbG93LnJlbW92ZUZyb21QYXJl
bnRBbmREZXN0cm95KCk7CisgICAgZm9yIChhdXRvJiBwYXJlbnRBbmRTcGFubmVyIDogcGFyZW50
QW5kU3Bhbm5lckxpc3QpCisgICAgICAgIFJlbmRlclRyZWVCdWlsZGVyOjpjdXJyZW50KCktPmlu
c2VydENoaWxkKCpwYXJlbnRBbmRTcGFubmVyLmZpcnN0LCBXVEZNb3ZlKHBhcmVudEFuZFNwYW5u
ZXIuc2Vjb25kKSk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRh
dGluZy9SZW5kZXJUcmVlQnVpbGRlck11bHRpQ29sdW1uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJNdWx0aUNvbHVt
bi5jcHAJKHJldmlzaW9uIDIyNjE3MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRh
dGluZy9SZW5kZXJUcmVlQnVpbGRlck11bHRpQ29sdW1uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjIsNyArMjIsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW5k
ZXJUcmVlVXBkYXRlck11bHRpQ29sdW1uLmgiCisjaW5jbHVkZSAiUmVuZGVyVHJlZUJ1aWxkZXJN
dWx0aUNvbHVtbi5oIgogCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCiAjaW5jbHVkZSAi
UmVuZGVyQ2hpbGRJdGVyYXRvci5oIgpAQCAtMzMsNyArMzMsMTIgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi12b2lkIFJlbmRlclRyZWVVcGRhdGVyOjpNdWx0aUNvbHVtbjo6dXBkYXRlKFJl
bmRlckJsb2NrRmxvdyYgZmxvdykKK1JlbmRlclRyZWVCdWlsZGVyOjpNdWx0aUNvbHVtbjo6TXVs
dGlDb2x1bW4oUmVuZGVyVHJlZUJ1aWxkZXImIGJ1aWxkZXIpCisgICAgOiBtX2J1aWxkZXIoYnVp
bGRlcikKK3sKK30KKwordm9pZCBSZW5kZXJUcmVlQnVpbGRlcjo6TXVsdGlDb2x1bW46OnVwZGF0
ZUFmdGVyRGVzY2VuZGFudHMoUmVuZGVyQmxvY2tGbG93JiBmbG93KQogewogICAgIGJvb2wgbmVl
ZHNGcmFnbWVudGVkRmxvdyA9IGZsb3cucmVxdWlyZXNDb2x1bW5zKGZsb3cuc3R5bGUoKS5jb2x1
bW5Db3VudCgpKTsKICAgICBib29sIGhhc0ZyYWdtZW50ZWRGbG93ID0gZmxvdy5tdWx0aUNvbHVt
bkZsb3coKTsKQEAgLTQ4LDcgKzUzLDcgQEAgdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6TXVsdGlD
b2x1bW46OnVwZAogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6TXVsdGlDb2x1
bW46OmNyZWF0ZUZyYWdtZW50ZWRGbG93KFJlbmRlckJsb2NrRmxvdyYgZmxvdykKK3ZvaWQgUmVu
ZGVyVHJlZUJ1aWxkZXI6Ok11bHRpQ29sdW1uOjpjcmVhdGVGcmFnbWVudGVkRmxvdyhSZW5kZXJC
bG9ja0Zsb3cmIGZsb3cpCiB7CiAgICAgZmxvdy5zZXRDaGlsZHJlbklubGluZShmYWxzZSk7IC8v
IERvIHRoaXMgdG8gYXZvaWQgd3JhcHBpbmcgaW5saW5lIGNoaWxkcmVuIHRoYXQgYXJlIGp1c3Qg
Z29pbmcgdG8gbW92ZSBpbnRvIHRoZSBmbG93IHRocmVhZC4KICAgICBmbG93LmRlbGV0ZUxpbmVz
KCk7CkBAIC03NCwxNCArNzksMTQgQEAgdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6TXVsdGlDb2x1
bW46OmNyZQogICAgICAgICAgICAgYXV0byYgc3Bhbm5lck9yaWdpbmFsUGFyZW50ID0gKnBsYWNl
aG9sZGVyLT5wYXJlbnQoKTsKICAgICAgICAgICAgIC8vIERldGFjaGluZyB0aGUgc3Bhbm5lciB0
YWtlcyBjYXJlIG9mIHJlbW92aW5nIHRoZSBwbGFjZWhvbGRlciAoYW5kIG1lcmdlcyB0aGUgUmVu
ZGVyTXVsdGlDb2x1bW5TZXRzKS4KICAgICAgICAgICAgIGF1dG8gc3Bhbm5lclRvUmVJbnNlcnQg
PSBzcGFubmVyLT5wYXJlbnQoKS0+dGFrZUNoaWxkKCpzcGFubmVyKTsKLSAgICAgICAgICAgIFJl
bmRlclRyZWVCdWlsZGVyOjpjdXJyZW50KCktPmluc2VydENoaWxkKHNwYW5uZXJPcmlnaW5hbFBh
cmVudCwgV1RGTW92ZShzcGFubmVyVG9SZUluc2VydCkpOworICAgICAgICAgICAgbV9idWlsZGVy
Lmluc2VydENoaWxkKHNwYW5uZXJPcmlnaW5hbFBhcmVudCwgV1RGTW92ZShzcGFubmVyVG9SZUlu
c2VydCkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgYXV0byBuZXdGcmFnbWVudGVkRmxvdyA9
IFdlYkNvcmU6OmNyZWF0ZVJlbmRlcmVyPFJlbmRlck11bHRpQ29sdW1uRmxvdz4oZmxvdy5kb2N1
bWVudCgpLCBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShmbG93
LnN0eWxlKCksIEJMT0NLKSk7CiAgICAgbmV3RnJhZ21lbnRlZEZsb3ctPmluaXRpYWxpemVTdHls
ZSgpOwogICAgIGF1dG8mIGZyYWdtZW50ZWRGbG93ID0gKm5ld0ZyYWdtZW50ZWRGbG93OwotICAg
IGZsb3cuUmVuZGVyQmxvY2s6OmFkZENoaWxkKCpSZW5kZXJUcmVlQnVpbGRlcjo6Y3VycmVudCgp
LCBXVEZNb3ZlKG5ld0ZyYWdtZW50ZWRGbG93KSk7CisgICAgZmxvdy5SZW5kZXJCbG9jazo6YWRk
Q2hpbGQobV9idWlsZGVyLCBXVEZNb3ZlKG5ld0ZyYWdtZW50ZWRGbG93KSk7CiAKICAgICAvLyBS
ZXBhcmVudCBjaGlsZHJlbiBwcmVjZWRpbmcgdGhlIGZyYWdtZW50ZWQgZmxvdyBpbnRvIHRoZSBm
cmFnbWVudGVkIGZsb3cuCiAgICAgZmxvdy5tb3ZlQ2hpbGRyZW5UbygmZnJhZ21lbnRlZEZsb3cs
IGZsb3cuZmlyc3RDaGlsZCgpLCAmZnJhZ21lbnRlZEZsb3csIFJlbmRlckJveE1vZGVsT2JqZWN0
OjpOb3JtYWxpemVBZnRlckluc2VydGlvbjo6WWVzKTsKQEAgLTk2LDcgKzEwMSw3IEBAIHZvaWQg
UmVuZGVyVHJlZVVwZGF0ZXI6Ok11bHRpQ29sdW1uOjpjcmUKICAgICBmbG93LnNldE11bHRpQ29s
dW1uRmxvdyhmcmFnbWVudGVkRmxvdyk7CiB9CiAKLXZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6Ok11
bHRpQ29sdW1uOjpkZXN0cm95RnJhZ21lbnRlZEZsb3coUmVuZGVyQmxvY2tGbG93JiBmbG93KQor
dm9pZCBSZW5kZXJUcmVlQnVpbGRlcjo6TXVsdGlDb2x1bW46OmRlc3Ryb3lGcmFnbWVudGVkRmxv
dyhSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCiB7CiAgICAgYXV0byYgbXVsdGlDb2x1bW5GbG93ID0g
KmZsb3cubXVsdGlDb2x1bW5GbG93KCk7CiAgICAgbXVsdGlDb2x1bW5GbG93LmRlbGV0ZUxpbmVz
KCk7CkBAIC0xMjIsNyArMTI3LDcgQEAgdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6TXVsdGlDb2x1
bW46OmRlcwogICAgIG11bHRpQ29sdW1uRmxvdy5tb3ZlQWxsQ2hpbGRyZW5UbygmZmxvdywgUmVu
ZGVyQm94TW9kZWxPYmplY3Q6Ok5vcm1hbGl6ZUFmdGVySW5zZXJ0aW9uOjpZZXMpOwogICAgIG11
bHRpQ29sdW1uRmxvdy5yZW1vdmVGcm9tUGFyZW50QW5kRGVzdHJveSgpOwogICAgIGZvciAoYXV0
byYgcGFyZW50QW5kU3Bhbm5lciA6IHBhcmVudEFuZFNwYW5uZXJMaXN0KQotICAgICAgICBSZW5k
ZXJUcmVlQnVpbGRlcjo6Y3VycmVudCgpLT5pbnNlcnRDaGlsZCgqcGFyZW50QW5kU3Bhbm5lci5m
aXJzdCwgV1RGTW92ZShwYXJlbnRBbmRTcGFubmVyLnNlY29uZCkpOworICAgICAgICBtX2J1aWxk
ZXIuaW5zZXJ0Q2hpbGQoKnBhcmVudEFuZFNwYW5uZXIuZmlyc3QsIFdURk1vdmUocGFyZW50QW5k
U3Bhbm5lci5zZWNvbmQpKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyTXVsdGlDb2x1bW4uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJNdWx0aUNv
bHVtbi5oCShyZXZpc2lvbiAyMjYxNzIpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91
cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlck11bHRpQ29sdW1uLmg6MjI2MTcyKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyTXVsdGlDb2x1bW4u
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlci5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFJlbmRlckJsb2NrRmxvdzsKKworY2xhc3MgUmVuZGVyVHJlZVVwZGF0ZXI6
Ok11bHRpQ29sdW1uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGUoUmVuZGVyQmxv
Y2tGbG93Jik7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgY3JlYXRlRnJhZ21lbnRlZEZs
b3coUmVuZGVyQmxvY2tGbG93Jik7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveUZyYWdtZW50ZWRG
bG93KFJlbmRlckJsb2NrRmxvdyYpOworfTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyTXVsdGlDb2x1bW4uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJN
dWx0aUNvbHVtbi5oCShyZXZpc2lvbiAyMjYxNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJNdWx0aUNvbHVtbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSwxOSArMjUsMjMgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJSZW5kZXJU
cmVlVXBkYXRlci5oIgorI2luY2x1ZGUgIlJlbmRlclRyZWVCdWlsZGVyLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVuZGVyQmxvY2tGbG93OwogCi1jbGFzcyBSZW5kZXJUcmVl
VXBkYXRlcjo6TXVsdGlDb2x1bW4geworY2xhc3MgUmVuZGVyVHJlZUJ1aWxkZXI6Ok11bHRpQ29s
dW1uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCB1cGRhdGUoUmVuZGVyQmxvY2tGbG93Jik7
CisgICAgTXVsdGlDb2x1bW4oUmVuZGVyVHJlZUJ1aWxkZXImKTsKKworICAgIHZvaWQgdXBkYXRl
QWZ0ZXJEZXNjZW5kYW50cyhSZW5kZXJCbG9ja0Zsb3cmKTsKIAogcHJpdmF0ZToKLSAgICBzdGF0
aWMgdm9pZCBjcmVhdGVGcmFnbWVudGVkRmxvdyhSZW5kZXJCbG9ja0Zsb3cmKTsKLSAgICBzdGF0
aWMgdm9pZCBkZXN0cm95RnJhZ21lbnRlZEZsb3coUmVuZGVyQmxvY2tGbG93Jik7CisgICAgdm9p
ZCBjcmVhdGVGcmFnbWVudGVkRmxvdyhSZW5kZXJCbG9ja0Zsb3cmKTsKKyAgICB2b2lkIGRlc3Ry
b3lGcmFnbWVudGVkRmxvdyhSZW5kZXJCbG9ja0Zsb3cmKTsKKworICAgIFJlbmRlclRyZWVCdWls
ZGVyJiBtX2J1aWxkZXI7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
dXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlci5jcHAJKHJldmlzaW9uIDIy
NjE3MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBk
YXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDExICs0MCw3IEBACiAjaW5jbHVkZSAiUmVu
ZGVyRGVzY2VuZGFudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyRnVsbFNjcmVlbi5oIgog
I2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgotI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCi0j
aW5jbHVkZSAiUmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5oIgogI2luY2x1ZGUgIlJlbmRl
clRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5oIgotI2luY2x1ZGUgIlJlbmRlclRyZWVVcGRh
dGVyTGlzdEl0ZW0uaCIKLSNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlck11bHRpQ29sdW1uLmgi
CiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxlVHJlZVJlc29sdmVy
LmgiCiAjaW5jbHVkZSA8d3RmL1N5c3RlbVRyYWNpbmcuaD4KQEAgLTEzNSw3ICsxMzEsNyBAQCB2
b2lkIFJlbmRlclRyZWVVcGRhdGVyOjpjb21taXQoc3RkOjp1bmlxCiAKICAgICBnZW5lcmF0ZWRD
b250ZW50KCkudXBkYXRlUmVtYWluaW5nUXVvdGVzKCk7CiAKLSAgICBNdWx0aUNvbHVtbjo6dXBk
YXRlKHJlbmRlclZpZXcoKSk7CisgICAgbV9idWlsZGVyLnVwZGF0ZUFmdGVyRGVzY2VuZGFudHMo
cmVuZGVyVmlldygpKTsKIAogICAgIG1fc3R5bGVVcGRhdGUgPSBudWxscHRyOwogfQpAQCAtMjcz
LDEyICsyNjksNiBAQCB2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjp1cGRhdGVBZnRlckRlc2NlCiAK
ICAgICBtX2J1aWxkZXIudXBkYXRlQWZ0ZXJEZXNjZW5kYW50cygqcmVuZGVyZXIpOwogCi0gICAg
Ly8gVGhlc2UgZnVuY3Rpb25zIGRvIHJlbmRlciB0cmVlIG11dGF0aW9ucyB0aGF0IHJlcXVpcmUg
ZGVzY2VuZGFudCByZW5kZXJlcnMuCi0gICAgaWYgKGlzPFJlbmRlckxpc3RJdGVtPigqcmVuZGVy
ZXIpKQotICAgICAgICBMaXN0SXRlbTo6dXBkYXRlTWFya2VyKG1fYnVpbGRlciwgZG93bmNhc3Q8
UmVuZGVyTGlzdEl0ZW0+KCpyZW5kZXJlcikpOwotICAgIGlmIChpczxSZW5kZXJCbG9ja0Zsb3c+
KCpyZW5kZXJlcikpCi0gICAgICAgIE11bHRpQ29sdW1uOjp1cGRhdGUoZG93bmNhc3Q8UmVuZGVy
QmxvY2tGbG93PigqcmVuZGVyZXIpKTsKLQogICAgIGlmIChlbGVtZW50Lmhhc0N1c3RvbVN0eWxl
UmVzb2x2ZUNhbGxiYWNrcygpICYmIHVwZGF0ZXMgJiYgdXBkYXRlcy0+dXBkYXRlLmNoYW5nZSA9
PSBTdHlsZTo6RGV0YWNoKQogICAgICAgICBlbGVtZW50LmRpZEF0dGFjaFJlbmRlcmVycygpOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRh
dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1Jl
bmRlclRyZWVVcGRhdGVyLmgJKHJldmlzaW9uIDIyNjE3MikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MSwxMSArNTEsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgdGVhckRvd25SZW5kZXJlcnMo
RWxlbWVudCYpOwogICAgIHN0YXRpYyB2b2lkIHRlYXJEb3duUmVuZGVyZXIoVGV4dCYpOwogCi0g
ICAgY2xhc3MgTGlzdEl0ZW07Ci0KIHByaXZhdGU6CiAgICAgY2xhc3MgR2VuZXJhdGVkQ29udGVu
dDsKLSAgICBjbGFzcyBNdWx0aUNvbHVtbjsKIAogICAgIHZvaWQgdXBkYXRlUmVuZGVyVHJlZShD
b250YWluZXJOb2RlJiByb290KTsKICAgICB2b2lkIHVwZGF0ZVRleHRSZW5kZXJlcihUZXh0Jiwg
Y29uc3QgU3R5bGU6OlRleHRVcGRhdGUqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRlbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRl
ckdlbmVyYXRlZENvbnRlbnQuY3BwCShyZXZpc2lvbiAyMjYxNzIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIlJlbmRlckltYWdl
LmgiCiAjaW5jbHVkZSAiUmVuZGVyUXVvdGUuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRl
ci5oIgotI2luY2x1ZGUgIlJlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uaCIKICNpbmNsdWRlICJT
dHlsZVRyZWVSZXNvbHZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNTIsOCArMTUx
LDcgQEAgdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6R2VuZXJhdGVkQ29udGVudAogICAgICAgICBm
b3IgKGF1dG8mIGNoaWxkIDogZGVzY2VuZGFudHNPZlR5cGU8UmVuZGVyUXVvdGU+KCpwc2V1ZG9F
bGVtZW50UmVuZGVyZXIpKQogICAgICAgICAgICAgdXBkYXRlUXVvdGVzVXBUbygmY2hpbGQpOwog
ICAgIH0KLSAgICBpZiAoaXM8UmVuZGVyTGlzdEl0ZW0+KCpwc2V1ZG9FbGVtZW50UmVuZGVyZXIp
KQotICAgICAgICBMaXN0SXRlbTo6dXBkYXRlTWFya2VyKG1fdXBkYXRlci5tX2J1aWxkZXIsIGRv
d25jYXN0PFJlbmRlckxpc3RJdGVtPigqcHNldWRvRWxlbWVudFJlbmRlcmVyKSk7CisgICAgbV91
cGRhdGVyLm1fYnVpbGRlci51cGRhdGVBZnRlckRlc2NlbmRhbnRzKCpwc2V1ZG9FbGVtZW50UmVu
ZGVyZXIpOwogfQogCiBib29sIFJlbmRlclRyZWVVcGRhdGVyOjpHZW5lcmF0ZWRDb250ZW50Ojpu
ZWVkc1BzZXVkb0VsZW1lbnQoY29uc3Qgc3RkOjpvcHRpb25hbDxTdHlsZTo6RWxlbWVudFVwZGF0
ZT4mIHVwZGF0ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5k
ZXJUcmVlVXBkYXRlckxpc3RJdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5jcHAJKHJldmlzaW9u
IDIyNjE3MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVl
VXBkYXRlckxpc3RJdGVtLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDEyMyArMCwwIEBACi0vKioK
LSAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogICAg
ICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29w
eXJpZ2h0IChDKSAyMDAzLTIwMDYsIDIwMTAsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFuZHJldyBXZWxsaW5ndG9uIChwcm90b25A
d2lyZXRhcHBlZC5uZXQpCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVy
VHJlZVVwZGF0ZXJMaXN0SXRlbS5oIgotCi0jaW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5o
IgotI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJNdWx0aUNv
bHVtbkZsb3cuaCIKLSNpbmNsdWRlICJSZW5kZXJSdWJ5LmgiCi0jaW5jbHVkZSAiUmVuZGVyVGFi
bGUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgUmVuZGVyQmxvY2sqIGdldFBh
cmVudE9mRmlyc3RMaW5lQm94KFJlbmRlckJsb2NrJiBjdXJyZW50LCBSZW5kZXJPYmplY3QmIG1h
cmtlcikKLXsKLSAgICBib29sIGluUXVpcmtzTW9kZSA9IGN1cnJlbnQuZG9jdW1lbnQoKS5pblF1
aXJrc01vZGUoKTsKLSAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVy
T2JqZWN0PihjdXJyZW50KSkgewotICAgICAgICBpZiAoJmNoaWxkID09ICZtYXJrZXIpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoY2hpbGQuaXNJbmxpbmUoKSAmJiAoIWlz
PFJlbmRlcklubGluZT4oY2hpbGQpIHx8IGN1cnJlbnQuZ2VuZXJhdGVzTGluZUJveGVzRm9ySW5s
aW5lQ2hpbGQoJmNoaWxkKSkpCi0gICAgICAgICAgICByZXR1cm4gJmN1cnJlbnQ7Ci0KLSAgICAg
ICAgaWYgKGNoaWxkLmlzRmxvYXRpbmcoKSB8fCBjaGlsZC5pc091dE9mRmxvd1Bvc2l0aW9uZWQo
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICghaXM8UmVuZGVyQmxvY2s+
KGNoaWxkKSB8fCBpczxSZW5kZXJUYWJsZT4oY2hpbGQpIHx8IGlzPFJlbmRlclJ1YnlBc0Jsb2Nr
PihjaGlsZCkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAoaXM8UmVuZGVyQm94
PihjaGlsZCkgJiYgZG93bmNhc3Q8UmVuZGVyQm94PihjaGlsZCkuaXNXcml0aW5nTW9kZVJvb3Qo
KSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChpczxSZW5kZXJMaXN0SXRlbT4o
Y3VycmVudCkgJiYgaW5RdWlya3NNb2RlICYmIGNoaWxkLm5vZGUoKSAmJiBpc0hUTUxMaXN0RWxl
bWVudCgqY2hpbGQubm9kZSgpKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChS
ZW5kZXJCbG9jayogbGluZUJveCA9IGdldFBhcmVudE9mRmlyc3RMaW5lQm94KGRvd25jYXN0PFJl
bmRlckJsb2NrPihjaGlsZCksIG1hcmtlcikpCi0gICAgICAgICAgICByZXR1cm4gbGluZUJveDsK
LSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIFJlbmRlck9iamVjdCog
Zmlyc3ROb25NYXJrZXJDaGlsZChSZW5kZXJCbG9jayYgcGFyZW50KQotewotICAgIFJlbmRlck9i
amVjdCogY2hpbGQgPSBwYXJlbnQuZmlyc3RDaGlsZCgpOwotICAgIHdoaWxlIChpczxSZW5kZXJM
aXN0TWFya2VyPihjaGlsZCkpCi0gICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7
Ci0gICAgcmV0dXJuIGNoaWxkOwotfQotCi12b2lkIFJlbmRlclRyZWVVcGRhdGVyOjpMaXN0SXRl
bTo6dXBkYXRlTWFya2VyKFJlbmRlclRyZWVCdWlsZGVyJiBidWlsZGVyLCBSZW5kZXJMaXN0SXRl
bSYgbGlzdEl0ZW1SZW5kZXJlcikKLXsKLSAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKCFsaXN0SXRlbVJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRD
b250ZXh0KCkubGF5b3V0U3RhdGUoKSk7Ci0KLSAgICBhdXRvJiBzdHlsZSA9IGxpc3RJdGVtUmVu
ZGVyZXIuc3R5bGUoKTsKLQotICAgIGlmIChzdHlsZS5saXN0U3R5bGVUeXBlKCkgPT0gTm9uZUxp
c3RTdHlsZSAmJiAoIXN0eWxlLmxpc3RTdHlsZUltYWdlKCkgfHwgc3R5bGUubGlzdFN0eWxlSW1h
Z2UoKS0+ZXJyb3JPY2N1cnJlZCgpKSkgewotICAgICAgICBpZiAoYXV0byogbWFya2VyID0gbGlz
dEl0ZW1SZW5kZXJlci5tYXJrZXJSZW5kZXJlcigpKQotICAgICAgICAgICAgbWFya2VyLT5yZW1v
dmVGcm9tUGFyZW50QW5kRGVzdHJveSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
YXV0byBuZXdTdHlsZSA9IGxpc3RJdGVtUmVuZGVyZXIuY29tcHV0ZU1hcmtlclN0eWxlKCk7Ci0g
ICAgUmVuZGVyUHRyPFJlbmRlckxpc3RNYXJrZXI+IG5ld01hcmtlclJlbmRlcmVyOwotICAgIGF1
dG8qIG1hcmtlclJlbmRlcmVyID0gbGlzdEl0ZW1SZW5kZXJlci5tYXJrZXJSZW5kZXJlcigpOwot
ICAgIGlmIChtYXJrZXJSZW5kZXJlcikKLSAgICAgICAgbWFya2VyUmVuZGVyZXItPnNldFN0eWxl
KFdURk1vdmUobmV3U3R5bGUpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgbmV3TWFya2VyUmVuZGVy
ZXIgPSBXZWJDb3JlOjpjcmVhdGVSZW5kZXJlcjxSZW5kZXJMaXN0TWFya2VyPihsaXN0SXRlbVJl
bmRlcmVyLCBXVEZNb3ZlKG5ld1N0eWxlKSk7Ci0gICAgICAgIG5ld01hcmtlclJlbmRlcmVyLT5p
bml0aWFsaXplU3R5bGUoKTsKLSAgICAgICAgbWFya2VyUmVuZGVyZXIgPSBuZXdNYXJrZXJSZW5k
ZXJlci5nZXQoKTsKLSAgICAgICAgbGlzdEl0ZW1SZW5kZXJlci5zZXRNYXJrZXJSZW5kZXJlcigq
bWFya2VyUmVuZGVyZXIpOwotICAgIH0KLQotICAgIFJlbmRlckVsZW1lbnQqIGN1cnJlbnRQYXJl
bnQgPSBtYXJrZXJSZW5kZXJlci0+cGFyZW50KCk7Ci0gICAgUmVuZGVyQmxvY2sqIG5ld1BhcmVu
dCA9IGdldFBhcmVudE9mRmlyc3RMaW5lQm94KGxpc3RJdGVtUmVuZGVyZXIsICptYXJrZXJSZW5k
ZXJlcik7Ci0gICAgaWYgKCFuZXdQYXJlbnQpIHsKLSAgICAgICAgLy8gSWYgdGhlIG1hcmtlciBp
cyBjdXJyZW50bHkgY29udGFpbmVkIGluc2lkZSBhbiBhbm9ueW1vdXMgYm94LAotICAgICAgICAv
LyB0aGVuIHdlIGFyZSB0aGUgb25seSBpdGVtIGluIHRoYXQgYW5vbnltb3VzIGJveCAoc2luY2Ug
bm8gbGluZSBib3gKLSAgICAgICAgLy8gcGFyZW50IHdhcyBmb3VuZCkuIEl0J3Mgb2sgdG8ganVz
dCBsZWF2ZSB0aGUgbWFya2VyIHdoZXJlIGl0IGlzCi0gICAgICAgIC8vIGluIHRoaXMgY2FzZS4K
LSAgICAgICAgaWYgKGN1cnJlbnRQYXJlbnQgJiYgY3VycmVudFBhcmVudC0+aXNBbm9ueW1vdXNC
bG9jaygpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoYXV0byogbXVsdGlDb2x1
bW5GbG93ID0gbGlzdEl0ZW1SZW5kZXJlci5tdWx0aUNvbHVtbkZsb3coKSkKLSAgICAgICAgICAg
IG5ld1BhcmVudCA9IG11bHRpQ29sdW1uRmxvdzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
bmV3UGFyZW50ID0gJmxpc3RJdGVtUmVuZGVyZXI7Ci0gICAgfQotCi0gICAgaWYgKG5ld1BhcmVu
dCAhPSBjdXJyZW50UGFyZW50KSB7Ci0gICAgICAgIGlmIChjdXJyZW50UGFyZW50KQotICAgICAg
ICAgICAgYnVpbGRlci5pbnNlcnRDaGlsZCgqbmV3UGFyZW50LCBjdXJyZW50UGFyZW50LT50YWtl
Q2hpbGQoKm1hcmtlclJlbmRlcmVyKSwgZmlyc3ROb25NYXJrZXJDaGlsZCgqbmV3UGFyZW50KSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJ1aWxkZXIuaW5zZXJ0Q2hpbGQoKm5ld1BhcmVu
dCwgV1RGTW92ZShuZXdNYXJrZXJSZW5kZXJlciksIGZpcnN0Tm9uTWFya2VyQ2hpbGQoKm5ld1Bh
cmVudCkpOwotCi0gICAgICAgIC8vIElmIGN1cnJlbnQgcGFyZW50IGlzIGFuIGFub255bW91cyBi
bG9jayB0aGF0IGhhcyBsb3N0IGFsbCBpdHMgY2hpbGRyZW4sIGRlc3Ryb3kgaXQuCi0gICAgICAg
IGlmIChjdXJyZW50UGFyZW50ICYmIGN1cnJlbnRQYXJlbnQtPmlzQW5vbnltb3VzQmxvY2soKSAm
JiAhY3VycmVudFBhcmVudC0+Zmlyc3RDaGlsZCgpICYmICFkb3duY2FzdDxSZW5kZXJCbG9jaz4o
KmN1cnJlbnRQYXJlbnQpLmNvbnRpbnVhdGlvbigpKQotICAgICAgICAgICAgY3VycmVudFBhcmVu
dC0+cmVtb3ZlRnJvbVBhcmVudEFuZERlc3Ryb3koKTsKLSAgICB9Ci19Ci0KLX0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRl
clRyZWVVcGRhdGVyTGlzdEl0ZW0uaAkocmV2aXNpb24gMjI2MTcyKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uaAkobm9uZXhp
c3RlbnQpCkBAIC0xLDM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lu
Y2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCi0jaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXIuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJUcmVlVXBkYXRlcjo6TGlzdEl0
ZW0gewotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIHVwZGF0ZU1hcmtlcihSZW5kZXJUcmVlQnVp
bGRlciYsIFJlbmRlckxpc3RJdGVtJik7Ci19OwotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXJNdWx0aUNvbHVtbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRh
dGVyTXVsdGlDb2x1bW4uY3BwCShyZXZpc2lvbiAyMjYxNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXJNdWx0aUNvbHVtbi5jcHAJKG5vbmV4
aXN0ZW50KQpAQCAtMSwxMjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQotICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZp
c3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogICAgICAgICAgIChDKSAyMDA3IERhdmlkIFNtaXRo
IChjYXRmaXNoLm1hbkBnbWFpbC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNSwgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlck11bHRpQ29sdW1uLmgiCi0K
LSNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKLSNpbmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJh
dG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93LmgiCi0jaW5jbHVkZSAiUmVu
ZGVyTXVsdGlDb2x1bW5TZXQuaCIKLSNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQ
bGFjZWhvbGRlci5oIgotI2luY2x1ZGUgIlJlbmRlclRyZWVCdWlsZGVyLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6TXVsdGlDb2x1bW46OnVwZGF0
ZShSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCi17Ci0gICAgYm9vbCBuZWVkc0ZyYWdtZW50ZWRGbG93
ID0gZmxvdy5yZXF1aXJlc0NvbHVtbnMoZmxvdy5zdHlsZSgpLmNvbHVtbkNvdW50KCkpOwotICAg
IGJvb2wgaGFzRnJhZ21lbnRlZEZsb3cgPSBmbG93Lm11bHRpQ29sdW1uRmxvdygpOwotCi0gICAg
aWYgKCFoYXNGcmFnbWVudGVkRmxvdyAmJiBuZWVkc0ZyYWdtZW50ZWRGbG93KSB7Ci0gICAgICAg
IGNyZWF0ZUZyYWdtZW50ZWRGbG93KGZsb3cpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGlmIChoYXNGcmFnbWVudGVkRmxvdyAmJiAhbmVlZHNGcmFnbWVudGVkRmxvdykgewotICAgICAg
ICBkZXN0cm95RnJhZ21lbnRlZEZsb3coZmxvdyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19
Ci0KLXZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6Ok11bHRpQ29sdW1uOjpjcmVhdGVGcmFnbWVudGVk
RmxvdyhSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCi17Ci0gICAgZmxvdy5zZXRDaGlsZHJlbklubGlu
ZShmYWxzZSk7IC8vIERvIHRoaXMgdG8gYXZvaWQgd3JhcHBpbmcgaW5saW5lIGNoaWxkcmVuIHRo
YXQgYXJlIGp1c3QgZ29pbmcgdG8gbW92ZSBpbnRvIHRoZSBmbG93IHRocmVhZC4KLSAgICBmbG93
LmRlbGV0ZUxpbmVzKCk7Ci0gICAgLy8gSWYgdGhpcyBzb29uLXRvLWJlIG11bHRpY29sdW1uIGZs
b3cgaXMgYWxyZWFkeSBwYXJ0IG9mIGEgbXVsdGljb2x1bW4gY29udGV4dCwgd2UgbmVlZCB0byBt
b3ZlIGJhY2sgdGhlIGRlc2NlbmRhbnQgc3Bhbm5lcnMKLSAgICAvLyB0byB0aGVpciBvcmlnaW5h
bCBwb3NpdGlvbiBiZWZvcmUgbW92aW5nIHN1YnRyZWVzIGFyb3VuZC4KLSAgICBhdXRvKiBlbmNs
b3NpbmdmbG93ID0gZmxvdy5lbmNsb3NpbmdGcmFnbWVudGVkRmxvdygpOwotICAgIGlmIChpczxS
ZW5kZXJNdWx0aUNvbHVtbkZsb3c+KGVuY2xvc2luZ2Zsb3cpKSB7Ci0gICAgICAgIGF1dG8mIHNw
YW5uZXJzID0gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5GbG93PihlbmNsb3NpbmdmbG93KS0+
c3Bhbm5lck1hcCgpOwotICAgICAgICBWZWN0b3I8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxh
Y2Vob2xkZXIqPiBwbGFjZWhvbGRlcnNUb0RlbGV0ZTsKLSAgICAgICAgZm9yIChhdXRvJiBzcGFu
bmVyQW5kUGxhY2Vob2xkZXIgOiBzcGFubmVycykgewotICAgICAgICAgICAgYXV0byYgcGxhY2Vo
b2xkZXIgPSAqc3Bhbm5lckFuZFBsYWNlaG9sZGVyLnZhbHVlOwotICAgICAgICAgICAgaWYgKCFw
bGFjZWhvbGRlci5pc0Rlc2NlbmRhbnRPZigmZmxvdykpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBwbGFjZWhvbGRlcnNUb0RlbGV0ZS5hcHBlbmQoJnBsYWNlaG9sZGVy
KTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGF1dG8qIHBsYWNlaG9sZGVyIDogcGxhY2Vob2xk
ZXJzVG9EZWxldGUpIHsKLSAgICAgICAgICAgIGF1dG8qIHNwYW5uZXIgPSBwbGFjZWhvbGRlci0+
c3Bhbm5lcigpOwotICAgICAgICAgICAgaWYgKCFzcGFubmVyKSB7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAvLyBNb3ZlIHRoZSBzcGFubmVyIGJhY2sgdG8gaXRzIG9yaWdp
bmFsIHBvc2l0aW9uLgotICAgICAgICAgICAgYXV0byYgc3Bhbm5lck9yaWdpbmFsUGFyZW50ID0g
KnBsYWNlaG9sZGVyLT5wYXJlbnQoKTsKLSAgICAgICAgICAgIC8vIERldGFjaGluZyB0aGUgc3Bh
bm5lciB0YWtlcyBjYXJlIG9mIHJlbW92aW5nIHRoZSBwbGFjZWhvbGRlciAoYW5kIG1lcmdlcyB0
aGUgUmVuZGVyTXVsdGlDb2x1bW5TZXRzKS4KLSAgICAgICAgICAgIGF1dG8gc3Bhbm5lclRvUmVJ
bnNlcnQgPSBzcGFubmVyLT5wYXJlbnQoKS0+dGFrZUNoaWxkKCpzcGFubmVyKTsKLSAgICAgICAg
ICAgIFJlbmRlclRyZWVCdWlsZGVyOjpjdXJyZW50KCktPmluc2VydENoaWxkKHNwYW5uZXJPcmln
aW5hbFBhcmVudCwgV1RGTW92ZShzcGFubmVyVG9SZUluc2VydCkpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgYXV0byBuZXdGcmFnbWVudGVkRmxvdyA9IFdlYkNvcmU6OmNyZWF0ZVJlbmRlcmVy
PFJlbmRlck11bHRpQ29sdW1uRmxvdz4oZmxvdy5kb2N1bWVudCgpLCBSZW5kZXJTdHlsZTo6Y3Jl
YXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShmbG93LnN0eWxlKCksIEJMT0NLKSk7Ci0gICAg
bmV3RnJhZ21lbnRlZEZsb3ctPmluaXRpYWxpemVTdHlsZSgpOwotICAgIGF1dG8mIGZyYWdtZW50
ZWRGbG93ID0gKm5ld0ZyYWdtZW50ZWRGbG93OwotICAgIGZsb3cuUmVuZGVyQmxvY2s6OmFkZENo
aWxkKCpSZW5kZXJUcmVlQnVpbGRlcjo6Y3VycmVudCgpLCBXVEZNb3ZlKG5ld0ZyYWdtZW50ZWRG
bG93KSk7Ci0KLSAgICAvLyBSZXBhcmVudCBjaGlsZHJlbiBwcmVjZWRpbmcgdGhlIGZyYWdtZW50
ZWQgZmxvdyBpbnRvIHRoZSBmcmFnbWVudGVkIGZsb3cuCi0gICAgZmxvdy5tb3ZlQ2hpbGRyZW5U
bygmZnJhZ21lbnRlZEZsb3csIGZsb3cuZmlyc3RDaGlsZCgpLCAmZnJhZ21lbnRlZEZsb3csIFJl
bmRlckJveE1vZGVsT2JqZWN0OjpOb3JtYWxpemVBZnRlckluc2VydGlvbjo6WWVzKTsKLSAgICBp
ZiAoZmxvdy5pc0ZpZWxkc2V0KCkpIHsKLSAgICAgICAgLy8gS2VlcCBsZWdlbmRzIG91dCBvZiB0
aGUgZmxvdyB0aHJlYWQuCi0gICAgICAgIGZvciAoYXV0byYgYm94IDogY2hpbGRyZW5PZlR5cGU8
UmVuZGVyQm94PihmcmFnbWVudGVkRmxvdykpIHsKLSAgICAgICAgICAgIGlmIChib3guaXNMZWdl
bmQoKSkKLSAgICAgICAgICAgICAgICBmcmFnbWVudGVkRmxvdy5tb3ZlQ2hpbGRUbygmZmxvdywg
JmJveCwgUmVuZGVyQm94TW9kZWxPYmplY3Q6Ok5vcm1hbGl6ZUFmdGVySW5zZXJ0aW9uOjpZZXMp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZmxvdy5zZXRNdWx0aUNvbHVtbkZsb3coZnJhZ21l
bnRlZEZsb3cpOwotfQotCi12b2lkIFJlbmRlclRyZWVVcGRhdGVyOjpNdWx0aUNvbHVtbjo6ZGVz
dHJveUZyYWdtZW50ZWRGbG93KFJlbmRlckJsb2NrRmxvdyYgZmxvdykKLXsKLSAgICBhdXRvJiBt
dWx0aUNvbHVtbkZsb3cgPSAqZmxvdy5tdWx0aUNvbHVtbkZsb3coKTsKLSAgICBtdWx0aUNvbHVt
bkZsb3cuZGVsZXRlTGluZXMoKTsKLQotICAgIC8vIE1vdmUgc3Bhbm5lcnMgYmFjayB0byB0aGVp
ciBvcmlnaW5hbCBET00gcG9zaXRpb24gaW4gdGhlIHRyZWUsIGFuZCBkZXN0cm95IHRoZSBwbGFj
ZWhvbGRlcnMuCi0gICAgYXV0byYgc3Bhbm5lcnMgPSBtdWx0aUNvbHVtbkZsb3cuc3Bhbm5lck1h
cCgpOwotICAgIFZlY3RvcjxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcio+IHBs
YWNlaG9sZGVyc1RvRGVsZXRlOwotICAgIGZvciAoYXV0byYgc3Bhbm5lckFuZFBsYWNlaG9sZGVy
IDogc3Bhbm5lcnMpCi0gICAgICAgIHBsYWNlaG9sZGVyc1RvRGVsZXRlLmFwcGVuZChzcGFubmVy
QW5kUGxhY2Vob2xkZXIudmFsdWUuZ2V0KCkpOwotICAgIFZlY3RvcjxzdGQ6OnBhaXI8UmVuZGVy
RWxlbWVudCosIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+Pj4gcGFyZW50QW5kU3Bhbm5lckxpc3Q7
Ci0gICAgZm9yIChhdXRvKiBwbGFjZWhvbGRlciA6IHBsYWNlaG9sZGVyc1RvRGVsZXRlKSB7Ci0g
ICAgICAgIGF1dG8qIHNwYW5uZXJPcmlnaW5hbFBhcmVudCA9IHBsYWNlaG9sZGVyLT5wYXJlbnQo
KTsKLSAgICAgICAgaWYgKHNwYW5uZXJPcmlnaW5hbFBhcmVudCA9PSAmbXVsdGlDb2x1bW5GbG93
KQotICAgICAgICAgICAgc3Bhbm5lck9yaWdpbmFsUGFyZW50ID0gJmZsb3c7Ci0gICAgICAgIC8v
IERldGFjaGluZyB0aGUgc3Bhbm5lciB0YWtlcyBjYXJlIG9mIHJlbW92aW5nIHRoZSBwbGFjZWhv
bGRlciAoYW5kIG1lcmdlcyB0aGUgUmVuZGVyTXVsdGlDb2x1bW5TZXRzKS4KLSAgICAgICAgYXV0
byogc3Bhbm5lciA9IHBsYWNlaG9sZGVyLT5zcGFubmVyKCk7Ci0gICAgICAgIHBhcmVudEFuZFNw
YW5uZXJMaXN0LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihzcGFubmVyT3JpZ2luYWxQYXJlbnQsIHNw
YW5uZXItPnBhcmVudCgpLT50YWtlQ2hpbGQoKnNwYW5uZXIpKSk7Ci0gICAgfQotICAgIHdoaWxl
IChhdXRvKiBjb2x1bW5TZXQgPSBtdWx0aUNvbHVtbkZsb3cuZmlyc3RNdWx0aUNvbHVtblNldCgp
KQotICAgICAgICBjb2x1bW5TZXQtPnJlbW92ZUZyb21QYXJlbnRBbmREZXN0cm95KCk7Ci0KLSAg
ICBmbG93LmNsZWFyTXVsdGlDb2x1bW5GbG93KCk7Ci0gICAgbXVsdGlDb2x1bW5GbG93Lm1vdmVB
bGxDaGlsZHJlblRvKCZmbG93LCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Tm9ybWFsaXplQWZ0ZXJJ
bnNlcnRpb246Olllcyk7Ci0gICAgbXVsdGlDb2x1bW5GbG93LnJlbW92ZUZyb21QYXJlbnRBbmRE
ZXN0cm95KCk7Ci0gICAgZm9yIChhdXRvJiBwYXJlbnRBbmRTcGFubmVyIDogcGFyZW50QW5kU3Bh
bm5lckxpc3QpCi0gICAgICAgIFJlbmRlclRyZWVCdWlsZGVyOjpjdXJyZW50KCktPmluc2VydENo
aWxkKCpwYXJlbnRBbmRTcGFubmVyLmZpcnN0LCBXVEZNb3ZlKHBhcmVudEFuZFNwYW5uZXIuc2Vj
b25kKSk7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9S
ZW5kZXJUcmVlVXBkYXRlck11bHRpQ29sdW1uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyTXVsdGlDb2x1bW4uaAkocmV2
aXNpb24gMjI2MTcyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRl
clRyZWVVcGRhdGVyTXVsdGlDb2x1bW4uaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQzICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlJlbmRlclRyZWVVcGRhdGVy
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVuZGVyQmxvY2tGbG93OwotCi1j
bGFzcyBSZW5kZXJUcmVlVXBkYXRlcjo6TXVsdGlDb2x1bW4gewotcHVibGljOgotICAgIHN0YXRp
YyB2b2lkIHVwZGF0ZShSZW5kZXJCbG9ja0Zsb3cmKTsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMg
dm9pZCBjcmVhdGVGcmFnbWVudGVkRmxvdyhSZW5kZXJCbG9ja0Zsb3cmKTsKLSAgICBzdGF0aWMg
dm9pZCBkZXN0cm95RnJhZ21lbnRlZEZsb3coUmVuZGVyQmxvY2tGbG93Jik7Ci19OwotCi19Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>