<?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>227062</bug_id>
          
          <creation_ts>2021-06-16 02:52:56 -0700</creation_ts>
          <short_desc>[css-scroll-snap] Simplify snap point selection helpers</short_desc>
          <delta_ts>2021-06-25 02:03:58 -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>Scrolling</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>
          
          <blocked>223021</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>jamesr</cc>
    
    <cc>luiz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1770133</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-06-16 02:52:56 -0700</bug_when>
    <thetext>We can combine the two snap point selection helpers indicesOfNearestSnapOffsets and searchForPotentialSnapPoints, reducing the amount of times that we walk the snap point list and making it more obvious what the return values of the arguments are. In addition, we can have this method return the geometric next and previous snap offsets if they exist, rather than two offsets that might both be greater or lesser than the target. This is useful because parts of the specification refer to these two values when implementing certain features. This makes the code a lot easier to read and very slightly more efficient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770134</commentid>
    <comment_count>1</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-06-16 02:59:17 -0700</bug_when>
    <thetext>(In reply to Martin Robinson from comment #0)
&gt; We can combine the two snap point selection helpers
&gt; indicesOfNearestSnapOffsets and searchForPotentialSnapPoints
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Here I meant to write findFirstSnapStopOffsetBetweenOriginAndDestination.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770136</commentid>
    <comment_count>2</comment_count>
      <attachid>431531</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-06-16 03:03:52 -0700</bug_when>
    <thetext>Created attachment 431531
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770146</commentid>
    <comment_count>3</comment_count>
      <attachid>431535</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-06-16 04:23:21 -0700</bug_when>
    <thetext>Created attachment 431535
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771885</commentid>
    <comment_count>4</comment_count>
      <attachid>431535</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2021-06-23 02:27:57 -0700</bug_when>
    <thetext>Comment on attachment 431535
Patch

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

&gt; Source/WebCore/page/scrolling/ScrollSnapOffsetsInfo.cpp:109
&gt; +

It seems this neither use viewportLength nor isNearEnoughToOffsetForProximity, so it can keep it at the place of the original &quot;if (originalOffsetForDirectionalSnapping)&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771890</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-23 02:53:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/79657705&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771923</commentid>
    <comment_count>6</comment_count>
      <attachid>432041</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-06-23 08:17:52 -0700</bug_when>
    <thetext>Created attachment 432041
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772373</commentid>
    <comment_count>7</comment_count>
      <attachid>432041</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-06-24 11:11:21 -0700</bug_when>
    <thetext>Comment on attachment 432041
Patch

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

&gt; Source/WebCore/ChangeLog:16
&gt; +        most snap containers have a small number of snap points. Thus, it&apos;s unlikely that this

&quot;most snap containers have a small number of snap points&quot;. That&apos;s true until it isn&apos;t! What about a big table where every cell is a snap point?

&gt; Source/WebCore/page/scrolling/ScrollSnapOffsetsInfo.cpp:59
&gt; +    // offset than the previously selected snap stop. We always want to stop at the closest snap stop to the original offset.

Clearer as &quot;We always want to stop at the snap stop closest to the original offset&quot;

&gt; Source/WebCore/page/scrolling/ScrollSnapOffsetsInfo.cpp:134
&gt; +        if (*originalOffsetForDirectionalSnapping &lt; scrollDestinationOffset &amp;&amp; previous &amp;&amp; (*previous).first &lt;= *originalOffsetForDirectionalSnapping)
&gt; +            previous.reset();
&gt; +        if (*originalOffsetForDirectionalSnapping &gt; scrollDestinationOffset &amp;&amp; next &amp;&amp; (*next).first &gt;= *originalOffsetForDirectionalSnapping)
&gt; +            next.reset();

Maybe put *originalOffsetForDirectionalSnapping in a local variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772569</commentid>
    <comment_count>8</comment_count>
      <attachid>432244</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-06-25 00:24:22 -0700</bug_when>
    <thetext>Created attachment 432244
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772570</commentid>
    <comment_count>9</comment_count>
      <attachid>432244</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2021-06-25 00:27:24 -0700</bug_when>
    <thetext>Comment on attachment 432244
Patch

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

&gt; Source/WebCore/ChangeLog:18
&gt; +        of snap points and performance does not seem to be changed. In addition, a future change should mean

of of</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772571</commentid>
    <comment_count>10</comment_count>
      <attachid>432245</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-06-25 00:45:24 -0700</bug_when>
    <thetext>Created attachment 432245
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772572</commentid>
    <comment_count>11</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-06-25 00:49:50 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #7)
&gt; Comment on attachment 432041 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=432041&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:16
&gt; &gt; +        most snap containers have a small number of snap points. Thus, it&apos;s unlikely that this
&gt; 
&gt; &quot;most snap containers have a small number of snap points&quot;. That&apos;s true until
&gt; it isn&apos;t! What about a big table where every cell is a snap point?

This is a good point. I did some testing with large 500 cell tables and didn&apos;t notice any performance degradation. I think the main reason is that for cases where you are scrolling around like this, we were doing a linear search through the scroll stops any way. In addition, I think there&apos;s a lot of performance enhancement opportunities to be had by calling this function less (such as only after an animation completes).

&gt; &gt; Source/WebCore/page/scrolling/ScrollSnapOffsetsInfo.cpp:59
&gt; &gt; +    // offset than the previously selected snap stop. We always want to stop at the closest snap stop to the original offset.
&gt; 
&gt; Clearer as &quot;We always want to stop at the snap stop closest to the original
&gt; offset&quot;

Fixed!

&gt; &gt; Source/WebCore/page/scrolling/ScrollSnapOffsetsInfo.cpp:134
&gt; &gt; +        if (*originalOffsetForDirectionalSnapping &lt; scrollDestinationOffset &amp;&amp; previous &amp;&amp; (*previous).first &lt;= *originalOffsetForDirectionalSnapping)
&gt; &gt; +            previous.reset();
&gt; &gt; +        if (*originalOffsetForDirectionalSnapping &gt; scrollDestinationOffset &amp;&amp; next &amp;&amp; (*next).first &gt;= *originalOffsetForDirectionalSnapping)
&gt; &gt; +            next.reset();
&gt; 
&gt; Maybe put *originalOffsetForDirectionalSnapping in a local variable.

Sure. This new version does this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772573</commentid>
    <comment_count>12</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-06-25 00:50:01 -0700</bug_when>
    <thetext>(In reply to Frédéric Wang (:fredw) from comment #9)
&gt; Comment on attachment 432244 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=432244&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:18
&gt; &gt; +        of snap points and performance does not seem to be changed. In addition, a future change should mean
&gt; 
&gt; of of

I&apos;ve fixed this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772589</commentid>
    <comment_count>13</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-25 02:03:56 -0700</bug_when>
    <thetext>Committed r279272 (239151@main): &lt;https://commits.webkit.org/239151@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 432245.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431531</attachid>
            <date>2021-06-16 03:03:52 -0700</date>
            <delta_ts>2021-06-16 04:23:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227062-20210616120350.patch</filename>
            <type>text/plain</type>
            <size>11721</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4OTI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTcyMWE3NDAwYjYzZDA5
NDFhNjkxMjQ5NGU5NzY1ODNmZDg3M2IzNy4uOTkxMTg4YzY5OTAxYWFlM2I3OTYwNGFiZWQ3M2Y4
MmI2ZWM1MjY3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDIxLTA2LTE2ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KKworICAgICAgICBbY3NzLXNjcm9s
bC1zbmFwXSBTaW1wbGlmeSBzbmFwIHBvaW50IHNlbGVjdGlvbiBoZWxwZXJzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwNjIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb21iaW5lIGluZGljZXNPZk5l
YXJlc3RTbmFwT2Zmc2V0cyBhbmQgZmluZEZpcnN0U25hcFN0b3BPZmZzZXRCZXR3ZWVuT3JpZ2lu
QW5kRGVzdGluYXRpb24KKyAgICAgICAgYW5kIGhhdmUgdGhlIGhlbHBlciByZXR1cm4gdGhlIGdl
b21ldHJpYyBwcmV2aW91cyBhbmQgbmV4dCBzbmFwIHBvaW50cy4gVGhpcyBtYWtlcyB0aGUKKyAg
ICAgICAgY29kZSBhIGJpdCBlYXNpZXIgdG8gcmVhZCwgc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQs
IGFuZCBwcmVwYXJlcyBmb3IgbG9va2luZyBhdAorICAgICAgICB0aGUgZ2VvbWV0cmljIHByZXZp
b3VzIGFuZCBuZXh0IHNuYXAgcG9pbnRzIGZvciBjZXJ0YWluIHVwY29taW5nIENTUyBTY3JvbGwg
U25hcCBmZWF0dXJlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgc2hvdWxkIG5vdCBj
aGFuZ2UgYmVoYXZpb3IgaW4gYW55IHdheS4KKworICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbFNuYXBPZmZzZXRzSW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZWFyY2hGb3JQb3Rl
bnRpYWxTbmFwUG9pbnRzKTogQWRkZWQgdGhpcyBuZXcgaGVscGVyIHdoaWNoIGlzIHRoZSBjb21i
aW5hdGlvbgorICAgICAgICBvZiBpbmRpY2VzT2ZOZWFyZXN0U25hcE9mZnNldHMgYW5kIGZpbmRG
aXJzdFNuYXBTdG9wT2Zmc2V0QmV0d2Vlbk9yaWdpbkFuZERlc3RpbmF0aW9uLgorICAgICAgICAo
V2ViQ29yZTo6Y2xvc2VzdFNuYXBPZmZzZXRXaXRoSW5mb0FuZEF4aXMpOiBVc2UgdGhlIG5ldyBo
ZWxwZXIuCisKIDIwMjEtMDYtMTYgIFBlciBBcm5lICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgVXBkYXRlIE1lZGlhIEFjY2Vzc2liaWxpdHkgcHJlZmVyZW5jZXMgaW4gdGhlIFdlYkNv
bnRlbnQgcHJvY2VzcyBmcm9tIHRoZSBVSSBwcm9jZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcAppbmRleCA3Yjg3
NWI5ZGFmOWVjODNiNmQ5N2Q1M2I1Y2Q4ZWQ2ZDk5MjFlYWMxLi5iZTI3MDJjYjA0N2MwNDI1YzY1
ZWQyYzI4MjcxMzJlZmNiZjNlMDZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHAKQEAgLTQyLDczICs0Miw1NyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBMYXlvdXRUeXBl
Pgotc3RhdGljIHN0ZDo6cGFpcjxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiwgc3RkOjpvcHRpb25h
bDx1bnNpZ25lZD4+IGluZGljZXNPZk5lYXJlc3RTbmFwT2Zmc2V0cyhMYXlvdXRUeXBlIG9mZnNl
dCwgY29uc3QgVmVjdG9yPFNuYXBPZmZzZXQ8TGF5b3V0VHlwZT4+JiBzbmFwT2Zmc2V0cykKLXsK
LSAgICB1bnNpZ25lZCBsb3dlckluZGV4ID0gMDsKLSAgICB1bnNpZ25lZCB1cHBlckluZGV4ID0g
c25hcE9mZnNldHMuc2l6ZSgpIC0gMTsKLSAgICB3aGlsZSAobG93ZXJJbmRleCA8IHVwcGVySW5k
ZXggLSAxKSB7Ci0gICAgICAgIGludCBtaWRkbGVJbmRleCA9IChsb3dlckluZGV4ICsgdXBwZXJJ
bmRleCkgLyAyOwotICAgICAgICBhdXRvIG1pZGRsZU9mZnNldCA9IHNuYXBPZmZzZXRzW21pZGRs
ZUluZGV4XS5vZmZzZXQ7Ci0gICAgICAgIGlmIChvZmZzZXQgPT0gbWlkZGxlT2Zmc2V0KSB7Ci0g
ICAgICAgICAgICB1cHBlckluZGV4ID0gbWlkZGxlSW5kZXg7Ci0gICAgICAgICAgICBsb3dlcklu
ZGV4ID0gbWlkZGxlSW5kZXg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChvZmZzZXQgPiBtaWRkbGVPZmZzZXQpCi0gICAgICAgICAgICBsb3dlckluZGV4ID0g
bWlkZGxlSW5kZXg7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHVwcGVySW5kZXggPSBtaWRk
bGVJbmRleDsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobG93ZXJJbmRleCwg
dXBwZXJJbmRleCk7Ci19Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVW5pdFR5cGU+CitzdHJ1Y3QgUG90
ZW50aWFsU25hcFBvaW50U2VhcmNoUmVzdWx0IHsKKyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6cGFp
cjxVbml0VHlwZSwgdW5zaWduZWQ+PiBwcmV2aW91czsKKyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6
cGFpcjxVbml0VHlwZSwgdW5zaWduZWQ+PiBuZXh0OworICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjpw
YWlyPFVuaXRUeXBlLCB1bnNpZ25lZD4+IHNuYXBTdG9wOworfTsKIAotdGVtcGxhdGUgPHR5cGVu
YW1lIExheW91dFR5cGU+Ci1zdGF0aWMgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gZmluZEZpcnN0
U25hcFN0b3BPZmZzZXRCZXR3ZWVuT3JpZ2luQW5kRGVzdGluYXRpb24oY29uc3QgVmVjdG9yPFNu
YXBPZmZzZXQ8TGF5b3V0VHlwZT4+JiBzbmFwT2Zmc2V0cywgTGF5b3V0VHlwZSBzY3JvbGxPcmln
aW5PZmZzZXQsIExheW91dFR5cGUgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQpCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgSW5mb1R5cGUsIHR5cGVuYW1lIFVuaXRUeXBlPgorc3RhdGljIFBvdGVudGlhbFNu
YXBQb2ludFNlYXJjaFJlc3VsdDxVbml0VHlwZT4gc2VhcmNoRm9yUG90ZW50aWFsU25hcFBvaW50
cyhjb25zdCBJbmZvVHlwZSYgaW5mbywgU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIFVuaXRUeXBlIGRl
c3RpbmF0aW9uT2Zmc2V0LCBzdGQ6Om9wdGlvbmFsPFVuaXRUeXBlPiBvcmlnaW5hbE9mZnNldCkK
IHsKLSAgICBMYXlvdXRUeXBlIGRpZmZlcmVuY2UgPSBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCAt
IHNjcm9sbE9yaWdpbk9mZnNldDsKLSAgICBpZiAoIWRpZmZlcmVuY2UpCi0gICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7Ci0KLSAgICB1bnNpZ25lZCBzZWFyY2hTdGFydE9mZnNldCA9IDA7Ci0g
ICAgc2l6ZV90IGl0ZXJhdGlvbiA9IDE7Ci0gICAgaWYgKGRpZmZlcmVuY2UgPCAwKSB7Ci0gICAg
ICAgIHNlYXJjaFN0YXJ0T2Zmc2V0ID0gc25hcE9mZnNldHMuc2l6ZSgpIC0gMTsKLSAgICAgICAg
aXRlcmF0aW9uID0gLTE7Ci0gICAgfQotCi0gICAgYXV0byBpc1Bhc3QgPSBbZGlmZmVyZW5jZV0o
TGF5b3V0VHlwZSBtYXJrLCBMYXlvdXRUeXBlIGNhbmRpZGF0ZSkgewotICAgICAgICByZXR1cm4g
KGRpZmZlcmVuY2UgPiAwICYmIGNhbmRpZGF0ZSA+IG1hcmspIHx8IChkaWZmZXJlbmNlIDwgMCAm
JiBjYW5kaWRhdGUgPCBtYXJrKTsKKyAgICBjb25zdCBhdXRvJiBzbmFwT2Zmc2V0cyA9IGluZm8u
b2Zmc2V0c0ZvckF4aXMoYXhpcyk7CisgICAgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8VW5pdFR5
cGUsIHVuc2lnbmVkPj4gcHJldmlvdXMsIG5leHQsIGV4YWN0LCBzbmFwU3RvcDsKKworICAgIC8v
IEEgcGFydGljdWxhciBzbmFwIHN0b3AgaXMgYmV0dGVyIGlmIGl0J3MgYmV0d2VlbiB0aGUgb3Jp
Z2luYWwgb2Zmc2V0IGFuZCBkZXN0aW5hdGlvbiBvZmZzZXQgYW5kIGNsb3NlciBvcmlnaW5hbAor
ICAgIC8vIG9mZnNldCB0aGFuIHRoZSBwcmV2aW91c2x5IHNlbGVjdGVkIHNuYXAgc3RvcC4gV2Ug
YWx3YXlzIHdhbnQgdG8gc3RvcCBhdCB0aGUgY2xvc2VzdCBzbmFwIHN0b3AgdG8gdGhlIG9yaWdp
bmFsIG9mZnNldC4KKyAgICBhdXRvIGlzQmV0dGVyU25hcFN0b3AgPSBbJl0oVW5pdFR5cGUgY2Fu
ZGlkYXRlKSB7CisgICAgICAgIGlmICghb3JpZ2luYWxPZmZzZXQpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGF1dG8gb3JpZ2luYWwgPSAqb3JpZ2luYWxPZmZzZXQ7CisgICAg
ICAgIGlmIChjYW5kaWRhdGUgPD0gc3RkOjptaW4oZGVzdGluYXRpb25PZmZzZXQsIG9yaWdpbmFs
KSB8fCBjYW5kaWRhdGUgPj0gc3RkOjptYXgoZGVzdGluYXRpb25PZmZzZXQsIG9yaWdpbmFsKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuICFzbmFwU3RvcCB8fCBz
dGQ6OmFicyhmbG9hdCB7IGNhbmRpZGF0ZSAtIG9yaWdpbmFsIH0pIDwgc3RkOjphYnMoZmxvYXQg
eyAoKnNuYXBTdG9wKS5maXJzdCAtIG9yaWdpbmFsIH0pOwogICAgIH07CiAKLSAgICBmb3IgKGlu
dCBpID0gc2VhcmNoU3RhcnRPZmZzZXQ7IGkgPj0gMCAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KGkp
IDwgc25hcE9mZnNldHMuc2l6ZSgpOyBpICs9IGl0ZXJhdGlvbikgewotICAgICAgICBhdXRvIG9m
ZnNldCA9IHNuYXBPZmZzZXRzW2ldLm9mZnNldDsKLSAgICAgICAgaWYgKGlzUGFzdChzY3JvbGxE
ZXN0aW5hdGlvbk9mZnNldCwgb2Zmc2V0KSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBp
ZiAoc25hcE9mZnNldHNbaV0uc3RvcCAhPSBTY3JvbGxTbmFwU3RvcDo6QWx3YXlzKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChpc1Bhc3Qoc2Nyb2xsT3JpZ2luT2Zmc2V0LCBv
ZmZzZXQpKQotICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNuYXBPZmZzZXRzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIFVuaXRUeXBlIHBvdGVudGlh
bFNuYXBPZmZzZXQgPSBzbmFwT2Zmc2V0c1tpXS5vZmZzZXQ7CisgICAgICAgIGlmIChwb3RlbnRp
YWxTbmFwT2Zmc2V0ID09IGRlc3RpbmF0aW9uT2Zmc2V0KQorICAgICAgICAgICAgZXhhY3QgPSBz
dGQ6Om1ha2VfcGFpcihwb3RlbnRpYWxTbmFwT2Zmc2V0LCBpKTsKKyAgICAgICAgZWxzZSBpZiAo
cG90ZW50aWFsU25hcE9mZnNldCA8IGRlc3RpbmF0aW9uT2Zmc2V0KQorICAgICAgICAgICAgcHJl
dmlvdXMgPSBzdGQ6Om1ha2VfcGFpcihwb3RlbnRpYWxTbmFwT2Zmc2V0LCBpKTsKKyAgICAgICAg
ZWxzZSBpZiAoIW5leHQgJiYgcG90ZW50aWFsU25hcE9mZnNldCA+IGRlc3RpbmF0aW9uT2Zmc2V0
KQorICAgICAgICAgICAgbmV4dCA9IHN0ZDo6bWFrZV9wYWlyKHBvdGVudGlhbFNuYXBPZmZzZXQs
IGkpOworCisgICAgICAgIGlmIChzbmFwT2Zmc2V0c1tpXS5zdG9wID09IFNjcm9sbFNuYXBTdG9w
OjpBbHdheXMgJiYgaXNCZXR0ZXJTbmFwU3RvcChwb3RlbnRpYWxTbmFwT2Zmc2V0KSkKKyAgICAg
ICAgICAgIHNuYXBTdG9wID0gc3RkOjptYWtlX3BhaXIocG90ZW50aWFsU25hcE9mZnNldCwgaSk7
CiAgICAgfQogCi0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoZXhhY3QpCisgICAg
ICAgIHByZXZpb3VzID0gbmV4dCA9IGV4YWN0OworCisgICAgcmV0dXJuIHsgcHJldmlvdXMsIG5l
eHQsIHNuYXBTdG9wIH07CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBJbmZvVHlwZSwgdHlwZW5h
bWUgU2l6ZVR5cGUsIHR5cGVuYW1lIExheW91dFR5cGU+CiBzdGF0aWMgc3RkOjpwYWlyPExheW91
dFR5cGUsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBjbG9zZXN0U25hcE9mZnNldFdpdGhJbmZv
QW5kQXhpcyhjb25zdCBJbmZvVHlwZSYgaW5mbywgU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGNvbnN0
IFNpemVUeXBlJiB2aWV3cG9ydFNpemUsIExheW91dFR5cGUgc2Nyb2xsRGVzdGluYXRpb25PZmZz
ZXQsIGZsb2F0IHZlbG9jaXR5LCBzdGQ6Om9wdGlvbmFsPExheW91dFR5cGU+IG9yaWdpbmFsT2Zm
c2V0Rm9yRGlyZWN0aW9uYWxTbmFwcGluZykKIHsKICAgICBjb25zdCBhdXRvJiBzbmFwT2Zmc2V0
cyA9IGluZm8ub2Zmc2V0c0ZvckF4aXMoYXhpcyk7Ci0gICAgYXV0byBwYWlyRm9yTm9TbmFwcGlu
ZyA9IHN0ZDo6bWFrZV9wYWlyKHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBzdGQ6Om51bGxvcHQp
OworICAgIGF1dG8gcGFpckZvck5vU25hcHBpbmcgPSBzdGQ6Om1ha2VfcGFpcihzY3JvbGxEZXN0
aW5hdGlvbk9mZnNldCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4oKSk7CiAgICAgaWYgKHNuYXBP
ZmZzZXRzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHBhaXJGb3JOb1NuYXBwaW5nOwogCi0g
ICAgaWYgKG9yaWdpbmFsT2Zmc2V0Rm9yRGlyZWN0aW9uYWxTbmFwcGluZykgewotICAgICAgICBp
ZiAoYXV0byBmaXJzdFNuYXBTdG9wT2Zmc2V0SW5kZXggPSBmaW5kRmlyc3RTbmFwU3RvcE9mZnNl
dEJldHdlZW5PcmlnaW5BbmREZXN0aW5hdGlvbihzbmFwT2Zmc2V0cywgKm9yaWdpbmFsT2Zmc2V0
Rm9yRGlyZWN0aW9uYWxTbmFwcGluZywgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHNuYXBPZmZzZXRzWypmaXJzdFNuYXBTdG9wT2Zm
c2V0SW5kZXhdLm9mZnNldCwgZmlyc3RTbmFwU3RvcE9mZnNldEluZGV4KTsKLSAgICB9Ci0KICAg
ICBhdXRvIHZpZXdwb3J0TGVuZ3RoID0gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250
YWwgPyB2aWV3cG9ydFNpemUud2lkdGgoKSA6IHZpZXdwb3J0U2l6ZS5oZWlnaHQoKTsKICAgICBh
dXRvIGlzTmVhckVub3VnaFRvT2Zmc2V0Rm9yUHJveGltaXR5ID0gWyZdKExheW91dFR5cGUgY2Fu
ZGlkYXRlU25hcE9mZnNldCkgewogICAgICAgICBpZiAoaW5mby5zdHJpY3RuZXNzICE9IFNjcm9s
bFNuYXBTdHJpY3RuZXNzOjpQcm94aW1pdHkpCkBAIC0xMjAsNiArMTA0LDEwIEBAIHN0YXRpYyBz
dGQ6OnBhaXI8TGF5b3V0VHlwZSwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4+IGNsb3Nlc3RTbmFw
T2Zmc2V0V2l0aEluZm9BCiAgICAgICAgIHJldHVybiBzdGQ6OmFicyhmbG9hdCB7Y2FuZGlkYXRl
U25hcE9mZnNldCAtIHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0fSkgPD0gKHZpZXdwb3J0TGVuZ3Ro
ICogcmF0aW9PZlNjcm9sbFBvcnRBeGlzTGVuZ3RoVG9CZUNvbnNpZGVyZWRGb3JQcm94aW1pdHkp
OwogICAgIH07CiAKKyAgICBhdXRvIFtwcmV2aW91cywgbmV4dCwgc25hcFN0b3BdID0gc2VhcmNo
Rm9yUG90ZW50aWFsU25hcFBvaW50cyhpbmZvLCBheGlzLCBzY3JvbGxEZXN0aW5hdGlvbk9mZnNl
dCwgb3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNuYXBwaW5nKTsKKyAgICBpZiAoc25hcFN0
b3ApCisgICAgICAgIHJldHVybiAqc25hcFN0b3A7CisKICAgICBpZiAoc2Nyb2xsRGVzdGluYXRp
b25PZmZzZXQgPD0gc25hcE9mZnNldHMuZmlyc3QoKS5vZmZzZXQpCiAgICAgICAgIHJldHVybiBp
c05lYXJFbm91Z2hUb09mZnNldEZvclByb3hpbWl0eShzbmFwT2Zmc2V0cy5maXJzdCgpLm9mZnNl
dCkgPyBzdGQ6Om1ha2VfcGFpcihzbmFwT2Zmc2V0cy5maXJzdCgpLm9mZnNldCwgc3RkOjptYWtl
X29wdGlvbmFsKDB1KSkgOiBwYWlyRm9yTm9TbmFwcGluZzsKIApAQCAtMTI4LDQxICsxMTYsMzYg
QEAgc3RhdGljIHN0ZDo6cGFpcjxMYXlvdXRUeXBlLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPj4g
Y2xvc2VzdFNuYXBPZmZzZXRXaXRoSW5mb0EKICAgICAgICAgcmV0dXJuIGlzTmVhckVub3VnaFRv
T2Zmc2V0Rm9yUHJveGltaXR5KHNuYXBPZmZzZXRzLmxhc3QoKS5vZmZzZXQpID8gc3RkOjptYWtl
X3BhaXIoc25hcE9mZnNldHMubGFzdCgpLm9mZnNldCwgc3RkOjptYWtlX29wdGlvbmFsKGxhc3RJ
bmRleCkpIDogcGFpckZvck5vU25hcHBpbmc7CiAgICAgfQogCi0gICAgYXV0byBbbG93ZXJJbmRl
eCwgdXBwZXJJbmRleF0gPSBpbmRpY2VzT2ZOZWFyZXN0U25hcE9mZnNldHM8TGF5b3V0VHlwZT4o
c2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIHNuYXBPZmZzZXRzKTsKLSAgICBBU1NFUlQobG93ZXJJ
bmRleCk7Ci0gICAgQVNTRVJUKHVwcGVySW5kZXgpOwotICAgIExheW91dFR5cGUgbG93ZXJTbmFw
UG9zaXRpb24gPSBzbmFwT2Zmc2V0c1sqbG93ZXJJbmRleF0ub2Zmc2V0OwotICAgIExheW91dFR5
cGUgdXBwZXJTbmFwUG9zaXRpb24gPSBzbmFwT2Zmc2V0c1sqdXBwZXJJbmRleF0ub2Zmc2V0Owot
Ci0gICAgaWYgKCFpc05lYXJFbm91Z2hUb09mZnNldEZvclByb3hpbWl0eShsb3dlclNuYXBQb3Np
dGlvbikpIHsKLSAgICAgICAgbG93ZXJTbmFwUG9zaXRpb24gPSBzY3JvbGxEZXN0aW5hdGlvbk9m
ZnNldDsKLSAgICAgICAgbG93ZXJJbmRleC5yZXNldCgpOwotICAgIH0KLQotICAgIGlmICghaXNO
ZWFyRW5vdWdoVG9PZmZzZXRGb3JQcm94aW1pdHkodXBwZXJTbmFwUG9zaXRpb24pKSB7Ci0gICAg
ICAgIHVwcGVyU25hcFBvc2l0aW9uID0gc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQ7Ci0gICAgICAg
IHVwcGVySW5kZXgucmVzZXQoKTsKLQotICAgIH0KLQotICAgIGlmICghc3RkOjphYnModmVsb2Np
dHkpKSB7Ci0gICAgICAgIGJvb2wgaXNDbG9zZXJUb0xvd2VyU25hcFBvc2l0aW9uID0gIXVwcGVy
SW5kZXggfHwgKGxvd2VySW5kZXggJiYgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQgLSBsb3dlclNu
YXBQb3NpdGlvbiA8PSB1cHBlclNuYXBQb3NpdGlvbiAtIHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0
KTsKLSAgICAgICAgcmV0dXJuIGlzQ2xvc2VyVG9Mb3dlclNuYXBQb3NpdGlvbiA/IHN0ZDo6bWFr
ZV9wYWlyKGxvd2VyU25hcFBvc2l0aW9uLCBsb3dlckluZGV4KSA6IHN0ZDo6bWFrZV9wYWlyKHVw
cGVyU25hcFBvc2l0aW9uLCB1cHBlckluZGV4KTsKKyAgICBpZiAob3JpZ2luYWxPZmZzZXRGb3JE
aXJlY3Rpb25hbFNuYXBwaW5nKSB7CisgICAgICAgIC8vIEZyb20gaHR0cHM6Ly93d3cudzMub3Jn
L1RSL2Nzcy1zY3JvbGwtc25hcC0xLyNjaG9vc2luZworICAgICAgICAvLyAiVXNlciBhZ2VudHMg
bXVzdCBlbnN1cmUgdGhhdCBhIHVzZXIgY2FuIOKAnGVzY2FwZeKAnSBhIHNuYXAgcG9zaXRpb24s
IHJlZ2FyZGxlc3Mgb2YgdGhlIHNjcm9sbAorICAgICAgICAvLyBtZXRob2QuIEZvciBleGFtcGxl
LCBpZiB0aGUgc25hcCB0eXBlIGlzIG1hbmRhdG9yeSBhbmQgdGhlIG5leHQgc25hcCBwb3NpdGlv
biBpcyBtb3JlIHRoYW4KKyAgICAgICAgLy8gdHdvIHNjcmVlbi13aWR0aHMgYXdheSwgYSBuYcOv
dmUg4oCcYWx3YXlzIHNuYXAgdG8gbmVhcmVzdOKAnSBzZWxlY3Rpb24gYWxnb3JpdGhtIG1pZ2h0
IOKAnHRyYXDigJ0gdGhlCisgICAgICAgIC8vCisgICAgICAgIC8vIEZvciBhIGRpcmVjdGlvbmFs
IHNjcm9sbCwgd2UgbmV2ZXIgc25hcCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzY3JvbGwgcG9zaXRp
b24gb3IgYmVmb3JlIGl0LAorICAgICAgICAvLyBhbHdheXMgcHJlZmVycmluZyB0aGUgc25hcCBv
ZmZzZXQgaW4gdGhlIHNjcm9sbCBkaXJlY3Rpb24uCisgICAgICAgIGlmICgqb3JpZ2luYWxPZmZz
ZXRGb3JEaXJlY3Rpb25hbFNuYXBwaW5nIDwgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQgJiYgcHJl
dmlvdXMgJiYgKCpwcmV2aW91cykuZmlyc3QgPD0gKm9yaWdpbmFsT2Zmc2V0Rm9yRGlyZWN0aW9u
YWxTbmFwcGluZykKKyAgICAgICAgICAgIHByZXZpb3VzLnJlc2V0KCk7CisgICAgICAgIGlmICgq
b3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNuYXBwaW5nID4gc2Nyb2xsRGVzdGluYXRpb25P
ZmZzZXQgJiYgbmV4dCAmJiAoKm5leHQpLmZpcnN0ID49ICpvcmlnaW5hbE9mZnNldEZvckRpcmVj
dGlvbmFsU25hcHBpbmcpCisgICAgICAgICAgICBuZXh0LnJlc2V0KCk7CiAgICAgfQogCi0gICAg
Ly8gTm9uLXplcm8gdmVsb2NpdHkgaW5kaWNhdGVzIGEgZmxpY2sgZ2VzdHVyZS4gRXZlbiBpZiBh
bm90aGVyIHNuYXAgcG9pbnQgaXMgY2xvc2VyLCB3ZSBzaG91bGQgY2hvb3NlIHRoZSBvbmUgaW4g
dGhlIGRpcmVjdGlvbiBvZiB0aGUgZmxpY2sgZ2VzdHVyZQotICAgIC8vIGFzIGxvbmcgYXMgYSBz
Y3JvbGwgc25hcCBvZmZzZXQgaXMgY2xvc2UgZW5vdWdoIGZvciBwcm94aW1pdHkgKG9yIHdlIGFy
ZW4ndCB1c2luZyBwcm94aW1pdHkpLiBJZiB3ZSBhcmUgZG9pbmcgZGlyZWN0aW9uYWwKLSAgICAv
LyBzbmFwcGluZywgd2Ugc2hvdWxkIG5ldmVyIHNuYXAgdG8gYSBwb2ludCB0aGF0IHdhcyBvbiB0
aGUgb3RoZXIgc2lkZSBvZiB0aGUgb3JpZ2luYWwgcG9zaXRpb24gaW4gdGhlIG9wcG9zaXRlIGRp
cmVjdGlvbiBvZiB0aGlzIHNjcm9sbC4KLSAgICAvLyBUaGlzIGFsbG93cyBkaXJlY3Rpb25hbCBz
Y3JvbGxpbmcgdG8gZXNjYXBlIHNuYXAgcG9pbnRzLgotICAgIGlmICh2ZWxvY2l0eSA8IDApICB7
Ci0gICAgICAgIGlmICh1cHBlckluZGV4ICYmICghb3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25h
bFNuYXBwaW5nIHx8ICpvcmlnaW5hbE9mZnNldEZvckRpcmVjdGlvbmFsU25hcHBpbmcgPiB1cHBl
clNuYXBQb3NpdGlvbikpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIodXBwZXJT
bmFwUG9zaXRpb24sIHVwcGVySW5kZXgpOwotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIo
bG93ZXJTbmFwUG9zaXRpb24sIGxvd2VySW5kZXgpOwotICAgIH0KKyAgICBpZiAocHJldmlvdXMg
JiYgIWlzTmVhckVub3VnaFRvT2Zmc2V0Rm9yUHJveGltaXR5KCgqcHJldmlvdXMpLmZpcnN0KSkK
KyAgICAgICAgcHJldmlvdXMucmVzZXQoKTsKKyAgICBpZiAobmV4dCAmJiAhaXNOZWFyRW5vdWdo
VG9PZmZzZXRGb3JQcm94aW1pdHkoKCpuZXh0KS5maXJzdCkpCisgICAgICAgIG5leHQucmVzZXQo
KTsKIAotICAgIGlmIChsb3dlckluZGV4ICYmICghb3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25h
bFNuYXBwaW5nIHx8ICpvcmlnaW5hbE9mZnNldEZvckRpcmVjdGlvbmFsU25hcHBpbmcgPCBsb3dl
clNuYXBQb3NpdGlvbikpCi0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihsb3dlclNuYXBQ
b3NpdGlvbiwgbG93ZXJJbmRleCk7Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHVwcGVyU25h
cFBvc2l0aW9uLCB1cHBlckluZGV4KTsKKyAgICBpZiAoIXByZXZpb3VzICYmICFuZXh0KQorICAg
ICAgICByZXR1cm4gcGFpckZvck5vU25hcHBpbmc7CisgICAgaWYgKCFwcmV2aW91cykKKyAgICAg
ICAgcmV0dXJuICpuZXh0OworICAgIGlmICghbmV4dCkKKyAgICAgICAgcmV0dXJuICpwcmV2aW91
czsKKworICAgIC8vIElmIHRoaXMgc2Nyb2xsIGlzbid0IGRpcmVjdGlvbmFsLCB0aGVuIGNob29z
ZSB3aGF0ZXZlciBzbmFwIHBvaW50IGlzIGNsb3Nlciwgb3RoZXJ3aXNlIHBpY2sgdGhlIG9mZnNl
dCBpbiB0aGUgc2Nyb2xsIGRpcmVjdGlvbi4KKyAgICBpZiAoIXN0ZDo6YWJzKHZlbG9jaXR5KSkK
KyAgICAgICAgcmV0dXJuIChzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCAtICgqcHJldmlvdXMpLmZp
cnN0KSA8PSAoKCpuZXh0KS5maXJzdCAtIHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0KSA/ICpwcmV2
aW91cyA6ICpuZXh0OworICAgIHJldHVybiB2ZWxvY2l0eSA8IDAgPyAqcHJldmlvdXMgOiAqbmV4
dDsKIH0KIAogZW51bSBjbGFzcyBJbnNldE9yT3V0c2V0IHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431535</attachid>
            <date>2021-06-16 04:23:21 -0700</date>
            <delta_ts>2021-06-23 08:17:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227062-20210616132320.patch</filename>
            <type>text/plain</type>
            <size>11308</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4OTI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTcyMWE3NDAwYjYzZDA5
NDFhNjkxMjQ5NGU5NzY1ODNmZDg3M2IzNy4uOTkxMTg4YzY5OTAxYWFlM2I3OTYwNGFiZWQ3M2Y4
MmI2ZWM1MjY3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDIxLTA2LTE2ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KKworICAgICAgICBbY3NzLXNjcm9s
bC1zbmFwXSBTaW1wbGlmeSBzbmFwIHBvaW50IHNlbGVjdGlvbiBoZWxwZXJzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwNjIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb21iaW5lIGluZGljZXNPZk5l
YXJlc3RTbmFwT2Zmc2V0cyBhbmQgZmluZEZpcnN0U25hcFN0b3BPZmZzZXRCZXR3ZWVuT3JpZ2lu
QW5kRGVzdGluYXRpb24KKyAgICAgICAgYW5kIGhhdmUgdGhlIGhlbHBlciByZXR1cm4gdGhlIGdl
b21ldHJpYyBwcmV2aW91cyBhbmQgbmV4dCBzbmFwIHBvaW50cy4gVGhpcyBtYWtlcyB0aGUKKyAg
ICAgICAgY29kZSBhIGJpdCBlYXNpZXIgdG8gcmVhZCwgc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQs
IGFuZCBwcmVwYXJlcyBmb3IgbG9va2luZyBhdAorICAgICAgICB0aGUgZ2VvbWV0cmljIHByZXZp
b3VzIGFuZCBuZXh0IHNuYXAgcG9pbnRzIGZvciBjZXJ0YWluIHVwY29taW5nIENTUyBTY3JvbGwg
U25hcCBmZWF0dXJlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgc2hvdWxkIG5vdCBj
aGFuZ2UgYmVoYXZpb3IgaW4gYW55IHdheS4KKworICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbFNuYXBPZmZzZXRzSW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZWFyY2hGb3JQb3Rl
bnRpYWxTbmFwUG9pbnRzKTogQWRkZWQgdGhpcyBuZXcgaGVscGVyIHdoaWNoIGlzIHRoZSBjb21i
aW5hdGlvbgorICAgICAgICBvZiBpbmRpY2VzT2ZOZWFyZXN0U25hcE9mZnNldHMgYW5kIGZpbmRG
aXJzdFNuYXBTdG9wT2Zmc2V0QmV0d2Vlbk9yaWdpbkFuZERlc3RpbmF0aW9uLgorICAgICAgICAo
V2ViQ29yZTo6Y2xvc2VzdFNuYXBPZmZzZXRXaXRoSW5mb0FuZEF4aXMpOiBVc2UgdGhlIG5ldyBo
ZWxwZXIuCisKIDIwMjEtMDYtMTYgIFBlciBBcm5lICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgVXBkYXRlIE1lZGlhIEFjY2Vzc2liaWxpdHkgcHJlZmVyZW5jZXMgaW4gdGhlIFdlYkNv
bnRlbnQgcHJvY2VzcyBmcm9tIHRoZSBVSSBwcm9jZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcAppbmRleCA3Yjg3
NWI5ZGFmOWVjODNiNmQ5N2Q1M2I1Y2Q4ZWQ2ZDk5MjFlYWMxLi44OWE0NmE0YmExMmJiMTlmNDU3
NmJmMzEyY2ZhMDkzMWUzZjYyZDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHAKQEAgLTQyLDU4ICs0Miw0NiBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBMYXlvdXRUeXBl
Pgotc3RhdGljIHN0ZDo6cGFpcjxzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiwgc3RkOjpvcHRpb25h
bDx1bnNpZ25lZD4+IGluZGljZXNPZk5lYXJlc3RTbmFwT2Zmc2V0cyhMYXlvdXRUeXBlIG9mZnNl
dCwgY29uc3QgVmVjdG9yPFNuYXBPZmZzZXQ8TGF5b3V0VHlwZT4+JiBzbmFwT2Zmc2V0cykKLXsK
LSAgICB1bnNpZ25lZCBsb3dlckluZGV4ID0gMDsKLSAgICB1bnNpZ25lZCB1cHBlckluZGV4ID0g
c25hcE9mZnNldHMuc2l6ZSgpIC0gMTsKLSAgICB3aGlsZSAobG93ZXJJbmRleCA8IHVwcGVySW5k
ZXggLSAxKSB7Ci0gICAgICAgIGludCBtaWRkbGVJbmRleCA9IChsb3dlckluZGV4ICsgdXBwZXJJ
bmRleCkgLyAyOwotICAgICAgICBhdXRvIG1pZGRsZU9mZnNldCA9IHNuYXBPZmZzZXRzW21pZGRs
ZUluZGV4XS5vZmZzZXQ7Ci0gICAgICAgIGlmIChvZmZzZXQgPT0gbWlkZGxlT2Zmc2V0KSB7Ci0g
ICAgICAgICAgICB1cHBlckluZGV4ID0gbWlkZGxlSW5kZXg7Ci0gICAgICAgICAgICBsb3dlcklu
ZGV4ID0gbWlkZGxlSW5kZXg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChvZmZzZXQgPiBtaWRkbGVPZmZzZXQpCi0gICAgICAgICAgICBsb3dlckluZGV4ID0g
bWlkZGxlSW5kZXg7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHVwcGVySW5kZXggPSBtaWRk
bGVJbmRleDsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobG93ZXJJbmRleCwg
dXBwZXJJbmRleCk7Ci19Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVW5pdFR5cGU+CitzdHJ1Y3QgUG90
ZW50aWFsU25hcFBvaW50U2VhcmNoUmVzdWx0IHsKKyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6cGFp
cjxVbml0VHlwZSwgdW5zaWduZWQ+PiBwcmV2aW91czsKKyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6
cGFpcjxVbml0VHlwZSwgdW5zaWduZWQ+PiBuZXh0OworICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjpw
YWlyPFVuaXRUeXBlLCB1bnNpZ25lZD4+IHNuYXBTdG9wOworfTsKIAotdGVtcGxhdGUgPHR5cGVu
YW1lIExheW91dFR5cGU+Ci1zdGF0aWMgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gZmluZEZpcnN0
U25hcFN0b3BPZmZzZXRCZXR3ZWVuT3JpZ2luQW5kRGVzdGluYXRpb24oY29uc3QgVmVjdG9yPFNu
YXBPZmZzZXQ8TGF5b3V0VHlwZT4+JiBzbmFwT2Zmc2V0cywgTGF5b3V0VHlwZSBzY3JvbGxPcmln
aW5PZmZzZXQsIExheW91dFR5cGUgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQpCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgSW5mb1R5cGUsIHR5cGVuYW1lIFVuaXRUeXBlPgorc3RhdGljIFBvdGVudGlhbFNu
YXBQb2ludFNlYXJjaFJlc3VsdDxVbml0VHlwZT4gc2VhcmNoRm9yUG90ZW50aWFsU25hcFBvaW50
cyhjb25zdCBJbmZvVHlwZSYgaW5mbywgU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIFVuaXRUeXBlIGRl
c3RpbmF0aW9uT2Zmc2V0LCBzdGQ6Om9wdGlvbmFsPFVuaXRUeXBlPiBvcmlnaW5hbE9mZnNldCkK
IHsKLSAgICBMYXlvdXRUeXBlIGRpZmZlcmVuY2UgPSBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCAt
IHNjcm9sbE9yaWdpbk9mZnNldDsKLSAgICBpZiAoIWRpZmZlcmVuY2UpCi0gICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7Ci0KLSAgICB1bnNpZ25lZCBzZWFyY2hTdGFydE9mZnNldCA9IDA7Ci0g
ICAgc2l6ZV90IGl0ZXJhdGlvbiA9IDE7Ci0gICAgaWYgKGRpZmZlcmVuY2UgPCAwKSB7Ci0gICAg
ICAgIHNlYXJjaFN0YXJ0T2Zmc2V0ID0gc25hcE9mZnNldHMuc2l6ZSgpIC0gMTsKLSAgICAgICAg
aXRlcmF0aW9uID0gLTE7Ci0gICAgfQotCi0gICAgYXV0byBpc1Bhc3QgPSBbZGlmZmVyZW5jZV0o
TGF5b3V0VHlwZSBtYXJrLCBMYXlvdXRUeXBlIGNhbmRpZGF0ZSkgewotICAgICAgICByZXR1cm4g
KGRpZmZlcmVuY2UgPiAwICYmIGNhbmRpZGF0ZSA+IG1hcmspIHx8IChkaWZmZXJlbmNlIDwgMCAm
JiBjYW5kaWRhdGUgPCBtYXJrKTsKKyAgICBjb25zdCBhdXRvJiBzbmFwT2Zmc2V0cyA9IGluZm8u
b2Zmc2V0c0ZvckF4aXMoYXhpcyk7CisgICAgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8VW5pdFR5
cGUsIHVuc2lnbmVkPj4gcHJldmlvdXMsIG5leHQsIGV4YWN0LCBzbmFwU3RvcDsKKworICAgIC8v
IEEgcGFydGljdWxhciBzbmFwIHN0b3AgaXMgYmV0dGVyIGlmIGl0J3MgYmV0d2VlbiB0aGUgb3Jp
Z2luYWwgb2Zmc2V0IGFuZCBkZXN0aW5hdGlvbiBvZmZzZXQgYW5kIGNsb3NlciBvcmlnaW5hbAor
ICAgIC8vIG9mZnNldCB0aGFuIHRoZSBwcmV2aW91c2x5IHNlbGVjdGVkIHNuYXAgc3RvcC4gV2Ug
YWx3YXlzIHdhbnQgdG8gc3RvcCBhdCB0aGUgY2xvc2VzdCBzbmFwIHN0b3AgdG8gdGhlIG9yaWdp
bmFsIG9mZnNldC4KKyAgICBhdXRvIGlzQmV0dGVyU25hcFN0b3AgPSBbJl0oVW5pdFR5cGUgY2Fu
ZGlkYXRlKSB7CisgICAgICAgIGlmICghb3JpZ2luYWxPZmZzZXQpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGF1dG8gb3JpZ2luYWwgPSAqb3JpZ2luYWxPZmZzZXQ7CisgICAg
ICAgIGlmIChjYW5kaWRhdGUgPD0gc3RkOjptaW4oZGVzdGluYXRpb25PZmZzZXQsIG9yaWdpbmFs
KSB8fCBjYW5kaWRhdGUgPj0gc3RkOjptYXgoZGVzdGluYXRpb25PZmZzZXQsIG9yaWdpbmFsKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuICFzbmFwU3RvcCB8fCBz
dGQ6OmFicyhmbG9hdCB7IGNhbmRpZGF0ZSAtIG9yaWdpbmFsIH0pIDwgc3RkOjphYnMoZmxvYXQg
eyAoKnNuYXBTdG9wKS5maXJzdCAtIG9yaWdpbmFsIH0pOwogICAgIH07CiAKLSAgICBmb3IgKGlu
dCBpID0gc2VhcmNoU3RhcnRPZmZzZXQ7IGkgPj0gMCAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KGkp
IDwgc25hcE9mZnNldHMuc2l6ZSgpOyBpICs9IGl0ZXJhdGlvbikgewotICAgICAgICBhdXRvIG9m
ZnNldCA9IHNuYXBPZmZzZXRzW2ldLm9mZnNldDsKLSAgICAgICAgaWYgKGlzUGFzdChzY3JvbGxE
ZXN0aW5hdGlvbk9mZnNldCwgb2Zmc2V0KSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBp
ZiAoc25hcE9mZnNldHNbaV0uc3RvcCAhPSBTY3JvbGxTbmFwU3RvcDo6QWx3YXlzKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChpc1Bhc3Qoc2Nyb2xsT3JpZ2luT2Zmc2V0LCBv
ZmZzZXQpKQotICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNuYXBPZmZzZXRzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIFVuaXRUeXBlIHBvdGVudGlh
bFNuYXBPZmZzZXQgPSBzbmFwT2Zmc2V0c1tpXS5vZmZzZXQ7CisgICAgICAgIGlmIChwb3RlbnRp
YWxTbmFwT2Zmc2V0ID09IGRlc3RpbmF0aW9uT2Zmc2V0KQorICAgICAgICAgICAgZXhhY3QgPSBz
dGQ6Om1ha2VfcGFpcihwb3RlbnRpYWxTbmFwT2Zmc2V0LCBpKTsKKyAgICAgICAgZWxzZSBpZiAo
cG90ZW50aWFsU25hcE9mZnNldCA8IGRlc3RpbmF0aW9uT2Zmc2V0KQorICAgICAgICAgICAgcHJl
dmlvdXMgPSBzdGQ6Om1ha2VfcGFpcihwb3RlbnRpYWxTbmFwT2Zmc2V0LCBpKTsKKyAgICAgICAg
ZWxzZSBpZiAoIW5leHQgJiYgcG90ZW50aWFsU25hcE9mZnNldCA+IGRlc3RpbmF0aW9uT2Zmc2V0
KQorICAgICAgICAgICAgbmV4dCA9IHN0ZDo6bWFrZV9wYWlyKHBvdGVudGlhbFNuYXBPZmZzZXQs
IGkpOworCisgICAgICAgIGlmIChzbmFwT2Zmc2V0c1tpXS5zdG9wID09IFNjcm9sbFNuYXBTdG9w
OjpBbHdheXMgJiYgaXNCZXR0ZXJTbmFwU3RvcChwb3RlbnRpYWxTbmFwT2Zmc2V0KSkKKyAgICAg
ICAgICAgIHNuYXBTdG9wID0gc3RkOjptYWtlX3BhaXIocG90ZW50aWFsU25hcE9mZnNldCwgaSk7
CiAgICAgfQogCi0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoZXhhY3QpCisgICAg
ICAgIHJldHVybiB7IGV4YWN0LCBleGFjdCwgc25hcFN0b3AgfTsKKyAgICByZXR1cm4geyBwcmV2
aW91cywgbmV4dCwgc25hcFN0b3AgfTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEluZm9UeXBl
LCB0eXBlbmFtZSBTaXplVHlwZSwgdHlwZW5hbWUgTGF5b3V0VHlwZT4KQEAgLTEwNCwxMSArOTIs
NiBAQCBzdGF0aWMgc3RkOjpwYWlyPExheW91dFR5cGUsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
PiBjbG9zZXN0U25hcE9mZnNldFdpdGhJbmZvQQogICAgIGlmIChzbmFwT2Zmc2V0cy5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiBwYWlyRm9yTm9TbmFwcGluZzsKIAotICAgIGlmIChvcmlnaW5h
bE9mZnNldEZvckRpcmVjdGlvbmFsU25hcHBpbmcpIHsKLSAgICAgICAgaWYgKGF1dG8gZmlyc3RT
bmFwU3RvcE9mZnNldEluZGV4ID0gZmluZEZpcnN0U25hcFN0b3BPZmZzZXRCZXR3ZWVuT3JpZ2lu
QW5kRGVzdGluYXRpb24oc25hcE9mZnNldHMsICpvcmlnaW5hbE9mZnNldEZvckRpcmVjdGlvbmFs
U25hcHBpbmcsIHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihzbmFwT2Zmc2V0c1sqZmlyc3RTbmFwU3RvcE9mZnNldEluZGV4XS5vZmZz
ZXQsIGZpcnN0U25hcFN0b3BPZmZzZXRJbmRleCk7Ci0gICAgfQotCiAgICAgYXV0byB2aWV3cG9y
dExlbmd0aCA9IGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsID8gdmlld3BvcnRT
aXplLndpZHRoKCkgOiB2aWV3cG9ydFNpemUuaGVpZ2h0KCk7CiAgICAgYXV0byBpc05lYXJFbm91
Z2hUb09mZnNldEZvclByb3hpbWl0eSA9IFsmXShMYXlvdXRUeXBlIGNhbmRpZGF0ZVNuYXBPZmZz
ZXQpIHsKICAgICAgICAgaWYgKGluZm8uc3RyaWN0bmVzcyAhPSBTY3JvbGxTbmFwU3RyaWN0bmVz
czo6UHJveGltaXR5KQpAQCAtMTIwLDYgKzEwMywxMCBAQCBzdGF0aWMgc3RkOjpwYWlyPExheW91
dFR5cGUsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBjbG9zZXN0U25hcE9mZnNldFdpdGhJbmZv
QQogICAgICAgICByZXR1cm4gc3RkOjphYnMoZmxvYXQge2NhbmRpZGF0ZVNuYXBPZmZzZXQgLSBz
Y3JvbGxEZXN0aW5hdGlvbk9mZnNldH0pIDw9ICh2aWV3cG9ydExlbmd0aCAqIHJhdGlvT2ZTY3Jv
bGxQb3J0QXhpc0xlbmd0aFRvQmVDb25zaWRlcmVkRm9yUHJveGltaXR5KTsKICAgICB9OwogCisg
ICAgYXV0byBbcHJldmlvdXMsIG5leHQsIHNuYXBTdG9wXSA9IHNlYXJjaEZvclBvdGVudGlhbFNu
YXBQb2ludHMoaW5mbywgYXhpcywgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIG9yaWdpbmFsT2Zm
c2V0Rm9yRGlyZWN0aW9uYWxTbmFwcGluZyk7CisgICAgaWYgKHNuYXBTdG9wKQorICAgICAgICBy
ZXR1cm4gKnNuYXBTdG9wOworCiAgICAgaWYgKHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0IDw9IHNu
YXBPZmZzZXRzLmZpcnN0KCkub2Zmc2V0KQogICAgICAgICByZXR1cm4gaXNOZWFyRW5vdWdoVG9P
ZmZzZXRGb3JQcm94aW1pdHkoc25hcE9mZnNldHMuZmlyc3QoKS5vZmZzZXQpID8gc3RkOjptYWtl
X3BhaXIoc25hcE9mZnNldHMuZmlyc3QoKS5vZmZzZXQsIHN0ZDo6bWFrZV9vcHRpb25hbCgwdSkp
IDogcGFpckZvck5vU25hcHBpbmc7CiAKQEAgLTEyOCw0MSArMTE1LDM2IEBAIHN0YXRpYyBzdGQ6
OnBhaXI8TGF5b3V0VHlwZSwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4+IGNsb3Nlc3RTbmFwT2Zm
c2V0V2l0aEluZm9BCiAgICAgICAgIHJldHVybiBpc05lYXJFbm91Z2hUb09mZnNldEZvclByb3hp
bWl0eShzbmFwT2Zmc2V0cy5sYXN0KCkub2Zmc2V0KSA/IHN0ZDo6bWFrZV9wYWlyKHNuYXBPZmZz
ZXRzLmxhc3QoKS5vZmZzZXQsIHN0ZDo6bWFrZV9vcHRpb25hbChsYXN0SW5kZXgpKSA6IHBhaXJG
b3JOb1NuYXBwaW5nOwogICAgIH0KIAotICAgIGF1dG8gW2xvd2VySW5kZXgsIHVwcGVySW5kZXhd
ID0gaW5kaWNlc09mTmVhcmVzdFNuYXBPZmZzZXRzPExheW91dFR5cGU+KHNjcm9sbERlc3RpbmF0
aW9uT2Zmc2V0LCBzbmFwT2Zmc2V0cyk7Ci0gICAgQVNTRVJUKGxvd2VySW5kZXgpOwotICAgIEFT
U0VSVCh1cHBlckluZGV4KTsKLSAgICBMYXlvdXRUeXBlIGxvd2VyU25hcFBvc2l0aW9uID0gc25h
cE9mZnNldHNbKmxvd2VySW5kZXhdLm9mZnNldDsKLSAgICBMYXlvdXRUeXBlIHVwcGVyU25hcFBv
c2l0aW9uID0gc25hcE9mZnNldHNbKnVwcGVySW5kZXhdLm9mZnNldDsKLQotICAgIGlmICghaXNO
ZWFyRW5vdWdoVG9PZmZzZXRGb3JQcm94aW1pdHkobG93ZXJTbmFwUG9zaXRpb24pKSB7Ci0gICAg
ICAgIGxvd2VyU25hcFBvc2l0aW9uID0gc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQ7Ci0gICAgICAg
IGxvd2VySW5kZXgucmVzZXQoKTsKLSAgICB9Ci0KLSAgICBpZiAoIWlzTmVhckVub3VnaFRvT2Zm
c2V0Rm9yUHJveGltaXR5KHVwcGVyU25hcFBvc2l0aW9uKSkgewotICAgICAgICB1cHBlclNuYXBQ
b3NpdGlvbiA9IHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0OwotICAgICAgICB1cHBlckluZGV4LnJl
c2V0KCk7Ci0KLSAgICB9Ci0KLSAgICBpZiAoIXN0ZDo6YWJzKHZlbG9jaXR5KSkgewotICAgICAg
ICBib29sIGlzQ2xvc2VyVG9Mb3dlclNuYXBQb3NpdGlvbiA9ICF1cHBlckluZGV4IHx8IChsb3dl
ckluZGV4ICYmIHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0IC0gbG93ZXJTbmFwUG9zaXRpb24gPD0g
dXBwZXJTbmFwUG9zaXRpb24gLSBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCk7Ci0gICAgICAgIHJl
dHVybiBpc0Nsb3NlclRvTG93ZXJTbmFwUG9zaXRpb24gPyBzdGQ6Om1ha2VfcGFpcihsb3dlclNu
YXBQb3NpdGlvbiwgbG93ZXJJbmRleCkgOiBzdGQ6Om1ha2VfcGFpcih1cHBlclNuYXBQb3NpdGlv
biwgdXBwZXJJbmRleCk7CisgICAgaWYgKG9yaWdpbmFsT2Zmc2V0Rm9yRGlyZWN0aW9uYWxTbmFw
cGluZykgeworICAgICAgICAvLyBGcm9tIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3Mtc2Nyb2xs
LXNuYXAtMS8jY2hvb3NpbmcKKyAgICAgICAgLy8gIlVzZXIgYWdlbnRzIG11c3QgZW5zdXJlIHRo
YXQgYSB1c2VyIGNhbiDigJxlc2NhcGXigJ0gYSBzbmFwIHBvc2l0aW9uLCByZWdhcmRsZXNzIG9m
IHRoZSBzY3JvbGwKKyAgICAgICAgLy8gbWV0aG9kLiBGb3IgZXhhbXBsZSwgaWYgdGhlIHNuYXAg
dHlwZSBpcyBtYW5kYXRvcnkgYW5kIHRoZSBuZXh0IHNuYXAgcG9zaXRpb24gaXMgbW9yZSB0aGFu
CisgICAgICAgIC8vIHR3byBzY3JlZW4td2lkdGhzIGF3YXksIGEgbmHDr3ZlIOKAnGFsd2F5cyBz
bmFwIHRvIG5lYXJlc3TigJ0gc2VsZWN0aW9uIGFsZ29yaXRobSBtaWdodCDigJx0cmFw4oCdIHRo
ZQorICAgICAgICAvLworICAgICAgICAvLyBGb3IgYSBkaXJlY3Rpb25hbCBzY3JvbGwsIHdlIG5l
dmVyIHNuYXAgYmFjayB0byB0aGUgb3JpZ2luYWwgc2Nyb2xsIHBvc2l0aW9uIG9yIGJlZm9yZSBp
dCwKKyAgICAgICAgLy8gYWx3YXlzIHByZWZlcnJpbmcgdGhlIHNuYXAgb2Zmc2V0IGluIHRoZSBz
Y3JvbGwgZGlyZWN0aW9uLgorICAgICAgICBpZiAoKm9yaWdpbmFsT2Zmc2V0Rm9yRGlyZWN0aW9u
YWxTbmFwcGluZyA8IHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0ICYmIHByZXZpb3VzICYmICgqcHJl
dmlvdXMpLmZpcnN0IDw9ICpvcmlnaW5hbE9mZnNldEZvckRpcmVjdGlvbmFsU25hcHBpbmcpCisg
ICAgICAgICAgICBwcmV2aW91cy5yZXNldCgpOworICAgICAgICBpZiAoKm9yaWdpbmFsT2Zmc2V0
Rm9yRGlyZWN0aW9uYWxTbmFwcGluZyA+IHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0ICYmIG5leHQg
JiYgKCpuZXh0KS5maXJzdCA+PSAqb3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNuYXBwaW5n
KQorICAgICAgICAgICAgbmV4dC5yZXNldCgpOwogICAgIH0KIAotICAgIC8vIE5vbi16ZXJvIHZl
bG9jaXR5IGluZGljYXRlcyBhIGZsaWNrIGdlc3R1cmUuIEV2ZW4gaWYgYW5vdGhlciBzbmFwIHBv
aW50IGlzIGNsb3Nlciwgd2Ugc2hvdWxkIGNob29zZSB0aGUgb25lIGluIHRoZSBkaXJlY3Rpb24g
b2YgdGhlIGZsaWNrIGdlc3R1cmUKLSAgICAvLyBhcyBsb25nIGFzIGEgc2Nyb2xsIHNuYXAgb2Zm
c2V0IGlzIGNsb3NlIGVub3VnaCBmb3IgcHJveGltaXR5IChvciB3ZSBhcmVuJ3QgdXNpbmcgcHJv
eGltaXR5KS4gSWYgd2UgYXJlIGRvaW5nIGRpcmVjdGlvbmFsCi0gICAgLy8gc25hcHBpbmcsIHdl
IHNob3VsZCBuZXZlciBzbmFwIHRvIGEgcG9pbnQgdGhhdCB3YXMgb24gdGhlIG90aGVyIHNpZGUg
b2YgdGhlIG9yaWdpbmFsIHBvc2l0aW9uIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gb2YgdGhp
cyBzY3JvbGwuCi0gICAgLy8gVGhpcyBhbGxvd3MgZGlyZWN0aW9uYWwgc2Nyb2xsaW5nIHRvIGVz
Y2FwZSBzbmFwIHBvaW50cy4KLSAgICBpZiAodmVsb2NpdHkgPCAwKSAgewotICAgICAgICBpZiAo
dXBwZXJJbmRleCAmJiAoIW9yaWdpbmFsT2Zmc2V0Rm9yRGlyZWN0aW9uYWxTbmFwcGluZyB8fCAq
b3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNuYXBwaW5nID4gdXBwZXJTbmFwUG9zaXRpb24p
KQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHVwcGVyU25hcFBvc2l0aW9uLCB1
cHBlckluZGV4KTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGxvd2VyU25hcFBvc2l0
aW9uLCBsb3dlckluZGV4KTsKLSAgICB9CisgICAgaWYgKHByZXZpb3VzICYmICFpc05lYXJFbm91
Z2hUb09mZnNldEZvclByb3hpbWl0eSgoKnByZXZpb3VzKS5maXJzdCkpCisgICAgICAgIHByZXZp
b3VzLnJlc2V0KCk7CisgICAgaWYgKG5leHQgJiYgIWlzTmVhckVub3VnaFRvT2Zmc2V0Rm9yUHJv
eGltaXR5KCgqbmV4dCkuZmlyc3QpKQorICAgICAgICBuZXh0LnJlc2V0KCk7CiAKLSAgICBpZiAo
bG93ZXJJbmRleCAmJiAoIW9yaWdpbmFsT2Zmc2V0Rm9yRGlyZWN0aW9uYWxTbmFwcGluZyB8fCAq
b3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNuYXBwaW5nIDwgbG93ZXJTbmFwUG9zaXRpb24p
KQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobG93ZXJTbmFwUG9zaXRpb24sIGxvd2Vy
SW5kZXgpOwotICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcih1cHBlclNuYXBQb3NpdGlvbiwgdXBw
ZXJJbmRleCk7CisgICAgaWYgKCFwcmV2aW91cyAmJiAhbmV4dCkKKyAgICAgICAgcmV0dXJuIHBh
aXJGb3JOb1NuYXBwaW5nOworICAgIGlmICghcHJldmlvdXMpCisgICAgICAgIHJldHVybiAqbmV4
dDsKKyAgICBpZiAoIW5leHQpCisgICAgICAgIHJldHVybiAqcHJldmlvdXM7CisKKyAgICAvLyBJ
ZiB0aGlzIHNjcm9sbCBpc24ndCBkaXJlY3Rpb25hbCwgdGhlbiBjaG9vc2Ugd2hhdGV2ZXIgc25h
cCBwb2ludCBpcyBjbG9zZXIsIG90aGVyd2lzZSBwaWNrIHRoZSBvZmZzZXQgaW4gdGhlIHNjcm9s
bCBkaXJlY3Rpb24uCisgICAgaWYgKCFzdGQ6OmFicyh2ZWxvY2l0eSkpCisgICAgICAgIHJldHVy
biAoc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQgLSAoKnByZXZpb3VzKS5maXJzdCkgPD0gKCgqbmV4
dCkuZmlyc3QgLSBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCkgPyAqcHJldmlvdXMgOiAqbmV4dDsK
KyAgICByZXR1cm4gdmVsb2NpdHkgPCAwID8gKnByZXZpb3VzIDogKm5leHQ7CiB9CiAKIGVudW0g
Y2xhc3MgSW5zZXRPck91dHNldCB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432041</attachid>
            <date>2021-06-23 08:17:52 -0700</date>
            <delta_ts>2021-06-25 00:24:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227062-20210623171751.patch</filename>
            <type>text/plain</type>
            <size>11200</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDI3NTg0OWRkYTg4OGYz
ZTA1OWUwNmZmNzI0OTk3OGY2OTE3NWJlZC4uMGI2YWFiNmNlOTcyZGE5NDU3YTBjNjVkYjNmNmI4
Y2NmZDU0MTA4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDIxLTA2LTE2ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KKworICAgICAgICBbY3NzLXNjcm9s
bC1zbmFwXSBTaW1wbGlmeSBzbmFwIHBvaW50IHNlbGVjdGlvbiBoZWxwZXJzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwNjIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb21iaW5lIGluZGljZXNPZk5l
YXJlc3RTbmFwT2Zmc2V0cyBhbmQgZmluZEZpcnN0U25hcFN0b3BPZmZzZXRCZXR3ZWVuT3JpZ2lu
QW5kRGVzdGluYXRpb24KKyAgICAgICAgYW5kIGhhdmUgdGhlIGhlbHBlciByZXR1cm4gdGhlIGdl
b21ldHJpYyBwcmV2aW91cyBhbmQgbmV4dCBzbmFwIHBvaW50cy4gVGhpcyBtYWtlcyB0aGUKKyAg
ICAgICAgY29kZSBhIGJpdCBlYXNpZXIgdG8gcmVhZCwgc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQs
IGFuZCBwcmVwYXJlcyBmb3IgbG9va2luZyBhdAorICAgICAgICB0aGUgZ2VvbWV0cmljIHByZXZp
b3VzIGFuZCBuZXh0IHNuYXAgcG9pbnRzIGZvciBjZXJ0YWluIHVwY29taW5nIENTUyBTY3JvbGwg
U25hcCBmZWF0dXJlcy4KKworICAgICAgICBQcmV2aW91c2x5LCBpbmRpY2VzT2ZOZWFyZXN0U25h
cE9mZnNldHMgdXNlZCBhIGJpbmFyeSBzZWFyY2ggYW5kIGZpbmRGaXJzdFNuYXBTdG9wT2Zmc2V0
QmV0d2Vlbk9yaWdpbkFuZERlc3RpbmF0aW9uCisgICAgICAgIHVzZWQgYSBsaW5lYXIgc2VhcmNo
LiBUaGlzIGNoYW5nZSByZXBsYWNlcyB0aGVzZSB0d28gZnVuY3Rpb25zIHdpdGggYSBzaW5nbGUg
bGluZWFyIHNlYXJjaC4KKyAgICAgICAgV2hpbGUgZmluZEZpcnN0U25hcFN0b3BPZmZzZXRCZXR3
ZWVuT3JpZ2luQW5kRGVzdGluYXRpb24gd2FzIG9ubHkgY2FsbGVkIGZvciBkaXJlY3Rpb25hbCBz
Y3JvbGxpbmcsCisgICAgICAgIG1vc3Qgc25hcCBjb250YWluZXJzIGhhdmUgYSBzbWFsbCBudW1i
ZXIgb2Ygc25hcCBwb2ludHMuIFRodXMsIGl0J3MgdW5saWtlbHkgdGhhdCB0aGlzCisgICAgICAg
IGNoYW5nZSBpbnRyb2R1Y2VzIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjay4KKworICAgICAgICBO
byBuZXcgdGVzdHMuIFRoaXMgc2hvdWxkIG5vdCBjaGFuZ2UgYmVoYXZpb3IgaW4gYW55IHdheS4K
KworICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpzZWFyY2hGb3JQb3RlbnRpYWxTbmFwUG9pbnRzKTogQWRkZWQgdGhp
cyBuZXcgaGVscGVyIHdoaWNoIGlzIHRoZSBjb21iaW5hdGlvbgorICAgICAgICBvZiBpbmRpY2Vz
T2ZOZWFyZXN0U25hcE9mZnNldHMgYW5kIGZpbmRGaXJzdFNuYXBTdG9wT2Zmc2V0QmV0d2Vlbk9y
aWdpbkFuZERlc3RpbmF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6Y2xvc2VzdFNuYXBPZmZzZXRX
aXRoSW5mb0FuZEF4aXMpOiBVc2UgdGhlIG5ldyBoZWxwZXIuCisKIDIwMjEtMDYtMjEgIEplYW4t
WXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KIAogICAgICAgICBTYWZhcmkgMTUgYnJlYWtz
IGFsbCBXZWIgQXVkaW8gY29udGVudCB1c2luZyBXZWJNIE9wdXMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwCmluZGV4
IDdiODc1YjlkYWY5ZWM4M2I2ZDk3ZDUzYjVjZDhlZDZkOTkyMWVhYzEuLjJkNDJmOTc5N2M0Yzc0
ZTNmMDllN2E5NzZlZDU2MzlhYzhhZTk5YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcApAQCAtNDIsNTggKzQy
LDQ2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIExheW91
dFR5cGU+Ci1zdGF0aWMgc3RkOjpwYWlyPHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+LCBzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPj4gaW5kaWNlc09mTmVhcmVzdFNuYXBPZmZzZXRzKExheW91dFR5cGUg
b2Zmc2V0LCBjb25zdCBWZWN0b3I8U25hcE9mZnNldDxMYXlvdXRUeXBlPj4mIHNuYXBPZmZzZXRz
KQotewotICAgIHVuc2lnbmVkIGxvd2VySW5kZXggPSAwOwotICAgIHVuc2lnbmVkIHVwcGVySW5k
ZXggPSBzbmFwT2Zmc2V0cy5zaXplKCkgLSAxOwotICAgIHdoaWxlIChsb3dlckluZGV4IDwgdXBw
ZXJJbmRleCAtIDEpIHsKLSAgICAgICAgaW50IG1pZGRsZUluZGV4ID0gKGxvd2VySW5kZXggKyB1
cHBlckluZGV4KSAvIDI7Ci0gICAgICAgIGF1dG8gbWlkZGxlT2Zmc2V0ID0gc25hcE9mZnNldHNb
bWlkZGxlSW5kZXhdLm9mZnNldDsKLSAgICAgICAgaWYgKG9mZnNldCA9PSBtaWRkbGVPZmZzZXQp
IHsKLSAgICAgICAgICAgIHVwcGVySW5kZXggPSBtaWRkbGVJbmRleDsKLSAgICAgICAgICAgIGxv
d2VySW5kZXggPSBtaWRkbGVJbmRleDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKG9mZnNldCA+IG1pZGRsZU9mZnNldCkKLSAgICAgICAgICAgIGxvd2VySW5k
ZXggPSBtaWRkbGVJbmRleDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdXBwZXJJbmRleCA9
IG1pZGRsZUluZGV4OwotICAgIH0KLQotICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihsb3dlcklu
ZGV4LCB1cHBlckluZGV4KTsKLX0KK3RlbXBsYXRlIDx0eXBlbmFtZSBVbml0VHlwZT4KK3N0cnVj
dCBQb3RlbnRpYWxTbmFwUG9pbnRTZWFyY2hSZXN1bHQgeworICAgIHN0ZDo6b3B0aW9uYWw8c3Rk
OjpwYWlyPFVuaXRUeXBlLCB1bnNpZ25lZD4+IHByZXZpb3VzOworICAgIHN0ZDo6b3B0aW9uYWw8
c3RkOjpwYWlyPFVuaXRUeXBlLCB1bnNpZ25lZD4+IG5leHQ7CisgICAgc3RkOjpvcHRpb25hbDxz
dGQ6OnBhaXI8VW5pdFR5cGUsIHVuc2lnbmVkPj4gc25hcFN0b3A7Cit9OwogCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgTGF5b3V0VHlwZT4KLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBmaW5k
Rmlyc3RTbmFwU3RvcE9mZnNldEJldHdlZW5PcmlnaW5BbmREZXN0aW5hdGlvbihjb25zdCBWZWN0
b3I8U25hcE9mZnNldDxMYXlvdXRUeXBlPj4mIHNuYXBPZmZzZXRzLCBMYXlvdXRUeXBlIHNjcm9s
bE9yaWdpbk9mZnNldCwgTGF5b3V0VHlwZSBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCkKK3RlbXBs
YXRlIDx0eXBlbmFtZSBJbmZvVHlwZSwgdHlwZW5hbWUgVW5pdFR5cGU+CitzdGF0aWMgUG90ZW50
aWFsU25hcFBvaW50U2VhcmNoUmVzdWx0PFVuaXRUeXBlPiBzZWFyY2hGb3JQb3RlbnRpYWxTbmFw
UG9pbnRzKGNvbnN0IEluZm9UeXBlJiBpbmZvLCBTY3JvbGxFdmVudEF4aXMgYXhpcywgVW5pdFR5
cGUgZGVzdGluYXRpb25PZmZzZXQsIHN0ZDo6b3B0aW9uYWw8VW5pdFR5cGU+IG9yaWdpbmFsT2Zm
c2V0KQogewotICAgIExheW91dFR5cGUgZGlmZmVyZW5jZSA9IHNjcm9sbERlc3RpbmF0aW9uT2Zm
c2V0IC0gc2Nyb2xsT3JpZ2luT2Zmc2V0OwotICAgIGlmICghZGlmZmVyZW5jZSkKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHVuc2lnbmVkIHNlYXJjaFN0YXJ0T2Zmc2V0ID0g
MDsKLSAgICBzaXplX3QgaXRlcmF0aW9uID0gMTsKLSAgICBpZiAoZGlmZmVyZW5jZSA8IDApIHsK
LSAgICAgICAgc2VhcmNoU3RhcnRPZmZzZXQgPSBzbmFwT2Zmc2V0cy5zaXplKCkgLSAxOwotICAg
ICAgICBpdGVyYXRpb24gPSAtMTsKLSAgICB9Ci0KLSAgICBhdXRvIGlzUGFzdCA9IFtkaWZmZXJl
bmNlXShMYXlvdXRUeXBlIG1hcmssIExheW91dFR5cGUgY2FuZGlkYXRlKSB7Ci0gICAgICAgIHJl
dHVybiAoZGlmZmVyZW5jZSA+IDAgJiYgY2FuZGlkYXRlID4gbWFyaykgfHwgKGRpZmZlcmVuY2Ug
PCAwICYmIGNhbmRpZGF0ZSA8IG1hcmspOworICAgIGNvbnN0IGF1dG8mIHNuYXBPZmZzZXRzID0g
aW5mby5vZmZzZXRzRm9yQXhpcyhheGlzKTsKKyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6cGFpcjxV
bml0VHlwZSwgdW5zaWduZWQ+PiBwcmV2aW91cywgbmV4dCwgZXhhY3QsIHNuYXBTdG9wOworCisg
ICAgLy8gQSBwYXJ0aWN1bGFyIHNuYXAgc3RvcCBpcyBiZXR0ZXIgaWYgaXQncyBiZXR3ZWVuIHRo
ZSBvcmlnaW5hbCBvZmZzZXQgYW5kIGRlc3RpbmF0aW9uIG9mZnNldCBhbmQgY2xvc2VyIG9yaWdp
bmFsCisgICAgLy8gb2Zmc2V0IHRoYW4gdGhlIHByZXZpb3VzbHkgc2VsZWN0ZWQgc25hcCBzdG9w
LiBXZSBhbHdheXMgd2FudCB0byBzdG9wIGF0IHRoZSBjbG9zZXN0IHNuYXAgc3RvcCB0byB0aGUg
b3JpZ2luYWwgb2Zmc2V0LgorICAgIGF1dG8gaXNCZXR0ZXJTbmFwU3RvcCA9IFsmXShVbml0VHlw
ZSBjYW5kaWRhdGUpIHsKKyAgICAgICAgaWYgKCFvcmlnaW5hbE9mZnNldCkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byBvcmlnaW5hbCA9ICpvcmlnaW5hbE9mZnNldDsK
KyAgICAgICAgaWYgKGNhbmRpZGF0ZSA8PSBzdGQ6Om1pbihkZXN0aW5hdGlvbk9mZnNldCwgb3Jp
Z2luYWwpIHx8IGNhbmRpZGF0ZSA+PSBzdGQ6Om1heChkZXN0aW5hdGlvbk9mZnNldCwgb3JpZ2lu
YWwpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gIXNuYXBTdG9w
IHx8IHN0ZDo6YWJzKGZsb2F0IHsgY2FuZGlkYXRlIC0gb3JpZ2luYWwgfSkgPCBzdGQ6OmFicyhm
bG9hdCB7ICgqc25hcFN0b3ApLmZpcnN0IC0gb3JpZ2luYWwgfSk7CiAgICAgfTsKIAotICAgIGZv
ciAoaW50IGkgPSBzZWFyY2hTdGFydE9mZnNldDsgaSA+PSAwICYmIHN0YXRpY19jYXN0PHNpemVf
dD4oaSkgPCBzbmFwT2Zmc2V0cy5zaXplKCk7IGkgKz0gaXRlcmF0aW9uKSB7Ci0gICAgICAgIGF1
dG8gb2Zmc2V0ID0gc25hcE9mZnNldHNbaV0ub2Zmc2V0OwotICAgICAgICBpZiAoaXNQYXN0KHNj
cm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBvZmZzZXQpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGlmIChzbmFwT2Zmc2V0c1tpXS5zdG9wICE9IFNjcm9sbFNuYXBTdG9wOjpBbHdheXMpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGlzUGFzdChzY3JvbGxPcmlnaW5PZmZz
ZXQsIG9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gaTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc25hcE9mZnNldHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgVW5pdFR5cGUgcG90
ZW50aWFsU25hcE9mZnNldCA9IHNuYXBPZmZzZXRzW2ldLm9mZnNldDsKKyAgICAgICAgaWYgKHBv
dGVudGlhbFNuYXBPZmZzZXQgPT0gZGVzdGluYXRpb25PZmZzZXQpCisgICAgICAgICAgICBleGFj
dCA9IHN0ZDo6bWFrZV9wYWlyKHBvdGVudGlhbFNuYXBPZmZzZXQsIGkpOworICAgICAgICBlbHNl
IGlmIChwb3RlbnRpYWxTbmFwT2Zmc2V0IDwgZGVzdGluYXRpb25PZmZzZXQpCisgICAgICAgICAg
ICBwcmV2aW91cyA9IHN0ZDo6bWFrZV9wYWlyKHBvdGVudGlhbFNuYXBPZmZzZXQsIGkpOworICAg
ICAgICBlbHNlIGlmICghbmV4dCAmJiBwb3RlbnRpYWxTbmFwT2Zmc2V0ID4gZGVzdGluYXRpb25P
ZmZzZXQpCisgICAgICAgICAgICBuZXh0ID0gc3RkOjptYWtlX3BhaXIocG90ZW50aWFsU25hcE9m
ZnNldCwgaSk7CisKKyAgICAgICAgaWYgKHNuYXBPZmZzZXRzW2ldLnN0b3AgPT0gU2Nyb2xsU25h
cFN0b3A6OkFsd2F5cyAmJiBpc0JldHRlclNuYXBTdG9wKHBvdGVudGlhbFNuYXBPZmZzZXQpKQor
ICAgICAgICAgICAgc25hcFN0b3AgPSBzdGQ6Om1ha2VfcGFpcihwb3RlbnRpYWxTbmFwT2Zmc2V0
LCBpKTsKICAgICB9CiAKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmIChleGFjdCkK
KyAgICAgICAgcmV0dXJuIHsgZXhhY3QsIGV4YWN0LCBzbmFwU3RvcCB9OworICAgIHJldHVybiB7
IHByZXZpb3VzLCBuZXh0LCBzbmFwU3RvcCB9OwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW5m
b1R5cGUsIHR5cGVuYW1lIFNpemVUeXBlLCB0eXBlbmFtZSBMYXlvdXRUeXBlPgpAQCAtMTA0LDEw
ICs5Miw5IEBAIHN0YXRpYyBzdGQ6OnBhaXI8TGF5b3V0VHlwZSwgc3RkOjpvcHRpb25hbDx1bnNp
Z25lZD4+IGNsb3Nlc3RTbmFwT2Zmc2V0V2l0aEluZm9BCiAgICAgaWYgKHNuYXBPZmZzZXRzLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHBhaXJGb3JOb1NuYXBwaW5nOwogCi0gICAgaWYgKG9y
aWdpbmFsT2Zmc2V0Rm9yRGlyZWN0aW9uYWxTbmFwcGluZykgewotICAgICAgICBpZiAoYXV0byBm
aXJzdFNuYXBTdG9wT2Zmc2V0SW5kZXggPSBmaW5kRmlyc3RTbmFwU3RvcE9mZnNldEJldHdlZW5P
cmlnaW5BbmREZXN0aW5hdGlvbihzbmFwT2Zmc2V0cywgKm9yaWdpbmFsT2Zmc2V0Rm9yRGlyZWN0
aW9uYWxTbmFwcGluZywgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQpKQotICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bWFrZV9wYWlyKHNuYXBPZmZzZXRzWypmaXJzdFNuYXBTdG9wT2Zmc2V0SW5kZXhd
Lm9mZnNldCwgZmlyc3RTbmFwU3RvcE9mZnNldEluZGV4KTsKLSAgICB9CisgICAgYXV0byBbcHJl
dmlvdXMsIG5leHQsIHNuYXBTdG9wXSA9IHNlYXJjaEZvclBvdGVudGlhbFNuYXBQb2ludHMoaW5m
bywgYXhpcywgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIG9yaWdpbmFsT2Zmc2V0Rm9yRGlyZWN0
aW9uYWxTbmFwcGluZyk7CisgICAgaWYgKHNuYXBTdG9wKQorICAgICAgICByZXR1cm4gKnNuYXBT
dG9wOwogCiAgICAgYXV0byB2aWV3cG9ydExlbmd0aCA9IGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlz
OjpIb3Jpem9udGFsID8gdmlld3BvcnRTaXplLndpZHRoKCkgOiB2aWV3cG9ydFNpemUuaGVpZ2h0
KCk7CiAgICAgYXV0byBpc05lYXJFbm91Z2hUb09mZnNldEZvclByb3hpbWl0eSA9IFsmXShMYXlv
dXRUeXBlIGNhbmRpZGF0ZVNuYXBPZmZzZXQpIHsKQEAgLTEyOCw0MSArMTE1LDM2IEBAIHN0YXRp
YyBzdGQ6OnBhaXI8TGF5b3V0VHlwZSwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4+IGNsb3Nlc3RT
bmFwT2Zmc2V0V2l0aEluZm9BCiAgICAgICAgIHJldHVybiBpc05lYXJFbm91Z2hUb09mZnNldEZv
clByb3hpbWl0eShzbmFwT2Zmc2V0cy5sYXN0KCkub2Zmc2V0KSA/IHN0ZDo6bWFrZV9wYWlyKHNu
YXBPZmZzZXRzLmxhc3QoKS5vZmZzZXQsIHN0ZDo6bWFrZV9vcHRpb25hbChsYXN0SW5kZXgpKSA6
IHBhaXJGb3JOb1NuYXBwaW5nOwogICAgIH0KIAotICAgIGF1dG8gW2xvd2VySW5kZXgsIHVwcGVy
SW5kZXhdID0gaW5kaWNlc09mTmVhcmVzdFNuYXBPZmZzZXRzPExheW91dFR5cGU+KHNjcm9sbERl
c3RpbmF0aW9uT2Zmc2V0LCBzbmFwT2Zmc2V0cyk7Ci0gICAgQVNTRVJUKGxvd2VySW5kZXgpOwot
ICAgIEFTU0VSVCh1cHBlckluZGV4KTsKLSAgICBMYXlvdXRUeXBlIGxvd2VyU25hcFBvc2l0aW9u
ID0gc25hcE9mZnNldHNbKmxvd2VySW5kZXhdLm9mZnNldDsKLSAgICBMYXlvdXRUeXBlIHVwcGVy
U25hcFBvc2l0aW9uID0gc25hcE9mZnNldHNbKnVwcGVySW5kZXhdLm9mZnNldDsKLQotICAgIGlm
ICghaXNOZWFyRW5vdWdoVG9PZmZzZXRGb3JQcm94aW1pdHkobG93ZXJTbmFwUG9zaXRpb24pKSB7
Ci0gICAgICAgIGxvd2VyU25hcFBvc2l0aW9uID0gc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQ7Ci0g
ICAgICAgIGxvd2VySW5kZXgucmVzZXQoKTsKLSAgICB9Ci0KLSAgICBpZiAoIWlzTmVhckVub3Vn
aFRvT2Zmc2V0Rm9yUHJveGltaXR5KHVwcGVyU25hcFBvc2l0aW9uKSkgewotICAgICAgICB1cHBl
clNuYXBQb3NpdGlvbiA9IHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0OwotICAgICAgICB1cHBlcklu
ZGV4LnJlc2V0KCk7CisgICAgaWYgKHByZXZpb3VzICYmICFpc05lYXJFbm91Z2hUb09mZnNldEZv
clByb3hpbWl0eSgoKnByZXZpb3VzKS5maXJzdCkpCisgICAgICAgIHByZXZpb3VzLnJlc2V0KCk7
CisgICAgaWYgKG5leHQgJiYgIWlzTmVhckVub3VnaFRvT2Zmc2V0Rm9yUHJveGltaXR5KCgqbmV4
dCkuZmlyc3QpKQorICAgICAgICBuZXh0LnJlc2V0KCk7CiAKKyAgICBpZiAob3JpZ2luYWxPZmZz
ZXRGb3JEaXJlY3Rpb25hbFNuYXBwaW5nKSB7CisgICAgICAgIC8vIEZyb20gaHR0cHM6Ly93d3cu
dzMub3JnL1RSL2Nzcy1zY3JvbGwtc25hcC0xLyNjaG9vc2luZworICAgICAgICAvLyAiVXNlciBh
Z2VudHMgbXVzdCBlbnN1cmUgdGhhdCBhIHVzZXIgY2FuIOKAnGVzY2FwZeKAnSBhIHNuYXAgcG9z
aXRpb24sIHJlZ2FyZGxlc3Mgb2YgdGhlIHNjcm9sbAorICAgICAgICAvLyBtZXRob2QuIEZvciBl
eGFtcGxlLCBpZiB0aGUgc25hcCB0eXBlIGlzIG1hbmRhdG9yeSBhbmQgdGhlIG5leHQgc25hcCBw
b3NpdGlvbiBpcyBtb3JlIHRoYW4KKyAgICAgICAgLy8gdHdvIHNjcmVlbi13aWR0aHMgYXdheSwg
YSBuYcOvdmUg4oCcYWx3YXlzIHNuYXAgdG8gbmVhcmVzdOKAnSBzZWxlY3Rpb24gYWxnb3JpdGht
IG1pZ2h0IOKAnHRyYXDigJ0gdGhlCisgICAgICAgIC8vCisgICAgICAgIC8vIEZvciBhIGRpcmVj
dGlvbmFsIHNjcm9sbCwgd2UgbmV2ZXIgc25hcCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzY3JvbGwg
cG9zaXRpb24gb3IgYmVmb3JlIGl0LAorICAgICAgICAvLyBhbHdheXMgcHJlZmVycmluZyB0aGUg
c25hcCBvZmZzZXQgaW4gdGhlIHNjcm9sbCBkaXJlY3Rpb24uCisgICAgICAgIGlmICgqb3JpZ2lu
YWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNuYXBwaW5nIDwgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQg
JiYgcHJldmlvdXMgJiYgKCpwcmV2aW91cykuZmlyc3QgPD0gKm9yaWdpbmFsT2Zmc2V0Rm9yRGly
ZWN0aW9uYWxTbmFwcGluZykKKyAgICAgICAgICAgIHByZXZpb3VzLnJlc2V0KCk7CisgICAgICAg
IGlmICgqb3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNuYXBwaW5nID4gc2Nyb2xsRGVzdGlu
YXRpb25PZmZzZXQgJiYgbmV4dCAmJiAoKm5leHQpLmZpcnN0ID49ICpvcmlnaW5hbE9mZnNldEZv
ckRpcmVjdGlvbmFsU25hcHBpbmcpCisgICAgICAgICAgICBuZXh0LnJlc2V0KCk7CiAgICAgfQog
Ci0gICAgaWYgKCFzdGQ6OmFicyh2ZWxvY2l0eSkpIHsKLSAgICAgICAgYm9vbCBpc0Nsb3NlclRv
TG93ZXJTbmFwUG9zaXRpb24gPSAhdXBwZXJJbmRleCB8fCAobG93ZXJJbmRleCAmJiBzY3JvbGxE
ZXN0aW5hdGlvbk9mZnNldCAtIGxvd2VyU25hcFBvc2l0aW9uIDw9IHVwcGVyU25hcFBvc2l0aW9u
IC0gc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQpOwotICAgICAgICByZXR1cm4gaXNDbG9zZXJUb0xv
d2VyU25hcFBvc2l0aW9uID8gc3RkOjptYWtlX3BhaXIobG93ZXJTbmFwUG9zaXRpb24sIGxvd2Vy
SW5kZXgpIDogc3RkOjptYWtlX3BhaXIodXBwZXJTbmFwUG9zaXRpb24sIHVwcGVySW5kZXgpOwot
ICAgIH0KLQotICAgIC8vIE5vbi16ZXJvIHZlbG9jaXR5IGluZGljYXRlcyBhIGZsaWNrIGdlc3R1
cmUuIEV2ZW4gaWYgYW5vdGhlciBzbmFwIHBvaW50IGlzIGNsb3Nlciwgd2Ugc2hvdWxkIGNob29z
ZSB0aGUgb25lIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGZsaWNrIGdlc3R1cmUKLSAgICAvLyBh
cyBsb25nIGFzIGEgc2Nyb2xsIHNuYXAgb2Zmc2V0IGlzIGNsb3NlIGVub3VnaCBmb3IgcHJveGlt
aXR5IChvciB3ZSBhcmVuJ3QgdXNpbmcgcHJveGltaXR5KS4gSWYgd2UgYXJlIGRvaW5nIGRpcmVj
dGlvbmFsCi0gICAgLy8gc25hcHBpbmcsIHdlIHNob3VsZCBuZXZlciBzbmFwIHRvIGEgcG9pbnQg
dGhhdCB3YXMgb24gdGhlIG90aGVyIHNpZGUgb2YgdGhlIG9yaWdpbmFsIHBvc2l0aW9uIGluIHRo
ZSBvcHBvc2l0ZSBkaXJlY3Rpb24gb2YgdGhpcyBzY3JvbGwuCi0gICAgLy8gVGhpcyBhbGxvd3Mg
ZGlyZWN0aW9uYWwgc2Nyb2xsaW5nIHRvIGVzY2FwZSBzbmFwIHBvaW50cy4KLSAgICBpZiAodmVs
b2NpdHkgPCAwKSAgewotICAgICAgICBpZiAodXBwZXJJbmRleCAmJiAoIW9yaWdpbmFsT2Zmc2V0
Rm9yRGlyZWN0aW9uYWxTbmFwcGluZyB8fCAqb3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNu
YXBwaW5nID4gdXBwZXJTbmFwUG9zaXRpb24pKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV9wYWlyKHVwcGVyU25hcFBvc2l0aW9uLCB1cHBlckluZGV4KTsKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV9wYWlyKGxvd2VyU25hcFBvc2l0aW9uLCBsb3dlckluZGV4KTsKLSAgICB9Ci0KLSAg
ICBpZiAobG93ZXJJbmRleCAmJiAoIW9yaWdpbmFsT2Zmc2V0Rm9yRGlyZWN0aW9uYWxTbmFwcGlu
ZyB8fCAqb3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNuYXBwaW5nIDwgbG93ZXJTbmFwUG9z
aXRpb24pKQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobG93ZXJTbmFwUG9zaXRpb24s
IGxvd2VySW5kZXgpOwotICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcih1cHBlclNuYXBQb3NpdGlv
biwgdXBwZXJJbmRleCk7CisgICAgaWYgKCFwcmV2aW91cyAmJiAhbmV4dCkKKyAgICAgICAgcmV0
dXJuIHBhaXJGb3JOb1NuYXBwaW5nOworICAgIGlmICghcHJldmlvdXMpCisgICAgICAgIHJldHVy
biAqbmV4dDsKKyAgICBpZiAoIW5leHQpCisgICAgICAgIHJldHVybiAqcHJldmlvdXM7CisKKyAg
ICAvLyBJZiB0aGlzIHNjcm9sbCBpc24ndCBkaXJlY3Rpb25hbCwgdGhlbiBjaG9vc2Ugd2hhdGV2
ZXIgc25hcCBwb2ludCBpcyBjbG9zZXIsIG90aGVyd2lzZSBwaWNrIHRoZSBvZmZzZXQgaW4gdGhl
IHNjcm9sbCBkaXJlY3Rpb24uCisgICAgaWYgKCFzdGQ6OmFicyh2ZWxvY2l0eSkpCisgICAgICAg
IHJldHVybiAoc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQgLSAoKnByZXZpb3VzKS5maXJzdCkgPD0g
KCgqbmV4dCkuZmlyc3QgLSBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCkgPyAqcHJldmlvdXMgOiAq
bmV4dDsKKyAgICByZXR1cm4gdmVsb2NpdHkgPCAwID8gKnByZXZpb3VzIDogKm5leHQ7CiB9CiAK
IGVudW0gY2xhc3MgSW5zZXRPck91dHNldCB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432244</attachid>
            <date>2021-06-25 00:24:22 -0700</date>
            <delta_ts>2021-06-25 00:45:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227062-20210625092420.patch</filename>
            <type>text/plain</type>
            <size>11433</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MjE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmI5YWY3MzQ5ZjJhNWU5
MjAzNDRiMDdiMmYwZWFkODZkYzYzYTUyMC4uMjE3NWFkMjY4NWM4MWY4NGZkODkzMzM3NGI0ZTM5
MTdkZWVmMjhmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDIxLTA2LTI0ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KKworICAgICAgICBbY3NzLXNjcm9s
bC1zbmFwXSBTaW1wbGlmeSBzbmFwIHBvaW50IHNlbGVjdGlvbiBoZWxwZXJzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwNjIKKworICAgICAgICBS
ZXZpZXdlZCBieSBGcsOpZMOpcmljIFdhbmcuCisKKyAgICAgICAgQ29tYmluZSBpbmRpY2VzT2ZO
ZWFyZXN0U25hcE9mZnNldHMgYW5kIGZpbmRGaXJzdFNuYXBTdG9wT2Zmc2V0QmV0d2Vlbk9yaWdp
bkFuZERlc3RpbmF0aW9uCisgICAgICAgIGFuZCBoYXZlIHRoZSBoZWxwZXIgcmV0dXJuIHRoZSBn
ZW9tZXRyaWMgcHJldmlvdXMgYW5kIG5leHQgc25hcCBwb2ludHMuIFRoaXMgbWFrZXMgdGhlCisg
ICAgICAgIGNvZGUgYSBiaXQgZWFzaWVyIHRvIHJlYWQsIHNsaWdodGx5IG1vcmUgZWZmaWNpZW50
LCBhbmQgcHJlcGFyZXMgZm9yIGxvb2tpbmcgYXQKKyAgICAgICAgdGhlIGdlb21ldHJpYyBwcmV2
aW91cyBhbmQgbmV4dCBzbmFwIHBvaW50cyBmb3IgY2VydGFpbiB1cGNvbWluZyBDU1MgU2Nyb2xs
IFNuYXAgZmVhdHVyZXMuCisKKyAgICAgICAgUHJldmlvdXNseSwgaW5kaWNlc09mTmVhcmVzdFNu
YXBPZmZzZXRzIHVzZWQgYSBiaW5hcnkgc2VhcmNoIGFuZCBmaW5kRmlyc3RTbmFwU3RvcE9mZnNl
dEJldHdlZW5PcmlnaW5BbmREZXN0aW5hdGlvbgorICAgICAgICB1c2VkIGEgbGluZWFyIHNlYXJj
aC4gVGhpcyBjaGFuZ2UgcmVwbGFjZXMgdGhlc2UgdHdvIGZ1bmN0aW9ucyB3aXRoIGEgc2luZ2xl
IGxpbmVhciBzZWFyY2guCisgICAgICAgIFdoaWxlIGZpbmRGaXJzdFNuYXBTdG9wT2Zmc2V0QmV0
d2Vlbk9yaWdpbkFuZERlc3RpbmF0aW9uIGlzIG9ubHkgY2FsbGVkIGZvciBkaXJlY3Rpb25hbCBz
Y3JvbGxpbmcsCisgICAgICAgIGRpcmVjdGlvbmFsIHNjcm9sbGluZyBpcyBtb3JlIGNvbW1vbiB0
aGFuIG5vbi1kaXJlY3Rpb25hbCBzY3JvbGxpbmcgKHdoaWNoIGlzIHR5cGljYWxseSBvbmx5IGNh
bGxlZAorICAgICAgICBieSBzY3JvbGxJbnRvVmlldygpIGFuZCBvdGhlciBKUyBzY3JvbGxpbmcg
QVBJcykuIEkgaGF2ZSB0ZXN0ZWQgdGhpcyBjaGFuZ2Ugd2l0aCBhIGxhcmdlIHRhYmxlIG9mCisg
ICAgICAgIG9mIHNuYXAgcG9pbnRzIGFuZCBwZXJmb3JtYW5jZSBkb2VzIG5vdCBzZWVtIHRvIGJl
IGNoYW5nZWQuIEluIGFkZGl0aW9uLCBhIGZ1dHVyZSBjaGFuZ2Ugc2hvdWxkIG1lYW4KKyAgICAg
ICAgdGhhdCB0aGlzIHNlYXJjaEZvclBvdGVudGlhbFNuYXBQb2ludHMgc2hvdWxkIGJlIGNhbGxl
ZCBtdWNoIGxlc3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlzIHNob3VsZCBub3QgY2hh
bmdlIGJlaGF2aW9yIGluIGFueSB3YXkuCisKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3Jv
bGxTbmFwT2Zmc2V0c0luZm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2VhcmNoRm9yUG90ZW50
aWFsU25hcFBvaW50cyk6IEFkZGVkIHRoaXMgbmV3IGhlbHBlciB3aGljaCBpcyB0aGUgY29tYmlu
YXRpb24KKyAgICAgICAgb2YgaW5kaWNlc09mTmVhcmVzdFNuYXBPZmZzZXRzIGFuZCBmaW5kRmly
c3RTbmFwU3RvcE9mZnNldEJldHdlZW5PcmlnaW5BbmREZXN0aW5hdGlvbi4KKyAgICAgICAgKFdl
YkNvcmU6OmNsb3Nlc3RTbmFwT2Zmc2V0V2l0aEluZm9BbmRBeGlzKTogVXNlIHRoZSBuZXcgaGVs
cGVyLgorCiAyMDIxLTA2LTIzICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CiAK
ICAgICAgICAgTm90IGFsbCB1c2VzIG9mIEF1ZGlvVG9vbGJveCBmcmFtZXdvcmsgdXNlIHNvZnQg
bGlua2luZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
U25hcE9mZnNldHNJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bFNuYXBPZmZzZXRzSW5mby5jcHAKaW5kZXggN2I4NzViOWRhZjllYzgzYjZkOTdkNTNiNWNkOGVk
NmQ5OTIxZWFjMS4uZGU0NTZiZDE1MDBmYmU3NjllMzdlNWRhNTQ1ZDA3NDcwN2Q4MThlMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJ
bmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zm
c2V0c0luZm8uY3BwCkBAIC00Miw1OCArNDIsNDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5b3V0VHlwZT4KLXN0YXRpYyBzdGQ6OnBhaXI8c3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4sIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBpbmRpY2VzT2ZOZWFy
ZXN0U25hcE9mZnNldHMoTGF5b3V0VHlwZSBvZmZzZXQsIGNvbnN0IFZlY3RvcjxTbmFwT2Zmc2V0
PExheW91dFR5cGU+PiYgc25hcE9mZnNldHMpCi17Ci0gICAgdW5zaWduZWQgbG93ZXJJbmRleCA9
IDA7Ci0gICAgdW5zaWduZWQgdXBwZXJJbmRleCA9IHNuYXBPZmZzZXRzLnNpemUoKSAtIDE7Ci0g
ICAgd2hpbGUgKGxvd2VySW5kZXggPCB1cHBlckluZGV4IC0gMSkgewotICAgICAgICBpbnQgbWlk
ZGxlSW5kZXggPSAobG93ZXJJbmRleCArIHVwcGVySW5kZXgpIC8gMjsKLSAgICAgICAgYXV0byBt
aWRkbGVPZmZzZXQgPSBzbmFwT2Zmc2V0c1ttaWRkbGVJbmRleF0ub2Zmc2V0OwotICAgICAgICBp
ZiAob2Zmc2V0ID09IG1pZGRsZU9mZnNldCkgewotICAgICAgICAgICAgdXBwZXJJbmRleCA9IG1p
ZGRsZUluZGV4OwotICAgICAgICAgICAgbG93ZXJJbmRleCA9IG1pZGRsZUluZGV4OwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAob2Zmc2V0ID4gbWlkZGxlT2Zm
c2V0KQotICAgICAgICAgICAgbG93ZXJJbmRleCA9IG1pZGRsZUluZGV4OwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB1cHBlckluZGV4ID0gbWlkZGxlSW5kZXg7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHN0ZDo6bWFrZV9wYWlyKGxvd2VySW5kZXgsIHVwcGVySW5kZXgpOwotfQordGVtcGxhdGUg
PHR5cGVuYW1lIFVuaXRUeXBlPgorc3RydWN0IFBvdGVudGlhbFNuYXBQb2ludFNlYXJjaFJlc3Vs
dCB7CisgICAgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8VW5pdFR5cGUsIHVuc2lnbmVkPj4gcHJl
dmlvdXM7CisgICAgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8VW5pdFR5cGUsIHVuc2lnbmVkPj4g
bmV4dDsKKyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6cGFpcjxVbml0VHlwZSwgdW5zaWduZWQ+PiBz
bmFwU3RvcDsKK307CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBMYXlvdXRUeXBlPgotc3RhdGljIHN0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGZpbmRGaXJzdFNuYXBTdG9wT2Zmc2V0QmV0d2Vlbk9yaWdp
bkFuZERlc3RpbmF0aW9uKGNvbnN0IFZlY3RvcjxTbmFwT2Zmc2V0PExheW91dFR5cGU+PiYgc25h
cE9mZnNldHMsIExheW91dFR5cGUgc2Nyb2xsT3JpZ2luT2Zmc2V0LCBMYXlvdXRUeXBlIHNjcm9s
bERlc3RpbmF0aW9uT2Zmc2V0KQordGVtcGxhdGUgPHR5cGVuYW1lIEluZm9UeXBlLCB0eXBlbmFt
ZSBVbml0VHlwZT4KK3N0YXRpYyBQb3RlbnRpYWxTbmFwUG9pbnRTZWFyY2hSZXN1bHQ8VW5pdFR5
cGU+IHNlYXJjaEZvclBvdGVudGlhbFNuYXBQb2ludHMoY29uc3QgSW5mb1R5cGUmIGluZm8sIFNj
cm9sbEV2ZW50QXhpcyBheGlzLCBVbml0VHlwZSBkZXN0aW5hdGlvbk9mZnNldCwgc3RkOjpvcHRp
b25hbDxVbml0VHlwZT4gb3JpZ2luYWxPZmZzZXQpCiB7Ci0gICAgTGF5b3V0VHlwZSBkaWZmZXJl
bmNlID0gc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQgLSBzY3JvbGxPcmlnaW5PZmZzZXQ7Ci0gICAg
aWYgKCFkaWZmZXJlbmNlKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgdW5z
aWduZWQgc2VhcmNoU3RhcnRPZmZzZXQgPSAwOwotICAgIHNpemVfdCBpdGVyYXRpb24gPSAxOwot
ICAgIGlmIChkaWZmZXJlbmNlIDwgMCkgewotICAgICAgICBzZWFyY2hTdGFydE9mZnNldCA9IHNu
YXBPZmZzZXRzLnNpemUoKSAtIDE7Ci0gICAgICAgIGl0ZXJhdGlvbiA9IC0xOwotICAgIH0KLQot
ICAgIGF1dG8gaXNQYXN0ID0gW2RpZmZlcmVuY2VdKExheW91dFR5cGUgbWFyaywgTGF5b3V0VHlw
ZSBjYW5kaWRhdGUpIHsKLSAgICAgICAgcmV0dXJuIChkaWZmZXJlbmNlID4gMCAmJiBjYW5kaWRh
dGUgPiBtYXJrKSB8fCAoZGlmZmVyZW5jZSA8IDAgJiYgY2FuZGlkYXRlIDwgbWFyayk7CisgICAg
Y29uc3QgYXV0byYgc25hcE9mZnNldHMgPSBpbmZvLm9mZnNldHNGb3JBeGlzKGF4aXMpOworICAg
IHN0ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPFVuaXRUeXBlLCB1bnNpZ25lZD4+IHByZXZpb3VzLCBu
ZXh0LCBleGFjdCwgc25hcFN0b3A7CisKKyAgICAvLyBBIHBhcnRpY3VsYXIgc25hcCBzdG9wIGlz
IGJldHRlciBpZiBpdCdzIGJldHdlZW4gdGhlIG9yaWdpbmFsIG9mZnNldCBhbmQgZGVzdGluYXRp
b24gb2Zmc2V0IGFuZCBjbG9zZXIgb3JpZ2luYWwKKyAgICAvLyBvZmZzZXQgdGhhbiB0aGUgcHJl
dmlvdXNseSBzZWxlY3RlZCBzbmFwIHN0b3AuIFdlIGFsd2F5cyB3YW50IHRvIHN0b3AgYXQgdGhl
IHNuYXAgc3RvcCBjbG9zZXN0IHRvIHRoZSBvcmlnaW5hbCBvZmZzZXQuCisgICAgYXV0byBpc0Jl
dHRlclNuYXBTdG9wID0gWyZdKFVuaXRUeXBlIGNhbmRpZGF0ZSkgeworICAgICAgICBpZiAoIW9y
aWdpbmFsT2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhdXRvIG9y
aWdpbmFsID0gKm9yaWdpbmFsT2Zmc2V0OworICAgICAgICBpZiAoY2FuZGlkYXRlIDw9IHN0ZDo6
bWluKGRlc3RpbmF0aW9uT2Zmc2V0LCBvcmlnaW5hbCkgfHwgY2FuZGlkYXRlID49IHN0ZDo6bWF4
KGRlc3RpbmF0aW9uT2Zmc2V0LCBvcmlnaW5hbCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHJldHVybiAhc25hcFN0b3AgfHwgc3RkOjphYnMoZmxvYXQgeyBjYW5kaWRhdGUg
LSBvcmlnaW5hbCB9KSA8IHN0ZDo6YWJzKGZsb2F0IHsgKCpzbmFwU3RvcCkuZmlyc3QgLSBvcmln
aW5hbCB9KTsKICAgICB9OwogCi0gICAgZm9yIChpbnQgaSA9IHNlYXJjaFN0YXJ0T2Zmc2V0OyBp
ID49IDAgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihpKSA8IHNuYXBPZmZzZXRzLnNpemUoKTsgaSAr
PSBpdGVyYXRpb24pIHsKLSAgICAgICAgYXV0byBvZmZzZXQgPSBzbmFwT2Zmc2V0c1tpXS5vZmZz
ZXQ7Ci0gICAgICAgIGlmIChpc1Bhc3Qoc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIG9mZnNldCkp
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKHNuYXBPZmZzZXRzW2ldLnN0b3AgIT0g
U2Nyb2xsU25hcFN0b3A6OkFsd2F5cykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBp
ZiAoaXNQYXN0KHNjcm9sbE9yaWdpbk9mZnNldCwgb2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVy
biBpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzbmFwT2Zmc2V0cy5zaXplKCk7IGkr
KykgeworICAgICAgICBVbml0VHlwZSBwb3RlbnRpYWxTbmFwT2Zmc2V0ID0gc25hcE9mZnNldHNb
aV0ub2Zmc2V0OworICAgICAgICBpZiAocG90ZW50aWFsU25hcE9mZnNldCA9PSBkZXN0aW5hdGlv
bk9mZnNldCkKKyAgICAgICAgICAgIGV4YWN0ID0gc3RkOjptYWtlX3BhaXIocG90ZW50aWFsU25h
cE9mZnNldCwgaSk7CisgICAgICAgIGVsc2UgaWYgKHBvdGVudGlhbFNuYXBPZmZzZXQgPCBkZXN0
aW5hdGlvbk9mZnNldCkKKyAgICAgICAgICAgIHByZXZpb3VzID0gc3RkOjptYWtlX3BhaXIocG90
ZW50aWFsU25hcE9mZnNldCwgaSk7CisgICAgICAgIGVsc2UgaWYgKCFuZXh0ICYmIHBvdGVudGlh
bFNuYXBPZmZzZXQgPiBkZXN0aW5hdGlvbk9mZnNldCkKKyAgICAgICAgICAgIG5leHQgPSBzdGQ6
Om1ha2VfcGFpcihwb3RlbnRpYWxTbmFwT2Zmc2V0LCBpKTsKKworICAgICAgICBpZiAoc25hcE9m
ZnNldHNbaV0uc3RvcCA9PSBTY3JvbGxTbmFwU3RvcDo6QWx3YXlzICYmIGlzQmV0dGVyU25hcFN0
b3AocG90ZW50aWFsU25hcE9mZnNldCkpCisgICAgICAgICAgICBzbmFwU3RvcCA9IHN0ZDo6bWFr
ZV9wYWlyKHBvdGVudGlhbFNuYXBPZmZzZXQsIGkpOwogICAgIH0KIAotICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgaWYgKGV4YWN0KQorICAgICAgICByZXR1cm4geyBleGFjdCwgZXhhY3Qs
IHNuYXBTdG9wIH07CisgICAgcmV0dXJuIHsgcHJldmlvdXMsIG5leHQsIHNuYXBTdG9wIH07CiB9
CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBJbmZvVHlwZSwgdHlwZW5hbWUgU2l6ZVR5cGUsIHR5cGVu
YW1lIExheW91dFR5cGU+CkBAIC0xMDQsMTAgKzkyLDkgQEAgc3RhdGljIHN0ZDo6cGFpcjxMYXlv
dXRUeXBlLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPj4gY2xvc2VzdFNuYXBPZmZzZXRXaXRoSW5m
b0EKICAgICBpZiAoc25hcE9mZnNldHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gcGFpckZv
ck5vU25hcHBpbmc7CiAKLSAgICBpZiAob3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNuYXBw
aW5nKSB7Ci0gICAgICAgIGlmIChhdXRvIGZpcnN0U25hcFN0b3BPZmZzZXRJbmRleCA9IGZpbmRG
aXJzdFNuYXBTdG9wT2Zmc2V0QmV0d2Vlbk9yaWdpbkFuZERlc3RpbmF0aW9uKHNuYXBPZmZzZXRz
LCAqb3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNuYXBwaW5nLCBzY3JvbGxEZXN0aW5hdGlv
bk9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc25hcE9mZnNldHNb
KmZpcnN0U25hcFN0b3BPZmZzZXRJbmRleF0ub2Zmc2V0LCBmaXJzdFNuYXBTdG9wT2Zmc2V0SW5k
ZXgpOwotICAgIH0KKyAgICBhdXRvIFtwcmV2aW91cywgbmV4dCwgc25hcFN0b3BdID0gc2VhcmNo
Rm9yUG90ZW50aWFsU25hcFBvaW50cyhpbmZvLCBheGlzLCBzY3JvbGxEZXN0aW5hdGlvbk9mZnNl
dCwgb3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNuYXBwaW5nKTsKKyAgICBpZiAoc25hcFN0
b3ApCisgICAgICAgIHJldHVybiAqc25hcFN0b3A7CiAKICAgICBhdXRvIHZpZXdwb3J0TGVuZ3Ro
ID0gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyB2aWV3cG9ydFNpemUud2lk
dGgoKSA6IHZpZXdwb3J0U2l6ZS5oZWlnaHQoKTsKICAgICBhdXRvIGlzTmVhckVub3VnaFRvT2Zm
c2V0Rm9yUHJveGltaXR5ID0gWyZdKExheW91dFR5cGUgY2FuZGlkYXRlU25hcE9mZnNldCkgewpA
QCAtMTI4LDQxICsxMTUsMzcgQEAgc3RhdGljIHN0ZDo6cGFpcjxMYXlvdXRUeXBlLCBzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPj4gY2xvc2VzdFNuYXBPZmZzZXRXaXRoSW5mb0EKICAgICAgICAgcmV0
dXJuIGlzTmVhckVub3VnaFRvT2Zmc2V0Rm9yUHJveGltaXR5KHNuYXBPZmZzZXRzLmxhc3QoKS5v
ZmZzZXQpID8gc3RkOjptYWtlX3BhaXIoc25hcE9mZnNldHMubGFzdCgpLm9mZnNldCwgc3RkOjpt
YWtlX29wdGlvbmFsKGxhc3RJbmRleCkpIDogcGFpckZvck5vU25hcHBpbmc7CiAgICAgfQogCi0g
ICAgYXV0byBbbG93ZXJJbmRleCwgdXBwZXJJbmRleF0gPSBpbmRpY2VzT2ZOZWFyZXN0U25hcE9m
ZnNldHM8TGF5b3V0VHlwZT4oc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIHNuYXBPZmZzZXRzKTsK
LSAgICBBU1NFUlQobG93ZXJJbmRleCk7Ci0gICAgQVNTRVJUKHVwcGVySW5kZXgpOwotICAgIExh
eW91dFR5cGUgbG93ZXJTbmFwUG9zaXRpb24gPSBzbmFwT2Zmc2V0c1sqbG93ZXJJbmRleF0ub2Zm
c2V0OwotICAgIExheW91dFR5cGUgdXBwZXJTbmFwUG9zaXRpb24gPSBzbmFwT2Zmc2V0c1sqdXBw
ZXJJbmRleF0ub2Zmc2V0OwotCi0gICAgaWYgKCFpc05lYXJFbm91Z2hUb09mZnNldEZvclByb3hp
bWl0eShsb3dlclNuYXBQb3NpdGlvbikpIHsKLSAgICAgICAgbG93ZXJTbmFwUG9zaXRpb24gPSBz
Y3JvbGxEZXN0aW5hdGlvbk9mZnNldDsKLSAgICAgICAgbG93ZXJJbmRleC5yZXNldCgpOwotICAg
IH0KLQotICAgIGlmICghaXNOZWFyRW5vdWdoVG9PZmZzZXRGb3JQcm94aW1pdHkodXBwZXJTbmFw
UG9zaXRpb24pKSB7Ci0gICAgICAgIHVwcGVyU25hcFBvc2l0aW9uID0gc2Nyb2xsRGVzdGluYXRp
b25PZmZzZXQ7Ci0gICAgICAgIHVwcGVySW5kZXgucmVzZXQoKTsKKyAgICBpZiAocHJldmlvdXMg
JiYgIWlzTmVhckVub3VnaFRvT2Zmc2V0Rm9yUHJveGltaXR5KCgqcHJldmlvdXMpLmZpcnN0KSkK
KyAgICAgICAgcHJldmlvdXMucmVzZXQoKTsKKyAgICBpZiAobmV4dCAmJiAhaXNOZWFyRW5vdWdo
VG9PZmZzZXRGb3JQcm94aW1pdHkoKCpuZXh0KS5maXJzdCkpCisgICAgICAgIG5leHQucmVzZXQo
KTsKIAorICAgIGlmIChvcmlnaW5hbE9mZnNldEZvckRpcmVjdGlvbmFsU25hcHBpbmcpIHsKKyAg
ICAgICAgLy8gRnJvbSBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXNjcm9sbC1zbmFwLTEvI2No
b29zaW5nCisgICAgICAgIC8vICJVc2VyIGFnZW50cyBtdXN0IGVuc3VyZSB0aGF0IGEgdXNlciBj
YW4g4oCcZXNjYXBl4oCdIGEgc25hcCBwb3NpdGlvbiwgcmVnYXJkbGVzcyBvZiB0aGUgc2Nyb2xs
CisgICAgICAgIC8vIG1ldGhvZC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBzbmFwIHR5cGUgaXMgbWFu
ZGF0b3J5IGFuZCB0aGUgbmV4dCBzbmFwIHBvc2l0aW9uIGlzIG1vcmUgdGhhbgorICAgICAgICAv
LyB0d28gc2NyZWVuLXdpZHRocyBhd2F5LCBhIG5hw692ZSDigJxhbHdheXMgc25hcCB0byBuZWFy
ZXN04oCdIHNlbGVjdGlvbiBhbGdvcml0aG0gbWlnaHQg4oCcdHJhcOKAnSB0aGUKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gRm9yIGEgZGlyZWN0aW9uYWwgc2Nyb2xsLCB3ZSBuZXZlciBzbmFwIGJh
Y2sgdG8gdGhlIG9yaWdpbmFsIHNjcm9sbCBwb3NpdGlvbiBvciBiZWZvcmUgaXQsCisgICAgICAg
IC8vIGFsd2F5cyBwcmVmZXJyaW5nIHRoZSBzbmFwIG9mZnNldCBpbiB0aGUgc2Nyb2xsIGRpcmVj
dGlvbi4KKyAgICAgICAgYXV0byYgb3JpZ2luYWxPZmZzZXQgPSAqb3JpZ2luYWxPZmZzZXRGb3JE
aXJlY3Rpb25hbFNuYXBwaW5nOworICAgICAgICBpZiAob3JpZ2luYWxPZmZzZXQgPCBzY3JvbGxE
ZXN0aW5hdGlvbk9mZnNldCAmJiBwcmV2aW91cyAmJiAoKnByZXZpb3VzKS5maXJzdCA8PSBvcmln
aW5hbE9mZnNldCkKKyAgICAgICAgICAgIHByZXZpb3VzLnJlc2V0KCk7CisgICAgICAgIGlmIChv
cmlnaW5hbE9mZnNldCA+IHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0ICYmIG5leHQgJiYgKCpuZXh0
KS5maXJzdCA+PSBvcmlnaW5hbE9mZnNldCkKKyAgICAgICAgICAgIG5leHQucmVzZXQoKTsKICAg
ICB9CiAKLSAgICBpZiAoIXN0ZDo6YWJzKHZlbG9jaXR5KSkgewotICAgICAgICBib29sIGlzQ2xv
c2VyVG9Mb3dlclNuYXBQb3NpdGlvbiA9ICF1cHBlckluZGV4IHx8IChsb3dlckluZGV4ICYmIHNj
cm9sbERlc3RpbmF0aW9uT2Zmc2V0IC0gbG93ZXJTbmFwUG9zaXRpb24gPD0gdXBwZXJTbmFwUG9z
aXRpb24gLSBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCk7Ci0gICAgICAgIHJldHVybiBpc0Nsb3Nl
clRvTG93ZXJTbmFwUG9zaXRpb24gPyBzdGQ6Om1ha2VfcGFpcihsb3dlclNuYXBQb3NpdGlvbiwg
bG93ZXJJbmRleCkgOiBzdGQ6Om1ha2VfcGFpcih1cHBlclNuYXBQb3NpdGlvbiwgdXBwZXJJbmRl
eCk7Ci0gICAgfQotCi0gICAgLy8gTm9uLXplcm8gdmVsb2NpdHkgaW5kaWNhdGVzIGEgZmxpY2sg
Z2VzdHVyZS4gRXZlbiBpZiBhbm90aGVyIHNuYXAgcG9pbnQgaXMgY2xvc2VyLCB3ZSBzaG91bGQg
Y2hvb3NlIHRoZSBvbmUgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgZmxpY2sgZ2VzdHVyZQotICAg
IC8vIGFzIGxvbmcgYXMgYSBzY3JvbGwgc25hcCBvZmZzZXQgaXMgY2xvc2UgZW5vdWdoIGZvciBw
cm94aW1pdHkgKG9yIHdlIGFyZW4ndCB1c2luZyBwcm94aW1pdHkpLiBJZiB3ZSBhcmUgZG9pbmcg
ZGlyZWN0aW9uYWwKLSAgICAvLyBzbmFwcGluZywgd2Ugc2hvdWxkIG5ldmVyIHNuYXAgdG8gYSBw
b2ludCB0aGF0IHdhcyBvbiB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgb3JpZ2luYWwgcG9zaXRpb24g
aW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiBvZiB0aGlzIHNjcm9sbC4KLSAgICAvLyBUaGlzIGFs
bG93cyBkaXJlY3Rpb25hbCBzY3JvbGxpbmcgdG8gZXNjYXBlIHNuYXAgcG9pbnRzLgotICAgIGlm
ICh2ZWxvY2l0eSA8IDApICB7Ci0gICAgICAgIGlmICh1cHBlckluZGV4ICYmICghb3JpZ2luYWxP
ZmZzZXRGb3JEaXJlY3Rpb25hbFNuYXBwaW5nIHx8ICpvcmlnaW5hbE9mZnNldEZvckRpcmVjdGlv
bmFsU25hcHBpbmcgPiB1cHBlclNuYXBQb3NpdGlvbikpCi0gICAgICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX3BhaXIodXBwZXJTbmFwUG9zaXRpb24sIHVwcGVySW5kZXgpOwotICAgICAgICByZXR1
cm4gc3RkOjptYWtlX3BhaXIobG93ZXJTbmFwUG9zaXRpb24sIGxvd2VySW5kZXgpOwotICAgIH0K
LQotICAgIGlmIChsb3dlckluZGV4ICYmICghb3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNu
YXBwaW5nIHx8ICpvcmlnaW5hbE9mZnNldEZvckRpcmVjdGlvbmFsU25hcHBpbmcgPCBsb3dlclNu
YXBQb3NpdGlvbikpCi0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihsb3dlclNuYXBQb3Np
dGlvbiwgbG93ZXJJbmRleCk7Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHVwcGVyU25hcFBv
c2l0aW9uLCB1cHBlckluZGV4KTsKKyAgICBpZiAoIXByZXZpb3VzICYmICFuZXh0KQorICAgICAg
ICByZXR1cm4gcGFpckZvck5vU25hcHBpbmc7CisgICAgaWYgKCFwcmV2aW91cykKKyAgICAgICAg
cmV0dXJuICpuZXh0OworICAgIGlmICghbmV4dCkKKyAgICAgICAgcmV0dXJuICpwcmV2aW91czsK
KworICAgIC8vIElmIHRoaXMgc2Nyb2xsIGlzbid0IGRpcmVjdGlvbmFsLCB0aGVuIGNob29zZSB3
aGF0ZXZlciBzbmFwIHBvaW50IGlzIGNsb3Nlciwgb3RoZXJ3aXNlIHBpY2sgdGhlIG9mZnNldCBp
biB0aGUgc2Nyb2xsIGRpcmVjdGlvbi4KKyAgICBpZiAoIXN0ZDo6YWJzKHZlbG9jaXR5KSkKKyAg
ICAgICAgcmV0dXJuIChzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCAtICgqcHJldmlvdXMpLmZpcnN0
KSA8PSAoKCpuZXh0KS5maXJzdCAtIHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0KSA/ICpwcmV2aW91
cyA6ICpuZXh0OworICAgIHJldHVybiB2ZWxvY2l0eSA8IDAgPyAqcHJldmlvdXMgOiAqbmV4dDsK
IH0KIAogZW51bSBjbGFzcyBJbnNldE9yT3V0c2V0IHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432245</attachid>
            <date>2021-06-25 00:45:24 -0700</date>
            <delta_ts>2021-06-25 02:03:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227062-20210625094522.patch</filename>
            <type>text/plain</type>
            <size>11430</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MjE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmI5YWY3MzQ5ZjJhNWU5
MjAzNDRiMDdiMmYwZWFkODZkYzYzYTUyMC4uYzE1NDI4YmYwY2VmMDE0Yzg4MDI2NTc3OGQ2N2Mx
MDg0YzA5MzJiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDIxLTA2LTI0ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KKworICAgICAgICBbY3NzLXNjcm9s
bC1zbmFwXSBTaW1wbGlmeSBzbmFwIHBvaW50IHNlbGVjdGlvbiBoZWxwZXJzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwNjIKKworICAgICAgICBS
ZXZpZXdlZCBieSBGcsOpZMOpcmljIFdhbmcuCisKKyAgICAgICAgQ29tYmluZSBpbmRpY2VzT2ZO
ZWFyZXN0U25hcE9mZnNldHMgYW5kIGZpbmRGaXJzdFNuYXBTdG9wT2Zmc2V0QmV0d2Vlbk9yaWdp
bkFuZERlc3RpbmF0aW9uCisgICAgICAgIGFuZCBoYXZlIHRoZSBoZWxwZXIgcmV0dXJuIHRoZSBn
ZW9tZXRyaWMgcHJldmlvdXMgYW5kIG5leHQgc25hcCBwb2ludHMuIFRoaXMgbWFrZXMgdGhlCisg
ICAgICAgIGNvZGUgYSBiaXQgZWFzaWVyIHRvIHJlYWQsIHNsaWdodGx5IG1vcmUgZWZmaWNpZW50
LCBhbmQgcHJlcGFyZXMgZm9yIGxvb2tpbmcgYXQKKyAgICAgICAgdGhlIGdlb21ldHJpYyBwcmV2
aW91cyBhbmQgbmV4dCBzbmFwIHBvaW50cyBmb3IgY2VydGFpbiB1cGNvbWluZyBDU1MgU2Nyb2xs
IFNuYXAgZmVhdHVyZXMuCisKKyAgICAgICAgUHJldmlvdXNseSwgaW5kaWNlc09mTmVhcmVzdFNu
YXBPZmZzZXRzIHVzZWQgYSBiaW5hcnkgc2VhcmNoIGFuZCBmaW5kRmlyc3RTbmFwU3RvcE9mZnNl
dEJldHdlZW5PcmlnaW5BbmREZXN0aW5hdGlvbgorICAgICAgICB1c2VkIGEgbGluZWFyIHNlYXJj
aC4gVGhpcyBjaGFuZ2UgcmVwbGFjZXMgdGhlc2UgdHdvIGZ1bmN0aW9ucyB3aXRoIGEgc2luZ2xl
IGxpbmVhciBzZWFyY2guCisgICAgICAgIFdoaWxlIGZpbmRGaXJzdFNuYXBTdG9wT2Zmc2V0QmV0
d2Vlbk9yaWdpbkFuZERlc3RpbmF0aW9uIGlzIG9ubHkgY2FsbGVkIGZvciBkaXJlY3Rpb25hbCBz
Y3JvbGxpbmcsCisgICAgICAgIGRpcmVjdGlvbmFsIHNjcm9sbGluZyBpcyBtb3JlIGNvbW1vbiB0
aGFuIG5vbi1kaXJlY3Rpb25hbCBzY3JvbGxpbmcgKHdoaWNoIGlzIHR5cGljYWxseSBvbmx5IGNh
bGxlZAorICAgICAgICBieSBzY3JvbGxJbnRvVmlldygpIGFuZCBvdGhlciBKUyBzY3JvbGxpbmcg
QVBJcykuIEkgaGF2ZSB0ZXN0ZWQgdGhpcyBjaGFuZ2Ugd2l0aCBhIGxhcmdlIHRhYmxlIG9mCisg
ICAgICAgIHNuYXAgcG9pbnRzIGFuZCBwZXJmb3JtYW5jZSBkb2VzIG5vdCBzZWVtIHRvIGJlIGNo
YW5nZWQuIEluIGFkZGl0aW9uLCBhIGZ1dHVyZSBjaGFuZ2Ugc2hvdWxkIG1lYW4KKyAgICAgICAg
dGhhdCB0aGlzIHNlYXJjaEZvclBvdGVudGlhbFNuYXBQb2ludHMgc2hvdWxkIGJlIGNhbGxlZCBt
dWNoIGxlc3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlzIHNob3VsZCBub3QgY2hhbmdl
IGJlaGF2aW9yIGluIGFueSB3YXkuCisKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxT
bmFwT2Zmc2V0c0luZm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2VhcmNoRm9yUG90ZW50aWFs
U25hcFBvaW50cyk6IEFkZGVkIHRoaXMgbmV3IGhlbHBlciB3aGljaCBpcyB0aGUgY29tYmluYXRp
b24KKyAgICAgICAgb2YgaW5kaWNlc09mTmVhcmVzdFNuYXBPZmZzZXRzIGFuZCBmaW5kRmlyc3RT
bmFwU3RvcE9mZnNldEJldHdlZW5PcmlnaW5BbmREZXN0aW5hdGlvbi4KKyAgICAgICAgKFdlYkNv
cmU6OmNsb3Nlc3RTbmFwT2Zmc2V0V2l0aEluZm9BbmRBeGlzKTogVXNlIHRoZSBuZXcgaGVscGVy
LgorCiAyMDIxLTA2LTIzICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CiAKICAg
ICAgICAgTm90IGFsbCB1c2VzIG9mIEF1ZGlvVG9vbGJveCBmcmFtZXdvcmsgdXNlIHNvZnQgbGlu
a2luZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25h
cE9mZnNldHNJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNu
YXBPZmZzZXRzSW5mby5jcHAKaW5kZXggN2I4NzViOWRhZjllYzgzYjZkOTdkNTNiNWNkOGVkNmQ5
OTIxZWFjMS4uZGU0NTZiZDE1MDBmYmU3NjllMzdlNWRhNTQ1ZDA3NDcwN2Q4MThlMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZv
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0
c0luZm8uY3BwCkBAIC00Miw1OCArNDIsNDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5b3V0VHlwZT4KLXN0YXRpYyBzdGQ6OnBhaXI8c3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4sIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBpbmRpY2VzT2ZOZWFyZXN0
U25hcE9mZnNldHMoTGF5b3V0VHlwZSBvZmZzZXQsIGNvbnN0IFZlY3RvcjxTbmFwT2Zmc2V0PExh
eW91dFR5cGU+PiYgc25hcE9mZnNldHMpCi17Ci0gICAgdW5zaWduZWQgbG93ZXJJbmRleCA9IDA7
Ci0gICAgdW5zaWduZWQgdXBwZXJJbmRleCA9IHNuYXBPZmZzZXRzLnNpemUoKSAtIDE7Ci0gICAg
d2hpbGUgKGxvd2VySW5kZXggPCB1cHBlckluZGV4IC0gMSkgewotICAgICAgICBpbnQgbWlkZGxl
SW5kZXggPSAobG93ZXJJbmRleCArIHVwcGVySW5kZXgpIC8gMjsKLSAgICAgICAgYXV0byBtaWRk
bGVPZmZzZXQgPSBzbmFwT2Zmc2V0c1ttaWRkbGVJbmRleF0ub2Zmc2V0OwotICAgICAgICBpZiAo
b2Zmc2V0ID09IG1pZGRsZU9mZnNldCkgewotICAgICAgICAgICAgdXBwZXJJbmRleCA9IG1pZGRs
ZUluZGV4OwotICAgICAgICAgICAgbG93ZXJJbmRleCA9IG1pZGRsZUluZGV4OwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAob2Zmc2V0ID4gbWlkZGxlT2Zmc2V0
KQotICAgICAgICAgICAgbG93ZXJJbmRleCA9IG1pZGRsZUluZGV4OwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB1cHBlckluZGV4ID0gbWlkZGxlSW5kZXg7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHN0ZDo6bWFrZV9wYWlyKGxvd2VySW5kZXgsIHVwcGVySW5kZXgpOwotfQordGVtcGxhdGUgPHR5
cGVuYW1lIFVuaXRUeXBlPgorc3RydWN0IFBvdGVudGlhbFNuYXBQb2ludFNlYXJjaFJlc3VsdCB7
CisgICAgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8VW5pdFR5cGUsIHVuc2lnbmVkPj4gcHJldmlv
dXM7CisgICAgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8VW5pdFR5cGUsIHVuc2lnbmVkPj4gbmV4
dDsKKyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6cGFpcjxVbml0VHlwZSwgdW5zaWduZWQ+PiBzbmFw
U3RvcDsKK307CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBMYXlvdXRUeXBlPgotc3RhdGljIHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+IGZpbmRGaXJzdFNuYXBTdG9wT2Zmc2V0QmV0d2Vlbk9yaWdpbkFu
ZERlc3RpbmF0aW9uKGNvbnN0IFZlY3RvcjxTbmFwT2Zmc2V0PExheW91dFR5cGU+PiYgc25hcE9m
ZnNldHMsIExheW91dFR5cGUgc2Nyb2xsT3JpZ2luT2Zmc2V0LCBMYXlvdXRUeXBlIHNjcm9sbERl
c3RpbmF0aW9uT2Zmc2V0KQordGVtcGxhdGUgPHR5cGVuYW1lIEluZm9UeXBlLCB0eXBlbmFtZSBV
bml0VHlwZT4KK3N0YXRpYyBQb3RlbnRpYWxTbmFwUG9pbnRTZWFyY2hSZXN1bHQ8VW5pdFR5cGU+
IHNlYXJjaEZvclBvdGVudGlhbFNuYXBQb2ludHMoY29uc3QgSW5mb1R5cGUmIGluZm8sIFNjcm9s
bEV2ZW50QXhpcyBheGlzLCBVbml0VHlwZSBkZXN0aW5hdGlvbk9mZnNldCwgc3RkOjpvcHRpb25h
bDxVbml0VHlwZT4gb3JpZ2luYWxPZmZzZXQpCiB7Ci0gICAgTGF5b3V0VHlwZSBkaWZmZXJlbmNl
ID0gc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQgLSBzY3JvbGxPcmlnaW5PZmZzZXQ7Ci0gICAgaWYg
KCFkaWZmZXJlbmNlKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgdW5zaWdu
ZWQgc2VhcmNoU3RhcnRPZmZzZXQgPSAwOwotICAgIHNpemVfdCBpdGVyYXRpb24gPSAxOwotICAg
IGlmIChkaWZmZXJlbmNlIDwgMCkgewotICAgICAgICBzZWFyY2hTdGFydE9mZnNldCA9IHNuYXBP
ZmZzZXRzLnNpemUoKSAtIDE7Ci0gICAgICAgIGl0ZXJhdGlvbiA9IC0xOwotICAgIH0KLQotICAg
IGF1dG8gaXNQYXN0ID0gW2RpZmZlcmVuY2VdKExheW91dFR5cGUgbWFyaywgTGF5b3V0VHlwZSBj
YW5kaWRhdGUpIHsKLSAgICAgICAgcmV0dXJuIChkaWZmZXJlbmNlID4gMCAmJiBjYW5kaWRhdGUg
PiBtYXJrKSB8fCAoZGlmZmVyZW5jZSA8IDAgJiYgY2FuZGlkYXRlIDwgbWFyayk7CisgICAgY29u
c3QgYXV0byYgc25hcE9mZnNldHMgPSBpbmZvLm9mZnNldHNGb3JBeGlzKGF4aXMpOworICAgIHN0
ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPFVuaXRUeXBlLCB1bnNpZ25lZD4+IHByZXZpb3VzLCBuZXh0
LCBleGFjdCwgc25hcFN0b3A7CisKKyAgICAvLyBBIHBhcnRpY3VsYXIgc25hcCBzdG9wIGlzIGJl
dHRlciBpZiBpdCdzIGJldHdlZW4gdGhlIG9yaWdpbmFsIG9mZnNldCBhbmQgZGVzdGluYXRpb24g
b2Zmc2V0IGFuZCBjbG9zZXIgb3JpZ2luYWwKKyAgICAvLyBvZmZzZXQgdGhhbiB0aGUgcHJldmlv
dXNseSBzZWxlY3RlZCBzbmFwIHN0b3AuIFdlIGFsd2F5cyB3YW50IHRvIHN0b3AgYXQgdGhlIHNu
YXAgc3RvcCBjbG9zZXN0IHRvIHRoZSBvcmlnaW5hbCBvZmZzZXQuCisgICAgYXV0byBpc0JldHRl
clNuYXBTdG9wID0gWyZdKFVuaXRUeXBlIGNhbmRpZGF0ZSkgeworICAgICAgICBpZiAoIW9yaWdp
bmFsT2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhdXRvIG9yaWdp
bmFsID0gKm9yaWdpbmFsT2Zmc2V0OworICAgICAgICBpZiAoY2FuZGlkYXRlIDw9IHN0ZDo6bWlu
KGRlc3RpbmF0aW9uT2Zmc2V0LCBvcmlnaW5hbCkgfHwgY2FuZGlkYXRlID49IHN0ZDo6bWF4KGRl
c3RpbmF0aW9uT2Zmc2V0LCBvcmlnaW5hbCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiAhc25hcFN0b3AgfHwgc3RkOjphYnMoZmxvYXQgeyBjYW5kaWRhdGUgLSBv
cmlnaW5hbCB9KSA8IHN0ZDo6YWJzKGZsb2F0IHsgKCpzbmFwU3RvcCkuZmlyc3QgLSBvcmlnaW5h
bCB9KTsKICAgICB9OwogCi0gICAgZm9yIChpbnQgaSA9IHNlYXJjaFN0YXJ0T2Zmc2V0OyBpID49
IDAgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihpKSA8IHNuYXBPZmZzZXRzLnNpemUoKTsgaSArPSBp
dGVyYXRpb24pIHsKLSAgICAgICAgYXV0byBvZmZzZXQgPSBzbmFwT2Zmc2V0c1tpXS5vZmZzZXQ7
Ci0gICAgICAgIGlmIChpc1Bhc3Qoc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIG9mZnNldCkpCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKHNuYXBPZmZzZXRzW2ldLnN0b3AgIT0gU2Ny
b2xsU25hcFN0b3A6OkFsd2F5cykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAo
aXNQYXN0KHNjcm9sbE9yaWdpbk9mZnNldCwgb2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzbmFwT2Zmc2V0cy5zaXplKCk7IGkrKykg
eworICAgICAgICBVbml0VHlwZSBwb3RlbnRpYWxTbmFwT2Zmc2V0ID0gc25hcE9mZnNldHNbaV0u
b2Zmc2V0OworICAgICAgICBpZiAocG90ZW50aWFsU25hcE9mZnNldCA9PSBkZXN0aW5hdGlvbk9m
ZnNldCkKKyAgICAgICAgICAgIGV4YWN0ID0gc3RkOjptYWtlX3BhaXIocG90ZW50aWFsU25hcE9m
ZnNldCwgaSk7CisgICAgICAgIGVsc2UgaWYgKHBvdGVudGlhbFNuYXBPZmZzZXQgPCBkZXN0aW5h
dGlvbk9mZnNldCkKKyAgICAgICAgICAgIHByZXZpb3VzID0gc3RkOjptYWtlX3BhaXIocG90ZW50
aWFsU25hcE9mZnNldCwgaSk7CisgICAgICAgIGVsc2UgaWYgKCFuZXh0ICYmIHBvdGVudGlhbFNu
YXBPZmZzZXQgPiBkZXN0aW5hdGlvbk9mZnNldCkKKyAgICAgICAgICAgIG5leHQgPSBzdGQ6Om1h
a2VfcGFpcihwb3RlbnRpYWxTbmFwT2Zmc2V0LCBpKTsKKworICAgICAgICBpZiAoc25hcE9mZnNl
dHNbaV0uc3RvcCA9PSBTY3JvbGxTbmFwU3RvcDo6QWx3YXlzICYmIGlzQmV0dGVyU25hcFN0b3Ao
cG90ZW50aWFsU25hcE9mZnNldCkpCisgICAgICAgICAgICBzbmFwU3RvcCA9IHN0ZDo6bWFrZV9w
YWlyKHBvdGVudGlhbFNuYXBPZmZzZXQsIGkpOwogICAgIH0KIAotICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgaWYgKGV4YWN0KQorICAgICAgICByZXR1cm4geyBleGFjdCwgZXhhY3QsIHNu
YXBTdG9wIH07CisgICAgcmV0dXJuIHsgcHJldmlvdXMsIG5leHQsIHNuYXBTdG9wIH07CiB9CiAK
IHRlbXBsYXRlIDx0eXBlbmFtZSBJbmZvVHlwZSwgdHlwZW5hbWUgU2l6ZVR5cGUsIHR5cGVuYW1l
IExheW91dFR5cGU+CkBAIC0xMDQsMTAgKzkyLDkgQEAgc3RhdGljIHN0ZDo6cGFpcjxMYXlvdXRU
eXBlLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPj4gY2xvc2VzdFNuYXBPZmZzZXRXaXRoSW5mb0EK
ICAgICBpZiAoc25hcE9mZnNldHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gcGFpckZvck5v
U25hcHBpbmc7CiAKLSAgICBpZiAob3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNuYXBwaW5n
KSB7Ci0gICAgICAgIGlmIChhdXRvIGZpcnN0U25hcFN0b3BPZmZzZXRJbmRleCA9IGZpbmRGaXJz
dFNuYXBTdG9wT2Zmc2V0QmV0d2Vlbk9yaWdpbkFuZERlc3RpbmF0aW9uKHNuYXBPZmZzZXRzLCAq
b3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNuYXBwaW5nLCBzY3JvbGxEZXN0aW5hdGlvbk9m
ZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc25hcE9mZnNldHNbKmZp
cnN0U25hcFN0b3BPZmZzZXRJbmRleF0ub2Zmc2V0LCBmaXJzdFNuYXBTdG9wT2Zmc2V0SW5kZXgp
OwotICAgIH0KKyAgICBhdXRvIFtwcmV2aW91cywgbmV4dCwgc25hcFN0b3BdID0gc2VhcmNoRm9y
UG90ZW50aWFsU25hcFBvaW50cyhpbmZvLCBheGlzLCBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCwg
b3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNuYXBwaW5nKTsKKyAgICBpZiAoc25hcFN0b3Ap
CisgICAgICAgIHJldHVybiAqc25hcFN0b3A7CiAKICAgICBhdXRvIHZpZXdwb3J0TGVuZ3RoID0g
YXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyB2aWV3cG9ydFNpemUud2lkdGgo
KSA6IHZpZXdwb3J0U2l6ZS5oZWlnaHQoKTsKICAgICBhdXRvIGlzTmVhckVub3VnaFRvT2Zmc2V0
Rm9yUHJveGltaXR5ID0gWyZdKExheW91dFR5cGUgY2FuZGlkYXRlU25hcE9mZnNldCkgewpAQCAt
MTI4LDQxICsxMTUsMzcgQEAgc3RhdGljIHN0ZDo6cGFpcjxMYXlvdXRUeXBlLCBzdGQ6Om9wdGlv
bmFsPHVuc2lnbmVkPj4gY2xvc2VzdFNuYXBPZmZzZXRXaXRoSW5mb0EKICAgICAgICAgcmV0dXJu
IGlzTmVhckVub3VnaFRvT2Zmc2V0Rm9yUHJveGltaXR5KHNuYXBPZmZzZXRzLmxhc3QoKS5vZmZz
ZXQpID8gc3RkOjptYWtlX3BhaXIoc25hcE9mZnNldHMubGFzdCgpLm9mZnNldCwgc3RkOjptYWtl
X29wdGlvbmFsKGxhc3RJbmRleCkpIDogcGFpckZvck5vU25hcHBpbmc7CiAgICAgfQogCi0gICAg
YXV0byBbbG93ZXJJbmRleCwgdXBwZXJJbmRleF0gPSBpbmRpY2VzT2ZOZWFyZXN0U25hcE9mZnNl
dHM8TGF5b3V0VHlwZT4oc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIHNuYXBPZmZzZXRzKTsKLSAg
ICBBU1NFUlQobG93ZXJJbmRleCk7Ci0gICAgQVNTRVJUKHVwcGVySW5kZXgpOwotICAgIExheW91
dFR5cGUgbG93ZXJTbmFwUG9zaXRpb24gPSBzbmFwT2Zmc2V0c1sqbG93ZXJJbmRleF0ub2Zmc2V0
OwotICAgIExheW91dFR5cGUgdXBwZXJTbmFwUG9zaXRpb24gPSBzbmFwT2Zmc2V0c1sqdXBwZXJJ
bmRleF0ub2Zmc2V0OwotCi0gICAgaWYgKCFpc05lYXJFbm91Z2hUb09mZnNldEZvclByb3hpbWl0
eShsb3dlclNuYXBQb3NpdGlvbikpIHsKLSAgICAgICAgbG93ZXJTbmFwUG9zaXRpb24gPSBzY3Jv
bGxEZXN0aW5hdGlvbk9mZnNldDsKLSAgICAgICAgbG93ZXJJbmRleC5yZXNldCgpOwotICAgIH0K
LQotICAgIGlmICghaXNOZWFyRW5vdWdoVG9PZmZzZXRGb3JQcm94aW1pdHkodXBwZXJTbmFwUG9z
aXRpb24pKSB7Ci0gICAgICAgIHVwcGVyU25hcFBvc2l0aW9uID0gc2Nyb2xsRGVzdGluYXRpb25P
ZmZzZXQ7Ci0gICAgICAgIHVwcGVySW5kZXgucmVzZXQoKTsKKyAgICBpZiAocHJldmlvdXMgJiYg
IWlzTmVhckVub3VnaFRvT2Zmc2V0Rm9yUHJveGltaXR5KCgqcHJldmlvdXMpLmZpcnN0KSkKKyAg
ICAgICAgcHJldmlvdXMucmVzZXQoKTsKKyAgICBpZiAobmV4dCAmJiAhaXNOZWFyRW5vdWdoVG9P
ZmZzZXRGb3JQcm94aW1pdHkoKCpuZXh0KS5maXJzdCkpCisgICAgICAgIG5leHQucmVzZXQoKTsK
IAorICAgIGlmIChvcmlnaW5hbE9mZnNldEZvckRpcmVjdGlvbmFsU25hcHBpbmcpIHsKKyAgICAg
ICAgLy8gRnJvbSBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXNjcm9sbC1zbmFwLTEvI2Nob29z
aW5nCisgICAgICAgIC8vICJVc2VyIGFnZW50cyBtdXN0IGVuc3VyZSB0aGF0IGEgdXNlciBjYW4g
4oCcZXNjYXBl4oCdIGEgc25hcCBwb3NpdGlvbiwgcmVnYXJkbGVzcyBvZiB0aGUgc2Nyb2xsCisg
ICAgICAgIC8vIG1ldGhvZC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBzbmFwIHR5cGUgaXMgbWFuZGF0
b3J5IGFuZCB0aGUgbmV4dCBzbmFwIHBvc2l0aW9uIGlzIG1vcmUgdGhhbgorICAgICAgICAvLyB0
d28gc2NyZWVuLXdpZHRocyBhd2F5LCBhIG5hw692ZSDigJxhbHdheXMgc25hcCB0byBuZWFyZXN0
4oCdIHNlbGVjdGlvbiBhbGdvcml0aG0gbWlnaHQg4oCcdHJhcOKAnSB0aGUKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gRm9yIGEgZGlyZWN0aW9uYWwgc2Nyb2xsLCB3ZSBuZXZlciBzbmFwIGJhY2sg
dG8gdGhlIG9yaWdpbmFsIHNjcm9sbCBwb3NpdGlvbiBvciBiZWZvcmUgaXQsCisgICAgICAgIC8v
IGFsd2F5cyBwcmVmZXJyaW5nIHRoZSBzbmFwIG9mZnNldCBpbiB0aGUgc2Nyb2xsIGRpcmVjdGlv
bi4KKyAgICAgICAgYXV0byYgb3JpZ2luYWxPZmZzZXQgPSAqb3JpZ2luYWxPZmZzZXRGb3JEaXJl
Y3Rpb25hbFNuYXBwaW5nOworICAgICAgICBpZiAob3JpZ2luYWxPZmZzZXQgPCBzY3JvbGxEZXN0
aW5hdGlvbk9mZnNldCAmJiBwcmV2aW91cyAmJiAoKnByZXZpb3VzKS5maXJzdCA8PSBvcmlnaW5h
bE9mZnNldCkKKyAgICAgICAgICAgIHByZXZpb3VzLnJlc2V0KCk7CisgICAgICAgIGlmIChvcmln
aW5hbE9mZnNldCA+IHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0ICYmIG5leHQgJiYgKCpuZXh0KS5m
aXJzdCA+PSBvcmlnaW5hbE9mZnNldCkKKyAgICAgICAgICAgIG5leHQucmVzZXQoKTsKICAgICB9
CiAKLSAgICBpZiAoIXN0ZDo6YWJzKHZlbG9jaXR5KSkgewotICAgICAgICBib29sIGlzQ2xvc2Vy
VG9Mb3dlclNuYXBQb3NpdGlvbiA9ICF1cHBlckluZGV4IHx8IChsb3dlckluZGV4ICYmIHNjcm9s
bERlc3RpbmF0aW9uT2Zmc2V0IC0gbG93ZXJTbmFwUG9zaXRpb24gPD0gdXBwZXJTbmFwUG9zaXRp
b24gLSBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCk7Ci0gICAgICAgIHJldHVybiBpc0Nsb3NlclRv
TG93ZXJTbmFwUG9zaXRpb24gPyBzdGQ6Om1ha2VfcGFpcihsb3dlclNuYXBQb3NpdGlvbiwgbG93
ZXJJbmRleCkgOiBzdGQ6Om1ha2VfcGFpcih1cHBlclNuYXBQb3NpdGlvbiwgdXBwZXJJbmRleCk7
Ci0gICAgfQotCi0gICAgLy8gTm9uLXplcm8gdmVsb2NpdHkgaW5kaWNhdGVzIGEgZmxpY2sgZ2Vz
dHVyZS4gRXZlbiBpZiBhbm90aGVyIHNuYXAgcG9pbnQgaXMgY2xvc2VyLCB3ZSBzaG91bGQgY2hv
b3NlIHRoZSBvbmUgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgZmxpY2sgZ2VzdHVyZQotICAgIC8v
IGFzIGxvbmcgYXMgYSBzY3JvbGwgc25hcCBvZmZzZXQgaXMgY2xvc2UgZW5vdWdoIGZvciBwcm94
aW1pdHkgKG9yIHdlIGFyZW4ndCB1c2luZyBwcm94aW1pdHkpLiBJZiB3ZSBhcmUgZG9pbmcgZGly
ZWN0aW9uYWwKLSAgICAvLyBzbmFwcGluZywgd2Ugc2hvdWxkIG5ldmVyIHNuYXAgdG8gYSBwb2lu
dCB0aGF0IHdhcyBvbiB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgb3JpZ2luYWwgcG9zaXRpb24gaW4g
dGhlIG9wcG9zaXRlIGRpcmVjdGlvbiBvZiB0aGlzIHNjcm9sbC4KLSAgICAvLyBUaGlzIGFsbG93
cyBkaXJlY3Rpb25hbCBzY3JvbGxpbmcgdG8gZXNjYXBlIHNuYXAgcG9pbnRzLgotICAgIGlmICh2
ZWxvY2l0eSA8IDApICB7Ci0gICAgICAgIGlmICh1cHBlckluZGV4ICYmICghb3JpZ2luYWxPZmZz
ZXRGb3JEaXJlY3Rpb25hbFNuYXBwaW5nIHx8ICpvcmlnaW5hbE9mZnNldEZvckRpcmVjdGlvbmFs
U25hcHBpbmcgPiB1cHBlclNuYXBQb3NpdGlvbikpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpt
YWtlX3BhaXIodXBwZXJTbmFwUG9zaXRpb24sIHVwcGVySW5kZXgpOwotICAgICAgICByZXR1cm4g
c3RkOjptYWtlX3BhaXIobG93ZXJTbmFwUG9zaXRpb24sIGxvd2VySW5kZXgpOwotICAgIH0KLQot
ICAgIGlmIChsb3dlckluZGV4ICYmICghb3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNuYXBw
aW5nIHx8ICpvcmlnaW5hbE9mZnNldEZvckRpcmVjdGlvbmFsU25hcHBpbmcgPCBsb3dlclNuYXBQ
b3NpdGlvbikpCi0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihsb3dlclNuYXBQb3NpdGlv
biwgbG93ZXJJbmRleCk7Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHVwcGVyU25hcFBvc2l0
aW9uLCB1cHBlckluZGV4KTsKKyAgICBpZiAoIXByZXZpb3VzICYmICFuZXh0KQorICAgICAgICBy
ZXR1cm4gcGFpckZvck5vU25hcHBpbmc7CisgICAgaWYgKCFwcmV2aW91cykKKyAgICAgICAgcmV0
dXJuICpuZXh0OworICAgIGlmICghbmV4dCkKKyAgICAgICAgcmV0dXJuICpwcmV2aW91czsKKwor
ICAgIC8vIElmIHRoaXMgc2Nyb2xsIGlzbid0IGRpcmVjdGlvbmFsLCB0aGVuIGNob29zZSB3aGF0
ZXZlciBzbmFwIHBvaW50IGlzIGNsb3Nlciwgb3RoZXJ3aXNlIHBpY2sgdGhlIG9mZnNldCBpbiB0
aGUgc2Nyb2xsIGRpcmVjdGlvbi4KKyAgICBpZiAoIXN0ZDo6YWJzKHZlbG9jaXR5KSkKKyAgICAg
ICAgcmV0dXJuIChzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCAtICgqcHJldmlvdXMpLmZpcnN0KSA8
PSAoKCpuZXh0KS5maXJzdCAtIHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0KSA/ICpwcmV2aW91cyA6
ICpuZXh0OworICAgIHJldHVybiB2ZWxvY2l0eSA8IDAgPyAqcHJldmlvdXMgOiAqbmV4dDsKIH0K
IAogZW51bSBjbGFzcyBJbnNldE9yT3V0c2V0IHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>