<?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>211352</bug_id>
          
          <creation_ts>2020-05-03 09:52:50 -0700</creation_ts>
          <short_desc>[LFC][TFC] Turns horizontal space distribution into a generic space distribution</short_desc>
          <delta_ts>2020-05-03 11:24:16 -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>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="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>koivisto</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>1648343</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-05-03 09:52:50 -0700</bug_when>
    <thetext>so that we can start using it for vertical (row) space distribution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1648344</commentid>
    <comment_count>1</comment_count>
      <attachid>398316</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-05-03 10:04:26 -0700</bug_when>
    <thetext>Created attachment 398316
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1648345</commentid>
    <comment_count>2</comment_count>
      <attachid>398316</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-05-03 10:21:37 -0700</bug_when>
    <thetext>Comment on attachment 398316
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=398316&amp;action=review

&gt; Source/WebCore/layout/tableformatting/TableFormattingContext.cpp:350
&gt; +class ColumnSpan {

Could be struct</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1648349</commentid>
    <comment_count>3</comment_count>
      <attachid>398319</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-05-03 10:52:10 -0700</bug_when>
    <thetext>Created attachment 398319
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1648350</commentid>
    <comment_count>4</comment_count>
      <attachid>398320</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-05-03 10:53:16 -0700</bug_when>
    <thetext>Created attachment 398320
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1648355</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-05-03 11:23:43 -0700</bug_when>
    <thetext>Committed r261064: &lt;https://trac.webkit.org/changeset/261064&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 398320.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1648356</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-05-03 11:24:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/62811631&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398316</attachid>
            <date>2020-05-03 10:04:26 -0700</date>
            <delta_ts>2020-05-03 10:52:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211352-20200503100426.patch</filename>
            <type>text/plain</type>
            <size>19503</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNTc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjM0ZDQ4ZjU5ZjM1YmQy
MzUxZDBiMTFkNThjZGJlMWM4MWQ4MjYzMy4uZmQ0MTE3YzMwMTZmZDU4ZmIxNjU1ZmQ5Yzc3M2Ji
OWY0ZjI0N2ZhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIwLTA1LTAzICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bVEZDXSBUdXJucyBo
b3Jpem9udGFsIHNwYWNlIGRpc3RyaWJ1dGlvbiBpbnRvIGEgZ2VuZXJpYyBzcGFjZSBkaXN0cmli
dXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
MTM1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhv
cml6b250YWwoY29sdW1uKSBhbmQgdmVydGljYWwocm93KSBzcGFjZSBkaXN0cmlidXRpb25zIHVz
ZSBlc3NlbnRpYWxseSB0aGUgc2FtZSBsb2dpYyB0byBkaXN0cmlidXRlCisgICAgICAgIHRoZSBl
eHRyYSBzcGFjZSBhbW9uZyB0aGUgY29sdW1ucy9yb3dzLgorICAgICAgICBUaGlzIHBhdGNoIHR1
cm5zIHRoZSBob3Jpem9udGFsIHNwYWNlIGRpc3RyaWJ1dGlvbiBmdW5jdGlvbiBpbnRvIGEgZ2Vu
ZXJpYyBzcGFjZSBkaXN0cmlidXRpb24gY29kZSBzbworICAgICAgICB0aGF0IHdlIGNhbiB1c2Ug
aXQgZm9yIHJvdyBzaXppbmcgYXMgd2VsbC4gIAorCisgICAgICAgICogbGF5b3V0L3RhYmxlZm9y
bWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6Q29sdW1uU3Bhbjo6aGFzU3Bhbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkNv
bHVtblNwYW46OmlzU3Bhbm5lZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkNvbHVtblNw
YW46OnNwYW5Db3VudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkNvbHVtblNwYW46OnN0
YXJ0U3Bhbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkNvbHVtblNwYW46OmVuZFNwYW4p
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpDb2x1bW5TcGFuOjppbmRleCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkNvbHVtblNwYW46OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpDb2x1bW5TcGFuOjpzcGFjaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
ZGlzdHJpYnV0ZUF2YWlsYWJsZVNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFi
bGVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUFuZERpc3RyaWJ1dGVFeHRyYUhvcml6b250YWxT
cGFjZSk6CisgICAgICAgICogbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUdyaWQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVHcmlkOjpzbG90IGNvbnN0KToKKwogMjAyMC0w
NC0zMCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW1RG
Q10gSW50cm9kdWNlIHN0cnVjdCBSb3dIZWlnaHQgaW4gVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6
Y29tcHV0ZUFuZERpc3RyaWJ1dGVFeHRyYVZlcnRpY2FsU3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGlu
Z0NvbnRleHQuY3BwCmluZGV4IGY1ZjllOGRmZmM3NzEzNDVhYWEzYTRhNDQ4ODM2OGJmMTgxYjgx
MjkuLmFhYWExYjA1OGYzYzc1NDlhNTE1Mjc0NzBmNjk2NDc5OWY4ZGUyZmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29u
dGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJs
ZUZvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtMzQ3LDE0MCArMzQ3LDE2MSBAQCBGb3JtYXR0aW5n
Q29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBUYWJsZUZvcm1hdHRpbmdDb250ZXh0
Ojpjb21wdXRlZFByZQogICAgIHJldHVybiB0YWJsZVdpZHRoQ29uc3RyYWludHM7CiB9CiAKLXZv
aWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUFuZERpc3RyaWJ1dGVFeHRyYUhvcml6
b250YWxTcGFjZShMYXlvdXRVbml0IGF2YWlsYWJsZUhvcml6b250YWxTcGFjZSkKK2NsYXNzIENv
bHVtblNwYW4geworcHVibGljOgorICAgIHN0YXRpYyBzaXplX3QgaGFzU3Bhbihjb25zdCBUYWJs
ZUdyaWQ6OlNsb3QmIHNsb3QpIHsgcmV0dXJuIHNsb3QuaGFzQ29sdW1uU3BhbigpOyB9CisgICAg
c3RhdGljIHNpemVfdCBpc1NwYW5uZWQoY29uc3QgVGFibGVHcmlkOjpTbG90JiBzbG90KSB7IHJl
dHVybiBzbG90LmlzQ29sdW1uU3Bhbm5lZCgpOyB9CisKKyAgICBzdGF0aWMgc2l6ZV90IHNwYW5D
b3VudChjb25zdCBUYWJsZUdyaWQ6OkNlbGwmIGNlbGwpIHsgcmV0dXJuIGNlbGwuY29sdW1uU3Bh
bigpOyB9CisgICAgc3RhdGljIHNpemVfdCBzdGFydFNwYW4oY29uc3QgVGFibGVHcmlkOjpDZWxs
JiBjZWxsKSB7IHJldHVybiBjZWxsLnN0YXJ0Q29sdW1uKCk7IH0KKyAgICBzdGF0aWMgc2l6ZV90
IGVuZFNwYW4oY29uc3QgVGFibGVHcmlkOjpDZWxsJiBjZWxsKSB7IHJldHVybiBjZWxsLmVuZENv
bHVtbigpOyB9CisKKyAgICBzdGF0aWMgc2l6ZV90IGluZGV4KHNpemVfdCBjb2x1bW5JbmRleCwg
c2l6ZV90IC8qcm93SW5kZXgqLykgeyByZXR1cm4gY29sdW1uSW5kZXg7IH0KKyAgICBzdGF0aWMg
c2l6ZV90IHNpemUoY29uc3QgVGFibGVHcmlkJiBncmlkKSB7IHJldHVybiBncmlkLmNvbHVtbnMo
KS5zaXplKCk7IH0KKworICAgIHN0YXRpYyBMYXlvdXRVbml0IHNwYWNpbmcoY29uc3QgVGFibGVH
cmlkJiBncmlkLCBjb25zdCBUYWJsZUdyaWQ6OkNlbGwmIGNlbGwpIHsgcmV0dXJuIChjZWxsLmNv
bHVtblNwYW4oKSAtIDEpICogZ3JpZC5ob3Jpem9udGFsU3BhY2luZygpOyB9Cit9OworCit1c2lu
ZyBEaXN0cmlidXRlZFNwYWNlcyA9IFZlY3RvcjxmbG9hdD47Cit0ZW1wbGF0ZSA8dHlwZW5hbWUg
U3BhblR5cGU+CitzdGF0aWMgRGlzdHJpYnV0ZWRTcGFjZXMgZGlzdHJpYnV0ZUF2YWlsYWJsZVNw
YWNlKGNvbnN0IFRhYmxlR3JpZCYgZ3JpZCwgZmxvYXQgc3BhY2VUb0Rpc3RyaWJ1dGUsIGNvbnN0
IFdURjo6RnVuY3Rpb248TGF5b3V0VW5pdChjb25zdCBUYWJsZUdyaWQ6OlNsb3QmLCBzaXplX3Qp
PiYgc2xvdFNwYWNlKQogewotICAgIGF1dG8mIGdyaWQgPSBmb3JtYXR0aW5nU3RhdGUoKS50YWJs
ZUdyaWQoKTsKKyAgICBzdHJ1Y3QgUmVzb2x2ZWRTcGFjZSB7CisgICAgICAgIGZsb2F0IHZhbHVl
IHsgMCB9OworICAgICAgICBib29sIGlzRml4ZWQgeyBmYWxzZSB9OworICAgIH07CisKICAgICBh
dXRvJiBjb2x1bW5zID0gZ3JpZC5jb2x1bW5zKCk7CiAgICAgYXV0byYgcm93cyA9IGdyaWQucm93
cygpOwotICAgIGF1dG8gdGFibGVXaWR0aENvbnN0cmFpbnRzID0gKmdyaWQud2lkdGhDb25zdHJh
aW50cygpOwotCi0gICAgZW51bSBjbGFzcyBDb2x1bW5XaWR0aEJhbGFuY2luZ0Jhc2UgeyBNaW5p
bXVtV2lkdGgsIE1heGltdW1XaWR0aCB9OwotICAgIGF1dG8gY29tcHV0ZUNvbHVtbldpZHRocyA9
IFsmXSAoYXV0byBjb2x1bW5XaWR0aEJhbGFuY2luZ0Jhc2UsIGF1dG8gZXh0cmFIb3Jpem9udGFs
U3BhY2UpIHsKLSAgICAgICAgYXV0byBzbG90SW5pdGlhbFdpZHRoID0gWyZdIChhdXRvJiBzbG90
KSB7Ci0gICAgICAgICAgICByZXR1cm4gY29sdW1uV2lkdGhCYWxhbmNpbmdCYXNlID09IENvbHVt
bldpZHRoQmFsYW5jaW5nQmFzZTo6TWluaW11bVdpZHRoID8gc2xvdC53aWR0aENvbnN0cmFpbnRz
KCkubWluaW11bSA6IHNsb3Qud2lkdGhDb25zdHJhaW50cygpLm1heGltdW07Ci0gICAgICAgIH07
Ci0gICAgICAgIC8vIDEuIENvbGxlY3QgaW5pdGlhbCB3aWR0aHMgZHJpdmVuIGJ5IDx0ZD4gYWNy
b3NzIGNvbHVtbnMgYnV0IGlnbm9yZSBzcGFubmluZyBjZWxscyBmaXJzdC4KLSAgICAgICAgc3Ry
dWN0IENvbHVtbkluaXRpYWxXaWR0aCB7Ci0gICAgICAgICAgICBmbG9hdCB2YWx1ZSB7IDAgfTsK
LSAgICAgICAgICAgIGJvb2wgaXNGaXhlZCB7IGZhbHNlIH07Ci0gICAgICAgIH07Ci0gICAgICAg
IFZlY3RvcjxPcHRpb25hbDxDb2x1bW5Jbml0aWFsV2lkdGg+PiBjb2x1bW5Jbml0aWFsV2lkdGhz
KGNvbHVtbnMuc2l6ZSgpKTsKLSAgICAgICAgVmVjdG9yPFNsb3RQb3NpdGlvbj4gc3Bhbm5pbmdD
ZWxsUG9zaXRpb25MaXN0OworICAgIC8vIDEuIENvbGxlY3QgdGhlIG5vbi1zcGFubmluZyBzcGFj
ZXMgZmlyc3QuIFRoZXkgYXJlIHVzZWQgZm9yIHRoZSBmaW5hbCBkaXN0cmlidXRpb24gYXMgd2Vs
bCBhcyBmb3IgZGlzdHJpYnV0aW5nIHRoZSBzcGFubmluZyBzcGFjZS4KKyAgICBWZWN0b3I8T3B0
aW9uYWw8UmVzb2x2ZWRTcGFjZT4+IHJlc29sdmVkU3BhY2VzKFNwYW5UeXBlOjpzaXplKGdyaWQp
KTsKKyAgICBmb3IgKHNpemVfdCBjb2x1bW5JbmRleCA9IDA7IGNvbHVtbkluZGV4IDwgY29sdW1u
cy5zaXplKCk7ICsrY29sdW1uSW5kZXgpIHsKICAgICAgICAgZm9yIChzaXplX3Qgcm93SW5kZXgg
PSAwOyByb3dJbmRleCA8IHJvd3Muc2l6ZSgpOyArK3Jvd0luZGV4KSB7Ci0gICAgICAgICAgICBm
b3IgKHNpemVfdCBjb2x1bW5JbmRleCA9IDA7IGNvbHVtbkluZGV4IDwgY29sdW1ucy5zaXplKCk7
ICsrY29sdW1uSW5kZXgpIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBzbG90ID0gKmdyaWQuc2xv
dCh7IGNvbHVtbkluZGV4LCByb3dJbmRleCB9KTsKLSAgICAgICAgICAgICAgICBpZiAoc2xvdC5p
c0NvbHVtblNwYW5uZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgaWYgKHNsb3QuaGFzQ29sdW1uU3BhbigpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHNwYW5uaW5nQ2VsbFBvc2l0aW9uTGlzdC5hcHBlbmQoeyBjb2x1bW5JbmRleCwgcm93SW5kZXgg
fSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBpZiAoIWNvbHVtbkluaXRpYWxXaWR0aHNbY29sdW1uSW5kZXhdKQotICAg
ICAgICAgICAgICAgICAgICBjb2x1bW5Jbml0aWFsV2lkdGhzW2NvbHVtbkluZGV4XSA9IENvbHVt
bkluaXRpYWxXaWR0aCB7IH07Ci0gICAgICAgICAgICAgICAgY29sdW1uSW5pdGlhbFdpZHRoc1tj
b2x1bW5JbmRleF0tPnZhbHVlID0gc3RkOjptYXg8ZmxvYXQ+KGNvbHVtbkluaXRpYWxXaWR0aHNb
Y29sdW1uSW5kZXhdLT52YWx1ZSwgc2xvdEluaXRpYWxXaWR0aChzbG90KSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gMi4gQWRqdXN0IHRoZSA8dGQ+IGluaXRpYWwgd2lk
dGhzIHdpdGggZml4ZWQgY29sdW1uIHdpZHRocyAoPGNvbD4gdnMuIDx0ZD4pIGFuZCBhbHNvIG1h
bmFnZSBhbGwtZml4ZWQtd2lkdGgtY29sdW1uIGNvbnRlbnQuCi0gICAgICAgIGF1dG8gaGFzRml4
ZWRDb2x1bW5zT25seSA9IGNvbHVtbnMuaGFzRml4ZWRDb2x1bW5zT25seSgpOwotICAgICAgICBm
b3IgKHNpemVfdCBjb2x1bW5JbmRleCA9IDA7IGNvbHVtbkluZGV4IDwgY29sdW1ucy5zaXplKCk7
ICsrY29sdW1uSW5kZXgpIHsKLSAgICAgICAgICAgIGF1dG8mIGNvbHVtbiA9IGNvbHVtbnMubGlz
dCgpW2NvbHVtbkluZGV4XTsKLSAgICAgICAgICAgIGlmICghY29sdW1uLmlzRml4ZWRXaWR0aCgp
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUg
Y29sdW1uIHdpZHRoIGJhc2VkIG9uIDxjb2wgd2lkdGg9IiI+IGFuZCBub3QgPHRkIHN0eWxlPSJ3
aWR0aDogIj4uCi0gICAgICAgICAgICBhdXRvIGNvbHVtbkZpeGVkV2lkdGggPSBjb2x1bW4uYm94
KCkgPyBjb2x1bW4uYm94KCktPmNvbHVtbldpZHRoKCkgOiBXVEY6Om51bGxvcHQ7Ci0gICAgICAg
ICAgICBpZiAoIWNvbHVtbkZpeGVkV2lkdGgpCisgICAgICAgICAgICBhdXRvJiBzbG90ID0gKmdy
aWQuc2xvdCh7IGNvbHVtbkluZGV4LCByb3dJbmRleCB9KTsKKyAgICAgICAgICAgIGlmIChTcGFu
VHlwZTo6aGFzU3BhbihzbG90KSB8fCBTcGFuVHlwZTo6aXNTcGFubmVkKHNsb3QpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKCFjb2x1bW5Jbml0aWFsV2lkdGhz
W2NvbHVtbkluZGV4XSkKLSAgICAgICAgICAgICAgICBjb2x1bW5Jbml0aWFsV2lkdGhzW2NvbHVt
bkluZGV4XSA9IENvbHVtbkluaXRpYWxXaWR0aCB7IH07Ci0gICAgICAgICAgICBjb2x1bW5Jbml0
aWFsV2lkdGhzW2NvbHVtbkluZGV4XS0+dmFsdWUgPSBzdGQ6Om1heChjb2x1bW5Jbml0aWFsV2lk
dGhzW2NvbHVtbkluZGV4XS0+dmFsdWUsIGNvbHVtbkZpeGVkV2lkdGgudmFsdWVPcigwKS50b0Zs
b2F0KCkpOwotICAgICAgICAgICAgLy8gRml4ZWQgY29sdW1ucyBmbGV4IHdoZW4gdGhlcmUgYXJl
IG5vIG90aGVyIGZsZXhpbmcgY29sdW1ucy4KLSAgICAgICAgICAgIGNvbHVtbkluaXRpYWxXaWR0
aHNbY29sdW1uSW5kZXhdLT5pc0ZpeGVkID0gIWhhc0ZpeGVkQ29sdW1uc09ubHk7CisgICAgICAg
ICAgICBhdXRvIGluZGV4ID0gU3BhblR5cGU6OmluZGV4KGNvbHVtbkluZGV4LCByb3dJbmRleCk7
CisgICAgICAgICAgICBpZiAoIXJlc29sdmVkU3BhY2VzW2luZGV4XSkKKyAgICAgICAgICAgICAg
ICByZXNvbHZlZFNwYWNlc1tpbmRleF0gPSBSZXNvbHZlZFNwYWNlIHsgfTsKKyAgICAgICAgICAg
IHJlc29sdmVkU3BhY2VzW2luZGV4XS0+dmFsdWUgPSBzdGQ6Om1heDxmbG9hdD4ocmVzb2x2ZWRT
cGFjZXNbaW5kZXhdLT52YWx1ZSwgc2xvdFNwYWNlKHNsb3QsIGluZGV4KSk7CiAgICAgICAgIH0K
KyAgICB9CiAKLSAgICAgICAgLy8gV2UgbmVlZCB0aGVzZSBzcGFubmluZyBjZWxscyBpbiB0aGUg
b3JkZXIgb2YgdGhlIG51bWJlciBvZiBjb2x1bW5zIHRoZXkgc3BhbiBzbyB0aGF0Ci0gICAgICAg
IC8vIHdlIGNhbiByZXNvbHZlIG92ZXJsYXBwaW5nIHNwYW5zIHN0YXJ0aW5nIHdpdGggdGhlIHNo
b3J0ZXIgb25lcyBlLmcuCi0gICAgICAgIC8vIDx0ZCBjb2xzcGFuPTQ+I2E8L3RkPjx0ZD4jYjwv
dGQ+Ci0gICAgICAgIC8vIDx0ZCBjb2xzcGFuPTI+I2M8L3RkPjx0ZCBjb2xzcGFuPTM+I2Q8L3Rk
PgotICAgICAgICBzdGQ6OnNvcnQoc3Bhbm5pbmdDZWxsUG9zaXRpb25MaXN0LmJlZ2luKCksIHNw
YW5uaW5nQ2VsbFBvc2l0aW9uTGlzdC5lbmQoKSwgWyZdIChhdXRvJiBhLCBhdXRvJiBiKSB7Ci0g
ICAgICAgICAgICByZXR1cm4gZ3JpZC5zbG90KGEpLT5jZWxsKCkuY29sdW1uU3BhbigpIDwgZ3Jp
ZC5zbG90KGIpLT5jZWxsKCkuY29sdW1uU3BhbigpOwotICAgICAgICB9KTsKLSAgICAgICAgLy8g
My4gRGlzdHJpYnV0ZSB0aGUgc3Bhbm5pbmcgY2VsbHMnIG1pbWltdW0gd2lkdGhzIGFjcm9zcyB0
aGUgY29sdW1ucyB1c2luZyB0aGUgbm9uLXNwYW5uaW5nIGluaXRpYWwgd2lkdGhzLgotICAgICAg
ICAvLyBlLmcuIFsgMSBdWyA1IF1bIDEgXQotICAgICAgICAvLyAgICAgIFsgICAgOSAgIF1bIDEg
XQotICAgICAgICAvLyBUaGUgaW5pdGlhbCB3aWR0aHMgYXJlOiBbIDIgXVsgNyBdWyAxIF0KLSAg
ICAgICAgZm9yIChhdXRvIHNwYW5uaW5nQ2VsbFBvc2l0aW9uIDogc3Bhbm5pbmdDZWxsUG9zaXRp
b25MaXN0KSB7Ci0gICAgICAgICAgICBhdXRvJiBzbG90ID0gKmdyaWQuc2xvdChzcGFubmluZ0Nl
bGxQb3NpdGlvbik7Ci0gICAgICAgICAgICBBU1NFUlQoc2xvdC5oYXNDb2x1bW5TcGFuKCkpOwot
ICAgICAgICAgICAgYXV0byYgY2VsbCA9IHNsb3QuY2VsbCgpOwotICAgICAgICAgICAgZmxvYXQg
c3Bhbm5pbmdJbml0aWFsV2lkdGggPSBzbG90SW5pdGlhbFdpZHRoKHNsb3QpOwotICAgICAgICAg
ICAgaWYgKCFjb2x1bW5Jbml0aWFsV2lkdGhzW2NlbGwuc3RhcnRDb2x1bW4oKV0gfHwgIWNvbHVt
bkluaXRpYWxXaWR0aHNbY2VsbC5lbmRDb2x1bW4oKSAtIDFdKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gPHRkIGNvbHNwYW49ND4jYTwvdGQ+PHRkPiNiPC90ZD4KLSAgICAgICAgICAgICAgICAvLyA8
dGQgY29sc3Bhbj0yPiNjPC90ZD48dGQgY29sc3Bhbj0zPiNkPC90ZD4KLSAgICAgICAgICAgICAg
ICAvLyBVbnJlc29sdmVkIGNvbHVtbnMgYXJlOiAxIDIgMyA0Ci0gICAgICAgICAgICAgICAgLy8g
MS4gVGFrZSBjb2xzcGFuPTIgKHNob3J0ZXN0IHNwYW4pIGFuZCByZXNvbHZlIGNvbHVtbiAxIGFu
ZCAyCi0gICAgICAgICAgICAgICAgLy8gMi4gVGFrZSBjb2xzcGFuPTMgYW5kIHJlc29sdmUgY29s
dW1uIDMgYW5kIDQgKDUgaXMgcmVzb2x2ZWQgYmVjYXVzZSBpdCBhbHJlYWR5IGhhcyBhIG5vbi1z
cGFubmluZyBjZWxsKS4KLSAgICAgICAgICAgICAgICAvLyAzLiBjb2xzcGFuPTQgbmVlZHMgbm8g
cmVzb2x2aW5nIGJlY2F1c2UgYWxsIHRoZSBzcGFubmVkIGNvbHVtbnMgKDEgMiAzIDQpIGhhdmUg
YWxyZWFkeSBiZWVuIHJlc29sdmVkLgotICAgICAgICAgICAgICAgIGF1dG8gdW5yZXNvbHZlZENv
bHVtbk51bWJlciA9IGNlbGwuY29sdW1uU3BhbigpOwotICAgICAgICAgICAgICAgIGZvciAoYXV0
byBjb2x1bW5JbmRleCA9IGNlbGwuc3RhcnRDb2x1bW4oKTsgY29sdW1uSW5kZXggPCBjZWxsLmVu
ZENvbHVtbigpOyArK2NvbHVtbkluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY29s
dW1uSW5pdGlhbFdpZHRoc1tjb2x1bW5JbmRleF0pCi0gICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHVucmVzb2x2ZWRDb2x1bW5OdW1i
ZXIpOwotICAgICAgICAgICAgICAgICAgICAtLXVucmVzb2x2ZWRDb2x1bW5OdW1iZXI7Ci0gICAg
ICAgICAgICAgICAgICAgIHNwYW5uaW5nSW5pdGlhbFdpZHRoID0gc3RkOjptYXgoMC4wZiwgc3Bh
bm5pbmdJbml0aWFsV2lkdGggLSBjb2x1bW5Jbml0aWFsV2lkdGhzW2NvbHVtbkluZGV4XS0+dmFs
dWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBBU1NFUlQodW5yZXNvbHZl
ZENvbHVtbk51bWJlcik7Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvIGNvbHVtbkluZGV4ID0g
Y2VsbC5zdGFydENvbHVtbigpOyBjb2x1bW5JbmRleCA8IGNlbGwuZW5kQ29sdW1uKCk7ICsrY29s
dW1uSW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbkluaXRpYWxXaWR0aHNb
Y29sdW1uSW5kZXhdKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbHVtbkluaXRpYWxXaWR0aHNbY29sdW1uSW5kZXhdID0gQ29sdW1uSW5p
dGlhbFdpZHRoIHsgc3Bhbm5pbmdJbml0aWFsV2lkdGggLyB1bnJlc29sdmVkQ29sdW1uTnVtYmVy
LCBmYWxzZSB9OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgLy8gMS4gQ29sbGVjdCB0aGUgbm9uLXNwYW5pbmcgaW5pdGlhbCB3aWR0aHMu
Ci0gICAgICAgICAgICAgICAgZmxvYXQgY3VycmVudFNwYW5uaW5nSW5pdGlhbFdpZHRoID0gMDsK
LSAgICAgICAgICAgICAgICBmb3IgKGF1dG8gY29sdW1uSW5kZXggPSBjZWxsLnN0YXJ0Q29sdW1u
KCk7IGNvbHVtbkluZGV4IDwgY2VsbC5lbmRDb2x1bW4oKTsgKytjb2x1bW5JbmRleCkKLSAgICAg
ICAgICAgICAgICAgICAgY3VycmVudFNwYW5uaW5nSW5pdGlhbFdpZHRoICs9IGNvbHVtbkluaXRp
YWxXaWR0aHNbY29sdW1uSW5kZXhdLT52YWx1ZTsKLSAgICAgICAgICAgICAgICBpZiAoY3VycmVu
dFNwYW5uaW5nSW5pdGlhbFdpZHRoID49IHNwYW5uaW5nSW5pdGlhbFdpZHRoKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIFRoZSBzcGFubmluZyBjZWxsIGZpdHMgdGhlIHNwYW5uZWQgY29sdW1u
cyBqdXN0IGZpbmUuIE5vdGhpbmcgdG8gZGlzdHJpYnV0ZS4KKyAgICAvLyAyLiBDb2xsZWN0IHRo
ZSBzcGFubmluZyBjZWxscy4KKyAgICBzdHJ1Y3QgU3Bhbm5pbmdDZWxsIHsKKyAgICAgICAgU2xv
dFBvc2l0aW9uIHBvc2l0aW9uOworICAgICAgICBMYXlvdXRVbml0IHVucmVzb2x2ZWRTcGFjZTsK
KyAgICB9OworICAgIFZlY3RvcjxTcGFubmluZ0NlbGw+IHNwYW5uaW5nQ2VsbHM7CisgICAgZm9y
IChzaXplX3Qgcm93SW5kZXggPSAwOyByb3dJbmRleCA8IHJvd3Muc2l6ZSgpOyArK3Jvd0luZGV4
KSB7CisgICAgICAgIGZvciAoc2l6ZV90IGNvbHVtbkluZGV4ID0gMDsgY29sdW1uSW5kZXggPCBj
b2x1bW5zLnNpemUoKTsgKytjb2x1bW5JbmRleCkgeworICAgICAgICAgICAgYXV0byYgc2xvdCA9
ICpncmlkLnNsb3QoeyBjb2x1bW5JbmRleCwgcm93SW5kZXggfSk7CisgICAgICAgICAgICBpZiAo
U3BhblR5cGU6Omhhc1NwYW4oc2xvdCkpCisgICAgICAgICAgICAgICAgc3Bhbm5pbmdDZWxscy5h
cHBlbmQoeyB7IGNvbHVtbkluZGV4LCByb3dJbmRleCB9LCBzbG90U3BhY2Uoc2xvdCwgU3BhblR5
cGU6OmluZGV4KGNvbHVtbkluZGV4LCByb3dJbmRleCkpIH0pOworICAgICAgICB9CisgICAgfQor
ICAgIC8vIFdlIG5lZWQgdGhlc2Ugc3Bhbm5pbmcgY2VsbHMgaW4gdGhlIG9yZGVyIG9mIHRoZSBu
dW1iZXIgb2YgY29sdW1ucy9yb3dzIHRoZXkgc3BhbiBzbyB0aGF0CisgICAgLy8gd2UgY2FuIHJl
c29sdmUgb3ZlcmxhcHBpbmcgc3BhbnMgc3RhcnRpbmcgd2l0aCB0aGUgc2hvcnRlciBvbmVzIGUu
Zy4KKyAgICAvLyA8dGQgY29sc3Bhbj00PiNhPC90ZD48dGQ+I2I8L3RkPgorICAgIC8vIDx0ZCBj
b2xzcGFuPTI+I2M8L3RkPjx0ZCBjb2xzcGFuPTM+I2Q8L3RkPgorICAgIHN0ZDo6c29ydChzcGFu
bmluZ0NlbGxzLmJlZ2luKCksIHNwYW5uaW5nQ2VsbHMuZW5kKCksIFsmXSAoYXV0byYgYSwgYXV0
byYgYikgeworICAgICAgICByZXR1cm4gU3BhblR5cGU6OnNwYW5Db3VudChncmlkLnNsb3QoYS5w
b3NpdGlvbiktPmNlbGwoKSkgPCBTcGFuVHlwZTo6c3BhbkNvdW50KGdyaWQuc2xvdChiLnBvc2l0
aW9uKS0+Y2VsbCgpKTsKKyAgICB9KTsKKworICAgIC8vIDMuIERpc3RyaWJ1dGUgdGhlIHNwYW5u
aW5nIGNlbGxzJyBtaW1pbXVtIHNwYWNlIGFjcm9zcyB0aGUgY29sdW1ucy9yb3dzIHVzaW5nIHRo
ZSBub24tc3Bhbm5pbmcgc3BhY2VzLgorICAgIC8vIGUuZy4gWyAxIF1bIDUgXVsgMSBdCisgICAg
Ly8gICAgICBbICAgIDkgICBdWyAxIF0KKyAgICAvLyBUaGUgaW5pdGlhbCB3aWR0aHMgYXJlOiBb
IDIgXVsgNyBdWyAxIF0KKyAgICBmb3IgKGF1dG8gc3Bhbm5pbmdDZWxsIDogc3Bhbm5pbmdDZWxs
cykgeworICAgICAgICBhdXRvJiBjZWxsID0gZ3JpZC5zbG90KHNwYW5uaW5nQ2VsbC5wb3NpdGlv
biktPmNlbGwoKTsKKyAgICAgICAgZmxvYXQgdW5yZXNvbHZlZFNwYW5uaW5nU3BhY2UgPSBzcGFu
bmluZ0NlbGwudW5yZXNvbHZlZFNwYWNlOworICAgICAgICBpZiAoIXJlc29sdmVkU3BhY2VzW1Nw
YW5UeXBlOjpzdGFydFNwYW4oY2VsbCldIHx8ICFyZXNvbHZlZFNwYWNlc1tTcGFuVHlwZTo6ZW5k
U3BhbihjZWxsKSAtIDFdKSB7CisgICAgICAgICAgICAvLyA8dGQgY29sc3Bhbj00PiNhPC90ZD48
dGQ+I2I8L3RkPgorICAgICAgICAgICAgLy8gPHRkIGNvbHNwYW49Mj4jYzwvdGQ+PHRkIGNvbHNw
YW49Mz4jZDwvdGQ+CisgICAgICAgICAgICAvLyBVbnJlc29sdmVkIGNvbHVtbnMgYXJlOiAxIDIg
MyA0CisgICAgICAgICAgICAvLyAxLiBUYWtlIGNvbHNwYW49MiAoc2hvcnRlc3Qgc3BhbikgYW5k
IHJlc29sdmUgY29sdW1uIDEgYW5kIDIKKyAgICAgICAgICAgIC8vIDIuIFRha2UgY29sc3Bhbj0z
IGFuZCByZXNvbHZlIGNvbHVtbiAzIGFuZCA0ICg1IGlzIHJlc29sdmVkIGJlY2F1c2UgaXQgYWxy
ZWFkeSBoYXMgYSBub24tc3Bhbm5pbmcgY2VsbCkuCisgICAgICAgICAgICAvLyAzLiBjb2xzcGFu
PTQgbmVlZHMgbm8gcmVzb2x2aW5nIGJlY2F1c2UgYWxsIHRoZSBzcGFubmVkIGNvbHVtbnMgKDEg
MiAzIDQpIGhhdmUgYWxyZWFkeSBiZWVuIHJlc29sdmVkLgorICAgICAgICAgICAgYXV0byB1bnJl
c29sdmVkQ29sdW1uQ291bnQgPSBjZWxsLmNvbHVtblNwYW4oKTsKKyAgICAgICAgICAgIGZvciAo
YXV0byBzcGFuSW5kZXggPSBTcGFuVHlwZTo6c3RhcnRTcGFuKGNlbGwpOyBzcGFuSW5kZXggPCBT
cGFuVHlwZTo6ZW5kU3BhbihjZWxsKTsgKytzcGFuSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIXJlc29sdmVkU3BhY2VzW3NwYW5JbmRleF0pCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIEFTU0VSVCh1bnJlc29sdmVkQ29sdW1uQ291bnQpOworICAg
ICAgICAgICAgICAgIC0tdW5yZXNvbHZlZENvbHVtbkNvdW50OworICAgICAgICAgICAgICAgIHVu
cmVzb2x2ZWRTcGFubmluZ1NwYWNlID0gc3RkOjptYXgoMC4wZiwgdW5yZXNvbHZlZFNwYW5uaW5n
U3BhY2UgLSByZXNvbHZlZFNwYWNlc1tzcGFuSW5kZXhdLT52YWx1ZSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBBU1NFUlQodW5yZXNvbHZlZENvbHVtbkNvdW50KTsKKyAgICAgICAgICAg
IGZvciAoYXV0byBzcGFuSW5kZXggPSBTcGFuVHlwZTo6c3RhcnRTcGFuKGNlbGwpOyBzcGFuSW5k
ZXggPCBTcGFuVHlwZTo6ZW5kU3BhbihjZWxsKTsgKytzcGFuSW5kZXgpIHsKKyAgICAgICAgICAg
ICAgICBpZiAocmVzb2x2ZWRTcGFjZXNbc3BhbkluZGV4XSkKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIDIuIERpc3Ry
aWJ1dGUgdGhlIGV4dHJhIHdpZHRoIGFtb25nIHRoZSBzcGFubmVkIGNvbHVtbnMgYmFzZWQgb24g
dGhlIGluaXRpYWwgY29sdW1uIHdpZHRoLgotICAgICAgICAgICAgICAgIC8vIGUuZy4gc3Bhbm5p
bmcgaW5pdGlhbCB3aWR0aDogWyAgIDkgICBdLiBDdXJyZW50IGluaXRpYWwgd2lkdGhzIGZvciB0
aGUgc3Bhbm5lZCBjb2x1bW5zOiBbIDEgXSBbIDIgXQotICAgICAgICAgICAgICAgIC8vIE5ldyBp
bml0aWFsIHdpZHRoczogWyAzIF0gWyA2IF0uCi0gICAgICAgICAgICAgICAgYXV0byBzcGFjZVRv
RGlzdHJpYnV0ZSA9IHN0ZDo6bWF4KDAuMGYsIHNwYW5uaW5nSW5pdGlhbFdpZHRoIC0gKGNlbGwu
Y29sdW1uU3BhbigpIC0gMSkgKiBncmlkLmhvcml6b250YWxTcGFjaW5nKCkgLSBjdXJyZW50U3Bh
bm5pbmdJbml0aWFsV2lkdGgpOwotICAgICAgICAgICAgICAgIGlmIChzcGFjZVRvRGlzdHJpYnV0
ZSkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gY29sdW1uSW5kZXggPSBjZWxsLnN0
YXJ0Q29sdW1uKCk7IGNvbHVtbkluZGV4IDwgY2VsbC5lbmRDb2x1bW4oKTsgKytjb2x1bW5JbmRl
eCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkluaXRpYWxXaWR0aHNbY29sdW1uSW5k
ZXhdLT52YWx1ZSArPSBzcGFjZVRvRGlzdHJpYnV0ZSAvIGN1cnJlbnRTcGFubmluZ0luaXRpYWxX
aWR0aCAqIGNvbHVtbkluaXRpYWxXaWR0aHNbY29sdW1uSW5kZXhdLT52YWx1ZTsKLSAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVzb2x2ZWRTcGFjZXNbc3BhbkluZGV4XSA9IFJl
c29sdmVkU3BhY2UgeyB1bnJlc29sdmVkU3Bhbm5pbmdTcGFjZSAvIHVucmVzb2x2ZWRDb2x1bW5D
b3VudCwgZmFsc2UgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIDEuIENvbGxlY3QgdGhlIG5vbi1zcGFuaW5nIHJlc29sdmVkIHNwYWNlcy4KKyAgICAg
ICAgICAgIC8vIDIuIERpc3RyaWJ1dGUgdGhlIGV4dHJhIHNwYWNlIGFtb25nIHRoZSBzcGFubmVk
IGNvbHVtbnMvcm93cyBiYXNlZCBvbiB0aGUgcmVzb2x2ZWQgc3BhY2UgdmFsdWVzLgorICAgICAg
ICAgICAgLy8gZS5nLiBzcGFubmluZyB3aWR0aDogWyAgIDkgICBdLiBSZXNvbHZlZCB3aWR0aHMg
Zm9yIHRoZSBzcGFubmVkIGNvbHVtbnM6IFsgMSBdIFsgMiBdCisgICAgICAgICAgICAvLyBOZXcg
cmVzb2x2ZWQgd2lkdGhzOiBbIDMgXSBbIDYgXS4KKyAgICAgICAgICAgIGZsb2F0IHJlc29sdmVk
U3BhY2UgPSAwOworICAgICAgICAgICAgZm9yIChhdXRvIGNvbHVtbkluZGV4ID0gY2VsbC5zdGFy
dENvbHVtbigpOyBjb2x1bW5JbmRleCA8IGNlbGwuZW5kQ29sdW1uKCk7ICsrY29sdW1uSW5kZXgp
CisgICAgICAgICAgICAgICAgcmVzb2x2ZWRTcGFjZSArPSByZXNvbHZlZFNwYWNlc1tjb2x1bW5J
bmRleF0tPnZhbHVlOworICAgICAgICAgICAgaWYgKHJlc29sdmVkU3BhY2UgPj0gdW5yZXNvbHZl
ZFNwYW5uaW5nU3BhY2UpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgc3Bhbm5pbmcgY2VsbCBm
aXRzIHRoZSBzcGFubmVkIGNvbHVtbnMvcm93cyBqdXN0IGZpbmUuIE5vdGhpbmcgdG8gZGlzdHJp
YnV0ZS4KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGF1dG8gc3Bhbm5pbmdTcGFjZVRvRGlzdHJpYnV0ZSA9IHN0ZDo6bWF4KDAuMGYsIHVucmVz
b2x2ZWRTcGFubmluZ1NwYWNlIC0gU3BhblR5cGU6OnNwYWNpbmcoZ3JpZCwgY2VsbCkgLSByZXNv
bHZlZFNwYWNlKTsKKyAgICAgICAgICAgIGlmIChzcGFubmluZ1NwYWNlVG9EaXN0cmlidXRlKSB7
CisgICAgICAgICAgICAgICAgZm9yIChhdXRvIHNwYW5JbmRleCA9IFNwYW5UeXBlOjpzdGFydFNw
YW4oY2VsbCk7IHNwYW5JbmRleCA8IFNwYW5UeXBlOjplbmRTcGFuKGNlbGwpOyArK3NwYW5JbmRl
eCkKKyAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRTcGFjZXNbc3BhbkluZGV4XS0+dmFsdWUg
Kz0gc3Bhbm5pbmdTcGFjZVRvRGlzdHJpYnV0ZSAvIHJlc29sdmVkU3BhY2UgKiByZXNvbHZlZFNw
YWNlc1tzcGFuSW5kZXhdLT52YWx1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAg
ICAvLyA0LiBEaXN0cmlidXRlIHRoZSBleHRyYSBzcGFjZSB1c2luZyB0aGUgZmluYWwgaW5pdGlh
bCB3aWR0aHMuCisgICAgfQorICAgIC8vIDQuIERpc3RyaWJ1dGUgdGhlIGV4dHJhIHNwYWNlIHVz
aW5nIHRoZSBmaW5hbCByZXNvbHZlZCB3aWR0aHMuCiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICAg
ICAgLy8gV2UgaGF2ZSB0byBoYXZlIGFsbCB0aGUgY29sdW1ucyByZXNvbHZlZCBhdCB0aGlzIHBv
aW50IHdpdGggdmFsaWQgaW5pdGlhbCB3aWR0aHMuCi0gICAgICAgIGZvciAoYXV0byYgY29sdW1u
SW5pdGlhbFdpZHRoIDogY29sdW1uSW5pdGlhbFdpZHRocykKLSAgICAgICAgICAgIEFTU0VSVChj
b2x1bW5Jbml0aWFsV2lkdGgpOworICAgIC8vIFdlIGhhdmUgdG8gaGF2ZSBhbGwgdGhlIHNwYWNl
cyByZXNvbHZlZCBhdCB0aGlzIHBvaW50LgorICAgIGZvciAoYXV0byYgcmVzb2x2ZWRTcGFjZSA6
IHJlc29sdmVkU3BhY2VzKQorICAgICAgICBBU1NFUlQocmVzb2x2ZWRTcGFjZSk7CiAjZW5kaWYK
LSAgICAgICAgLy8gRml4ZWQgd2lkdGggY29sdW1ucyBkb24ndCBwYXJ0aWNpcGF0ZSBpbiBhdmFp
bGFibGUgc3BhY2UgZGlzdHJpYnV0aW9uLgotICAgICAgICAvLyBVbmxlc3MgdGhlcmUgYXJlIG5v
IGZsZXhpbmcgY29sdW1uIGF0IGFsbCwgdGhlbiB0aGV5IHN0YXJ0IGZsZXhpbmcgYXMgaWYgdGhl
eSB3ZXJlIG5vdCBmaXhlZCBhdCBhbGwuCi0gICAgICAgIGZsb2F0IGFkanVzdGFibGVkSG9yaXpv
bnRhbFNwYWNlID0gMDsKLSAgICAgICAgZm9yIChhdXRvJiBjb2x1bW5Jbml0aWFsV2lkdGggOiBj
b2x1bW5Jbml0aWFsV2lkdGhzKSB7Ci0gICAgICAgICAgICBpZiAoY29sdW1uSW5pdGlhbFdpZHRo
LT5pc0ZpeGVkKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgYWRqdXN0
YWJsZWRIb3Jpem9udGFsU3BhY2UgKz0gY29sdW1uSW5pdGlhbFdpZHRoLT52YWx1ZTsKLSAgICAg
ICAgfQorICAgIC8vIEZpeGVkIHNpemUgY2VsbHMgZG9uJ3QgcGFydGljaXBhdGUgaW4gYXZhaWxh
YmxlIHNwYWNlIGRpc3RyaWJ1dGlvbi4KKyAgICBmbG9hdCBhZGp1c3RhYmxlZFNwYWNlID0gMDsK
KyAgICBmb3IgKGF1dG8mIHJlc29sdmVkU3BhY2UgOiByZXNvbHZlZFNwYWNlcykgeworICAgICAg
ICBpZiAocmVzb2x2ZWRTcGFjZS0+aXNGaXhlZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBhZGp1c3RhYmxlZFNwYWNlICs9IHJlc29sdmVkU3BhY2UtPnZhbHVlOworICAgIH0KIAor
ICAgIERpc3RyaWJ1dGVkU3BhY2VzIGRpc3RyaWJ1dGVkU3BhY2VzKHJlc29sdmVkU3BhY2VzLnNp
emUoKSk7CisgICAgLy8gRGlzdHJpYnV0ZSB0aGUgZXh0cmEgc3BhY2UgYmFzZWQgb24gdGhlIHJl
c29sdmVkIHNwYWNlcy4KKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgcmVzb2x2
ZWRTcGFjZXMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGF1dG8mIHJlc29sdmVkU3BhY2Ug
PSByZXNvbHZlZFNwYWNlc1tpbmRleF07CisgICAgICAgIGF1dG8gaGFzRXh0cmFTcGFjZVRvRGlz
dHJpYnV0ZSA9IHNwYWNlVG9EaXN0cmlidXRlICYmICFyZXNvbHZlZFNwYWNlLT5pc0ZpeGVkOwor
ICAgICAgICBhdXRvIHJlc29sdmVkVmFsdWUgPSByZXNvbHZlZFNwYWNlLT52YWx1ZTsKKyAgICAg
ICAgZGlzdHJpYnV0ZWRTcGFjZXNbaW5kZXhdID0gaGFzRXh0cmFTcGFjZVRvRGlzdHJpYnV0ZSA/
IHJlc29sdmVkVmFsdWUgKyAoc3BhY2VUb0Rpc3RyaWJ1dGUgLyBhZGp1c3RhYmxlZFNwYWNlICog
cmVzb2x2ZWRWYWx1ZSkgOiByZXNvbHZlZFZhbHVlOworICAgIH0KKyAgICByZXR1cm4gZGlzdHJp
YnV0ZWRTcGFjZXM7Cit9CisKK3ZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUFu
ZERpc3RyaWJ1dGVFeHRyYUhvcml6b250YWxTcGFjZShMYXlvdXRVbml0IGF2YWlsYWJsZUhvcml6
b250YWxTcGFjZSkKK3sKKyAgICBhdXRvJiBncmlkID0gZm9ybWF0dGluZ1N0YXRlKCkudGFibGVH
cmlkKCk7CisgICAgYXV0byYgY29sdW1ucyA9IGdyaWQuY29sdW1ucygpOworICAgIGF1dG8gdGFi
bGVXaWR0aENvbnN0cmFpbnRzID0gKmdyaWQud2lkdGhDb25zdHJhaW50cygpOworCisgICAgZW51
bSBjbGFzcyBDb2x1bW5XaWR0aEJhbGFuY2luZ0Jhc2UgeyBNaW5pbXVtV2lkdGgsIE1heGltdW1X
aWR0aCB9OworICAgIGF1dG8gY29tcHV0ZUNvbHVtbldpZHRocyA9IFsmXSAoYXV0byBjb2x1bW5X
aWR0aEJhbGFuY2luZ0Jhc2UsIGF1dG8gZXh0cmFIb3Jpem9udGFsU3BhY2UpIHsKKyAgICAgICAg
YXV0byBkaXN0cmlidXRlZFNwYWNlcyA9IGRpc3RyaWJ1dGVBdmFpbGFibGVTcGFjZTxDb2x1bW5T
cGFuPihncmlkLCBleHRyYUhvcml6b250YWxTcGFjZSwgWyZdIChjb25zdCBUYWJsZUdyaWQ6OlNs
b3QmIHNsb3QsIHNpemVfdCBjb2x1bW5JbmRleCkgeworICAgICAgICAgICAgYXV0byYgY29sdW1u
ID0gY29sdW1ucy5saXN0KClbY29sdW1uSW5kZXhdOworICAgICAgICAgICAgYXV0byBjb2x1bW5G
aXhlZFdpZHRoID0gY29sdW1uLmJveCgpID8gY29sdW1uLmJveCgpLT5jb2x1bW5XaWR0aCgpIDog
V1RGOjpudWxsb3B0OworICAgICAgICAgICAgYXV0byBzbG90V2lkdGggPSBjb2x1bW5XaWR0aEJh
bGFuY2luZ0Jhc2UgPT0gQ29sdW1uV2lkdGhCYWxhbmNpbmdCYXNlOjpNaW5pbXVtV2lkdGggPyBz
bG90LndpZHRoQ29uc3RyYWludHMoKS5taW5pbXVtIDogc2xvdC53aWR0aENvbnN0cmFpbnRzKCku
bWF4aW11bTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1heChzbG90V2lkdGgsIGNvbHVtbkZp
eGVkV2lkdGgudmFsdWVPcigwX2x1KSk7CisgICAgICAgIH0pOwogICAgICAgICAvLyBTZXQgZmlu
aWFsIGhvcml6b250YWwgcG9zaXRpb24gYW5kIHdpZHRoLgotICAgICAgICBmbG9hdCBjb2x1bW5M
b2dpY2FsTGVmdCA9IGdyaWQuaG9yaXpvbnRhbFNwYWNpbmcoKTsKKyAgICAgICAgYXV0byBjb2x1
bW5Mb2dpY2FsTGVmdCA9IGdyaWQuaG9yaXpvbnRhbFNwYWNpbmcoKTsKICAgICAgICAgZm9yIChz
aXplX3QgY29sdW1uSW5kZXggPSAwOyBjb2x1bW5JbmRleCA8IGNvbHVtbnMuc2l6ZSgpOyArK2Nv
bHVtbkluZGV4KSB7CiAgICAgICAgICAgICBhdXRvJiBjb2x1bW4gPSBjb2x1bW5zLmxpc3QoKVtj
b2x1bW5JbmRleF07Ci0gICAgICAgICAgICBhdXRvIGluaXRpYWxXaWR0aCA9IGNvbHVtbkluaXRp
YWxXaWR0aHNbY29sdW1uSW5kZXhdLT52YWx1ZTsKLSAgICAgICAgICAgIGF1dG8gY29sdW1uV2lk
dGggPSBpbml0aWFsV2lkdGg7CisgICAgICAgICAgICBhdXRvIGNvbHVtbldpZHRoID0gTGF5b3V0
VW5pdCB7IGRpc3RyaWJ1dGVkU3BhY2VzW2NvbHVtbkluZGV4XSB9OwogCi0gICAgICAgICAgICBp
ZiAoZXh0cmFIb3Jpem9udGFsU3BhY2UgJiYgIWNvbHVtbkluaXRpYWxXaWR0aHNbY29sdW1uSW5k
ZXhdLT5pc0ZpeGVkKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBjb2x1bW5FeHRyYVNwYWNlID0g
ZXh0cmFIb3Jpem9udGFsU3BhY2UgLyBhZGp1c3RhYmxlZEhvcml6b250YWxTcGFjZSAqIGluaXRp
YWxXaWR0aDsKLSAgICAgICAgICAgICAgICBjb2x1bW5XaWR0aCA9IGluaXRpYWxXaWR0aCArIGNv
bHVtbkV4dHJhU3BhY2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb2x1bW4uc2V0TG9n
aWNhbExlZnQoTGF5b3V0VW5pdCB7Y29sdW1uTG9naWNhbExlZnQgfSk7Ci0gICAgICAgICAgICBj
b2x1bW4uc2V0TG9naWNhbFdpZHRoKExheW91dFVuaXQgeyBjb2x1bW5XaWR0aCB9KTsKKyAgICAg
ICAgICAgIGNvbHVtbi5zZXRMb2dpY2FsTGVmdChjb2x1bW5Mb2dpY2FsTGVmdCk7CisgICAgICAg
ICAgICBjb2x1bW4uc2V0TG9naWNhbFdpZHRoKGNvbHVtbldpZHRoKTsKICAgICAgICAgICAgIGNv
bHVtbkxvZ2ljYWxMZWZ0ICs9IGNvbHVtbldpZHRoICsgZ3JpZC5ob3Jpem9udGFsU3BhY2luZygp
OwogICAgICAgICB9CiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC90
YWJsZWZvcm1hdHRpbmcvVGFibGVHcmlkLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFibGVm
b3JtYXR0aW5nL1RhYmxlR3JpZC5oCmluZGV4IGI4MWU3ZTM1YzYwNWNlYjg0YzE0Y2NhMDY2NDIw
YjgxMmZkNWQ1YTIuLjA5NzMwZDE5YTU0YjdmZjFjODU0OWUyYTUyYjcyYjA5MWRiYjhmN2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVHcmlk
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUdyaWQu
aApAQCAtMjE0LDYgKzIxNCw3IEBAIHB1YmxpYzoKICAgICBDZWxscyYgY2VsbHMoKSB7IHJldHVy
biBtX2NlbGxzOyB9CiAKICAgICBTbG90KiBzbG90KFNsb3RQb3NpdGlvbik7CisgICAgY29uc3Qg
U2xvdCogc2xvdChTbG90UG9zaXRpb24gcG9zaXRpb24pIGNvbnN0IHsgcmV0dXJuIG1fc2xvdE1h
cC5nZXQocG9zaXRpb24pOyB9CiAgICAgYm9vbCBpc1NwYW5uZWQoU2xvdFBvc2l0aW9uKTsKIAog
cHJpdmF0ZToK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398319</attachid>
            <date>2020-05-03 10:52:10 -0700</date>
            <delta_ts>2020-05-03 10:52:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211352-20200503105209.patch</filename>
            <type>text/plain</type>
            <size>19504</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNTc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjM0ZDQ4ZjU5ZjM1YmQy
MzUxZDBiMTFkNThjZGJlMWM4MWQ4MjYzMy4uZjNiNmViYzU0YTk4MTc4N2NkMTIwNTFhMDY2ZWFl
MGI1ODdjZGNiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIwLTA1LTAzICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bVEZDXSBUdXJucyBo
b3Jpem9udGFsIHNwYWNlIGRpc3RyaWJ1dGlvbiBpbnRvIGEgZ2VuZXJpYyBzcGFjZSBkaXN0cmli
dXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
MTM1MgorCisgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgorCisgICAgICAgIEhv
cml6b250YWwoY29sdW1uKSBhbmQgdmVydGljYWwocm93KSBzcGFjZSBkaXN0cmlidXRpb25zIHVz
ZSBlc3NlbnRpYWxseSB0aGUgc2FtZSBsb2dpYyB0byBkaXN0cmlidXRlCisgICAgICAgIHRoZSBl
eHRyYSBzcGFjZSBhbW9uZyB0aGUgY29sdW1ucy9yb3dzLgorICAgICAgICBUaGlzIHBhdGNoIHR1
cm5zIHRoZSBob3Jpem9udGFsIHNwYWNlIGRpc3RyaWJ1dGlvbiBmdW5jdGlvbiBpbnRvIGEgZ2Vu
ZXJpYyBzcGFjZSBkaXN0cmlidXRpb24gY29kZSBzbworICAgICAgICB0aGF0IHdlIGNhbiB1c2Ug
aXQgZm9yIHJvdyBzaXppbmcgYXMgd2VsbC4gIAorCisgICAgICAgICogbGF5b3V0L3RhYmxlZm9y
bWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6Q29sdW1uU3Bhbjo6aGFzU3Bhbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkNv
bHVtblNwYW46OmlzU3Bhbm5lZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkNvbHVtblNw
YW46OnNwYW5Db3VudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkNvbHVtblNwYW46OnN0
YXJ0U3Bhbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkNvbHVtblNwYW46OmVuZFNwYW4p
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpDb2x1bW5TcGFuOjppbmRleCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkNvbHVtblNwYW46OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpDb2x1bW5TcGFuOjpzcGFjaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
ZGlzdHJpYnV0ZUF2YWlsYWJsZVNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFi
bGVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUFuZERpc3RyaWJ1dGVFeHRyYUhvcml6b250YWxT
cGFjZSk6CisgICAgICAgICogbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUdyaWQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVHcmlkOjpzbG90IGNvbnN0KToKKwogMjAyMC0w
NC0zMCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW1RG
Q10gSW50cm9kdWNlIHN0cnVjdCBSb3dIZWlnaHQgaW4gVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6
Y29tcHV0ZUFuZERpc3RyaWJ1dGVFeHRyYVZlcnRpY2FsU3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGlu
Z0NvbnRleHQuY3BwCmluZGV4IGY1ZjllOGRmZmM3NzEzNDVhYWEzYTRhNDQ4ODM2OGJmMTgxYjgx
MjkuLjczNTMxYjQyOWM5MzVkYjRkYmY4YTI1Yzk2NmRhZjNlNWNmY2JkYzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29u
dGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJs
ZUZvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtMzQ3LDE0MCArMzQ3LDE2MSBAQCBGb3JtYXR0aW5n
Q29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBUYWJsZUZvcm1hdHRpbmdDb250ZXh0
Ojpjb21wdXRlZFByZQogICAgIHJldHVybiB0YWJsZVdpZHRoQ29uc3RyYWludHM7CiB9CiAKLXZv
aWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUFuZERpc3RyaWJ1dGVFeHRyYUhvcml6
b250YWxTcGFjZShMYXlvdXRVbml0IGF2YWlsYWJsZUhvcml6b250YWxTcGFjZSkKK3N0cnVjdCBD
b2x1bW5TcGFuIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc2l6ZV90IGhhc1NwYW4oY29uc3QgVGFi
bGVHcmlkOjpTbG90JiBzbG90KSB7IHJldHVybiBzbG90Lmhhc0NvbHVtblNwYW4oKTsgfQorICAg
IHN0YXRpYyBzaXplX3QgaXNTcGFubmVkKGNvbnN0IFRhYmxlR3JpZDo6U2xvdCYgc2xvdCkgeyBy
ZXR1cm4gc2xvdC5pc0NvbHVtblNwYW5uZWQoKTsgfQorCisgICAgc3RhdGljIHNpemVfdCBzcGFu
Q291bnQoY29uc3QgVGFibGVHcmlkOjpDZWxsJiBjZWxsKSB7IHJldHVybiBjZWxsLmNvbHVtblNw
YW4oKTsgfQorICAgIHN0YXRpYyBzaXplX3Qgc3RhcnRTcGFuKGNvbnN0IFRhYmxlR3JpZDo6Q2Vs
bCYgY2VsbCkgeyByZXR1cm4gY2VsbC5zdGFydENvbHVtbigpOyB9CisgICAgc3RhdGljIHNpemVf
dCBlbmRTcGFuKGNvbnN0IFRhYmxlR3JpZDo6Q2VsbCYgY2VsbCkgeyByZXR1cm4gY2VsbC5lbmRD
b2x1bW4oKTsgfQorCisgICAgc3RhdGljIHNpemVfdCBpbmRleChzaXplX3QgY29sdW1uSW5kZXgs
IHNpemVfdCAvKnJvd0luZGV4Ki8pIHsgcmV0dXJuIGNvbHVtbkluZGV4OyB9CisgICAgc3RhdGlj
IHNpemVfdCBzaXplKGNvbnN0IFRhYmxlR3JpZCYgZ3JpZCkgeyByZXR1cm4gZ3JpZC5jb2x1bW5z
KCkuc2l6ZSgpOyB9CisKKyAgICBzdGF0aWMgTGF5b3V0VW5pdCBzcGFjaW5nKGNvbnN0IFRhYmxl
R3JpZCYgZ3JpZCwgY29uc3QgVGFibGVHcmlkOjpDZWxsJiBjZWxsKSB7IHJldHVybiAoY2VsbC5j
b2x1bW5TcGFuKCkgLSAxKSAqIGdyaWQuaG9yaXpvbnRhbFNwYWNpbmcoKTsgfQorfTsKKwordXNp
bmcgRGlzdHJpYnV0ZWRTcGFjZXMgPSBWZWN0b3I8ZmxvYXQ+OwordGVtcGxhdGUgPHR5cGVuYW1l
IFNwYW5UeXBlPgorc3RhdGljIERpc3RyaWJ1dGVkU3BhY2VzIGRpc3RyaWJ1dGVBdmFpbGFibGVT
cGFjZShjb25zdCBUYWJsZUdyaWQmIGdyaWQsIGZsb2F0IHNwYWNlVG9EaXN0cmlidXRlLCBjb25z
dCBXVEY6OkZ1bmN0aW9uPExheW91dFVuaXQoY29uc3QgVGFibGVHcmlkOjpTbG90Jiwgc2l6ZV90
KT4mIHNsb3RTcGFjZSkKIHsKLSAgICBhdXRvJiBncmlkID0gZm9ybWF0dGluZ1N0YXRlKCkudGFi
bGVHcmlkKCk7CisgICAgc3RydWN0IFJlc29sdmVkU3BhY2UgeworICAgICAgICBmbG9hdCB2YWx1
ZSB7IDAgfTsKKyAgICAgICAgYm9vbCBpc0ZpeGVkIHsgZmFsc2UgfTsKKyAgICB9OworCiAgICAg
YXV0byYgY29sdW1ucyA9IGdyaWQuY29sdW1ucygpOwogICAgIGF1dG8mIHJvd3MgPSBncmlkLnJv
d3MoKTsKLSAgICBhdXRvIHRhYmxlV2lkdGhDb25zdHJhaW50cyA9ICpncmlkLndpZHRoQ29uc3Ry
YWludHMoKTsKLQotICAgIGVudW0gY2xhc3MgQ29sdW1uV2lkdGhCYWxhbmNpbmdCYXNlIHsgTWlu
aW11bVdpZHRoLCBNYXhpbXVtV2lkdGggfTsKLSAgICBhdXRvIGNvbXB1dGVDb2x1bW5XaWR0aHMg
PSBbJl0gKGF1dG8gY29sdW1uV2lkdGhCYWxhbmNpbmdCYXNlLCBhdXRvIGV4dHJhSG9yaXpvbnRh
bFNwYWNlKSB7Ci0gICAgICAgIGF1dG8gc2xvdEluaXRpYWxXaWR0aCA9IFsmXSAoYXV0byYgc2xv
dCkgewotICAgICAgICAgICAgcmV0dXJuIGNvbHVtbldpZHRoQmFsYW5jaW5nQmFzZSA9PSBDb2x1
bW5XaWR0aEJhbGFuY2luZ0Jhc2U6Ok1pbmltdW1XaWR0aCA/IHNsb3Qud2lkdGhDb25zdHJhaW50
cygpLm1pbmltdW0gOiBzbG90LndpZHRoQ29uc3RyYWludHMoKS5tYXhpbXVtOwotICAgICAgICB9
OwotICAgICAgICAvLyAxLiBDb2xsZWN0IGluaXRpYWwgd2lkdGhzIGRyaXZlbiBieSA8dGQ+IGFj
cm9zcyBjb2x1bW5zIGJ1dCBpZ25vcmUgc3Bhbm5pbmcgY2VsbHMgZmlyc3QuCi0gICAgICAgIHN0
cnVjdCBDb2x1bW5Jbml0aWFsV2lkdGggewotICAgICAgICAgICAgZmxvYXQgdmFsdWUgeyAwIH07
Ci0gICAgICAgICAgICBib29sIGlzRml4ZWQgeyBmYWxzZSB9OwotICAgICAgICB9OwotICAgICAg
ICBWZWN0b3I8T3B0aW9uYWw8Q29sdW1uSW5pdGlhbFdpZHRoPj4gY29sdW1uSW5pdGlhbFdpZHRo
cyhjb2x1bW5zLnNpemUoKSk7Ci0gICAgICAgIFZlY3RvcjxTbG90UG9zaXRpb24+IHNwYW5uaW5n
Q2VsbFBvc2l0aW9uTGlzdDsKKyAgICAvLyAxLiBDb2xsZWN0IHRoZSBub24tc3Bhbm5pbmcgc3Bh
Y2VzIGZpcnN0LiBUaGV5IGFyZSB1c2VkIGZvciB0aGUgZmluYWwgZGlzdHJpYnV0aW9uIGFzIHdl
bGwgYXMgZm9yIGRpc3RyaWJ1dGluZyB0aGUgc3Bhbm5pbmcgc3BhY2UuCisgICAgVmVjdG9yPE9w
dGlvbmFsPFJlc29sdmVkU3BhY2U+PiByZXNvbHZlZFNwYWNlcyhTcGFuVHlwZTo6c2l6ZShncmlk
KSk7CisgICAgZm9yIChzaXplX3QgY29sdW1uSW5kZXggPSAwOyBjb2x1bW5JbmRleCA8IGNvbHVt
bnMuc2l6ZSgpOyArK2NvbHVtbkluZGV4KSB7CiAgICAgICAgIGZvciAoc2l6ZV90IHJvd0luZGV4
ID0gMDsgcm93SW5kZXggPCByb3dzLnNpemUoKTsgKytyb3dJbmRleCkgewotICAgICAgICAgICAg
Zm9yIChzaXplX3QgY29sdW1uSW5kZXggPSAwOyBjb2x1bW5JbmRleCA8IGNvbHVtbnMuc2l6ZSgp
OyArK2NvbHVtbkluZGV4KSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgc2xvdCA9ICpncmlkLnNs
b3QoeyBjb2x1bW5JbmRleCwgcm93SW5kZXggfSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNsb3Qu
aXNDb2x1bW5TcGFubmVkKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgIGlmIChzbG90Lmhhc0NvbHVtblNwYW4oKSkgewotICAgICAgICAgICAgICAgICAg
ICBzcGFubmluZ0NlbGxQb3NpdGlvbkxpc3QuYXBwZW5kKHsgY29sdW1uSW5kZXgsIHJvd0luZGV4
IH0pOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgaWYgKCFjb2x1bW5Jbml0aWFsV2lkdGhzW2NvbHVtbkluZGV4XSkKLSAg
ICAgICAgICAgICAgICAgICAgY29sdW1uSW5pdGlhbFdpZHRoc1tjb2x1bW5JbmRleF0gPSBDb2x1
bW5Jbml0aWFsV2lkdGggeyB9OwotICAgICAgICAgICAgICAgIGNvbHVtbkluaXRpYWxXaWR0aHNb
Y29sdW1uSW5kZXhdLT52YWx1ZSA9IHN0ZDo6bWF4PGZsb2F0Pihjb2x1bW5Jbml0aWFsV2lkdGhz
W2NvbHVtbkluZGV4XS0+dmFsdWUsIHNsb3RJbml0aWFsV2lkdGgoc2xvdCkpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIDIuIEFkanVzdCB0aGUgPHRkPiBpbml0aWFsIHdp
ZHRocyB3aXRoIGZpeGVkIGNvbHVtbiB3aWR0aHMgKDxjb2w+IHZzLiA8dGQ+KSBhbmQgYWxzbyBt
YW5hZ2UgYWxsLWZpeGVkLXdpZHRoLWNvbHVtbiBjb250ZW50LgotICAgICAgICBhdXRvIGhhc0Zp
eGVkQ29sdW1uc09ubHkgPSBjb2x1bW5zLmhhc0ZpeGVkQ29sdW1uc09ubHkoKTsKLSAgICAgICAg
Zm9yIChzaXplX3QgY29sdW1uSW5kZXggPSAwOyBjb2x1bW5JbmRleCA8IGNvbHVtbnMuc2l6ZSgp
OyArK2NvbHVtbkluZGV4KSB7Ci0gICAgICAgICAgICBhdXRvJiBjb2x1bW4gPSBjb2x1bW5zLmxp
c3QoKVtjb2x1bW5JbmRleF07Ci0gICAgICAgICAgICBpZiAoIWNvbHVtbi5pc0ZpeGVkV2lkdGgo
KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhl
IGNvbHVtbiB3aWR0aCBiYXNlZCBvbiA8Y29sIHdpZHRoPSIiPiBhbmQgbm90IDx0ZCBzdHlsZT0i
d2lkdGg6ICI+LgotICAgICAgICAgICAgYXV0byBjb2x1bW5GaXhlZFdpZHRoID0gY29sdW1uLmJv
eCgpID8gY29sdW1uLmJveCgpLT5jb2x1bW5XaWR0aCgpIDogV1RGOjpudWxsb3B0OwotICAgICAg
ICAgICAgaWYgKCFjb2x1bW5GaXhlZFdpZHRoKQorICAgICAgICAgICAgYXV0byYgc2xvdCA9ICpn
cmlkLnNsb3QoeyBjb2x1bW5JbmRleCwgcm93SW5kZXggfSk7CisgICAgICAgICAgICBpZiAoU3Bh
blR5cGU6Omhhc1NwYW4oc2xvdCkgfHwgU3BhblR5cGU6OmlzU3Bhbm5lZChzbG90KSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghY29sdW1uSW5pdGlhbFdpZHRo
c1tjb2x1bW5JbmRleF0pCi0gICAgICAgICAgICAgICAgY29sdW1uSW5pdGlhbFdpZHRoc1tjb2x1
bW5JbmRleF0gPSBDb2x1bW5Jbml0aWFsV2lkdGggeyB9OwotICAgICAgICAgICAgY29sdW1uSW5p
dGlhbFdpZHRoc1tjb2x1bW5JbmRleF0tPnZhbHVlID0gc3RkOjptYXgoY29sdW1uSW5pdGlhbFdp
ZHRoc1tjb2x1bW5JbmRleF0tPnZhbHVlLCBjb2x1bW5GaXhlZFdpZHRoLnZhbHVlT3IoMCkudG9G
bG9hdCgpKTsKLSAgICAgICAgICAgIC8vIEZpeGVkIGNvbHVtbnMgZmxleCB3aGVuIHRoZXJlIGFy
ZSBubyBvdGhlciBmbGV4aW5nIGNvbHVtbnMuCi0gICAgICAgICAgICBjb2x1bW5Jbml0aWFsV2lk
dGhzW2NvbHVtbkluZGV4XS0+aXNGaXhlZCA9ICFoYXNGaXhlZENvbHVtbnNPbmx5OworICAgICAg
ICAgICAgYXV0byBpbmRleCA9IFNwYW5UeXBlOjppbmRleChjb2x1bW5JbmRleCwgcm93SW5kZXgp
OworICAgICAgICAgICAgaWYgKCFyZXNvbHZlZFNwYWNlc1tpbmRleF0pCisgICAgICAgICAgICAg
ICAgcmVzb2x2ZWRTcGFjZXNbaW5kZXhdID0gUmVzb2x2ZWRTcGFjZSB7IH07CisgICAgICAgICAg
ICByZXNvbHZlZFNwYWNlc1tpbmRleF0tPnZhbHVlID0gc3RkOjptYXg8ZmxvYXQ+KHJlc29sdmVk
U3BhY2VzW2luZGV4XS0+dmFsdWUsIHNsb3RTcGFjZShzbG90LCBpbmRleCkpOwogICAgICAgICB9
CisgICAgfQogCi0gICAgICAgIC8vIFdlIG5lZWQgdGhlc2Ugc3Bhbm5pbmcgY2VsbHMgaW4gdGhl
IG9yZGVyIG9mIHRoZSBudW1iZXIgb2YgY29sdW1ucyB0aGV5IHNwYW4gc28gdGhhdAotICAgICAg
ICAvLyB3ZSBjYW4gcmVzb2x2ZSBvdmVybGFwcGluZyBzcGFucyBzdGFydGluZyB3aXRoIHRoZSBz
aG9ydGVyIG9uZXMgZS5nLgotICAgICAgICAvLyA8dGQgY29sc3Bhbj00PiNhPC90ZD48dGQ+I2I8
L3RkPgotICAgICAgICAvLyA8dGQgY29sc3Bhbj0yPiNjPC90ZD48dGQgY29sc3Bhbj0zPiNkPC90
ZD4KLSAgICAgICAgc3RkOjpzb3J0KHNwYW5uaW5nQ2VsbFBvc2l0aW9uTGlzdC5iZWdpbigpLCBz
cGFubmluZ0NlbGxQb3NpdGlvbkxpc3QuZW5kKCksIFsmXSAoYXV0byYgYSwgYXV0byYgYikgewot
ICAgICAgICAgICAgcmV0dXJuIGdyaWQuc2xvdChhKS0+Y2VsbCgpLmNvbHVtblNwYW4oKSA8IGdy
aWQuc2xvdChiKS0+Y2VsbCgpLmNvbHVtblNwYW4oKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIC8v
IDMuIERpc3RyaWJ1dGUgdGhlIHNwYW5uaW5nIGNlbGxzJyBtaW1pbXVtIHdpZHRocyBhY3Jvc3Mg
dGhlIGNvbHVtbnMgdXNpbmcgdGhlIG5vbi1zcGFubmluZyBpbml0aWFsIHdpZHRocy4KLSAgICAg
ICAgLy8gZS5nLiBbIDEgXVsgNSBdWyAxIF0KLSAgICAgICAgLy8gICAgICBbICAgIDkgICBdWyAx
IF0KLSAgICAgICAgLy8gVGhlIGluaXRpYWwgd2lkdGhzIGFyZTogWyAyIF1bIDcgXVsgMSBdCi0g
ICAgICAgIGZvciAoYXV0byBzcGFubmluZ0NlbGxQb3NpdGlvbiA6IHNwYW5uaW5nQ2VsbFBvc2l0
aW9uTGlzdCkgewotICAgICAgICAgICAgYXV0byYgc2xvdCA9ICpncmlkLnNsb3Qoc3Bhbm5pbmdD
ZWxsUG9zaXRpb24pOwotICAgICAgICAgICAgQVNTRVJUKHNsb3QuaGFzQ29sdW1uU3BhbigpKTsK
LSAgICAgICAgICAgIGF1dG8mIGNlbGwgPSBzbG90LmNlbGwoKTsKLSAgICAgICAgICAgIGZsb2F0
IHNwYW5uaW5nSW5pdGlhbFdpZHRoID0gc2xvdEluaXRpYWxXaWR0aChzbG90KTsKLSAgICAgICAg
ICAgIGlmICghY29sdW1uSW5pdGlhbFdpZHRoc1tjZWxsLnN0YXJ0Q29sdW1uKCldIHx8ICFjb2x1
bW5Jbml0aWFsV2lkdGhzW2NlbGwuZW5kQ29sdW1uKCkgLSAxXSkgewotICAgICAgICAgICAgICAg
IC8vIDx0ZCBjb2xzcGFuPTQ+I2E8L3RkPjx0ZD4jYjwvdGQ+Ci0gICAgICAgICAgICAgICAgLy8g
PHRkIGNvbHNwYW49Mj4jYzwvdGQ+PHRkIGNvbHNwYW49Mz4jZDwvdGQ+Ci0gICAgICAgICAgICAg
ICAgLy8gVW5yZXNvbHZlZCBjb2x1bW5zIGFyZTogMSAyIDMgNAotICAgICAgICAgICAgICAgIC8v
IDEuIFRha2UgY29sc3Bhbj0yIChzaG9ydGVzdCBzcGFuKSBhbmQgcmVzb2x2ZSBjb2x1bW4gMSBh
bmQgMgotICAgICAgICAgICAgICAgIC8vIDIuIFRha2UgY29sc3Bhbj0zIGFuZCByZXNvbHZlIGNv
bHVtbiAzIGFuZCA0ICg1IGlzIHJlc29sdmVkIGJlY2F1c2UgaXQgYWxyZWFkeSBoYXMgYSBub24t
c3Bhbm5pbmcgY2VsbCkuCi0gICAgICAgICAgICAgICAgLy8gMy4gY29sc3Bhbj00IG5lZWRzIG5v
IHJlc29sdmluZyBiZWNhdXNlIGFsbCB0aGUgc3Bhbm5lZCBjb2x1bW5zICgxIDIgMyA0KSBoYXZl
IGFscmVhZHkgYmVlbiByZXNvbHZlZC4KLSAgICAgICAgICAgICAgICBhdXRvIHVucmVzb2x2ZWRD
b2x1bW5OdW1iZXIgPSBjZWxsLmNvbHVtblNwYW4oKTsKLSAgICAgICAgICAgICAgICBmb3IgKGF1
dG8gY29sdW1uSW5kZXggPSBjZWxsLnN0YXJ0Q29sdW1uKCk7IGNvbHVtbkluZGV4IDwgY2VsbC5l
bmRDb2x1bW4oKTsgKytjb2x1bW5JbmRleCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWNv
bHVtbkluaXRpYWxXaWR0aHNbY29sdW1uSW5kZXhdKQotICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCh1bnJlc29sdmVkQ29sdW1uTnVt
YmVyKTsKLSAgICAgICAgICAgICAgICAgICAgLS11bnJlc29sdmVkQ29sdW1uTnVtYmVyOwotICAg
ICAgICAgICAgICAgICAgICBzcGFubmluZ0luaXRpYWxXaWR0aCA9IHN0ZDo6bWF4KDAuMGYsIHNw
YW5uaW5nSW5pdGlhbFdpZHRoIC0gY29sdW1uSW5pdGlhbFdpZHRoc1tjb2x1bW5JbmRleF0tPnZh
bHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHVucmVzb2x2
ZWRDb2x1bW5OdW1iZXIpOwotICAgICAgICAgICAgICAgIGZvciAoYXV0byBjb2x1bW5JbmRleCA9
IGNlbGwuc3RhcnRDb2x1bW4oKTsgY29sdW1uSW5kZXggPCBjZWxsLmVuZENvbHVtbigpOyArK2Nv
bHVtbkluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW5Jbml0aWFsV2lkdGhz
W2NvbHVtbkluZGV4XSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgICAgICBjb2x1bW5Jbml0aWFsV2lkdGhzW2NvbHVtbkluZGV4XSA9IENvbHVtbklu
aXRpYWxXaWR0aCB7IHNwYW5uaW5nSW5pdGlhbFdpZHRoIC8gdW5yZXNvbHZlZENvbHVtbk51bWJl
ciwgZmFsc2UgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIC8vIDEuIENvbGxlY3QgdGhlIG5vbi1zcGFuaW5nIGluaXRpYWwgd2lkdGhz
LgotICAgICAgICAgICAgICAgIGZsb2F0IGN1cnJlbnRTcGFubmluZ0luaXRpYWxXaWR0aCA9IDA7
Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvIGNvbHVtbkluZGV4ID0gY2VsbC5zdGFydENvbHVt
bigpOyBjb2x1bW5JbmRleCA8IGNlbGwuZW5kQ29sdW1uKCk7ICsrY29sdW1uSW5kZXgpCi0gICAg
ICAgICAgICAgICAgICAgIGN1cnJlbnRTcGFubmluZ0luaXRpYWxXaWR0aCArPSBjb2x1bW5Jbml0
aWFsV2lkdGhzW2NvbHVtbkluZGV4XS0+dmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJl
bnRTcGFubmluZ0luaXRpYWxXaWR0aCA+PSBzcGFubmluZ0luaXRpYWxXaWR0aCkgewotICAgICAg
ICAgICAgICAgICAgICAvLyBUaGUgc3Bhbm5pbmcgY2VsbCBmaXRzIHRoZSBzcGFubmVkIGNvbHVt
bnMganVzdCBmaW5lLiBOb3RoaW5nIHRvIGRpc3RyaWJ1dGUuCisgICAgLy8gMi4gQ29sbGVjdCB0
aGUgc3Bhbm5pbmcgY2VsbHMuCisgICAgc3RydWN0IFNwYW5uaW5nQ2VsbCB7CisgICAgICAgIFNs
b3RQb3NpdGlvbiBwb3NpdGlvbjsKKyAgICAgICAgTGF5b3V0VW5pdCB1bnJlc29sdmVkU3BhY2U7
CisgICAgfTsKKyAgICBWZWN0b3I8U3Bhbm5pbmdDZWxsPiBzcGFubmluZ0NlbGxzOworICAgIGZv
ciAoc2l6ZV90IHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCByb3dzLnNpemUoKTsgKytyb3dJbmRl
eCkgeworICAgICAgICBmb3IgKHNpemVfdCBjb2x1bW5JbmRleCA9IDA7IGNvbHVtbkluZGV4IDwg
Y29sdW1ucy5zaXplKCk7ICsrY29sdW1uSW5kZXgpIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3Qg
PSAqZ3JpZC5zbG90KHsgY29sdW1uSW5kZXgsIHJvd0luZGV4IH0pOworICAgICAgICAgICAgaWYg
KFNwYW5UeXBlOjpoYXNTcGFuKHNsb3QpKQorICAgICAgICAgICAgICAgIHNwYW5uaW5nQ2VsbHMu
YXBwZW5kKHsgeyBjb2x1bW5JbmRleCwgcm93SW5kZXggfSwgc2xvdFNwYWNlKHNsb3QsIFNwYW5U
eXBlOjppbmRleChjb2x1bW5JbmRleCwgcm93SW5kZXgpKSB9KTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAvLyBXZSBuZWVkIHRoZXNlIHNwYW5uaW5nIGNlbGxzIGluIHRoZSBvcmRlciBvZiB0aGUg
bnVtYmVyIG9mIGNvbHVtbnMvcm93cyB0aGV5IHNwYW4gc28gdGhhdAorICAgIC8vIHdlIGNhbiBy
ZXNvbHZlIG92ZXJsYXBwaW5nIHNwYW5zIHN0YXJ0aW5nIHdpdGggdGhlIHNob3J0ZXIgb25lcyBl
LmcuCisgICAgLy8gPHRkIGNvbHNwYW49ND4jYTwvdGQ+PHRkPiNiPC90ZD4KKyAgICAvLyA8dGQg
Y29sc3Bhbj0yPiNjPC90ZD48dGQgY29sc3Bhbj0zPiNkPC90ZD4KKyAgICBzdGQ6OnNvcnQoc3Bh
bm5pbmdDZWxscy5iZWdpbigpLCBzcGFubmluZ0NlbGxzLmVuZCgpLCBbJl0gKGF1dG8mIGEsIGF1
dG8mIGIpIHsKKyAgICAgICAgcmV0dXJuIFNwYW5UeXBlOjpzcGFuQ291bnQoZ3JpZC5zbG90KGEu
cG9zaXRpb24pLT5jZWxsKCkpIDwgU3BhblR5cGU6OnNwYW5Db3VudChncmlkLnNsb3QoYi5wb3Np
dGlvbiktPmNlbGwoKSk7CisgICAgfSk7CisKKyAgICAvLyAzLiBEaXN0cmlidXRlIHRoZSBzcGFu
bmluZyBjZWxscycgbWltaW11bSBzcGFjZSBhY3Jvc3MgdGhlIGNvbHVtbnMvcm93cyB1c2luZyB0
aGUgbm9uLXNwYW5uaW5nIHNwYWNlcy4KKyAgICAvLyBlLmcuIFsgMSBdWyA1IF1bIDEgXQorICAg
IC8vICAgICAgWyAgICA5ICAgXVsgMSBdCisgICAgLy8gVGhlIGluaXRpYWwgd2lkdGhzIGFyZTog
WyAyIF1bIDcgXVsgMSBdCisgICAgZm9yIChhdXRvIHNwYW5uaW5nQ2VsbCA6IHNwYW5uaW5nQ2Vs
bHMpIHsKKyAgICAgICAgYXV0byYgY2VsbCA9IGdyaWQuc2xvdChzcGFubmluZ0NlbGwucG9zaXRp
b24pLT5jZWxsKCk7CisgICAgICAgIGZsb2F0IHVucmVzb2x2ZWRTcGFubmluZ1NwYWNlID0gc3Bh
bm5pbmdDZWxsLnVucmVzb2x2ZWRTcGFjZTsKKyAgICAgICAgaWYgKCFyZXNvbHZlZFNwYWNlc1tT
cGFuVHlwZTo6c3RhcnRTcGFuKGNlbGwpXSB8fCAhcmVzb2x2ZWRTcGFjZXNbU3BhblR5cGU6OmVu
ZFNwYW4oY2VsbCkgLSAxXSkgeworICAgICAgICAgICAgLy8gPHRkIGNvbHNwYW49ND4jYTwvdGQ+
PHRkPiNiPC90ZD4KKyAgICAgICAgICAgIC8vIDx0ZCBjb2xzcGFuPTI+I2M8L3RkPjx0ZCBjb2xz
cGFuPTM+I2Q8L3RkPgorICAgICAgICAgICAgLy8gVW5yZXNvbHZlZCBjb2x1bW5zIGFyZTogMSAy
IDMgNAorICAgICAgICAgICAgLy8gMS4gVGFrZSBjb2xzcGFuPTIgKHNob3J0ZXN0IHNwYW4pIGFu
ZCByZXNvbHZlIGNvbHVtbiAxIGFuZCAyCisgICAgICAgICAgICAvLyAyLiBUYWtlIGNvbHNwYW49
MyBhbmQgcmVzb2x2ZSBjb2x1bW4gMyBhbmQgNCAoNSBpcyByZXNvbHZlZCBiZWNhdXNlIGl0IGFs
cmVhZHkgaGFzIGEgbm9uLXNwYW5uaW5nIGNlbGwpLgorICAgICAgICAgICAgLy8gMy4gY29sc3Bh
bj00IG5lZWRzIG5vIHJlc29sdmluZyBiZWNhdXNlIGFsbCB0aGUgc3Bhbm5lZCBjb2x1bW5zICgx
IDIgMyA0KSBoYXZlIGFscmVhZHkgYmVlbiByZXNvbHZlZC4KKyAgICAgICAgICAgIGF1dG8gdW5y
ZXNvbHZlZENvbHVtbkNvdW50ID0gY2VsbC5jb2x1bW5TcGFuKCk7CisgICAgICAgICAgICBmb3Ig
KGF1dG8gc3BhbkluZGV4ID0gU3BhblR5cGU6OnN0YXJ0U3BhbihjZWxsKTsgc3BhbkluZGV4IDwg
U3BhblR5cGU6OmVuZFNwYW4oY2VsbCk7ICsrc3BhbkluZGV4KSB7CisgICAgICAgICAgICAgICAg
aWYgKCFyZXNvbHZlZFNwYWNlc1tzcGFuSW5kZXhdKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodW5yZXNvbHZlZENvbHVtbkNvdW50KTsKKyAg
ICAgICAgICAgICAgICAtLXVucmVzb2x2ZWRDb2x1bW5Db3VudDsKKyAgICAgICAgICAgICAgICB1
bnJlc29sdmVkU3Bhbm5pbmdTcGFjZSA9IHN0ZDo6bWF4KDAuMGYsIHVucmVzb2x2ZWRTcGFubmlu
Z1NwYWNlIC0gcmVzb2x2ZWRTcGFjZXNbc3BhbkluZGV4XS0+dmFsdWUpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgQVNTRVJUKHVucmVzb2x2ZWRDb2x1bW5Db3VudCk7CisgICAgICAgICAg
ICBmb3IgKGF1dG8gc3BhbkluZGV4ID0gU3BhblR5cGU6OnN0YXJ0U3BhbihjZWxsKTsgc3Bhbklu
ZGV4IDwgU3BhblR5cGU6OmVuZFNwYW4oY2VsbCk7ICsrc3BhbkluZGV4KSB7CisgICAgICAgICAg
ICAgICAgaWYgKHJlc29sdmVkU3BhY2VzW3NwYW5JbmRleF0pCiAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyAyLiBEaXN0
cmlidXRlIHRoZSBleHRyYSB3aWR0aCBhbW9uZyB0aGUgc3Bhbm5lZCBjb2x1bW5zIGJhc2VkIG9u
IHRoZSBpbml0aWFsIGNvbHVtbiB3aWR0aC4KLSAgICAgICAgICAgICAgICAvLyBlLmcuIHNwYW5u
aW5nIGluaXRpYWwgd2lkdGg6IFsgICA5ICAgXS4gQ3VycmVudCBpbml0aWFsIHdpZHRocyBmb3Ig
dGhlIHNwYW5uZWQgY29sdW1uczogWyAxIF0gWyAyIF0KLSAgICAgICAgICAgICAgICAvLyBOZXcg
aW5pdGlhbCB3aWR0aHM6IFsgMyBdIFsgNiBdLgotICAgICAgICAgICAgICAgIGF1dG8gc3BhY2VU
b0Rpc3RyaWJ1dGUgPSBzdGQ6Om1heCgwLjBmLCBzcGFubmluZ0luaXRpYWxXaWR0aCAtIChjZWxs
LmNvbHVtblNwYW4oKSAtIDEpICogZ3JpZC5ob3Jpem9udGFsU3BhY2luZygpIC0gY3VycmVudFNw
YW5uaW5nSW5pdGlhbFdpZHRoKTsKLSAgICAgICAgICAgICAgICBpZiAoc3BhY2VUb0Rpc3RyaWJ1
dGUpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvIGNvbHVtbkluZGV4ID0gY2VsbC5z
dGFydENvbHVtbigpOyBjb2x1bW5JbmRleCA8IGNlbGwuZW5kQ29sdW1uKCk7ICsrY29sdW1uSW5k
ZXgpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5Jbml0aWFsV2lkdGhzW2NvbHVtbklu
ZGV4XS0+dmFsdWUgKz0gc3BhY2VUb0Rpc3RyaWJ1dGUgLyBjdXJyZW50U3Bhbm5pbmdJbml0aWFs
V2lkdGggKiBjb2x1bW5Jbml0aWFsV2lkdGhzW2NvbHVtbkluZGV4XS0+dmFsdWU7Ci0gICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlc29sdmVkU3BhY2VzW3NwYW5JbmRleF0gPSBS
ZXNvbHZlZFNwYWNlIHsgdW5yZXNvbHZlZFNwYW5uaW5nU3BhY2UgLyB1bnJlc29sdmVkQ29sdW1u
Q291bnQsIGZhbHNlIH07CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAvLyAxLiBDb2xsZWN0IHRoZSBub24tc3BhbmluZyByZXNvbHZlZCBzcGFjZXMuCisgICAg
ICAgICAgICAvLyAyLiBEaXN0cmlidXRlIHRoZSBleHRyYSBzcGFjZSBhbW9uZyB0aGUgc3Bhbm5l
ZCBjb2x1bW5zL3Jvd3MgYmFzZWQgb24gdGhlIHJlc29sdmVkIHNwYWNlIHZhbHVlcy4KKyAgICAg
ICAgICAgIC8vIGUuZy4gc3Bhbm5pbmcgd2lkdGg6IFsgICA5ICAgXS4gUmVzb2x2ZWQgd2lkdGhz
IGZvciB0aGUgc3Bhbm5lZCBjb2x1bW5zOiBbIDEgXSBbIDIgXQorICAgICAgICAgICAgLy8gTmV3
IHJlc29sdmVkIHdpZHRoczogWyAzIF0gWyA2IF0uCisgICAgICAgICAgICBmbG9hdCByZXNvbHZl
ZFNwYWNlID0gMDsKKyAgICAgICAgICAgIGZvciAoYXV0byBjb2x1bW5JbmRleCA9IGNlbGwuc3Rh
cnRDb2x1bW4oKTsgY29sdW1uSW5kZXggPCBjZWxsLmVuZENvbHVtbigpOyArK2NvbHVtbkluZGV4
KQorICAgICAgICAgICAgICAgIHJlc29sdmVkU3BhY2UgKz0gcmVzb2x2ZWRTcGFjZXNbY29sdW1u
SW5kZXhdLT52YWx1ZTsKKyAgICAgICAgICAgIGlmIChyZXNvbHZlZFNwYWNlID49IHVucmVzb2x2
ZWRTcGFubmluZ1NwYWNlKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIHNwYW5uaW5nIGNlbGwg
Zml0cyB0aGUgc3Bhbm5lZCBjb2x1bW5zL3Jvd3MganVzdCBmaW5lLiBOb3RoaW5nIHRvIGRpc3Ry
aWJ1dGUuCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBhdXRvIHNwYW5uaW5nU3BhY2VUb0Rpc3RyaWJ1dGUgPSBzdGQ6Om1heCgwLjBmLCB1bnJl
c29sdmVkU3Bhbm5pbmdTcGFjZSAtIFNwYW5UeXBlOjpzcGFjaW5nKGdyaWQsIGNlbGwpIC0gcmVz
b2x2ZWRTcGFjZSk7CisgICAgICAgICAgICBpZiAoc3Bhbm5pbmdTcGFjZVRvRGlzdHJpYnV0ZSkg
eworICAgICAgICAgICAgICAgIGZvciAoYXV0byBzcGFuSW5kZXggPSBTcGFuVHlwZTo6c3RhcnRT
cGFuKGNlbGwpOyBzcGFuSW5kZXggPCBTcGFuVHlwZTo6ZW5kU3BhbihjZWxsKTsgKytzcGFuSW5k
ZXgpCisgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkU3BhY2VzW3NwYW5JbmRleF0tPnZhbHVl
ICs9IHNwYW5uaW5nU3BhY2VUb0Rpc3RyaWJ1dGUgLyByZXNvbHZlZFNwYWNlICogcmVzb2x2ZWRT
cGFjZXNbc3BhbkluZGV4XS0+dmFsdWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAg
ICAgLy8gNC4gRGlzdHJpYnV0ZSB0aGUgZXh0cmEgc3BhY2UgdXNpbmcgdGhlIGZpbmFsIGluaXRp
YWwgd2lkdGhzLgorICAgIH0KKyAgICAvLyA0LiBEaXN0cmlidXRlIHRoZSBleHRyYSBzcGFjZSB1
c2luZyB0aGUgZmluYWwgcmVzb2x2ZWQgd2lkdGhzLgogI2lmIEFTU0VSVF9FTkFCTEVECi0gICAg
ICAgIC8vIFdlIGhhdmUgdG8gaGF2ZSBhbGwgdGhlIGNvbHVtbnMgcmVzb2x2ZWQgYXQgdGhpcyBw
b2ludCB3aXRoIHZhbGlkIGluaXRpYWwgd2lkdGhzLgotICAgICAgICBmb3IgKGF1dG8mIGNvbHVt
bkluaXRpYWxXaWR0aCA6IGNvbHVtbkluaXRpYWxXaWR0aHMpCi0gICAgICAgICAgICBBU1NFUlQo
Y29sdW1uSW5pdGlhbFdpZHRoKTsKKyAgICAvLyBXZSBoYXZlIHRvIGhhdmUgYWxsIHRoZSBzcGFj
ZXMgcmVzb2x2ZWQgYXQgdGhpcyBwb2ludC4KKyAgICBmb3IgKGF1dG8mIHJlc29sdmVkU3BhY2Ug
OiByZXNvbHZlZFNwYWNlcykKKyAgICAgICAgQVNTRVJUKHJlc29sdmVkU3BhY2UpOwogI2VuZGlm
Ci0gICAgICAgIC8vIEZpeGVkIHdpZHRoIGNvbHVtbnMgZG9uJ3QgcGFydGljaXBhdGUgaW4gYXZh
aWxhYmxlIHNwYWNlIGRpc3RyaWJ1dGlvbi4KLSAgICAgICAgLy8gVW5sZXNzIHRoZXJlIGFyZSBu
byBmbGV4aW5nIGNvbHVtbiBhdCBhbGwsIHRoZW4gdGhleSBzdGFydCBmbGV4aW5nIGFzIGlmIHRo
ZXkgd2VyZSBub3QgZml4ZWQgYXQgYWxsLgotICAgICAgICBmbG9hdCBhZGp1c3RhYmxlZEhvcml6
b250YWxTcGFjZSA9IDA7Ci0gICAgICAgIGZvciAoYXV0byYgY29sdW1uSW5pdGlhbFdpZHRoIDog
Y29sdW1uSW5pdGlhbFdpZHRocykgewotICAgICAgICAgICAgaWYgKGNvbHVtbkluaXRpYWxXaWR0
aC0+aXNGaXhlZCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGFkanVz
dGFibGVkSG9yaXpvbnRhbFNwYWNlICs9IGNvbHVtbkluaXRpYWxXaWR0aC0+dmFsdWU7Ci0gICAg
ICAgIH0KKyAgICAvLyBGaXhlZCBzaXplIGNlbGxzIGRvbid0IHBhcnRpY2lwYXRlIGluIGF2YWls
YWJsZSBzcGFjZSBkaXN0cmlidXRpb24uCisgICAgZmxvYXQgYWRqdXN0YWJsZWRTcGFjZSA9IDA7
CisgICAgZm9yIChhdXRvJiByZXNvbHZlZFNwYWNlIDogcmVzb2x2ZWRTcGFjZXMpIHsKKyAgICAg
ICAgaWYgKHJlc29sdmVkU3BhY2UtPmlzRml4ZWQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgYWRqdXN0YWJsZWRTcGFjZSArPSByZXNvbHZlZFNwYWNlLT52YWx1ZTsKKyAgICB9CiAK
KyAgICBEaXN0cmlidXRlZFNwYWNlcyBkaXN0cmlidXRlZFNwYWNlcyhyZXNvbHZlZFNwYWNlcy5z
aXplKCkpOworICAgIC8vIERpc3RyaWJ1dGUgdGhlIGV4dHJhIHNwYWNlIGJhc2VkIG9uIHRoZSBy
ZXNvbHZlZCBzcGFjZXMuCisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IHJlc29s
dmVkU3BhY2VzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBhdXRvJiByZXNvbHZlZFNwYWNl
ID0gcmVzb2x2ZWRTcGFjZXNbaW5kZXhdOworICAgICAgICBhdXRvIGhhc0V4dHJhU3BhY2VUb0Rp
c3RyaWJ1dGUgPSBzcGFjZVRvRGlzdHJpYnV0ZSAmJiAhcmVzb2x2ZWRTcGFjZS0+aXNGaXhlZDsK
KyAgICAgICAgYXV0byByZXNvbHZlZFZhbHVlID0gcmVzb2x2ZWRTcGFjZS0+dmFsdWU7CisgICAg
ICAgIGRpc3RyaWJ1dGVkU3BhY2VzW2luZGV4XSA9IGhhc0V4dHJhU3BhY2VUb0Rpc3RyaWJ1dGUg
PyByZXNvbHZlZFZhbHVlICsgKHNwYWNlVG9EaXN0cmlidXRlIC8gYWRqdXN0YWJsZWRTcGFjZSAq
IHJlc29sdmVkVmFsdWUpIDogcmVzb2x2ZWRWYWx1ZTsKKyAgICB9CisgICAgcmV0dXJuIGRpc3Ry
aWJ1dGVkU3BhY2VzOworfQorCit2b2lkIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVB
bmREaXN0cmlidXRlRXh0cmFIb3Jpem9udGFsU3BhY2UoTGF5b3V0VW5pdCBhdmFpbGFibGVIb3Jp
em9udGFsU3BhY2UpCit7CisgICAgYXV0byYgZ3JpZCA9IGZvcm1hdHRpbmdTdGF0ZSgpLnRhYmxl
R3JpZCgpOworICAgIGF1dG8mIGNvbHVtbnMgPSBncmlkLmNvbHVtbnMoKTsKKyAgICBhdXRvIHRh
YmxlV2lkdGhDb25zdHJhaW50cyA9ICpncmlkLndpZHRoQ29uc3RyYWludHMoKTsKKworICAgIGVu
dW0gY2xhc3MgQ29sdW1uV2lkdGhCYWxhbmNpbmdCYXNlIHsgTWluaW11bVdpZHRoLCBNYXhpbXVt
V2lkdGggfTsKKyAgICBhdXRvIGNvbXB1dGVDb2x1bW5XaWR0aHMgPSBbJl0gKGF1dG8gY29sdW1u
V2lkdGhCYWxhbmNpbmdCYXNlLCBhdXRvIGV4dHJhSG9yaXpvbnRhbFNwYWNlKSB7CisgICAgICAg
IGF1dG8gZGlzdHJpYnV0ZWRTcGFjZXMgPSBkaXN0cmlidXRlQXZhaWxhYmxlU3BhY2U8Q29sdW1u
U3Bhbj4oZ3JpZCwgZXh0cmFIb3Jpem9udGFsU3BhY2UsIFsmXSAoY29uc3QgVGFibGVHcmlkOjpT
bG90JiBzbG90LCBzaXplX3QgY29sdW1uSW5kZXgpIHsKKyAgICAgICAgICAgIGF1dG8mIGNvbHVt
biA9IGNvbHVtbnMubGlzdCgpW2NvbHVtbkluZGV4XTsKKyAgICAgICAgICAgIGF1dG8gY29sdW1u
Rml4ZWRXaWR0aCA9IGNvbHVtbi5ib3goKSA/IGNvbHVtbi5ib3goKS0+Y29sdW1uV2lkdGgoKSA6
IFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgIGF1dG8gc2xvdFdpZHRoID0gY29sdW1uV2lkdGhC
YWxhbmNpbmdCYXNlID09IENvbHVtbldpZHRoQmFsYW5jaW5nQmFzZTo6TWluaW11bVdpZHRoID8g
c2xvdC53aWR0aENvbnN0cmFpbnRzKCkubWluaW11bSA6IHNsb3Qud2lkdGhDb25zdHJhaW50cygp
Lm1heGltdW07CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYXgoc2xvdFdpZHRoLCBjb2x1bW5G
aXhlZFdpZHRoLnZhbHVlT3IoMF9sdSkpOworICAgICAgICB9KTsKICAgICAgICAgLy8gU2V0IGZp
bmlhbCBob3Jpem9udGFsIHBvc2l0aW9uIGFuZCB3aWR0aC4KLSAgICAgICAgZmxvYXQgY29sdW1u
TG9naWNhbExlZnQgPSBncmlkLmhvcml6b250YWxTcGFjaW5nKCk7CisgICAgICAgIGF1dG8gY29s
dW1uTG9naWNhbExlZnQgPSBncmlkLmhvcml6b250YWxTcGFjaW5nKCk7CiAgICAgICAgIGZvciAo
c2l6ZV90IGNvbHVtbkluZGV4ID0gMDsgY29sdW1uSW5kZXggPCBjb2x1bW5zLnNpemUoKTsgKytj
b2x1bW5JbmRleCkgewogICAgICAgICAgICAgYXV0byYgY29sdW1uID0gY29sdW1ucy5saXN0KClb
Y29sdW1uSW5kZXhdOwotICAgICAgICAgICAgYXV0byBpbml0aWFsV2lkdGggPSBjb2x1bW5Jbml0
aWFsV2lkdGhzW2NvbHVtbkluZGV4XS0+dmFsdWU7Ci0gICAgICAgICAgICBhdXRvIGNvbHVtbldp
ZHRoID0gaW5pdGlhbFdpZHRoOworICAgICAgICAgICAgYXV0byBjb2x1bW5XaWR0aCA9IExheW91
dFVuaXQgeyBkaXN0cmlidXRlZFNwYWNlc1tjb2x1bW5JbmRleF0gfTsKIAotICAgICAgICAgICAg
aWYgKGV4dHJhSG9yaXpvbnRhbFNwYWNlICYmICFjb2x1bW5Jbml0aWFsV2lkdGhzW2NvbHVtbklu
ZGV4XS0+aXNGaXhlZCkgewotICAgICAgICAgICAgICAgIGF1dG8gY29sdW1uRXh0cmFTcGFjZSA9
IGV4dHJhSG9yaXpvbnRhbFNwYWNlIC8gYWRqdXN0YWJsZWRIb3Jpem9udGFsU3BhY2UgKiBpbml0
aWFsV2lkdGg7Ci0gICAgICAgICAgICAgICAgY29sdW1uV2lkdGggPSBpbml0aWFsV2lkdGggKyBj
b2x1bW5FeHRyYVNwYWNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29sdW1uLnNldExv
Z2ljYWxMZWZ0KExheW91dFVuaXQge2NvbHVtbkxvZ2ljYWxMZWZ0IH0pOwotICAgICAgICAgICAg
Y29sdW1uLnNldExvZ2ljYWxXaWR0aChMYXlvdXRVbml0IHsgY29sdW1uV2lkdGggfSk7CisgICAg
ICAgICAgICBjb2x1bW4uc2V0TG9naWNhbExlZnQoY29sdW1uTG9naWNhbExlZnQpOworICAgICAg
ICAgICAgY29sdW1uLnNldExvZ2ljYWxXaWR0aChjb2x1bW5XaWR0aCk7CiAgICAgICAgICAgICBj
b2x1bW5Mb2dpY2FsTGVmdCArPSBjb2x1bW5XaWR0aCArIGdyaWQuaG9yaXpvbnRhbFNwYWNpbmco
KTsKICAgICAgICAgfQogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
dGFibGVmb3JtYXR0aW5nL1RhYmxlR3JpZC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L3RhYmxl
Zm9ybWF0dGluZy9UYWJsZUdyaWQuaAppbmRleCBiODFlN2UzNWM2MDVjZWI4NGMxNGNjYTA2NjQy
MGI4MTJmZDVkNWEyLi4wOTczMGQxOWE1NGI3ZmYxYzg1NDllMmE1MmI3MmIwOTFkYmI4ZjdiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlR3Jp
ZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVHcmlk
LmgKQEAgLTIxNCw2ICsyMTQsNyBAQCBwdWJsaWM6CiAgICAgQ2VsbHMmIGNlbGxzKCkgeyByZXR1
cm4gbV9jZWxsczsgfQogCiAgICAgU2xvdCogc2xvdChTbG90UG9zaXRpb24pOworICAgIGNvbnN0
IFNsb3QqIHNsb3QoU2xvdFBvc2l0aW9uIHBvc2l0aW9uKSBjb25zdCB7IHJldHVybiBtX3Nsb3RN
YXAuZ2V0KHBvc2l0aW9uKTsgfQogICAgIGJvb2wgaXNTcGFubmVkKFNsb3RQb3NpdGlvbik7CiAK
IHByaXZhdGU6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398320</attachid>
            <date>2020-05-03 10:53:16 -0700</date>
            <delta_ts>2020-05-03 11:23:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211352-20200503105315.patch</filename>
            <type>text/plain</type>
            <size>19495</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNTc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjM0ZDQ4ZjU5ZjM1YmQy
MzUxZDBiMTFkNThjZGJlMWM4MWQ4MjYzMy4uZjNiNmViYzU0YTk4MTc4N2NkMTIwNTFhMDY2ZWFl
MGI1ODdjZGNiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIwLTA1LTAzICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bVEZDXSBUdXJucyBo
b3Jpem9udGFsIHNwYWNlIGRpc3RyaWJ1dGlvbiBpbnRvIGEgZ2VuZXJpYyBzcGFjZSBkaXN0cmli
dXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
MTM1MgorCisgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgorCisgICAgICAgIEhv
cml6b250YWwoY29sdW1uKSBhbmQgdmVydGljYWwocm93KSBzcGFjZSBkaXN0cmlidXRpb25zIHVz
ZSBlc3NlbnRpYWxseSB0aGUgc2FtZSBsb2dpYyB0byBkaXN0cmlidXRlCisgICAgICAgIHRoZSBl
eHRyYSBzcGFjZSBhbW9uZyB0aGUgY29sdW1ucy9yb3dzLgorICAgICAgICBUaGlzIHBhdGNoIHR1
cm5zIHRoZSBob3Jpem9udGFsIHNwYWNlIGRpc3RyaWJ1dGlvbiBmdW5jdGlvbiBpbnRvIGEgZ2Vu
ZXJpYyBzcGFjZSBkaXN0cmlidXRpb24gY29kZSBzbworICAgICAgICB0aGF0IHdlIGNhbiB1c2Ug
aXQgZm9yIHJvdyBzaXppbmcgYXMgd2VsbC4gIAorCisgICAgICAgICogbGF5b3V0L3RhYmxlZm9y
bWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6Q29sdW1uU3Bhbjo6aGFzU3Bhbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkNv
bHVtblNwYW46OmlzU3Bhbm5lZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkNvbHVtblNw
YW46OnNwYW5Db3VudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkNvbHVtblNwYW46OnN0
YXJ0U3Bhbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkNvbHVtblNwYW46OmVuZFNwYW4p
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpDb2x1bW5TcGFuOjppbmRleCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkNvbHVtblNwYW46OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpDb2x1bW5TcGFuOjpzcGFjaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
ZGlzdHJpYnV0ZUF2YWlsYWJsZVNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFi
bGVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUFuZERpc3RyaWJ1dGVFeHRyYUhvcml6b250YWxT
cGFjZSk6CisgICAgICAgICogbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUdyaWQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVHcmlkOjpzbG90IGNvbnN0KToKKwogMjAyMC0w
NC0zMCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW1RG
Q10gSW50cm9kdWNlIHN0cnVjdCBSb3dIZWlnaHQgaW4gVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6
Y29tcHV0ZUFuZERpc3RyaWJ1dGVFeHRyYVZlcnRpY2FsU3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGlu
Z0NvbnRleHQuY3BwCmluZGV4IGY1ZjllOGRmZmM3NzEzNDVhYWEzYTRhNDQ4ODM2OGJmMTgxYjgx
MjkuLjEzMzA3MzJjMGM0MmJlZGFiZTI3Y2RiYTVkZDg3MTVkODM4MDM1NGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29u
dGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJs
ZUZvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtMzQ3LDE0MCArMzQ3LDE2MCBAQCBGb3JtYXR0aW5n
Q29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBUYWJsZUZvcm1hdHRpbmdDb250ZXh0
Ojpjb21wdXRlZFByZQogICAgIHJldHVybiB0YWJsZVdpZHRoQ29uc3RyYWludHM7CiB9CiAKLXZv
aWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUFuZERpc3RyaWJ1dGVFeHRyYUhvcml6
b250YWxTcGFjZShMYXlvdXRVbml0IGF2YWlsYWJsZUhvcml6b250YWxTcGFjZSkKK3N0cnVjdCBD
b2x1bW5TcGFuIHsKKyAgICBzdGF0aWMgc2l6ZV90IGhhc1NwYW4oY29uc3QgVGFibGVHcmlkOjpT
bG90JiBzbG90KSB7IHJldHVybiBzbG90Lmhhc0NvbHVtblNwYW4oKTsgfQorICAgIHN0YXRpYyBz
aXplX3QgaXNTcGFubmVkKGNvbnN0IFRhYmxlR3JpZDo6U2xvdCYgc2xvdCkgeyByZXR1cm4gc2xv
dC5pc0NvbHVtblNwYW5uZWQoKTsgfQorCisgICAgc3RhdGljIHNpemVfdCBzcGFuQ291bnQoY29u
c3QgVGFibGVHcmlkOjpDZWxsJiBjZWxsKSB7IHJldHVybiBjZWxsLmNvbHVtblNwYW4oKTsgfQor
ICAgIHN0YXRpYyBzaXplX3Qgc3RhcnRTcGFuKGNvbnN0IFRhYmxlR3JpZDo6Q2VsbCYgY2VsbCkg
eyByZXR1cm4gY2VsbC5zdGFydENvbHVtbigpOyB9CisgICAgc3RhdGljIHNpemVfdCBlbmRTcGFu
KGNvbnN0IFRhYmxlR3JpZDo6Q2VsbCYgY2VsbCkgeyByZXR1cm4gY2VsbC5lbmRDb2x1bW4oKTsg
fQorCisgICAgc3RhdGljIHNpemVfdCBpbmRleChzaXplX3QgY29sdW1uSW5kZXgsIHNpemVfdCAv
KnJvd0luZGV4Ki8pIHsgcmV0dXJuIGNvbHVtbkluZGV4OyB9CisgICAgc3RhdGljIHNpemVfdCBz
aXplKGNvbnN0IFRhYmxlR3JpZCYgZ3JpZCkgeyByZXR1cm4gZ3JpZC5jb2x1bW5zKCkuc2l6ZSgp
OyB9CisKKyAgICBzdGF0aWMgTGF5b3V0VW5pdCBzcGFjaW5nKGNvbnN0IFRhYmxlR3JpZCYgZ3Jp
ZCwgY29uc3QgVGFibGVHcmlkOjpDZWxsJiBjZWxsKSB7IHJldHVybiAoY2VsbC5jb2x1bW5TcGFu
KCkgLSAxKSAqIGdyaWQuaG9yaXpvbnRhbFNwYWNpbmcoKTsgfQorfTsKKwordXNpbmcgRGlzdHJp
YnV0ZWRTcGFjZXMgPSBWZWN0b3I8ZmxvYXQ+OwordGVtcGxhdGUgPHR5cGVuYW1lIFNwYW5UeXBl
Pgorc3RhdGljIERpc3RyaWJ1dGVkU3BhY2VzIGRpc3RyaWJ1dGVBdmFpbGFibGVTcGFjZShjb25z
dCBUYWJsZUdyaWQmIGdyaWQsIGZsb2F0IHNwYWNlVG9EaXN0cmlidXRlLCBjb25zdCBXVEY6OkZ1
bmN0aW9uPExheW91dFVuaXQoY29uc3QgVGFibGVHcmlkOjpTbG90Jiwgc2l6ZV90KT4mIHNsb3RT
cGFjZSkKIHsKLSAgICBhdXRvJiBncmlkID0gZm9ybWF0dGluZ1N0YXRlKCkudGFibGVHcmlkKCk7
CisgICAgc3RydWN0IFJlc29sdmVkU3BhY2UgeworICAgICAgICBmbG9hdCB2YWx1ZSB7IDAgfTsK
KyAgICAgICAgYm9vbCBpc0ZpeGVkIHsgZmFsc2UgfTsKKyAgICB9OworCiAgICAgYXV0byYgY29s
dW1ucyA9IGdyaWQuY29sdW1ucygpOwogICAgIGF1dG8mIHJvd3MgPSBncmlkLnJvd3MoKTsKLSAg
ICBhdXRvIHRhYmxlV2lkdGhDb25zdHJhaW50cyA9ICpncmlkLndpZHRoQ29uc3RyYWludHMoKTsK
LQotICAgIGVudW0gY2xhc3MgQ29sdW1uV2lkdGhCYWxhbmNpbmdCYXNlIHsgTWluaW11bVdpZHRo
LCBNYXhpbXVtV2lkdGggfTsKLSAgICBhdXRvIGNvbXB1dGVDb2x1bW5XaWR0aHMgPSBbJl0gKGF1
dG8gY29sdW1uV2lkdGhCYWxhbmNpbmdCYXNlLCBhdXRvIGV4dHJhSG9yaXpvbnRhbFNwYWNlKSB7
Ci0gICAgICAgIGF1dG8gc2xvdEluaXRpYWxXaWR0aCA9IFsmXSAoYXV0byYgc2xvdCkgewotICAg
ICAgICAgICAgcmV0dXJuIGNvbHVtbldpZHRoQmFsYW5jaW5nQmFzZSA9PSBDb2x1bW5XaWR0aEJh
bGFuY2luZ0Jhc2U6Ok1pbmltdW1XaWR0aCA/IHNsb3Qud2lkdGhDb25zdHJhaW50cygpLm1pbmlt
dW0gOiBzbG90LndpZHRoQ29uc3RyYWludHMoKS5tYXhpbXVtOwotICAgICAgICB9OwotICAgICAg
ICAvLyAxLiBDb2xsZWN0IGluaXRpYWwgd2lkdGhzIGRyaXZlbiBieSA8dGQ+IGFjcm9zcyBjb2x1
bW5zIGJ1dCBpZ25vcmUgc3Bhbm5pbmcgY2VsbHMgZmlyc3QuCi0gICAgICAgIHN0cnVjdCBDb2x1
bW5Jbml0aWFsV2lkdGggewotICAgICAgICAgICAgZmxvYXQgdmFsdWUgeyAwIH07Ci0gICAgICAg
ICAgICBib29sIGlzRml4ZWQgeyBmYWxzZSB9OwotICAgICAgICB9OwotICAgICAgICBWZWN0b3I8
T3B0aW9uYWw8Q29sdW1uSW5pdGlhbFdpZHRoPj4gY29sdW1uSW5pdGlhbFdpZHRocyhjb2x1bW5z
LnNpemUoKSk7Ci0gICAgICAgIFZlY3RvcjxTbG90UG9zaXRpb24+IHNwYW5uaW5nQ2VsbFBvc2l0
aW9uTGlzdDsKKyAgICAvLyAxLiBDb2xsZWN0IHRoZSBub24tc3Bhbm5pbmcgc3BhY2VzIGZpcnN0
LiBUaGV5IGFyZSB1c2VkIGZvciB0aGUgZmluYWwgZGlzdHJpYnV0aW9uIGFzIHdlbGwgYXMgZm9y
IGRpc3RyaWJ1dGluZyB0aGUgc3Bhbm5pbmcgc3BhY2UuCisgICAgVmVjdG9yPE9wdGlvbmFsPFJl
c29sdmVkU3BhY2U+PiByZXNvbHZlZFNwYWNlcyhTcGFuVHlwZTo6c2l6ZShncmlkKSk7CisgICAg
Zm9yIChzaXplX3QgY29sdW1uSW5kZXggPSAwOyBjb2x1bW5JbmRleCA8IGNvbHVtbnMuc2l6ZSgp
OyArK2NvbHVtbkluZGV4KSB7CiAgICAgICAgIGZvciAoc2l6ZV90IHJvd0luZGV4ID0gMDsgcm93
SW5kZXggPCByb3dzLnNpemUoKTsgKytyb3dJbmRleCkgewotICAgICAgICAgICAgZm9yIChzaXpl
X3QgY29sdW1uSW5kZXggPSAwOyBjb2x1bW5JbmRleCA8IGNvbHVtbnMuc2l6ZSgpOyArK2NvbHVt
bkluZGV4KSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgc2xvdCA9ICpncmlkLnNsb3QoeyBjb2x1
bW5JbmRleCwgcm93SW5kZXggfSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNDb2x1bW5T
cGFubmVkKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IGlmIChzbG90Lmhhc0NvbHVtblNwYW4oKSkgewotICAgICAgICAgICAgICAgICAgICBzcGFubmlu
Z0NlbGxQb3NpdGlvbkxpc3QuYXBwZW5kKHsgY29sdW1uSW5kZXgsIHJvd0luZGV4IH0pOwotICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgaWYgKCFjb2x1bW5Jbml0aWFsV2lkdGhzW2NvbHVtbkluZGV4XSkKLSAgICAgICAgICAg
ICAgICAgICAgY29sdW1uSW5pdGlhbFdpZHRoc1tjb2x1bW5JbmRleF0gPSBDb2x1bW5Jbml0aWFs
V2lkdGggeyB9OwotICAgICAgICAgICAgICAgIGNvbHVtbkluaXRpYWxXaWR0aHNbY29sdW1uSW5k
ZXhdLT52YWx1ZSA9IHN0ZDo6bWF4PGZsb2F0Pihjb2x1bW5Jbml0aWFsV2lkdGhzW2NvbHVtbklu
ZGV4XS0+dmFsdWUsIHNsb3RJbml0aWFsV2lkdGgoc2xvdCkpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIC8vIDIuIEFkanVzdCB0aGUgPHRkPiBpbml0aWFsIHdpZHRocyB3aXRo
IGZpeGVkIGNvbHVtbiB3aWR0aHMgKDxjb2w+IHZzLiA8dGQ+KSBhbmQgYWxzbyBtYW5hZ2UgYWxs
LWZpeGVkLXdpZHRoLWNvbHVtbiBjb250ZW50LgotICAgICAgICBhdXRvIGhhc0ZpeGVkQ29sdW1u
c09ubHkgPSBjb2x1bW5zLmhhc0ZpeGVkQ29sdW1uc09ubHkoKTsKLSAgICAgICAgZm9yIChzaXpl
X3QgY29sdW1uSW5kZXggPSAwOyBjb2x1bW5JbmRleCA8IGNvbHVtbnMuc2l6ZSgpOyArK2NvbHVt
bkluZGV4KSB7Ci0gICAgICAgICAgICBhdXRvJiBjb2x1bW4gPSBjb2x1bW5zLmxpc3QoKVtjb2x1
bW5JbmRleF07Ci0gICAgICAgICAgICBpZiAoIWNvbHVtbi5pc0ZpeGVkV2lkdGgoKSkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGNvbHVtbiB3
aWR0aCBiYXNlZCBvbiA8Y29sIHdpZHRoPSIiPiBhbmQgbm90IDx0ZCBzdHlsZT0id2lkdGg6ICI+
LgotICAgICAgICAgICAgYXV0byBjb2x1bW5GaXhlZFdpZHRoID0gY29sdW1uLmJveCgpID8gY29s
dW1uLmJveCgpLT5jb2x1bW5XaWR0aCgpIDogV1RGOjpudWxsb3B0OwotICAgICAgICAgICAgaWYg
KCFjb2x1bW5GaXhlZFdpZHRoKQorICAgICAgICAgICAgYXV0byYgc2xvdCA9ICpncmlkLnNsb3Qo
eyBjb2x1bW5JbmRleCwgcm93SW5kZXggfSk7CisgICAgICAgICAgICBpZiAoU3BhblR5cGU6Omhh
c1NwYW4oc2xvdCkgfHwgU3BhblR5cGU6OmlzU3Bhbm5lZChzbG90KSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghY29sdW1uSW5pdGlhbFdpZHRoc1tjb2x1bW5J
bmRleF0pCi0gICAgICAgICAgICAgICAgY29sdW1uSW5pdGlhbFdpZHRoc1tjb2x1bW5JbmRleF0g
PSBDb2x1bW5Jbml0aWFsV2lkdGggeyB9OwotICAgICAgICAgICAgY29sdW1uSW5pdGlhbFdpZHRo
c1tjb2x1bW5JbmRleF0tPnZhbHVlID0gc3RkOjptYXgoY29sdW1uSW5pdGlhbFdpZHRoc1tjb2x1
bW5JbmRleF0tPnZhbHVlLCBjb2x1bW5GaXhlZFdpZHRoLnZhbHVlT3IoMCkudG9GbG9hdCgpKTsK
LSAgICAgICAgICAgIC8vIEZpeGVkIGNvbHVtbnMgZmxleCB3aGVuIHRoZXJlIGFyZSBubyBvdGhl
ciBmbGV4aW5nIGNvbHVtbnMuCi0gICAgICAgICAgICBjb2x1bW5Jbml0aWFsV2lkdGhzW2NvbHVt
bkluZGV4XS0+aXNGaXhlZCA9ICFoYXNGaXhlZENvbHVtbnNPbmx5OworICAgICAgICAgICAgYXV0
byBpbmRleCA9IFNwYW5UeXBlOjppbmRleChjb2x1bW5JbmRleCwgcm93SW5kZXgpOworICAgICAg
ICAgICAgaWYgKCFyZXNvbHZlZFNwYWNlc1tpbmRleF0pCisgICAgICAgICAgICAgICAgcmVzb2x2
ZWRTcGFjZXNbaW5kZXhdID0gUmVzb2x2ZWRTcGFjZSB7IH07CisgICAgICAgICAgICByZXNvbHZl
ZFNwYWNlc1tpbmRleF0tPnZhbHVlID0gc3RkOjptYXg8ZmxvYXQ+KHJlc29sdmVkU3BhY2VzW2lu
ZGV4XS0+dmFsdWUsIHNsb3RTcGFjZShzbG90LCBpbmRleCkpOwogICAgICAgICB9CisgICAgfQog
Ci0gICAgICAgIC8vIFdlIG5lZWQgdGhlc2Ugc3Bhbm5pbmcgY2VsbHMgaW4gdGhlIG9yZGVyIG9m
IHRoZSBudW1iZXIgb2YgY29sdW1ucyB0aGV5IHNwYW4gc28gdGhhdAotICAgICAgICAvLyB3ZSBj
YW4gcmVzb2x2ZSBvdmVybGFwcGluZyBzcGFucyBzdGFydGluZyB3aXRoIHRoZSBzaG9ydGVyIG9u
ZXMgZS5nLgotICAgICAgICAvLyA8dGQgY29sc3Bhbj00PiNhPC90ZD48dGQ+I2I8L3RkPgotICAg
ICAgICAvLyA8dGQgY29sc3Bhbj0yPiNjPC90ZD48dGQgY29sc3Bhbj0zPiNkPC90ZD4KLSAgICAg
ICAgc3RkOjpzb3J0KHNwYW5uaW5nQ2VsbFBvc2l0aW9uTGlzdC5iZWdpbigpLCBzcGFubmluZ0Nl
bGxQb3NpdGlvbkxpc3QuZW5kKCksIFsmXSAoYXV0byYgYSwgYXV0byYgYikgewotICAgICAgICAg
ICAgcmV0dXJuIGdyaWQuc2xvdChhKS0+Y2VsbCgpLmNvbHVtblNwYW4oKSA8IGdyaWQuc2xvdChi
KS0+Y2VsbCgpLmNvbHVtblNwYW4oKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIC8vIDMuIERpc3Ry
aWJ1dGUgdGhlIHNwYW5uaW5nIGNlbGxzJyBtaW1pbXVtIHdpZHRocyBhY3Jvc3MgdGhlIGNvbHVt
bnMgdXNpbmcgdGhlIG5vbi1zcGFubmluZyBpbml0aWFsIHdpZHRocy4KLSAgICAgICAgLy8gZS5n
LiBbIDEgXVsgNSBdWyAxIF0KLSAgICAgICAgLy8gICAgICBbICAgIDkgICBdWyAxIF0KLSAgICAg
ICAgLy8gVGhlIGluaXRpYWwgd2lkdGhzIGFyZTogWyAyIF1bIDcgXVsgMSBdCi0gICAgICAgIGZv
ciAoYXV0byBzcGFubmluZ0NlbGxQb3NpdGlvbiA6IHNwYW5uaW5nQ2VsbFBvc2l0aW9uTGlzdCkg
ewotICAgICAgICAgICAgYXV0byYgc2xvdCA9ICpncmlkLnNsb3Qoc3Bhbm5pbmdDZWxsUG9zaXRp
b24pOwotICAgICAgICAgICAgQVNTRVJUKHNsb3QuaGFzQ29sdW1uU3BhbigpKTsKLSAgICAgICAg
ICAgIGF1dG8mIGNlbGwgPSBzbG90LmNlbGwoKTsKLSAgICAgICAgICAgIGZsb2F0IHNwYW5uaW5n
SW5pdGlhbFdpZHRoID0gc2xvdEluaXRpYWxXaWR0aChzbG90KTsKLSAgICAgICAgICAgIGlmICgh
Y29sdW1uSW5pdGlhbFdpZHRoc1tjZWxsLnN0YXJ0Q29sdW1uKCldIHx8ICFjb2x1bW5Jbml0aWFs
V2lkdGhzW2NlbGwuZW5kQ29sdW1uKCkgLSAxXSkgewotICAgICAgICAgICAgICAgIC8vIDx0ZCBj
b2xzcGFuPTQ+I2E8L3RkPjx0ZD4jYjwvdGQ+Ci0gICAgICAgICAgICAgICAgLy8gPHRkIGNvbHNw
YW49Mj4jYzwvdGQ+PHRkIGNvbHNwYW49Mz4jZDwvdGQ+Ci0gICAgICAgICAgICAgICAgLy8gVW5y
ZXNvbHZlZCBjb2x1bW5zIGFyZTogMSAyIDMgNAotICAgICAgICAgICAgICAgIC8vIDEuIFRha2Ug
Y29sc3Bhbj0yIChzaG9ydGVzdCBzcGFuKSBhbmQgcmVzb2x2ZSBjb2x1bW4gMSBhbmQgMgotICAg
ICAgICAgICAgICAgIC8vIDIuIFRha2UgY29sc3Bhbj0zIGFuZCByZXNvbHZlIGNvbHVtbiAzIGFu
ZCA0ICg1IGlzIHJlc29sdmVkIGJlY2F1c2UgaXQgYWxyZWFkeSBoYXMgYSBub24tc3Bhbm5pbmcg
Y2VsbCkuCi0gICAgICAgICAgICAgICAgLy8gMy4gY29sc3Bhbj00IG5lZWRzIG5vIHJlc29sdmlu
ZyBiZWNhdXNlIGFsbCB0aGUgc3Bhbm5lZCBjb2x1bW5zICgxIDIgMyA0KSBoYXZlIGFscmVhZHkg
YmVlbiByZXNvbHZlZC4KLSAgICAgICAgICAgICAgICBhdXRvIHVucmVzb2x2ZWRDb2x1bW5OdW1i
ZXIgPSBjZWxsLmNvbHVtblNwYW4oKTsKLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8gY29sdW1u
SW5kZXggPSBjZWxsLnN0YXJ0Q29sdW1uKCk7IGNvbHVtbkluZGV4IDwgY2VsbC5lbmRDb2x1bW4o
KTsgKytjb2x1bW5JbmRleCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbHVtbkluaXRp
YWxXaWR0aHNbY29sdW1uSW5kZXhdKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCh1bnJlc29sdmVkQ29sdW1uTnVtYmVyKTsKLSAg
ICAgICAgICAgICAgICAgICAgLS11bnJlc29sdmVkQ29sdW1uTnVtYmVyOwotICAgICAgICAgICAg
ICAgICAgICBzcGFubmluZ0luaXRpYWxXaWR0aCA9IHN0ZDo6bWF4KDAuMGYsIHNwYW5uaW5nSW5p
dGlhbFdpZHRoIC0gY29sdW1uSW5pdGlhbFdpZHRoc1tjb2x1bW5JbmRleF0tPnZhbHVlKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHVucmVzb2x2ZWRDb2x1bW5O
dW1iZXIpOwotICAgICAgICAgICAgICAgIGZvciAoYXV0byBjb2x1bW5JbmRleCA9IGNlbGwuc3Rh
cnRDb2x1bW4oKTsgY29sdW1uSW5kZXggPCBjZWxsLmVuZENvbHVtbigpOyArK2NvbHVtbkluZGV4
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW5Jbml0aWFsV2lkdGhzW2NvbHVtbklu
ZGV4XSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
ICAgICBjb2x1bW5Jbml0aWFsV2lkdGhzW2NvbHVtbkluZGV4XSA9IENvbHVtbkluaXRpYWxXaWR0
aCB7IHNwYW5uaW5nSW5pdGlhbFdpZHRoIC8gdW5yZXNvbHZlZENvbHVtbk51bWJlciwgZmFsc2Ug
fTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIC8vIDEuIENvbGxlY3QgdGhlIG5vbi1zcGFuaW5nIGluaXRpYWwgd2lkdGhzLgotICAgICAg
ICAgICAgICAgIGZsb2F0IGN1cnJlbnRTcGFubmluZ0luaXRpYWxXaWR0aCA9IDA7Ci0gICAgICAg
ICAgICAgICAgZm9yIChhdXRvIGNvbHVtbkluZGV4ID0gY2VsbC5zdGFydENvbHVtbigpOyBjb2x1
bW5JbmRleCA8IGNlbGwuZW5kQ29sdW1uKCk7ICsrY29sdW1uSW5kZXgpCi0gICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRTcGFubmluZ0luaXRpYWxXaWR0aCArPSBjb2x1bW5Jbml0aWFsV2lkdGhz
W2NvbHVtbkluZGV4XS0+dmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTcGFubmlu
Z0luaXRpYWxXaWR0aCA+PSBzcGFubmluZ0luaXRpYWxXaWR0aCkgewotICAgICAgICAgICAgICAg
ICAgICAvLyBUaGUgc3Bhbm5pbmcgY2VsbCBmaXRzIHRoZSBzcGFubmVkIGNvbHVtbnMganVzdCBm
aW5lLiBOb3RoaW5nIHRvIGRpc3RyaWJ1dGUuCisgICAgLy8gMi4gQ29sbGVjdCB0aGUgc3Bhbm5p
bmcgY2VsbHMuCisgICAgc3RydWN0IFNwYW5uaW5nQ2VsbCB7CisgICAgICAgIFNsb3RQb3NpdGlv
biBwb3NpdGlvbjsKKyAgICAgICAgTGF5b3V0VW5pdCB1bnJlc29sdmVkU3BhY2U7CisgICAgfTsK
KyAgICBWZWN0b3I8U3Bhbm5pbmdDZWxsPiBzcGFubmluZ0NlbGxzOworICAgIGZvciAoc2l6ZV90
IHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCByb3dzLnNpemUoKTsgKytyb3dJbmRleCkgeworICAg
ICAgICBmb3IgKHNpemVfdCBjb2x1bW5JbmRleCA9IDA7IGNvbHVtbkluZGV4IDwgY29sdW1ucy5z
aXplKCk7ICsrY29sdW1uSW5kZXgpIHsKKyAgICAgICAgICAgIGF1dG8mIHNsb3QgPSAqZ3JpZC5z
bG90KHsgY29sdW1uSW5kZXgsIHJvd0luZGV4IH0pOworICAgICAgICAgICAgaWYgKFNwYW5UeXBl
OjpoYXNTcGFuKHNsb3QpKQorICAgICAgICAgICAgICAgIHNwYW5uaW5nQ2VsbHMuYXBwZW5kKHsg
eyBjb2x1bW5JbmRleCwgcm93SW5kZXggfSwgc2xvdFNwYWNlKHNsb3QsIFNwYW5UeXBlOjppbmRl
eChjb2x1bW5JbmRleCwgcm93SW5kZXgpKSB9KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBX
ZSBuZWVkIHRoZXNlIHNwYW5uaW5nIGNlbGxzIGluIHRoZSBvcmRlciBvZiB0aGUgbnVtYmVyIG9m
IGNvbHVtbnMvcm93cyB0aGV5IHNwYW4gc28gdGhhdAorICAgIC8vIHdlIGNhbiByZXNvbHZlIG92
ZXJsYXBwaW5nIHNwYW5zIHN0YXJ0aW5nIHdpdGggdGhlIHNob3J0ZXIgb25lcyBlLmcuCisgICAg
Ly8gPHRkIGNvbHNwYW49ND4jYTwvdGQ+PHRkPiNiPC90ZD4KKyAgICAvLyA8dGQgY29sc3Bhbj0y
PiNjPC90ZD48dGQgY29sc3Bhbj0zPiNkPC90ZD4KKyAgICBzdGQ6OnNvcnQoc3Bhbm5pbmdDZWxs
cy5iZWdpbigpLCBzcGFubmluZ0NlbGxzLmVuZCgpLCBbJl0gKGF1dG8mIGEsIGF1dG8mIGIpIHsK
KyAgICAgICAgcmV0dXJuIFNwYW5UeXBlOjpzcGFuQ291bnQoZ3JpZC5zbG90KGEucG9zaXRpb24p
LT5jZWxsKCkpIDwgU3BhblR5cGU6OnNwYW5Db3VudChncmlkLnNsb3QoYi5wb3NpdGlvbiktPmNl
bGwoKSk7CisgICAgfSk7CisKKyAgICAvLyAzLiBEaXN0cmlidXRlIHRoZSBzcGFubmluZyBjZWxs
cycgbWltaW11bSBzcGFjZSBhY3Jvc3MgdGhlIGNvbHVtbnMvcm93cyB1c2luZyB0aGUgbm9uLXNw
YW5uaW5nIHNwYWNlcy4KKyAgICAvLyBlLmcuIFsgMSBdWyA1IF1bIDEgXQorICAgIC8vICAgICAg
WyAgICA5ICAgXVsgMSBdCisgICAgLy8gVGhlIGluaXRpYWwgd2lkdGhzIGFyZTogWyAyIF1bIDcg
XVsgMSBdCisgICAgZm9yIChhdXRvIHNwYW5uaW5nQ2VsbCA6IHNwYW5uaW5nQ2VsbHMpIHsKKyAg
ICAgICAgYXV0byYgY2VsbCA9IGdyaWQuc2xvdChzcGFubmluZ0NlbGwucG9zaXRpb24pLT5jZWxs
KCk7CisgICAgICAgIGZsb2F0IHVucmVzb2x2ZWRTcGFubmluZ1NwYWNlID0gc3Bhbm5pbmdDZWxs
LnVucmVzb2x2ZWRTcGFjZTsKKyAgICAgICAgaWYgKCFyZXNvbHZlZFNwYWNlc1tTcGFuVHlwZTo6
c3RhcnRTcGFuKGNlbGwpXSB8fCAhcmVzb2x2ZWRTcGFjZXNbU3BhblR5cGU6OmVuZFNwYW4oY2Vs
bCkgLSAxXSkgeworICAgICAgICAgICAgLy8gPHRkIGNvbHNwYW49ND4jYTwvdGQ+PHRkPiNiPC90
ZD4KKyAgICAgICAgICAgIC8vIDx0ZCBjb2xzcGFuPTI+I2M8L3RkPjx0ZCBjb2xzcGFuPTM+I2Q8
L3RkPgorICAgICAgICAgICAgLy8gVW5yZXNvbHZlZCBjb2x1bW5zIGFyZTogMSAyIDMgNAorICAg
ICAgICAgICAgLy8gMS4gVGFrZSBjb2xzcGFuPTIgKHNob3J0ZXN0IHNwYW4pIGFuZCByZXNvbHZl
IGNvbHVtbiAxIGFuZCAyCisgICAgICAgICAgICAvLyAyLiBUYWtlIGNvbHNwYW49MyBhbmQgcmVz
b2x2ZSBjb2x1bW4gMyBhbmQgNCAoNSBpcyByZXNvbHZlZCBiZWNhdXNlIGl0IGFscmVhZHkgaGFz
IGEgbm9uLXNwYW5uaW5nIGNlbGwpLgorICAgICAgICAgICAgLy8gMy4gY29sc3Bhbj00IG5lZWRz
IG5vIHJlc29sdmluZyBiZWNhdXNlIGFsbCB0aGUgc3Bhbm5lZCBjb2x1bW5zICgxIDIgMyA0KSBo
YXZlIGFscmVhZHkgYmVlbiByZXNvbHZlZC4KKyAgICAgICAgICAgIGF1dG8gdW5yZXNvbHZlZENv
bHVtbkNvdW50ID0gY2VsbC5jb2x1bW5TcGFuKCk7CisgICAgICAgICAgICBmb3IgKGF1dG8gc3Bh
bkluZGV4ID0gU3BhblR5cGU6OnN0YXJ0U3BhbihjZWxsKTsgc3BhbkluZGV4IDwgU3BhblR5cGU6
OmVuZFNwYW4oY2VsbCk7ICsrc3BhbkluZGV4KSB7CisgICAgICAgICAgICAgICAgaWYgKCFyZXNv
bHZlZFNwYWNlc1tzcGFuSW5kZXhdKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQodW5yZXNvbHZlZENvbHVtbkNvdW50KTsKKyAgICAgICAgICAg
ICAgICAtLXVucmVzb2x2ZWRDb2x1bW5Db3VudDsKKyAgICAgICAgICAgICAgICB1bnJlc29sdmVk
U3Bhbm5pbmdTcGFjZSA9IHN0ZDo6bWF4KDAuMGYsIHVucmVzb2x2ZWRTcGFubmluZ1NwYWNlIC0g
cmVzb2x2ZWRTcGFjZXNbc3BhbkluZGV4XS0+dmFsdWUpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgQVNTRVJUKHVucmVzb2x2ZWRDb2x1bW5Db3VudCk7CisgICAgICAgICAgICBmb3IgKGF1
dG8gc3BhbkluZGV4ID0gU3BhblR5cGU6OnN0YXJ0U3BhbihjZWxsKTsgc3BhbkluZGV4IDwgU3Bh
blR5cGU6OmVuZFNwYW4oY2VsbCk7ICsrc3BhbkluZGV4KSB7CisgICAgICAgICAgICAgICAgaWYg
KHJlc29sdmVkU3BhY2VzW3NwYW5JbmRleF0pCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyAyLiBEaXN0cmlidXRlIHRo
ZSBleHRyYSB3aWR0aCBhbW9uZyB0aGUgc3Bhbm5lZCBjb2x1bW5zIGJhc2VkIG9uIHRoZSBpbml0
aWFsIGNvbHVtbiB3aWR0aC4KLSAgICAgICAgICAgICAgICAvLyBlLmcuIHNwYW5uaW5nIGluaXRp
YWwgd2lkdGg6IFsgICA5ICAgXS4gQ3VycmVudCBpbml0aWFsIHdpZHRocyBmb3IgdGhlIHNwYW5u
ZWQgY29sdW1uczogWyAxIF0gWyAyIF0KLSAgICAgICAgICAgICAgICAvLyBOZXcgaW5pdGlhbCB3
aWR0aHM6IFsgMyBdIFsgNiBdLgotICAgICAgICAgICAgICAgIGF1dG8gc3BhY2VUb0Rpc3RyaWJ1
dGUgPSBzdGQ6Om1heCgwLjBmLCBzcGFubmluZ0luaXRpYWxXaWR0aCAtIChjZWxsLmNvbHVtblNw
YW4oKSAtIDEpICogZ3JpZC5ob3Jpem9udGFsU3BhY2luZygpIC0gY3VycmVudFNwYW5uaW5nSW5p
dGlhbFdpZHRoKTsKLSAgICAgICAgICAgICAgICBpZiAoc3BhY2VUb0Rpc3RyaWJ1dGUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgZm9yIChhdXRvIGNvbHVtbkluZGV4ID0gY2VsbC5zdGFydENvbHVt
bigpOyBjb2x1bW5JbmRleCA8IGNlbGwuZW5kQ29sdW1uKCk7ICsrY29sdW1uSW5kZXgpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBjb2x1bW5Jbml0aWFsV2lkdGhzW2NvbHVtbkluZGV4XS0+dmFs
dWUgKz0gc3BhY2VUb0Rpc3RyaWJ1dGUgLyBjdXJyZW50U3Bhbm5pbmdJbml0aWFsV2lkdGggKiBj
b2x1bW5Jbml0aWFsV2lkdGhzW2NvbHVtbkluZGV4XS0+dmFsdWU7Ci0gICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJlc29sdmVkU3BhY2VzW3NwYW5JbmRleF0gPSBSZXNvbHZlZFNw
YWNlIHsgdW5yZXNvbHZlZFNwYW5uaW5nU3BhY2UgLyB1bnJlc29sdmVkQ29sdW1uQ291bnQsIGZh
bHNlIH07CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyAx
LiBDb2xsZWN0IHRoZSBub24tc3BhbmluZyByZXNvbHZlZCBzcGFjZXMuCisgICAgICAgICAgICAv
LyAyLiBEaXN0cmlidXRlIHRoZSBleHRyYSBzcGFjZSBhbW9uZyB0aGUgc3Bhbm5lZCBjb2x1bW5z
L3Jvd3MgYmFzZWQgb24gdGhlIHJlc29sdmVkIHNwYWNlIHZhbHVlcy4KKyAgICAgICAgICAgIC8v
IGUuZy4gc3Bhbm5pbmcgd2lkdGg6IFsgICA5ICAgXS4gUmVzb2x2ZWQgd2lkdGhzIGZvciB0aGUg
c3Bhbm5lZCBjb2x1bW5zOiBbIDEgXSBbIDIgXQorICAgICAgICAgICAgLy8gTmV3IHJlc29sdmVk
IHdpZHRoczogWyAzIF0gWyA2IF0uCisgICAgICAgICAgICBmbG9hdCByZXNvbHZlZFNwYWNlID0g
MDsKKyAgICAgICAgICAgIGZvciAoYXV0byBjb2x1bW5JbmRleCA9IGNlbGwuc3RhcnRDb2x1bW4o
KTsgY29sdW1uSW5kZXggPCBjZWxsLmVuZENvbHVtbigpOyArK2NvbHVtbkluZGV4KQorICAgICAg
ICAgICAgICAgIHJlc29sdmVkU3BhY2UgKz0gcmVzb2x2ZWRTcGFjZXNbY29sdW1uSW5kZXhdLT52
YWx1ZTsKKyAgICAgICAgICAgIGlmIChyZXNvbHZlZFNwYWNlID49IHVucmVzb2x2ZWRTcGFubmlu
Z1NwYWNlKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIHNwYW5uaW5nIGNlbGwgZml0cyB0aGUg
c3Bhbm5lZCBjb2x1bW5zL3Jvd3MganVzdCBmaW5lLiBOb3RoaW5nIHRvIGRpc3RyaWJ1dGUuCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhdXRv
IHNwYW5uaW5nU3BhY2VUb0Rpc3RyaWJ1dGUgPSBzdGQ6Om1heCgwLjBmLCB1bnJlc29sdmVkU3Bh
bm5pbmdTcGFjZSAtIFNwYW5UeXBlOjpzcGFjaW5nKGdyaWQsIGNlbGwpIC0gcmVzb2x2ZWRTcGFj
ZSk7CisgICAgICAgICAgICBpZiAoc3Bhbm5pbmdTcGFjZVRvRGlzdHJpYnV0ZSkgeworICAgICAg
ICAgICAgICAgIGZvciAoYXV0byBzcGFuSW5kZXggPSBTcGFuVHlwZTo6c3RhcnRTcGFuKGNlbGwp
OyBzcGFuSW5kZXggPCBTcGFuVHlwZTo6ZW5kU3BhbihjZWxsKTsgKytzcGFuSW5kZXgpCisgICAg
ICAgICAgICAgICAgICAgIHJlc29sdmVkU3BhY2VzW3NwYW5JbmRleF0tPnZhbHVlICs9IHNwYW5u
aW5nU3BhY2VUb0Rpc3RyaWJ1dGUgLyByZXNvbHZlZFNwYWNlICogcmVzb2x2ZWRTcGFjZXNbc3Bh
bkluZGV4XS0+dmFsdWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgLy8gNC4g
RGlzdHJpYnV0ZSB0aGUgZXh0cmEgc3BhY2UgdXNpbmcgdGhlIGZpbmFsIGluaXRpYWwgd2lkdGhz
LgorICAgIH0KKyAgICAvLyA0LiBEaXN0cmlidXRlIHRoZSBleHRyYSBzcGFjZSB1c2luZyB0aGUg
ZmluYWwgcmVzb2x2ZWQgd2lkdGhzLgogI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgICAgIC8vIFdl
IGhhdmUgdG8gaGF2ZSBhbGwgdGhlIGNvbHVtbnMgcmVzb2x2ZWQgYXQgdGhpcyBwb2ludCB3aXRo
IHZhbGlkIGluaXRpYWwgd2lkdGhzLgotICAgICAgICBmb3IgKGF1dG8mIGNvbHVtbkluaXRpYWxX
aWR0aCA6IGNvbHVtbkluaXRpYWxXaWR0aHMpCi0gICAgICAgICAgICBBU1NFUlQoY29sdW1uSW5p
dGlhbFdpZHRoKTsKKyAgICAvLyBXZSBoYXZlIHRvIGhhdmUgYWxsIHRoZSBzcGFjZXMgcmVzb2x2
ZWQgYXQgdGhpcyBwb2ludC4KKyAgICBmb3IgKGF1dG8mIHJlc29sdmVkU3BhY2UgOiByZXNvbHZl
ZFNwYWNlcykKKyAgICAgICAgQVNTRVJUKHJlc29sdmVkU3BhY2UpOwogI2VuZGlmCi0gICAgICAg
IC8vIEZpeGVkIHdpZHRoIGNvbHVtbnMgZG9uJ3QgcGFydGljaXBhdGUgaW4gYXZhaWxhYmxlIHNw
YWNlIGRpc3RyaWJ1dGlvbi4KLSAgICAgICAgLy8gVW5sZXNzIHRoZXJlIGFyZSBubyBmbGV4aW5n
IGNvbHVtbiBhdCBhbGwsIHRoZW4gdGhleSBzdGFydCBmbGV4aW5nIGFzIGlmIHRoZXkgd2VyZSBu
b3QgZml4ZWQgYXQgYWxsLgotICAgICAgICBmbG9hdCBhZGp1c3RhYmxlZEhvcml6b250YWxTcGFj
ZSA9IDA7Ci0gICAgICAgIGZvciAoYXV0byYgY29sdW1uSW5pdGlhbFdpZHRoIDogY29sdW1uSW5p
dGlhbFdpZHRocykgewotICAgICAgICAgICAgaWYgKGNvbHVtbkluaXRpYWxXaWR0aC0+aXNGaXhl
ZCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGFkanVzdGFibGVkSG9y
aXpvbnRhbFNwYWNlICs9IGNvbHVtbkluaXRpYWxXaWR0aC0+dmFsdWU7Ci0gICAgICAgIH0KKyAg
ICAvLyBGaXhlZCBzaXplIGNlbGxzIGRvbid0IHBhcnRpY2lwYXRlIGluIGF2YWlsYWJsZSBzcGFj
ZSBkaXN0cmlidXRpb24uCisgICAgZmxvYXQgYWRqdXN0YWJsZWRTcGFjZSA9IDA7CisgICAgZm9y
IChhdXRvJiByZXNvbHZlZFNwYWNlIDogcmVzb2x2ZWRTcGFjZXMpIHsKKyAgICAgICAgaWYgKHJl
c29sdmVkU3BhY2UtPmlzRml4ZWQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYWRq
dXN0YWJsZWRTcGFjZSArPSByZXNvbHZlZFNwYWNlLT52YWx1ZTsKKyAgICB9CiAKKyAgICBEaXN0
cmlidXRlZFNwYWNlcyBkaXN0cmlidXRlZFNwYWNlcyhyZXNvbHZlZFNwYWNlcy5zaXplKCkpOwor
ICAgIC8vIERpc3RyaWJ1dGUgdGhlIGV4dHJhIHNwYWNlIGJhc2VkIG9uIHRoZSByZXNvbHZlZCBz
cGFjZXMuCisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IHJlc29sdmVkU3BhY2Vz
LnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBhdXRvJiByZXNvbHZlZFNwYWNlID0gcmVzb2x2
ZWRTcGFjZXNbaW5kZXhdOworICAgICAgICBhdXRvIGhhc0V4dHJhU3BhY2VUb0Rpc3RyaWJ1dGUg
PSBzcGFjZVRvRGlzdHJpYnV0ZSAmJiAhcmVzb2x2ZWRTcGFjZS0+aXNGaXhlZDsKKyAgICAgICAg
YXV0byByZXNvbHZlZFZhbHVlID0gcmVzb2x2ZWRTcGFjZS0+dmFsdWU7CisgICAgICAgIGRpc3Ry
aWJ1dGVkU3BhY2VzW2luZGV4XSA9IGhhc0V4dHJhU3BhY2VUb0Rpc3RyaWJ1dGUgPyByZXNvbHZl
ZFZhbHVlICsgKHNwYWNlVG9EaXN0cmlidXRlIC8gYWRqdXN0YWJsZWRTcGFjZSAqIHJlc29sdmVk
VmFsdWUpIDogcmVzb2x2ZWRWYWx1ZTsKKyAgICB9CisgICAgcmV0dXJuIGRpc3RyaWJ1dGVkU3Bh
Y2VzOworfQorCit2b2lkIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVBbmREaXN0cmli
dXRlRXh0cmFIb3Jpem9udGFsU3BhY2UoTGF5b3V0VW5pdCBhdmFpbGFibGVIb3Jpem9udGFsU3Bh
Y2UpCit7CisgICAgYXV0byYgZ3JpZCA9IGZvcm1hdHRpbmdTdGF0ZSgpLnRhYmxlR3JpZCgpOwor
ICAgIGF1dG8mIGNvbHVtbnMgPSBncmlkLmNvbHVtbnMoKTsKKyAgICBhdXRvIHRhYmxlV2lkdGhD
b25zdHJhaW50cyA9ICpncmlkLndpZHRoQ29uc3RyYWludHMoKTsKKworICAgIGVudW0gY2xhc3Mg
Q29sdW1uV2lkdGhCYWxhbmNpbmdCYXNlIHsgTWluaW11bVdpZHRoLCBNYXhpbXVtV2lkdGggfTsK
KyAgICBhdXRvIGNvbXB1dGVDb2x1bW5XaWR0aHMgPSBbJl0gKGF1dG8gY29sdW1uV2lkdGhCYWxh
bmNpbmdCYXNlLCBhdXRvIGV4dHJhSG9yaXpvbnRhbFNwYWNlKSB7CisgICAgICAgIGF1dG8gZGlz
dHJpYnV0ZWRTcGFjZXMgPSBkaXN0cmlidXRlQXZhaWxhYmxlU3BhY2U8Q29sdW1uU3Bhbj4oZ3Jp
ZCwgZXh0cmFIb3Jpem9udGFsU3BhY2UsIFsmXSAoY29uc3QgVGFibGVHcmlkOjpTbG90JiBzbG90
LCBzaXplX3QgY29sdW1uSW5kZXgpIHsKKyAgICAgICAgICAgIGF1dG8mIGNvbHVtbiA9IGNvbHVt
bnMubGlzdCgpW2NvbHVtbkluZGV4XTsKKyAgICAgICAgICAgIGF1dG8gY29sdW1uRml4ZWRXaWR0
aCA9IGNvbHVtbi5ib3goKSA/IGNvbHVtbi5ib3goKS0+Y29sdW1uV2lkdGgoKSA6IFdURjo6bnVs
bG9wdDsKKyAgICAgICAgICAgIGF1dG8gc2xvdFdpZHRoID0gY29sdW1uV2lkdGhCYWxhbmNpbmdC
YXNlID09IENvbHVtbldpZHRoQmFsYW5jaW5nQmFzZTo6TWluaW11bVdpZHRoID8gc2xvdC53aWR0
aENvbnN0cmFpbnRzKCkubWluaW11bSA6IHNsb3Qud2lkdGhDb25zdHJhaW50cygpLm1heGltdW07
CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYXgoc2xvdFdpZHRoLCBjb2x1bW5GaXhlZFdpZHRo
LnZhbHVlT3IoMF9sdSkpOworICAgICAgICB9KTsKICAgICAgICAgLy8gU2V0IGZpbmlhbCBob3Jp
em9udGFsIHBvc2l0aW9uIGFuZCB3aWR0aC4KLSAgICAgICAgZmxvYXQgY29sdW1uTG9naWNhbExl
ZnQgPSBncmlkLmhvcml6b250YWxTcGFjaW5nKCk7CisgICAgICAgIGF1dG8gY29sdW1uTG9naWNh
bExlZnQgPSBncmlkLmhvcml6b250YWxTcGFjaW5nKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGNv
bHVtbkluZGV4ID0gMDsgY29sdW1uSW5kZXggPCBjb2x1bW5zLnNpemUoKTsgKytjb2x1bW5JbmRl
eCkgewogICAgICAgICAgICAgYXV0byYgY29sdW1uID0gY29sdW1ucy5saXN0KClbY29sdW1uSW5k
ZXhdOwotICAgICAgICAgICAgYXV0byBpbml0aWFsV2lkdGggPSBjb2x1bW5Jbml0aWFsV2lkdGhz
W2NvbHVtbkluZGV4XS0+dmFsdWU7Ci0gICAgICAgICAgICBhdXRvIGNvbHVtbldpZHRoID0gaW5p
dGlhbFdpZHRoOworICAgICAgICAgICAgYXV0byBjb2x1bW5XaWR0aCA9IExheW91dFVuaXQgeyBk
aXN0cmlidXRlZFNwYWNlc1tjb2x1bW5JbmRleF0gfTsKIAotICAgICAgICAgICAgaWYgKGV4dHJh
SG9yaXpvbnRhbFNwYWNlICYmICFjb2x1bW5Jbml0aWFsV2lkdGhzW2NvbHVtbkluZGV4XS0+aXNG
aXhlZCkgewotICAgICAgICAgICAgICAgIGF1dG8gY29sdW1uRXh0cmFTcGFjZSA9IGV4dHJhSG9y
aXpvbnRhbFNwYWNlIC8gYWRqdXN0YWJsZWRIb3Jpem9udGFsU3BhY2UgKiBpbml0aWFsV2lkdGg7
Ci0gICAgICAgICAgICAgICAgY29sdW1uV2lkdGggPSBpbml0aWFsV2lkdGggKyBjb2x1bW5FeHRy
YVNwYWNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29sdW1uLnNldExvZ2ljYWxMZWZ0
KExheW91dFVuaXQge2NvbHVtbkxvZ2ljYWxMZWZ0IH0pOwotICAgICAgICAgICAgY29sdW1uLnNl
dExvZ2ljYWxXaWR0aChMYXlvdXRVbml0IHsgY29sdW1uV2lkdGggfSk7CisgICAgICAgICAgICBj
b2x1bW4uc2V0TG9naWNhbExlZnQoY29sdW1uTG9naWNhbExlZnQpOworICAgICAgICAgICAgY29s
dW1uLnNldExvZ2ljYWxXaWR0aChjb2x1bW5XaWR0aCk7CiAgICAgICAgICAgICBjb2x1bW5Mb2dp
Y2FsTGVmdCArPSBjb2x1bW5XaWR0aCArIGdyaWQuaG9yaXpvbnRhbFNwYWNpbmcoKTsKICAgICAg
ICAgfQogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3Jt
YXR0aW5nL1RhYmxlR3JpZC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L3RhYmxlZm9ybWF0dGlu
Zy9UYWJsZUdyaWQuaAppbmRleCBiODFlN2UzNWM2MDVjZWI4NGMxNGNjYTA2NjQyMGI4MTJmZDVk
NWEyLi4wOTczMGQxOWE1NGI3ZmYxYzg1NDllMmE1MmI3MmIwOTFkYmI4ZjdiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlR3JpZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVHcmlkLmgKQEAgLTIx
NCw2ICsyMTQsNyBAQCBwdWJsaWM6CiAgICAgQ2VsbHMmIGNlbGxzKCkgeyByZXR1cm4gbV9jZWxs
czsgfQogCiAgICAgU2xvdCogc2xvdChTbG90UG9zaXRpb24pOworICAgIGNvbnN0IFNsb3QqIHNs
b3QoU2xvdFBvc2l0aW9uIHBvc2l0aW9uKSBjb25zdCB7IHJldHVybiBtX3Nsb3RNYXAuZ2V0KHBv
c2l0aW9uKTsgfQogICAgIGJvb2wgaXNTcGFubmVkKFNsb3RQb3NpdGlvbik7CiAKIHByaXZhdGU6
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>