<?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>224326</bug_id>
          
          <creation_ts>2021-04-08 05:57:48 -0700</creation_ts>
          <short_desc>[css-scroll-snap] Compute proximity information while snapping</short_desc>
          <delta_ts>2021-06-22 02:06:10 -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>
    
    <blocked>224380</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>1748282</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-04-08 05:57:48 -0700</bug_when>
    <thetext>Currently, snap proximity is calculated during layout with the creation of ranges of offsets where snapping occurs. This change tracks moving that calculation to snap time by replacing the snap offset ranges with information about the geometry of snap areas. Not only does this simplify the code, we are going to need information about the geometry of snap areas to follow the spec as it relates to snap areas that overflow the snapport and properly dealing with masonry layouts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1748300</commentid>
    <comment_count>1</comment_count>
      <attachid>425508</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-04-08 07:57:05 -0700</bug_when>
    <thetext>Created attachment 425508
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1748624</commentid>
    <comment_count>2</comment_count>
      <attachid>425591</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-04-09 00:31:41 -0700</bug_when>
    <thetext>Created attachment 425591
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750590</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-04-15 05:58:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/76699362&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756964</commentid>
    <comment_count>4</comment_count>
      <attachid>425591</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-05-05 09:51:35 -0700</bug_when>
    <thetext>Comment on attachment 425591
Patch

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

&gt; Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:109
&gt; +    WebCore::FloatSize viewportSize(static_cast&lt;float&gt;(CGRectGetWidth([scrollView bounds])), static_cast&lt;float&gt;(CGRectGetHeight([scrollView bounds])));

I think you can construct a FloatSize from a CGSize, so this could be WebCore::FloatSize viewportSize = [scrollView bounds].size;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757293</commentid>
    <comment_count>5</comment_count>
      <attachid>427859</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-05-06 01:32:28 -0700</bug_when>
    <thetext>Created attachment 427859
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757361</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-06 05:11:22 -0700</bug_when>
    <thetext>Committed r277083 (237386@main): &lt;https://commits.webkit.org/237386@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 427859.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760767</commentid>
    <comment_count>7</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-05-17 09:13:20 -0700</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760768</commentid>
    <comment_count>8</comment_count>
      <attachid>428836</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-05-17 09:13:23 -0700</bug_when>
    <thetext>Created attachment 428836
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761112</commentid>
    <comment_count>9</comment_count>
      <attachid>428836</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-05-18 03:09:20 -0700</bug_when>
    <thetext>Comment on attachment 428836
Patch

Marking patch obsolete. This was uploaded to the incorrect bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771598</commentid>
    <comment_count>10</comment_count>
      <attachid>427859</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-06-21 21:29:05 -0700</bug_when>
    <thetext>Comment on attachment 427859
Patch

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

&gt; Source/WebCore/page/scrolling/ScrollSnapOffsetsInfo.cpp:157
&gt; -    if (velocity &lt; 0) {
&gt; -        if (lowerSnapOffsetRangeIndex == invalidSnapOffsetIndex || lowerSnapPosition &gt;= snapOffsetRanges[lowerSnapOffsetRangeIndex].end)
&gt; -            return std::make_pair(lowerSnapPosition, lowerIndex);
&gt; -        if (!originalOffsetForDirectionalSnapping.hasValue() || *originalOffsetForDirectionalSnapping &gt; upperSnapPosition)
&gt; -            return std::make_pair(upperSnapPosition, upperIndex);
&gt; -    } else {
&gt; -        if (upperSnapOffsetRangeIndex == invalidSnapOffsetIndex || snapOffsetRanges[upperSnapOffsetRangeIndex].start &gt;= upperSnapPosition)
&gt; +    if (velocity &lt; 0)  {
&gt; +        if (upperIndex != invalidSnapOffsetIndex &amp;&amp; (!originalOffsetForDirectionalSnapping || *originalOffsetForDirectionalSnapping &gt; upperSnapPosition))
&gt;              return std::make_pair(upperSnapPosition, upperIndex);
&gt; -        if (!originalOffsetForDirectionalSnapping.hasValue() || *originalOffsetForDirectionalSnapping &lt; lowerSnapPosition)
&gt; -            return std::make_pair(lowerSnapPosition, lowerIndex);
&gt; +        return std::make_pair(lowerSnapPosition, lowerIndex);

This flipped the upper/lower ordering with velocity &lt; 0. Was that intentional?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771600</commentid>
    <comment_count>11</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-06-21 21:34:45 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #10)
&gt; Comment on attachment 427859 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=427859&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/scrolling/ScrollSnapOffsetsInfo.cpp:157
&gt; &gt; -    if (velocity &lt; 0) {
&gt; &gt; -        if (lowerSnapOffsetRangeIndex == invalidSnapOffsetIndex || lowerSnapPosition &gt;= snapOffsetRanges[lowerSnapOffsetRangeIndex].end)
&gt; &gt; -            return std::make_pair(lowerSnapPosition, lowerIndex);
&gt; &gt; -        if (!originalOffsetForDirectionalSnapping.hasValue() || *originalOffsetForDirectionalSnapping &gt; upperSnapPosition)
&gt; &gt; -            return std::make_pair(upperSnapPosition, upperIndex);
&gt; &gt; -    } else {
&gt; &gt; -        if (upperSnapOffsetRangeIndex == invalidSnapOffsetIndex || snapOffsetRanges[upperSnapOffsetRangeIndex].start &gt;= upperSnapPosition)
&gt; &gt; +    if (velocity &lt; 0)  {
&gt; &gt; +        if (upperIndex != invalidSnapOffsetIndex &amp;&amp; (!originalOffsetForDirectionalSnapping || *originalOffsetForDirectionalSnapping &gt; upperSnapPosition))
&gt; &gt;              return std::make_pair(upperSnapPosition, upperIndex);
&gt; &gt; -        if (!originalOffsetForDirectionalSnapping.hasValue() || *originalOffsetForDirectionalSnapping &lt; lowerSnapPosition)
&gt; &gt; -            return std::make_pair(lowerSnapPosition, lowerIndex);
&gt; &gt; +        return std::make_pair(lowerSnapPosition, lowerIndex);
&gt; 
&gt; This flipped the upper/lower ordering with velocity &lt; 0. Was that
&gt; intentional?

Actually it didn&apos;t, but this logic change makes it always return lowerSnapPosition even if upperSnapPosition is desired.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771626</commentid>
    <comment_count>12</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-06-22 02:06:10 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #11)
&gt; (In reply to Simon Fraser (smfr) from comment #10)
&gt; &gt; Comment on attachment 427859 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=427859&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/page/scrolling/ScrollSnapOffsetsInfo.cpp:157
&gt; &gt; &gt; -    if (velocity &lt; 0) {
&gt; &gt; &gt; -        if (lowerSnapOffsetRangeIndex == invalidSnapOffsetIndex || lowerSnapPosition &gt;= snapOffsetRanges[lowerSnapOffsetRangeIndex].end)
&gt; &gt; &gt; -            return std::make_pair(lowerSnapPosition, lowerIndex);
&gt; &gt; &gt; -        if (!originalOffsetForDirectionalSnapping.hasValue() || *originalOffsetForDirectionalSnapping &gt; upperSnapPosition)
&gt; &gt; &gt; -            return std::make_pair(upperSnapPosition, upperIndex);
&gt; &gt; &gt; -    } else {
&gt; &gt; &gt; -        if (upperSnapOffsetRangeIndex == invalidSnapOffsetIndex || snapOffsetRanges[upperSnapOffsetRangeIndex].start &gt;= upperSnapPosition)
&gt; &gt; &gt; +    if (velocity &lt; 0)  {
&gt; &gt; &gt; +        if (upperIndex != invalidSnapOffsetIndex &amp;&amp; (!originalOffsetForDirectionalSnapping || *originalOffsetForDirectionalSnapping &gt; upperSnapPosition))
&gt; &gt; &gt;              return std::make_pair(upperSnapPosition, upperIndex);
&gt; &gt; &gt; -        if (!originalOffsetForDirectionalSnapping.hasValue() || *originalOffsetForDirectionalSnapping &lt; lowerSnapPosition)
&gt; &gt; &gt; -            return std::make_pair(lowerSnapPosition, lowerIndex);
&gt; &gt; &gt; +        return std::make_pair(lowerSnapPosition, lowerIndex);
&gt; &gt; 
&gt; &gt; This flipped the upper/lower ordering with velocity &lt; 0. Was that
&gt; &gt; intentional?
&gt; 
&gt; Actually it didn&apos;t, but this logic change makes it always return
&gt; lowerSnapPosition even if upperSnapPosition is desired.

Hrm. When scrolling with the keyboard, I am seeing all of these code paths being exercised. It&apos;s true though that this code is *very* confusing and the upper and lower snap position aren&apos;t guaranteed to be before or after the scroll destination. Sometimes they are even the same value. I have tried to address this confusing design in: 

https://bugs.webkit.org/show_bug.cgi?id=227062</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>425508</attachid>
            <date>2021-04-08 07:57:05 -0700</date>
            <delta_ts>2021-04-09 00:31:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224326-20210408165703.patch</filename>
            <type>text/plain</type>
            <size>52555</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1NDk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjhmNGUwMGNlYmMyMDFj
NzYyZmVjZTkxMmMzMmY5NWFiZjRhODViMi4uZDMwMTdjNGI1YTE2MGNiMGVjY2I2YWY1NjQxYmRj
MDNkYmUzOGQyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDIxLTA0LTA4ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KKworICAgICAgICBbY3NzLXNjcm9s
bC1zbmFwXSBDb21wdXRlIHByb3hpbWl0eSBpbmZvcm1hdGlvbiB3aGlsZSBzbmFwcGluZworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0MzI2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSGF2ZSBTY3JvbGxT
bmFwT2Zmc2V0c0luZm8gY2Fycnkgc25hcCBhcmVhIHJlY3RhbmdsZXMgaW5zdGVhZCBvZiBzY3Jv
bGwgb2Zmc2V0CisgICAgICAgIHJhbmdlcy4gVGhpcyBhbGxvd3MgcHJveGltaXR5IGluZm9ybWF0
aW9uIHRvIGJlIGhhbmRsZWQgZHVyaW5nIHNuYXAgcG9pbnQgc2VsZWN0aW9uLgorICAgICAgICBU
aGUgZ2VvbWV0cnkgd2lsbCBiZSB1c2VkIGluIGEgZnV0dXJlIHBhdGNoIHRvIGZvbGxvdyBzcGVj
IGJlaGF2aW9yIGZvciBzbmFwCisgICAgICAgIGFyZWFzIHRoYXQgb3ZlcmZsb3cgdGhlIHNuYXBw
b3J0IGFuZCB3aGVuIGhhbmRsaW5nIG1hc29ucnkgbGF5b3V0cy4KKworICAgICAgICBObyBuZXcg
dGVzdHMuIFRoaXMgaXMganVzdCBhIHJlZmFjdG9yLiBJdCBzaG91bGQgbm90IGNoYW5nZSBiZWhh
dmlvciBhdCBhbGwuCisKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nv
b3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFN0YXRlU2Nyb2xsaW5nTm9kZVNu
YXBPZmZzZXRzQXNGbG9hdCk6IFBhc3MgaW4gdGhlIG5ldyB0ZW1wbGF0ZSBhcmd1bWVudC4KKyAg
ICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6aXNOZWFyRW5vdWdoVG9PZmZzZXRGb3JQcm94aW1pdHkpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmNsb3Nlc3RTbmFwT2Zmc2V0V2l0aEluZm9BbmRBeGlzKTogTW9kaWZp
ZWQgdG8gdGFrZSBpbiB0aGUgU2Nyb2xsU25hcE9mZnNldHNJbmZvIGRhdGEKKyAgICAgICAgc3Ry
dWN0dXJlIGFuZCBheGlzIGFsb25nIHdpdGggdGhlIHZpZXdwb3J0IHNpemUuIFRoaXMgZnVuY3Rp
b24gbm93IGV4cGxpY2l0bHkgZGV0ZXJtaW5lcyBpZiBhCisgICAgICAgIHNuYXAgcG9pbnQgaXMg
dG9vIGZhciBhd2F5IHRvIGFmZmVjdCBzY3JvbGxpbmcgZHVlIHRvIHNjcm9sbC1zbmFwIHByb3hp
bWl0eS4KKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFy
ZWEpOiBBZGQgc25hcCBhcmVhcyBhbmQgc25hcCBhcmVhIGluZGljZXMgdG8gU25hcE9mZnNldC4K
KyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRPZmZzZXRJbmZvKTogSW5zdGVhZCBvZiBjb252ZXJ0
aW5nIHNjcm9sbCBvZmZzZXQgcmFuZ2VzLCBjb252ZXJ0IHRoZSBzbmFwCisgICAgICAgIGFyZWEg
cmVjdGFuZ2xlcy4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0U2Nyb2xsU25hcE9mZnNldHNJbmZv
Ojpjb252ZXJ0VW5pdHMgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dFNj
cm9sbFNuYXBPZmZzZXRzSW5mbzo6Y29udmVydFVuaXRzIGNvbnN0KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm86OmNsb3Nlc3RTbmFwT2Zmc2V0
IGNvbnN0KTogVXBkYXRlZCB0byByZWZsZWN0IG5ldworICAgICAgICBpbnRlcm5hbCBmdW5jdGlv
bi4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0U2Nyb2xsU25hcE9mZnNldHNJbmZvOjpjbG9zZXN0
U25hcE9mZnNldCBjb25zdCk6IERpdHRvLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bFNuYXBPZmZzZXRzSW5mby5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsU25hcE9mZnNldHNJ
bmZvOjppc0VxdWFsIGNvbnN0KTogVXBkYXRlIHRvIHJlZmxlY3QgbmV3IG1lbSBlcnMuCisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxTbmFwT2Zmc2V0c0luZm86Om9mZnNldHNGb3JBeGlzIGNvbnN0
KTogQ2hhbmdlZCB0ZW1wbGF0ZSBwYXJhbWV0ZXIgbmFtZS4KKyAgICAgICAgKiBwYWdlL3Njcm9s
bGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OnVwZGF0
ZUZyb21TdGF0ZU5vZGUpOiA6OmNvbnZlcnRVbml0cworICAgICAgICB0YWtlcyBhIG5ldyB0ZW1w
bGF0ZSBwYXJhbWV0ZXIuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbmljb3NpYS9TY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTmljb3NpYS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTmljb3NpYTo6aGFuZGxlV2hlZWxF
dmVudCk6IFBhc3MgaW4gdmlld3BvcnQgc2l6ZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnNldE5l
YXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjphZGp1c3RTY3JvbGxEZXN0aW5hdGlvbik6IERpdHRv
LgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbFNuYXBBbmltYXRvclN0YXRlOjpzZXR1cEFuaW1hdGlvbkZvclN0
YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZTo6
dGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZzZXQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6Om9wZXJhdG9yPDwpOiBObyBsb25nZXIgcHJpbnQgc25hcCBvZmZzZXQgcmFuZ2VzLgorICAg
ICAgICAqIHBsYXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmg6IFJlbW92ZSByZWZlcmVu
Y2VzIHRvIHNuYXAgb2Zmc2V0IHJhbmdlcy4KKwogMjAyMS0wMy0yNCAgU2VyZ2lvIFZpbGxhciBT
ZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBbY3NzLWdyaWRdIEluaXRpYWxp
emUgYXV0by1yZXBlYXQgZGF0YSBpbiBSZW5kZXJTdHlsZSBpbiBhcHBseUluaXRpYWxHcmlkVGVt
cGxhdGV7Q29sdW1uc3xSb3dzfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBhZjU1OTAyMjQ5Y2EzYTgzZDJlNzkzNTQ4
MDNlNjRkYTkzNDcwZDhmLi4xMDZhNjgxMjk1Njg2NTFjZjhiZDYzNWYyY2E4NGVlMjQyNmEwZDRh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDIxLTA0LTA4ICBNYXJ0aW4gUm9iaW5zb24g
IDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KKworICAgICAgICBbY3NzLXNjcm9sbC1zbmFwXSBDb21w
dXRlIHByb3hpbWl0eSBpbmZvcm1hdGlvbiB3aGlsZSBzbmFwcGluZworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0MzI2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvUmVtb3RlTGF5ZXJUcmVl
L1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoQXJn
dW1lbnRDb2RlcjxTbmFwT2Zmc2V0PGZsb2F0Pj46OmVuY29kZSk6IEFkZCB0aGUgc25hcCBhcmVh
IGluZGV4IHRvIHRoZSBlbmNvZGVkIGFyZ3VtZW50cy4KKyAgICAgICAgKEFyZ3VtZW50Q29kZXI8
U25hcE9mZnNldDxmbG9hdD4+OjpkZWNvZGUpOiBBZGQgdGhlIHNuYXAgYXJlYSBpbmRleCB0byB0
aGUgZGVjb2RlZCBhcmd1bWVudHMuCisgICAgICAgIChBcmd1bWVudENvZGVyPEZsb2F0U2Nyb2xs
U25hcE9mZnNldHNJbmZvPjo6ZW5jb2RlKTogTm8gbG9uZ2VyIGVuY29kZSByYW5nZXMsIGJ1dCBl
bmNvZGUgc25hcCBhcmVhcy4KKyAgICAgICAgKEFyZ3VtZW50Q29kZXI8RmxvYXRTY3JvbGxTbmFw
T2Zmc2V0c0luZm8+OjpkZWNvZGUpOiBEaXR0byBmb3IgZGVjb2RlLgorICAgICAgICAqIFNoYXJl
ZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOiBSZW1vdmUgY29kZSBkZWFsaW5nIHdpdGggc2Ny
b2xsIG9mZnNldCByYW5nZXMuCisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5oOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9SZW1v
dGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpjbG9zZXN0U25hcE9mZnNldEZvck1haW5GcmFt
ZVNjcm9sbGluZyBjb25zdCk6IFBhc3MKKyAgICAgICAgaW4gdmlld3BvcnQgc2l6ZSB0byBjbG9z
ZXN0U25hcE9mZnNldCB3aGljaCBpcyBuZWNlc3NhcnkgZm9yIGNhbGN1bGF0aW5nIHByb3hpbWl0
eS4KKyAgICAgICAgKiBVSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tOgorICAgICAgICAoLVtXS1Njcm9sbGluZ05vZGVT
Y3JvbGxWaWV3RGVsZWdhdGUgc2Nyb2xsVmlld1dpbGxFbmREcmFnZ2luZzp3aXRoVmVsb2NpdHk6
dGFyZ2V0Q29udGVudE9mZnNldDpdKTogRGl0dG8uCisKIDIwMjEtMDQtMDUgIEppZXdlbiBUYW4g
IDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBBbGxvdyB0aGUgV2ViQXV0aG4gVUkg
dG8gaW5mb3JtIHVzZXJzIGFib3V0IEJpb21ldHJ5TG9ja291dApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNw
cAppbmRleCBkM2E3YzExY2FhNWVlNmEzMWVhN2IyMTU5YzBlYjVhNzE5NDUwYTE5Li43OWFhMmY2
MmI1YThhZDUwMjcyMzZiYTg0ZWY0MmEwNGVkMGFlMjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNw
cApAQCAtMTAwLDcgKzEwMCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRTdGF0ZVNjcm9sbGlu
Z05vZGVTbmFwT2Zmc2V0c0FzRmxvYXQoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpCiAgICAgfQogCiAg
ICAgLy8gRklYTUU6IEluY29ycG9yYXRlIGN1cnJlbnQgcGFnZSBzY2FsZSBmYWN0b3IgaW4gc25h
cHBpbmcgdG8gZGV2aWNlIHBpeGVsLiBQZXJoYXBzIHdlIHNob3VsZCBqdXN0IGNvbnZlcnQgdG8g
ZmxvYXQgaGVyZSBhbmQgbGV0IFVJIHByb2Nlc3MgZG8gdGhlIHBpeGVsIHNuYXBwaW5nPwotICAg
IG5vZGUuc2V0U25hcE9mZnNldHNJbmZvKG9mZnNldEluZm8tPmNvbnZlcnRVbml0czxmbG9hdD4o
ZGV2aWNlU2NhbGVGYWN0b3IpKTsKKyAgICBub2RlLnNldFNuYXBPZmZzZXRzSW5mbyhvZmZzZXRJ
bmZvLT5jb252ZXJ0VW5pdHM8RmxvYXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8+KGRldmljZVNjYWxl
RmFjdG9yKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHAKaW5kZXggZmNkZDFjYTM4ZjJhNWY0
MjdkZjNmZWY1ZWFhNGVjYTcwMWIwZDNlMC4uMzdiNjYzN2I0ODYwZDk4Y2UzODA2OGY1MWIzMWZl
Y2U2OGFjNmQxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsU25hcE9mZnNldHNJbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwCkBAIC00Miw0MSArNDIsMTYgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5b3V0VHlwZT4KLXN0YXRpYyB2
b2lkIGluZGljZXNPZk5lYXJlc3RTbmFwT2Zmc2V0UmFuZ2VzKExheW91dFR5cGUgb2Zmc2V0LCBj
b25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VHlwZT4+JiBzbmFwT2Zmc2V0UmFu
Z2VzLCB1bnNpZ25lZCYgbG93ZXJJbmRleCwgdW5zaWduZWQmIHVwcGVySW5kZXgpCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVW5pdFR5cGU+CitzdGF0aWMgYm9vbCBpc05lYXJFbm91Z2hUb09mZnNldEZv
clByb3hpbWl0eShTY3JvbGxTbmFwU3RyaWN0bmVzcyBzdHJpY3RuZXNzLCBVbml0VHlwZSBzY3Jv
bGxEZXN0aW5hdGlvbiwgVW5pdFR5cGUgY2FuZGlkYXRlU25hcE9mZnNldCwgVW5pdFR5cGUgdmll
d3BvcnRMZW5ndGgpCiB7Ci0gICAgaWYgKHNuYXBPZmZzZXRSYW5nZXMuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIGxvd2VySW5kZXggPSBpbnZhbGlkU25hcE9mZnNldEluZGV4OwotICAgICAgICB1cHBl
ckluZGV4ID0gaW52YWxpZFNuYXBPZmZzZXRJbmRleDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGludCBsb3dlckluZGV4QXNJbnQgPSAtMTsKLSAgICBpbnQgdXBwZXJJbmRleEFzSW50
ID0gc25hcE9mZnNldFJhbmdlcy5zaXplKCk7Ci0gICAgZG8gewotICAgICAgICBpbnQgbWlkZGxl
SW5kZXggPSAobG93ZXJJbmRleEFzSW50ICsgdXBwZXJJbmRleEFzSW50KSAvIDI7Ci0gICAgICAg
IGF1dG8mIHJhbmdlID0gc25hcE9mZnNldFJhbmdlc1ttaWRkbGVJbmRleF07Ci0gICAgICAgIGlm
IChyYW5nZS5zdGFydCA8IG9mZnNldCAmJiBvZmZzZXQgPCByYW5nZS5lbmQpIHsKLSAgICAgICAg
ICAgIGxvd2VySW5kZXhBc0ludCA9IG1pZGRsZUluZGV4OwotICAgICAgICAgICAgdXBwZXJJbmRl
eEFzSW50ID0gbWlkZGxlSW5kZXg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChvZmZzZXQgPiByYW5nZS5lbmQpCi0gICAgICAgICAgICBsb3dlckluZGV4QXNJ
bnQgPSBtaWRkbGVJbmRleDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdXBwZXJJbmRleEFz
SW50ID0gbWlkZGxlSW5kZXg7Ci0gICAgfSB3aGlsZSAobG93ZXJJbmRleEFzSW50IDwgdXBwZXJJ
bmRleEFzSW50IC0gMSk7Ci0KLSAgICBpZiAob2Zmc2V0IDw9IHNuYXBPZmZzZXRSYW5nZXMuZmly
c3QoKS5zdGFydCkKLSAgICAgICAgbG93ZXJJbmRleCA9IGludmFsaWRTbmFwT2Zmc2V0SW5kZXg7
Ci0gICAgZWxzZQotICAgICAgICBsb3dlckluZGV4ID0gbG93ZXJJbmRleEFzSW50OworICAgIGlm
IChzdHJpY3RuZXNzICE9IFNjcm9sbFNuYXBTdHJpY3RuZXNzOjpQcm94aW1pdHkpCisgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgaWYgKG9mZnNldCA+PSBzbmFwT2Zmc2V0UmFuZ2VzLmxhc3Qo
KS5lbmQpCi0gICAgICAgIHVwcGVySW5kZXggPSBpbnZhbGlkU25hcE9mZnNldEluZGV4OwotICAg
IGVsc2UKLSAgICAgICAgdXBwZXJJbmRleCA9IHVwcGVySW5kZXhBc0ludDsKKyAgICAvLyBUaGlz
IGlzIGFuIGFyYml0cmFyeSBjaG9pY2UgZm9yIHdoYXQgaXQgbWVhbnMgdG8gYmUgImluIHByb3hp
bWl0eSIgb2YgYSBzbmFwIG9mZnNldC4gV2Ugc2hvdWxkIHBsYXkgYXJvdW5kIHdpdGgKKyAgICAv
LyB0aGlzIGFuZCBzZWUgd2hhdCBmZWVscyBiZXN0LgorICAgIHN0YXRpYyBjb25zdCBmbG9hdCBy
YXRpb09mU2Nyb2xsUG9ydEF4aXNMZW5ndGhUb0JlQ29uc2lkZXJlZEZvclByb3hpbWl0eSA9IDAu
MzsKKyAgICByZXR1cm4gc3RkOjphYnMoZmxvYXQge2NhbmRpZGF0ZVNuYXBPZmZzZXQgLSBzY3Jv
bGxEZXN0aW5hdGlvbn0pIDw9ICh2aWV3cG9ydExlbmd0aCAqIHJhdGlvT2ZTY3JvbGxQb3J0QXhp
c0xlbmd0aFRvQmVDb25zaWRlcmVkRm9yUHJveGltaXR5KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVu
YW1lIExheW91dFR5cGU+CkBAIC0xMzEsOSArMTA2LDEwIEBAIHN0YXRpYyBPcHRpb25hbDx1bnNp
Z25lZD4gZmluZEZpcnN0U25hcFN0b3BPZmZzZXRCZXR3ZWVuT3JpZ2luQW5kRGVzdGluYXRpb24o
Y29uCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIExh
eW91dFR5cGU+Ci1zdGF0aWMgc3RkOjpwYWlyPExheW91dFR5cGUsIHVuc2lnbmVkPiBjbG9zZXN0
U25hcE9mZnNldFdpdGhPZmZzZXRzQW5kUmFuZ2VzKGNvbnN0IFZlY3RvcjxTbmFwT2Zmc2V0PExh
eW91dFR5cGU+PiYgc25hcE9mZnNldHMsIGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxM
YXlvdXRUeXBlPj4mIHNuYXBPZmZzZXRSYW5nZXMsIExheW91dFR5cGUgc2Nyb2xsRGVzdGluYXRp
b25PZmZzZXQsIGZsb2F0IHZlbG9jaXR5LCBPcHRpb25hbDxMYXlvdXRUeXBlPiBvcmlnaW5hbE9m
ZnNldEZvckRpcmVjdGlvbmFsU25hcHBpbmcpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSW5mb1R5cGUs
IHR5cGVuYW1lIFNpemVUeXBlLCB0eXBlbmFtZSBMYXlvdXRUeXBlPgorc3RhdGljIHN0ZDo6cGFp
cjxMYXlvdXRUeXBlLCB1bnNpZ25lZD4gY2xvc2VzdFNuYXBPZmZzZXRXaXRoSW5mb0FuZEF4aXMo
Y29uc3QgSW5mb1R5cGUmIGluZm8sIFNjcm9sbEV2ZW50QXhpcyBheGlzLCBjb25zdCBTaXplVHlw
ZSYgdmlld3BvcnRTaXplLCBMYXlvdXRUeXBlIHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBmbG9h
dCB2ZWxvY2l0eSwgT3B0aW9uYWw8TGF5b3V0VHlwZT4gb3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rp
b25hbFNuYXBwaW5nKQogeworICAgIGNvbnN0IGF1dG8mIHNuYXBPZmZzZXRzID0gaW5mby5vZmZz
ZXRzRm9yQXhpcyhheGlzKTsKICAgICBpZiAoc25hcE9mZnNldHMuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIGludmFsaWRT
bmFwT2Zmc2V0SW5kZXgpOwogCkBAIC0xNDMsMTIgKzExOSw2IEBAIHN0YXRpYyBzdGQ6OnBhaXI8
TGF5b3V0VHlwZSwgdW5zaWduZWQ+IGNsb3Nlc3RTbmFwT2Zmc2V0V2l0aE9mZnNldHNBbmRSYW5n
ZXMoY29uCiAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc25hcE9mZnNldHNbKmZp
cnN0U25hcFN0b3BPZmZzZXRJbmRleF0ub2Zmc2V0LCAqZmlyc3RTbmFwU3RvcE9mZnNldEluZGV4
KTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBsb3dlclNuYXBPZmZzZXRSYW5nZUluZGV4OwotICAg
IHVuc2lnbmVkIHVwcGVyU25hcE9mZnNldFJhbmdlSW5kZXg7Ci0gICAgaW5kaWNlc09mTmVhcmVz
dFNuYXBPZmZzZXRSYW5nZXM8TGF5b3V0VHlwZT4oc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIHNu
YXBPZmZzZXRSYW5nZXMsIGxvd2VyU25hcE9mZnNldFJhbmdlSW5kZXgsIHVwcGVyU25hcE9mZnNl
dFJhbmdlSW5kZXgpOwotICAgIGlmIChsb3dlclNuYXBPZmZzZXRSYW5nZUluZGV4ID09IHVwcGVy
U25hcE9mZnNldFJhbmdlSW5kZXggJiYgdXBwZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleCAhPSBpbnZh
bGlkU25hcE9mZnNldEluZGV4KQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc2Nyb2xs
RGVzdGluYXRpb25PZmZzZXQsIGludmFsaWRTbmFwT2Zmc2V0SW5kZXgpOwotCiAgICAgaWYgKHNj
cm9sbERlc3RpbmF0aW9uT2Zmc2V0IDw9IHNuYXBPZmZzZXRzLmZpcnN0KCkub2Zmc2V0KQogICAg
ICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc25hcE9mZnNldHMuZmlyc3QoKS5vZmZzZXQsIDB1
KTsKIApAQCAtMTYwLDI4ICsxMzAsMzYgQEAgc3RhdGljIHN0ZDo6cGFpcjxMYXlvdXRUeXBlLCB1
bnNpZ25lZD4gY2xvc2VzdFNuYXBPZmZzZXRXaXRoT2Zmc2V0c0FuZFJhbmdlcyhjb24KICAgICBp
bmRpY2VzT2ZOZWFyZXN0U25hcE9mZnNldHM8TGF5b3V0VHlwZT4oc2Nyb2xsRGVzdGluYXRpb25P
ZmZzZXQsIHNuYXBPZmZzZXRzLCBsb3dlckluZGV4LCB1cHBlckluZGV4KTsKICAgICBMYXlvdXRU
eXBlIGxvd2VyU25hcFBvc2l0aW9uID0gc25hcE9mZnNldHNbbG93ZXJJbmRleF0ub2Zmc2V0Owog
ICAgIExheW91dFR5cGUgdXBwZXJTbmFwUG9zaXRpb24gPSBzbmFwT2Zmc2V0c1t1cHBlckluZGV4
XS5vZmZzZXQ7CisKKyAgICBhdXRvIHZpZXdwb3J0TGVuZ3RoID0gYXhpcyA9PSBTY3JvbGxFdmVu
dEF4aXM6Okhvcml6b250YWwgPyB2aWV3cG9ydFNpemUud2lkdGgoKSA6IHZpZXdwb3J0U2l6ZS5o
ZWlnaHQoKTsKKyAgICBpZiAoIWlzTmVhckVub3VnaFRvT2Zmc2V0Rm9yUHJveGltaXR5PExheW91
dFR5cGU+KGluZm8uc3RyaWN0bmVzcywgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIGxvd2VyU25h
cFBvc2l0aW9uLCB2aWV3cG9ydExlbmd0aCkpIHsKKyAgICAgICAgbG93ZXJTbmFwUG9zaXRpb24g
PSBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldDsKKyAgICAgICAgbG93ZXJJbmRleCA9IGludmFsaWRT
bmFwT2Zmc2V0SW5kZXg7CisgICAgfQorCisgICAgaWYgKCFpc05lYXJFbm91Z2hUb09mZnNldEZv
clByb3hpbWl0eTxMYXlvdXRUeXBlPihpbmZvLnN0cmljdG5lc3MsIHNjcm9sbERlc3RpbmF0aW9u
T2Zmc2V0LCB1cHBlclNuYXBQb3NpdGlvbiwgdmlld3BvcnRMZW5ndGgpKSB7CisgICAgICAgIHVw
cGVyU25hcFBvc2l0aW9uID0gc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQ7CisgICAgICAgIHVwcGVy
SW5kZXggPSBpbnZhbGlkU25hcE9mZnNldEluZGV4OworICAgIH0KICAgICBpZiAoIXN0ZDo6YWJz
KHZlbG9jaXR5KSkgewotICAgICAgICBib29sIGlzQ2xvc2VyVG9Mb3dlclNuYXBQb3NpdGlvbiA9
IHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0IC0gbG93ZXJTbmFwUG9zaXRpb24gPD0gdXBwZXJTbmFw
UG9zaXRpb24gLSBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldDsKKyAgICAgICAgYm9vbCBpc0Nsb3Nl
clRvTG93ZXJTbmFwUG9zaXRpb24gPSAodXBwZXJJbmRleCA9PSBpbnZhbGlkU25hcE9mZnNldElu
ZGV4KQorICAgICAgICAgICAgfHwgKGxvd2VySW5kZXggIT0gaW52YWxpZFNuYXBPZmZzZXRJbmRl
eCAmJiBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCAtIGxvd2VyU25hcFBvc2l0aW9uIDw9IHVwcGVy
U25hcFBvc2l0aW9uIC0gc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQpOwogICAgICAgICByZXR1cm4g
aXNDbG9zZXJUb0xvd2VyU25hcFBvc2l0aW9uID8gc3RkOjptYWtlX3BhaXIobG93ZXJTbmFwUG9z
aXRpb24sIGxvd2VySW5kZXgpIDogc3RkOjptYWtlX3BhaXIodXBwZXJTbmFwUG9zaXRpb24sIHVw
cGVySW5kZXgpOwogICAgIH0KIAogICAgIC8vIE5vbi16ZXJvIHZlbG9jaXR5IGluZGljYXRlcyBh
IGZsaWNrIGdlc3R1cmUuIEV2ZW4gaWYgYW5vdGhlciBzbmFwIHBvaW50IGlzIGNsb3Nlciwgd2Ug
c2hvdWxkIGNob29zZSB0aGUgb25lIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGZsaWNrIGdlc3R1
cmUKLSAgICAvLyBhcyBsb25nIGFzIGEgc2Nyb2xsIHNuYXAgb2Zmc2V0IHJhbmdlIGRvZXMgbm90
IGxpZSBiZXR3ZWVuIHRoZSBzY3JvbGwgZGVzdGluYXRpb24gYW5kIHRoZSB0YXJnZXRlZCBzbmFw
IG9mZnNldC4gSWYgd2UgYXJlIGRvaW5nIGRpcmVjdGlvbmFsCisgICAgLy8gYXMgbG9uZyBhcyBh
IHNjcm9sbCBzbmFwIG9mZnNldCBpcyBjbG9zZSBlbm91Z2ggZm9yIHByb3hpbWl0eSAob3Igd2Ug
YXJlbid0IHVzaW5nIHByb3hpbWl0eSkuIElmIHdlIGFyZSBkb2luZyBkaXJlY3Rpb25hbAogICAg
IC8vIHNuYXBwaW5nLCB3ZSBzaG91bGQgbmV2ZXIgc25hcCB0byBhIHBvaW50IHRoYXQgd2FzIG9u
IHRoZSBvdGhlciBzaWRlIG9mIHRoZSBvcmlnaW5hbCBwb3NpdGlvbiBpbiB0aGUgb3Bwb3NpdGUg
ZGlyZWN0aW9uIG9mIHRoaXMgc2Nyb2xsLgogICAgIC8vIFRoaXMgYWxsb3dzIGRpcmVjdGlvbmFs
IHNjcm9sbGluZyB0byBlc2NhcGUgc25hcCBwb2ludHMuCi0gICAgaWYgKHZlbG9jaXR5IDwgMCkg
ewotICAgICAgICBpZiAobG93ZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleCA9PSBpbnZhbGlkU25hcE9m
ZnNldEluZGV4IHx8IGxvd2VyU25hcFBvc2l0aW9uID49IHNuYXBPZmZzZXRSYW5nZXNbbG93ZXJT
bmFwT2Zmc2V0UmFuZ2VJbmRleF0uZW5kKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKGxvd2VyU25hcFBvc2l0aW9uLCBsb3dlckluZGV4KTsKLSAgICAgICAgaWYgKCFvcmlnaW5h
bE9mZnNldEZvckRpcmVjdGlvbmFsU25hcHBpbmcuaGFzVmFsdWUoKSB8fCAqb3JpZ2luYWxPZmZz
ZXRGb3JEaXJlY3Rpb25hbFNuYXBwaW5nID4gdXBwZXJTbmFwUG9zaXRpb24pCi0gICAgICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX3BhaXIodXBwZXJTbmFwUG9zaXRpb24sIHVwcGVySW5kZXgpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICh1cHBlclNuYXBPZmZzZXRSYW5nZUluZGV4ID09IGlu
dmFsaWRTbmFwT2Zmc2V0SW5kZXggfHwgc25hcE9mZnNldFJhbmdlc1t1cHBlclNuYXBPZmZzZXRS
YW5nZUluZGV4XS5zdGFydCA+PSB1cHBlclNuYXBQb3NpdGlvbikKKyAgICBpZiAodmVsb2NpdHkg
PCAwKSAgeworICAgICAgICBpZiAodXBwZXJJbmRleCAhPSBpbnZhbGlkU25hcE9mZnNldEluZGV4
ICYmICghb3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNuYXBwaW5nIHx8ICpvcmlnaW5hbE9m
ZnNldEZvckRpcmVjdGlvbmFsU25hcHBpbmcgPiB1cHBlclNuYXBQb3NpdGlvbikpCiAgICAgICAg
ICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIodXBwZXJTbmFwUG9zaXRpb24sIHVwcGVySW5kZXgp
OwotICAgICAgICBpZiAoIW9yaWdpbmFsT2Zmc2V0Rm9yRGlyZWN0aW9uYWxTbmFwcGluZy5oYXNW
YWx1ZSgpIHx8ICpvcmlnaW5hbE9mZnNldEZvckRpcmVjdGlvbmFsU25hcHBpbmcgPCBsb3dlclNu
YXBQb3NpdGlvbikKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihsb3dlclNuYXBQ
b3NpdGlvbiwgbG93ZXJJbmRleCk7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihsb3dl
clNuYXBQb3NpdGlvbiwgbG93ZXJJbmRleCk7CiAgICAgfQogCi0gICAgcmV0dXJuIHN0ZDo6bWFr
ZV9wYWlyKHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBpbnZhbGlkU25hcE9mZnNldEluZGV4KTsK
KyAgICBpZiAobG93ZXJJbmRleCAhPSBpbnZhbGlkU25hcE9mZnNldEluZGV4ICYmICghb3JpZ2lu
YWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNuYXBwaW5nIHx8ICpvcmlnaW5hbE9mZnNldEZvckRpcmVj
dGlvbmFsU25hcHBpbmcgPCBsb3dlclNuYXBQb3NpdGlvbikpCisgICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfcGFpcihsb3dlclNuYXBQb3NpdGlvbiwgbG93ZXJJbmRleCk7CisgICAgcmV0dXJuIHN0
ZDo6bWFrZV9wYWlyKHVwcGVyU25hcFBvc2l0aW9uLCB1cHBlckluZGV4KTsKIH0KIAogZW51bSBj
bGFzcyBJbnNldE9yT3V0c2V0IHsKQEAgLTIyMCwzMCArMTk4LDYgQEAgc3RhdGljIExheW91dFVu
aXQgY29tcHV0ZVNjcm9sbFNuYXBBbGlnbk9mZnNldChMYXlvdXRVbml0IG1pbkxvY2F0aW9uLCBM
YXlvdXRVbmkKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGNvbXB1dGVBeGlzUHJveGltaXR5U25h
cE9mZnNldFJhbmdlcyhjb25zdCBWZWN0b3I8U25hcE9mZnNldDxMYXlvdXRVbml0Pj4mIHNuYXBP
ZmZzZXRzLCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+JiBvZmZzZXRSYW5n
ZXMsIExheW91dFVuaXQgc2Nyb2xsUG9ydEF4aXNMZW5ndGgpCi17Ci0gICAgLy8gVGhpcyBpcyBh
biBhcmJpdHJhcnkgY2hvaWNlIGZvciB3aGF0IGl0IG1lYW5zIHRvIGJlICJpbiBwcm94aW1pdHki
IG9mIGEgc25hcCBvZmZzZXQuIFdlIHNob3VsZCBwbGF5IGFyb3VuZCB3aXRoCi0gICAgLy8gdGhp
cyBhbmQgc2VlIHdoYXQgZmVlbHMgYmVzdC4KLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgcmF0aW9P
ZlNjcm9sbFBvcnRBeGlzTGVuZ3RoVG9CZUNvbnNpZGVyZWRGb3JQcm94aW1pdHkgPSAwLjM7Ci0g
ICAgaWYgKHNuYXBPZmZzZXRzLnNpemUoKSA8IDIpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IFRoZSBleHRyYSBydWxlIGFjY291bnRpbmcgZm9yIHNjcm9sbCBvZmZzZXQgcmFuZ2VzIGluIGJl
dHdlZW4gdGhlIHNjcm9sbCBkZXN0aW5hdGlvbiBhbmQgYSBwb3RlbnRpYWwgc25hcCBvZmZzZXQK
LSAgICAvLyBoYW5kbGVzIHRoZSBjb3JuZXIgY2FzZSB3aGVyZSB0aGUgdXNlciBzY3JvbGxzIHdp
dGggbW9tZW50dW0gdmVyeSBsaWdodGx5IGF3YXkgZnJvbSBhIHNuYXAgb2Zmc2V0LCBzdWNoIHRo
YXQgdGhlCi0gICAgLy8gcHJlZGljdGVkIHNjcm9sbCBkZXN0aW5hdGlvbiBpcyBzdGlsbCB3aXRo
aW4gcHJveGltaXR5IG9mIHRoZSBzbmFwIG9mZnNldC4gSW4gdGhpcyBjYXNlLCB0aGUgcmVndWxh
ciAobWFuZGF0b3J5Ci0gICAgLy8gc2Nyb2xsIHNuYXBwaW5nKSBiZWhhdmlvciB3b3VsZCBiZSB0
byBzbmFwIHRvIHRoZSBuZXh0IG9mZnNldCBpbiB0aGUgZGlyZWN0aW9uIG9mIG1vbWVudHVtIHNj
cm9sbGluZywgYnV0Ci0gICAgLy8gaW5zdGVhZCwgaXQgaXMgbW9yZSBpbnR1aXRpdmUgdG8gZWl0
aGVyIHJldHVybiB0byB0aGUgb3JpZ2luYWwgc25hcCBwb3NpdGlvbiAod2hpY2ggd2UgYXJiaXRy
YXJpbHkgY2hvb3NlIGhlcmUpCi0gICAgLy8gb3Igc2Nyb2xsIGp1c3Qgb3V0c2lkZSBvZiB0aGUg
c25hcCBvZmZzZXQgcmFuZ2UuIFRoaXMgaXMgYW5vdGhlciBtaW5vciBiZWhhdmlvciB0d2VhayB0
aGF0IHdlIHNob3VsZCBwbGF5IGFyb3VuZAotICAgIC8vIHdpdGggdG8gc2VlIHdoYXQgZmVlbHMg
YmVzdC4KLSAgICBMYXlvdXRVbml0IHByb3hpbWl0eURpc3RhbmNlIHsgcmF0aW9PZlNjcm9sbFBv
cnRBeGlzTGVuZ3RoVG9CZUNvbnNpZGVyZWRGb3JQcm94aW1pdHkgKiBzY3JvbGxQb3J0QXhpc0xl
bmd0aCB9OwotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMTsgaW5kZXggPCBzbmFwT2Zmc2V0cy5z
aXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgYXV0byBzdGFydE9mZnNldCA9IHNuYXBPZmZzZXRz
W2luZGV4IC0gMV0ub2Zmc2V0ICsgcHJveGltaXR5RGlzdGFuY2U7Ci0gICAgICAgIGF1dG8gZW5k
T2Zmc2V0ID0gc25hcE9mZnNldHNbaW5kZXhdLm9mZnNldCAtIHByb3hpbWl0eURpc3RhbmNlOwot
ICAgICAgICBpZiAoc3RhcnRPZmZzZXQgPCBlbmRPZmZzZXQpCi0gICAgICAgICAgICBvZmZzZXRS
YW5nZXMuYXBwZW5kKHsgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCB9KTsKLSAgICB9Ci19Ci0KIHZv
aWQgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYShTY3JvbGxhYmxlQXJlYSYgc2Ny
b2xsYWJsZUFyZWEsIGNvbnN0IFJlbmRlckJveCYgc2Nyb2xsaW5nRWxlbWVudEJveCwgY29uc3Qg
UmVuZGVyU3R5bGUmIHNjcm9sbGluZ0VsZW1lbnRTdHlsZSwgTGF5b3V0UmVjdCB2aWV3cG9ydFJl
Y3RJbkJvcmRlckJveENvb3JkaW5hdGVzKQogewogICAgIGF1dG8gc2Nyb2xsU25hcFR5cGUgPSBz
Y3JvbGxpbmdFbGVtZW50U3R5bGUuc2Nyb2xsU25hcFR5cGUoKTsKQEAgLTI2Myw2ICsyMTcsNyBA
QCB2b2lkIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEm
IHNjcm9sbGFibGVBcmVhLCBjb25zdCBSZQogCiAgICAgSGFzaE1hcDxmbG9hdCwgU25hcE9mZnNl
dDxMYXlvdXRVbml0Pj4gdmVydGljYWxTbmFwT2Zmc2V0c01hcDsKICAgICBIYXNoTWFwPGZsb2F0
LCBTbmFwT2Zmc2V0PExheW91dFVuaXQ+PiBob3Jpem9udGFsU25hcE9mZnNldHNNYXA7CisgICAg
VmVjdG9yPExheW91dFJlY3Q+IHNuYXBBcmVhczsKICAgICBib29sIGhhc0hvcml6b250YWxTbmFw
T2Zmc2V0cyA9IHNjcm9sbFNuYXBUeXBlLmF4aXMgPT0gU2Nyb2xsU25hcEF4aXM6OkJvdGggfHwg
c2Nyb2xsU25hcFR5cGUuYXhpcyA9PSBTY3JvbGxTbmFwQXhpczo6WEF4aXMgfHwgc2Nyb2xsU25h
cFR5cGUuYXhpcyA9PSBTY3JvbGxTbmFwQXhpczo6SW5saW5lOwogICAgIGJvb2wgaGFzVmVydGlj
YWxTbmFwT2Zmc2V0cyA9IHNjcm9sbFNuYXBUeXBlLmF4aXMgPT0gU2Nyb2xsU25hcEF4aXM6OkJv
dGggfHwgc2Nyb2xsU25hcFR5cGUuYXhpcyA9PSBTY3JvbGxTbmFwQXhpczo6WUF4aXMgfHwgc2Ny
b2xsU25hcFR5cGUuYXhpcyA9PSBTY3JvbGxTbmFwQXhpczo6QmxvY2s7CiAKQEAgLTI5MSwxNiAr
MjQ2LDMwIEBAIHZvaWQgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYShTY3JvbGxh
YmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIGNvbnN0IFJlCiAgICAgICAgIExPR19XSVRIX1NUUkVB
TShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIiAgICBDb25zaWRlcmluZyBzY3JvbGwgc25hcCB0YXJn
ZXQgYXJlYSAiIDw8IHNjcm9sbFNuYXBBcmVhKTsKICAgICAgICAgYXV0byBhbGlnbm1lbnQgPSBj
aGlsZC0+c3R5bGUoKS5zY3JvbGxTbmFwQWxpZ24oKTsKICAgICAgICAgYXV0byBzdG9wID0gY2hp
bGQtPnN0eWxlKCkuc2Nyb2xsU25hcFN0b3AoKTsKLSAgICAgICAgaWYgKGhhc0hvcml6b250YWxT
bmFwT2Zmc2V0cyAmJiBhbGlnbm1lbnQueCAhPSBTY3JvbGxTbmFwQXhpc0FsaWduVHlwZTo6Tm9u
ZSkgeworCisgICAgICAgIGJvb2wgc25hcHNIb3Jpem9udGFsbHkgPSBoYXNIb3Jpem9udGFsU25h
cE9mZnNldHMgJiYgYWxpZ25tZW50LnggIT0gU2Nyb2xsU25hcEF4aXNBbGlnblR5cGU6Ok5vbmU7
CisgICAgICAgIGJvb2wgc25hcHNWZXJ0aWNhbGx5ID0gaGFzVmVydGljYWxTbmFwT2Zmc2V0cyAm
JiBhbGlnbm1lbnQueSAhPSBTY3JvbGxTbmFwQXhpc0FsaWduVHlwZTo6Tm9uZTsKKyAgICAgICAg
aWYgKCFzbmFwc0hvcml6b250YWxseSAmJiAhc25hcHNWZXJ0aWNhbGx5KQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgLy8gVGhlIHNjcm9sbCBzbmFwIGFyZWEgaXMgZGVmaW5lZCB2
aWEgaXRzIHNjcm9sbCBwb3NpdGlvbiwgc28gY29udmVydCB0aGUgc25hcCBhcmVhIHJlY3Rhbmds
ZSB0byBiZSByZWxhdGl2ZSB0byBzY3JvbGwgb2Zmc2V0cy4KKyAgICAgICAgYXV0byBzbmFwQXJl
YU9yaWdpblJlbGF0aXZlVG9Cb3JkZXJFZGdlID0gc2Nyb2xsU25hcEFyZWEubG9jYXRpb24oKSAt
IHNjcm9sbFNuYXBQb3J0LmxvY2F0aW9uKCk7CisgICAgICAgIExheW91dFJlY3Qgc2Nyb2xsU25h
cEFyZWFBc09mZnNldHMoc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHJv
dW5kZWRJbnRQb2ludChzbmFwQXJlYU9yaWdpblJlbGF0aXZlVG9Cb3JkZXJFZGdlKSksIHNjcm9s
bFNuYXBBcmVhLnNpemUoKSk7CisgICAgICAgIHNuYXBBcmVhcy5hcHBlbmQoc2Nyb2xsU25hcEFy
ZWFBc09mZnNldHMpOworCisgICAgICAgIGlmIChzbmFwc0hvcml6b250YWxseSkgewogICAgICAg
ICAgICAgYXV0byBhYnNvbHV0ZVNjcm9sbFhQb3NpdGlvbiA9IGNvbXB1dGVTY3JvbGxTbmFwQWxp
Z25PZmZzZXQoc2Nyb2xsU25hcEFyZWEueCgpLCBzY3JvbGxTbmFwQXJlYS5tYXhYKCksIGFsaWdu
bWVudC54LCBzY3JvbGxlcklzUlRMKSAtIGNvbXB1dGVTY3JvbGxTbmFwQWxpZ25PZmZzZXQoc2Ny
b2xsU25hcFBvcnQueCgpLCBzY3JvbGxTbmFwUG9ydC5tYXhYKCksIGFsaWdubWVudC54LCBzY3Jv
bGxlcklzUlRMKTsKICAgICAgICAgICAgIGF1dG8gYWJzb2x1dGVTY3JvbGxPZmZzZXQgPSBjbGFt
cFRvPGludD4oc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHsgcm91bmRU
b0ludChhYnNvbHV0ZVNjcm9sbFhQb3NpdGlvbiksIDAgfSkueCgpLCAwLCBtYXhTY3JvbGxPZmZz
ZXQueCgpKTsKLSAgICAgICAgICAgIGFkZE9yVXBkYXRlU3RvcEZvclNuYXBPZmZzZXQoaG9yaXpv
bnRhbFNuYXBPZmZzZXRzTWFwLCB7IGFic29sdXRlU2Nyb2xsT2Zmc2V0LCBzdG9wIH0pOworICAg
ICAgICAgICAgYWRkT3JVcGRhdGVTdG9wRm9yU25hcE9mZnNldChob3Jpem9udGFsU25hcE9mZnNl
dHNNYXAsIHsgYWJzb2x1dGVTY3JvbGxPZmZzZXQsIHN0b3AsIHNuYXBBcmVhcy5zaXplKCkgLSAx
IH0pOwogICAgICAgICB9Ci0gICAgICAgIGlmIChoYXNWZXJ0aWNhbFNuYXBPZmZzZXRzICYmIGFs
aWdubWVudC55ICE9IFNjcm9sbFNuYXBBeGlzQWxpZ25UeXBlOjpOb25lKSB7CisgICAgICAgIGlm
IChzbmFwc1ZlcnRpY2FsbHkpIHsKICAgICAgICAgICAgIGF1dG8gYWJzb2x1dGVTY3JvbGxZUG9z
aXRpb24gPSBjb21wdXRlU2Nyb2xsU25hcEFsaWduT2Zmc2V0KHNjcm9sbFNuYXBBcmVhLnkoKSwg
c2Nyb2xsU25hcEFyZWEubWF4WSgpLCBhbGlnbm1lbnQueSwgZmFsc2UpIC0gY29tcHV0ZVNjcm9s
bFNuYXBBbGlnbk9mZnNldChzY3JvbGxTbmFwUG9ydC55KCksIHNjcm9sbFNuYXBQb3J0Lm1heFko
KSwgYWxpZ25tZW50LnksIGZhbHNlKTsKICAgICAgICAgICAgIGF1dG8gYWJzb2x1dGVTY3JvbGxP
ZmZzZXQgPSBjbGFtcFRvPGludD4oc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0
aW9uKHsgMCwgcm91bmRUb0ludChhYnNvbHV0ZVNjcm9sbFlQb3NpdGlvbikgfSkueSgpLCAwLCBt
YXhTY3JvbGxPZmZzZXQueSgpKTsKLSAgICAgICAgICAgIGFkZE9yVXBkYXRlU3RvcEZvclNuYXBP
ZmZzZXQodmVydGljYWxTbmFwT2Zmc2V0c01hcCwgeyBhYnNvbHV0ZVNjcm9sbE9mZnNldCwgc3Rv
cCB9KTsKKyAgICAgICAgICAgIGFkZE9yVXBkYXRlU3RvcEZvclNuYXBPZmZzZXQodmVydGljYWxT
bmFwT2Zmc2V0c01hcCwgeyBhYnNvbHV0ZVNjcm9sbE9mZnNldCwgc3RvcCwgc25hcEFyZWFzLnNp
emUoKSAtIDEgfSk7CiAgICAgICAgIH0KKworICAgICAgICBpZiAoIXNuYXBBcmVhcy5pc0VtcHR5
KCkpCisgICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICIg
PT4gQ29tcHV0ZWQgc25hcCBhcmVhczogIiA8PCBzbmFwQXJlYXMpOwogICAgIH0KIAogICAgIGF1
dG8gY29tcGFyZVNuYXBPZmZzZXRzID0gW10oY29uc3QgU25hcE9mZnNldDxMYXlvdXRVbml0PiYg
YSwgY29uc3QgU25hcE9mZnNldDxMYXlvdXRVbml0PiYgYikKQEAgLTMwOSwzMiArMjc4LDIyIEBA
IHZvaWQgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYShTY3JvbGxhYmxlQXJlYSYg
c2Nyb2xsYWJsZUFyZWEsIGNvbnN0IFJlCiAgICAgfTsKIAogICAgIFZlY3RvcjxTbmFwT2Zmc2V0
PExheW91dFVuaXQ+PiBob3Jpem9udGFsU25hcE9mZnNldHMgPSBjb3B5VG9WZWN0b3IoaG9yaXpv
bnRhbFNuYXBPZmZzZXRzTWFwLnZhbHVlcygpKTsKLSAgICBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFu
Z2U8TGF5b3V0VW5pdD4+IGhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzOwogICAgIGlmICghaG9y
aXpvbnRhbFNuYXBPZmZzZXRzLmlzRW1wdHkoKSkgewogICAgICAgICBzdGQ6OnNvcnQoaG9yaXpv
bnRhbFNuYXBPZmZzZXRzLmJlZ2luKCksIGhvcml6b250YWxTbmFwT2Zmc2V0cy5lbmQoKSwgY29t
cGFyZVNuYXBPZmZzZXRzKTsKLSAgICAgICAgaWYgKHNjcm9sbFNuYXBUeXBlLnN0cmljdG5lc3Mg
PT0gU2Nyb2xsU25hcFN0cmljdG5lc3M6OlByb3hpbWl0eSkKLSAgICAgICAgICAgIGNvbXB1dGVB
eGlzUHJveGltaXR5U25hcE9mZnNldFJhbmdlcyhob3Jpem9udGFsU25hcE9mZnNldHMsIGhvcml6
b250YWxTbmFwT2Zmc2V0UmFuZ2VzLCBzY3JvbGxTbmFwUG9ydC53aWR0aCgpKTsKLQogICAgICAg
ICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICIgPT4gQ29tcHV0ZWQgaG9y
aXpvbnRhbCBzY3JvbGwgc25hcCBvZmZzZXRzOiAiIDw8IGhvcml6b250YWxTbmFwT2Zmc2V0cyk7
Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIiA9PiBDb21w
dXRlZCBob3Jpem9udGFsIHNjcm9sbCBzbmFwIG9mZnNldCByYW5nZXM6ICIgPDwgaG9yaXpvbnRh
bFNuYXBPZmZzZXRSYW5nZXMpOwogICAgIH0KIAogICAgIFZlY3RvcjxTbmFwT2Zmc2V0PExheW91
dFVuaXQ+PiB2ZXJ0aWNhbFNuYXBPZmZzZXRzID0gY29weVRvVmVjdG9yKHZlcnRpY2FsU25hcE9m
ZnNldHNNYXAudmFsdWVzKCkpOwotICAgIFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRV
bml0Pj4gdmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzOwogICAgIGlmICghdmVydGljYWxTbmFwT2Zm
c2V0cy5pc0VtcHR5KCkpIHsKICAgICAgICAgc3RkOjpzb3J0KHZlcnRpY2FsU25hcE9mZnNldHMu
YmVnaW4oKSwgdmVydGljYWxTbmFwT2Zmc2V0cy5lbmQoKSwgY29tcGFyZVNuYXBPZmZzZXRzKTsK
LSAgICAgICAgaWYgKHNjcm9sbFNuYXBUeXBlLnN0cmljdG5lc3MgPT0gU2Nyb2xsU25hcFN0cmlj
dG5lc3M6OlByb3hpbWl0eSkKLSAgICAgICAgICAgIGNvbXB1dGVBeGlzUHJveGltaXR5U25hcE9m
ZnNldFJhbmdlcyh2ZXJ0aWNhbFNuYXBPZmZzZXRzLCB2ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMs
IHNjcm9sbFNuYXBQb3J0LmhlaWdodCgpKTsKLQogICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Ny
b2xsU25hcCwgc3RyZWFtIDw8ICIgPT4gQ29tcHV0ZWQgdmVydGljYWwgc2Nyb2xsIHNuYXAgb2Zm
c2V0czogIiA8PCB2ZXJ0aWNhbFNuYXBPZmZzZXRzKTsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFN
KFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiID0+IENvbXB1dGVkIHZlcnRpY2FsIHNjcm9sbCBzbmFw
IG9mZnNldCByYW5nZXM6ICIgPDwgdmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzKTsKICAgICB9CiAK
ICAgICBzY3JvbGxhYmxlQXJlYS5zZXRTY3JvbGxTbmFwT2Zmc2V0SW5mbyh7CisgICAgICAgIHNj
cm9sbFNuYXBUeXBlLnN0cmljdG5lc3MsCiAgICAgICAgIGhvcml6b250YWxTbmFwT2Zmc2V0cywK
ICAgICAgICAgdmVydGljYWxTbmFwT2Zmc2V0cywKLSAgICAgICAgaG9yaXpvbnRhbFNuYXBPZmZz
ZXRSYW5nZXMsCi0gICAgICAgIHZlcnRpY2FsU25hcE9mZnNldFJhbmdlcworICAgICAgICBzbmFw
QXJlYXMKICAgICB9KTsKIH0KIApAQCAtMzQ4LDU3ICszMDcsNjQgQEAgc3RhdGljIExheW91dFVu
aXQgY29udmVydE9mZnNldFVuaXQoZmxvYXQgaW5wdXQsIGZsb2F0IC8qIHNjYWxlRmFjdG9yICov
KQogICAgIHJldHVybiBMYXlvdXRVbml0KGlucHV0KTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1l
IElucHV0VHlwZSwgdHlwZW5hbWUgT3V0cHV0VHlwZT4KLXN0YXRpYyBTY3JvbGxTbmFwT2Zmc2V0
c0luZm88T3V0cHV0VHlwZT4gY29udmVydE9mZnNldEluZm8oY29uc3QgU2Nyb2xsU25hcE9mZnNl
dHNJbmZvPElucHV0VHlwZT4mIGlucHV0LCBmbG9hdCBzY2FsZUZhY3RvciA9IDAuMCkKK3RlbXBs
YXRlIDx0eXBlbmFtZSBJbnB1dFR5cGUsIHR5cGVuYW1lIElucHV0UmVjdFR5cGUsIHR5cGVuYW1l
IE91dHB1dFR5cGUsIHR5cGVuYW1lIE91dHB1dFJlY3RUeXBlPgorc3RhdGljIFNjcm9sbFNuYXBP
ZmZzZXRzSW5mbzxPdXRwdXRUeXBlLCBPdXRwdXRSZWN0VHlwZT4gY29udmVydE9mZnNldEluZm8o
Y29uc3QgU2Nyb2xsU25hcE9mZnNldHNJbmZvPElucHV0VHlwZSwgSW5wdXRSZWN0VHlwZT4mIGlu
cHV0LCBmbG9hdCBzY2FsZUZhY3RvciA9IDAuMCkKIHsKICAgICBhdXRvIGNvbnZlcnRPZmZzZXRz
ID0gW3NjYWxlRmFjdG9yXShjb25zdCBWZWN0b3I8U25hcE9mZnNldDxJbnB1dFR5cGU+PiYgaW5w
dXQpCiAgICAgewogICAgICAgICBWZWN0b3I8U25hcE9mZnNldDxPdXRwdXRUeXBlPj4gb3V0cHV0
OwogICAgICAgICBvdXRwdXQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpbnB1dC5zaXplKCkpOwog
ICAgICAgICBmb3IgKGF1dG8mIG9mZnNldCA6IGlucHV0KQotICAgICAgICAgICAgb3V0cHV0LnVu
Y2hlY2tlZEFwcGVuZCh7IGNvbnZlcnRPZmZzZXRVbml0KG9mZnNldC5vZmZzZXQsIHNjYWxlRmFj
dG9yKSwgb2Zmc2V0LnN0b3AgfSk7CisgICAgICAgICAgICBvdXRwdXQudW5jaGVja2VkQXBwZW5k
KHsgY29udmVydE9mZnNldFVuaXQob2Zmc2V0Lm9mZnNldCwgc2NhbGVGYWN0b3IpLCBvZmZzZXQu
c3RvcCwgb2Zmc2V0LnNuYXBBcmVhSW5kZXggfSk7CiAgICAgICAgIHJldHVybiBvdXRwdXQ7CiAg
ICAgfTsKIAotICAgIGF1dG8gY29udmVydE9mZnNldFJhbmdlcyA9IFtzY2FsZUZhY3Rvcl0oY29u
c3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPElucHV0VHlwZT4+JiBpbnB1dCkKKyAgICBhdXRv
IGNvbnZlcnRSZWN0cyA9IFtzY2FsZUZhY3Rvcl0oY29uc3QgVmVjdG9yPElucHV0UmVjdFR5cGU+
JiBpbnB1dCkKICAgICB7Ci0gICAgICAgIFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxPdXRwdXRU
eXBlPj4gb3V0cHV0OworICAgICAgICBWZWN0b3I8T3V0cHV0UmVjdFR5cGU+IG91dHB1dDsKICAg
ICAgICAgb3V0cHV0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaW5wdXQuc2l6ZSgpKTsKLSAgICAg
ICAgZm9yIChhdXRvJiByYW5nZSA6IGlucHV0KQotICAgICAgICAgICAgb3V0cHV0LnVuY2hlY2tl
ZEFwcGVuZCh7IGNvbnZlcnRPZmZzZXRVbml0KHJhbmdlLnN0YXJ0LCBzY2FsZUZhY3RvciksIGNv
bnZlcnRPZmZzZXRVbml0KHJhbmdlLmVuZCwgc2NhbGVGYWN0b3IpIH0pOworICAgICAgICBmb3Ig
KGF1dG8mIHJlY3QgOiBpbnB1dCkgeworICAgICAgICAgICAgT3V0cHV0UmVjdFR5cGUgb3V0cHV0
UmVjdCgKKyAgICAgICAgICAgICAgICBjb252ZXJ0T2Zmc2V0VW5pdChyZWN0LngoKSwgc2NhbGVG
YWN0b3IpLCBjb252ZXJ0T2Zmc2V0VW5pdChyZWN0LnkoKSwgc2NhbGVGYWN0b3IpLAorICAgICAg
ICAgICAgICAgIGNvbnZlcnRPZmZzZXRVbml0KHJlY3Qud2lkdGgoKSwgc2NhbGVGYWN0b3IpLCBj
b252ZXJ0T2Zmc2V0VW5pdChyZWN0LmhlaWdodCgpLCBzY2FsZUZhY3RvcikpOworICAgICAgICAg
ICAgb3V0cHV0LnVuY2hlY2tlZEFwcGVuZChvdXRwdXRSZWN0KTsKKyAgICAgICAgfQorCiAgICAg
ICAgIHJldHVybiBvdXRwdXQ7CiAgICAgfTsKIAogICAgIHJldHVybiB7CisgICAgICAgIGlucHV0
LnN0cmljdG5lc3MsCiAgICAgICAgIGNvbnZlcnRPZmZzZXRzKGlucHV0Lmhvcml6b250YWxTbmFw
T2Zmc2V0cyksCiAgICAgICAgIGNvbnZlcnRPZmZzZXRzKGlucHV0LnZlcnRpY2FsU25hcE9mZnNl
dHMpLAotICAgICAgICBjb252ZXJ0T2Zmc2V0UmFuZ2VzKGlucHV0Lmhvcml6b250YWxTbmFwT2Zm
c2V0UmFuZ2VzKSwKLSAgICAgICAgY29udmVydE9mZnNldFJhbmdlcyhpbnB1dC52ZXJ0aWNhbFNu
YXBPZmZzZXRSYW5nZXMpCisgICAgICAgIGNvbnZlcnRSZWN0cyhpbnB1dC5zbmFwQXJlYXMpLAog
ICAgIH07CiB9CiAKIHRlbXBsYXRlIDw+IHRlbXBsYXRlIDw+CiBMYXlvdXRTY3JvbGxTbmFwT2Zm
c2V0c0luZm8gRmxvYXRTY3JvbGxTbmFwT2Zmc2V0c0luZm86OmNvbnZlcnRVbml0cyhmbG9hdCAv
KiB1bnVzZWRTY2FsZUZhY3RvciAqLykgY29uc3QKIHsKLSAgICByZXR1cm4gY29udmVydE9mZnNl
dEluZm88ZmxvYXQsIExheW91dFVuaXQ+KCp0aGlzKTsKKyAgICByZXR1cm4gY29udmVydE9mZnNl
dEluZm88ZmxvYXQsIEZsb2F0UmVjdCwgTGF5b3V0VW5pdCwgTGF5b3V0UmVjdD4oKnRoaXMpOwor
CiB9CiAKIHRlbXBsYXRlIDw+IHRlbXBsYXRlIDw+CiBGbG9hdFNjcm9sbFNuYXBPZmZzZXRzSW5m
byBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm86OmNvbnZlcnRVbml0cyhmbG9hdCBkZXZpY2VT
Y2FsZUZhY3RvcikgY29uc3QKIHsKLSAgICByZXR1cm4gY29udmVydE9mZnNldEluZm88TGF5b3V0
VW5pdCwgZmxvYXQ+KCp0aGlzLCBkZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgcmV0dXJuIGNvbnZl
cnRPZmZzZXRJbmZvPExheW91dFVuaXQsIExheW91dFJlY3QsIGZsb2F0LCBGbG9hdFJlY3Q+KCp0
aGlzLCBkZXZpY2VTY2FsZUZhY3Rvcik7CisKIH0KIAotdGVtcGxhdGUgPD4KLXN0ZDo6cGFpcjxM
YXlvdXRVbml0LCB1bnNpZ25lZD4gTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvOjpjbG9zZXN0
U25hcE9mZnNldChTY3JvbGxFdmVudEF4aXMgYXhpcywgTGF5b3V0VW5pdCBzY3JvbGxEZXN0aW5h
dGlvbk9mZnNldCwgZmxvYXQgdmVsb2NpdHksIE9wdGlvbmFsPExheW91dFVuaXQ+IG9yaWdpbmFs
UG9zaXRpb25Gb3JEaXJlY3Rpb25hbFNuYXBwaW5nKSBjb25zdAordGVtcGxhdGUgPD4gdGVtcGxh
dGUgPD4KK3N0ZDo6cGFpcjxMYXlvdXRVbml0LCB1bnNpZ25lZD4gTGF5b3V0U2Nyb2xsU25hcE9m
ZnNldHNJbmZvOjpjbG9zZXN0U25hcE9mZnNldChTY3JvbGxFdmVudEF4aXMgYXhpcywgY29uc3Qg
TGF5b3V0U2l6ZSYgdmlld3BvcnRTaXplLCBMYXlvdXRVbml0IHNjcm9sbERlc3RpbmF0aW9uT2Zm
c2V0LCBmbG9hdCB2ZWxvY2l0eSwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gb3JpZ2luYWxQb3NpdGlv
bkZvckRpcmVjdGlvbmFsU25hcHBpbmcpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNsb3Nlc3RTbmFw
T2Zmc2V0V2l0aE9mZnNldHNBbmRSYW5nZXMob2Zmc2V0c0ZvckF4aXMoYXhpcyksIG9mZnNldFJh
bmdlc0ZvckF4aXMoYXhpcyksIHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCB2ZWxvY2l0eSwgb3Jp
Z2luYWxQb3NpdGlvbkZvckRpcmVjdGlvbmFsU25hcHBpbmcpOworICAgIHJldHVybiBjbG9zZXN0
U25hcE9mZnNldFdpdGhJbmZvQW5kQXhpcygqdGhpcywgYXhpcywgdmlld3BvcnRTaXplLCBzY3Jv
bGxEZXN0aW5hdGlvbk9mZnNldCwgdmVsb2NpdHksIG9yaWdpbmFsUG9zaXRpb25Gb3JEaXJlY3Rp
b25hbFNuYXBwaW5nKTsKIH0KIAotdGVtcGxhdGUgPD4KLXN0ZDo6cGFpcjxmbG9hdCwgdW5zaWdu
ZWQ+IEZsb2F0U2Nyb2xsU25hcE9mZnNldHNJbmZvOjpjbG9zZXN0U25hcE9mZnNldChTY3JvbGxF
dmVudEF4aXMgYXhpcywgZmxvYXQgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIGZsb2F0IHZlbG9j
aXR5LCBPcHRpb25hbDxmbG9hdD4gb3JpZ2luYWxQb3NpdGlvbkZvckRpcmVjdGlvbmFsU25hcHBp
bmcpIGNvbnN0Cit0ZW1wbGF0ZSA8PiB0ZW1wbGF0ZTw+CitzdGQ6OnBhaXI8ZmxvYXQsIHVuc2ln
bmVkPiBGbG9hdFNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6Y2xvc2VzdFNuYXBPZmZzZXQoU2Nyb2xs
RXZlbnRBeGlzIGF4aXMsIGNvbnN0IEZsb2F0U2l6ZSYgdmlld3BvcnRTaXplLCBmbG9hdCBzY3Jv
bGxEZXN0aW5hdGlvbk9mZnNldCwgZmxvYXQgdmVsb2NpdHksIE9wdGlvbmFsPGZsb2F0PiBvcmln
aW5hbFBvc2l0aW9uRm9yRGlyZWN0aW9uYWxTbmFwcGluZykgY29uc3QKIHsKLSAgICByZXR1cm4g
Y2xvc2VzdFNuYXBPZmZzZXRXaXRoT2Zmc2V0c0FuZFJhbmdlcyhvZmZzZXRzRm9yQXhpcyhheGlz
KSwgb2Zmc2V0UmFuZ2VzRm9yQXhpcyhheGlzKSwgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIHZl
bG9jaXR5LCBvcmlnaW5hbFBvc2l0aW9uRm9yRGlyZWN0aW9uYWxTbmFwcGluZyk7CisgICAgcmV0
dXJuIGNsb3Nlc3RTbmFwT2Zmc2V0V2l0aEluZm9BbmRBeGlzKCp0aGlzLCBheGlzLCB2aWV3cG9y
dFNpemUsIHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCB2ZWxvY2l0eSwgb3JpZ2luYWxQb3NpdGlv
bkZvckRpcmVjdGlvbmFsU25hcHBpbmcpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uaCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5oCmluZGV4IDU4ZTI0MTUz
MTgxZGEzNTE1MjIzNDFlMzZmNzE0OTM5ZDg1NzJkZDYuLmQxNjBjOTViYzQzZmY5ODFjMGE0N2Jm
MzYwM2M0MDA2ZGNlZTMxY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5oCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVk
ZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKICNpbmNsdWRlICJTY3Jv
bGxUeXBlcy5oIgogI2luY2x1ZGUgIlN0eWxlU2Nyb2xsU25hcFBvaW50cy5oIgpAQCAtMzUsNyAr
MzcsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIExheW91dFJlY3Q7CiBjbGFz
cyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFJlbmRlckJveDsKIGNsYXNzIFJlbmRlclN0eWxlOwpA
QCAtNDQsMzAgKzQ1LDIwIEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogc3RydWN0IFNuYXBPZmZz
ZXQgewogICAgIFQgb2Zmc2V0OwogICAgIFNjcm9sbFNuYXBTdG9wIHN0b3A7CisgICAgc2l6ZV90
IHNuYXBBcmVhSW5kZXg7CiB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBTY3Jv
bGxPZmZzZXRSYW5nZSB7Ci0gICAgVCBzdGFydDsKLSAgICBUIGVuZDsKLX07Ci0KLXRlbXBsYXRl
IDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPHR5cGVuYW1lIFVuaXRUeXBlLCB0eXBlbmFtZSBSZWN0
VHlwZT4KIHN0cnVjdCBTY3JvbGxTbmFwT2Zmc2V0c0luZm8gewogICAgIFdURl9NQUtFX1NUUlVD
VF9GQVNUX0FMTE9DQVRFRDsKLSAgICBWZWN0b3I8U25hcE9mZnNldDxUPj4gaG9yaXpvbnRhbFNu
YXBPZmZzZXRzOwotICAgIFZlY3RvcjxTbmFwT2Zmc2V0PFQ+PiB2ZXJ0aWNhbFNuYXBPZmZzZXRz
OworICAgIFNjcm9sbFNuYXBTdHJpY3RuZXNzIHN0cmljdG5lc3M7CisgICAgVmVjdG9yPFNuYXBP
ZmZzZXQ8VW5pdFR5cGU+PiBob3Jpem9udGFsU25hcE9mZnNldHM7CisgICAgVmVjdG9yPFNuYXBP
ZmZzZXQ8VW5pdFR5cGU+PiB2ZXJ0aWNhbFNuYXBPZmZzZXRzOworICAgIFZlY3RvcjxSZWN0VHlw
ZT4gc25hcEFyZWFzOwogCi0gICAgLy8gU25hcCBvZmZzZXQgcmFuZ2VzIHJlcHJlc2VudCBub24t
ZW1wdHkgcmFuZ2VzIG9mIHNjcm9sbCBvZmZzZXRzIGluIHdoaWNoIHNjcm9sbGluZyBtYXkgcmVz
dCBhZnRlciBzY3JvbGwgc25hcHBpbmcuCi0gICAgLy8gVGhlc2UgYXJlIHVzZWQgaW4gdHdvIGNh
c2VzOiAoMSkgZm9yIHByb3hpbWl0eSBzY3JvbGwgc25hcHBpbmcsIHdoZXJlIHBvcnRpb25zIG9m
IGFyZWFzIGJldHdlZW4gYWRqYWNlbnQgc25hcCBvZmZzZXRzCi0gICAgLy8gbWF5IGVtaXQgc25h
cCBvZmZzZXQgcmFuZ2VzLCBhbmQgKDIpIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBzbmFwIGFyZWEg
aXMgbGFyZ2VyIHRoYW4gdGhlIHNuYXAgcG9ydCwgaW4gd2hpY2ggY2FzZSBhcmVhcwotICAgIC8v
IHdoZXJlIHRoZSBzbmFwIHBvcnQgZml0cyB3aXRoaW4gdGhlIHNuYXAgYXJlYSBhcmUgY29uc2lk
ZXJlZCB0byBiZSB2YWxpZCBzbmFwIHBvc2l0aW9ucy4KLSAgICBWZWN0b3I8U2Nyb2xsT2Zmc2V0
UmFuZ2U8VD4+IGhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzOwotICAgIFZlY3RvcjxTY3JvbGxP
ZmZzZXRSYW5nZTxUPj4gdmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzOwotCi0gICAgYm9vbCBpc0Vx
dWFsKGNvbnN0IFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxUPiYgb3RoZXIpIGNvbnN0CisgICAgYm9v
bCBpc0VxdWFsKGNvbnN0IFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxVbml0VHlwZSwgUmVjdFR5cGU+
JiBvdGhlcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBob3Jpem9udGFsU25hcE9mZnNl
dHMgPT0gb3RoZXIuaG9yaXpvbnRhbFNuYXBPZmZzZXRzICYmIHZlcnRpY2FsU25hcE9mZnNldHMg
PT0gb3RoZXIudmVydGljYWxTbmFwT2Zmc2V0cyAmJiBob3Jpem9udGFsU25hcE9mZnNldFJhbmdl
cyA9PSBvdGhlci5ob3Jpem9udGFsU25hcE9mZnNldFJhbmdlcyAmJiB2ZXJ0aWNhbFNuYXBPZmZz
ZXRSYW5nZXMgPT0gb3RoZXIudmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzOworICAgICAgICByZXR1
cm4gc3RyaWN0bmVzcyA9PSBvdGhlci5zdHJpY3RuZXNzICYmIGhvcml6b250YWxTbmFwT2Zmc2V0
cyA9PSBvdGhlci5ob3Jpem9udGFsU25hcE9mZnNldHMgJiYgdmVydGljYWxTbmFwT2Zmc2V0cyA9
PSBvdGhlci52ZXJ0aWNhbFNuYXBPZmZzZXRzICYmIHNuYXBBcmVhcyA9PSBvdGhlci5zbmFwQXJl
YXM7CiAgICAgfQogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKQEAgLTc1LDMyICs2NiwzMCBA
QCBzdHJ1Y3QgU2Nyb2xsU25hcE9mZnNldHNJbmZvIHsKICAgICAgICAgcmV0dXJuIGhvcml6b250
YWxTbmFwT2Zmc2V0cy5pc0VtcHR5KCkgJiYgdmVydGljYWxTbmFwT2Zmc2V0cy5pc0VtcHR5KCk7
CiAgICAgfQogCi0gICAgVmVjdG9yPFNuYXBPZmZzZXQ8VD4+IG9mZnNldHNGb3JBeGlzKFNjcm9s
bEV2ZW50QXhpcyBheGlzKSBjb25zdAorICAgIFZlY3RvcjxTbmFwT2Zmc2V0PFVuaXRUeXBlPj4g
b2Zmc2V0c0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpIGNvbnN0CiAgICAgewogICAgICAg
ICByZXR1cm4gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsID8gdmVydGljYWxTbmFw
T2Zmc2V0cyA6IGhvcml6b250YWxTbmFwT2Zmc2V0czsKICAgICB9CiAKLSAgICBWZWN0b3I8U2Ny
b2xsT2Zmc2V0UmFuZ2U8VD4+IG9mZnNldFJhbmdlc0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4
aXMpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6
OlZlcnRpY2FsID8gdmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzIDogaG9yaXpvbnRhbFNuYXBPZmZz
ZXRSYW5nZXM7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgT3V0cHV0VHlwZT4gU2Ny
b2xsU25hcE9mZnNldHNJbmZvPE91dHB1dFR5cGU+IGNvbnZlcnRVbml0cyhmbG9hdCBkZXZpY2VT
Y2FsZUZhY3RvciA9IDAuMCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPFQs
IHVuc2lnbmVkPiBjbG9zZXN0U25hcE9mZnNldChTY3JvbGxFdmVudEF4aXMsIFQgc2Nyb2xsRGVz
dGluYXRpb25PZmZzZXQsIGZsb2F0IHZlbG9jaXR5LCBPcHRpb25hbDxUPiBvcmlnaW5hbFBvc2l0
aW9uRm9yRGlyZWN0aW9uYWxTbmFwcGluZyA9IFdURjo6bnVsbG9wdCkgY29uc3Q7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3V0cHV0VHlwZT4gT3V0cHV0VHlwZSBjb252ZXJ0VW5pdHMoZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3IgPSAwLjApIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNp
emVUeXBlPgorICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxVbml0VHlwZSwgdW5zaWduZWQ+
IGNsb3Nlc3RTbmFwT2Zmc2V0KFNjcm9sbEV2ZW50QXhpcywgY29uc3QgU2l6ZVR5cGUmIHZpZXdw
b3J0U2l6ZSwgVW5pdFR5cGUgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIGZsb2F0IHZlbG9jaXR5
LCBPcHRpb25hbDxVbml0VHlwZT4gb3JpZ2luYWxQb3NpdGlvbkZvckRpcmVjdGlvbmFsU25hcHBp
bmcgPSBXVEY6Om51bGxvcHQpIGNvbnN0OwogfTsKIAotdXNpbmcgTGF5b3V0U2Nyb2xsU25hcE9m
ZnNldHNJbmZvID0gU2Nyb2xsU25hcE9mZnNldHNJbmZvPExheW91dFVuaXQ+OwotdXNpbmcgRmxv
YXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8gPSBTY3JvbGxTbmFwT2Zmc2V0c0luZm88ZmxvYXQ+Owor
dXNpbmcgTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvID0gU2Nyb2xsU25hcE9mZnNldHNJbmZv
PExheW91dFVuaXQsIExheW91dFJlY3Q+OwordXNpbmcgRmxvYXRTY3JvbGxTbmFwT2Zmc2V0c0lu
Zm8gPSBTY3JvbGxTbmFwT2Zmc2V0c0luZm88ZmxvYXQsIEZsb2F0UmVjdD47CiAKIHRlbXBsYXRl
IDw+IHRlbXBsYXRlIDw+CiBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8gRmxvYXRTY3JvbGxT
bmFwT2Zmc2V0c0luZm86OmNvbnZlcnRVbml0cyhmbG9hdCAvKiB1bnVzZWRTY2FsZUZhY3RvciAq
LykgY29uc3Q7Ci10ZW1wbGF0ZSA8PgotV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPGZsb2F0LCB1
bnNpZ25lZD4gRmxvYXRTY3JvbGxTbmFwT2Zmc2V0c0luZm86OmNsb3Nlc3RTbmFwT2Zmc2V0KFNj
cm9sbEV2ZW50QXhpcywgZmxvYXQgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIGZsb2F0IHZlbG9j
aXR5LCBPcHRpb25hbDxmbG9hdD4gb3JpZ2luYWxQb3NpdGlvbkZvckRpcmVjdGlvbmFsU25hcHBp
bmcpIGNvbnN0OwordGVtcGxhdGUgPD4gdGVtcGxhdGUgPD4KK1dFQkNPUkVfRVhQT1JUIHN0ZDo6
cGFpcjxmbG9hdCwgdW5zaWduZWQ+IEZsb2F0U2Nyb2xsU25hcE9mZnNldHNJbmZvOjpjbG9zZXN0
U25hcE9mZnNldChTY3JvbGxFdmVudEF4aXMsIGNvbnN0IEZsb2F0U2l6ZSYgdmlld3BvcnRTaXpl
LCBmbG9hdCBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCwgZmxvYXQgdmVsb2NpdHksIE9wdGlvbmFs
PGZsb2F0PiBvcmlnaW5hbFBvc2l0aW9uRm9yRGlyZWN0aW9uYWxTbmFwcGluZykgY29uc3Q7CisK
IAogdGVtcGxhdGUgPD4gdGVtcGxhdGUgPD4KIEZsb2F0U2Nyb2xsU25hcE9mZnNldHNJbmZvIExh
eW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6Y29udmVydFVuaXRzKGZsb2F0IGRldmljZVNjYWxl
RmFjdG9yKSBjb25zdDsKLXRlbXBsYXRlIDw+Ci1XRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8TGF5
b3V0VW5pdCwgdW5zaWduZWQ+IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6Y2xvc2VzdFNu
YXBPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzLCBMYXlvdXRVbml0IHNjcm9sbERlc3RpbmF0aW9uT2Zm
c2V0LCBmbG9hdCB2ZWxvY2l0eSwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gb3JpZ2luYWxQb3NpdGlv
bkZvckRpcmVjdGlvbmFsU25hcHBpbmcpIGNvbnN0OwordGVtcGxhdGUgPD4gdGVtcGxhdGUgPD4K
K1dFQkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxMYXlvdXRVbml0LCB1bnNpZ25lZD4gTGF5b3V0U2Ny
b2xsU25hcE9mZnNldHNJbmZvOjpjbG9zZXN0U25hcE9mZnNldChTY3JvbGxFdmVudEF4aXMsIGNv
bnN0IExheW91dFNpemUmIHZpZXdwb3J0U2l6ZSwgTGF5b3V0VW5pdCBzY3JvbGxEZXN0aW5hdGlv
bk9mZnNldCwgZmxvYXQgdmVsb2NpdHksIE9wdGlvbmFsPExheW91dFVuaXQ+IG9yaWdpbmFsUG9z
aXRpb25Gb3JEaXJlY3Rpb25hbFNuYXBwaW5nKSBjb25zdDsKKwogCiBjb25zdCB1bnNpZ25lZCBp
bnZhbGlkU25hcE9mZnNldEluZGV4ID0gVUlOVF9NQVg7CiAKQEAgLTExNywxMyArMTA2LDYgQEAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRl
eHRTdHJlYW0mIHRzLCBTbmFwT2Zmc2UKICAgICByZXR1cm4gdHM7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBT
Y3JvbGxPZmZzZXRSYW5nZTxUPiYgcmFuZ2UpCi17Ci0gICAgdHMgPDwgInN0YXJ0OiAiIDw8IHJh
bmdlLnN0YXJ0IDw8ICIgZW5kOiAiIDw8IHJhbmdlLmVuZDsKLSAgICByZXR1cm4gdHM7Ci19Ci0K
IH07IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NDUk9MTF9T
TkFQKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5tbQpp
bmRleCBhNWI0OGMyMDM0MTVhYjdiMDljZTljM2ZhOTljMTVlYTYzNzQwZTQ1Li5jMDRlNTFiMzQ5
NGY3YzM3MTAyODIwMjliNWNmOTFjMzY0YjcwZGQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1h
Yy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5tbQpAQCAtNjUsNyArNjUsNyBAQCB2b2lkIFNjcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OnVwZGF0ZUZyb21TdGF0ZU5vZGUoY29u
c3QgU2Nyb2xsaW5nUwogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKICAgICBpZiAoc2Ny
b2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZU5vZGU6OlBy
b3BlcnR5OjpTbmFwT2Zmc2V0c0luZm8pKQotICAgICAgICBtX3Njcm9sbENvbnRyb2xsZXIudXBk
YXRlU2Nyb2xsU25hcFBvaW50cyhzY3JvbGxpbmdTdGF0ZU5vZGUuc25hcE9mZnNldHNJbmZvKCku
Y29udmVydFVuaXRzPExheW91dFVuaXQ+KCkpOworICAgICAgICBtX3Njcm9sbENvbnRyb2xsZXIu
dXBkYXRlU2Nyb2xsU25hcFBvaW50cyhzY3JvbGxpbmdTdGF0ZU5vZGUuc25hcE9mZnNldHNJbmZv
KCkuY29udmVydFVuaXRzPExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbz4oKSk7CiAKICAgICBp
ZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZU5v
ZGU6OlByb3BlcnR5OjpDdXJyZW50SG9yaXpvbnRhbFNuYXBPZmZzZXRJbmRleCkpCiAgICAgICAg
IG1fc2Nyb2xsQ29udHJvbGxlci5zZXRBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9s
bEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgc2Nyb2xsaW5nU3RhdGVOb2RlLmN1cnJlbnRIb3Jpem9u
dGFsU25hcFBvaW50SW5kZXgoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9uaWNvc2lhL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVOaWNvc2lh
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU5pY29zaWEuY3BwCmluZGV4IDc5MzhiMWE5MDQ4Mzc5MDQ2
OWQ4MTYyM2NlMGZjNGNmOTIxMjY3OTAuLjkyNThlN2VhYTRlZGQ0N2M1ZTQwY2UzNmEwMmVlZDg2
MWEzYTQ4MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL25pY29z
aWEvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU5pY29zaWEuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGVEZWxlZ2F0ZU5pY29zaWEuY3BwCkBAIC0xNzMsOCArMTczLDggQEAgV2hlZWxFdmVudEhh
bmRsaW5nUmVzdWx0IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVOaWNvc2lhOjpo
YW5kbGVXaGVlbEUKICAgICAgICAgRmxvYXRQb2ludCBuZXdGbG9hdE9mZnNldCA9IHNjcm9sbGlu
Z05vZGUoKS5jdXJyZW50U2Nyb2xsT2Zmc2V0KCkgKyBGbG9hdFNpemUoZGVsdGFYLCBkZWx0YVkp
OwogICAgICAgICBhdXRvIG5ld09mZnNldCA9IExheW91dFBvaW50KG5ld0Zsb2F0T2Zmc2V0Lngo
KSAvIHNjYWxlLCBuZXdGbG9hdE9mZnNldC55KCkgLyBzY2FsZSk7CiAKLSAgICAgICAgYXV0byBv
ZmZzZXRYID0gc2Nyb2xsaW5nTm9kZSgpLnNuYXBPZmZzZXRzSW5mbygpLmNsb3Nlc3RTbmFwT2Zm
c2V0KFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgbmV3T2Zmc2V0LngoKSwgZGVsdGFYLCBv
cmlnaW5hbE9mZnNldC54KCkpLmZpcnN0OwotICAgICAgICBhdXRvIG9mZnNldFkgPSBzY3JvbGxp
bmdOb2RlKCkuc25hcE9mZnNldHNJbmZvKCkuY2xvc2VzdFNuYXBPZmZzZXQoU2Nyb2xsRXZlbnRB
eGlzOjpWZXJ0aWNhbCwgbmV3T2Zmc2V0LnkoKSwgZGVsdGFZLCBvcmlnaW5hbE9mZnNldC55KCkp
LmZpcnN0OworICAgICAgICBhdXRvIG9mZnNldFggPSBzY3JvbGxpbmdOb2RlKCkuc25hcE9mZnNl
dHNJbmZvKCkuY2xvc2VzdFNuYXBPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBz
Y3JvbGxhYmxlQXJlYVNpemUoKSwgbmV3T2Zmc2V0LngoKSwgZGVsdGFYLCBvcmlnaW5hbE9mZnNl
dC54KCkpLmZpcnN0OworICAgICAgICBhdXRvIG9mZnNldFkgPSBzY3JvbGxpbmdOb2RlKCkuc25h
cE9mZnNldHNJbmZvKCkuY2xvc2VzdFNuYXBPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNh
bCwgc2Nyb2xsYWJsZUFyZWFTaXplKCksIG5ld09mZnNldC55KCksIGRlbHRhWSwgb3JpZ2luYWxP
ZmZzZXQueSgpKS5maXJzdDsKIAogICAgICAgICBkZWx0YVggPSAob2Zmc2V0WCAtIG9yaWdpbmFs
T2Zmc2V0LngoKSkgKiBzY2FsZTsKICAgICAgICAgZGVsdGFZID0gKG9mZnNldFkgLSBvcmlnaW5h
bE9mZnNldC55KCkpICogc2NhbGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENv
bnRyb2xsZXIuY3BwCmluZGV4IGZiMzQ1ZDdhNjhmYzlkMTZkZGVmNWQ0ODllN2ZlNzYxODc4Y2U0
NGUuLmYwYWRlNzM1NDc5M2EwNTkzZWRiODUzYWI0YjQyZDc5ZDZkYjExYjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwCkBAIC0xMTYsNyArMTE2LDgg
QEAgdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzZXROZWFyZXN0U2Nyb2xsU25hcEluZGV4Rm9yQXhp
c0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXMKIAogICAgIExheW91dFVuaXQgY2xhbXBlZE9mZnNl
dCA9IHN0ZDo6bWluKHN0ZDo6bWF4KExheW91dFVuaXQob2Zmc2V0IC8gc2NhbGVGYWN0b3IpLCBz
bmFwT2Zmc2V0cy5maXJzdCgpLm9mZnNldCksIHNuYXBPZmZzZXRzLmxhc3QoKS5vZmZzZXQpOwog
Ci0gICAgdW5zaWduZWQgYWN0aXZlSW5kZXggPSBzbmFwU3RhdGUuc25hcE9mZnNldEluZm8oKS5j
bG9zZXN0U25hcE9mZnNldChheGlzLCBjbGFtcGVkT2Zmc2V0LCAwKS5zZWNvbmQ7CisgICAgTGF5
b3V0U2l6ZSB2aWV3cG9ydFNpemUobV9jbGllbnQudmlld3BvcnRTaXplKCkud2lkdGgoKSwgbV9j
bGllbnQudmlld3BvcnRTaXplKCkuaGVpZ2h0KCkpOworICAgIHVuc2lnbmVkIGFjdGl2ZUluZGV4
ID0gc25hcFN0YXRlLnNuYXBPZmZzZXRJbmZvKCkuY2xvc2VzdFNuYXBPZmZzZXQoYXhpcywgdmll
d3BvcnRTaXplLCBjbGFtcGVkT2Zmc2V0LCAwKS5zZWNvbmQ7CiAgICAgaWYgKGFjdGl2ZUluZGV4
ID09IGFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoYXhpcykpCiAgICAgICAgIHJldHVybjsK
IApAQCAtMTM3LDcgKzEzOCw4IEBAIGZsb2F0IFNjcm9sbENvbnRyb2xsZXI6OmFkanVzdFNjcm9s
bERlc3RpbmF0aW9uKFNjcm9sbEV2ZW50QXhpcyBheGlzLCBmbG9hdCBkZXN0CiAgICAgT3B0aW9u
YWw8TGF5b3V0VW5pdD4gb3JpZ2luYWxPZmZzZXRJbkxheW91dFVuaXRzOwogICAgIGlmIChvcmln
aW5hbE9mZnNldC5oYXNWYWx1ZSgpKQogICAgICAgICBvcmlnaW5hbE9mZnNldEluTGF5b3V0VW5p
dHMgPSBMYXlvdXRVbml0KCpvcmlnaW5hbE9mZnNldCAvIG1fY2xpZW50LnBhZ2VTY2FsZUZhY3Rv
cigpKTsKLSAgICBMYXlvdXRVbml0IG9mZnNldCA9IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0SW5mbygp
LmNsb3Nlc3RTbmFwT2Zmc2V0KGF4aXMsIExheW91dFVuaXQoZGVzdGluYXRpb25PZmZzZXQgLyBt
X2NsaWVudC5wYWdlU2NhbGVGYWN0b3IoKSksIHZlbG9jaXR5LCBvcmlnaW5hbE9mZnNldEluTGF5
b3V0VW5pdHMpLmZpcnN0OworICAgIExheW91dFNpemUgdmlld3BvcnRTaXplKG1fY2xpZW50LnZp
ZXdwb3J0U2l6ZSgpLndpZHRoKCksIG1fY2xpZW50LnZpZXdwb3J0U2l6ZSgpLmhlaWdodCgpKTsK
KyAgICBMYXlvdXRVbml0IG9mZnNldCA9IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0SW5mbygpLmNsb3Nl
c3RTbmFwT2Zmc2V0KGF4aXMsIHZpZXdwb3J0U2l6ZSwgTGF5b3V0VW5pdChkZXN0aW5hdGlvbk9m
ZnNldCAvIG1fY2xpZW50LnBhZ2VTY2FsZUZhY3RvcigpKSwgdmVsb2NpdHksIG9yaWdpbmFsT2Zm
c2V0SW5MYXlvdXRVbml0cykuZmlyc3Q7CiAgICAgcmV0dXJuIG9mZnNldCAqIG1fY2xpZW50LnBh
Z2VTY2FsZUZhY3RvcigpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5jcHAKaW5kZXggZGE5NzkyZDA3NThmZDFjNTc3MmY3ZjYz
ZDEyNjkyN2VjMDA2NTcyZS4uNDE4NTIxMzRhZTk3ZGY3ODA1OGU2YTY4YmJlMjc1Mjg1YTg4YThj
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsU25hcEFuaW1hdG9y
U3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFNuYXBBbmltYXRv
clN0YXRlLmNwcApAQCAtNTEsOCArNTEsOCBAQCB2b2lkIFNjcm9sbFNuYXBBbmltYXRvclN0YXRl
OjpzZXR1cEFuaW1hdGlvbkZvclN0YXRlKFNjcm9sbFNuYXBTdGF0ZSBzdGF0ZSwgY29ucwogCiAg
ICAgbV9tb21lbnR1bUNhbGN1bGF0b3IgPSBTY3JvbGxpbmdNb21lbnR1bUNhbGN1bGF0b3I6OmNy
ZWF0ZSh2aWV3cG9ydFNpemUsIGNvbnRlbnRTaXplLCBpbml0aWFsT2Zmc2V0LCBpbml0aWFsRGVs
dGEsIGluaXRpYWxWZWxvY2l0eSk7CiAgICAgYXV0byBwcmVkaWN0ZWRTY3JvbGxUYXJnZXQgPSBt
X21vbWVudHVtQ2FsY3VsYXRvci0+cHJlZGljdGVkRGVzdGluYXRpb25PZmZzZXQoKTsKLSAgICBm
bG9hdCB0YXJnZXRPZmZzZXRYID0gdGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZzZXQoU2Nyb2xsRXZl
bnRBeGlzOjpIb3Jpem9udGFsLCBjb250ZW50U2l6ZS53aWR0aCgpIC0gdmlld3BvcnRTaXplLndp
ZHRoKCksIGluaXRpYWxPZmZzZXQueCgpLCBwcmVkaWN0ZWRTY3JvbGxUYXJnZXQud2lkdGgoKSwg
cGFnZVNjYWxlLCBpbml0aWFsRGVsdGEud2lkdGgoKSwgbV9hY3RpdmVTbmFwSW5kZXhYKTsKLSAg
ICBmbG9hdCB0YXJnZXRPZmZzZXRZID0gdGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZzZXQoU2Nyb2xs
RXZlbnRBeGlzOjpWZXJ0aWNhbCwgY29udGVudFNpemUuaGVpZ2h0KCkgLSB2aWV3cG9ydFNpemUu
aGVpZ2h0KCksIGluaXRpYWxPZmZzZXQueSgpLCBwcmVkaWN0ZWRTY3JvbGxUYXJnZXQuaGVpZ2h0
KCksIHBhZ2VTY2FsZSwgaW5pdGlhbERlbHRhLmhlaWdodCgpLCBtX2FjdGl2ZVNuYXBJbmRleFkp
OworICAgIGZsb2F0IHRhcmdldE9mZnNldFggPSB0YXJnZXRPZmZzZXRGb3JTdGFydE9mZnNldChT
Y3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIHZpZXdwb3J0U2l6ZSwgY29udGVudFNpemUud2lk
dGgoKSAtIHZpZXdwb3J0U2l6ZS53aWR0aCgpLCBpbml0aWFsT2Zmc2V0LngoKSwgcHJlZGljdGVk
U2Nyb2xsVGFyZ2V0LndpZHRoKCksIHBhZ2VTY2FsZSwgaW5pdGlhbERlbHRhLndpZHRoKCksIG1f
YWN0aXZlU25hcEluZGV4WCk7CisgICAgZmxvYXQgdGFyZ2V0T2Zmc2V0WSA9IHRhcmdldE9mZnNl
dEZvclN0YXJ0T2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIHZpZXdwb3J0U2l6ZSwg
Y29udGVudFNpemUuaGVpZ2h0KCkgLSB2aWV3cG9ydFNpemUuaGVpZ2h0KCksIGluaXRpYWxPZmZz
ZXQueSgpLCBwcmVkaWN0ZWRTY3JvbGxUYXJnZXQuaGVpZ2h0KCksIHBhZ2VTY2FsZSwgaW5pdGlh
bERlbHRhLmhlaWdodCgpLCBtX2FjdGl2ZVNuYXBJbmRleFkpOwogICAgIG1fbW9tZW50dW1DYWxj
dWxhdG9yLT5zZXRSZXRhcmdldGVkU2Nyb2xsT2Zmc2V0KHsgdGFyZ2V0T2Zmc2V0WCwgdGFyZ2V0
T2Zmc2V0WSB9KTsKICAgICBtX3N0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogICAg
IG1fY3VycmVudFN0YXRlID0gc3RhdGU7CkBAIC05MSw3ICs5MSw3IEBAIEZsb2F0UG9pbnQgU2Ny
b2xsU25hcEFuaW1hdG9yU3RhdGU6OmN1cnJlbnRBbmltYXRlZFNjcm9sbE9mZnNldChib29sJiBp
c0FuaW1hdGlvCiAgICAgcmV0dXJuIG1fbW9tZW50dW1DYWxjdWxhdG9yLT5zY3JvbGxPZmZzZXRB
ZnRlckVsYXBzZWRUaW1lKGVsYXBzZWRUaW1lKTsKIH0KIAotZmxvYXQgU2Nyb2xsU25hcEFuaW1h
dG9yU3RhdGU6OnRhcmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0KFNjcm9sbEV2ZW50QXhpcyBheGlz
LCBmbG9hdCBtYXhTY3JvbGxPZmZzZXQsIGZsb2F0IHN0YXJ0T2Zmc2V0LCBmbG9hdCBwcmVkaWN0
ZWRPZmZzZXQsIGZsb2F0IHBhZ2VTY2FsZSwgZmxvYXQgaW5pdGlhbERlbHRhLCB1bnNpZ25lZCYg
b3V0QWN0aXZlU25hcEluZGV4KSBjb25zdAorZmxvYXQgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6
OnRhcmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0KFNjcm9sbEV2ZW50QXhpcyBheGlzLCBjb25zdCBG
bG9hdFNpemUmIHZpZXdwb3J0U2l6ZSwgZmxvYXQgbWF4U2Nyb2xsT2Zmc2V0LCBmbG9hdCBzdGFy
dE9mZnNldCwgZmxvYXQgcHJlZGljdGVkT2Zmc2V0LCBmbG9hdCBwYWdlU2NhbGUsIGZsb2F0IGlu
aXRpYWxEZWx0YSwgdW5zaWduZWQmIG91dEFjdGl2ZVNuYXBJbmRleCkgY29uc3QKIHsKICAgICBj
b25zdCBhdXRvJiBzbmFwT2Zmc2V0cyA9IG1fc25hcE9mZnNldHNJbmZvLm9mZnNldHNGb3JBeGlz
KGF4aXMpOwogICAgIGlmIChzbmFwT2Zmc2V0cy5pc0VtcHR5KCkpIHsKQEAgLTk5LDcgKzk5LDcg
QEAgZmxvYXQgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OnRhcmdldE9mZnNldEZvclN0YXJ0T2Zm
c2V0KFNjcm9sbEV2ZW50QXhpcyBheGlzLAogICAgICAgICByZXR1cm4gY2xhbXBUbzxmbG9hdD4o
cHJlZGljdGVkT2Zmc2V0LCAwLCBtYXhTY3JvbGxPZmZzZXQpOwogICAgIH0KIAotICAgIGZsb2F0
IHRhcmdldE9mZnNldCA9IG1fc25hcE9mZnNldHNJbmZvLmNsb3Nlc3RTbmFwT2Zmc2V0KGF4aXMs
IExheW91dFVuaXQocHJlZGljdGVkT2Zmc2V0IC8gcGFnZVNjYWxlKSwgaW5pdGlhbERlbHRhLCBM
YXlvdXRVbml0KHN0YXJ0T2Zmc2V0IC8gcGFnZVNjYWxlKSkuZmlyc3Q7CisgICAgZmxvYXQgdGFy
Z2V0T2Zmc2V0ID0gbV9zbmFwT2Zmc2V0c0luZm8uY2xvc2VzdFNuYXBPZmZzZXQoYXhpcywgTGF5
b3V0U2l6ZSB7IHZpZXdwb3J0U2l6ZSB9LCBMYXlvdXRVbml0KHByZWRpY3RlZE9mZnNldCAvIHBh
Z2VTY2FsZSksIGluaXRpYWxEZWx0YSwgTGF5b3V0VW5pdChzdGFydE9mZnNldCAvIHBhZ2VTY2Fs
ZSkpLmZpcnN0OwogICAgIGZsb2F0IG1pbmltdW1UYXJnZXRPZmZzZXQgPSBzdGQ6Om1heDxmbG9h
dD4oMCwgc25hcE9mZnNldHMuZmlyc3QoKS5vZmZzZXQpOwogICAgIGZsb2F0IG1heGltdW1UYXJn
ZXRPZmZzZXQgPSBzdGQ6Om1pbjxmbG9hdD4obWF4U2Nyb2xsT2Zmc2V0LCBzbmFwT2Zmc2V0cy5s
YXN0KCkub2Zmc2V0KTsKICAgICB0YXJnZXRPZmZzZXQgPSBjbGFtcFRvPGZsb2F0Pih0YXJnZXRP
ZmZzZXQsIG1pbmltdW1UYXJnZXRPZmZzZXQsIG1heGltdW1UYXJnZXRPZmZzZXQpOwpAQCAtMTEx
LDEwICsxMTEsNiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZSYgc3RhdGUpCiAgICAgdHMgPDwgIlNjcm9sbFNuYXBB
bmltYXRvclN0YXRlIjsKICAgICB0cy5kdW1wUHJvcGVydHkoInNuYXAgb2Zmc2V0cyB4Iiwgc3Rh
dGUuc25hcE9mZnNldHNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkpOwogICAg
IHRzLmR1bXBQcm9wZXJ0eSgic25hcCBvZmZzZXRzIHkiLCBzdGF0ZS5zbmFwT2Zmc2V0c0ZvckF4
aXMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCkpOwotICAgIGlmICghc3RhdGUuc25hcE9mZnNl
dFJhbmdlc0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKS5pc0VtcHR5KCkpCi0g
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic25hcCBvZmZzZXRzIHJhbmdlcyB4Iiwgc3RhdGUuc25h
cE9mZnNldFJhbmdlc0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSk7Ci0gICAg
aWYgKCFzdGF0ZS5zbmFwT2Zmc2V0UmFuZ2VzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZlcnRp
Y2FsKS5pc0VtcHR5KCkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic25hcCBvZmZzZXRzIHJh
bmdlcyB5Iiwgc3RhdGUuc25hcE9mZnNldFJhbmdlc0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpW
ZXJ0aWNhbCkpOwogCiAgICAgdHMuZHVtcFByb3BlcnR5KCJhY3RpdmUgc25hcCBpbmRleCB4Iiwg
c3RhdGUuYWN0aXZlU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwp
KTsKICAgICB0cy5kdW1wUHJvcGVydHkoImFjdGl2ZSBzbmFwIGluZGV4IHkiLCBzdGF0ZS5hY3Rp
dmVTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oCmluZGV4IDFl
NTViMzRjMzE5OGVlYmNhNDQ3NjU3ODMyOTUwNWJmMjU0YzE3NWUuLjZiNmQyMjc1Y2ZhMzQ1Yjlh
MmI2YTY5ZWE4MTg5ZDY2NWQ2MTRjZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaApAQCAtNTcsMjUgKzU3LDkgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBtX3Nu
YXBPZmZzZXRzSW5mby5ob3Jpem9udGFsU25hcE9mZnNldHMgOiBtX3NuYXBPZmZzZXRzSW5mby52
ZXJ0aWNhbFNuYXBPZmZzZXRzOwogICAgIH0KIAotICAgIGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZz
ZXRSYW5nZTxMYXlvdXRVbml0Pj4mIHNuYXBPZmZzZXRSYW5nZXNGb3JBeGlzKFNjcm9sbEV2ZW50
QXhpcyBheGlzKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGF4aXMgPT0gU2Nyb2xsRXZl
bnRBeGlzOjpIb3Jpem9udGFsID8gbV9zbmFwT2Zmc2V0c0luZm8uaG9yaXpvbnRhbFNuYXBPZmZz
ZXRSYW5nZXMgOiBtX3NuYXBPZmZzZXRzSW5mby52ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXM7Ci0g
ICAgfQotCiAgICAgY29uc3QgTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvJiBzbmFwT2Zmc2V0
SW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc25hcE9mZnNldHNJbmZvOyB9CiAgICAgdm9pZCBzZXRT
bmFwT2Zmc2V0SW5mbyhjb25zdCBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8mIG5ld0luZm8p
IHsgbV9zbmFwT2Zmc2V0c0luZm8gPSBuZXdJbmZvOyB9CiAKLSAgICB2b2lkIHNldFNuYXBPZmZz
ZXRzQW5kUG9zaXRpb25SYW5nZXNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzLCBjb25zdCBW
ZWN0b3I8U25hcE9mZnNldDxMYXlvdXRVbml0Pj4mIHNuYXBPZmZzZXRzLCBjb25zdCBWZWN0b3I8
U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+JiBzbmFwT2Zmc2V0UmFuZ2VzKQotICAgIHsK
LSAgICAgICAgaWYgKGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSB7Ci0gICAg
ICAgICAgICBtX3NuYXBPZmZzZXRzSW5mby5ob3Jpem9udGFsU25hcE9mZnNldHMgPSBzbmFwT2Zm
c2V0czsKLSAgICAgICAgICAgIG1fc25hcE9mZnNldHNJbmZvLmhvcml6b250YWxTbmFwT2Zmc2V0
UmFuZ2VzID0gc25hcE9mZnNldFJhbmdlczsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IG1fc25hcE9mZnNldHNJbmZvLnZlcnRpY2FsU25hcE9mZnNldHMgPSBzbmFwT2Zmc2V0czsKLSAg
ICAgICAgICAgIG1fc25hcE9mZnNldHNJbmZvLnZlcnRpY2FsU25hcE9mZnNldFJhbmdlcyA9IHNu
YXBPZmZzZXRSYW5nZXM7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBTY3JvbGxTbmFwU3RhdGUg
Y3VycmVudFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50U3RhdGU7IH0KIAogICAgIHVu
c2lnbmVkIGFjdGl2ZVNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpIGNvbnN0
CkBAIC0xMDAsNyArODQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB0cmFuc2l0aW9uVG9EZXN0aW5h
dGlvblJlYWNoZWRTdGF0ZSgpOwogCiBwcml2YXRlOgotICAgIGZsb2F0IHRhcmdldE9mZnNldEZv
clN0YXJ0T2Zmc2V0KFNjcm9sbEV2ZW50QXhpcywgZmxvYXQgbWF4U2Nyb2xsT2Zmc2V0LCBmbG9h
dCBzdGFydE9mZnNldCwgZmxvYXQgcHJlZGljdGVkT2Zmc2V0LCBmbG9hdCBwYWdlU2NhbGUsIGZs
b2F0IGluaXRpYWxEZWx0YSwgdW5zaWduZWQmIG91dEFjdGl2ZVNuYXBJbmRleCkgY29uc3Q7Cisg
ICAgZmxvYXQgdGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzLCBjb25z
dCBGbG9hdFNpemUmIHZpZXdwb3J0U2l6ZSwgZmxvYXQgbWF4U2Nyb2xsT2Zmc2V0LCBmbG9hdCBz
dGFydE9mZnNldCwgZmxvYXQgcHJlZGljdGVkT2Zmc2V0LCBmbG9hdCBwYWdlU2NhbGUsIGZsb2F0
IGluaXRpYWxEZWx0YSwgdW5zaWduZWQmIG91dEFjdGl2ZVNuYXBJbmRleCkgY29uc3Q7CiAgICAg
dm9pZCB0ZWFyZG93bkFuaW1hdGlvbkZvclN0YXRlKFNjcm9sbFNuYXBTdGF0ZSk7CiAgICAgdm9p
ZCBzZXR1cEFuaW1hdGlvbkZvclN0YXRlKFNjcm9sbFNuYXBTdGF0ZSwgY29uc3QgRmxvYXRTaXpl
JiBjb250ZW50U2l6ZSwgY29uc3QgRmxvYXRTaXplJiB2aWV3cG9ydFNpemUsIGZsb2F0IHBhZ2VT
Y2FsZSwgY29uc3QgRmxvYXRQb2ludCYgaW5pdGlhbE9mZnNldCwgY29uc3QgRmxvYXRTaXplJiBp
bml0aWFsVmVsb2NpdHksIGNvbnN0IEZsb2F0U2l6ZSYgaW5pdGlhbERlbHRhKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3Rl
TGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uY3BwCmluZGV4
IGVmNTZlM2E4Y2ViZDM3Njk1NzU4OTJiYjE0OWNjYmJjYTA0N2YzZTIuLjFjODIxZWViN2NkYmIx
NGUwM2FhNGQ0ODQ1YmE0MTI1ODllZDY4MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Ny
b2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5jcHAKQEAgLTUzMiw2ICs1MzIsNyBAQCB2b2lk
IEFyZ3VtZW50Q29kZXI8U25hcE9mZnNldDxmbG9hdD4+OjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgU25hcE9mZnNldAogewogICAgIGVuY29kZXIgPDwgb2Zmc2V0Lm9mZnNldDsKICAg
ICBlbmNvZGVyIDw8IG9mZnNldC5zdG9wOworICAgIGVuY29kZXIgPDwgb2Zmc2V0LnNuYXBBcmVh
SW5kZXg7CiB9CiAKIGJvb2wgQXJndW1lbnRDb2RlcjxTbmFwT2Zmc2V0PGZsb2F0Pj46OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBTbmFwT2Zmc2V0PGZsb2F0PiYgb2Zmc2V0KQpAQCAtNTQwLDYg
KzU0MSw4IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxTbmFwT2Zmc2V0PGZsb2F0Pj46OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyLCBTbmFwT2Zmc2V0PGZsb2F0CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG9mZnNldC5zdG9wKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUob2Zmc2V0LnNuYXBBcmVhSW5kZXgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTU0OCw4ICs1NTEs
NyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8RmxvYXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8+OjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgRgogewogICAgIGVuY29kZXIgPDwgaW5mby5ob3Jp
em9udGFsU25hcE9mZnNldHM7CiAgICAgZW5jb2RlciA8PCBpbmZvLnZlcnRpY2FsU25hcE9mZnNl
dHM7Ci0gICAgZW5jb2RlciA8PCBpbmZvLmhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzOwotICAg
IGVuY29kZXIgPDwgaW5mby52ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXM7CisgICAgZW5jb2RlciA8
PCBpbmZvLnNuYXBBcmVhczsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVyPEZsb2F0U2Nyb2xsU25h
cE9mZnNldHNJbmZvPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEZsb2F0U2Nyb2xsU25hcE9m
ZnNldHNJbmZvJiBpbmZvKQpAQCAtNTU4LDkgKzU2MCw3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxG
bG9hdFNjcm9sbFNuYXBPZmZzZXRzSW5mbz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBGbG9h
dFNjCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGluZm8u
dmVydGljYWxTbmFwT2Zmc2V0cykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGluZm8uaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbmZvLnZlcnRpY2FsU25hcE9m
ZnNldFJhbmdlcykpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbmZvLnNuYXBBcmVhcykpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCmluZGV4IDI1NWEyY2JjNmM3N2Nl
ZjFlNjA3MGVhNDIwZjZiZGU5MGIyNDBhNzEuLjJjNjEyMDFhYmM5YzYxZTk5NzBlZWQ0NzY4YmM0
Mjk5NjJlOTgwZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1
bWVudENvZGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmNwcApAQCAtMjgzMywzMiArMjgzMyw2IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxTZXJ2
aWNlV29ya2VyT3JDbGllbnRJZGVudGlmaWVyPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNl
CiAKICNlbmRpZgogCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLQotdm9pZCBBcmd1bWVu
dENvZGVyPFNjcm9sbE9mZnNldFJhbmdlPGZsb2F0Pj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBTY3JvbGxPZmZzZXRSYW5nZTxmbG9hdD4mIHJhbmdlKQotewotICAgIGVuY29kZXIg
PDwgcmFuZ2Uuc3RhcnQ7Ci0gICAgZW5jb2RlciA8PCByYW5nZS5lbmQ7Ci19Ci0KLWF1dG8gQXJn
dW1lbnRDb2RlcjxTY3JvbGxPZmZzZXRSYW5nZTxmbG9hdD4+OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikgLT4gT3B0aW9uYWw8V2ViQ29yZTo6U2Nyb2xsT2Zmc2V0UmFuZ2U8ZmxvYXQ+Pgotewot
ICAgIFdlYkNvcmU6OlNjcm9sbE9mZnNldFJhbmdlPGZsb2F0PiByYW5nZTsKLSAgICBmbG9hdCBz
dGFydDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXJ0KSkKLSAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLQotICAgIGZsb2F0IGVuZDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGVu
ZCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByYW5nZS5zdGFydCA9IHN0
YXJ0OwotICAgIHJhbmdlLmVuZCA9IGVuZDsKLSAgICByZXR1cm4gcmFuZ2U7Ci19Ci0KLSNlbmRp
ZgotCiB2b2lkIEFyZ3VtZW50Q29kZXI8TWVkaWFTZWxlY3Rpb25PcHRpb24+OjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgY29uc3QgTWVkaWFTZWxlY3Rpb25PcHRpb24mIG9wdGlvbikKIHsKICAg
ICBlbmNvZGVyIDw8IG9wdGlvbi5kaXNwbGF5TmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
V2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKaW5kZXggNDVkNjFmNzA1Yzg4NzViYWMxYTI4OWM1ZDAz
ZWFkOGE4ODRjNWI5Yi4uM2JjODAwZjY2NTRkMDA0ZWViZmM2MDg5YzA4MzYwZTYxYmRiNGJkOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgK
KysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKQEAgLTcz
OCwxNSArNzM4LDYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpT
ZXJ2aWNlV29ya2VyT3JDbGllbnRJZGVudGlmaWVyPiB7CiAKICNlbmRpZgogCi0jaWYgRU5BQkxF
KENTU19TQ1JPTExfU05BUCkKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpTY3JvbGxPZmZzZXRSYW5nZTxmbG9hdD4+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlNjcm9sbE9mZnNldFJhbmdlPGZsb2F0PiYpOwotICAg
IHN0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpTY3JvbGxPZmZzZXRSYW5nZTxmbG9hdD4+IGRlY29k
ZShEZWNvZGVyJik7Ci19OwotCi0jZW5kaWYKLQogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRD
b2RlcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gewogICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24mKTsKICAg
ICBzdGF0aWMgT3B0aW9uYWw8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+IGRlY29kZShE
ZWNvZGVyJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXll
clRyZWUvaW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW0gYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3Jk
aW5hdG9yUHJveHlJT1MubW0KaW5kZXggMTE2NzVmMzI0NWJhMTFhYzM5OGZkYmEyZmNlMzYzYmFi
ZjBhYTQ1NC4uY2M0ZWFkNjU3M2VmMDAzZWVmOTBmNzAyMzM3MzExZDMwMzM4YTllNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9SZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvclByb3h5SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eUlP
Uy5tbQpAQCAtMjMwLDcgKzIzMCw3IEBAIGZsb2F0IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
UHJveHk6OmNsb3Nlc3RTbmFwT2Zmc2V0Rm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFNjCiAKICAgICBm
bG9hdCBzY2FsZWRTY3JvbGxEZXN0aW5hdGlvbiA9IHNjcm9sbERlc3RpbmF0aW9uIC8gbV93ZWJQ
YWdlUHJveHkuZGlzcGxheWVkQ29udGVudFNjYWxlKCk7CiAgICAgZmxvYXQgcmF3Q2xvc2VzdFNu
YXBPZmZzZXQ7Ci0gICAgc3RkOjp0aWUocmF3Q2xvc2VzdFNuYXBPZmZzZXQsIGN1cnJlbnRJbmRl
eCkgPSBzbmFwT2Zmc2V0c0luZm8uY2xvc2VzdFNuYXBPZmZzZXQoYXhpcywgc2NhbGVkU2Nyb2xs
RGVzdGluYXRpb24sIHZlbG9jaXR5KTsKKyAgICBzdGQ6OnRpZShyYXdDbG9zZXN0U25hcE9mZnNl
dCwgY3VycmVudEluZGV4KSA9IHNuYXBPZmZzZXRzSW5mby5jbG9zZXN0U25hcE9mZnNldChheGlz
LCByb290U2Nyb2xsaW5nTm9kZS0+bGF5b3V0Vmlld3BvcnQoKS5zaXplKCksIHNjYWxlZFNjcm9s
bERlc3RpbmF0aW9uLCB2ZWxvY2l0eSk7CiAgICAgcmV0dXJuIHJhd0Nsb3Nlc3RTbmFwT2Zmc2V0
ICogbV93ZWJQYWdlUHJveHkuZGlzcGxheWVkQ29udGVudFNjYWxlKCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlP
Uy5tbQppbmRleCA4ODBjMDMxOTVmODljNGJkMTNkZDZhNjQ2NTIzZjFkZjg0Yzk1NjRlLi44ZmM2
NjE1Zjc2ZjNjOWZhZDAwZjU5NGIzNGIxM2RkNDRjOTIzY2QwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlRGVsZWdhdGVJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3Rl
TGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tCkBA
IC0xMDYsMTYgKzEwNiwxNyBAQCAtICh2b2lkKXNjcm9sbFZpZXdXaWxsRW5kRHJhZ2dpbmc6KFVJ
U2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcgd2l0aFZlbG9jaXR5OihDR1BvaQogICAgIHVuc2lnbmVk
IG9yaWdpbmFsSG9yaXpvbnRhbFNuYXBQb3NpdGlvbiA9IF9zY3JvbGxpbmdUcmVlTm9kZURlbGVn
YXRlLT5zY3JvbGxpbmdOb2RlKCkuY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCgpOwog
ICAgIHVuc2lnbmVkIG9yaWdpbmFsVmVydGljYWxTbmFwUG9zaXRpb24gPSBfc2Nyb2xsaW5nVHJl
ZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludElu
ZGV4KCk7CiAKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgdmlld3BvcnRTaXplKHN0YXRpY19jYXN0
PGZsb2F0PihDR1JlY3RHZXRXaWR0aChbc2Nyb2xsVmlldyBib3VuZHNdKSksIHN0YXRpY19jYXN0
PGZsb2F0PihDR1JlY3RHZXRIZWlnaHQoW3Njcm9sbFZpZXcgYm91bmRzXSkpKTsKICAgICBjb25z
dCBhdXRvJiBzbmFwT2Zmc2V0c0luZm8gPSBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Ny
b2xsaW5nTm9kZSgpLnNuYXBPZmZzZXRzSW5mbygpOwogICAgIGlmICghc25hcE9mZnNldHNJbmZv
Lmhvcml6b250YWxTbmFwT2Zmc2V0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0byBbcG90ZW50
aWFsU25hcFBvc2l0aW9uLCBpbmRleF0gPSBzbmFwT2Zmc2V0c0luZm8uY2xvc2VzdFNuYXBPZmZz
ZXQoV2ViQ29yZTo6U2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBob3Jpem9udGFsVGFyZ2V0
LCB2ZWxvY2l0eS54KTsKKyAgICAgICAgYXV0byBbcG90ZW50aWFsU25hcFBvc2l0aW9uLCBpbmRl
eF0gPSBzbmFwT2Zmc2V0c0luZm8uY2xvc2VzdFNuYXBPZmZzZXQoV2ViQ29yZTo6U2Nyb2xsRXZl
bnRBeGlzOjpIb3Jpem9udGFsLCB2aWV3cG9ydFNpemUsIGhvcml6b250YWxUYXJnZXQsIHZlbG9j
aXR5LngpOwogICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9k
ZSgpLnNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoaW5kZXgpOwogICAgICAgICBp
ZiAoaG9yaXpvbnRhbFRhcmdldCA+PSAwICYmIGhvcml6b250YWxUYXJnZXQgPD0gc2Nyb2xsVmll
dy5jb250ZW50U2l6ZS53aWR0aCkKICAgICAgICAgICAgIHRhcmdldENvbnRlbnRPZmZzZXQtPngg
PSBwb3RlbnRpYWxTbmFwUG9zaXRpb247CiAgICAgfQogCiAgICAgaWYgKCFzbmFwT2Zmc2V0c0lu
Zm8udmVydGljYWxTbmFwT2Zmc2V0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0byBbcG90ZW50
aWFsU25hcFBvc2l0aW9uLCBpbmRleF0gPSBzbmFwT2Zmc2V0c0luZm8uY2xvc2VzdFNuYXBPZmZz
ZXQoV2ViQ29yZTo6U2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgdmVydGljYWxUYXJnZXQsIHZl
bG9jaXR5LngpOworICAgICAgICBhdXRvIFtwb3RlbnRpYWxTbmFwUG9zaXRpb24sIGluZGV4XSA9
IHNuYXBPZmZzZXRzSW5mby5jbG9zZXN0U25hcE9mZnNldChXZWJDb3JlOjpTY3JvbGxFdmVudEF4
aXM6OlZlcnRpY2FsLCB2aWV3cG9ydFNpemUsIHZlcnRpY2FsVGFyZ2V0LCB2ZWxvY2l0eS54KTsK
ICAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5zZXRD
dXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleChpbmRleCk7CiAgICAgICAgIGlmICh2ZXJ0aWNh
bFRhcmdldCA+PSAwICYmIHZlcnRpY2FsVGFyZ2V0IDw9IHNjcm9sbFZpZXcuY29udGVudFNpemUu
aGVpZ2h0KQogICAgICAgICAgICAgdGFyZ2V0Q29udGVudE9mZnNldC0+eSA9IHBvdGVudGlhbFNu
YXBQb3NpdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IDM1YzE3NGNmN2RiODkxM2Q4NTJmZjQ5Y2EyZTRiN2YyZjU5MDYzYjYuLjkz
OTAwODAyY2NiNmMyOWNjYTQxZTQ5ZTlmNDRmMjRkODFjZWU1ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTI2OCwxMCArOTI2OCwx
MCBAQAogCQkJCTUzMjE1OTRGMURCQUU2RDcwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2tDb2Nv
YS5oICovLAogCQkJCTVDQkM5QjhCMUM2NTI1NzMwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2tD
b2NvYS5tbSAqLywKIAkJCQk3RUM0RjBGOTE4RTRBOTQ1MDA4MDU2QUYgLyogTmV0d29ya1Byb2Nl
c3NDb2NvYS5tbSAqLywKLQkJCQk1MzIxNTk1MDFEQkFFNkQ3MDA1NEFBM0MgLyogTmV0d29ya1Nl
c3Npb25Db2NvYS5oICovLAotCQkJCTVDMjBDQjlCMUJCMERDRDIwMDg5NUJCMSAvKiBOZXR3b3Jr
U2Vzc2lvbkNvY29hLm1tICovLAogCQkJCTUxODMyNDc4MjYxNUIwMEQwMDNGMjM5RSAvKiBOZXR3
b3JrU2NoZW1lVVJMUHJvdG9jb2wuaCAqLywKIAkJCQk1MTgzMjQ3OTI2MTVCMDBEMDAzRjIzOUUg
LyogTmV0d29ya1NjaGVtZVVSTFByb3RvY29sLm1tICovLAorCQkJCTUzMjE1OTUwMURCQUU2RDcw
MDU0QUEzQyAvKiBOZXR3b3JrU2Vzc2lvbkNvY29hLmggKi8sCisJCQkJNUMyMENCOUIxQkIwRENE
MjAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EubW0gKi8sCiAJCQkJNDEyODdENEMyMjVD
MDVDNTAwOUEzRTI2IC8qIFdlYlNvY2tldFRhc2tDb2NvYS5oICovLAogCQkJCTQxMjg3RDRCMjI1
QzA1QzQwMDlBM0UyNiAvKiBXZWJTb2NrZXRUYXNrQ29jb2EubW0gKi8sCiAJCQkpOwpAQCAtMTE2
NzYsNyArMTE2NzYsNiBAQAogCQkJCTMxN0ZFN0M1MUM0ODdBNkMwMEEwQ0E4OSAvKiBBUElFeHBl
cmltZW50YWxGZWF0dXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwMEI5NjYxNjE4RTI0Q0JBMDBD
RTFGODggLyogQVBJRmluZENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRENjdBMkUxQkQ4
MTk3MzAwNTNCMjUxIC8qIEFQSUZpbmRNYXRjaGVzQ2xpZW50LmggaW4gSGVhZGVycyAqLywKLQkJ
CQk1MTgzMjQ3RDI2MTY4RkY3MDAzRjIzOUUgLyogTmV0d29ya1VSTFNjaGVtZVRhc2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCTM3RTI1RDZFMThGREU1RDYwMDVEM0EwMCAvKiBBUElGb3JtQ2xpZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUMxMzM3MjE4NTY2QzdDMDBGM0VDMDUgLyogQVBJRnJh
bWVIYW5kbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERjlFRUU2MUE3ODFGQjQwMEI2Q0ZCRSAv
KiBBUElGcmFtZUluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtMTE5OTcsNiArMTE5OTYsOCBAQAog
CQkJCTVDMjBDQkEwMUJCMUVDRDgwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTMyMTU5NTUxREJBRTcyOTAwNTRBQTNDIC8qIE5ldHdvcmtTZXNzaW9uQ29j
b2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxNzkxNUI5MjI1NzA0NkYwMEQ2Rjk3RSAvKiBOZXR3
b3JrU29ja2V0Q2hhbm5lbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE4MzI0N0MyNjE2OEM2MjAw
M0YyMzlFIC8qIE5ldHdvcmtVUkxTY2hlbWVIYW5kbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
MTgzMjQ3RDI2MTY4RkY3MDAzRjIzOUUgLyogTmV0d29ya1VSTFNjaGVtZVRhc2suaCBpbiBIZWFk
ZXJzICovLAogCQkJCTU3MERBQUMyMjMwMzczMDMwMEU4RkMwNCAvKiBOZmNDb25uZWN0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1NzBEQUFBRTIzMDI2RjVDMDBFOEZDMDQgLyogTmZjU2Vydmlj
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFBMkVDNTYxNDg5OUMwOTAwODEwRDcxIC8qIE5vdGlm
aWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTEyODI3LDcgKzEy
ODI4LDYgQEAKIAkJCQkwRkNCNEU2ODE4QkJFM0Q5MDAwRkNGQzkgLyogV0tUZXh0SW5wdXRXaW5k
b3dDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTIxMjE1RjI0MEVFNTcxMDA2RUQ0
NDMgLyogV0tUZXh0UGxhY2Vob2xkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFNDU5NDVDMjQw
Rjg4NTUwMDc4MDE5RiAvKiBXS1RleHRTZWxlY3Rpb25SZWN0LmggaW4gSGVhZGVycyAqLywKLQkJ
CQk1MTgzMjQ3QzI2MTY4QzYyMDAzRjIzOUUgLyogTmV0d29ya1VSTFNjaGVtZUhhbmRsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTJFQjZGQzAxMjAzMDIxOTYwMDE3RTYxOSAvKiBXS1RpbWVQaWNr
ZXJWaWV3Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzFBNjc2QTYyMkM2MjMyNTAw
N0Q2Mjk1IC8qIFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkM0MDc2MDgxMjRGRjAyNzAwNjhGMjBBIC8qIFdLVHlwZS5oIGluIEhlYWRlcnMgKi8s
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>425591</attachid>
            <date>2021-04-09 00:31:41 -0700</date>
            <delta_ts>2021-05-06 01:32:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224326-20210409093139.patch</filename>
            <type>text/plain</type>
            <size>49921</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1NzUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTBkZjljNDkzYTZjOGNi
YmQ5MzBmZmU5M2I5YTA5YzM1NjllN2IyOS4uOGE1NGRkZDI0NmFmN2VmNmMzOGVmNGM3ZWM4OWRj
MTdkNTM5ZWE5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDIxLTA0LTA4ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KKworICAgICAgICBbY3NzLXNjcm9s
bC1zbmFwXSBDb21wdXRlIHByb3hpbWl0eSBpbmZvcm1hdGlvbiB3aGlsZSBzbmFwcGluZworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0MzI2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSGF2ZSBTY3JvbGxT
bmFwT2Zmc2V0c0luZm8gY2Fycnkgc25hcCBhcmVhIHJlY3RhbmdsZXMgaW5zdGVhZCBvZiBzY3Jv
bGwgb2Zmc2V0CisgICAgICAgIHJhbmdlcy4gVGhpcyBhbGxvd3MgcHJveGltaXR5IGluZm9ybWF0
aW9uIHRvIGJlIGhhbmRsZWQgZHVyaW5nIHNuYXAgcG9pbnQgc2VsZWN0aW9uLgorICAgICAgICBU
aGUgZ2VvbWV0cnkgd2lsbCBiZSB1c2VkIGluIGEgZnV0dXJlIHBhdGNoIHRvIGZvbGxvdyBzcGVj
IGJlaGF2aW9yIGZvciBzbmFwCisgICAgICAgIGFyZWFzIHRoYXQgb3ZlcmZsb3cgdGhlIHNuYXBw
b3J0IGFuZCB3aGVuIGhhbmRsaW5nIG1hc29ucnkgbGF5b3V0cy4KKworICAgICAgICBObyBuZXcg
dGVzdHMuIFRoaXMgaXMganVzdCBhIHJlZmFjdG9yLiBJdCBzaG91bGQgbm90IGNoYW5nZSBiZWhh
dmlvciBhdCBhbGwuCisKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nv
b3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFN0YXRlU2Nyb2xsaW5nTm9kZVNu
YXBPZmZzZXRzQXNGbG9hdCk6IFBhc3MgaW4gdGhlIG5ldyB0ZW1wbGF0ZSBhcmd1bWVudC4KKyAg
ICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6aXNOZWFyRW5vdWdoVG9PZmZzZXRGb3JQcm94aW1pdHkpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmNsb3Nlc3RTbmFwT2Zmc2V0V2l0aEluZm9BbmRBeGlzKTogTW9kaWZp
ZWQgdG8gdGFrZSBpbiB0aGUgU2Nyb2xsU25hcE9mZnNldHNJbmZvIGRhdGEKKyAgICAgICAgc3Ry
dWN0dXJlIGFuZCBheGlzIGFsb25nIHdpdGggdGhlIHZpZXdwb3J0IHNpemUuIFRoaXMgZnVuY3Rp
b24gbm93IGV4cGxpY2l0bHkgZGV0ZXJtaW5lcyBpZiBhCisgICAgICAgIHNuYXAgcG9pbnQgaXMg
dG9vIGZhciBhd2F5IHRvIGFmZmVjdCBzY3JvbGxpbmcgZHVlIHRvIHNjcm9sbC1zbmFwIHByb3hp
bWl0eS4KKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFy
ZWEpOiBBZGQgc25hcCBhcmVhcyBhbmQgc25hcCBhcmVhIGluZGljZXMgdG8gU25hcE9mZnNldC4K
KyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRPZmZzZXRJbmZvKTogSW5zdGVhZCBvZiBjb252ZXJ0
aW5nIHNjcm9sbCBvZmZzZXQgcmFuZ2VzLCBjb252ZXJ0IHRoZSBzbmFwCisgICAgICAgIGFyZWEg
cmVjdGFuZ2xlcy4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0U2Nyb2xsU25hcE9mZnNldHNJbmZv
Ojpjb252ZXJ0VW5pdHMgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dFNj
cm9sbFNuYXBPZmZzZXRzSW5mbzo6Y29udmVydFVuaXRzIGNvbnN0KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm86OmNsb3Nlc3RTbmFwT2Zmc2V0
IGNvbnN0KTogVXBkYXRlZCB0byByZWZsZWN0IG5ldworICAgICAgICBpbnRlcm5hbCBmdW5jdGlv
bi4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0U2Nyb2xsU25hcE9mZnNldHNJbmZvOjpjbG9zZXN0
U25hcE9mZnNldCBjb25zdCk6IERpdHRvLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bFNuYXBPZmZzZXRzSW5mby5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsU25hcE9mZnNldHNJ
bmZvOjppc0VxdWFsIGNvbnN0KTogVXBkYXRlIHRvIHJlZmxlY3QgbmV3IG1lbSBlcnMuCisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxTbmFwT2Zmc2V0c0luZm86Om9mZnNldHNGb3JBeGlzIGNvbnN0
KTogQ2hhbmdlZCB0ZW1wbGF0ZSBwYXJhbWV0ZXIgbmFtZS4KKyAgICAgICAgKiBwYWdlL3Njcm9s
bGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OnVwZGF0
ZUZyb21TdGF0ZU5vZGUpOiA6OmNvbnZlcnRVbml0cworICAgICAgICB0YWtlcyBhIG5ldyB0ZW1w
bGF0ZSBwYXJhbWV0ZXIuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbmljb3NpYS9TY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTmljb3NpYS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTmljb3NpYTo6aGFuZGxlV2hlZWxF
dmVudCk6IFBhc3MgaW4gdmlld3BvcnQgc2l6ZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnNldE5l
YXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjphZGp1c3RTY3JvbGxEZXN0aW5hdGlvbik6IERpdHRv
LgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbFNuYXBBbmltYXRvclN0YXRlOjpzZXR1cEFuaW1hdGlvbkZvclN0
YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZTo6
dGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZzZXQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6Om9wZXJhdG9yPDwpOiBObyBsb25nZXIgcHJpbnQgc25hcCBvZmZzZXQgcmFuZ2VzLgorICAg
ICAgICAqIHBsYXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmg6IFJlbW92ZSByZWZlcmVu
Y2VzIHRvIHNuYXAgb2Zmc2V0IHJhbmdlcy4KKwogMjAyMS0wNC0wOCAgRnVqaWkgSGlyb25vcmkg
IDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAogICAgICAgICBbV2luXSBXcm9uZyBLZXlib2Fy
ZEV2ZW50LmtleSBmb3IgbnVtZXJpYyBrZXkgcGFkIHdpdGggTnVtTG9jawpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAx
YWI4ZmVhYTExNGNhYzI3YjZiN2IwZTUzMjJmZjhjNTZjNzE0YzBjLi45NmI0ZTRlMDlkNWNlMjAx
ZmM5MDhiNmU0ZTNiY2U2MWQwZDBjZmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDIx
LTA0LTA4ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KKworICAgICAg
ICBbY3NzLXNjcm9sbC1zbmFwXSBDb21wdXRlIHByb3hpbWl0eSBpbmZvcm1hdGlvbiB3aGlsZSBz
bmFwcGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjI0MzI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBTaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNh
Y3Rpb24uY3BwOgorICAgICAgICAoQXJndW1lbnRDb2RlcjxTbmFwT2Zmc2V0PGZsb2F0Pj46OmVu
Y29kZSk6IEFkZCB0aGUgc25hcCBhcmVhIGluZGV4IHRvIHRoZSBlbmNvZGVkIGFyZ3VtZW50cy4K
KyAgICAgICAgKEFyZ3VtZW50Q29kZXI8U25hcE9mZnNldDxmbG9hdD4+OjpkZWNvZGUpOiBBZGQg
dGhlIHNuYXAgYXJlYSBpbmRleCB0byB0aGUgZGVjb2RlZCBhcmd1bWVudHMuCisgICAgICAgIChB
cmd1bWVudENvZGVyPEZsb2F0U2Nyb2xsU25hcE9mZnNldHNJbmZvPjo6ZW5jb2RlKTogTm8gbG9u
Z2VyIGVuY29kZSByYW5nZXMsIGJ1dCBlbmNvZGUgc25hcCBhcmVhcy4KKyAgICAgICAgKEFyZ3Vt
ZW50Q29kZXI8RmxvYXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8+OjpkZWNvZGUpOiBEaXR0byBmb3Ig
ZGVjb2RlLgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOiBSZW1v
dmUgY29kZSBkZWFsaW5nIHdpdGggc2Nyb2xsIG9mZnNldCByYW5nZXMuCisgICAgICAgICogU2hh
cmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
UmVtb3RlTGF5ZXJUcmVlL2lvcy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5SU9TLm1t
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpjbG9z
ZXN0U25hcE9mZnNldEZvck1haW5GcmFtZVNjcm9sbGluZyBjb25zdCk6IFBhc3MKKyAgICAgICAg
aW4gdmlld3BvcnQgc2l6ZSB0byBjbG9zZXN0U25hcE9mZnNldCB3aGljaCBpcyBuZWNlc3Nhcnkg
Zm9yIGNhbGN1bGF0aW5nIHByb3hpbWl0eS4KKyAgICAgICAgKiBVSVByb2Nlc3MvUmVtb3RlTGF5
ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tOgorICAg
ICAgICAoLVtXS1Njcm9sbGluZ05vZGVTY3JvbGxWaWV3RGVsZWdhdGUgc2Nyb2xsVmlld1dpbGxF
bmREcmFnZ2luZzp3aXRoVmVsb2NpdHk6dGFyZ2V0Q29udGVudE9mZnNldDpdKTogRGl0dG8uCisK
IDIwMjEtMDQtMDggIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAK
ICAgICAgICAgW1dpbl0gV3JvbmcgS2V5Ym9hcmRFdmVudC5rZXkgZm9yIG51bWVyaWMga2V5IHBh
ZCB3aXRoIE51bUxvY2sKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5jcHAKaW5kZXggZDNhN2MxMWNhYTVlZTZh
MzFlYTdiMjE1OWMwZWI1YTcxOTQ1MGExOS4uNzlhYTJmNjJiNWE4YWQ1MDI3MjM2YmE4NGVmNDJh
MDRlZDBhZTI1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5
bmNTY3JvbGxpbmdDb29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5jcHAKQEAgLTEwMCw3ICsxMDAsNyBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgc2V0U3RhdGVTY3JvbGxpbmdOb2RlU25hcE9mZnNldHNBc0Zsb2F0
KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaQogICAgIH0KIAogICAgIC8vIEZJWE1FOiBJbmNvcnBvcmF0
ZSBjdXJyZW50IHBhZ2Ugc2NhbGUgZmFjdG9yIGluIHNuYXBwaW5nIHRvIGRldmljZSBwaXhlbC4g
UGVyaGFwcyB3ZSBzaG91bGQganVzdCBjb252ZXJ0IHRvIGZsb2F0IGhlcmUgYW5kIGxldCBVSSBw
cm9jZXNzIGRvIHRoZSBwaXhlbCBzbmFwcGluZz8KLSAgICBub2RlLnNldFNuYXBPZmZzZXRzSW5m
byhvZmZzZXRJbmZvLT5jb252ZXJ0VW5pdHM8ZmxvYXQ+KGRldmljZVNjYWxlRmFjdG9yKSk7Cisg
ICAgbm9kZS5zZXRTbmFwT2Zmc2V0c0luZm8ob2Zmc2V0SW5mby0+Y29udmVydFVuaXRzPEZsb2F0
U2Nyb2xsU25hcE9mZnNldHNJbmZvPihkZXZpY2VTY2FsZUZhY3RvcikpOwogfQogI2VuZGlmCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZz
ZXRzSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zm
c2V0c0luZm8uY3BwCmluZGV4IGZjZGQxY2EzOGYyYTVmNDI3ZGYzZmVmNWVhYTRlY2E3MDFiMGQz
ZTAuLjM3YjY2MzdiNDg2MGQ5OGNlMzgwNjhmNTFiMzFmZWNlNjhhYzZkMTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZv
LmNwcApAQCAtNDIsNDEgKzQyLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdGVtcGxh
dGUgPHR5cGVuYW1lIExheW91dFR5cGU+Ci1zdGF0aWMgdm9pZCBpbmRpY2VzT2ZOZWFyZXN0U25h
cE9mZnNldFJhbmdlcyhMYXlvdXRUeXBlIG9mZnNldCwgY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNl
dFJhbmdlPExheW91dFR5cGU+PiYgc25hcE9mZnNldFJhbmdlcywgdW5zaWduZWQmIGxvd2VySW5k
ZXgsIHVuc2lnbmVkJiB1cHBlckluZGV4KQordGVtcGxhdGUgPHR5cGVuYW1lIFVuaXRUeXBlPgor
c3RhdGljIGJvb2wgaXNOZWFyRW5vdWdoVG9PZmZzZXRGb3JQcm94aW1pdHkoU2Nyb2xsU25hcFN0
cmljdG5lc3Mgc3RyaWN0bmVzcywgVW5pdFR5cGUgc2Nyb2xsRGVzdGluYXRpb24sIFVuaXRUeXBl
IGNhbmRpZGF0ZVNuYXBPZmZzZXQsIFVuaXRUeXBlIHZpZXdwb3J0TGVuZ3RoKQogewotICAgIGlm
IChzbmFwT2Zmc2V0UmFuZ2VzLmlzRW1wdHkoKSkgewotICAgICAgICBsb3dlckluZGV4ID0gaW52
YWxpZFNuYXBPZmZzZXRJbmRleDsKLSAgICAgICAgdXBwZXJJbmRleCA9IGludmFsaWRTbmFwT2Zm
c2V0SW5kZXg7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnQgbG93ZXJJbmRleEFz
SW50ID0gLTE7Ci0gICAgaW50IHVwcGVySW5kZXhBc0ludCA9IHNuYXBPZmZzZXRSYW5nZXMuc2l6
ZSgpOwotICAgIGRvIHsKLSAgICAgICAgaW50IG1pZGRsZUluZGV4ID0gKGxvd2VySW5kZXhBc0lu
dCArIHVwcGVySW5kZXhBc0ludCkgLyAyOwotICAgICAgICBhdXRvJiByYW5nZSA9IHNuYXBPZmZz
ZXRSYW5nZXNbbWlkZGxlSW5kZXhdOwotICAgICAgICBpZiAocmFuZ2Uuc3RhcnQgPCBvZmZzZXQg
JiYgb2Zmc2V0IDwgcmFuZ2UuZW5kKSB7Ci0gICAgICAgICAgICBsb3dlckluZGV4QXNJbnQgPSBt
aWRkbGVJbmRleDsKLSAgICAgICAgICAgIHVwcGVySW5kZXhBc0ludCA9IG1pZGRsZUluZGV4Owot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAob2Zmc2V0ID4gcmFu
Z2UuZW5kKQotICAgICAgICAgICAgbG93ZXJJbmRleEFzSW50ID0gbWlkZGxlSW5kZXg7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHVwcGVySW5kZXhBc0ludCA9IG1pZGRsZUluZGV4OwotICAg
IH0gd2hpbGUgKGxvd2VySW5kZXhBc0ludCA8IHVwcGVySW5kZXhBc0ludCAtIDEpOwotCi0gICAg
aWYgKG9mZnNldCA8PSBzbmFwT2Zmc2V0UmFuZ2VzLmZpcnN0KCkuc3RhcnQpCi0gICAgICAgIGxv
d2VySW5kZXggPSBpbnZhbGlkU25hcE9mZnNldEluZGV4OwotICAgIGVsc2UKLSAgICAgICAgbG93
ZXJJbmRleCA9IGxvd2VySW5kZXhBc0ludDsKKyAgICBpZiAoc3RyaWN0bmVzcyAhPSBTY3JvbGxT
bmFwU3RyaWN0bmVzczo6UHJveGltaXR5KQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlm
IChvZmZzZXQgPj0gc25hcE9mZnNldFJhbmdlcy5sYXN0KCkuZW5kKQotICAgICAgICB1cHBlcklu
ZGV4ID0gaW52YWxpZFNuYXBPZmZzZXRJbmRleDsKLSAgICBlbHNlCi0gICAgICAgIHVwcGVySW5k
ZXggPSB1cHBlckluZGV4QXNJbnQ7CisgICAgLy8gVGhpcyBpcyBhbiBhcmJpdHJhcnkgY2hvaWNl
IGZvciB3aGF0IGl0IG1lYW5zIHRvIGJlICJpbiBwcm94aW1pdHkiIG9mIGEgc25hcCBvZmZzZXQu
IFdlIHNob3VsZCBwbGF5IGFyb3VuZCB3aXRoCisgICAgLy8gdGhpcyBhbmQgc2VlIHdoYXQgZmVl
bHMgYmVzdC4KKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgcmF0aW9PZlNjcm9sbFBvcnRBeGlzTGVu
Z3RoVG9CZUNvbnNpZGVyZWRGb3JQcm94aW1pdHkgPSAwLjM7CisgICAgcmV0dXJuIHN0ZDo6YWJz
KGZsb2F0IHtjYW5kaWRhdGVTbmFwT2Zmc2V0IC0gc2Nyb2xsRGVzdGluYXRpb259KSA8PSAodmll
d3BvcnRMZW5ndGggKiByYXRpb09mU2Nyb2xsUG9ydEF4aXNMZW5ndGhUb0JlQ29uc2lkZXJlZEZv
clByb3hpbWl0eSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXlvdXRUeXBlPgpAQCAtMTMx
LDkgKzEwNiwxMCBAQCBzdGF0aWMgT3B0aW9uYWw8dW5zaWduZWQ+IGZpbmRGaXJzdFNuYXBTdG9w
T2Zmc2V0QmV0d2Vlbk9yaWdpbkFuZERlc3RpbmF0aW9uKGNvbgogICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBMYXlvdXRUeXBlPgotc3RhdGljIHN0ZDo6
cGFpcjxMYXlvdXRUeXBlLCB1bnNpZ25lZD4gY2xvc2VzdFNuYXBPZmZzZXRXaXRoT2Zmc2V0c0Fu
ZFJhbmdlcyhjb25zdCBWZWN0b3I8U25hcE9mZnNldDxMYXlvdXRUeXBlPj4mIHNuYXBPZmZzZXRz
LCBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VHlwZT4+JiBzbmFwT2Zmc2V0
UmFuZ2VzLCBMYXlvdXRUeXBlIHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBmbG9hdCB2ZWxvY2l0
eSwgT3B0aW9uYWw8TGF5b3V0VHlwZT4gb3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNuYXBw
aW5nKQordGVtcGxhdGUgPHR5cGVuYW1lIEluZm9UeXBlLCB0eXBlbmFtZSBTaXplVHlwZSwgdHlw
ZW5hbWUgTGF5b3V0VHlwZT4KK3N0YXRpYyBzdGQ6OnBhaXI8TGF5b3V0VHlwZSwgdW5zaWduZWQ+
IGNsb3Nlc3RTbmFwT2Zmc2V0V2l0aEluZm9BbmRBeGlzKGNvbnN0IEluZm9UeXBlJiBpbmZvLCBT
Y3JvbGxFdmVudEF4aXMgYXhpcywgY29uc3QgU2l6ZVR5cGUmIHZpZXdwb3J0U2l6ZSwgTGF5b3V0
VHlwZSBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCwgZmxvYXQgdmVsb2NpdHksIE9wdGlvbmFsPExh
eW91dFR5cGU+IG9yaWdpbmFsT2Zmc2V0Rm9yRGlyZWN0aW9uYWxTbmFwcGluZykKIHsKKyAgICBj
b25zdCBhdXRvJiBzbmFwT2Zmc2V0cyA9IGluZm8ub2Zmc2V0c0ZvckF4aXMoYXhpcyk7CiAgICAg
aWYgKHNuYXBPZmZzZXRzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWly
KHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBpbnZhbGlkU25hcE9mZnNldEluZGV4KTsKIApAQCAt
MTQzLDEyICsxMTksNiBAQCBzdGF0aWMgc3RkOjpwYWlyPExheW91dFR5cGUsIHVuc2lnbmVkPiBj
bG9zZXN0U25hcE9mZnNldFdpdGhPZmZzZXRzQW5kUmFuZ2VzKGNvbgogICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bWFrZV9wYWlyKHNuYXBPZmZzZXRzWypmaXJzdFNuYXBTdG9wT2Zmc2V0SW5kZXhd
Lm9mZnNldCwgKmZpcnN0U25hcFN0b3BPZmZzZXRJbmRleCk7CiAgICAgfQogCi0gICAgdW5zaWdu
ZWQgbG93ZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleDsKLSAgICB1bnNpZ25lZCB1cHBlclNuYXBPZmZz
ZXRSYW5nZUluZGV4OwotICAgIGluZGljZXNPZk5lYXJlc3RTbmFwT2Zmc2V0UmFuZ2VzPExheW91
dFR5cGU+KHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBzbmFwT2Zmc2V0UmFuZ2VzLCBsb3dlclNu
YXBPZmZzZXRSYW5nZUluZGV4LCB1cHBlclNuYXBPZmZzZXRSYW5nZUluZGV4KTsKLSAgICBpZiAo
bG93ZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleCA9PSB1cHBlclNuYXBPZmZzZXRSYW5nZUluZGV4ICYm
IHVwcGVyU25hcE9mZnNldFJhbmdlSW5kZXggIT0gaW52YWxpZFNuYXBPZmZzZXRJbmRleCkKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBpbnZh
bGlkU25hcE9mZnNldEluZGV4KTsKLQogICAgIGlmIChzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCA8
PSBzbmFwT2Zmc2V0cy5maXJzdCgpLm9mZnNldCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKHNuYXBPZmZzZXRzLmZpcnN0KCkub2Zmc2V0LCAwdSk7CiAKQEAgLTE2MCwyOCArMTMwLDM2
IEBAIHN0YXRpYyBzdGQ6OnBhaXI8TGF5b3V0VHlwZSwgdW5zaWduZWQ+IGNsb3Nlc3RTbmFwT2Zm
c2V0V2l0aE9mZnNldHNBbmRSYW5nZXMoY29uCiAgICAgaW5kaWNlc09mTmVhcmVzdFNuYXBPZmZz
ZXRzPExheW91dFR5cGU+KHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBzbmFwT2Zmc2V0cywgbG93
ZXJJbmRleCwgdXBwZXJJbmRleCk7CiAgICAgTGF5b3V0VHlwZSBsb3dlclNuYXBQb3NpdGlvbiA9
IHNuYXBPZmZzZXRzW2xvd2VySW5kZXhdLm9mZnNldDsKICAgICBMYXlvdXRUeXBlIHVwcGVyU25h
cFBvc2l0aW9uID0gc25hcE9mZnNldHNbdXBwZXJJbmRleF0ub2Zmc2V0OworCisgICAgYXV0byB2
aWV3cG9ydExlbmd0aCA9IGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsID8gdmll
d3BvcnRTaXplLndpZHRoKCkgOiB2aWV3cG9ydFNpemUuaGVpZ2h0KCk7CisgICAgaWYgKCFpc05l
YXJFbm91Z2hUb09mZnNldEZvclByb3hpbWl0eTxMYXlvdXRUeXBlPihpbmZvLnN0cmljdG5lc3Ms
IHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBsb3dlclNuYXBQb3NpdGlvbiwgdmlld3BvcnRMZW5n
dGgpKSB7CisgICAgICAgIGxvd2VyU25hcFBvc2l0aW9uID0gc2Nyb2xsRGVzdGluYXRpb25PZmZz
ZXQ7CisgICAgICAgIGxvd2VySW5kZXggPSBpbnZhbGlkU25hcE9mZnNldEluZGV4OworICAgIH0K
KworICAgIGlmICghaXNOZWFyRW5vdWdoVG9PZmZzZXRGb3JQcm94aW1pdHk8TGF5b3V0VHlwZT4o
aW5mby5zdHJpY3RuZXNzLCBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCwgdXBwZXJTbmFwUG9zaXRp
b24sIHZpZXdwb3J0TGVuZ3RoKSkgeworICAgICAgICB1cHBlclNuYXBQb3NpdGlvbiA9IHNjcm9s
bERlc3RpbmF0aW9uT2Zmc2V0OworICAgICAgICB1cHBlckluZGV4ID0gaW52YWxpZFNuYXBPZmZz
ZXRJbmRleDsKKyAgICB9CiAgICAgaWYgKCFzdGQ6OmFicyh2ZWxvY2l0eSkpIHsKLSAgICAgICAg
Ym9vbCBpc0Nsb3NlclRvTG93ZXJTbmFwUG9zaXRpb24gPSBzY3JvbGxEZXN0aW5hdGlvbk9mZnNl
dCAtIGxvd2VyU25hcFBvc2l0aW9uIDw9IHVwcGVyU25hcFBvc2l0aW9uIC0gc2Nyb2xsRGVzdGlu
YXRpb25PZmZzZXQ7CisgICAgICAgIGJvb2wgaXNDbG9zZXJUb0xvd2VyU25hcFBvc2l0aW9uID0g
KHVwcGVySW5kZXggPT0gaW52YWxpZFNuYXBPZmZzZXRJbmRleCkKKyAgICAgICAgICAgIHx8IChs
b3dlckluZGV4ICE9IGludmFsaWRTbmFwT2Zmc2V0SW5kZXggJiYgc2Nyb2xsRGVzdGluYXRpb25P
ZmZzZXQgLSBsb3dlclNuYXBQb3NpdGlvbiA8PSB1cHBlclNuYXBQb3NpdGlvbiAtIHNjcm9sbERl
c3RpbmF0aW9uT2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIGlzQ2xvc2VyVG9Mb3dlclNuYXBQb3Np
dGlvbiA/IHN0ZDo6bWFrZV9wYWlyKGxvd2VyU25hcFBvc2l0aW9uLCBsb3dlckluZGV4KSA6IHN0
ZDo6bWFrZV9wYWlyKHVwcGVyU25hcFBvc2l0aW9uLCB1cHBlckluZGV4KTsKICAgICB9CiAKICAg
ICAvLyBOb24temVybyB2ZWxvY2l0eSBpbmRpY2F0ZXMgYSBmbGljayBnZXN0dXJlLiBFdmVuIGlm
IGFub3RoZXIgc25hcCBwb2ludCBpcyBjbG9zZXIsIHdlIHNob3VsZCBjaG9vc2UgdGhlIG9uZSBp
biB0aGUgZGlyZWN0aW9uIG9mIHRoZSBmbGljayBnZXN0dXJlCi0gICAgLy8gYXMgbG9uZyBhcyBh
IHNjcm9sbCBzbmFwIG9mZnNldCByYW5nZSBkb2VzIG5vdCBsaWUgYmV0d2VlbiB0aGUgc2Nyb2xs
IGRlc3RpbmF0aW9uIGFuZCB0aGUgdGFyZ2V0ZWQgc25hcCBvZmZzZXQuIElmIHdlIGFyZSBkb2lu
ZyBkaXJlY3Rpb25hbAorICAgIC8vIGFzIGxvbmcgYXMgYSBzY3JvbGwgc25hcCBvZmZzZXQgaXMg
Y2xvc2UgZW5vdWdoIGZvciBwcm94aW1pdHkgKG9yIHdlIGFyZW4ndCB1c2luZyBwcm94aW1pdHkp
LiBJZiB3ZSBhcmUgZG9pbmcgZGlyZWN0aW9uYWwKICAgICAvLyBzbmFwcGluZywgd2Ugc2hvdWxk
IG5ldmVyIHNuYXAgdG8gYSBwb2ludCB0aGF0IHdhcyBvbiB0aGUgb3RoZXIgc2lkZSBvZiB0aGUg
b3JpZ2luYWwgcG9zaXRpb24gaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiBvZiB0aGlzIHNjcm9s
bC4KICAgICAvLyBUaGlzIGFsbG93cyBkaXJlY3Rpb25hbCBzY3JvbGxpbmcgdG8gZXNjYXBlIHNu
YXAgcG9pbnRzLgotICAgIGlmICh2ZWxvY2l0eSA8IDApIHsKLSAgICAgICAgaWYgKGxvd2VyU25h
cE9mZnNldFJhbmdlSW5kZXggPT0gaW52YWxpZFNuYXBPZmZzZXRJbmRleCB8fCBsb3dlclNuYXBQ
b3NpdGlvbiA+PSBzbmFwT2Zmc2V0UmFuZ2VzW2xvd2VyU25hcE9mZnNldFJhbmdlSW5kZXhdLmVu
ZCkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihsb3dlclNuYXBQb3NpdGlvbiwg
bG93ZXJJbmRleCk7Ci0gICAgICAgIGlmICghb3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNu
YXBwaW5nLmhhc1ZhbHVlKCkgfHwgKm9yaWdpbmFsT2Zmc2V0Rm9yRGlyZWN0aW9uYWxTbmFwcGlu
ZyA+IHVwcGVyU25hcFBvc2l0aW9uKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWly
KHVwcGVyU25hcFBvc2l0aW9uLCB1cHBlckluZGV4KTsKLSAgICB9IGVsc2UgewotICAgICAgICBp
ZiAodXBwZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleCA9PSBpbnZhbGlkU25hcE9mZnNldEluZGV4IHx8
IHNuYXBPZmZzZXRSYW5nZXNbdXBwZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleF0uc3RhcnQgPj0gdXBw
ZXJTbmFwUG9zaXRpb24pCisgICAgaWYgKHZlbG9jaXR5IDwgMCkgIHsKKyAgICAgICAgaWYgKHVw
cGVySW5kZXggIT0gaW52YWxpZFNuYXBPZmZzZXRJbmRleCAmJiAoIW9yaWdpbmFsT2Zmc2V0Rm9y
RGlyZWN0aW9uYWxTbmFwcGluZyB8fCAqb3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNuYXBw
aW5nID4gdXBwZXJTbmFwUG9zaXRpb24pKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKHVwcGVyU25hcFBvc2l0aW9uLCB1cHBlckluZGV4KTsKLSAgICAgICAgaWYgKCFvcmlnaW5h
bE9mZnNldEZvckRpcmVjdGlvbmFsU25hcHBpbmcuaGFzVmFsdWUoKSB8fCAqb3JpZ2luYWxPZmZz
ZXRGb3JEaXJlY3Rpb25hbFNuYXBwaW5nIDwgbG93ZXJTbmFwUG9zaXRpb24pCi0gICAgICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX3BhaXIobG93ZXJTbmFwUG9zaXRpb24sIGxvd2VySW5kZXgpOwor
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobG93ZXJTbmFwUG9zaXRpb24sIGxvd2VySW5k
ZXgpOwogICAgIH0KIAotICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihzY3JvbGxEZXN0aW5hdGlv
bk9mZnNldCwgaW52YWxpZFNuYXBPZmZzZXRJbmRleCk7CisgICAgaWYgKGxvd2VySW5kZXggIT0g
aW52YWxpZFNuYXBPZmZzZXRJbmRleCAmJiAoIW9yaWdpbmFsT2Zmc2V0Rm9yRGlyZWN0aW9uYWxT
bmFwcGluZyB8fCAqb3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNuYXBwaW5nIDwgbG93ZXJT
bmFwUG9zaXRpb24pKQorICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobG93ZXJTbmFwUG9z
aXRpb24sIGxvd2VySW5kZXgpOworICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcih1cHBlclNuYXBQ
b3NpdGlvbiwgdXBwZXJJbmRleCk7CiB9CiAKIGVudW0gY2xhc3MgSW5zZXRPck91dHNldCB7CkBA
IC0yMjAsMzAgKzE5OCw2IEBAIHN0YXRpYyBMYXlvdXRVbml0IGNvbXB1dGVTY3JvbGxTbmFwQWxp
Z25PZmZzZXQoTGF5b3V0VW5pdCBtaW5Mb2NhdGlvbiwgTGF5b3V0VW5pCiAgICAgfQogfQogCi1z
dGF0aWMgdm9pZCBjb21wdXRlQXhpc1Byb3hpbWl0eVNuYXBPZmZzZXRSYW5nZXMoY29uc3QgVmVj
dG9yPFNuYXBPZmZzZXQ8TGF5b3V0VW5pdD4+JiBzbmFwT2Zmc2V0cywgVmVjdG9yPFNjcm9sbE9m
ZnNldFJhbmdlPExheW91dFVuaXQ+PiYgb2Zmc2V0UmFuZ2VzLCBMYXlvdXRVbml0IHNjcm9sbFBv
cnRBeGlzTGVuZ3RoKQotewotICAgIC8vIFRoaXMgaXMgYW4gYXJiaXRyYXJ5IGNob2ljZSBmb3Ig
d2hhdCBpdCBtZWFucyB0byBiZSAiaW4gcHJveGltaXR5IiBvZiBhIHNuYXAgb2Zmc2V0LiBXZSBz
aG91bGQgcGxheSBhcm91bmQgd2l0aAotICAgIC8vIHRoaXMgYW5kIHNlZSB3aGF0IGZlZWxzIGJl
c3QuCi0gICAgc3RhdGljIGNvbnN0IGZsb2F0IHJhdGlvT2ZTY3JvbGxQb3J0QXhpc0xlbmd0aFRv
QmVDb25zaWRlcmVkRm9yUHJveGltaXR5ID0gMC4zOwotICAgIGlmIChzbmFwT2Zmc2V0cy5zaXpl
KCkgPCAyKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGUgZXh0cmEgcnVsZSBhY2NvdW50
aW5nIGZvciBzY3JvbGwgb2Zmc2V0IHJhbmdlcyBpbiBiZXR3ZWVuIHRoZSBzY3JvbGwgZGVzdGlu
YXRpb24gYW5kIGEgcG90ZW50aWFsIHNuYXAgb2Zmc2V0Ci0gICAgLy8gaGFuZGxlcyB0aGUgY29y
bmVyIGNhc2Ugd2hlcmUgdGhlIHVzZXIgc2Nyb2xscyB3aXRoIG1vbWVudHVtIHZlcnkgbGlnaHRs
eSBhd2F5IGZyb20gYSBzbmFwIG9mZnNldCwgc3VjaCB0aGF0IHRoZQotICAgIC8vIHByZWRpY3Rl
ZCBzY3JvbGwgZGVzdGluYXRpb24gaXMgc3RpbGwgd2l0aGluIHByb3hpbWl0eSBvZiB0aGUgc25h
cCBvZmZzZXQuIEluIHRoaXMgY2FzZSwgdGhlIHJlZ3VsYXIgKG1hbmRhdG9yeQotICAgIC8vIHNj
cm9sbCBzbmFwcGluZykgYmVoYXZpb3Igd291bGQgYmUgdG8gc25hcCB0byB0aGUgbmV4dCBvZmZz
ZXQgaW4gdGhlIGRpcmVjdGlvbiBvZiBtb21lbnR1bSBzY3JvbGxpbmcsIGJ1dAotICAgIC8vIGlu
c3RlYWQsIGl0IGlzIG1vcmUgaW50dWl0aXZlIHRvIGVpdGhlciByZXR1cm4gdG8gdGhlIG9yaWdp
bmFsIHNuYXAgcG9zaXRpb24gKHdoaWNoIHdlIGFyYml0cmFyaWx5IGNob29zZSBoZXJlKQotICAg
IC8vIG9yIHNjcm9sbCBqdXN0IG91dHNpZGUgb2YgdGhlIHNuYXAgb2Zmc2V0IHJhbmdlLiBUaGlz
IGlzIGFub3RoZXIgbWlub3IgYmVoYXZpb3IgdHdlYWsgdGhhdCB3ZSBzaG91bGQgcGxheSBhcm91
bmQKLSAgICAvLyB3aXRoIHRvIHNlZSB3aGF0IGZlZWxzIGJlc3QuCi0gICAgTGF5b3V0VW5pdCBw
cm94aW1pdHlEaXN0YW5jZSB7IHJhdGlvT2ZTY3JvbGxQb3J0QXhpc0xlbmd0aFRvQmVDb25zaWRl
cmVkRm9yUHJveGltaXR5ICogc2Nyb2xsUG9ydEF4aXNMZW5ndGggfTsKLSAgICBmb3IgKHNpemVf
dCBpbmRleCA9IDE7IGluZGV4IDwgc25hcE9mZnNldHMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAg
ICAgIGF1dG8gc3RhcnRPZmZzZXQgPSBzbmFwT2Zmc2V0c1tpbmRleCAtIDFdLm9mZnNldCArIHBy
b3hpbWl0eURpc3RhbmNlOwotICAgICAgICBhdXRvIGVuZE9mZnNldCA9IHNuYXBPZmZzZXRzW2lu
ZGV4XS5vZmZzZXQgLSBwcm94aW1pdHlEaXN0YW5jZTsKLSAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0
IDwgZW5kT2Zmc2V0KQotICAgICAgICAgICAgb2Zmc2V0UmFuZ2VzLmFwcGVuZCh7IHN0YXJ0T2Zm
c2V0LCBlbmRPZmZzZXQgfSk7Ci0gICAgfQotfQotCiB2b2lkIHVwZGF0ZVNuYXBPZmZzZXRzRm9y
U2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhLCBjb25zdCBSZW5k
ZXJCb3gmIHNjcm9sbGluZ0VsZW1lbnRCb3gsIGNvbnN0IFJlbmRlclN0eWxlJiBzY3JvbGxpbmdF
bGVtZW50U3R5bGUsIExheW91dFJlY3Qgdmlld3BvcnRSZWN0SW5Cb3JkZXJCb3hDb29yZGluYXRl
cykKIHsKICAgICBhdXRvIHNjcm9sbFNuYXBUeXBlID0gc2Nyb2xsaW5nRWxlbWVudFN0eWxlLnNj
cm9sbFNuYXBUeXBlKCk7CkBAIC0yNjMsNiArMjE3LDcgQEAgdm9pZCB1cGRhdGVTbmFwT2Zmc2V0
c0ZvclNjcm9sbGFibGVBcmVhKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSwgY29uc3Qg
UmUKIAogICAgIEhhc2hNYXA8ZmxvYXQsIFNuYXBPZmZzZXQ8TGF5b3V0VW5pdD4+IHZlcnRpY2Fs
U25hcE9mZnNldHNNYXA7CiAgICAgSGFzaE1hcDxmbG9hdCwgU25hcE9mZnNldDxMYXlvdXRVbml0
Pj4gaG9yaXpvbnRhbFNuYXBPZmZzZXRzTWFwOworICAgIFZlY3RvcjxMYXlvdXRSZWN0PiBzbmFw
QXJlYXM7CiAgICAgYm9vbCBoYXNIb3Jpem9udGFsU25hcE9mZnNldHMgPSBzY3JvbGxTbmFwVHlw
ZS5heGlzID09IFNjcm9sbFNuYXBBeGlzOjpCb3RoIHx8IHNjcm9sbFNuYXBUeXBlLmF4aXMgPT0g
U2Nyb2xsU25hcEF4aXM6OlhBeGlzIHx8IHNjcm9sbFNuYXBUeXBlLmF4aXMgPT0gU2Nyb2xsU25h
cEF4aXM6OklubGluZTsKICAgICBib29sIGhhc1ZlcnRpY2FsU25hcE9mZnNldHMgPSBzY3JvbGxT
bmFwVHlwZS5heGlzID09IFNjcm9sbFNuYXBBeGlzOjpCb3RoIHx8IHNjcm9sbFNuYXBUeXBlLmF4
aXMgPT0gU2Nyb2xsU25hcEF4aXM6OllBeGlzIHx8IHNjcm9sbFNuYXBUeXBlLmF4aXMgPT0gU2Ny
b2xsU25hcEF4aXM6OkJsb2NrOwogCkBAIC0yOTEsMTYgKzI0NiwzMCBAQCB2b2lkIHVwZGF0ZVNu
YXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVh
LCBjb25zdCBSZQogICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8
ICIgICAgQ29uc2lkZXJpbmcgc2Nyb2xsIHNuYXAgdGFyZ2V0IGFyZWEgIiA8PCBzY3JvbGxTbmFw
QXJlYSk7CiAgICAgICAgIGF1dG8gYWxpZ25tZW50ID0gY2hpbGQtPnN0eWxlKCkuc2Nyb2xsU25h
cEFsaWduKCk7CiAgICAgICAgIGF1dG8gc3RvcCA9IGNoaWxkLT5zdHlsZSgpLnNjcm9sbFNuYXBT
dG9wKCk7Ci0gICAgICAgIGlmIChoYXNIb3Jpem9udGFsU25hcE9mZnNldHMgJiYgYWxpZ25tZW50
LnggIT0gU2Nyb2xsU25hcEF4aXNBbGlnblR5cGU6Ok5vbmUpIHsKKworICAgICAgICBib29sIHNu
YXBzSG9yaXpvbnRhbGx5ID0gaGFzSG9yaXpvbnRhbFNuYXBPZmZzZXRzICYmIGFsaWdubWVudC54
ICE9IFNjcm9sbFNuYXBBeGlzQWxpZ25UeXBlOjpOb25lOworICAgICAgICBib29sIHNuYXBzVmVy
dGljYWxseSA9IGhhc1ZlcnRpY2FsU25hcE9mZnNldHMgJiYgYWxpZ25tZW50LnkgIT0gU2Nyb2xs
U25hcEF4aXNBbGlnblR5cGU6Ok5vbmU7CisgICAgICAgIGlmICghc25hcHNIb3Jpem9udGFsbHkg
JiYgIXNuYXBzVmVydGljYWxseSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8v
IFRoZSBzY3JvbGwgc25hcCBhcmVhIGlzIGRlZmluZWQgdmlhIGl0cyBzY3JvbGwgcG9zaXRpb24s
IHNvIGNvbnZlcnQgdGhlIHNuYXAgYXJlYSByZWN0YW5nbGUgdG8gYmUgcmVsYXRpdmUgdG8gc2Ny
b2xsIG9mZnNldHMuCisgICAgICAgIGF1dG8gc25hcEFyZWFPcmlnaW5SZWxhdGl2ZVRvQm9yZGVy
RWRnZSA9IHNjcm9sbFNuYXBBcmVhLmxvY2F0aW9uKCkgLSBzY3JvbGxTbmFwUG9ydC5sb2NhdGlv
bigpOworICAgICAgICBMYXlvdXRSZWN0IHNjcm9sbFNuYXBBcmVhQXNPZmZzZXRzKHNjcm9sbGFi
bGVBcmVhLnNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihyb3VuZGVkSW50UG9pbnQoc25hcEFyZWFP
cmlnaW5SZWxhdGl2ZVRvQm9yZGVyRWRnZSkpLCBzY3JvbGxTbmFwQXJlYS5zaXplKCkpOworICAg
ICAgICBzbmFwQXJlYXMuYXBwZW5kKHNjcm9sbFNuYXBBcmVhQXNPZmZzZXRzKTsKKworICAgICAg
ICBpZiAoc25hcHNIb3Jpem9udGFsbHkpIHsKICAgICAgICAgICAgIGF1dG8gYWJzb2x1dGVTY3Jv
bGxYUG9zaXRpb24gPSBjb21wdXRlU2Nyb2xsU25hcEFsaWduT2Zmc2V0KHNjcm9sbFNuYXBBcmVh
LngoKSwgc2Nyb2xsU25hcEFyZWEubWF4WCgpLCBhbGlnbm1lbnQueCwgc2Nyb2xsZXJJc1JUTCkg
LSBjb21wdXRlU2Nyb2xsU25hcEFsaWduT2Zmc2V0KHNjcm9sbFNuYXBQb3J0LngoKSwgc2Nyb2xs
U25hcFBvcnQubWF4WCgpLCBhbGlnbm1lbnQueCwgc2Nyb2xsZXJJc1JUTCk7CiAgICAgICAgICAg
ICBhdXRvIGFic29sdXRlU2Nyb2xsT2Zmc2V0ID0gY2xhbXBUbzxpbnQ+KHNjcm9sbGFibGVBcmVh
LnNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbih7IHJvdW5kVG9JbnQoYWJzb2x1dGVTY3JvbGxYUG9z
aXRpb24pLCAwIH0pLngoKSwgMCwgbWF4U2Nyb2xsT2Zmc2V0LngoKSk7Ci0gICAgICAgICAgICBh
ZGRPclVwZGF0ZVN0b3BGb3JTbmFwT2Zmc2V0KGhvcml6b250YWxTbmFwT2Zmc2V0c01hcCwgeyBh
YnNvbHV0ZVNjcm9sbE9mZnNldCwgc3RvcCB9KTsKKyAgICAgICAgICAgIGFkZE9yVXBkYXRlU3Rv
cEZvclNuYXBPZmZzZXQoaG9yaXpvbnRhbFNuYXBPZmZzZXRzTWFwLCB7IGFic29sdXRlU2Nyb2xs
T2Zmc2V0LCBzdG9wLCBzbmFwQXJlYXMuc2l6ZSgpIC0gMSB9KTsKICAgICAgICAgfQotICAgICAg
ICBpZiAoaGFzVmVydGljYWxTbmFwT2Zmc2V0cyAmJiBhbGlnbm1lbnQueSAhPSBTY3JvbGxTbmFw
QXhpc0FsaWduVHlwZTo6Tm9uZSkgeworICAgICAgICBpZiAoc25hcHNWZXJ0aWNhbGx5KSB7CiAg
ICAgICAgICAgICBhdXRvIGFic29sdXRlU2Nyb2xsWVBvc2l0aW9uID0gY29tcHV0ZVNjcm9sbFNu
YXBBbGlnbk9mZnNldChzY3JvbGxTbmFwQXJlYS55KCksIHNjcm9sbFNuYXBBcmVhLm1heFkoKSwg
YWxpZ25tZW50LnksIGZhbHNlKSAtIGNvbXB1dGVTY3JvbGxTbmFwQWxpZ25PZmZzZXQoc2Nyb2xs
U25hcFBvcnQueSgpLCBzY3JvbGxTbmFwUG9ydC5tYXhZKCksIGFsaWdubWVudC55LCBmYWxzZSk7
CiAgICAgICAgICAgICBhdXRvIGFic29sdXRlU2Nyb2xsT2Zmc2V0ID0gY2xhbXBUbzxpbnQ+KHNj
cm9sbGFibGVBcmVhLnNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbih7IDAsIHJvdW5kVG9JbnQoYWJz
b2x1dGVTY3JvbGxZUG9zaXRpb24pIH0pLnkoKSwgMCwgbWF4U2Nyb2xsT2Zmc2V0LnkoKSk7Ci0g
ICAgICAgICAgICBhZGRPclVwZGF0ZVN0b3BGb3JTbmFwT2Zmc2V0KHZlcnRpY2FsU25hcE9mZnNl
dHNNYXAsIHsgYWJzb2x1dGVTY3JvbGxPZmZzZXQsIHN0b3AgfSk7CisgICAgICAgICAgICBhZGRP
clVwZGF0ZVN0b3BGb3JTbmFwT2Zmc2V0KHZlcnRpY2FsU25hcE9mZnNldHNNYXAsIHsgYWJzb2x1
dGVTY3JvbGxPZmZzZXQsIHN0b3AsIHNuYXBBcmVhcy5zaXplKCkgLSAxIH0pOwogICAgICAgICB9
CisKKyAgICAgICAgaWYgKCFzbmFwQXJlYXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgTE9HX1dJ
VEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiID0+IENvbXB1dGVkIHNuYXAgYXJlYXM6
ICIgPDwgc25hcEFyZWFzKTsKICAgICB9CiAKICAgICBhdXRvIGNvbXBhcmVTbmFwT2Zmc2V0cyA9
IFtdKGNvbnN0IFNuYXBPZmZzZXQ8TGF5b3V0VW5pdD4mIGEsIGNvbnN0IFNuYXBPZmZzZXQ8TGF5
b3V0VW5pdD4mIGIpCkBAIC0zMDksMzIgKzI3OCwyMiBAQCB2b2lkIHVwZGF0ZVNuYXBPZmZzZXRz
Rm9yU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhLCBjb25zdCBS
ZQogICAgIH07CiAKICAgICBWZWN0b3I8U25hcE9mZnNldDxMYXlvdXRVbml0Pj4gaG9yaXpvbnRh
bFNuYXBPZmZzZXRzID0gY29weVRvVmVjdG9yKGhvcml6b250YWxTbmFwT2Zmc2V0c01hcC52YWx1
ZXMoKSk7Ci0gICAgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiBob3Jpem9u
dGFsU25hcE9mZnNldFJhbmdlczsKICAgICBpZiAoIWhvcml6b250YWxTbmFwT2Zmc2V0cy5pc0Vt
cHR5KCkpIHsKICAgICAgICAgc3RkOjpzb3J0KGhvcml6b250YWxTbmFwT2Zmc2V0cy5iZWdpbigp
LCBob3Jpem9udGFsU25hcE9mZnNldHMuZW5kKCksIGNvbXBhcmVTbmFwT2Zmc2V0cyk7Ci0gICAg
ICAgIGlmIChzY3JvbGxTbmFwVHlwZS5zdHJpY3RuZXNzID09IFNjcm9sbFNuYXBTdHJpY3RuZXNz
OjpQcm94aW1pdHkpCi0gICAgICAgICAgICBjb21wdXRlQXhpc1Byb3hpbWl0eVNuYXBPZmZzZXRS
YW5nZXMoaG9yaXpvbnRhbFNuYXBPZmZzZXRzLCBob3Jpem9udGFsU25hcE9mZnNldFJhbmdlcywg
c2Nyb2xsU25hcFBvcnQud2lkdGgoKSk7Ci0KICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9s
bFNuYXAsIHN0cmVhbSA8PCAiID0+IENvbXB1dGVkIGhvcml6b250YWwgc2Nyb2xsIHNuYXAgb2Zm
c2V0czogIiA8PCBob3Jpem9udGFsU25hcE9mZnNldHMpOwotICAgICAgICBMT0dfV0lUSF9TVFJF
QU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICIgPT4gQ29tcHV0ZWQgaG9yaXpvbnRhbCBzY3JvbGwg
c25hcCBvZmZzZXQgcmFuZ2VzOiAiIDw8IGhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzKTsKICAg
ICB9CiAKICAgICBWZWN0b3I8U25hcE9mZnNldDxMYXlvdXRVbml0Pj4gdmVydGljYWxTbmFwT2Zm
c2V0cyA9IGNvcHlUb1ZlY3Rvcih2ZXJ0aWNhbFNuYXBPZmZzZXRzTWFwLnZhbHVlcygpKTsKLSAg
ICBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+IHZlcnRpY2FsU25hcE9mZnNl
dFJhbmdlczsKICAgICBpZiAoIXZlcnRpY2FsU25hcE9mZnNldHMuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIHN0ZDo6c29ydCh2ZXJ0aWNhbFNuYXBPZmZzZXRzLmJlZ2luKCksIHZlcnRpY2FsU25hcE9m
ZnNldHMuZW5kKCksIGNvbXBhcmVTbmFwT2Zmc2V0cyk7Ci0gICAgICAgIGlmIChzY3JvbGxTbmFw
VHlwZS5zdHJpY3RuZXNzID09IFNjcm9sbFNuYXBTdHJpY3RuZXNzOjpQcm94aW1pdHkpCi0gICAg
ICAgICAgICBjb21wdXRlQXhpc1Byb3hpbWl0eVNuYXBPZmZzZXRSYW5nZXModmVydGljYWxTbmFw
T2Zmc2V0cywgdmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzLCBzY3JvbGxTbmFwUG9ydC5oZWlnaHQo
KSk7Ci0KICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiID0+
IENvbXB1dGVkIHZlcnRpY2FsIHNjcm9sbCBzbmFwIG9mZnNldHM6ICIgPDwgdmVydGljYWxTbmFw
T2Zmc2V0cyk7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwg
IiA9PiBDb21wdXRlZCB2ZXJ0aWNhbCBzY3JvbGwgc25hcCBvZmZzZXQgcmFuZ2VzOiAiIDw8IHZl
cnRpY2FsU25hcE9mZnNldFJhbmdlcyk7CiAgICAgfQogCiAgICAgc2Nyb2xsYWJsZUFyZWEuc2V0
U2Nyb2xsU25hcE9mZnNldEluZm8oeworICAgICAgICBzY3JvbGxTbmFwVHlwZS5zdHJpY3RuZXNz
LAogICAgICAgICBob3Jpem9udGFsU25hcE9mZnNldHMsCiAgICAgICAgIHZlcnRpY2FsU25hcE9m
ZnNldHMsCi0gICAgICAgIGhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzLAotICAgICAgICB2ZXJ0
aWNhbFNuYXBPZmZzZXRSYW5nZXMKKyAgICAgICAgc25hcEFyZWFzCiAgICAgfSk7CiB9CiAKQEAg
LTM0OCw1NyArMzA3LDY0IEBAIHN0YXRpYyBMYXlvdXRVbml0IGNvbnZlcnRPZmZzZXRVbml0KGZs
b2F0IGlucHV0LCBmbG9hdCAvKiBzY2FsZUZhY3RvciAqLykKICAgICByZXR1cm4gTGF5b3V0VW5p
dChpbnB1dCk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBJbnB1dFR5cGUsIHR5cGVuYW1lIE91
dHB1dFR5cGU+Ci1zdGF0aWMgU2Nyb2xsU25hcE9mZnNldHNJbmZvPE91dHB1dFR5cGU+IGNvbnZl
cnRPZmZzZXRJbmZvKGNvbnN0IFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxJbnB1dFR5cGU+JiBpbnB1
dCwgZmxvYXQgc2NhbGVGYWN0b3IgPSAwLjApCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSW5wdXRUeXBl
LCB0eXBlbmFtZSBJbnB1dFJlY3RUeXBlLCB0eXBlbmFtZSBPdXRwdXRUeXBlLCB0eXBlbmFtZSBP
dXRwdXRSZWN0VHlwZT4KK3N0YXRpYyBTY3JvbGxTbmFwT2Zmc2V0c0luZm88T3V0cHV0VHlwZSwg
T3V0cHV0UmVjdFR5cGU+IGNvbnZlcnRPZmZzZXRJbmZvKGNvbnN0IFNjcm9sbFNuYXBPZmZzZXRz
SW5mbzxJbnB1dFR5cGUsIElucHV0UmVjdFR5cGU+JiBpbnB1dCwgZmxvYXQgc2NhbGVGYWN0b3Ig
PSAwLjApCiB7CiAgICAgYXV0byBjb252ZXJ0T2Zmc2V0cyA9IFtzY2FsZUZhY3Rvcl0oY29uc3Qg
VmVjdG9yPFNuYXBPZmZzZXQ8SW5wdXRUeXBlPj4mIGlucHV0KQogICAgIHsKICAgICAgICAgVmVj
dG9yPFNuYXBPZmZzZXQ8T3V0cHV0VHlwZT4+IG91dHB1dDsKICAgICAgICAgb3V0cHV0LnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoaW5wdXQuc2l6ZSgpKTsKICAgICAgICAgZm9yIChhdXRvJiBvZmZz
ZXQgOiBpbnB1dCkKLSAgICAgICAgICAgIG91dHB1dC51bmNoZWNrZWRBcHBlbmQoeyBjb252ZXJ0
T2Zmc2V0VW5pdChvZmZzZXQub2Zmc2V0LCBzY2FsZUZhY3RvciksIG9mZnNldC5zdG9wIH0pOwor
ICAgICAgICAgICAgb3V0cHV0LnVuY2hlY2tlZEFwcGVuZCh7IGNvbnZlcnRPZmZzZXRVbml0KG9m
ZnNldC5vZmZzZXQsIHNjYWxlRmFjdG9yKSwgb2Zmc2V0LnN0b3AsIG9mZnNldC5zbmFwQXJlYUlu
ZGV4IH0pOwogICAgICAgICByZXR1cm4gb3V0cHV0OwogICAgIH07CiAKLSAgICBhdXRvIGNvbnZl
cnRPZmZzZXRSYW5nZXMgPSBbc2NhbGVGYWN0b3JdKGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRS
YW5nZTxJbnB1dFR5cGU+PiYgaW5wdXQpCisgICAgYXV0byBjb252ZXJ0UmVjdHMgPSBbc2NhbGVG
YWN0b3JdKGNvbnN0IFZlY3RvcjxJbnB1dFJlY3RUeXBlPiYgaW5wdXQpCiAgICAgewotICAgICAg
ICBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8T3V0cHV0VHlwZT4+IG91dHB1dDsKKyAgICAgICAg
VmVjdG9yPE91dHB1dFJlY3RUeXBlPiBvdXRwdXQ7CiAgICAgICAgIG91dHB1dC5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KGlucHV0LnNpemUoKSk7Ci0gICAgICAgIGZvciAoYXV0byYgcmFuZ2UgOiBp
bnB1dCkKLSAgICAgICAgICAgIG91dHB1dC51bmNoZWNrZWRBcHBlbmQoeyBjb252ZXJ0T2Zmc2V0
VW5pdChyYW5nZS5zdGFydCwgc2NhbGVGYWN0b3IpLCBjb252ZXJ0T2Zmc2V0VW5pdChyYW5nZS5l
bmQsIHNjYWxlRmFjdG9yKSB9KTsKKyAgICAgICAgZm9yIChhdXRvJiByZWN0IDogaW5wdXQpIHsK
KyAgICAgICAgICAgIE91dHB1dFJlY3RUeXBlIG91dHB1dFJlY3QoCisgICAgICAgICAgICAgICAg
Y29udmVydE9mZnNldFVuaXQocmVjdC54KCksIHNjYWxlRmFjdG9yKSwgY29udmVydE9mZnNldFVu
aXQocmVjdC55KCksIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgICAgICAgICBjb252ZXJ0T2Zmc2V0
VW5pdChyZWN0LndpZHRoKCksIHNjYWxlRmFjdG9yKSwgY29udmVydE9mZnNldFVuaXQocmVjdC5o
ZWlnaHQoKSwgc2NhbGVGYWN0b3IpKTsKKyAgICAgICAgICAgIG91dHB1dC51bmNoZWNrZWRBcHBl
bmQob3V0cHV0UmVjdCk7CisgICAgICAgIH0KKwogICAgICAgICByZXR1cm4gb3V0cHV0OwogICAg
IH07CiAKICAgICByZXR1cm4geworICAgICAgICBpbnB1dC5zdHJpY3RuZXNzLAogICAgICAgICBj
b252ZXJ0T2Zmc2V0cyhpbnB1dC5ob3Jpem9udGFsU25hcE9mZnNldHMpLAogICAgICAgICBjb252
ZXJ0T2Zmc2V0cyhpbnB1dC52ZXJ0aWNhbFNuYXBPZmZzZXRzKSwKLSAgICAgICAgY29udmVydE9m
ZnNldFJhbmdlcyhpbnB1dC5ob3Jpem9udGFsU25hcE9mZnNldFJhbmdlcyksCi0gICAgICAgIGNv
bnZlcnRPZmZzZXRSYW5nZXMoaW5wdXQudmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzKQorICAgICAg
ICBjb252ZXJ0UmVjdHMoaW5wdXQuc25hcEFyZWFzKSwKICAgICB9OwogfQogCiB0ZW1wbGF0ZSA8
PiB0ZW1wbGF0ZSA8PgogTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvIEZsb2F0U2Nyb2xsU25h
cE9mZnNldHNJbmZvOjpjb252ZXJ0VW5pdHMoZmxvYXQgLyogdW51c2VkU2NhbGVGYWN0b3IgKi8p
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvbnZlcnRPZmZzZXRJbmZvPGZsb2F0LCBMYXlvdXRVbml0
PigqdGhpcyk7CisgICAgcmV0dXJuIGNvbnZlcnRPZmZzZXRJbmZvPGZsb2F0LCBGbG9hdFJlY3Qs
IExheW91dFVuaXQsIExheW91dFJlY3Q+KCp0aGlzKTsKKwogfQogCiB0ZW1wbGF0ZSA8PiB0ZW1w
bGF0ZSA8PgogRmxvYXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8gTGF5b3V0U2Nyb2xsU25hcE9mZnNl
dHNJbmZvOjpjb252ZXJ0VW5pdHMoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGNvbnZlcnRPZmZzZXRJbmZvPExheW91dFVuaXQsIGZsb2F0PigqdGhpcywgZGV2
aWNlU2NhbGVGYWN0b3IpOworICAgIHJldHVybiBjb252ZXJ0T2Zmc2V0SW5mbzxMYXlvdXRVbml0
LCBMYXlvdXRSZWN0LCBmbG9hdCwgRmxvYXRSZWN0PigqdGhpcywgZGV2aWNlU2NhbGVGYWN0b3Ip
OworCiB9CiAKLXRlbXBsYXRlIDw+Ci1zdGQ6OnBhaXI8TGF5b3V0VW5pdCwgdW5zaWduZWQ+IExh
eW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6Y2xvc2VzdFNuYXBPZmZzZXQoU2Nyb2xsRXZlbnRB
eGlzIGF4aXMsIExheW91dFVuaXQgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIGZsb2F0IHZlbG9j
aXR5LCBPcHRpb25hbDxMYXlvdXRVbml0PiBvcmlnaW5hbFBvc2l0aW9uRm9yRGlyZWN0aW9uYWxT
bmFwcGluZykgY29uc3QKK3RlbXBsYXRlIDw+IHRlbXBsYXRlIDw+CitzdGQ6OnBhaXI8TGF5b3V0
VW5pdCwgdW5zaWduZWQ+IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6Y2xvc2VzdFNuYXBP
ZmZzZXQoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGNvbnN0IExheW91dFNpemUmIHZpZXdwb3J0U2l6
ZSwgTGF5b3V0VW5pdCBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCwgZmxvYXQgdmVsb2NpdHksIE9w
dGlvbmFsPExheW91dFVuaXQ+IG9yaWdpbmFsUG9zaXRpb25Gb3JEaXJlY3Rpb25hbFNuYXBwaW5n
KSBjb25zdAogewotICAgIHJldHVybiBjbG9zZXN0U25hcE9mZnNldFdpdGhPZmZzZXRzQW5kUmFu
Z2VzKG9mZnNldHNGb3JBeGlzKGF4aXMpLCBvZmZzZXRSYW5nZXNGb3JBeGlzKGF4aXMpLCBzY3Jv
bGxEZXN0aW5hdGlvbk9mZnNldCwgdmVsb2NpdHksIG9yaWdpbmFsUG9zaXRpb25Gb3JEaXJlY3Rp
b25hbFNuYXBwaW5nKTsKKyAgICByZXR1cm4gY2xvc2VzdFNuYXBPZmZzZXRXaXRoSW5mb0FuZEF4
aXMoKnRoaXMsIGF4aXMsIHZpZXdwb3J0U2l6ZSwgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIHZl
bG9jaXR5LCBvcmlnaW5hbFBvc2l0aW9uRm9yRGlyZWN0aW9uYWxTbmFwcGluZyk7CiB9CiAKLXRl
bXBsYXRlIDw+Ci1zdGQ6OnBhaXI8ZmxvYXQsIHVuc2lnbmVkPiBGbG9hdFNjcm9sbFNuYXBPZmZz
ZXRzSW5mbzo6Y2xvc2VzdFNuYXBPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGZsb2F0IHNj
cm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBmbG9hdCB2ZWxvY2l0eSwgT3B0aW9uYWw8ZmxvYXQ+IG9y
aWdpbmFsUG9zaXRpb25Gb3JEaXJlY3Rpb25hbFNuYXBwaW5nKSBjb25zdAordGVtcGxhdGUgPD4g
dGVtcGxhdGU8Pgorc3RkOjpwYWlyPGZsb2F0LCB1bnNpZ25lZD4gRmxvYXRTY3JvbGxTbmFwT2Zm
c2V0c0luZm86OmNsb3Nlc3RTbmFwT2Zmc2V0KFNjcm9sbEV2ZW50QXhpcyBheGlzLCBjb25zdCBG
bG9hdFNpemUmIHZpZXdwb3J0U2l6ZSwgZmxvYXQgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIGZs
b2F0IHZlbG9jaXR5LCBPcHRpb25hbDxmbG9hdD4gb3JpZ2luYWxQb3NpdGlvbkZvckRpcmVjdGlv
bmFsU25hcHBpbmcpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNsb3Nlc3RTbmFwT2Zmc2V0V2l0aE9m
ZnNldHNBbmRSYW5nZXMob2Zmc2V0c0ZvckF4aXMoYXhpcyksIG9mZnNldFJhbmdlc0ZvckF4aXMo
YXhpcyksIHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCB2ZWxvY2l0eSwgb3JpZ2luYWxQb3NpdGlv
bkZvckRpcmVjdGlvbmFsU25hcHBpbmcpOworICAgIHJldHVybiBjbG9zZXN0U25hcE9mZnNldFdp
dGhJbmZvQW5kQXhpcygqdGhpcywgYXhpcywgdmlld3BvcnRTaXplLCBzY3JvbGxEZXN0aW5hdGlv
bk9mZnNldCwgdmVsb2NpdHksIG9yaWdpbmFsUG9zaXRpb25Gb3JEaXJlY3Rpb25hbFNuYXBwaW5n
KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsU25hcE9mZnNldHNJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxTbmFwT2Zmc2V0c0luZm8uaAppbmRleCA1OGUyNDE1MzE4MWRhMzUxNTIyMzQxZTM2ZjcxNDkz
OWQ4NTcyZGQ2Li5kMTYwYzk1YmM0M2ZmOTgxYzBhNDdiZjM2MDNjNDAwNmRjZWUzMWNjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0lu
Zm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0
c0luZm8uaApAQCAtMjcsNiArMjcsOCBAQAogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkK
IAorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNs
dWRlICJMYXlvdXRVbml0LmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKICNpbmNsdWRlICJT
dHlsZVNjcm9sbFNuYXBQb2ludHMuaCIKQEAgLTM1LDcgKzM3LDYgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBMYXlvdXRSZWN0OwogY2xhc3MgU2Nyb2xsYWJsZUFyZWE7CiBjbGFz
cyBSZW5kZXJCb3g7CiBjbGFzcyBSZW5kZXJTdHlsZTsKQEAgLTQ0LDMwICs0NSwyMCBAQCB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KIHN0cnVjdCBTbmFwT2Zmc2V0IHsKICAgICBUIG9mZnNldDsKICAg
ICBTY3JvbGxTbmFwU3RvcCBzdG9wOworICAgIHNpemVfdCBzbmFwQXJlYUluZGV4OwogfTsKIAot
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgU2Nyb2xsT2Zmc2V0UmFuZ2UgewotICAgIFQg
c3RhcnQ7Ci0gICAgVCBlbmQ7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBsYXRl
IDx0eXBlbmFtZSBVbml0VHlwZSwgdHlwZW5hbWUgUmVjdFR5cGU+CiBzdHJ1Y3QgU2Nyb2xsU25h
cE9mZnNldHNJbmZvIHsKICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7Ci0gICAg
VmVjdG9yPFNuYXBPZmZzZXQ8VD4+IGhvcml6b250YWxTbmFwT2Zmc2V0czsKLSAgICBWZWN0b3I8
U25hcE9mZnNldDxUPj4gdmVydGljYWxTbmFwT2Zmc2V0czsKKyAgICBTY3JvbGxTbmFwU3RyaWN0
bmVzcyBzdHJpY3RuZXNzOworICAgIFZlY3RvcjxTbmFwT2Zmc2V0PFVuaXRUeXBlPj4gaG9yaXpv
bnRhbFNuYXBPZmZzZXRzOworICAgIFZlY3RvcjxTbmFwT2Zmc2V0PFVuaXRUeXBlPj4gdmVydGlj
YWxTbmFwT2Zmc2V0czsKKyAgICBWZWN0b3I8UmVjdFR5cGU+IHNuYXBBcmVhczsKIAotICAgIC8v
IFNuYXAgb2Zmc2V0IHJhbmdlcyByZXByZXNlbnQgbm9uLWVtcHR5IHJhbmdlcyBvZiBzY3JvbGwg
b2Zmc2V0cyBpbiB3aGljaCBzY3JvbGxpbmcgbWF5IHJlc3QgYWZ0ZXIgc2Nyb2xsIHNuYXBwaW5n
LgotICAgIC8vIFRoZXNlIGFyZSB1c2VkIGluIHR3byBjYXNlczogKDEpIGZvciBwcm94aW1pdHkg
c2Nyb2xsIHNuYXBwaW5nLCB3aGVyZSBwb3J0aW9ucyBvZiBhcmVhcyBiZXR3ZWVuIGFkamFjZW50
IHNuYXAgb2Zmc2V0cwotICAgIC8vIG1heSBlbWl0IHNuYXAgb2Zmc2V0IHJhbmdlcywgYW5kICgy
KSBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgc25hcCBhcmVhIGlzIGxhcmdlciB0aGFuIHRoZSBzbmFw
IHBvcnQsIGluIHdoaWNoIGNhc2UgYXJlYXMKLSAgICAvLyB3aGVyZSB0aGUgc25hcCBwb3J0IGZp
dHMgd2l0aGluIHRoZSBzbmFwIGFyZWEgYXJlIGNvbnNpZGVyZWQgdG8gYmUgdmFsaWQgc25hcCBw
b3NpdGlvbnMuCi0gICAgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPFQ+PiBob3Jpem9udGFsU25h
cE9mZnNldFJhbmdlczsKLSAgICBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8VD4+IHZlcnRpY2Fs
U25hcE9mZnNldFJhbmdlczsKLQotICAgIGJvb2wgaXNFcXVhbChjb25zdCBTY3JvbGxTbmFwT2Zm
c2V0c0luZm88VD4mIG90aGVyKSBjb25zdAorICAgIGJvb2wgaXNFcXVhbChjb25zdCBTY3JvbGxT
bmFwT2Zmc2V0c0luZm88VW5pdFR5cGUsIFJlY3RUeXBlPiYgb3RoZXIpIGNvbnN0CiAgICAgewot
ICAgICAgICByZXR1cm4gaG9yaXpvbnRhbFNuYXBPZmZzZXRzID09IG90aGVyLmhvcml6b250YWxT
bmFwT2Zmc2V0cyAmJiB2ZXJ0aWNhbFNuYXBPZmZzZXRzID09IG90aGVyLnZlcnRpY2FsU25hcE9m
ZnNldHMgJiYgaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMgPT0gb3RoZXIuaG9yaXpvbnRhbFNu
YXBPZmZzZXRSYW5nZXMgJiYgdmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzID09IG90aGVyLnZlcnRp
Y2FsU25hcE9mZnNldFJhbmdlczsKKyAgICAgICAgcmV0dXJuIHN0cmljdG5lc3MgPT0gb3RoZXIu
c3RyaWN0bmVzcyAmJiBob3Jpem9udGFsU25hcE9mZnNldHMgPT0gb3RoZXIuaG9yaXpvbnRhbFNu
YXBPZmZzZXRzICYmIHZlcnRpY2FsU25hcE9mZnNldHMgPT0gb3RoZXIudmVydGljYWxTbmFwT2Zm
c2V0cyAmJiBzbmFwQXJlYXMgPT0gb3RoZXIuc25hcEFyZWFzOwogICAgIH0KIAogICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0CkBAIC03NSwzMiArNjYsMzAgQEAgc3RydWN0IFNjcm9sbFNuYXBPZmZz
ZXRzSW5mbyB7CiAgICAgICAgIHJldHVybiBob3Jpem9udGFsU25hcE9mZnNldHMuaXNFbXB0eSgp
ICYmIHZlcnRpY2FsU25hcE9mZnNldHMuaXNFbXB0eSgpOwogICAgIH0KIAotICAgIFZlY3RvcjxT
bmFwT2Zmc2V0PFQ+PiBvZmZzZXRzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcykgY29uc3QK
KyAgICBWZWN0b3I8U25hcE9mZnNldDxVbml0VHlwZT4+IG9mZnNldHNGb3JBeGlzKFNjcm9sbEV2
ZW50QXhpcyBheGlzKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGF4aXMgPT0gU2Nyb2xs
RXZlbnRBeGlzOjpWZXJ0aWNhbCA/IHZlcnRpY2FsU25hcE9mZnNldHMgOiBob3Jpem9udGFsU25h
cE9mZnNldHM7CiAgICAgfQogCi0gICAgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPFQ+PiBvZmZz
ZXRSYW5nZXNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCA/IHZlcnRpY2FsU25h
cE9mZnNldFJhbmdlcyA6IGhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzOwotICAgIH0KLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE91dHB1dFR5cGU+IFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxPdXRw
dXRUeXBlPiBjb252ZXJ0VW5pdHMoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSAwLjApIGNvbnN0
OwotICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxULCB1bnNpZ25lZD4gY2xvc2VzdFNuYXBP
ZmZzZXQoU2Nyb2xsRXZlbnRBeGlzLCBUIHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBmbG9hdCB2
ZWxvY2l0eSwgT3B0aW9uYWw8VD4gb3JpZ2luYWxQb3NpdGlvbkZvckRpcmVjdGlvbmFsU25hcHBp
bmcgPSBXVEY6Om51bGxvcHQpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE91dHB1dFR5
cGU+IE91dHB1dFR5cGUgY29udmVydFVuaXRzKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gMC4w
KSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTaXplVHlwZT4KKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGQ6OnBhaXI8VW5pdFR5cGUsIHVuc2lnbmVkPiBjbG9zZXN0U25hcE9mZnNldChTY3Jv
bGxFdmVudEF4aXMsIGNvbnN0IFNpemVUeXBlJiB2aWV3cG9ydFNpemUsIFVuaXRUeXBlIHNjcm9s
bERlc3RpbmF0aW9uT2Zmc2V0LCBmbG9hdCB2ZWxvY2l0eSwgT3B0aW9uYWw8VW5pdFR5cGU+IG9y
aWdpbmFsUG9zaXRpb25Gb3JEaXJlY3Rpb25hbFNuYXBwaW5nID0gV1RGOjpudWxsb3B0KSBjb25z
dDsKIH07CiAKLXVzaW5nIExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbyA9IFNjcm9sbFNuYXBP
ZmZzZXRzSW5mbzxMYXlvdXRVbml0PjsKLXVzaW5nIEZsb2F0U2Nyb2xsU25hcE9mZnNldHNJbmZv
ID0gU2Nyb2xsU25hcE9mZnNldHNJbmZvPGZsb2F0PjsKK3VzaW5nIExheW91dFNjcm9sbFNuYXBP
ZmZzZXRzSW5mbyA9IFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxMYXlvdXRVbml0LCBMYXlvdXRSZWN0
PjsKK3VzaW5nIEZsb2F0U2Nyb2xsU25hcE9mZnNldHNJbmZvID0gU2Nyb2xsU25hcE9mZnNldHNJ
bmZvPGZsb2F0LCBGbG9hdFJlY3Q+OwogCiB0ZW1wbGF0ZSA8PiB0ZW1wbGF0ZSA8PgogTGF5b3V0
U2Nyb2xsU25hcE9mZnNldHNJbmZvIEZsb2F0U2Nyb2xsU25hcE9mZnNldHNJbmZvOjpjb252ZXJ0
VW5pdHMoZmxvYXQgLyogdW51c2VkU2NhbGVGYWN0b3IgKi8pIGNvbnN0OwotdGVtcGxhdGUgPD4K
LVdFQkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxmbG9hdCwgdW5zaWduZWQ+IEZsb2F0U2Nyb2xsU25h
cE9mZnNldHNJbmZvOjpjbG9zZXN0U25hcE9mZnNldChTY3JvbGxFdmVudEF4aXMsIGZsb2F0IHNj
cm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBmbG9hdCB2ZWxvY2l0eSwgT3B0aW9uYWw8ZmxvYXQ+IG9y
aWdpbmFsUG9zaXRpb25Gb3JEaXJlY3Rpb25hbFNuYXBwaW5nKSBjb25zdDsKK3RlbXBsYXRlIDw+
IHRlbXBsYXRlIDw+CitXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8ZmxvYXQsIHVuc2lnbmVkPiBG
bG9hdFNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6Y2xvc2VzdFNuYXBPZmZzZXQoU2Nyb2xsRXZlbnRB
eGlzLCBjb25zdCBGbG9hdFNpemUmIHZpZXdwb3J0U2l6ZSwgZmxvYXQgc2Nyb2xsRGVzdGluYXRp
b25PZmZzZXQsIGZsb2F0IHZlbG9jaXR5LCBPcHRpb25hbDxmbG9hdD4gb3JpZ2luYWxQb3NpdGlv
bkZvckRpcmVjdGlvbmFsU25hcHBpbmcpIGNvbnN0OworCiAKIHRlbXBsYXRlIDw+IHRlbXBsYXRl
IDw+CiBGbG9hdFNjcm9sbFNuYXBPZmZzZXRzSW5mbyBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0lu
Zm86OmNvbnZlcnRVbml0cyhmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikgY29uc3Q7Ci10ZW1wbGF0
ZSA8PgotV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPExheW91dFVuaXQsIHVuc2lnbmVkPiBMYXlv
dXRTY3JvbGxTbmFwT2Zmc2V0c0luZm86OmNsb3Nlc3RTbmFwT2Zmc2V0KFNjcm9sbEV2ZW50QXhp
cywgTGF5b3V0VW5pdCBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCwgZmxvYXQgdmVsb2NpdHksIE9w
dGlvbmFsPExheW91dFVuaXQ+IG9yaWdpbmFsUG9zaXRpb25Gb3JEaXJlY3Rpb25hbFNuYXBwaW5n
KSBjb25zdDsKK3RlbXBsYXRlIDw+IHRlbXBsYXRlIDw+CitXRUJDT1JFX0VYUE9SVCBzdGQ6OnBh
aXI8TGF5b3V0VW5pdCwgdW5zaWduZWQ+IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6Y2xv
c2VzdFNuYXBPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzLCBjb25zdCBMYXlvdXRTaXplJiB2aWV3cG9y
dFNpemUsIExheW91dFVuaXQgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIGZsb2F0IHZlbG9jaXR5
LCBPcHRpb25hbDxMYXlvdXRVbml0PiBvcmlnaW5hbFBvc2l0aW9uRm9yRGlyZWN0aW9uYWxTbmFw
cGluZykgY29uc3Q7CisKIAogY29uc3QgdW5zaWduZWQgaW52YWxpZFNuYXBPZmZzZXRJbmRleCA9
IFVJTlRfTUFYOwogCkBAIC0xMTcsMTMgKzEwNiw2IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBX
VEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiB0cywgU25hcE9mZnNl
CiAgICAgcmV0dXJuIHRzOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2Nyb2xsT2Zmc2V0UmFuZ2U8VD4mIHJh
bmdlKQotewotICAgIHRzIDw8ICJzdGFydDogIiA8PCByYW5nZS5zdGFydCA8PCAiIGVuZDogIiA8
PCByYW5nZS5lbmQ7Ci0gICAgcmV0dXJuIHRzOwotfQotCiB9OyAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gRU5BQkxFKENTU19TQ1JPTExfU05BUCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURl
bGVnYXRlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW0KaW5kZXggYTViNDhjMjAzNDE1YWI3YjA5
Y2U5YzNmYTk5YzE1ZWE2Mzc0MGU0NS4uYzA0ZTUxYjM0OTRmN2MzNzEwMjgyMDI5YjVjZjkxYzM2
NGI3MGRkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Nj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVN
YWMubW0KQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURl
bGVnYXRlTWFjOjp1cGRhdGVGcm9tU3RhdGVOb2RlKGNvbnN0IFNjcm9sbGluZ1MKIAogI2lmIEVO
QUJMRShDU1NfU0NST0xMX1NOQVApCiAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFu
Z2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpQcm9wZXJ0eTo6U25hcE9mZnNldHNJbmZv
KSkKLSAgICAgICAgbV9zY3JvbGxDb250cm9sbGVyLnVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoc2Ny
b2xsaW5nU3RhdGVOb2RlLnNuYXBPZmZzZXRzSW5mbygpLmNvbnZlcnRVbml0czxMYXlvdXRVbml0
PigpKTsKKyAgICAgICAgbV9zY3JvbGxDb250cm9sbGVyLnVwZGF0ZVNjcm9sbFNuYXBQb2ludHMo
c2Nyb2xsaW5nU3RhdGVOb2RlLnNuYXBPZmZzZXRzSW5mbygpLmNvbnZlcnRVbml0czxMYXlvdXRT
Y3JvbGxTbmFwT2Zmc2V0c0luZm8+KCkpOwogCiAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5o
YXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpQcm9wZXJ0eTo6Q3VycmVudEhv
cml6b250YWxTbmFwT2Zmc2V0SW5kZXgpKQogICAgICAgICBtX3Njcm9sbENvbnRyb2xsZXIuc2V0
QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWws
IHNjcm9sbGluZ1N0YXRlTm9kZS5jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbmljb3NpYS9TY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTmljb3NpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9uaWNvc2lhL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVO
aWNvc2lhLmNwcAppbmRleCA3OTM4YjFhOTA0ODM3OTA0NjlkODE2MjNjZTBmYzRjZjkyMTI2Nzkw
Li45MjU4ZTdlYWE0ZWRkNDdjNWU0MGNlMzZhMDJlZWQ4NjFhM2E0ODE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9uaWNvc2lhL1Njcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlRGVsZWdhdGVOaWNvc2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9uaWNvc2lhL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVOaWNvc2lhLmNw
cApAQCAtMTczLDggKzE3Myw4IEBAIFdoZWVsRXZlbnRIYW5kbGluZ1Jlc3VsdCBTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTmljb3NpYTo6aGFuZGxlV2hlZWxFCiAgICAgICAgIEZs
b2F0UG9pbnQgbmV3RmxvYXRPZmZzZXQgPSBzY3JvbGxpbmdOb2RlKCkuY3VycmVudFNjcm9sbE9m
ZnNldCgpICsgRmxvYXRTaXplKGRlbHRhWCwgZGVsdGFZKTsKICAgICAgICAgYXV0byBuZXdPZmZz
ZXQgPSBMYXlvdXRQb2ludChuZXdGbG9hdE9mZnNldC54KCkgLyBzY2FsZSwgbmV3RmxvYXRPZmZz
ZXQueSgpIC8gc2NhbGUpOwogCi0gICAgICAgIGF1dG8gb2Zmc2V0WCA9IHNjcm9sbGluZ05vZGUo
KS5zbmFwT2Zmc2V0c0luZm8oKS5jbG9zZXN0U25hcE9mZnNldChTY3JvbGxFdmVudEF4aXM6Okhv
cml6b250YWwsIG5ld09mZnNldC54KCksIGRlbHRhWCwgb3JpZ2luYWxPZmZzZXQueCgpKS5maXJz
dDsKLSAgICAgICAgYXV0byBvZmZzZXRZID0gc2Nyb2xsaW5nTm9kZSgpLnNuYXBPZmZzZXRzSW5m
bygpLmNsb3Nlc3RTbmFwT2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIG5ld09mZnNl
dC55KCksIGRlbHRhWSwgb3JpZ2luYWxPZmZzZXQueSgpKS5maXJzdDsKKyAgICAgICAgYXV0byBv
ZmZzZXRYID0gc2Nyb2xsaW5nTm9kZSgpLnNuYXBPZmZzZXRzSW5mbygpLmNsb3Nlc3RTbmFwT2Zm
c2V0KFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgc2Nyb2xsYWJsZUFyZWFTaXplKCksIG5l
d09mZnNldC54KCksIGRlbHRhWCwgb3JpZ2luYWxPZmZzZXQueCgpKS5maXJzdDsKKyAgICAgICAg
YXV0byBvZmZzZXRZID0gc2Nyb2xsaW5nTm9kZSgpLnNuYXBPZmZzZXRzSW5mbygpLmNsb3Nlc3RT
bmFwT2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIHNjcm9sbGFibGVBcmVhU2l6ZSgp
LCBuZXdPZmZzZXQueSgpLCBkZWx0YVksIG9yaWdpbmFsT2Zmc2V0LnkoKSkuZmlyc3Q7CiAKICAg
ICAgICAgZGVsdGFYID0gKG9mZnNldFggLSBvcmlnaW5hbE9mZnNldC54KCkpICogc2NhbGU7CiAg
ICAgICAgIGRlbHRhWSA9IChvZmZzZXRZIC0gb3JpZ2luYWxPZmZzZXQueSgpKSAqIHNjYWxlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNwcAppbmRleCBmYjM0
NWQ3YTY4ZmM5ZDE2ZGRlZjVkNDg5ZTdmZTc2MTg3OGNlNDRlLi5mMGFkZTczNTQ3OTNhMDU5M2Vk
Yjg1M2FiNGI0MmQ3OWQ2ZGIxMWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxDb250cm9sbGVyLmNwcApAQCAtMTE2LDcgKzExNiw4IEBAIHZvaWQgU2Nyb2xsQ29udHJvbGxl
cjo6c2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZvckF4aXNBbmRPZmZzZXQoU2Nyb2xsRXZlbnRB
eGlzCiAKICAgICBMYXlvdXRVbml0IGNsYW1wZWRPZmZzZXQgPSBzdGQ6Om1pbihzdGQ6Om1heChM
YXlvdXRVbml0KG9mZnNldCAvIHNjYWxlRmFjdG9yKSwgc25hcE9mZnNldHMuZmlyc3QoKS5vZmZz
ZXQpLCBzbmFwT2Zmc2V0cy5sYXN0KCkub2Zmc2V0KTsKIAotICAgIHVuc2lnbmVkIGFjdGl2ZUlu
ZGV4ID0gc25hcFN0YXRlLnNuYXBPZmZzZXRJbmZvKCkuY2xvc2VzdFNuYXBPZmZzZXQoYXhpcywg
Y2xhbXBlZE9mZnNldCwgMCkuc2Vjb25kOworICAgIExheW91dFNpemUgdmlld3BvcnRTaXplKG1f
Y2xpZW50LnZpZXdwb3J0U2l6ZSgpLndpZHRoKCksIG1fY2xpZW50LnZpZXdwb3J0U2l6ZSgpLmhl
aWdodCgpKTsKKyAgICB1bnNpZ25lZCBhY3RpdmVJbmRleCA9IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0
SW5mbygpLmNsb3Nlc3RTbmFwT2Zmc2V0KGF4aXMsIHZpZXdwb3J0U2l6ZSwgY2xhbXBlZE9mZnNl
dCwgMCkuc2Vjb25kOwogICAgIGlmIChhY3RpdmVJbmRleCA9PSBhY3RpdmVTY3JvbGxTbmFwSW5k
ZXhGb3JBeGlzKGF4aXMpKQogICAgICAgICByZXR1cm47CiAKQEAgLTEzNyw3ICsxMzgsOCBAQCBm
bG9hdCBTY3JvbGxDb250cm9sbGVyOjphZGp1c3RTY3JvbGxEZXN0aW5hdGlvbihTY3JvbGxFdmVu
dEF4aXMgYXhpcywgZmxvYXQgZGVzdAogICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IG9yaWdpbmFs
T2Zmc2V0SW5MYXlvdXRVbml0czsKICAgICBpZiAob3JpZ2luYWxPZmZzZXQuaGFzVmFsdWUoKSkK
ICAgICAgICAgb3JpZ2luYWxPZmZzZXRJbkxheW91dFVuaXRzID0gTGF5b3V0VW5pdCgqb3JpZ2lu
YWxPZmZzZXQgLyBtX2NsaWVudC5wYWdlU2NhbGVGYWN0b3IoKSk7Ci0gICAgTGF5b3V0VW5pdCBv
ZmZzZXQgPSBzbmFwU3RhdGUuc25hcE9mZnNldEluZm8oKS5jbG9zZXN0U25hcE9mZnNldChheGlz
LCBMYXlvdXRVbml0KGRlc3RpbmF0aW9uT2Zmc2V0IC8gbV9jbGllbnQucGFnZVNjYWxlRmFjdG9y
KCkpLCB2ZWxvY2l0eSwgb3JpZ2luYWxPZmZzZXRJbkxheW91dFVuaXRzKS5maXJzdDsKKyAgICBM
YXlvdXRTaXplIHZpZXdwb3J0U2l6ZShtX2NsaWVudC52aWV3cG9ydFNpemUoKS53aWR0aCgpLCBt
X2NsaWVudC52aWV3cG9ydFNpemUoKS5oZWlnaHQoKSk7CisgICAgTGF5b3V0VW5pdCBvZmZzZXQg
PSBzbmFwU3RhdGUuc25hcE9mZnNldEluZm8oKS5jbG9zZXN0U25hcE9mZnNldChheGlzLCB2aWV3
cG9ydFNpemUsIExheW91dFVuaXQoZGVzdGluYXRpb25PZmZzZXQgLyBtX2NsaWVudC5wYWdlU2Nh
bGVGYWN0b3IoKSksIHZlbG9jaXR5LCBvcmlnaW5hbE9mZnNldEluTGF5b3V0VW5pdHMpLmZpcnN0
OwogICAgIHJldHVybiBvZmZzZXQgKiBtX2NsaWVudC5wYWdlU2NhbGVGYWN0b3IoKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsU25hcEFuaW1hdG9yU3Rh
dGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUu
Y3BwCmluZGV4IGRhOTc5MmQwNzU4ZmQxYzU3NzJmN2Y2M2QxMjY5MjdlYzAwNjU3MmUuLjQxODUy
MTM0YWU5N2RmNzgwNThlNmE2OGJiZTI3NTI4NWE4OGE4YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5jcHAKQEAgLTUxLDggKzUx
LDggQEAgdm9pZCBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZTo6c2V0dXBBbmltYXRpb25Gb3JTdGF0
ZShTY3JvbGxTbmFwU3RhdGUgc3RhdGUsIGNvbnMKIAogICAgIG1fbW9tZW50dW1DYWxjdWxhdG9y
ID0gU2Nyb2xsaW5nTW9tZW50dW1DYWxjdWxhdG9yOjpjcmVhdGUodmlld3BvcnRTaXplLCBjb250
ZW50U2l6ZSwgaW5pdGlhbE9mZnNldCwgaW5pdGlhbERlbHRhLCBpbml0aWFsVmVsb2NpdHkpOwog
ICAgIGF1dG8gcHJlZGljdGVkU2Nyb2xsVGFyZ2V0ID0gbV9tb21lbnR1bUNhbGN1bGF0b3ItPnBy
ZWRpY3RlZERlc3RpbmF0aW9uT2Zmc2V0KCk7Ci0gICAgZmxvYXQgdGFyZ2V0T2Zmc2V0WCA9IHRh
cmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgY29u
dGVudFNpemUud2lkdGgoKSAtIHZpZXdwb3J0U2l6ZS53aWR0aCgpLCBpbml0aWFsT2Zmc2V0Lngo
KSwgcHJlZGljdGVkU2Nyb2xsVGFyZ2V0LndpZHRoKCksIHBhZ2VTY2FsZSwgaW5pdGlhbERlbHRh
LndpZHRoKCksIG1fYWN0aXZlU25hcEluZGV4WCk7Ci0gICAgZmxvYXQgdGFyZ2V0T2Zmc2V0WSA9
IHRhcmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIGNv
bnRlbnRTaXplLmhlaWdodCgpIC0gdmlld3BvcnRTaXplLmhlaWdodCgpLCBpbml0aWFsT2Zmc2V0
LnkoKSwgcHJlZGljdGVkU2Nyb2xsVGFyZ2V0LmhlaWdodCgpLCBwYWdlU2NhbGUsIGluaXRpYWxE
ZWx0YS5oZWlnaHQoKSwgbV9hY3RpdmVTbmFwSW5kZXhZKTsKKyAgICBmbG9hdCB0YXJnZXRPZmZz
ZXRYID0gdGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9u
dGFsLCB2aWV3cG9ydFNpemUsIGNvbnRlbnRTaXplLndpZHRoKCkgLSB2aWV3cG9ydFNpemUud2lk
dGgoKSwgaW5pdGlhbE9mZnNldC54KCksIHByZWRpY3RlZFNjcm9sbFRhcmdldC53aWR0aCgpLCBw
YWdlU2NhbGUsIGluaXRpYWxEZWx0YS53aWR0aCgpLCBtX2FjdGl2ZVNuYXBJbmRleFgpOworICAg
IGZsb2F0IHRhcmdldE9mZnNldFkgPSB0YXJnZXRPZmZzZXRGb3JTdGFydE9mZnNldChTY3JvbGxF
dmVudEF4aXM6OlZlcnRpY2FsLCB2aWV3cG9ydFNpemUsIGNvbnRlbnRTaXplLmhlaWdodCgpIC0g
dmlld3BvcnRTaXplLmhlaWdodCgpLCBpbml0aWFsT2Zmc2V0LnkoKSwgcHJlZGljdGVkU2Nyb2xs
VGFyZ2V0LmhlaWdodCgpLCBwYWdlU2NhbGUsIGluaXRpYWxEZWx0YS5oZWlnaHQoKSwgbV9hY3Rp
dmVTbmFwSW5kZXhZKTsKICAgICBtX21vbWVudHVtQ2FsY3VsYXRvci0+c2V0UmV0YXJnZXRlZFNj
cm9sbE9mZnNldCh7IHRhcmdldE9mZnNldFgsIHRhcmdldE9mZnNldFkgfSk7CiAgICAgbV9zdGFy
dFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKICAgICBtX2N1cnJlbnRTdGF0ZSA9IHN0YXRl
OwpAQCAtOTEsNyArOTEsNyBAQCBGbG9hdFBvaW50IFNjcm9sbFNuYXBBbmltYXRvclN0YXRlOjpj
dXJyZW50QW5pbWF0ZWRTY3JvbGxPZmZzZXQoYm9vbCYgaXNBbmltYXRpbwogICAgIHJldHVybiBt
X21vbWVudHVtQ2FsY3VsYXRvci0+c2Nyb2xsT2Zmc2V0QWZ0ZXJFbGFwc2VkVGltZShlbGFwc2Vk
VGltZSk7CiB9CiAKLWZsb2F0IFNjcm9sbFNuYXBBbmltYXRvclN0YXRlOjp0YXJnZXRPZmZzZXRG
b3JTdGFydE9mZnNldChTY3JvbGxFdmVudEF4aXMgYXhpcywgZmxvYXQgbWF4U2Nyb2xsT2Zmc2V0
LCBmbG9hdCBzdGFydE9mZnNldCwgZmxvYXQgcHJlZGljdGVkT2Zmc2V0LCBmbG9hdCBwYWdlU2Nh
bGUsIGZsb2F0IGluaXRpYWxEZWx0YSwgdW5zaWduZWQmIG91dEFjdGl2ZVNuYXBJbmRleCkgY29u
c3QKK2Zsb2F0IFNjcm9sbFNuYXBBbmltYXRvclN0YXRlOjp0YXJnZXRPZmZzZXRGb3JTdGFydE9m
ZnNldChTY3JvbGxFdmVudEF4aXMgYXhpcywgY29uc3QgRmxvYXRTaXplJiB2aWV3cG9ydFNpemUs
IGZsb2F0IG1heFNjcm9sbE9mZnNldCwgZmxvYXQgc3RhcnRPZmZzZXQsIGZsb2F0IHByZWRpY3Rl
ZE9mZnNldCwgZmxvYXQgcGFnZVNjYWxlLCBmbG9hdCBpbml0aWFsRGVsdGEsIHVuc2lnbmVkJiBv
dXRBY3RpdmVTbmFwSW5kZXgpIGNvbnN0CiB7CiAgICAgY29uc3QgYXV0byYgc25hcE9mZnNldHMg
PSBtX3NuYXBPZmZzZXRzSW5mby5vZmZzZXRzRm9yQXhpcyhheGlzKTsKICAgICBpZiAoc25hcE9m
ZnNldHMuaXNFbXB0eSgpKSB7CkBAIC05OSw3ICs5OSw3IEBAIGZsb2F0IFNjcm9sbFNuYXBBbmlt
YXRvclN0YXRlOjp0YXJnZXRPZmZzZXRGb3JTdGFydE9mZnNldChTY3JvbGxFdmVudEF4aXMgYXhp
cywKICAgICAgICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KHByZWRpY3RlZE9mZnNldCwgMCwgbWF4
U2Nyb2xsT2Zmc2V0KTsKICAgICB9CiAKLSAgICBmbG9hdCB0YXJnZXRPZmZzZXQgPSBtX3NuYXBP
ZmZzZXRzSW5mby5jbG9zZXN0U25hcE9mZnNldChheGlzLCBMYXlvdXRVbml0KHByZWRpY3RlZE9m
ZnNldCAvIHBhZ2VTY2FsZSksIGluaXRpYWxEZWx0YSwgTGF5b3V0VW5pdChzdGFydE9mZnNldCAv
IHBhZ2VTY2FsZSkpLmZpcnN0OworICAgIGZsb2F0IHRhcmdldE9mZnNldCA9IG1fc25hcE9mZnNl
dHNJbmZvLmNsb3Nlc3RTbmFwT2Zmc2V0KGF4aXMsIExheW91dFNpemUgeyB2aWV3cG9ydFNpemUg
fSwgTGF5b3V0VW5pdChwcmVkaWN0ZWRPZmZzZXQgLyBwYWdlU2NhbGUpLCBpbml0aWFsRGVsdGEs
IExheW91dFVuaXQoc3RhcnRPZmZzZXQgLyBwYWdlU2NhbGUpKS5maXJzdDsKICAgICBmbG9hdCBt
aW5pbXVtVGFyZ2V0T2Zmc2V0ID0gc3RkOjptYXg8ZmxvYXQ+KDAsIHNuYXBPZmZzZXRzLmZpcnN0
KCkub2Zmc2V0KTsKICAgICBmbG9hdCBtYXhpbXVtVGFyZ2V0T2Zmc2V0ID0gc3RkOjptaW48Zmxv
YXQ+KG1heFNjcm9sbE9mZnNldCwgc25hcE9mZnNldHMubGFzdCgpLm9mZnNldCk7CiAgICAgdGFy
Z2V0T2Zmc2V0ID0gY2xhbXBUbzxmbG9hdD4odGFyZ2V0T2Zmc2V0LCBtaW5pbXVtVGFyZ2V0T2Zm
c2V0LCBtYXhpbXVtVGFyZ2V0T2Zmc2V0KTsKQEAgLTExMSwxMCArMTExLDYgQEAgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2Nyb2xsU25hcEFuaW1hdG9yU3Rh
dGUmIHN0YXRlKQogICAgIHRzIDw8ICJTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZSI7CiAgICAgdHMu
ZHVtcFByb3BlcnR5KCJzbmFwIG9mZnNldHMgeCIsIHN0YXRlLnNuYXBPZmZzZXRzRm9yQXhpcyhT
Y3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInNuYXAg
b2Zmc2V0cyB5Iiwgc3RhdGUuc25hcE9mZnNldHNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVy
dGljYWwpKTsKLSAgICBpZiAoIXN0YXRlLnNuYXBPZmZzZXRSYW5nZXNGb3JBeGlzKFNjcm9sbEV2
ZW50QXhpczo6SG9yaXpvbnRhbCkuaXNFbXB0eSgpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHko
InNuYXAgb2Zmc2V0cyByYW5nZXMgeCIsIHN0YXRlLnNuYXBPZmZzZXRSYW5nZXNGb3JBeGlzKFNj
cm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkpOwotICAgIGlmICghc3RhdGUuc25hcE9mZnNldFJh
bmdlc0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCkuaXNFbXB0eSgpKQotICAgICAg
ICB0cy5kdW1wUHJvcGVydHkoInNuYXAgb2Zmc2V0cyByYW5nZXMgeSIsIHN0YXRlLnNuYXBPZmZz
ZXRSYW5nZXNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpKTsKIAogICAgIHRzLmR1
bXBQcm9wZXJ0eSgiYWN0aXZlIHNuYXAgaW5kZXggeCIsIHN0YXRlLmFjdGl2ZVNuYXBJbmRleEZv
ckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5
KCJhY3RpdmUgc25hcCBpbmRleCB5Iiwgc3RhdGUuYWN0aXZlU25hcEluZGV4Rm9yQXhpcyhTY3Jv
bGxFdmVudEF4aXM6OlZlcnRpY2FsKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaAppbmRleCAxZTU1YjM0YzMxOThlZWJjYTQ0NzY1Nzgz
Mjk1MDViZjI1NGMxNzVlLi42YjZkMjI3NWNmYTM0NWI5YTJiNmE2OWVhODE4OWQ2NjVkNjE0Y2Rj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxTbmFwQW5pbWF0b3JT
dGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0
YXRlLmgKQEAgLTU3LDI1ICs1Nyw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGF4aXMgPT0g
U2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsID8gbV9zbmFwT2Zmc2V0c0luZm8uaG9yaXpvbnRh
bFNuYXBPZmZzZXRzIDogbV9zbmFwT2Zmc2V0c0luZm8udmVydGljYWxTbmFwT2Zmc2V0czsKICAg
ICB9CiAKLSAgICBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+JiBz
bmFwT2Zmc2V0UmFuZ2VzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcykgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IG1f
c25hcE9mZnNldHNJbmZvLmhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzIDogbV9zbmFwT2Zmc2V0
c0luZm8udmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzOwotICAgIH0KLQogICAgIGNvbnN0IExheW91
dFNjcm9sbFNuYXBPZmZzZXRzSW5mbyYgc25hcE9mZnNldEluZm8oKSBjb25zdCB7IHJldHVybiBt
X3NuYXBPZmZzZXRzSW5mbzsgfQogICAgIHZvaWQgc2V0U25hcE9mZnNldEluZm8oY29uc3QgTGF5
b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvJiBuZXdJbmZvKSB7IG1fc25hcE9mZnNldHNJbmZvID0g
bmV3SW5mbzsgfQogCi0gICAgdm9pZCBzZXRTbmFwT2Zmc2V0c0FuZFBvc2l0aW9uUmFuZ2VzRm9y
QXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcywgY29uc3QgVmVjdG9yPFNuYXBPZmZzZXQ8TGF5b3V0
VW5pdD4+JiBzbmFwT2Zmc2V0cywgY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91
dFVuaXQ+PiYgc25hcE9mZnNldFJhbmdlcykKLSAgICB7Ci0gICAgICAgIGlmIChheGlzID09IFNj
cm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkgewotICAgICAgICAgICAgbV9zbmFwT2Zmc2V0c0lu
Zm8uaG9yaXpvbnRhbFNuYXBPZmZzZXRzID0gc25hcE9mZnNldHM7Ci0gICAgICAgICAgICBtX3Nu
YXBPZmZzZXRzSW5mby5ob3Jpem9udGFsU25hcE9mZnNldFJhbmdlcyA9IHNuYXBPZmZzZXRSYW5n
ZXM7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX3NuYXBPZmZzZXRzSW5mby52ZXJ0
aWNhbFNuYXBPZmZzZXRzID0gc25hcE9mZnNldHM7Ci0gICAgICAgICAgICBtX3NuYXBPZmZzZXRz
SW5mby52ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMgPSBzbmFwT2Zmc2V0UmFuZ2VzOwotICAgICAg
ICB9Ci0gICAgfQotCiAgICAgU2Nyb2xsU25hcFN0YXRlIGN1cnJlbnRTdGF0ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY3VycmVudFN0YXRlOyB9CiAKICAgICB1bnNpZ25lZCBhY3RpdmVTbmFwSW5kZXhG
b3JBeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzKSBjb25zdApAQCAtMTAwLDcgKzg0LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgdHJhbnNpdGlvblRvRGVzdGluYXRpb25SZWFjaGVkU3RhdGUoKTsKIAog
cHJpdmF0ZToKLSAgICBmbG9hdCB0YXJnZXRPZmZzZXRGb3JTdGFydE9mZnNldChTY3JvbGxFdmVu
dEF4aXMsIGZsb2F0IG1heFNjcm9sbE9mZnNldCwgZmxvYXQgc3RhcnRPZmZzZXQsIGZsb2F0IHBy
ZWRpY3RlZE9mZnNldCwgZmxvYXQgcGFnZVNjYWxlLCBmbG9hdCBpbml0aWFsRGVsdGEsIHVuc2ln
bmVkJiBvdXRBY3RpdmVTbmFwSW5kZXgpIGNvbnN0OworICAgIGZsb2F0IHRhcmdldE9mZnNldEZv
clN0YXJ0T2Zmc2V0KFNjcm9sbEV2ZW50QXhpcywgY29uc3QgRmxvYXRTaXplJiB2aWV3cG9ydFNp
emUsIGZsb2F0IG1heFNjcm9sbE9mZnNldCwgZmxvYXQgc3RhcnRPZmZzZXQsIGZsb2F0IHByZWRp
Y3RlZE9mZnNldCwgZmxvYXQgcGFnZVNjYWxlLCBmbG9hdCBpbml0aWFsRGVsdGEsIHVuc2lnbmVk
JiBvdXRBY3RpdmVTbmFwSW5kZXgpIGNvbnN0OwogICAgIHZvaWQgdGVhcmRvd25BbmltYXRpb25G
b3JTdGF0ZShTY3JvbGxTbmFwU3RhdGUpOwogICAgIHZvaWQgc2V0dXBBbmltYXRpb25Gb3JTdGF0
ZShTY3JvbGxTbmFwU3RhdGUsIGNvbnN0IEZsb2F0U2l6ZSYgY29udGVudFNpemUsIGNvbnN0IEZs
b2F0U2l6ZSYgdmlld3BvcnRTaXplLCBmbG9hdCBwYWdlU2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQm
IGluaXRpYWxPZmZzZXQsIGNvbnN0IEZsb2F0U2l6ZSYgaW5pdGlhbFZlbG9jaXR5LCBjb25zdCBG
bG9hdFNpemUmIGluaXRpYWxEZWx0YSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9u
LmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxp
bmdDb29yZGluYXRvclRyYW5zYWN0aW9uLmNwcAppbmRleCBlZjU2ZTNhOGNlYmQzNzY5NTc1ODky
YmIxNDljY2JiY2EwNDdmM2UyLi4xYzgyMWVlYjdjZGJiMTRlMDNhYTRkNDg0NWJhNDEyNTg5ZWQ2
ODFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVt
b3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNh
Y3Rpb24uY3BwCkBAIC01MzIsNiArNTMyLDcgQEAgdm9pZCBBcmd1bWVudENvZGVyPFNuYXBPZmZz
ZXQ8ZmxvYXQ+Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNuYXBPZmZzZXQKIHsK
ICAgICBlbmNvZGVyIDw8IG9mZnNldC5vZmZzZXQ7CiAgICAgZW5jb2RlciA8PCBvZmZzZXQuc3Rv
cDsKKyAgICBlbmNvZGVyIDw8IG9mZnNldC5zbmFwQXJlYUluZGV4OwogfQogCiBib29sIEFyZ3Vt
ZW50Q29kZXI8U25hcE9mZnNldDxmbG9hdD4+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU25h
cE9mZnNldDxmbG9hdD4mIG9mZnNldCkKQEAgLTU0MCw2ICs1NDEsOCBAQCBib29sIEFyZ3VtZW50
Q29kZXI8U25hcE9mZnNldDxmbG9hdD4+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU25hcE9m
ZnNldDxmbG9hdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShvZmZzZXQuc3RvcCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKG9mZnNldC5zbmFwQXJlYUluZGV4KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC01NDgsOCArNTUxLDcgQEAgdm9pZCBBcmd1bWVudENvZGVy
PEZsb2F0U2Nyb2xsU25hcE9mZnNldHNJbmZvPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IEYKIHsKICAgICBlbmNvZGVyIDw8IGluZm8uaG9yaXpvbnRhbFNuYXBPZmZzZXRzOwogICAg
IGVuY29kZXIgPDwgaW5mby52ZXJ0aWNhbFNuYXBPZmZzZXRzOwotICAgIGVuY29kZXIgPDwgaW5m
by5ob3Jpem9udGFsU25hcE9mZnNldFJhbmdlczsKLSAgICBlbmNvZGVyIDw8IGluZm8udmVydGlj
YWxTbmFwT2Zmc2V0UmFuZ2VzOworICAgIGVuY29kZXIgPDwgaW5mby5zbmFwQXJlYXM7CiB9CiAK
IGJvb2wgQXJndW1lbnRDb2RlcjxGbG9hdFNjcm9sbFNuYXBPZmZzZXRzSW5mbz46OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyLCBGbG9hdFNjcm9sbFNuYXBPZmZzZXRzSW5mbyYgaW5mbykKQEAgLTU1
OCw5ICs1NjAsNyBAQCBib29sIEFyZ3VtZW50Q29kZXI8RmxvYXRTY3JvbGxTbmFwT2Zmc2V0c0lu
Zm8+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgRmxvYXRTYwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbmZvLnZlcnRpY2FsU25hcE9mZnNldHMpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbmZvLmhvcml6
b250YWxTbmFwT2Zmc2V0UmFuZ2VzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoaW5mby52ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMpKQorICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoaW5mby5zbmFwQXJlYXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmNwcAppbmRleCAyNTVhMmNiYzZjNzdjZWYxZTYwNzBlYTQyMGY2YmRlOTBiMjQw
YTcxLi4yYzYxMjAxYWJjOWM2MWU5OTcwZWVkNDc2OGJjNDI5OTYyZTk4MGU1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKQEAgLTI4MzMsMzIg
KzI4MzMsNiBAQCBib29sIEFyZ3VtZW50Q29kZXI8U2VydmljZVdvcmtlck9yQ2xpZW50SWRlbnRp
Zmllcj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTZQogCiAjZW5kaWYKIAotI2lmIEVOQUJM
RShDU1NfU0NST0xMX1NOQVApCi0KLXZvaWQgQXJndW1lbnRDb2RlcjxTY3JvbGxPZmZzZXRSYW5n
ZTxmbG9hdD4+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU2Nyb2xsT2Zmc2V0UmFu
Z2U8ZmxvYXQ+JiByYW5nZSkKLXsKLSAgICBlbmNvZGVyIDw8IHJhbmdlLnN0YXJ0OwotICAgIGVu
Y29kZXIgPDwgcmFuZ2UuZW5kOwotfQotCi1hdXRvIEFyZ3VtZW50Q29kZXI8U2Nyb2xsT2Zmc2V0
UmFuZ2U8ZmxvYXQ+Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpIC0+IE9wdGlvbmFsPFdlYkNv
cmU6OlNjcm9sbE9mZnNldFJhbmdlPGZsb2F0Pj4KLXsKLSAgICBXZWJDb3JlOjpTY3JvbGxPZmZz
ZXRSYW5nZTxmbG9hdD4gcmFuZ2U7Ci0gICAgZmxvYXQgc3RhcnQ7Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZShzdGFydCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBmbG9h
dCBlbmQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShlbmQpKQotICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotCi0gICAgcmFuZ2Uuc3RhcnQgPSBzdGFydDsKLSAgICByYW5nZS5lbmQgPSBl
bmQ7Ci0gICAgcmV0dXJuIHJhbmdlOwotfQotCi0jZW5kaWYKLQogdm9pZCBBcmd1bWVudENvZGVy
PE1lZGlhU2VsZWN0aW9uT3B0aW9uPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IE1l
ZGlhU2VsZWN0aW9uT3B0aW9uJiBvcHRpb24pCiB7CiAgICAgZW5jb2RlciA8PCBvcHRpb24uZGlz
cGxheU5hbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1l
bnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5o
CmluZGV4IGJiMzI0OTA3OTM0ZjMwZmE0Yjc3ZjMyYmM3M2JhMzJmNDk4NDI4ZjMuLjUzMjU2YjEw
NmMzNzRiMDU0ZjVlMTdiNjMyNmIzMjEwMjdhYjM3ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCkBAIC03NDIsMTUgKzc0Miw2IEBAIHRlbXBsYXRl
PD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6U2VydmljZVdvcmtlck9yQ2xpZW50SWRl
bnRpZmllcj4gewogCiAjZW5kaWYKIAotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0KLXRl
bXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6U2Nyb2xsT2Zmc2V0UmFuZ2U8
ZmxvYXQ+PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3Jl
OjpTY3JvbGxPZmZzZXRSYW5nZTxmbG9hdD4mKTsKLSAgICBzdGF0aWMgT3B0aW9uYWw8V2ViQ29y
ZTo6U2Nyb2xsT2Zmc2V0UmFuZ2U8ZmxvYXQ+PiBkZWNvZGUoRGVjb2RlciYpOwotfTsKLQotI2Vu
ZGlmCi0KIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6TWVkaWFTZWxl
Y3Rpb25PcHRpb24+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdl
YkNvcmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uJik7CiAgICAgc3RhdGljIE9wdGlvbmFsPFdlYkNv
cmU6Ok1lZGlhU2VsZWN0aW9uT3B0aW9uPiBkZWNvZGUoRGVjb2RlciYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9SZW1vdGVTY3JvbGxp
bmdDb29yZGluYXRvclByb3h5SU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3Rl
TGF5ZXJUcmVlL2lvcy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5SU9TLm1tCmluZGV4
IDNhYmEzMGQ1N2VjZjg1M2MwNzlmOWM5YmIzOTAzZTg2ZjFmMjQ0N2EuLjM3Zjk4ZjdlZjAxM2Mw
MGQ5OTI4OTY4YzkwM2VmODZkZWFjODNkMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94
eUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9z
L1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW0KQEAgLTI0MSw3ICsyNDEsNyBA
QCBmbG9hdCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpjbG9zZXN0U25hcE9mZnNl
dEZvck1haW5GcmFtZVNjcm9sbGluZyhTYwogCiAgICAgZmxvYXQgc2NhbGVkU2Nyb2xsRGVzdGlu
YXRpb24gPSBzY3JvbGxEZXN0aW5hdGlvbiAvIG1fd2ViUGFnZVByb3h5LmRpc3BsYXllZENvbnRl
bnRTY2FsZSgpOwogICAgIGZsb2F0IHJhd0Nsb3Nlc3RTbmFwT2Zmc2V0OwotICAgIHN0ZDo6dGll
KHJhd0Nsb3Nlc3RTbmFwT2Zmc2V0LCBjdXJyZW50SW5kZXgpID0gc25hcE9mZnNldHNJbmZvLmNs
b3Nlc3RTbmFwT2Zmc2V0KGF4aXMsIHNjYWxlZFNjcm9sbERlc3RpbmF0aW9uLCB2ZWxvY2l0eSk7
CisgICAgc3RkOjp0aWUocmF3Q2xvc2VzdFNuYXBPZmZzZXQsIGN1cnJlbnRJbmRleCkgPSBzbmFw
T2Zmc2V0c0luZm8uY2xvc2VzdFNuYXBPZmZzZXQoYXhpcywgcm9vdFNjcm9sbGluZ05vZGUtPmxh
eW91dFZpZXdwb3J0KCkuc2l6ZSgpLCBzY2FsZWRTY3JvbGxEZXN0aW5hdGlvbiwgdmVsb2NpdHkp
OwogICAgIHJldHVybiByYXdDbG9zZXN0U25hcE9mZnNldCAqIG1fd2ViUGFnZVByb3h5LmRpc3Bs
YXllZENvbnRlbnRTY2FsZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdh
dGVJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Nj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MubW0KaW5kZXggODgwYzAzMTk1Zjg5
YzRiZDEzZGQ2YTY0NjUyM2YxZGY4NGM5NTY0ZS4uOGZjNjYxNWY3NmYzYzlmYWQwMGY1OTRiMzRi
MTNkZDQ0YzkyM2NkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3Rl
TGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbQpAQCAtMTA2LDE2ICsxMDYsMTcgQEAgLSAo
dm9pZClzY3JvbGxWaWV3V2lsbEVuZERyYWdnaW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3
IHdpdGhWZWxvY2l0eTooQ0dQb2kKICAgICB1bnNpZ25lZCBvcmlnaW5hbEhvcml6b250YWxTbmFw
UG9zaXRpb24gPSBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1
cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoKTsKICAgICB1bnNpZ25lZCBvcmlnaW5hbFZl
cnRpY2FsU25hcFBvc2l0aW9uID0gX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGlu
Z05vZGUoKS5jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpOwogCisgICAgV2ViQ29yZTo6
RmxvYXRTaXplIHZpZXdwb3J0U2l6ZShzdGF0aWNfY2FzdDxmbG9hdD4oQ0dSZWN0R2V0V2lkdGgo
W3Njcm9sbFZpZXcgYm91bmRzXSkpLCBzdGF0aWNfY2FzdDxmbG9hdD4oQ0dSZWN0R2V0SGVpZ2h0
KFtzY3JvbGxWaWV3IGJvdW5kc10pKSk7CiAgICAgY29uc3QgYXV0byYgc25hcE9mZnNldHNJbmZv
ID0gX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5zbmFwT2Zmc2V0
c0luZm8oKTsKICAgICBpZiAoIXNuYXBPZmZzZXRzSW5mby5ob3Jpem9udGFsU25hcE9mZnNldHMu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1dG8gW3BvdGVudGlhbFNuYXBQb3NpdGlvbiwgaW5kZXhd
ID0gc25hcE9mZnNldHNJbmZvLmNsb3Nlc3RTbmFwT2Zmc2V0KFdlYkNvcmU6OlNjcm9sbEV2ZW50
QXhpczo6SG9yaXpvbnRhbCwgaG9yaXpvbnRhbFRhcmdldCwgdmVsb2NpdHkueCk7CisgICAgICAg
IGF1dG8gW3BvdGVudGlhbFNuYXBQb3NpdGlvbiwgaW5kZXhdID0gc25hcE9mZnNldHNJbmZvLmNs
b3Nlc3RTbmFwT2Zmc2V0KFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgdmll
d3BvcnRTaXplLCBob3Jpem9udGFsVGFyZ2V0LCB2ZWxvY2l0eS54KTsKICAgICAgICAgX3Njcm9s
bGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5zZXRDdXJyZW50SG9yaXpvbnRh
bFNuYXBQb2ludEluZGV4KGluZGV4KTsKICAgICAgICAgaWYgKGhvcml6b250YWxUYXJnZXQgPj0g
MCAmJiBob3Jpem9udGFsVGFyZ2V0IDw9IHNjcm9sbFZpZXcuY29udGVudFNpemUud2lkdGgpCiAg
ICAgICAgICAgICB0YXJnZXRDb250ZW50T2Zmc2V0LT54ID0gcG90ZW50aWFsU25hcFBvc2l0aW9u
OwogICAgIH0KIAogICAgIGlmICghc25hcE9mZnNldHNJbmZvLnZlcnRpY2FsU25hcE9mZnNldHMu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1dG8gW3BvdGVudGlhbFNuYXBQb3NpdGlvbiwgaW5kZXhd
ID0gc25hcE9mZnNldHNJbmZvLmNsb3Nlc3RTbmFwT2Zmc2V0KFdlYkNvcmU6OlNjcm9sbEV2ZW50
QXhpczo6VmVydGljYWwsIHZlcnRpY2FsVGFyZ2V0LCB2ZWxvY2l0eS54KTsKKyAgICAgICAgYXV0
byBbcG90ZW50aWFsU25hcFBvc2l0aW9uLCBpbmRleF0gPSBzbmFwT2Zmc2V0c0luZm8uY2xvc2Vz
dFNuYXBPZmZzZXQoV2ViQ29yZTo6U2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgdmlld3BvcnRT
aXplLCB2ZXJ0aWNhbFRhcmdldCwgdmVsb2NpdHkueCk7CiAgICAgICAgIF9zY3JvbGxpbmdUcmVl
Tm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuc2V0Q3VycmVudFZlcnRpY2FsU25hcFBvaW50
SW5kZXgoaW5kZXgpOwogICAgICAgICBpZiAodmVydGljYWxUYXJnZXQgPj0gMCAmJiB2ZXJ0aWNh
bFRhcmdldCA8PSBzY3JvbGxWaWV3LmNvbnRlbnRTaXplLmhlaWdodCkKICAgICAgICAgICAgIHRh
cmdldENvbnRlbnRPZmZzZXQtPnkgPSBwb3RlbnRpYWxTbmFwUG9zaXRpb247Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427859</attachid>
            <date>2021-05-06 01:32:28 -0700</date>
            <delta_ts>2021-05-17 09:13:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224326-20210506103225.patch</filename>
            <type>text/plain</type>
            <size>49896</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3MDcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTQwZmQzYjdlMDVjZDE5
NGE3Y2NlODQ0ZDY5ODQ2Yjc2NDI3NWFlNi4uMGQxOTMyNzA0NTkxY2E5NGUyODlmMmU2MDVhYjBi
NzNlOGUwYjc1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDIxLTA1LTA2ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KKworICAgICAgICBbY3NzLXNjcm9s
bC1zbmFwXSBDb21wdXRlIHByb3hpbWl0eSBpbmZvcm1hdGlvbiB3aGlsZSBzbmFwcGluZworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0MzI2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgorCisgICAgICAgIEhhdmUgU2Nyb2xsU25h
cE9mZnNldHNJbmZvIGNhcnJ5IHNuYXAgYXJlYSByZWN0YW5nbGVzIGluc3RlYWQgb2Ygc2Nyb2xs
IG9mZnNldAorICAgICAgICByYW5nZXMuIFRoaXMgYWxsb3dzIHByb3hpbWl0eSBpbmZvcm1hdGlv
biB0byBiZSBoYW5kbGVkIGR1cmluZyBzbmFwIHBvaW50IHNlbGVjdGlvbi4KKyAgICAgICAgVGhl
IGdlb21ldHJ5IHdpbGwgYmUgdXNlZCBpbiBhIGZ1dHVyZSBwYXRjaCB0byBmb2xsb3cgc3BlYyBi
ZWhhdmlvciBmb3Igc25hcAorICAgICAgICBhcmVhcyB0aGF0IG92ZXJmbG93IHRoZSBzbmFwcG9y
dCBhbmQgd2hlbiBoYW5kbGluZyBtYXNvbnJ5IGxheW91dHMuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLiBUaGlzIGlzIGp1c3QgYSByZWZhY3Rvci4gSXQgc2hvdWxkIG5vdCBjaGFuZ2UgYmVoYXZp
b3IgYXQgYWxsLgorCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29y
ZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRTdGF0ZVNjcm9sbGluZ05vZGVTbmFw
T2Zmc2V0c0FzRmxvYXQpOiBQYXNzIGluIHRoZSBuZXcgdGVtcGxhdGUgYXJndW1lbnQuCisgICAg
ICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmlzTmVhckVub3VnaFRvT2Zmc2V0Rm9yUHJveGltaXR5KTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpjbG9zZXN0U25hcE9mZnNldFdpdGhJbmZvQW5kQXhpcyk6IE1vZGlmaWVk
IHRvIHRha2UgaW4gdGhlIFNjcm9sbFNuYXBPZmZzZXRzSW5mbyBkYXRhCisgICAgICAgIHN0cnVj
dHVyZSBhbmQgYXhpcyBhbG9uZyB3aXRoIHRoZSB2aWV3cG9ydCBzaXplLiBUaGlzIGZ1bmN0aW9u
IG5vdyBleHBsaWNpdGx5IGRldGVybWluZXMgaWYgYQorICAgICAgICBzbmFwIHBvaW50IGlzIHRv
byBmYXIgYXdheSB0byBhZmZlY3Qgc2Nyb2xsaW5nIGR1ZSB0byBzY3JvbGwtc25hcCBwcm94aW1p
dHkuCisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVTbmFwT2Zmc2V0c0ZvclNjcm9sbGFibGVBcmVh
KTogQWRkIHNuYXAgYXJlYXMgYW5kIHNuYXAgYXJlYSBpbmRpY2VzIHRvIFNuYXBPZmZzZXQuCisg
ICAgICAgIChXZWJDb3JlOjpjb252ZXJ0T2Zmc2V0SW5mbyk6IEluc3RlYWQgb2YgY29udmVydGlu
ZyBzY3JvbGwgb2Zmc2V0IHJhbmdlcywgY29udmVydCB0aGUgc25hcAorICAgICAgICBhcmVhIHJl
Y3RhbmdsZXMuCisgICAgICAgIChXZWJDb3JlOjpGbG9hdFNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6
Y29udmVydFVuaXRzIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRTY3Jv
bGxTbmFwT2Zmc2V0c0luZm86OmNvbnZlcnRVbml0cyBjb25zdCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvOjpjbG9zZXN0U25hcE9mZnNldCBj
b25zdCk6IFVwZGF0ZWQgdG8gcmVmbGVjdCBuZXcKKyAgICAgICAgaW50ZXJuYWwgZnVuY3Rpb24u
CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6Y2xvc2VzdFNu
YXBPZmZzZXQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxT
bmFwT2Zmc2V0c0luZm8uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFNuYXBPZmZzZXRzSW5m
bzo6aXNFcXVhbCBjb25zdCk6IFVwZGF0ZSB0byByZWZsZWN0IG5ldyBtZW0gZXJzLgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsU25hcE9mZnNldHNJbmZvOjpvZmZzZXRzRm9yQXhpcyBjb25zdCk6
IENoYW5nZWQgdGVtcGxhdGUgcGFyYW1ldGVyIG5hbWUuCisgICAgICAgICogcGFnZS9zY3JvbGxp
bmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjp1cGRhdGVG
cm9tU3RhdGVOb2RlKTogOjpjb252ZXJ0VW5pdHMKKyAgICAgICAgdGFrZXMgYSBuZXcgdGVtcGxh
dGUgcGFyYW1ldGVyLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU5pY29zaWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU5pY29zaWE6OmhhbmRsZVdoZWVsRXZl
bnQpOiBQYXNzIGluIHZpZXdwb3J0IHNpemUuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQ29u
dHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpzZXROZWFy
ZXN0U2Nyb2xsU25hcEluZGV4Rm9yQXhpc0FuZE9mZnNldCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6YWRqdXN0U2Nyb2xsRGVzdGluYXRpb24pOiBEaXR0by4K
KyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZTo6c2V0dXBBbmltYXRpb25Gb3JTdGF0
ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OnRh
cmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpvcGVyYXRvcjw8KTogTm8gbG9uZ2VyIHByaW50IHNuYXAgb2Zmc2V0IHJhbmdlcy4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oOiBSZW1vdmUgcmVmZXJlbmNl
cyB0byBzbmFwIG9mZnNldCByYW5nZXMuCisKIDIwMjEtMDUtMDUgIE1lZ2FuIEdhcmRuZXIgIDxt
ZWdhbl9nYXJkbmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBBcHBIaWdobGlnaHQgc2Nyb2xscyBz
aG91bGQgYmUgc21vb3RoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBmOGMyY2NmYTU4YWY3MTBjYmY5MTdkNjU3Yzlh
MzJmYTYxNzgxYjQuLjdhNDYxYTYxZDhlZTE4MmY2OTUzOGQwYjdmOWYxYjY3NjFjMTZjNGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMjEtMDUtMDYgIE1hcnRpbiBSb2JpbnNvbiAgPG1y
b2JpbnNvbkB3ZWJraXQub3JnPgorCisgICAgICAgIFtjc3Mtc2Nyb2xsLXNuYXBdIENvbXB1dGUg
cHJveGltaXR5IGluZm9ybWF0aW9uIHdoaWxlIHNuYXBwaW5nCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjQzMjYKKworICAgICAgICBSZXZpZXdlZCBi
eSBTaW1vbiBGcmFzZXIuCisKKyAgICAgICAgKiBTaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoQXJndW1lbnRD
b2RlcjxTbmFwT2Zmc2V0PGZsb2F0Pj46OmVuY29kZSk6IEFkZCB0aGUgc25hcCBhcmVhIGluZGV4
IHRvIHRoZSBlbmNvZGVkIGFyZ3VtZW50cy4KKyAgICAgICAgKEFyZ3VtZW50Q29kZXI8U25hcE9m
ZnNldDxmbG9hdD4+OjpkZWNvZGUpOiBBZGQgdGhlIHNuYXAgYXJlYSBpbmRleCB0byB0aGUgZGVj
b2RlZCBhcmd1bWVudHMuCisgICAgICAgIChBcmd1bWVudENvZGVyPEZsb2F0U2Nyb2xsU25hcE9m
ZnNldHNJbmZvPjo6ZW5jb2RlKTogTm8gbG9uZ2VyIGVuY29kZSByYW5nZXMsIGJ1dCBlbmNvZGUg
c25hcCBhcmVhcy4KKyAgICAgICAgKEFyZ3VtZW50Q29kZXI8RmxvYXRTY3JvbGxTbmFwT2Zmc2V0
c0luZm8+OjpkZWNvZGUpOiBEaXR0byBmb3IgZGVjb2RlLgorICAgICAgICAqIFNoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuY3BwOiBSZW1vdmUgY29kZSBkZWFsaW5nIHdpdGggc2Nyb2xsIG9m
ZnNldCByYW5nZXMuCisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oOiBE
aXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9SZW1vdGVTY3Jv
bGxpbmdDb29yZGluYXRvclByb3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVTY3Jv
bGxpbmdDb29yZGluYXRvclByb3h5OjpjbG9zZXN0U25hcE9mZnNldEZvck1haW5GcmFtZVNjcm9s
bGluZyBjb25zdCk6IFBhc3MKKyAgICAgICAgaW4gdmlld3BvcnQgc2l6ZSB0byBjbG9zZXN0U25h
cE9mZnNldCB3aGljaCBpcyBuZWNlc3NhcnkgZm9yIGNhbGN1bGF0aW5nIHByb3hpbWl0eS4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlSU9TLm1tOgorICAgICAgICAoLVtXS1Njcm9sbGluZ05vZGVTY3JvbGxW
aWV3RGVsZWdhdGUgc2Nyb2xsVmlld1dpbGxFbmREcmFnZ2luZzp3aXRoVmVsb2NpdHk6dGFyZ2V0
Q29udGVudE9mZnNldDpdKTogRGl0dG8uCisKIDIwMjEtMDUtMDUgIEthdGUgQ2hlbmV5ICA8a2F0
aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIG5ldHdvcmsgd2Vic2l0
ZSBkYXRhIHdoZW4gYSB1c2VyIGNsZWFycyBhbiBpbmRpdmlkdWFsIGRvbWFpbgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yLmNwcAppbmRleCA4M2RjNzg2ZDJmMjBkOGE4Yjk1ODgwZGVmNGMyMTU1MzViNGZkZTI5
Li45NmYxZmIxZTVhMmJiNjQ1ZmYxMjczMzczMjhiN2RiNzAxZmNhNTk1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yLmNwcApAQCAtMTA1LDcgKzEwNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRTdGF0
ZVNjcm9sbGluZ05vZGVTbmFwT2Zmc2V0c0FzRmxvYXQoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpCiAg
ICAgfQogCiAgICAgLy8gRklYTUU6IEluY29ycG9yYXRlIGN1cnJlbnQgcGFnZSBzY2FsZSBmYWN0
b3IgaW4gc25hcHBpbmcgdG8gZGV2aWNlIHBpeGVsLiBQZXJoYXBzIHdlIHNob3VsZCBqdXN0IGNv
bnZlcnQgdG8gZmxvYXQgaGVyZSBhbmQgbGV0IFVJIHByb2Nlc3MgZG8gdGhlIHBpeGVsIHNuYXBw
aW5nPwotICAgIG5vZGUuc2V0U25hcE9mZnNldHNJbmZvKG9mZnNldEluZm8tPmNvbnZlcnRVbml0
czxmbG9hdD4oZGV2aWNlU2NhbGVGYWN0b3IpKTsKKyAgICBub2RlLnNldFNuYXBPZmZzZXRzSW5m
byhvZmZzZXRJbmZvLT5jb252ZXJ0VW5pdHM8RmxvYXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8+KGRl
dmljZVNjYWxlRmFjdG9yKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHAKaW5kZXggZmNkZDFj
YTM4ZjJhNWY0MjdkZjNmZWY1ZWFhNGVjYTcwMWIwZDNlMC4uMzdiNjYzN2I0ODYwZDk4Y2UzODA2
OGY1MWIzMWZlY2U2OGFjNmQxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwCkBAIC00Miw0MSArNDIsMTYgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5b3V0VHlwZT4K
LXN0YXRpYyB2b2lkIGluZGljZXNPZk5lYXJlc3RTbmFwT2Zmc2V0UmFuZ2VzKExheW91dFR5cGUg
b2Zmc2V0LCBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VHlwZT4+JiBzbmFw
T2Zmc2V0UmFuZ2VzLCB1bnNpZ25lZCYgbG93ZXJJbmRleCwgdW5zaWduZWQmIHVwcGVySW5kZXgp
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVW5pdFR5cGU+CitzdGF0aWMgYm9vbCBpc05lYXJFbm91Z2hU
b09mZnNldEZvclByb3hpbWl0eShTY3JvbGxTbmFwU3RyaWN0bmVzcyBzdHJpY3RuZXNzLCBVbml0
VHlwZSBzY3JvbGxEZXN0aW5hdGlvbiwgVW5pdFR5cGUgY2FuZGlkYXRlU25hcE9mZnNldCwgVW5p
dFR5cGUgdmlld3BvcnRMZW5ndGgpCiB7Ci0gICAgaWYgKHNuYXBPZmZzZXRSYW5nZXMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIGxvd2VySW5kZXggPSBpbnZhbGlkU25hcE9mZnNldEluZGV4OwotICAg
ICAgICB1cHBlckluZGV4ID0gaW52YWxpZFNuYXBPZmZzZXRJbmRleDsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGludCBsb3dlckluZGV4QXNJbnQgPSAtMTsKLSAgICBpbnQgdXBwZXJJ
bmRleEFzSW50ID0gc25hcE9mZnNldFJhbmdlcy5zaXplKCk7Ci0gICAgZG8gewotICAgICAgICBp
bnQgbWlkZGxlSW5kZXggPSAobG93ZXJJbmRleEFzSW50ICsgdXBwZXJJbmRleEFzSW50KSAvIDI7
Ci0gICAgICAgIGF1dG8mIHJhbmdlID0gc25hcE9mZnNldFJhbmdlc1ttaWRkbGVJbmRleF07Ci0g
ICAgICAgIGlmIChyYW5nZS5zdGFydCA8IG9mZnNldCAmJiBvZmZzZXQgPCByYW5nZS5lbmQpIHsK
LSAgICAgICAgICAgIGxvd2VySW5kZXhBc0ludCA9IG1pZGRsZUluZGV4OwotICAgICAgICAgICAg
dXBwZXJJbmRleEFzSW50ID0gbWlkZGxlSW5kZXg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChvZmZzZXQgPiByYW5nZS5lbmQpCi0gICAgICAgICAgICBsb3dl
ckluZGV4QXNJbnQgPSBtaWRkbGVJbmRleDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdXBw
ZXJJbmRleEFzSW50ID0gbWlkZGxlSW5kZXg7Ci0gICAgfSB3aGlsZSAobG93ZXJJbmRleEFzSW50
IDwgdXBwZXJJbmRleEFzSW50IC0gMSk7Ci0KLSAgICBpZiAob2Zmc2V0IDw9IHNuYXBPZmZzZXRS
YW5nZXMuZmlyc3QoKS5zdGFydCkKLSAgICAgICAgbG93ZXJJbmRleCA9IGludmFsaWRTbmFwT2Zm
c2V0SW5kZXg7Ci0gICAgZWxzZQotICAgICAgICBsb3dlckluZGV4ID0gbG93ZXJJbmRleEFzSW50
OworICAgIGlmIChzdHJpY3RuZXNzICE9IFNjcm9sbFNuYXBTdHJpY3RuZXNzOjpQcm94aW1pdHkp
CisgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKG9mZnNldCA+PSBzbmFwT2Zmc2V0UmFu
Z2VzLmxhc3QoKS5lbmQpCi0gICAgICAgIHVwcGVySW5kZXggPSBpbnZhbGlkU25hcE9mZnNldElu
ZGV4OwotICAgIGVsc2UKLSAgICAgICAgdXBwZXJJbmRleCA9IHVwcGVySW5kZXhBc0ludDsKKyAg
ICAvLyBUaGlzIGlzIGFuIGFyYml0cmFyeSBjaG9pY2UgZm9yIHdoYXQgaXQgbWVhbnMgdG8gYmUg
ImluIHByb3hpbWl0eSIgb2YgYSBzbmFwIG9mZnNldC4gV2Ugc2hvdWxkIHBsYXkgYXJvdW5kIHdp
dGgKKyAgICAvLyB0aGlzIGFuZCBzZWUgd2hhdCBmZWVscyBiZXN0LgorICAgIHN0YXRpYyBjb25z
dCBmbG9hdCByYXRpb09mU2Nyb2xsUG9ydEF4aXNMZW5ndGhUb0JlQ29uc2lkZXJlZEZvclByb3hp
bWl0eSA9IDAuMzsKKyAgICByZXR1cm4gc3RkOjphYnMoZmxvYXQge2NhbmRpZGF0ZVNuYXBPZmZz
ZXQgLSBzY3JvbGxEZXN0aW5hdGlvbn0pIDw9ICh2aWV3cG9ydExlbmd0aCAqIHJhdGlvT2ZTY3Jv
bGxQb3J0QXhpc0xlbmd0aFRvQmVDb25zaWRlcmVkRm9yUHJveGltaXR5KTsKIH0KIAogdGVtcGxh
dGUgPHR5cGVuYW1lIExheW91dFR5cGU+CkBAIC0xMzEsOSArMTA2LDEwIEBAIHN0YXRpYyBPcHRp
b25hbDx1bnNpZ25lZD4gZmluZEZpcnN0U25hcFN0b3BPZmZzZXRCZXR3ZWVuT3JpZ2luQW5kRGVz
dGluYXRpb24oY29uCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotdGVtcGxhdGUgPHR5
cGVuYW1lIExheW91dFR5cGU+Ci1zdGF0aWMgc3RkOjpwYWlyPExheW91dFR5cGUsIHVuc2lnbmVk
PiBjbG9zZXN0U25hcE9mZnNldFdpdGhPZmZzZXRzQW5kUmFuZ2VzKGNvbnN0IFZlY3RvcjxTbmFw
T2Zmc2V0PExheW91dFR5cGU+PiYgc25hcE9mZnNldHMsIGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZz
ZXRSYW5nZTxMYXlvdXRUeXBlPj4mIHNuYXBPZmZzZXRSYW5nZXMsIExheW91dFR5cGUgc2Nyb2xs
RGVzdGluYXRpb25PZmZzZXQsIGZsb2F0IHZlbG9jaXR5LCBPcHRpb25hbDxMYXlvdXRUeXBlPiBv
cmlnaW5hbE9mZnNldEZvckRpcmVjdGlvbmFsU25hcHBpbmcpCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
SW5mb1R5cGUsIHR5cGVuYW1lIFNpemVUeXBlLCB0eXBlbmFtZSBMYXlvdXRUeXBlPgorc3RhdGlj
IHN0ZDo6cGFpcjxMYXlvdXRUeXBlLCB1bnNpZ25lZD4gY2xvc2VzdFNuYXBPZmZzZXRXaXRoSW5m
b0FuZEF4aXMoY29uc3QgSW5mb1R5cGUmIGluZm8sIFNjcm9sbEV2ZW50QXhpcyBheGlzLCBjb25z
dCBTaXplVHlwZSYgdmlld3BvcnRTaXplLCBMYXlvdXRUeXBlIHNjcm9sbERlc3RpbmF0aW9uT2Zm
c2V0LCBmbG9hdCB2ZWxvY2l0eSwgT3B0aW9uYWw8TGF5b3V0VHlwZT4gb3JpZ2luYWxPZmZzZXRG
b3JEaXJlY3Rpb25hbFNuYXBwaW5nKQogeworICAgIGNvbnN0IGF1dG8mIHNuYXBPZmZzZXRzID0g
aW5mby5vZmZzZXRzRm9yQXhpcyhheGlzKTsKICAgICBpZiAoc25hcE9mZnNldHMuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQs
IGludmFsaWRTbmFwT2Zmc2V0SW5kZXgpOwogCkBAIC0xNDMsMTIgKzExOSw2IEBAIHN0YXRpYyBz
dGQ6OnBhaXI8TGF5b3V0VHlwZSwgdW5zaWduZWQ+IGNsb3Nlc3RTbmFwT2Zmc2V0V2l0aE9mZnNl
dHNBbmRSYW5nZXMoY29uCiAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc25hcE9m
ZnNldHNbKmZpcnN0U25hcFN0b3BPZmZzZXRJbmRleF0ub2Zmc2V0LCAqZmlyc3RTbmFwU3RvcE9m
ZnNldEluZGV4KTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBsb3dlclNuYXBPZmZzZXRSYW5nZUlu
ZGV4OwotICAgIHVuc2lnbmVkIHVwcGVyU25hcE9mZnNldFJhbmdlSW5kZXg7Ci0gICAgaW5kaWNl
c09mTmVhcmVzdFNuYXBPZmZzZXRSYW5nZXM8TGF5b3V0VHlwZT4oc2Nyb2xsRGVzdGluYXRpb25P
ZmZzZXQsIHNuYXBPZmZzZXRSYW5nZXMsIGxvd2VyU25hcE9mZnNldFJhbmdlSW5kZXgsIHVwcGVy
U25hcE9mZnNldFJhbmdlSW5kZXgpOwotICAgIGlmIChsb3dlclNuYXBPZmZzZXRSYW5nZUluZGV4
ID09IHVwcGVyU25hcE9mZnNldFJhbmdlSW5kZXggJiYgdXBwZXJTbmFwT2Zmc2V0UmFuZ2VJbmRl
eCAhPSBpbnZhbGlkU25hcE9mZnNldEluZGV4KQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Bh
aXIoc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIGludmFsaWRTbmFwT2Zmc2V0SW5kZXgpOwotCiAg
ICAgaWYgKHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0IDw9IHNuYXBPZmZzZXRzLmZpcnN0KCkub2Zm
c2V0KQogICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc25hcE9mZnNldHMuZmlyc3QoKS5v
ZmZzZXQsIDB1KTsKIApAQCAtMTYwLDI4ICsxMzAsMzYgQEAgc3RhdGljIHN0ZDo6cGFpcjxMYXlv
dXRUeXBlLCB1bnNpZ25lZD4gY2xvc2VzdFNuYXBPZmZzZXRXaXRoT2Zmc2V0c0FuZFJhbmdlcyhj
b24KICAgICBpbmRpY2VzT2ZOZWFyZXN0U25hcE9mZnNldHM8TGF5b3V0VHlwZT4oc2Nyb2xsRGVz
dGluYXRpb25PZmZzZXQsIHNuYXBPZmZzZXRzLCBsb3dlckluZGV4LCB1cHBlckluZGV4KTsKICAg
ICBMYXlvdXRUeXBlIGxvd2VyU25hcFBvc2l0aW9uID0gc25hcE9mZnNldHNbbG93ZXJJbmRleF0u
b2Zmc2V0OwogICAgIExheW91dFR5cGUgdXBwZXJTbmFwUG9zaXRpb24gPSBzbmFwT2Zmc2V0c1t1
cHBlckluZGV4XS5vZmZzZXQ7CisKKyAgICBhdXRvIHZpZXdwb3J0TGVuZ3RoID0gYXhpcyA9PSBT
Y3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyB2aWV3cG9ydFNpemUud2lkdGgoKSA6IHZpZXdw
b3J0U2l6ZS5oZWlnaHQoKTsKKyAgICBpZiAoIWlzTmVhckVub3VnaFRvT2Zmc2V0Rm9yUHJveGlt
aXR5PExheW91dFR5cGU+KGluZm8uc3RyaWN0bmVzcywgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQs
IGxvd2VyU25hcFBvc2l0aW9uLCB2aWV3cG9ydExlbmd0aCkpIHsKKyAgICAgICAgbG93ZXJTbmFw
UG9zaXRpb24gPSBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldDsKKyAgICAgICAgbG93ZXJJbmRleCA9
IGludmFsaWRTbmFwT2Zmc2V0SW5kZXg7CisgICAgfQorCisgICAgaWYgKCFpc05lYXJFbm91Z2hU
b09mZnNldEZvclByb3hpbWl0eTxMYXlvdXRUeXBlPihpbmZvLnN0cmljdG5lc3MsIHNjcm9sbERl
c3RpbmF0aW9uT2Zmc2V0LCB1cHBlclNuYXBQb3NpdGlvbiwgdmlld3BvcnRMZW5ndGgpKSB7Cisg
ICAgICAgIHVwcGVyU25hcFBvc2l0aW9uID0gc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQ7CisgICAg
ICAgIHVwcGVySW5kZXggPSBpbnZhbGlkU25hcE9mZnNldEluZGV4OworICAgIH0KICAgICBpZiAo
IXN0ZDo6YWJzKHZlbG9jaXR5KSkgewotICAgICAgICBib29sIGlzQ2xvc2VyVG9Mb3dlclNuYXBQ
b3NpdGlvbiA9IHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0IC0gbG93ZXJTbmFwUG9zaXRpb24gPD0g
dXBwZXJTbmFwUG9zaXRpb24gLSBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldDsKKyAgICAgICAgYm9v
bCBpc0Nsb3NlclRvTG93ZXJTbmFwUG9zaXRpb24gPSAodXBwZXJJbmRleCA9PSBpbnZhbGlkU25h
cE9mZnNldEluZGV4KQorICAgICAgICAgICAgfHwgKGxvd2VySW5kZXggIT0gaW52YWxpZFNuYXBP
ZmZzZXRJbmRleCAmJiBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCAtIGxvd2VyU25hcFBvc2l0aW9u
IDw9IHVwcGVyU25hcFBvc2l0aW9uIC0gc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQpOwogICAgICAg
ICByZXR1cm4gaXNDbG9zZXJUb0xvd2VyU25hcFBvc2l0aW9uID8gc3RkOjptYWtlX3BhaXIobG93
ZXJTbmFwUG9zaXRpb24sIGxvd2VySW5kZXgpIDogc3RkOjptYWtlX3BhaXIodXBwZXJTbmFwUG9z
aXRpb24sIHVwcGVySW5kZXgpOwogICAgIH0KIAogICAgIC8vIE5vbi16ZXJvIHZlbG9jaXR5IGlu
ZGljYXRlcyBhIGZsaWNrIGdlc3R1cmUuIEV2ZW4gaWYgYW5vdGhlciBzbmFwIHBvaW50IGlzIGNs
b3Nlciwgd2Ugc2hvdWxkIGNob29zZSB0aGUgb25lIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGZs
aWNrIGdlc3R1cmUKLSAgICAvLyBhcyBsb25nIGFzIGEgc2Nyb2xsIHNuYXAgb2Zmc2V0IHJhbmdl
IGRvZXMgbm90IGxpZSBiZXR3ZWVuIHRoZSBzY3JvbGwgZGVzdGluYXRpb24gYW5kIHRoZSB0YXJn
ZXRlZCBzbmFwIG9mZnNldC4gSWYgd2UgYXJlIGRvaW5nIGRpcmVjdGlvbmFsCisgICAgLy8gYXMg
bG9uZyBhcyBhIHNjcm9sbCBzbmFwIG9mZnNldCBpcyBjbG9zZSBlbm91Z2ggZm9yIHByb3hpbWl0
eSAob3Igd2UgYXJlbid0IHVzaW5nIHByb3hpbWl0eSkuIElmIHdlIGFyZSBkb2luZyBkaXJlY3Rp
b25hbAogICAgIC8vIHNuYXBwaW5nLCB3ZSBzaG91bGQgbmV2ZXIgc25hcCB0byBhIHBvaW50IHRo
YXQgd2FzIG9uIHRoZSBvdGhlciBzaWRlIG9mIHRoZSBvcmlnaW5hbCBwb3NpdGlvbiBpbiB0aGUg
b3Bwb3NpdGUgZGlyZWN0aW9uIG9mIHRoaXMgc2Nyb2xsLgogICAgIC8vIFRoaXMgYWxsb3dzIGRp
cmVjdGlvbmFsIHNjcm9sbGluZyB0byBlc2NhcGUgc25hcCBwb2ludHMuCi0gICAgaWYgKHZlbG9j
aXR5IDwgMCkgewotICAgICAgICBpZiAobG93ZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleCA9PSBpbnZh
bGlkU25hcE9mZnNldEluZGV4IHx8IGxvd2VyU25hcFBvc2l0aW9uID49IHNuYXBPZmZzZXRSYW5n
ZXNbbG93ZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleF0uZW5kKQotICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV9wYWlyKGxvd2VyU25hcFBvc2l0aW9uLCBsb3dlckluZGV4KTsKLSAgICAgICAgaWYg
KCFvcmlnaW5hbE9mZnNldEZvckRpcmVjdGlvbmFsU25hcHBpbmcuaGFzVmFsdWUoKSB8fCAqb3Jp
Z2luYWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNuYXBwaW5nID4gdXBwZXJTbmFwUG9zaXRpb24pCi0g
ICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIodXBwZXJTbmFwUG9zaXRpb24sIHVwcGVy
SW5kZXgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICh1cHBlclNuYXBPZmZzZXRSYW5nZUlu
ZGV4ID09IGludmFsaWRTbmFwT2Zmc2V0SW5kZXggfHwgc25hcE9mZnNldFJhbmdlc1t1cHBlclNu
YXBPZmZzZXRSYW5nZUluZGV4XS5zdGFydCA+PSB1cHBlclNuYXBQb3NpdGlvbikKKyAgICBpZiAo
dmVsb2NpdHkgPCAwKSAgeworICAgICAgICBpZiAodXBwZXJJbmRleCAhPSBpbnZhbGlkU25hcE9m
ZnNldEluZGV4ICYmICghb3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNuYXBwaW5nIHx8ICpv
cmlnaW5hbE9mZnNldEZvckRpcmVjdGlvbmFsU25hcHBpbmcgPiB1cHBlclNuYXBQb3NpdGlvbikp
CiAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIodXBwZXJTbmFwUG9zaXRpb24sIHVw
cGVySW5kZXgpOwotICAgICAgICBpZiAoIW9yaWdpbmFsT2Zmc2V0Rm9yRGlyZWN0aW9uYWxTbmFw
cGluZy5oYXNWYWx1ZSgpIHx8ICpvcmlnaW5hbE9mZnNldEZvckRpcmVjdGlvbmFsU25hcHBpbmcg
PCBsb3dlclNuYXBQb3NpdGlvbikKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihs
b3dlclNuYXBQb3NpdGlvbiwgbG93ZXJJbmRleCk7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2Vf
cGFpcihsb3dlclNuYXBQb3NpdGlvbiwgbG93ZXJJbmRleCk7CiAgICAgfQogCi0gICAgcmV0dXJu
IHN0ZDo6bWFrZV9wYWlyKHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBpbnZhbGlkU25hcE9mZnNl
dEluZGV4KTsKKyAgICBpZiAobG93ZXJJbmRleCAhPSBpbnZhbGlkU25hcE9mZnNldEluZGV4ICYm
ICghb3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNuYXBwaW5nIHx8ICpvcmlnaW5hbE9mZnNl
dEZvckRpcmVjdGlvbmFsU25hcHBpbmcgPCBsb3dlclNuYXBQb3NpdGlvbikpCisgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfcGFpcihsb3dlclNuYXBQb3NpdGlvbiwgbG93ZXJJbmRleCk7CisgICAg
cmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHVwcGVyU25hcFBvc2l0aW9uLCB1cHBlckluZGV4KTsKIH0K
IAogZW51bSBjbGFzcyBJbnNldE9yT3V0c2V0IHsKQEAgLTIyMCwzMCArMTk4LDYgQEAgc3RhdGlj
IExheW91dFVuaXQgY29tcHV0ZVNjcm9sbFNuYXBBbGlnbk9mZnNldChMYXlvdXRVbml0IG1pbkxv
Y2F0aW9uLCBMYXlvdXRVbmkKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGNvbXB1dGVBeGlzUHJv
eGltaXR5U25hcE9mZnNldFJhbmdlcyhjb25zdCBWZWN0b3I8U25hcE9mZnNldDxMYXlvdXRVbml0
Pj4mIHNuYXBPZmZzZXRzLCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+JiBv
ZmZzZXRSYW5nZXMsIExheW91dFVuaXQgc2Nyb2xsUG9ydEF4aXNMZW5ndGgpCi17Ci0gICAgLy8g
VGhpcyBpcyBhbiBhcmJpdHJhcnkgY2hvaWNlIGZvciB3aGF0IGl0IG1lYW5zIHRvIGJlICJpbiBw
cm94aW1pdHkiIG9mIGEgc25hcCBvZmZzZXQuIFdlIHNob3VsZCBwbGF5IGFyb3VuZCB3aXRoCi0g
ICAgLy8gdGhpcyBhbmQgc2VlIHdoYXQgZmVlbHMgYmVzdC4KLSAgICBzdGF0aWMgY29uc3QgZmxv
YXQgcmF0aW9PZlNjcm9sbFBvcnRBeGlzTGVuZ3RoVG9CZUNvbnNpZGVyZWRGb3JQcm94aW1pdHkg
PSAwLjM7Ci0gICAgaWYgKHNuYXBPZmZzZXRzLnNpemUoKSA8IDIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIFRoZSBleHRyYSBydWxlIGFjY291bnRpbmcgZm9yIHNjcm9sbCBvZmZzZXQgcmFu
Z2VzIGluIGJldHdlZW4gdGhlIHNjcm9sbCBkZXN0aW5hdGlvbiBhbmQgYSBwb3RlbnRpYWwgc25h
cCBvZmZzZXQKLSAgICAvLyBoYW5kbGVzIHRoZSBjb3JuZXIgY2FzZSB3aGVyZSB0aGUgdXNlciBz
Y3JvbGxzIHdpdGggbW9tZW50dW0gdmVyeSBsaWdodGx5IGF3YXkgZnJvbSBhIHNuYXAgb2Zmc2V0
LCBzdWNoIHRoYXQgdGhlCi0gICAgLy8gcHJlZGljdGVkIHNjcm9sbCBkZXN0aW5hdGlvbiBpcyBz
dGlsbCB3aXRoaW4gcHJveGltaXR5IG9mIHRoZSBzbmFwIG9mZnNldC4gSW4gdGhpcyBjYXNlLCB0
aGUgcmVndWxhciAobWFuZGF0b3J5Ci0gICAgLy8gc2Nyb2xsIHNuYXBwaW5nKSBiZWhhdmlvciB3
b3VsZCBiZSB0byBzbmFwIHRvIHRoZSBuZXh0IG9mZnNldCBpbiB0aGUgZGlyZWN0aW9uIG9mIG1v
bWVudHVtIHNjcm9sbGluZywgYnV0Ci0gICAgLy8gaW5zdGVhZCwgaXQgaXMgbW9yZSBpbnR1aXRp
dmUgdG8gZWl0aGVyIHJldHVybiB0byB0aGUgb3JpZ2luYWwgc25hcCBwb3NpdGlvbiAod2hpY2gg
d2UgYXJiaXRyYXJpbHkgY2hvb3NlIGhlcmUpCi0gICAgLy8gb3Igc2Nyb2xsIGp1c3Qgb3V0c2lk
ZSBvZiB0aGUgc25hcCBvZmZzZXQgcmFuZ2UuIFRoaXMgaXMgYW5vdGhlciBtaW5vciBiZWhhdmlv
ciB0d2VhayB0aGF0IHdlIHNob3VsZCBwbGF5IGFyb3VuZAotICAgIC8vIHdpdGggdG8gc2VlIHdo
YXQgZmVlbHMgYmVzdC4KLSAgICBMYXlvdXRVbml0IHByb3hpbWl0eURpc3RhbmNlIHsgcmF0aW9P
ZlNjcm9sbFBvcnRBeGlzTGVuZ3RoVG9CZUNvbnNpZGVyZWRGb3JQcm94aW1pdHkgKiBzY3JvbGxQ
b3J0QXhpc0xlbmd0aCB9OwotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMTsgaW5kZXggPCBzbmFw
T2Zmc2V0cy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgYXV0byBzdGFydE9mZnNldCA9IHNu
YXBPZmZzZXRzW2luZGV4IC0gMV0ub2Zmc2V0ICsgcHJveGltaXR5RGlzdGFuY2U7Ci0gICAgICAg
IGF1dG8gZW5kT2Zmc2V0ID0gc25hcE9mZnNldHNbaW5kZXhdLm9mZnNldCAtIHByb3hpbWl0eURp
c3RhbmNlOwotICAgICAgICBpZiAoc3RhcnRPZmZzZXQgPCBlbmRPZmZzZXQpCi0gICAgICAgICAg
ICBvZmZzZXRSYW5nZXMuYXBwZW5kKHsgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCB9KTsKLSAgICB9
Ci19Ci0KIHZvaWQgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYShTY3JvbGxhYmxl
QXJlYSYgc2Nyb2xsYWJsZUFyZWEsIGNvbnN0IFJlbmRlckJveCYgc2Nyb2xsaW5nRWxlbWVudEJv
eCwgY29uc3QgUmVuZGVyU3R5bGUmIHNjcm9sbGluZ0VsZW1lbnRTdHlsZSwgTGF5b3V0UmVjdCB2
aWV3cG9ydFJlY3RJbkJvcmRlckJveENvb3JkaW5hdGVzKQogewogICAgIGF1dG8gc2Nyb2xsU25h
cFR5cGUgPSBzY3JvbGxpbmdFbGVtZW50U3R5bGUuc2Nyb2xsU25hcFR5cGUoKTsKQEAgLTI2Myw2
ICsyMTcsNyBAQCB2b2lkIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoU2Nyb2xs
YWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhLCBjb25zdCBSZQogCiAgICAgSGFzaE1hcDxmbG9hdCwg
U25hcE9mZnNldDxMYXlvdXRVbml0Pj4gdmVydGljYWxTbmFwT2Zmc2V0c01hcDsKICAgICBIYXNo
TWFwPGZsb2F0LCBTbmFwT2Zmc2V0PExheW91dFVuaXQ+PiBob3Jpem9udGFsU25hcE9mZnNldHNN
YXA7CisgICAgVmVjdG9yPExheW91dFJlY3Q+IHNuYXBBcmVhczsKICAgICBib29sIGhhc0hvcml6
b250YWxTbmFwT2Zmc2V0cyA9IHNjcm9sbFNuYXBUeXBlLmF4aXMgPT0gU2Nyb2xsU25hcEF4aXM6
OkJvdGggfHwgc2Nyb2xsU25hcFR5cGUuYXhpcyA9PSBTY3JvbGxTbmFwQXhpczo6WEF4aXMgfHwg
c2Nyb2xsU25hcFR5cGUuYXhpcyA9PSBTY3JvbGxTbmFwQXhpczo6SW5saW5lOwogICAgIGJvb2wg
aGFzVmVydGljYWxTbmFwT2Zmc2V0cyA9IHNjcm9sbFNuYXBUeXBlLmF4aXMgPT0gU2Nyb2xsU25h
cEF4aXM6OkJvdGggfHwgc2Nyb2xsU25hcFR5cGUuYXhpcyA9PSBTY3JvbGxTbmFwQXhpczo6WUF4
aXMgfHwgc2Nyb2xsU25hcFR5cGUuYXhpcyA9PSBTY3JvbGxTbmFwQXhpczo6QmxvY2s7CiAKQEAg
LTI5MSwxNiArMjQ2LDMwIEBAIHZvaWQgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJl
YShTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIGNvbnN0IFJlCiAgICAgICAgIExPR19X
SVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIiAgICBDb25zaWRlcmluZyBzY3JvbGwg
c25hcCB0YXJnZXQgYXJlYSAiIDw8IHNjcm9sbFNuYXBBcmVhKTsKICAgICAgICAgYXV0byBhbGln
bm1lbnQgPSBjaGlsZC0+c3R5bGUoKS5zY3JvbGxTbmFwQWxpZ24oKTsKICAgICAgICAgYXV0byBz
dG9wID0gY2hpbGQtPnN0eWxlKCkuc2Nyb2xsU25hcFN0b3AoKTsKLSAgICAgICAgaWYgKGhhc0hv
cml6b250YWxTbmFwT2Zmc2V0cyAmJiBhbGlnbm1lbnQueCAhPSBTY3JvbGxTbmFwQXhpc0FsaWdu
VHlwZTo6Tm9uZSkgeworCisgICAgICAgIGJvb2wgc25hcHNIb3Jpem9udGFsbHkgPSBoYXNIb3Jp
em9udGFsU25hcE9mZnNldHMgJiYgYWxpZ25tZW50LnggIT0gU2Nyb2xsU25hcEF4aXNBbGlnblR5
cGU6Ok5vbmU7CisgICAgICAgIGJvb2wgc25hcHNWZXJ0aWNhbGx5ID0gaGFzVmVydGljYWxTbmFw
T2Zmc2V0cyAmJiBhbGlnbm1lbnQueSAhPSBTY3JvbGxTbmFwQXhpc0FsaWduVHlwZTo6Tm9uZTsK
KyAgICAgICAgaWYgKCFzbmFwc0hvcml6b250YWxseSAmJiAhc25hcHNWZXJ0aWNhbGx5KQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gVGhlIHNjcm9sbCBzbmFwIGFyZWEgaXMg
ZGVmaW5lZCB2aWEgaXRzIHNjcm9sbCBwb3NpdGlvbiwgc28gY29udmVydCB0aGUgc25hcCBhcmVh
IHJlY3RhbmdsZSB0byBiZSByZWxhdGl2ZSB0byBzY3JvbGwgb2Zmc2V0cy4KKyAgICAgICAgYXV0
byBzbmFwQXJlYU9yaWdpblJlbGF0aXZlVG9Cb3JkZXJFZGdlID0gc2Nyb2xsU25hcEFyZWEubG9j
YXRpb24oKSAtIHNjcm9sbFNuYXBQb3J0LmxvY2F0aW9uKCk7CisgICAgICAgIExheW91dFJlY3Qg
c2Nyb2xsU25hcEFyZWFBc09mZnNldHMoc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsT2Zmc2V0RnJvbVBv
c2l0aW9uKHJvdW5kZWRJbnRQb2ludChzbmFwQXJlYU9yaWdpblJlbGF0aXZlVG9Cb3JkZXJFZGdl
KSksIHNjcm9sbFNuYXBBcmVhLnNpemUoKSk7CisgICAgICAgIHNuYXBBcmVhcy5hcHBlbmQoc2Ny
b2xsU25hcEFyZWFBc09mZnNldHMpOworCisgICAgICAgIGlmIChzbmFwc0hvcml6b250YWxseSkg
ewogICAgICAgICAgICAgYXV0byBhYnNvbHV0ZVNjcm9sbFhQb3NpdGlvbiA9IGNvbXB1dGVTY3Jv
bGxTbmFwQWxpZ25PZmZzZXQoc2Nyb2xsU25hcEFyZWEueCgpLCBzY3JvbGxTbmFwQXJlYS5tYXhY
KCksIGFsaWdubWVudC54LCBzY3JvbGxlcklzUlRMKSAtIGNvbXB1dGVTY3JvbGxTbmFwQWxpZ25P
ZmZzZXQoc2Nyb2xsU25hcFBvcnQueCgpLCBzY3JvbGxTbmFwUG9ydC5tYXhYKCksIGFsaWdubWVu
dC54LCBzY3JvbGxlcklzUlRMKTsKICAgICAgICAgICAgIGF1dG8gYWJzb2x1dGVTY3JvbGxPZmZz
ZXQgPSBjbGFtcFRvPGludD4oc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9u
KHsgcm91bmRUb0ludChhYnNvbHV0ZVNjcm9sbFhQb3NpdGlvbiksIDAgfSkueCgpLCAwLCBtYXhT
Y3JvbGxPZmZzZXQueCgpKTsKLSAgICAgICAgICAgIGFkZE9yVXBkYXRlU3RvcEZvclNuYXBPZmZz
ZXQoaG9yaXpvbnRhbFNuYXBPZmZzZXRzTWFwLCB7IGFic29sdXRlU2Nyb2xsT2Zmc2V0LCBzdG9w
IH0pOworICAgICAgICAgICAgYWRkT3JVcGRhdGVTdG9wRm9yU25hcE9mZnNldChob3Jpem9udGFs
U25hcE9mZnNldHNNYXAsIHsgYWJzb2x1dGVTY3JvbGxPZmZzZXQsIHN0b3AsIHNuYXBBcmVhcy5z
aXplKCkgLSAxIH0pOwogICAgICAgICB9Ci0gICAgICAgIGlmIChoYXNWZXJ0aWNhbFNuYXBPZmZz
ZXRzICYmIGFsaWdubWVudC55ICE9IFNjcm9sbFNuYXBBeGlzQWxpZ25UeXBlOjpOb25lKSB7Cisg
ICAgICAgIGlmIChzbmFwc1ZlcnRpY2FsbHkpIHsKICAgICAgICAgICAgIGF1dG8gYWJzb2x1dGVT
Y3JvbGxZUG9zaXRpb24gPSBjb21wdXRlU2Nyb2xsU25hcEFsaWduT2Zmc2V0KHNjcm9sbFNuYXBB
cmVhLnkoKSwgc2Nyb2xsU25hcEFyZWEubWF4WSgpLCBhbGlnbm1lbnQueSwgZmFsc2UpIC0gY29t
cHV0ZVNjcm9sbFNuYXBBbGlnbk9mZnNldChzY3JvbGxTbmFwUG9ydC55KCksIHNjcm9sbFNuYXBQ
b3J0Lm1heFkoKSwgYWxpZ25tZW50LnksIGZhbHNlKTsKICAgICAgICAgICAgIGF1dG8gYWJzb2x1
dGVTY3JvbGxPZmZzZXQgPSBjbGFtcFRvPGludD4oc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsT2Zmc2V0
RnJvbVBvc2l0aW9uKHsgMCwgcm91bmRUb0ludChhYnNvbHV0ZVNjcm9sbFlQb3NpdGlvbikgfSku
eSgpLCAwLCBtYXhTY3JvbGxPZmZzZXQueSgpKTsKLSAgICAgICAgICAgIGFkZE9yVXBkYXRlU3Rv
cEZvclNuYXBPZmZzZXQodmVydGljYWxTbmFwT2Zmc2V0c01hcCwgeyBhYnNvbHV0ZVNjcm9sbE9m
ZnNldCwgc3RvcCB9KTsKKyAgICAgICAgICAgIGFkZE9yVXBkYXRlU3RvcEZvclNuYXBPZmZzZXQo
dmVydGljYWxTbmFwT2Zmc2V0c01hcCwgeyBhYnNvbHV0ZVNjcm9sbE9mZnNldCwgc3RvcCwgc25h
cEFyZWFzLnNpemUoKSAtIDEgfSk7CiAgICAgICAgIH0KKworICAgICAgICBpZiAoIXNuYXBBcmVh
cy5pc0VtcHR5KCkpCisgICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwgc3Ry
ZWFtIDw8ICIgPT4gQ29tcHV0ZWQgc25hcCBhcmVhczogIiA8PCBzbmFwQXJlYXMpOwogICAgIH0K
IAogICAgIGF1dG8gY29tcGFyZVNuYXBPZmZzZXRzID0gW10oY29uc3QgU25hcE9mZnNldDxMYXlv
dXRVbml0PiYgYSwgY29uc3QgU25hcE9mZnNldDxMYXlvdXRVbml0PiYgYikKQEAgLTMwOSwzMiAr
Mjc4LDIyIEBAIHZvaWQgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYShTY3JvbGxh
YmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIGNvbnN0IFJlCiAgICAgfTsKIAogICAgIFZlY3RvcjxT
bmFwT2Zmc2V0PExheW91dFVuaXQ+PiBob3Jpem9udGFsU25hcE9mZnNldHMgPSBjb3B5VG9WZWN0
b3IoaG9yaXpvbnRhbFNuYXBPZmZzZXRzTWFwLnZhbHVlcygpKTsKLSAgICBWZWN0b3I8U2Nyb2xs
T2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+IGhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzOwogICAg
IGlmICghaG9yaXpvbnRhbFNuYXBPZmZzZXRzLmlzRW1wdHkoKSkgewogICAgICAgICBzdGQ6OnNv
cnQoaG9yaXpvbnRhbFNuYXBPZmZzZXRzLmJlZ2luKCksIGhvcml6b250YWxTbmFwT2Zmc2V0cy5l
bmQoKSwgY29tcGFyZVNuYXBPZmZzZXRzKTsKLSAgICAgICAgaWYgKHNjcm9sbFNuYXBUeXBlLnN0
cmljdG5lc3MgPT0gU2Nyb2xsU25hcFN0cmljdG5lc3M6OlByb3hpbWl0eSkKLSAgICAgICAgICAg
IGNvbXB1dGVBeGlzUHJveGltaXR5U25hcE9mZnNldFJhbmdlcyhob3Jpem9udGFsU25hcE9mZnNl
dHMsIGhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzLCBzY3JvbGxTbmFwUG9ydC53aWR0aCgpKTsK
LQogICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICIgPT4gQ29t
cHV0ZWQgaG9yaXpvbnRhbCBzY3JvbGwgc25hcCBvZmZzZXRzOiAiIDw8IGhvcml6b250YWxTbmFw
T2Zmc2V0cyk7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwg
IiA9PiBDb21wdXRlZCBob3Jpem9udGFsIHNjcm9sbCBzbmFwIG9mZnNldCByYW5nZXM6ICIgPDwg
aG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMpOwogICAgIH0KIAogICAgIFZlY3RvcjxTbmFwT2Zm
c2V0PExheW91dFVuaXQ+PiB2ZXJ0aWNhbFNuYXBPZmZzZXRzID0gY29weVRvVmVjdG9yKHZlcnRp
Y2FsU25hcE9mZnNldHNNYXAudmFsdWVzKCkpOwotICAgIFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5n
ZTxMYXlvdXRVbml0Pj4gdmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzOwogICAgIGlmICghdmVydGlj
YWxTbmFwT2Zmc2V0cy5pc0VtcHR5KCkpIHsKICAgICAgICAgc3RkOjpzb3J0KHZlcnRpY2FsU25h
cE9mZnNldHMuYmVnaW4oKSwgdmVydGljYWxTbmFwT2Zmc2V0cy5lbmQoKSwgY29tcGFyZVNuYXBP
ZmZzZXRzKTsKLSAgICAgICAgaWYgKHNjcm9sbFNuYXBUeXBlLnN0cmljdG5lc3MgPT0gU2Nyb2xs
U25hcFN0cmljdG5lc3M6OlByb3hpbWl0eSkKLSAgICAgICAgICAgIGNvbXB1dGVBeGlzUHJveGlt
aXR5U25hcE9mZnNldFJhbmdlcyh2ZXJ0aWNhbFNuYXBPZmZzZXRzLCB2ZXJ0aWNhbFNuYXBPZmZz
ZXRSYW5nZXMsIHNjcm9sbFNuYXBQb3J0LmhlaWdodCgpKTsKLQogICAgICAgICBMT0dfV0lUSF9T
VFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICIgPT4gQ29tcHV0ZWQgdmVydGljYWwgc2Nyb2xs
IHNuYXAgb2Zmc2V0czogIiA8PCB2ZXJ0aWNhbFNuYXBPZmZzZXRzKTsKLSAgICAgICAgTE9HX1dJ
VEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiID0+IENvbXB1dGVkIHZlcnRpY2FsIHNj
cm9sbCBzbmFwIG9mZnNldCByYW5nZXM6ICIgPDwgdmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzKTsK
ICAgICB9CiAKICAgICBzY3JvbGxhYmxlQXJlYS5zZXRTY3JvbGxTbmFwT2Zmc2V0SW5mbyh7Cisg
ICAgICAgIHNjcm9sbFNuYXBUeXBlLnN0cmljdG5lc3MsCiAgICAgICAgIGhvcml6b250YWxTbmFw
T2Zmc2V0cywKICAgICAgICAgdmVydGljYWxTbmFwT2Zmc2V0cywKLSAgICAgICAgaG9yaXpvbnRh
bFNuYXBPZmZzZXRSYW5nZXMsCi0gICAgICAgIHZlcnRpY2FsU25hcE9mZnNldFJhbmdlcworICAg
ICAgICBzbmFwQXJlYXMKICAgICB9KTsKIH0KIApAQCAtMzQ4LDU3ICszMDcsNjQgQEAgc3RhdGlj
IExheW91dFVuaXQgY29udmVydE9mZnNldFVuaXQoZmxvYXQgaW5wdXQsIGZsb2F0IC8qIHNjYWxl
RmFjdG9yICovKQogICAgIHJldHVybiBMYXlvdXRVbml0KGlucHV0KTsKIH0KIAotdGVtcGxhdGUg
PHR5cGVuYW1lIElucHV0VHlwZSwgdHlwZW5hbWUgT3V0cHV0VHlwZT4KLXN0YXRpYyBTY3JvbGxT
bmFwT2Zmc2V0c0luZm88T3V0cHV0VHlwZT4gY29udmVydE9mZnNldEluZm8oY29uc3QgU2Nyb2xs
U25hcE9mZnNldHNJbmZvPElucHV0VHlwZT4mIGlucHV0LCBmbG9hdCBzY2FsZUZhY3RvciA9IDAu
MCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbnB1dFR5cGUsIHR5cGVuYW1lIElucHV0UmVjdFR5cGUs
IHR5cGVuYW1lIE91dHB1dFR5cGUsIHR5cGVuYW1lIE91dHB1dFJlY3RUeXBlPgorc3RhdGljIFNj
cm9sbFNuYXBPZmZzZXRzSW5mbzxPdXRwdXRUeXBlLCBPdXRwdXRSZWN0VHlwZT4gY29udmVydE9m
ZnNldEluZm8oY29uc3QgU2Nyb2xsU25hcE9mZnNldHNJbmZvPElucHV0VHlwZSwgSW5wdXRSZWN0
VHlwZT4mIGlucHV0LCBmbG9hdCBzY2FsZUZhY3RvciA9IDAuMCkKIHsKICAgICBhdXRvIGNvbnZl
cnRPZmZzZXRzID0gW3NjYWxlRmFjdG9yXShjb25zdCBWZWN0b3I8U25hcE9mZnNldDxJbnB1dFR5
cGU+PiYgaW5wdXQpCiAgICAgewogICAgICAgICBWZWN0b3I8U25hcE9mZnNldDxPdXRwdXRUeXBl
Pj4gb3V0cHV0OwogICAgICAgICBvdXRwdXQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpbnB1dC5z
aXplKCkpOwogICAgICAgICBmb3IgKGF1dG8mIG9mZnNldCA6IGlucHV0KQotICAgICAgICAgICAg
b3V0cHV0LnVuY2hlY2tlZEFwcGVuZCh7IGNvbnZlcnRPZmZzZXRVbml0KG9mZnNldC5vZmZzZXQs
IHNjYWxlRmFjdG9yKSwgb2Zmc2V0LnN0b3AgfSk7CisgICAgICAgICAgICBvdXRwdXQudW5jaGVj
a2VkQXBwZW5kKHsgY29udmVydE9mZnNldFVuaXQob2Zmc2V0Lm9mZnNldCwgc2NhbGVGYWN0b3Ip
LCBvZmZzZXQuc3RvcCwgb2Zmc2V0LnNuYXBBcmVhSW5kZXggfSk7CiAgICAgICAgIHJldHVybiBv
dXRwdXQ7CiAgICAgfTsKIAotICAgIGF1dG8gY29udmVydE9mZnNldFJhbmdlcyA9IFtzY2FsZUZh
Y3Rvcl0oY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPElucHV0VHlwZT4+JiBpbnB1dCkK
KyAgICBhdXRvIGNvbnZlcnRSZWN0cyA9IFtzY2FsZUZhY3Rvcl0oY29uc3QgVmVjdG9yPElucHV0
UmVjdFR5cGU+JiBpbnB1dCkKICAgICB7Ci0gICAgICAgIFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5n
ZTxPdXRwdXRUeXBlPj4gb3V0cHV0OworICAgICAgICBWZWN0b3I8T3V0cHV0UmVjdFR5cGU+IG91
dHB1dDsKICAgICAgICAgb3V0cHV0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaW5wdXQuc2l6ZSgp
KTsKLSAgICAgICAgZm9yIChhdXRvJiByYW5nZSA6IGlucHV0KQotICAgICAgICAgICAgb3V0cHV0
LnVuY2hlY2tlZEFwcGVuZCh7IGNvbnZlcnRPZmZzZXRVbml0KHJhbmdlLnN0YXJ0LCBzY2FsZUZh
Y3RvciksIGNvbnZlcnRPZmZzZXRVbml0KHJhbmdlLmVuZCwgc2NhbGVGYWN0b3IpIH0pOworICAg
ICAgICBmb3IgKGF1dG8mIHJlY3QgOiBpbnB1dCkgeworICAgICAgICAgICAgT3V0cHV0UmVjdFR5
cGUgb3V0cHV0UmVjdCgKKyAgICAgICAgICAgICAgICBjb252ZXJ0T2Zmc2V0VW5pdChyZWN0Lngo
KSwgc2NhbGVGYWN0b3IpLCBjb252ZXJ0T2Zmc2V0VW5pdChyZWN0LnkoKSwgc2NhbGVGYWN0b3Ip
LAorICAgICAgICAgICAgICAgIGNvbnZlcnRPZmZzZXRVbml0KHJlY3Qud2lkdGgoKSwgc2NhbGVG
YWN0b3IpLCBjb252ZXJ0T2Zmc2V0VW5pdChyZWN0LmhlaWdodCgpLCBzY2FsZUZhY3RvcikpOwor
ICAgICAgICAgICAgb3V0cHV0LnVuY2hlY2tlZEFwcGVuZChvdXRwdXRSZWN0KTsKKyAgICAgICAg
fQorCiAgICAgICAgIHJldHVybiBvdXRwdXQ7CiAgICAgfTsKIAogICAgIHJldHVybiB7CisgICAg
ICAgIGlucHV0LnN0cmljdG5lc3MsCiAgICAgICAgIGNvbnZlcnRPZmZzZXRzKGlucHV0Lmhvcml6
b250YWxTbmFwT2Zmc2V0cyksCiAgICAgICAgIGNvbnZlcnRPZmZzZXRzKGlucHV0LnZlcnRpY2Fs
U25hcE9mZnNldHMpLAotICAgICAgICBjb252ZXJ0T2Zmc2V0UmFuZ2VzKGlucHV0Lmhvcml6b250
YWxTbmFwT2Zmc2V0UmFuZ2VzKSwKLSAgICAgICAgY29udmVydE9mZnNldFJhbmdlcyhpbnB1dC52
ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMpCisgICAgICAgIGNvbnZlcnRSZWN0cyhpbnB1dC5zbmFw
QXJlYXMpLAogICAgIH07CiB9CiAKIHRlbXBsYXRlIDw+IHRlbXBsYXRlIDw+CiBMYXlvdXRTY3Jv
bGxTbmFwT2Zmc2V0c0luZm8gRmxvYXRTY3JvbGxTbmFwT2Zmc2V0c0luZm86OmNvbnZlcnRVbml0
cyhmbG9hdCAvKiB1bnVzZWRTY2FsZUZhY3RvciAqLykgY29uc3QKIHsKLSAgICByZXR1cm4gY29u
dmVydE9mZnNldEluZm88ZmxvYXQsIExheW91dFVuaXQ+KCp0aGlzKTsKKyAgICByZXR1cm4gY29u
dmVydE9mZnNldEluZm88ZmxvYXQsIEZsb2F0UmVjdCwgTGF5b3V0VW5pdCwgTGF5b3V0UmVjdD4o
KnRoaXMpOworCiB9CiAKIHRlbXBsYXRlIDw+IHRlbXBsYXRlIDw+CiBGbG9hdFNjcm9sbFNuYXBP
ZmZzZXRzSW5mbyBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm86OmNvbnZlcnRVbml0cyhmbG9h
dCBkZXZpY2VTY2FsZUZhY3RvcikgY29uc3QKIHsKLSAgICByZXR1cm4gY29udmVydE9mZnNldElu
Zm88TGF5b3V0VW5pdCwgZmxvYXQ+KCp0aGlzLCBkZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgcmV0
dXJuIGNvbnZlcnRPZmZzZXRJbmZvPExheW91dFVuaXQsIExheW91dFJlY3QsIGZsb2F0LCBGbG9h
dFJlY3Q+KCp0aGlzLCBkZXZpY2VTY2FsZUZhY3Rvcik7CisKIH0KIAotdGVtcGxhdGUgPD4KLXN0
ZDo6cGFpcjxMYXlvdXRVbml0LCB1bnNpZ25lZD4gTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZv
OjpjbG9zZXN0U25hcE9mZnNldChTY3JvbGxFdmVudEF4aXMgYXhpcywgTGF5b3V0VW5pdCBzY3Jv
bGxEZXN0aW5hdGlvbk9mZnNldCwgZmxvYXQgdmVsb2NpdHksIE9wdGlvbmFsPExheW91dFVuaXQ+
IG9yaWdpbmFsUG9zaXRpb25Gb3JEaXJlY3Rpb25hbFNuYXBwaW5nKSBjb25zdAordGVtcGxhdGUg
PD4gdGVtcGxhdGUgPD4KK3N0ZDo6cGFpcjxMYXlvdXRVbml0LCB1bnNpZ25lZD4gTGF5b3V0U2Ny
b2xsU25hcE9mZnNldHNJbmZvOjpjbG9zZXN0U25hcE9mZnNldChTY3JvbGxFdmVudEF4aXMgYXhp
cywgY29uc3QgTGF5b3V0U2l6ZSYgdmlld3BvcnRTaXplLCBMYXlvdXRVbml0IHNjcm9sbERlc3Rp
bmF0aW9uT2Zmc2V0LCBmbG9hdCB2ZWxvY2l0eSwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gb3JpZ2lu
YWxQb3NpdGlvbkZvckRpcmVjdGlvbmFsU25hcHBpbmcpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNs
b3Nlc3RTbmFwT2Zmc2V0V2l0aE9mZnNldHNBbmRSYW5nZXMob2Zmc2V0c0ZvckF4aXMoYXhpcyks
IG9mZnNldFJhbmdlc0ZvckF4aXMoYXhpcyksIHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCB2ZWxv
Y2l0eSwgb3JpZ2luYWxQb3NpdGlvbkZvckRpcmVjdGlvbmFsU25hcHBpbmcpOworICAgIHJldHVy
biBjbG9zZXN0U25hcE9mZnNldFdpdGhJbmZvQW5kQXhpcygqdGhpcywgYXhpcywgdmlld3BvcnRT
aXplLCBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCwgdmVsb2NpdHksIG9yaWdpbmFsUG9zaXRpb25G
b3JEaXJlY3Rpb25hbFNuYXBwaW5nKTsKIH0KIAotdGVtcGxhdGUgPD4KLXN0ZDo6cGFpcjxmbG9h
dCwgdW5zaWduZWQ+IEZsb2F0U2Nyb2xsU25hcE9mZnNldHNJbmZvOjpjbG9zZXN0U25hcE9mZnNl
dChTY3JvbGxFdmVudEF4aXMgYXhpcywgZmxvYXQgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIGZs
b2F0IHZlbG9jaXR5LCBPcHRpb25hbDxmbG9hdD4gb3JpZ2luYWxQb3NpdGlvbkZvckRpcmVjdGlv
bmFsU25hcHBpbmcpIGNvbnN0Cit0ZW1wbGF0ZSA8PiB0ZW1wbGF0ZTw+CitzdGQ6OnBhaXI8Zmxv
YXQsIHVuc2lnbmVkPiBGbG9hdFNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6Y2xvc2VzdFNuYXBPZmZz
ZXQoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGNvbnN0IEZsb2F0U2l6ZSYgdmlld3BvcnRTaXplLCBm
bG9hdCBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCwgZmxvYXQgdmVsb2NpdHksIE9wdGlvbmFsPGZs
b2F0PiBvcmlnaW5hbFBvc2l0aW9uRm9yRGlyZWN0aW9uYWxTbmFwcGluZykgY29uc3QKIHsKLSAg
ICByZXR1cm4gY2xvc2VzdFNuYXBPZmZzZXRXaXRoT2Zmc2V0c0FuZFJhbmdlcyhvZmZzZXRzRm9y
QXhpcyhheGlzKSwgb2Zmc2V0UmFuZ2VzRm9yQXhpcyhheGlzKSwgc2Nyb2xsRGVzdGluYXRpb25P
ZmZzZXQsIHZlbG9jaXR5LCBvcmlnaW5hbFBvc2l0aW9uRm9yRGlyZWN0aW9uYWxTbmFwcGluZyk7
CisgICAgcmV0dXJuIGNsb3Nlc3RTbmFwT2Zmc2V0V2l0aEluZm9BbmRBeGlzKCp0aGlzLCBheGlz
LCB2aWV3cG9ydFNpemUsIHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCB2ZWxvY2l0eSwgb3JpZ2lu
YWxQb3NpdGlvbkZvckRpcmVjdGlvbmFsU25hcHBpbmcpOwogfQogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5oCmluZGV4
IDU4ZTI0MTUzMTgxZGEzNTE1MjIzNDFlMzZmNzE0OTM5ZDg1NzJkZDYuLmQxNjBjOTViYzQzZmY5
ODFjMGE0N2JmMzYwM2M0MDA2ZGNlZTMxY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5oCkBAIC0yNyw2ICsyNyw4IEBA
CiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogCisjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKICNpbmNs
dWRlICJTY3JvbGxUeXBlcy5oIgogI2luY2x1ZGUgIlN0eWxlU2Nyb2xsU25hcFBvaW50cy5oIgpA
QCAtMzUsNyArMzcsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIExheW91dFJl
Y3Q7CiBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFJlbmRlckJveDsKIGNsYXNzIFJlbmRl
clN0eWxlOwpAQCAtNDQsMzAgKzQ1LDIwIEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogc3RydWN0
IFNuYXBPZmZzZXQgewogICAgIFQgb2Zmc2V0OwogICAgIFNjcm9sbFNuYXBTdG9wIHN0b3A7Cisg
ICAgc2l6ZV90IHNuYXBBcmVhSW5kZXg7CiB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0
cnVjdCBTY3JvbGxPZmZzZXRSYW5nZSB7Ci0gICAgVCBzdGFydDsKLSAgICBUIGVuZDsKLX07Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPHR5cGVuYW1lIFVuaXRUeXBlLCB0eXBl
bmFtZSBSZWN0VHlwZT4KIHN0cnVjdCBTY3JvbGxTbmFwT2Zmc2V0c0luZm8gewogICAgIFdURl9N
QUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKLSAgICBWZWN0b3I8U25hcE9mZnNldDxUPj4gaG9y
aXpvbnRhbFNuYXBPZmZzZXRzOwotICAgIFZlY3RvcjxTbmFwT2Zmc2V0PFQ+PiB2ZXJ0aWNhbFNu
YXBPZmZzZXRzOworICAgIFNjcm9sbFNuYXBTdHJpY3RuZXNzIHN0cmljdG5lc3M7CisgICAgVmVj
dG9yPFNuYXBPZmZzZXQ8VW5pdFR5cGU+PiBob3Jpem9udGFsU25hcE9mZnNldHM7CisgICAgVmVj
dG9yPFNuYXBPZmZzZXQ8VW5pdFR5cGU+PiB2ZXJ0aWNhbFNuYXBPZmZzZXRzOworICAgIFZlY3Rv
cjxSZWN0VHlwZT4gc25hcEFyZWFzOwogCi0gICAgLy8gU25hcCBvZmZzZXQgcmFuZ2VzIHJlcHJl
c2VudCBub24tZW1wdHkgcmFuZ2VzIG9mIHNjcm9sbCBvZmZzZXRzIGluIHdoaWNoIHNjcm9sbGlu
ZyBtYXkgcmVzdCBhZnRlciBzY3JvbGwgc25hcHBpbmcuCi0gICAgLy8gVGhlc2UgYXJlIHVzZWQg
aW4gdHdvIGNhc2VzOiAoMSkgZm9yIHByb3hpbWl0eSBzY3JvbGwgc25hcHBpbmcsIHdoZXJlIHBv
cnRpb25zIG9mIGFyZWFzIGJldHdlZW4gYWRqYWNlbnQgc25hcCBvZmZzZXRzCi0gICAgLy8gbWF5
IGVtaXQgc25hcCBvZmZzZXQgcmFuZ2VzLCBhbmQgKDIpIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBz
bmFwIGFyZWEgaXMgbGFyZ2VyIHRoYW4gdGhlIHNuYXAgcG9ydCwgaW4gd2hpY2ggY2FzZSBhcmVh
cwotICAgIC8vIHdoZXJlIHRoZSBzbmFwIHBvcnQgZml0cyB3aXRoaW4gdGhlIHNuYXAgYXJlYSBh
cmUgY29uc2lkZXJlZCB0byBiZSB2YWxpZCBzbmFwIHBvc2l0aW9ucy4KLSAgICBWZWN0b3I8U2Ny
b2xsT2Zmc2V0UmFuZ2U8VD4+IGhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzOwotICAgIFZlY3Rv
cjxTY3JvbGxPZmZzZXRSYW5nZTxUPj4gdmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzOwotCi0gICAg
Ym9vbCBpc0VxdWFsKGNvbnN0IFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxUPiYgb3RoZXIpIGNvbnN0
CisgICAgYm9vbCBpc0VxdWFsKGNvbnN0IFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxVbml0VHlwZSwg
UmVjdFR5cGU+JiBvdGhlcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBob3Jpem9udGFs
U25hcE9mZnNldHMgPT0gb3RoZXIuaG9yaXpvbnRhbFNuYXBPZmZzZXRzICYmIHZlcnRpY2FsU25h
cE9mZnNldHMgPT0gb3RoZXIudmVydGljYWxTbmFwT2Zmc2V0cyAmJiBob3Jpem9udGFsU25hcE9m
ZnNldFJhbmdlcyA9PSBvdGhlci5ob3Jpem9udGFsU25hcE9mZnNldFJhbmdlcyAmJiB2ZXJ0aWNh
bFNuYXBPZmZzZXRSYW5nZXMgPT0gb3RoZXIudmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzOworICAg
ICAgICByZXR1cm4gc3RyaWN0bmVzcyA9PSBvdGhlci5zdHJpY3RuZXNzICYmIGhvcml6b250YWxT
bmFwT2Zmc2V0cyA9PSBvdGhlci5ob3Jpem9udGFsU25hcE9mZnNldHMgJiYgdmVydGljYWxTbmFw
T2Zmc2V0cyA9PSBvdGhlci52ZXJ0aWNhbFNuYXBPZmZzZXRzICYmIHNuYXBBcmVhcyA9PSBvdGhl
ci5zbmFwQXJlYXM7CiAgICAgfQogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKQEAgLTc1LDMy
ICs2NiwzMCBAQCBzdHJ1Y3QgU2Nyb2xsU25hcE9mZnNldHNJbmZvIHsKICAgICAgICAgcmV0dXJu
IGhvcml6b250YWxTbmFwT2Zmc2V0cy5pc0VtcHR5KCkgJiYgdmVydGljYWxTbmFwT2Zmc2V0cy5p
c0VtcHR5KCk7CiAgICAgfQogCi0gICAgVmVjdG9yPFNuYXBPZmZzZXQ8VD4+IG9mZnNldHNGb3JB
eGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzKSBjb25zdAorICAgIFZlY3RvcjxTbmFwT2Zmc2V0PFVu
aXRUeXBlPj4gb2Zmc2V0c0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpIGNvbnN0CiAgICAg
ewogICAgICAgICByZXR1cm4gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsID8gdmVy
dGljYWxTbmFwT2Zmc2V0cyA6IGhvcml6b250YWxTbmFwT2Zmc2V0czsKICAgICB9CiAKLSAgICBW
ZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8VD4+IG9mZnNldFJhbmdlc0ZvckF4aXMoU2Nyb2xsRXZl
bnRBeGlzIGF4aXMpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYXhpcyA9PSBTY3JvbGxF
dmVudEF4aXM6OlZlcnRpY2FsID8gdmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzIDogaG9yaXpvbnRh
bFNuYXBPZmZzZXRSYW5nZXM7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgT3V0cHV0
VHlwZT4gU2Nyb2xsU25hcE9mZnNldHNJbmZvPE91dHB1dFR5cGU+IGNvbnZlcnRVbml0cyhmbG9h
dCBkZXZpY2VTY2FsZUZhY3RvciA9IDAuMCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3Rk
OjpwYWlyPFQsIHVuc2lnbmVkPiBjbG9zZXN0U25hcE9mZnNldChTY3JvbGxFdmVudEF4aXMsIFQg
c2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIGZsb2F0IHZlbG9jaXR5LCBPcHRpb25hbDxUPiBvcmln
aW5hbFBvc2l0aW9uRm9yRGlyZWN0aW9uYWxTbmFwcGluZyA9IFdURjo6bnVsbG9wdCkgY29uc3Q7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3V0cHV0VHlwZT4gT3V0cHV0VHlwZSBjb252ZXJ0VW5p
dHMoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSAwLjApIGNvbnN0OworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFNpemVUeXBlPgorICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxVbml0VHlwZSwg
dW5zaWduZWQ+IGNsb3Nlc3RTbmFwT2Zmc2V0KFNjcm9sbEV2ZW50QXhpcywgY29uc3QgU2l6ZVR5
cGUmIHZpZXdwb3J0U2l6ZSwgVW5pdFR5cGUgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIGZsb2F0
IHZlbG9jaXR5LCBPcHRpb25hbDxVbml0VHlwZT4gb3JpZ2luYWxQb3NpdGlvbkZvckRpcmVjdGlv
bmFsU25hcHBpbmcgPSBXVEY6Om51bGxvcHQpIGNvbnN0OwogfTsKIAotdXNpbmcgTGF5b3V0U2Ny
b2xsU25hcE9mZnNldHNJbmZvID0gU2Nyb2xsU25hcE9mZnNldHNJbmZvPExheW91dFVuaXQ+Owot
dXNpbmcgRmxvYXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8gPSBTY3JvbGxTbmFwT2Zmc2V0c0luZm88
ZmxvYXQ+OwordXNpbmcgTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvID0gU2Nyb2xsU25hcE9m
ZnNldHNJbmZvPExheW91dFVuaXQsIExheW91dFJlY3Q+OwordXNpbmcgRmxvYXRTY3JvbGxTbmFw
T2Zmc2V0c0luZm8gPSBTY3JvbGxTbmFwT2Zmc2V0c0luZm88ZmxvYXQsIEZsb2F0UmVjdD47CiAK
IHRlbXBsYXRlIDw+IHRlbXBsYXRlIDw+CiBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8gRmxv
YXRTY3JvbGxTbmFwT2Zmc2V0c0luZm86OmNvbnZlcnRVbml0cyhmbG9hdCAvKiB1bnVzZWRTY2Fs
ZUZhY3RvciAqLykgY29uc3Q7Ci10ZW1wbGF0ZSA8PgotV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWly
PGZsb2F0LCB1bnNpZ25lZD4gRmxvYXRTY3JvbGxTbmFwT2Zmc2V0c0luZm86OmNsb3Nlc3RTbmFw
T2Zmc2V0KFNjcm9sbEV2ZW50QXhpcywgZmxvYXQgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIGZs
b2F0IHZlbG9jaXR5LCBPcHRpb25hbDxmbG9hdD4gb3JpZ2luYWxQb3NpdGlvbkZvckRpcmVjdGlv
bmFsU25hcHBpbmcpIGNvbnN0OwordGVtcGxhdGUgPD4gdGVtcGxhdGUgPD4KK1dFQkNPUkVfRVhQ
T1JUIHN0ZDo6cGFpcjxmbG9hdCwgdW5zaWduZWQ+IEZsb2F0U2Nyb2xsU25hcE9mZnNldHNJbmZv
OjpjbG9zZXN0U25hcE9mZnNldChTY3JvbGxFdmVudEF4aXMsIGNvbnN0IEZsb2F0U2l6ZSYgdmll
d3BvcnRTaXplLCBmbG9hdCBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCwgZmxvYXQgdmVsb2NpdHks
IE9wdGlvbmFsPGZsb2F0PiBvcmlnaW5hbFBvc2l0aW9uRm9yRGlyZWN0aW9uYWxTbmFwcGluZykg
Y29uc3Q7CisKIAogdGVtcGxhdGUgPD4gdGVtcGxhdGUgPD4KIEZsb2F0U2Nyb2xsU25hcE9mZnNl
dHNJbmZvIExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6Y29udmVydFVuaXRzKGZsb2F0IGRl
dmljZVNjYWxlRmFjdG9yKSBjb25zdDsKLXRlbXBsYXRlIDw+Ci1XRUJDT1JFX0VYUE9SVCBzdGQ6
OnBhaXI8TGF5b3V0VW5pdCwgdW5zaWduZWQ+IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6
Y2xvc2VzdFNuYXBPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzLCBMYXlvdXRVbml0IHNjcm9sbERlc3Rp
bmF0aW9uT2Zmc2V0LCBmbG9hdCB2ZWxvY2l0eSwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gb3JpZ2lu
YWxQb3NpdGlvbkZvckRpcmVjdGlvbmFsU25hcHBpbmcpIGNvbnN0OwordGVtcGxhdGUgPD4gdGVt
cGxhdGUgPD4KK1dFQkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxMYXlvdXRVbml0LCB1bnNpZ25lZD4g
TGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvOjpjbG9zZXN0U25hcE9mZnNldChTY3JvbGxFdmVu
dEF4aXMsIGNvbnN0IExheW91dFNpemUmIHZpZXdwb3J0U2l6ZSwgTGF5b3V0VW5pdCBzY3JvbGxE
ZXN0aW5hdGlvbk9mZnNldCwgZmxvYXQgdmVsb2NpdHksIE9wdGlvbmFsPExheW91dFVuaXQ+IG9y
aWdpbmFsUG9zaXRpb25Gb3JEaXJlY3Rpb25hbFNuYXBwaW5nKSBjb25zdDsKKwogCiBjb25zdCB1
bnNpZ25lZCBpbnZhbGlkU25hcE9mZnNldEluZGV4ID0gVUlOVF9NQVg7CiAKQEAgLTExNywxMyAr
MTA2LDYgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChXVEY6OlRleHRTdHJlYW0mIHRzLCBTbmFwT2Zmc2UKICAgICByZXR1cm4gdHM7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBTY3JvbGxPZmZzZXRSYW5nZTxUPiYgcmFuZ2UpCi17Ci0gICAgdHMgPDwgInN0YXJ0
OiAiIDw8IHJhbmdlLnN0YXJ0IDw8ICIgZW5kOiAiIDw8IHJhbmdlLmVuZDsKLSAgICByZXR1cm4g
dHM7Ci19Ci0KIH07IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoQ1NT
X1NDUk9MTF9TTkFQKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
bWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZU1hYy5tbQppbmRleCBhNWI0OGMyMDM0MTVhYjdiMDljZTljM2ZhOTljMTVlYTYzNzQwZTQ1Li5j
MDRlNTFiMzQ5NGY3YzM3MTAyODIwMjliNWNmOTFjMzY0YjcwZGQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVE
ZWxlZ2F0ZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5tbQpAQCAtNjUsNyArNjUsNyBAQCB2
b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OnVwZGF0ZUZyb21TdGF0
ZU5vZGUoY29uc3QgU2Nyb2xsaW5nUwogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKICAg
ICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0
ZU5vZGU6OlByb3BlcnR5OjpTbmFwT2Zmc2V0c0luZm8pKQotICAgICAgICBtX3Njcm9sbENvbnRy
b2xsZXIudXBkYXRlU2Nyb2xsU25hcFBvaW50cyhzY3JvbGxpbmdTdGF0ZU5vZGUuc25hcE9mZnNl
dHNJbmZvKCkuY29udmVydFVuaXRzPExheW91dFVuaXQ+KCkpOworICAgICAgICBtX3Njcm9sbENv
bnRyb2xsZXIudXBkYXRlU2Nyb2xsU25hcFBvaW50cyhzY3JvbGxpbmdTdGF0ZU5vZGUuc25hcE9m
ZnNldHNJbmZvKCkuY29udmVydFVuaXRzPExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbz4oKSk7
CiAKICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxp
bmdTdGF0ZU5vZGU6OlByb3BlcnR5OjpDdXJyZW50SG9yaXpvbnRhbFNuYXBPZmZzZXRJbmRleCkp
CiAgICAgICAgIG1fc2Nyb2xsQ29udHJvbGxlci5zZXRBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JB
eGlzKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgc2Nyb2xsaW5nU3RhdGVOb2RlLmN1cnJl
bnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9uaWNvc2lhL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdh
dGVOaWNvc2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL25pY29zaWEvU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU5pY29zaWEuY3BwCmluZGV4IDc5MzhiMWE5
MDQ4Mzc5MDQ2OWQ4MTYyM2NlMGZjNGNmOTIxMjY3OTAuLjkyNThlN2VhYTRlZGQ0N2M1ZTQwY2Uz
NmEwMmVlZDg2MWEzYTQ4MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU5pY29zaWEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU5pY29zaWEuY3BwCkBAIC0xNzMsOCArMTczLDggQEAgV2hl
ZWxFdmVudEhhbmRsaW5nUmVzdWx0IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVO
aWNvc2lhOjpoYW5kbGVXaGVlbEUKICAgICAgICAgRmxvYXRQb2ludCBuZXdGbG9hdE9mZnNldCA9
IHNjcm9sbGluZ05vZGUoKS5jdXJyZW50U2Nyb2xsT2Zmc2V0KCkgKyBGbG9hdFNpemUoZGVsdGFY
LCBkZWx0YVkpOwogICAgICAgICBhdXRvIG5ld09mZnNldCA9IExheW91dFBvaW50KG5ld0Zsb2F0
T2Zmc2V0LngoKSAvIHNjYWxlLCBuZXdGbG9hdE9mZnNldC55KCkgLyBzY2FsZSk7CiAKLSAgICAg
ICAgYXV0byBvZmZzZXRYID0gc2Nyb2xsaW5nTm9kZSgpLnNuYXBPZmZzZXRzSW5mbygpLmNsb3Nl
c3RTbmFwT2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgbmV3T2Zmc2V0LngoKSwg
ZGVsdGFYLCBvcmlnaW5hbE9mZnNldC54KCkpLmZpcnN0OwotICAgICAgICBhdXRvIG9mZnNldFkg
PSBzY3JvbGxpbmdOb2RlKCkuc25hcE9mZnNldHNJbmZvKCkuY2xvc2VzdFNuYXBPZmZzZXQoU2Ny
b2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgbmV3T2Zmc2V0LnkoKSwgZGVsdGFZLCBvcmlnaW5hbE9m
ZnNldC55KCkpLmZpcnN0OworICAgICAgICBhdXRvIG9mZnNldFggPSBzY3JvbGxpbmdOb2RlKCku
c25hcE9mZnNldHNJbmZvKCkuY2xvc2VzdFNuYXBPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jp
em9udGFsLCBzY3JvbGxhYmxlQXJlYVNpemUoKSwgbmV3T2Zmc2V0LngoKSwgZGVsdGFYLCBvcmln
aW5hbE9mZnNldC54KCkpLmZpcnN0OworICAgICAgICBhdXRvIG9mZnNldFkgPSBzY3JvbGxpbmdO
b2RlKCkuc25hcE9mZnNldHNJbmZvKCkuY2xvc2VzdFNuYXBPZmZzZXQoU2Nyb2xsRXZlbnRBeGlz
OjpWZXJ0aWNhbCwgc2Nyb2xsYWJsZUFyZWFTaXplKCksIG5ld09mZnNldC55KCksIGRlbHRhWSwg
b3JpZ2luYWxPZmZzZXQueSgpKS5maXJzdDsKIAogICAgICAgICBkZWx0YVggPSAob2Zmc2V0WCAt
IG9yaWdpbmFsT2Zmc2V0LngoKSkgKiBzY2FsZTsKICAgICAgICAgZGVsdGFZID0gKG9mZnNldFkg
LSBvcmlnaW5hbE9mZnNldC55KCkpICogc2NhbGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbENvbnRyb2xsZXIuY3BwCmluZGV4IGZiMzQ1ZDdhNjhmYzlkMTZkZGVmNWQ0ODllN2Zl
NzYxODc4Y2U0NGUuLmYwYWRlNzM1NDc5M2EwNTkzZWRiODUzYWI0YjQyZDc5ZDZkYjExYjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwCkBAIC0xMTYs
NyArMTE2LDggQEAgdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzZXROZWFyZXN0U2Nyb2xsU25hcElu
ZGV4Rm9yQXhpc0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXMKIAogICAgIExheW91dFVuaXQgY2xh
bXBlZE9mZnNldCA9IHN0ZDo6bWluKHN0ZDo6bWF4KExheW91dFVuaXQob2Zmc2V0IC8gc2NhbGVG
YWN0b3IpLCBzbmFwT2Zmc2V0cy5maXJzdCgpLm9mZnNldCksIHNuYXBPZmZzZXRzLmxhc3QoKS5v
ZmZzZXQpOwogCi0gICAgdW5zaWduZWQgYWN0aXZlSW5kZXggPSBzbmFwU3RhdGUuc25hcE9mZnNl
dEluZm8oKS5jbG9zZXN0U25hcE9mZnNldChheGlzLCBjbGFtcGVkT2Zmc2V0LCAwKS5zZWNvbmQ7
CisgICAgTGF5b3V0U2l6ZSB2aWV3cG9ydFNpemUobV9jbGllbnQudmlld3BvcnRTaXplKCkud2lk
dGgoKSwgbV9jbGllbnQudmlld3BvcnRTaXplKCkuaGVpZ2h0KCkpOworICAgIHVuc2lnbmVkIGFj
dGl2ZUluZGV4ID0gc25hcFN0YXRlLnNuYXBPZmZzZXRJbmZvKCkuY2xvc2VzdFNuYXBPZmZzZXQo
YXhpcywgdmlld3BvcnRTaXplLCBjbGFtcGVkT2Zmc2V0LCAwKS5zZWNvbmQ7CiAgICAgaWYgKGFj
dGl2ZUluZGV4ID09IGFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoYXhpcykpCiAgICAgICAg
IHJldHVybjsKIApAQCAtMTM3LDcgKzEzOCw4IEBAIGZsb2F0IFNjcm9sbENvbnRyb2xsZXI6OmFk
anVzdFNjcm9sbERlc3RpbmF0aW9uKFNjcm9sbEV2ZW50QXhpcyBheGlzLCBmbG9hdCBkZXN0CiAg
ICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gb3JpZ2luYWxPZmZzZXRJbkxheW91dFVuaXRzOwogICAg
IGlmIChvcmlnaW5hbE9mZnNldC5oYXNWYWx1ZSgpKQogICAgICAgICBvcmlnaW5hbE9mZnNldElu
TGF5b3V0VW5pdHMgPSBMYXlvdXRVbml0KCpvcmlnaW5hbE9mZnNldCAvIG1fY2xpZW50LnBhZ2VT
Y2FsZUZhY3RvcigpKTsKLSAgICBMYXlvdXRVbml0IG9mZnNldCA9IHNuYXBTdGF0ZS5zbmFwT2Zm
c2V0SW5mbygpLmNsb3Nlc3RTbmFwT2Zmc2V0KGF4aXMsIExheW91dFVuaXQoZGVzdGluYXRpb25P
ZmZzZXQgLyBtX2NsaWVudC5wYWdlU2NhbGVGYWN0b3IoKSksIHZlbG9jaXR5LCBvcmlnaW5hbE9m
ZnNldEluTGF5b3V0VW5pdHMpLmZpcnN0OworICAgIExheW91dFNpemUgdmlld3BvcnRTaXplKG1f
Y2xpZW50LnZpZXdwb3J0U2l6ZSgpLndpZHRoKCksIG1fY2xpZW50LnZpZXdwb3J0U2l6ZSgpLmhl
aWdodCgpKTsKKyAgICBMYXlvdXRVbml0IG9mZnNldCA9IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0SW5m
bygpLmNsb3Nlc3RTbmFwT2Zmc2V0KGF4aXMsIHZpZXdwb3J0U2l6ZSwgTGF5b3V0VW5pdChkZXN0
aW5hdGlvbk9mZnNldCAvIG1fY2xpZW50LnBhZ2VTY2FsZUZhY3RvcigpKSwgdmVsb2NpdHksIG9y
aWdpbmFsT2Zmc2V0SW5MYXlvdXRVbml0cykuZmlyc3Q7CiAgICAgcmV0dXJuIG9mZnNldCAqIG1f
Y2xpZW50LnBhZ2VTY2FsZUZhY3RvcigpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5jcHAKaW5kZXggZGE5NzkyZDA3NThmZDFj
NTc3MmY3ZjYzZDEyNjkyN2VjMDA2NTcyZS4uNDE4NTIxMzRhZTk3ZGY3ODA1OGU2YTY4YmJlMjc1
Mjg1YTg4YThjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsU25h
cEFuaW1hdG9yU3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFNu
YXBBbmltYXRvclN0YXRlLmNwcApAQCAtNTEsOCArNTEsOCBAQCB2b2lkIFNjcm9sbFNuYXBBbmlt
YXRvclN0YXRlOjpzZXR1cEFuaW1hdGlvbkZvclN0YXRlKFNjcm9sbFNuYXBTdGF0ZSBzdGF0ZSwg
Y29ucwogCiAgICAgbV9tb21lbnR1bUNhbGN1bGF0b3IgPSBTY3JvbGxpbmdNb21lbnR1bUNhbGN1
bGF0b3I6OmNyZWF0ZSh2aWV3cG9ydFNpemUsIGNvbnRlbnRTaXplLCBpbml0aWFsT2Zmc2V0LCBp
bml0aWFsRGVsdGEsIGluaXRpYWxWZWxvY2l0eSk7CiAgICAgYXV0byBwcmVkaWN0ZWRTY3JvbGxU
YXJnZXQgPSBtX21vbWVudHVtQ2FsY3VsYXRvci0+cHJlZGljdGVkRGVzdGluYXRpb25PZmZzZXQo
KTsKLSAgICBmbG9hdCB0YXJnZXRPZmZzZXRYID0gdGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZzZXQo
U2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBjb250ZW50U2l6ZS53aWR0aCgpIC0gdmlld3Bv
cnRTaXplLndpZHRoKCksIGluaXRpYWxPZmZzZXQueCgpLCBwcmVkaWN0ZWRTY3JvbGxUYXJnZXQu
d2lkdGgoKSwgcGFnZVNjYWxlLCBpbml0aWFsRGVsdGEud2lkdGgoKSwgbV9hY3RpdmVTbmFwSW5k
ZXhYKTsKLSAgICBmbG9hdCB0YXJnZXRPZmZzZXRZID0gdGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZz
ZXQoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgY29udGVudFNpemUuaGVpZ2h0KCkgLSB2aWV3
cG9ydFNpemUuaGVpZ2h0KCksIGluaXRpYWxPZmZzZXQueSgpLCBwcmVkaWN0ZWRTY3JvbGxUYXJn
ZXQuaGVpZ2h0KCksIHBhZ2VTY2FsZSwgaW5pdGlhbERlbHRhLmhlaWdodCgpLCBtX2FjdGl2ZVNu
YXBJbmRleFkpOworICAgIGZsb2F0IHRhcmdldE9mZnNldFggPSB0YXJnZXRPZmZzZXRGb3JTdGFy
dE9mZnNldChTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIHZpZXdwb3J0U2l6ZSwgY29udGVu
dFNpemUud2lkdGgoKSAtIHZpZXdwb3J0U2l6ZS53aWR0aCgpLCBpbml0aWFsT2Zmc2V0LngoKSwg
cHJlZGljdGVkU2Nyb2xsVGFyZ2V0LndpZHRoKCksIHBhZ2VTY2FsZSwgaW5pdGlhbERlbHRhLndp
ZHRoKCksIG1fYWN0aXZlU25hcEluZGV4WCk7CisgICAgZmxvYXQgdGFyZ2V0T2Zmc2V0WSA9IHRh
cmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIHZpZXdw
b3J0U2l6ZSwgY29udGVudFNpemUuaGVpZ2h0KCkgLSB2aWV3cG9ydFNpemUuaGVpZ2h0KCksIGlu
aXRpYWxPZmZzZXQueSgpLCBwcmVkaWN0ZWRTY3JvbGxUYXJnZXQuaGVpZ2h0KCksIHBhZ2VTY2Fs
ZSwgaW5pdGlhbERlbHRhLmhlaWdodCgpLCBtX2FjdGl2ZVNuYXBJbmRleFkpOwogICAgIG1fbW9t
ZW50dW1DYWxjdWxhdG9yLT5zZXRSZXRhcmdldGVkU2Nyb2xsT2Zmc2V0KHsgdGFyZ2V0T2Zmc2V0
WCwgdGFyZ2V0T2Zmc2V0WSB9KTsKICAgICBtX3N0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5v
dygpOwogICAgIG1fY3VycmVudFN0YXRlID0gc3RhdGU7CkBAIC05MSw3ICs5MSw3IEBAIEZsb2F0
UG9pbnQgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OmN1cnJlbnRBbmltYXRlZFNjcm9sbE9mZnNl
dChib29sJiBpc0FuaW1hdGlvCiAgICAgcmV0dXJuIG1fbW9tZW50dW1DYWxjdWxhdG9yLT5zY3Jv
bGxPZmZzZXRBZnRlckVsYXBzZWRUaW1lKGVsYXBzZWRUaW1lKTsKIH0KIAotZmxvYXQgU2Nyb2xs
U25hcEFuaW1hdG9yU3RhdGU6OnRhcmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0KFNjcm9sbEV2ZW50
QXhpcyBheGlzLCBmbG9hdCBtYXhTY3JvbGxPZmZzZXQsIGZsb2F0IHN0YXJ0T2Zmc2V0LCBmbG9h
dCBwcmVkaWN0ZWRPZmZzZXQsIGZsb2F0IHBhZ2VTY2FsZSwgZmxvYXQgaW5pdGlhbERlbHRhLCB1
bnNpZ25lZCYgb3V0QWN0aXZlU25hcEluZGV4KSBjb25zdAorZmxvYXQgU2Nyb2xsU25hcEFuaW1h
dG9yU3RhdGU6OnRhcmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0KFNjcm9sbEV2ZW50QXhpcyBheGlz
LCBjb25zdCBGbG9hdFNpemUmIHZpZXdwb3J0U2l6ZSwgZmxvYXQgbWF4U2Nyb2xsT2Zmc2V0LCBm
bG9hdCBzdGFydE9mZnNldCwgZmxvYXQgcHJlZGljdGVkT2Zmc2V0LCBmbG9hdCBwYWdlU2NhbGUs
IGZsb2F0IGluaXRpYWxEZWx0YSwgdW5zaWduZWQmIG91dEFjdGl2ZVNuYXBJbmRleCkgY29uc3QK
IHsKICAgICBjb25zdCBhdXRvJiBzbmFwT2Zmc2V0cyA9IG1fc25hcE9mZnNldHNJbmZvLm9mZnNl
dHNGb3JBeGlzKGF4aXMpOwogICAgIGlmIChzbmFwT2Zmc2V0cy5pc0VtcHR5KCkpIHsKQEAgLTk5
LDcgKzk5LDcgQEAgZmxvYXQgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OnRhcmdldE9mZnNldEZv
clN0YXJ0T2Zmc2V0KFNjcm9sbEV2ZW50QXhpcyBheGlzLAogICAgICAgICByZXR1cm4gY2xhbXBU
bzxmbG9hdD4ocHJlZGljdGVkT2Zmc2V0LCAwLCBtYXhTY3JvbGxPZmZzZXQpOwogICAgIH0KIAot
ICAgIGZsb2F0IHRhcmdldE9mZnNldCA9IG1fc25hcE9mZnNldHNJbmZvLmNsb3Nlc3RTbmFwT2Zm
c2V0KGF4aXMsIExheW91dFVuaXQocHJlZGljdGVkT2Zmc2V0IC8gcGFnZVNjYWxlKSwgaW5pdGlh
bERlbHRhLCBMYXlvdXRVbml0KHN0YXJ0T2Zmc2V0IC8gcGFnZVNjYWxlKSkuZmlyc3Q7CisgICAg
ZmxvYXQgdGFyZ2V0T2Zmc2V0ID0gbV9zbmFwT2Zmc2V0c0luZm8uY2xvc2VzdFNuYXBPZmZzZXQo
YXhpcywgTGF5b3V0U2l6ZSB7IHZpZXdwb3J0U2l6ZSB9LCBMYXlvdXRVbml0KHByZWRpY3RlZE9m
ZnNldCAvIHBhZ2VTY2FsZSksIGluaXRpYWxEZWx0YSwgTGF5b3V0VW5pdChzdGFydE9mZnNldCAv
IHBhZ2VTY2FsZSkpLmZpcnN0OwogICAgIGZsb2F0IG1pbmltdW1UYXJnZXRPZmZzZXQgPSBzdGQ6
Om1heDxmbG9hdD4oMCwgc25hcE9mZnNldHMuZmlyc3QoKS5vZmZzZXQpOwogICAgIGZsb2F0IG1h
eGltdW1UYXJnZXRPZmZzZXQgPSBzdGQ6Om1pbjxmbG9hdD4obWF4U2Nyb2xsT2Zmc2V0LCBzbmFw
T2Zmc2V0cy5sYXN0KCkub2Zmc2V0KTsKICAgICB0YXJnZXRPZmZzZXQgPSBjbGFtcFRvPGZsb2F0
Pih0YXJnZXRPZmZzZXQsIG1pbmltdW1UYXJnZXRPZmZzZXQsIG1heGltdW1UYXJnZXRPZmZzZXQp
OwpAQCAtMTExLDEwICsxMTEsNiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZSYgc3RhdGUpCiAgICAgdHMgPDwgIlNj
cm9sbFNuYXBBbmltYXRvclN0YXRlIjsKICAgICB0cy5kdW1wUHJvcGVydHkoInNuYXAgb2Zmc2V0
cyB4Iiwgc3RhdGUuc25hcE9mZnNldHNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRh
bCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgic25hcCBvZmZzZXRzIHkiLCBzdGF0ZS5zbmFwT2Zm
c2V0c0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCkpOwotICAgIGlmICghc3RhdGUu
c25hcE9mZnNldFJhbmdlc0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKS5pc0Vt
cHR5KCkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic25hcCBvZmZzZXRzIHJhbmdlcyB4Iiwg
c3RhdGUuc25hcE9mZnNldFJhbmdlc0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFs
KSk7Ci0gICAgaWYgKCFzdGF0ZS5zbmFwT2Zmc2V0UmFuZ2VzRm9yQXhpcyhTY3JvbGxFdmVudEF4
aXM6OlZlcnRpY2FsKS5pc0VtcHR5KCkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic25hcCBv
ZmZzZXRzIHJhbmdlcyB5Iiwgc3RhdGUuc25hcE9mZnNldFJhbmdlc0ZvckF4aXMoU2Nyb2xsRXZl
bnRBeGlzOjpWZXJ0aWNhbCkpOwogCiAgICAgdHMuZHVtcFByb3BlcnR5KCJhY3RpdmUgc25hcCBp
bmRleCB4Iiwgc3RhdGUuYWN0aXZlU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhv
cml6b250YWwpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImFjdGl2ZSBzbmFwIGluZGV4IHkiLCBz
dGF0ZS5hY3RpdmVTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0
YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5o
CmluZGV4IDFlNTViMzRjMzE5OGVlYmNhNDQ3NjU3ODMyOTUwNWJmMjU0YzE3NWUuLjZiNmQyMjc1
Y2ZhMzQ1YjlhMmI2YTY5ZWE4MTg5ZDY2NWQ2MTRjZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaApAQCAtNTcsMjUgKzU3LDkgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250
YWwgPyBtX3NuYXBPZmZzZXRzSW5mby5ob3Jpem9udGFsU25hcE9mZnNldHMgOiBtX3NuYXBPZmZz
ZXRzSW5mby52ZXJ0aWNhbFNuYXBPZmZzZXRzOwogICAgIH0KIAotICAgIGNvbnN0IFZlY3RvcjxT
Y3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4mIHNuYXBPZmZzZXRSYW5nZXNGb3JBeGlzKFNj
cm9sbEV2ZW50QXhpcyBheGlzKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGF4aXMgPT0g
U2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsID8gbV9zbmFwT2Zmc2V0c0luZm8uaG9yaXpvbnRh
bFNuYXBPZmZzZXRSYW5nZXMgOiBtX3NuYXBPZmZzZXRzSW5mby52ZXJ0aWNhbFNuYXBPZmZzZXRS
YW5nZXM7Ci0gICAgfQotCiAgICAgY29uc3QgTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvJiBz
bmFwT2Zmc2V0SW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc25hcE9mZnNldHNJbmZvOyB9CiAgICAg
dm9pZCBzZXRTbmFwT2Zmc2V0SW5mbyhjb25zdCBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8m
IG5ld0luZm8pIHsgbV9zbmFwT2Zmc2V0c0luZm8gPSBuZXdJbmZvOyB9CiAKLSAgICB2b2lkIHNl
dFNuYXBPZmZzZXRzQW5kUG9zaXRpb25SYW5nZXNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlz
LCBjb25zdCBWZWN0b3I8U25hcE9mZnNldDxMYXlvdXRVbml0Pj4mIHNuYXBPZmZzZXRzLCBjb25z
dCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+JiBzbmFwT2Zmc2V0UmFuZ2Vz
KQotICAgIHsKLSAgICAgICAgaWYgKGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFs
KSB7Ci0gICAgICAgICAgICBtX3NuYXBPZmZzZXRzSW5mby5ob3Jpem9udGFsU25hcE9mZnNldHMg
PSBzbmFwT2Zmc2V0czsKLSAgICAgICAgICAgIG1fc25hcE9mZnNldHNJbmZvLmhvcml6b250YWxT
bmFwT2Zmc2V0UmFuZ2VzID0gc25hcE9mZnNldFJhbmdlczsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIG1fc25hcE9mZnNldHNJbmZvLnZlcnRpY2FsU25hcE9mZnNldHMgPSBzbmFwT2Zm
c2V0czsKLSAgICAgICAgICAgIG1fc25hcE9mZnNldHNJbmZvLnZlcnRpY2FsU25hcE9mZnNldFJh
bmdlcyA9IHNuYXBPZmZzZXRSYW5nZXM7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBTY3JvbGxT
bmFwU3RhdGUgY3VycmVudFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50U3RhdGU7IH0K
IAogICAgIHVuc2lnbmVkIGFjdGl2ZVNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4
aXMpIGNvbnN0CkBAIC0xMDAsNyArODQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB0cmFuc2l0aW9u
VG9EZXN0aW5hdGlvblJlYWNoZWRTdGF0ZSgpOwogCiBwcml2YXRlOgotICAgIGZsb2F0IHRhcmdl
dE9mZnNldEZvclN0YXJ0T2Zmc2V0KFNjcm9sbEV2ZW50QXhpcywgZmxvYXQgbWF4U2Nyb2xsT2Zm
c2V0LCBmbG9hdCBzdGFydE9mZnNldCwgZmxvYXQgcHJlZGljdGVkT2Zmc2V0LCBmbG9hdCBwYWdl
U2NhbGUsIGZsb2F0IGluaXRpYWxEZWx0YSwgdW5zaWduZWQmIG91dEFjdGl2ZVNuYXBJbmRleCkg
Y29uc3Q7CisgICAgZmxvYXQgdGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZzZXQoU2Nyb2xsRXZlbnRB
eGlzLCBjb25zdCBGbG9hdFNpemUmIHZpZXdwb3J0U2l6ZSwgZmxvYXQgbWF4U2Nyb2xsT2Zmc2V0
LCBmbG9hdCBzdGFydE9mZnNldCwgZmxvYXQgcHJlZGljdGVkT2Zmc2V0LCBmbG9hdCBwYWdlU2Nh
bGUsIGZsb2F0IGluaXRpYWxEZWx0YSwgdW5zaWduZWQmIG91dEFjdGl2ZVNuYXBJbmRleCkgY29u
c3Q7CiAgICAgdm9pZCB0ZWFyZG93bkFuaW1hdGlvbkZvclN0YXRlKFNjcm9sbFNuYXBTdGF0ZSk7
CiAgICAgdm9pZCBzZXR1cEFuaW1hdGlvbkZvclN0YXRlKFNjcm9sbFNuYXBTdGF0ZSwgY29uc3Qg
RmxvYXRTaXplJiBjb250ZW50U2l6ZSwgY29uc3QgRmxvYXRTaXplJiB2aWV3cG9ydFNpemUsIGZs
b2F0IHBhZ2VTY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgaW5pdGlhbE9mZnNldCwgY29uc3QgRmxv
YXRTaXplJiBpbml0aWFsVmVsb2NpdHksIGNvbnN0IEZsb2F0U2l6ZSYgaW5pdGlhbERlbHRhKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24u
Y3BwCmluZGV4IGVmNTZlM2E4Y2ViZDM3Njk1NzU4OTJiYjE0OWNjYmJjYTA0N2YzZTIuLjFjODIx
ZWViN2NkYmIxNGUwM2FhNGQ0ODQ1YmE0MTI1ODllZDY4MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRy
YW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUv
UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5jcHAKQEAgLTUzMiw2ICs1MzIs
NyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8U25hcE9mZnNldDxmbG9hdD4+OjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgU25hcE9mZnNldAogewogICAgIGVuY29kZXIgPDwgb2Zmc2V0Lm9m
ZnNldDsKICAgICBlbmNvZGVyIDw8IG9mZnNldC5zdG9wOworICAgIGVuY29kZXIgPDwgb2Zmc2V0
LnNuYXBBcmVhSW5kZXg7CiB9CiAKIGJvb2wgQXJndW1lbnRDb2RlcjxTbmFwT2Zmc2V0PGZsb2F0
Pj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTbmFwT2Zmc2V0PGZsb2F0PiYgb2Zmc2V0KQpA
QCAtNTQwLDYgKzU0MSw4IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxTbmFwT2Zmc2V0PGZsb2F0Pj46
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTbmFwT2Zmc2V0PGZsb2F0CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG9mZnNldC5zdG9wKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUob2Zmc2V0LnNuYXBBcmVhSW5k
ZXgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTU0
OCw4ICs1NTEsNyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8RmxvYXRTY3JvbGxTbmFwT2Zmc2V0c0lu
Zm8+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgRgogewogICAgIGVuY29kZXIgPDwg
aW5mby5ob3Jpem9udGFsU25hcE9mZnNldHM7CiAgICAgZW5jb2RlciA8PCBpbmZvLnZlcnRpY2Fs
U25hcE9mZnNldHM7Ci0gICAgZW5jb2RlciA8PCBpbmZvLmhvcml6b250YWxTbmFwT2Zmc2V0UmFu
Z2VzOwotICAgIGVuY29kZXIgPDwgaW5mby52ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXM7CisgICAg
ZW5jb2RlciA8PCBpbmZvLnNuYXBBcmVhczsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVyPEZsb2F0
U2Nyb2xsU25hcE9mZnNldHNJbmZvPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEZsb2F0U2Ny
b2xsU25hcE9mZnNldHNJbmZvJiBpbmZvKQpAQCAtNTU4LDkgKzU2MCw3IEBAIGJvb2wgQXJndW1l
bnRDb2RlcjxGbG9hdFNjcm9sbFNuYXBPZmZzZXRzSW5mbz46OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyLCBGbG9hdFNjCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGluZm8udmVydGljYWxTbmFwT2Zmc2V0cykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGluZm8uaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbmZvLnZlcnRp
Y2FsU25hcE9mZnNldFJhbmdlcykpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbmZvLnNuYXBB
cmVhcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAgYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCmluZGV4IDljZTYz
MDk2M2IxNTMxYjlmYTFmOTAyMTc5MTg2MTBhZjgzMjJiNWIuLjNmY2M0ZGRlZmYyODA5MGEzMDZk
NTE5MjQ0NTNjZGYyMGYzY2Y1OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YkNvcmVBcmd1bWVudENvZGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmNwcApAQCAtMjg0MCwzMiArMjg0MCw2IEBAIGJvb2wgQXJndW1lbnRD
b2RlcjxTZXJ2aWNlV29ya2VyT3JDbGllbnRJZGVudGlmaWVyPjo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIsIFNlCiAKICNlbmRpZgogCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLQotdm9p
ZCBBcmd1bWVudENvZGVyPFNjcm9sbE9mZnNldFJhbmdlPGZsb2F0Pj46OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBTY3JvbGxPZmZzZXRSYW5nZTxmbG9hdD4mIHJhbmdlKQotewotICAg
IGVuY29kZXIgPDwgcmFuZ2Uuc3RhcnQ7Ci0gICAgZW5jb2RlciA8PCByYW5nZS5lbmQ7Ci19Ci0K
LWF1dG8gQXJndW1lbnRDb2RlcjxTY3JvbGxPZmZzZXRSYW5nZTxmbG9hdD4+OjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikgLT4gT3B0aW9uYWw8V2ViQ29yZTo6U2Nyb2xsT2Zmc2V0UmFuZ2U8Zmxv
YXQ+PgotewotICAgIFdlYkNvcmU6OlNjcm9sbE9mZnNldFJhbmdlPGZsb2F0PiByYW5nZTsKLSAg
ICBmbG9hdCBzdGFydDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXJ0KSkKLSAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIGZsb2F0IGVuZDsKLSAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGVuZCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByYW5nZS5z
dGFydCA9IHN0YXJ0OwotICAgIHJhbmdlLmVuZCA9IGVuZDsKLSAgICByZXR1cm4gcmFuZ2U7Ci19
Ci0KLSNlbmRpZgotCiB2b2lkIEFyZ3VtZW50Q29kZXI8TWVkaWFTZWxlY3Rpb25PcHRpb24+Ojpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgTWVkaWFTZWxlY3Rpb25PcHRpb24mIG9wdGlv
bikKIHsKICAgICBlbmNvZGVyIDw8IG9wdGlvbi5kaXNwbGF5TmFtZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKaW5kZXggYmE2ZGE3OTA0NGZlN2RhMGIw
YjU1N2IwZmJkNzdlZjdmZTkzN2UxNS4uNjA4ODllYWU0YzczNGI3ZDIwNGMxYmE5NWM4OTY4YjFk
YTYwZGIwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmgKQEAgLTc0MiwxNSArNzQyLDYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxX
ZWJDb3JlOjpTZXJ2aWNlV29ya2VyT3JDbGllbnRJZGVudGlmaWVyPiB7CiAKICNlbmRpZgogCi0j
aWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRD
b2RlcjxXZWJDb3JlOjpTY3JvbGxPZmZzZXRSYW5nZTxmbG9hdD4+IHsKLSAgICBzdGF0aWMgdm9p
ZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlNjcm9sbE9mZnNldFJhbmdlPGZsb2F0
PiYpOwotICAgIHN0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpTY3JvbGxPZmZzZXRSYW5nZTxmbG9h
dD4+IGRlY29kZShEZWNvZGVyJik7Ci19OwotCi0jZW5kaWYKLQogdGVtcGxhdGU8PiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpNZWRpYVNlbGVjdGlvbk9wdGlvbj4gewogICAgIHN0YXRp
YyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRp
b24mKTsKICAgICBzdGF0aWMgT3B0aW9uYWw8V2ViQ29yZTo6TWVkaWFTZWxlY3Rpb25PcHRpb24+
IGRlY29kZShEZWNvZGVyJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9S
ZW1vdGVMYXllclRyZWUvaW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1JlbW90ZVNjcm9s
bGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW0KaW5kZXggMTE2NzVmMzI0NWJhMTFhYzM5OGZkYmEy
ZmNlMzYzYmFiZjBhYTQ1NC4uY2M0ZWFkNjU3M2VmMDAzZWVmOTBmNzAyMzM3MzExZDMwMzM4YTll
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lv
cy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0
b3JQcm94eUlPUy5tbQpAQCAtMjMwLDcgKzIzMCw3IEBAIGZsb2F0IFJlbW90ZVNjcm9sbGluZ0Nv
b3JkaW5hdG9yUHJveHk6OmNsb3Nlc3RTbmFwT2Zmc2V0Rm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFNj
CiAKICAgICBmbG9hdCBzY2FsZWRTY3JvbGxEZXN0aW5hdGlvbiA9IHNjcm9sbERlc3RpbmF0aW9u
IC8gbV93ZWJQYWdlUHJveHkuZGlzcGxheWVkQ29udGVudFNjYWxlKCk7CiAgICAgZmxvYXQgcmF3
Q2xvc2VzdFNuYXBPZmZzZXQ7Ci0gICAgc3RkOjp0aWUocmF3Q2xvc2VzdFNuYXBPZmZzZXQsIGN1
cnJlbnRJbmRleCkgPSBzbmFwT2Zmc2V0c0luZm8uY2xvc2VzdFNuYXBPZmZzZXQoYXhpcywgc2Nh
bGVkU2Nyb2xsRGVzdGluYXRpb24sIHZlbG9jaXR5KTsKKyAgICBzdGQ6OnRpZShyYXdDbG9zZXN0
U25hcE9mZnNldCwgY3VycmVudEluZGV4KSA9IHNuYXBPZmZzZXRzSW5mby5jbG9zZXN0U25hcE9m
ZnNldChheGlzLCByb290U2Nyb2xsaW5nTm9kZS0+bGF5b3V0Vmlld3BvcnQoKS5zaXplKCksIHNj
YWxlZFNjcm9sbERlc3RpbmF0aW9uLCB2ZWxvY2l0eSk7CiAgICAgcmV0dXJuIHJhd0Nsb3Nlc3RT
bmFwT2Zmc2V0ICogbV93ZWJQYWdlUHJveHkuZGlzcGxheWVkQ29udGVudFNjYWxlKCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3Mv
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVE
ZWxlZ2F0ZUlPUy5tbQppbmRleCA4ODBjMDMxOTVmODljNGJkMTNkZDZhNjQ2NTIzZjFkZjg0Yzk1
NjRlLi44ZmM2NjE1Zjc2ZjNjOWZhZDAwZjU5NGIzNGIxM2RkNDRjOTIzY2QwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRl
SU9TLm1tCkBAIC0xMDYsMTYgKzEwNiwxNyBAQCAtICh2b2lkKXNjcm9sbFZpZXdXaWxsRW5kRHJh
Z2dpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcgd2l0aFZlbG9jaXR5OihDR1BvaQogICAg
IHVuc2lnbmVkIG9yaWdpbmFsSG9yaXpvbnRhbFNuYXBQb3NpdGlvbiA9IF9zY3JvbGxpbmdUcmVl
Tm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJ
bmRleCgpOwogICAgIHVuc2lnbmVkIG9yaWdpbmFsVmVydGljYWxTbmFwUG9zaXRpb24gPSBfc2Ny
b2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRWZXJ0aWNhbFNu
YXBQb2ludEluZGV4KCk7CiAKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgdmlld3BvcnRTaXplKHN0
YXRpY19jYXN0PGZsb2F0PihDR1JlY3RHZXRXaWR0aChbc2Nyb2xsVmlldyBib3VuZHNdKSksIHN0
YXRpY19jYXN0PGZsb2F0PihDR1JlY3RHZXRIZWlnaHQoW3Njcm9sbFZpZXcgYm91bmRzXSkpKTsK
ICAgICBjb25zdCBhdXRvJiBzbmFwT2Zmc2V0c0luZm8gPSBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxl
Z2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnNuYXBPZmZzZXRzSW5mbygpOwogICAgIGlmICghc25hcE9m
ZnNldHNJbmZvLmhvcml6b250YWxTbmFwT2Zmc2V0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0
byBbcG90ZW50aWFsU25hcFBvc2l0aW9uLCBpbmRleF0gPSBzbmFwT2Zmc2V0c0luZm8uY2xvc2Vz
dFNuYXBPZmZzZXQoV2ViQ29yZTo6U2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBob3Jpem9u
dGFsVGFyZ2V0LCB2ZWxvY2l0eS54KTsKKyAgICAgICAgYXV0byBbcG90ZW50aWFsU25hcFBvc2l0
aW9uLCBpbmRleF0gPSBzbmFwT2Zmc2V0c0luZm8uY2xvc2VzdFNuYXBPZmZzZXQoV2ViQ29yZTo6
U2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCB2aWV3cG9ydFNpemUsIGhvcml6b250YWxUYXJn
ZXQsIHZlbG9jaXR5LngpOwogICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Ny
b2xsaW5nTm9kZSgpLnNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoaW5kZXgpOwog
ICAgICAgICBpZiAoaG9yaXpvbnRhbFRhcmdldCA+PSAwICYmIGhvcml6b250YWxUYXJnZXQgPD0g
c2Nyb2xsVmlldy5jb250ZW50U2l6ZS53aWR0aCkKICAgICAgICAgICAgIHRhcmdldENvbnRlbnRP
ZmZzZXQtPnggPSBwb3RlbnRpYWxTbmFwUG9zaXRpb247CiAgICAgfQogCiAgICAgaWYgKCFzbmFw
T2Zmc2V0c0luZm8udmVydGljYWxTbmFwT2Zmc2V0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0
byBbcG90ZW50aWFsU25hcFBvc2l0aW9uLCBpbmRleF0gPSBzbmFwT2Zmc2V0c0luZm8uY2xvc2Vz
dFNuYXBPZmZzZXQoV2ViQ29yZTo6U2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgdmVydGljYWxU
YXJnZXQsIHZlbG9jaXR5LngpOworICAgICAgICBhdXRvIFtwb3RlbnRpYWxTbmFwUG9zaXRpb24s
IGluZGV4XSA9IHNuYXBPZmZzZXRzSW5mby5jbG9zZXN0U25hcE9mZnNldChXZWJDb3JlOjpTY3Jv
bGxFdmVudEF4aXM6OlZlcnRpY2FsLCB2aWV3cG9ydFNpemUsIHZlcnRpY2FsVGFyZ2V0LCB2ZWxv
Y2l0eS54KTsKICAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05v
ZGUoKS5zZXRDdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleChpbmRleCk7CiAgICAgICAgIGlm
ICh2ZXJ0aWNhbFRhcmdldCA+PSAwICYmIHZlcnRpY2FsVGFyZ2V0IDw9IHNjcm9sbFZpZXcuY29u
dGVudFNpemUuaGVpZ2h0KQogICAgICAgICAgICAgdGFyZ2V0Q29udGVudE9mZnNldC0+eSA9IHBv
dGVudGlhbFNuYXBQb3NpdGlvbjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>428836</attachid>
            <date>2021-05-17 09:13:23 -0700</date>
            <delta_ts>2021-05-18 03:09:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224326-20210517181322.patch</filename>
            <type>text/plain</type>
            <size>22413</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NTc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcAppbmRleCBhMTY1OTAxYWY4
NmJlMDZhOTJiNGIzMjU2YjBjMDM1ZTk1YjI5OGViLi5lNGRkOTRlODhhMjkzMDFlZDNhNWQ2NWY4
YjZhODliNDk0Y2NhZDE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHAKQEAgLTU0LDI3ICs1NCw2IEBAIHN0YXRp
YyBib29sIGlzTmVhckVub3VnaFRvT2Zmc2V0Rm9yUHJveGltaXR5KFNjcm9sbFNuYXBTdHJpY3Ru
ZXNzIHN0cmljdG5lc3MsIFVuCiAgICAgcmV0dXJuIHN0ZDo6YWJzKGZsb2F0IHtjYW5kaWRhdGVT
bmFwT2Zmc2V0IC0gc2Nyb2xsRGVzdGluYXRpb259KSA8PSAodmlld3BvcnRMZW5ndGggKiByYXRp
b09mU2Nyb2xsUG9ydEF4aXNMZW5ndGhUb0JlQ29uc2lkZXJlZEZvclByb3hpbWl0eSk7CiB9CiAK
LXRlbXBsYXRlIDx0eXBlbmFtZSBMYXlvdXRUeXBlPgotc3RhdGljIHZvaWQgaW5kaWNlc09mTmVh
cmVzdFNuYXBPZmZzZXRzKExheW91dFR5cGUgb2Zmc2V0LCBjb25zdCBWZWN0b3I8U25hcE9mZnNl
dDxMYXlvdXRUeXBlPj4mIHNuYXBPZmZzZXRzLCB1bnNpZ25lZCYgbG93ZXJJbmRleCwgdW5zaWdu
ZWQmIHVwcGVySW5kZXgpCi17Ci0gICAgbG93ZXJJbmRleCA9IDA7Ci0gICAgdXBwZXJJbmRleCA9
IHNuYXBPZmZzZXRzLnNpemUoKSAtIDE7Ci0gICAgd2hpbGUgKGxvd2VySW5kZXggPCB1cHBlcklu
ZGV4IC0gMSkgewotICAgICAgICBpbnQgbWlkZGxlSW5kZXggPSAobG93ZXJJbmRleCArIHVwcGVy
SW5kZXgpIC8gMjsKLSAgICAgICAgYXV0byBtaWRkbGVPZmZzZXQgPSBzbmFwT2Zmc2V0c1ttaWRk
bGVJbmRleF0ub2Zmc2V0OwotICAgICAgICBpZiAob2Zmc2V0ID09IG1pZGRsZU9mZnNldCkgewot
ICAgICAgICAgICAgdXBwZXJJbmRleCA9IG1pZGRsZUluZGV4OwotICAgICAgICAgICAgbG93ZXJJ
bmRleCA9IG1pZGRsZUluZGV4OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAob2Zmc2V0ID4gbWlkZGxlT2Zmc2V0KQotICAgICAgICAgICAgbG93ZXJJbmRleCA9
IG1pZGRsZUluZGV4OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB1cHBlckluZGV4ID0gbWlk
ZGxlSW5kZXg7Ci0gICAgfQotfQotCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5b3V0VHlwZT4KIHN0
YXRpYyBPcHRpb25hbDx1bnNpZ25lZD4gZmluZEZpcnN0U25hcFN0b3BPZmZzZXRCZXR3ZWVuT3Jp
Z2luQW5kRGVzdGluYXRpb24oY29uc3QgVmVjdG9yPFNuYXBPZmZzZXQ8TGF5b3V0VHlwZT4+JiBz
bmFwT2Zmc2V0cywgTGF5b3V0VHlwZSBzY3JvbGxPcmlnaW5PZmZzZXQsIExheW91dFR5cGUgc2Ny
b2xsRGVzdGluYXRpb25PZmZzZXQpCiB7CkBAIC0xMDYsNjMgKzg1LDExMSBAQCBzdGF0aWMgT3B0
aW9uYWw8dW5zaWduZWQ+IGZpbmRGaXJzdFNuYXBTdG9wT2Zmc2V0QmV0d2Vlbk9yaWdpbkFuZERl
c3RpbmF0aW9uKGNvbgogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLXRlbXBsYXRlIDx0
eXBlbmFtZSBTZWFyY2hUeXBlLCB0eXBlbmFtZSBJbmZvVHlwZSwgdHlwZW5hbWUgTGF5b3V0VHlw
ZT4KLXN0YXRpYyBzdGQ6OnBhaXI8TGF5b3V0VHlwZSwgdW5zaWduZWQ+IHJ1blNuYXBQb2ludFNl
YXJjaChTZWFyY2hUeXBlJiBzZWFyY2gsIGNvbnN0IEluZm9UeXBlJiBpbmZvKQordGVtcGxhdGUg
PHR5cGVuYW1lIFVuaXRUeXBlLCB0eXBlbmFtZSBSZWN0VHlwZT4KK3N0YXRpYyBVbml0VHlwZSBt
YXhGb3JBeGlzKFJlY3RUeXBlIHJlY3QsIFNjcm9sbEV2ZW50QXhpcyBheGlzKQoreworICAgIHJl
dHVybiBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IHJlY3QubWF4WCgpIDog
cmVjdC5tYXhZKCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBVbml0VHlwZSwgdHlwZW5hbWUg
UmVjdFR5cGU+CitzdGF0aWMgVW5pdFR5cGUgbWluRm9yQXhpcyhSZWN0VHlwZSByZWN0LCBTY3Jv
bGxFdmVudEF4aXMgYXhpcykKK3sKKyAgICByZXR1cm4gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6
Okhvcml6b250YWwgPyByZWN0LngoKSA6IHJlY3QueSgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgU2VhcmNoVHlwZSwgdHlwZW5hbWUgSW5mb1R5cGUsIHR5cGVuYW1lIFVuaXRUeXBlLCB0eXBl
bmFtZSBSZWN0VHlwZT4KK3N0YXRpYyBzdGQ6OnBhaXI8VW5pdFR5cGUsIHVuc2lnbmVkPiBydW5T
bmFwUG9pbnRTZWFyY2goU2VhcmNoVHlwZSYgc2VhcmNoLCBjb25zdCBJbmZvVHlwZSYgaW5mbykK
IHsKICAgICBjb25zdCBhdXRvJiBzbmFwT2Zmc2V0cyA9IGluZm8ub2Zmc2V0c0ZvckF4aXMoc2Vh
cmNoLmF4aXMpOworICAgIGF1dG8gcGFpckZvck5vU25hcHBpbmcgPSBzdGQ6Om1ha2VfcGFpcihz
ZWFyY2guZGVzdGluYXRpb25PZmZzZXQsIGludmFsaWRTbmFwT2Zmc2V0SW5kZXgpOwogICAgIGlm
IChzbmFwT2Zmc2V0cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihz
ZWFyY2guZGVzdGluYXRpb25PZmZzZXQsIGludmFsaWRTbmFwT2Zmc2V0SW5kZXgpOworICAgICAg
ICByZXR1cm4gcGFpckZvck5vU25hcHBpbmc7CiAKKyAgICAvLyBUaGUgZmlyc3Qgc25hcCBwb2lu
dCB3aXRoIGBzY3JvbGwtc25hcC1zdG9wOiBhbHdheXNgIGJldHdlZW4gdGhlIG9yaWdpbmFsIHBv
c2l0aW9uIGFuZCBkZXN0aW5hdGlvbiB0YWtlcyBwcmVjZWRlbmNlLgogICAgIGlmIChzZWFyY2gu
b3JpZ2luYWxPZmZzZXQpIHsKLSAgICAgICAgYXV0byBmaXJzdFNuYXBTdG9wT2Zmc2V0SW5kZXgg
PSBmaW5kRmlyc3RTbmFwU3RvcE9mZnNldEJldHdlZW5PcmlnaW5BbmREZXN0aW5hdGlvbihzbmFw
T2Zmc2V0cywgKnNlYXJjaC5vcmlnaW5hbE9mZnNldCwgc2VhcmNoLmRlc3RpbmF0aW9uT2Zmc2V0
KTsKLSAgICAgICAgaWYgKGZpcnN0U25hcFN0b3BPZmZzZXRJbmRleC5oYXNWYWx1ZSgpKQorICAg
ICAgICBpZiAoYXV0byBmaXJzdFNuYXBTdG9wT2Zmc2V0SW5kZXggPSBmaW5kRmlyc3RTbmFwU3Rv
cE9mZnNldEJldHdlZW5PcmlnaW5BbmREZXN0aW5hdGlvbihzbmFwT2Zmc2V0cywgKnNlYXJjaC5v
cmlnaW5hbE9mZnNldCwgc2VhcmNoLmRlc3RpbmF0aW9uT2Zmc2V0KSkKICAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfcGFpcihzbmFwT2Zmc2V0c1sqZmlyc3RTbmFwU3RvcE9mZnNldEluZGV4
XS5vZmZzZXQsICpmaXJzdFNuYXBTdG9wT2Zmc2V0SW5kZXgpOwogICAgIH0KIAotICAgIGlmIChz
ZWFyY2guZGVzdGluYXRpb25PZmZzZXQgPD0gc25hcE9mZnNldHMuZmlyc3QoKS5vZmZzZXQpCi0g
ICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihzbmFwT2Zmc2V0cy5maXJzdCgpLm9mZnNldCwg
MHUpOwotCi0gICAgaWYgKHNlYXJjaC5kZXN0aW5hdGlvbk9mZnNldCA+PSBzbmFwT2Zmc2V0cy5s
YXN0KCkub2Zmc2V0KQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc25hcE9mZnNldHMu
bGFzdCgpLm9mZnNldCwgc25hcE9mZnNldHMuc2l6ZSgpIC0gMSk7Ci0KLSAgICB1bnNpZ25lZCBs
b3dlckluZGV4OwotICAgIHVuc2lnbmVkIHVwcGVySW5kZXg7Ci0gICAgaW5kaWNlc09mTmVhcmVz
dFNuYXBPZmZzZXRzPExheW91dFR5cGU+KHNlYXJjaC5kZXN0aW5hdGlvbk9mZnNldCwgc25hcE9m
ZnNldHMsIGxvd2VySW5kZXgsIHVwcGVySW5kZXgpOwotICAgIExheW91dFR5cGUgbG93ZXJTbmFw
UG9zaXRpb24gPSBzbmFwT2Zmc2V0c1tsb3dlckluZGV4XS5vZmZzZXQ7Ci0gICAgTGF5b3V0VHlw
ZSB1cHBlclNuYXBQb3NpdGlvbiA9IHNuYXBPZmZzZXRzW3VwcGVySW5kZXhdLm9mZnNldDsKLQot
ICAgIGF1dG8gdmlld3BvcnRMZW5ndGggPSBzZWFyY2guYXhpcyAgPT0gU2Nyb2xsRXZlbnRBeGlz
OjpIb3Jpem9udGFsID8gc2VhcmNoLnZpZXdwb3J0U2l6ZS53aWR0aCgpIDogc2VhcmNoLnZpZXdw
b3J0U2l6ZS5oZWlnaHQoKTsKLSAgICBpZiAoIWlzTmVhckVub3VnaFRvT2Zmc2V0Rm9yUHJveGlt
aXR5PExheW91dFR5cGU+KGluZm8uc3RyaWN0bmVzcywgc2VhcmNoLmRlc3RpbmF0aW9uT2Zmc2V0
LCBsb3dlclNuYXBQb3NpdGlvbiwgdmlld3BvcnRMZW5ndGgpKSB7Ci0gICAgICAgIGxvd2VyU25h
cFBvc2l0aW9uID0gc2VhcmNoLmRlc3RpbmF0aW9uT2Zmc2V0OwotICAgICAgICBsb3dlckluZGV4
ID0gaW52YWxpZFNuYXBPZmZzZXRJbmRleDsKKyAgICBhdXRvIHZpZXdwb3J0TGVuZ3RoID0gc2Vh
cmNoLmF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsID8gc2VhcmNoLnZpZXdwb3J0
U2l6ZS53aWR0aCgpIDogc2VhcmNoLnZpZXdwb3J0U2l6ZS5oZWlnaHQoKTsKKyAgICBib29sIGxh
bmRlZEluc2lkZVNuYXBBcmVhVGhhdENvbnN1bWVzVmlld3BvcnQgPSBmYWxzZTsKKyAgICBPcHRp
b25hbDxzdGQ6OnBhaXI8VW5pdFR5cGUsIHVuc2lnbmVkPj4gcHJldmlvdXMsIG5leHQ7CisgICAg
T3B0aW9uYWw8UmVjdFR5cGU+IHByZXZpb3VzU25hcEFyZWEsIG5leHRTbmFwQXJlYTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc25hcE9mZnNldHMuc2l6ZSgpOyBpKyspIHsKKyAgICAg
ICAgY29uc3QgYXV0byYgc25hcEFyZWEgPSBpbmZvLnNuYXBBcmVhc1tzbmFwT2Zmc2V0c1tpXS5z
bmFwQXJlYUluZGV4XTsKKyAgICAgICAgbGFuZGVkSW5zaWRlU25hcEFyZWFUaGF0Q29uc3VtZXNW
aWV3cG9ydCB8PSAobWluRm9yQXhpczxVbml0VHlwZT4oc25hcEFyZWEsIHNlYXJjaC5heGlzKSA8
PSBzZWFyY2guZGVzdGluYXRpb25PZmZzZXQgJiYgbWF4Rm9yQXhpczxVbml0VHlwZT4oc25hcEFy
ZWEsIHNlYXJjaC5heGlzKSA+PSAoc2VhcmNoLmRlc3RpbmF0aW9uT2Zmc2V0ICsgdmlld3BvcnRM
ZW5ndGgpKTsKKyAgICAgICAgLy8gSWYgdGhlIHNjcm9sbCBsYW5kZWQgZXhhY3RseSBvbiBhIHNu
YXAgb2Zmc2V0LCBjaG9vc2UgdGhhdCBvbmUuCisgICAgICAgIFVuaXRUeXBlIHBvdGVudGlhbFNu
YXBPZmZzZXQgPSBzbmFwT2Zmc2V0c1tpXS5vZmZzZXQ7CisgICAgICAgIGlmIChwb3RlbnRpYWxT
bmFwT2Zmc2V0ID09IHNlYXJjaC5kZXN0aW5hdGlvbk9mZnNldCkKKyAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1ha2VfcGFpcihwb3RlbnRpYWxTbmFwT2Zmc2V0LCBpKTsKKworICAgICAgICBpZiAo
cG90ZW50aWFsU25hcE9mZnNldCA8IHNlYXJjaC5kZXN0aW5hdGlvbk9mZnNldCkgeworICAgICAg
ICAgICAgcHJldmlvdXMgPSBzdGQ6Om1ha2VfcGFpcihwb3RlbnRpYWxTbmFwT2Zmc2V0LCBpKTsK
KyAgICAgICAgICAgIHByZXZpb3VzU25hcEFyZWEgPSBzbmFwQXJlYTsKKyAgICAgICAgfSBlbHNl
IGlmICghbmV4dCAmJiBwb3RlbnRpYWxTbmFwT2Zmc2V0ID4gc2VhcmNoLmRlc3RpbmF0aW9uT2Zm
c2V0KSB7CisgICAgICAgICAgICBuZXh0ID0gc3RkOjptYWtlX3BhaXIocG90ZW50aWFsU25hcE9m
ZnNldCwgaSk7CisgICAgICAgICAgICBuZXh0U25hcEFyZWEgPSBzbmFwQXJlYTsKKyAgICAgICAg
fQogICAgIH0KIAotICAgIGlmICghaXNOZWFyRW5vdWdoVG9PZmZzZXRGb3JQcm94aW1pdHk8TGF5
b3V0VHlwZT4oaW5mby5zdHJpY3RuZXNzLCBzZWFyY2guZGVzdGluYXRpb25PZmZzZXQsIHVwcGVy
U25hcFBvc2l0aW9uLCB2aWV3cG9ydExlbmd0aCkpIHsKLSAgICAgICAgdXBwZXJTbmFwUG9zaXRp
b24gPSBzZWFyY2guZGVzdGluYXRpb25PZmZzZXQ7Ci0gICAgICAgIHVwcGVySW5kZXggPSBpbnZh
bGlkU25hcE9mZnNldEluZGV4OworICAgIC8vIEZyb20gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nz
cy1zY3JvbGwtc25hcC0xLyNzbmFwLW92ZXJmbG93CisgICAgLy8gIklmIHRoZSBzbmFwIGFyZWEg
aXMgbGFyZ2VyIHRoYW4gdGhlIHNuYXBwb3J0IGluIGEgcGFydGljdWxhciBheGlzLCB0aGVuIGFu
eSBzY3JvbGwgcG9zaXRpb24KKyAgICAvLyBpbiB3aGljaCB0aGUgc25hcCBhcmVhIGNvdmVycyB0
aGUgc25hcHBvcnQsIGFuZCB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgZ2VvbWV0cmljYWxseQor
ICAgIC8vIHByZXZpb3VzIGFuZCBzdWJzZXF1ZW50IHNuYXAgcG9zaXRpb25zIGluIHRoYXQgYXhp
cyBpcyBsYXJnZXIgdGhhbiBzaXplIG9mIHRoZSBzbmFwcG9ydCBpbgorICAgIC8vIHRoYXQgYXhp
cywgaXMgYSB2YWxpZCBzbmFwIHBvc2l0aW9uIGluIHRoYXQgYXhpcy4gVGhlIFVBIG1heSB1c2Ug
dGhlIHNwZWNpZmllZCBhbGlnbm1lbnQgYXMgYQorICAgIC8vIG1vcmUgcHJlY2lzZSB0YXJnZXQg
Zm9yIGNlcnRhaW4gc2Nyb2xsIG9wZXJhdGlvbnMgKGUuZy4gZXhwbGljaXQgcGFnaW5nKS4iCisg
ICAgaWYgKGxhbmRlZEluc2lkZVNuYXBBcmVhVGhhdENvbnN1bWVzVmlld3BvcnQgJiYgKCFwcmV2
aW91cyB8fCAhbmV4dCB8fCAoKCpuZXh0KS5maXJzdCAtICgqcHJldmlvdXMpLmZpcnN0KSA+PSB2
aWV3cG9ydExlbmd0aCkpCisgICAgICAgIHJldHVybiBwYWlyRm9yTm9TbmFwcGluZzsKKworICAg
IGlmIChzZWFyY2gub3JpZ2luYWxPZmZzZXQpIHsKKyAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGRp
cmVjdGlvbmFsIHNjcm9sbCBhbmQgdGhlcmUgYXJlIG5vIHNjcm9sbCBzdG9wcyBpbiBhIHBhcnRp
Y3VsYXIgZGlyZWN0aW9uLAorICAgICAgICAvLyBkb24ndCBzY3JvbGwgcGFzdCB0aGUgZWRnZSBv
ZiB0aGUgc2Nyb2xsIGFyZWEuCisgICAgICAgIGlmICghbmV4dCAmJiBwcmV2aW91cykKKyAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihzdGQ6Om1heCgoKnByZXZpb3VzKS5maXJzdCwg
bWF4Rm9yQXhpczxVbml0VHlwZT4oKnByZXZpb3VzU25hcEFyZWEsIHNlYXJjaC5heGlzKSAtIHZp
ZXdwb3J0TGVuZ3RoKSwgaW52YWxpZFNuYXBPZmZzZXRJbmRleCk7CisgICAgICAgIGlmICghcHJl
dmlvdXMgJiYgbmV4dCkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihtaW5Gb3JB
eGlzPFVuaXRUeXBlPigqbmV4dFNuYXBBcmVhLCBzZWFyY2guYXhpcyksIGludmFsaWRTbmFwT2Zm
c2V0SW5kZXgpOworCisgICAgICAgIC8vIEZyb20gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1z
Y3JvbGwtc25hcC0xLyNjaG9vc2luZworICAgICAgICAvLyAiVXNlciBhZ2VudHMgbXVzdCBlbnN1
cmUgdGhhdCBhIHVzZXIgY2FuIOKAnGVzY2FwZeKAnSBhIHNuYXAgcG9zaXRpb24sIHJlZ2FyZGxl
c3Mgb2YgdGhlIHNjcm9sbAorICAgICAgICAvLyBtZXRob2QuIEZvciBleGFtcGxlLCBpZiB0aGUg
c25hcCB0eXBlIGlzIG1hbmRhdG9yeSBhbmQgdGhlIG5leHQgc25hcCBwb3NpdGlvbiBpcyBtb3Jl
IHRoYW4KKyAgICAgICAgLy8gdHdvIHNjcmVlbi13aWR0aHMgYXdheSwgYSBuYcOvdmUg4oCcYWx3
YXlzIHNuYXAgdG8gbmVhcmVzdOKAnSBzZWxlY3Rpb24gYWxnb3JpdGhtIG1pZ2h0IOKAnHRyYXDi
gJ0gdGhlCisgICAgICAgIC8vIHVzZXIgaWYgdGhlaXIgZW5kIHBvc2l0aW9uIHdhcyBvbmx5IG9u
ZSBzY3JlZW4td2lkdGggYXdheS4gSW5zdGVhZCwgYSBzbWFydGVyIGFsZ29yaXRobSB0aGF0Cisg
ICAgICAgIC8vIG9ubHkgcmV0dXJuZWQgdG8gdGhlIHN0YXJ0aW5nIHNuYXAgcG9zaXRpb24gaWYg
dGhlIGVuZC1wb2ludCB3YXMgYSBmYWlybHkgc21hbGwgZGlzdGFuY2UgZnJvbQorICAgICAgICAv
LyBpdCwgYW5kIG90aGVyd2lzZSBpZ25vcmVkIHRoZSBzdGFydGluZyBzbmFwIHBvc2l0aW9uLCB3
b3VsZCBnaXZlIGJldHRlciBiZWhhdmlvci4iCisgICAgICAgIC8vIFdlIG9ubHkgZG8gdGhpcyBp
ZiB3ZSBhcmUgaW4gYSBzaXR1YXRpb24gd2hlcmUgd2UgYXJlIGNob29zaW5nIGJldHdlZW4gdHdv
IGNvbXBhdGlibGUKKyAgICAgICAgLy8gc25hcCBvZmZzZXRzLgorICAgICAgICBib29sIGFsd2F5
c0FsbG93RXNjYXBpbmdTbmFwUG9zaXRpb24gPSBpbmZvLnN0cmljdG5lc3MgIT0gU2Nyb2xsU25h
cFN0cmljdG5lc3M6OlByb3hpbWl0eSB8fCBzZWFyY2gudHlwZSA9PSBTbmFwUG9pbnRTZWFyY2hU
eXBlOjpEaXJlY3Rpb25hbDsKKyAgICAgICAgaWYgKCpzZWFyY2gub3JpZ2luYWxPZmZzZXQgPCBz
ZWFyY2guZGVzdGluYXRpb25PZmZzZXQgJiYgYWx3YXlzQWxsb3dFc2NhcGluZ1NuYXBQb3NpdGlv
biAmJiAoKnByZXZpb3VzKS5maXJzdCA8PSAqc2VhcmNoLm9yaWdpbmFsT2Zmc2V0KQorICAgICAg
ICAgICAgcHJldmlvdXMucmVzZXQoKTsKKyAgICAgICAgaWYgKCpzZWFyY2gub3JpZ2luYWxPZmZz
ZXQgPiBzZWFyY2guZGVzdGluYXRpb25PZmZzZXQgJiYgYWx3YXlzQWxsb3dFc2NhcGluZ1NuYXBQ
b3NpdGlvbiAmJiAoKm5leHQpLmZpcnN0ID49ICpzZWFyY2gub3JpZ2luYWxPZmZzZXQpCisgICAg
ICAgICAgICBuZXh0LnJlc2V0KCk7CiAgICAgfQogCisgICAgaWYgKG5leHQgJiYgIWlzTmVhckVu
b3VnaFRvT2Zmc2V0Rm9yUHJveGltaXR5KGluZm8uc3RyaWN0bmVzcywgc2VhcmNoLmRlc3RpbmF0
aW9uT2Zmc2V0LCAoKm5leHQpLmZpcnN0LCB2aWV3cG9ydExlbmd0aCkpCisgICAgICAgIG5leHQu
cmVzZXQoKTsKKyAgICBpZiAocHJldmlvdXMgJiYgIWlzTmVhckVub3VnaFRvT2Zmc2V0Rm9yUHJv
eGltaXR5KGluZm8uc3RyaWN0bmVzcywgc2VhcmNoLmRlc3RpbmF0aW9uT2Zmc2V0LCAoKnByZXZp
b3VzKS5maXJzdCwgdmlld3BvcnRMZW5ndGgpKQorICAgICAgICBwcmV2aW91cy5yZXNldCgpOwor
CisgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBjb21wYXRpYmxlIG9mZnNldHMgdG8gY2hvb3NlIGJl
dHdlZW4sIGp1c3QgZG8gdGhlIG9idmlvdXMgdGhpbmcKKyAgICAvLyBhbmQgZG8gbm8gc25hcHBp
bmcgb3Igb25seSBzZWxlY3QgdGhlIHNpbmdsZSBjb21wYXRpYmxlIG9mZnNldC4KKyAgICBpZiAo
IXByZXZpb3VzICYmICFuZXh0KQorICAgICAgICByZXR1cm4gcGFpckZvck5vU25hcHBpbmc7Cisg
ICAgaWYgKCFwcmV2aW91cykKKyAgICAgICAgcmV0dXJuICpuZXh0OworICAgIGlmICghbmV4dCkK
KyAgICAgICAgcmV0dXJuICpwcmV2aW91czsKKworICAgIC8vIElmIHRoaXMgc2Nyb2xsIGlzbid0
IGRpcmVjdGlvbmFsLCB0aGVuIGNob29zZSB3aGF0ZXZlciBzbmFwIHBvaW50IGlzIGNsb3Nlci4K
KyAgICBVbml0VHlwZSBwcmV2aW91c1NuYXBPZmZzZXQgPSAoKnByZXZpb3VzKS5maXJzdDsKKyAg
ICBVbml0VHlwZSBuZXh0U25hcE9mZnNldCA9ICgqbmV4dCkuZmlyc3Q7CiAgICAgZmxvYXQgdmVs
b2NpdHkgPSBzZWFyY2gudmVsb2NpdHkoKTsKICAgICBpZiAoIXN0ZDo6YWJzKHZlbG9jaXR5KSkg
ewotICAgICAgICBib29sIGlzQ2xvc2VyVG9Mb3dlclNuYXBQb3NpdGlvbiA9ICh1cHBlckluZGV4
ID09IGludmFsaWRTbmFwT2Zmc2V0SW5kZXgpCi0gICAgICAgICAgICB8fCAobG93ZXJJbmRleCAh
PSBpbnZhbGlkU25hcE9mZnNldEluZGV4ICYmIHNlYXJjaC5kZXN0aW5hdGlvbk9mZnNldCAtIGxv
d2VyU25hcFBvc2l0aW9uIDw9IHVwcGVyU25hcFBvc2l0aW9uIC0gc2VhcmNoLmRlc3RpbmF0aW9u
T2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIGlzQ2xvc2VyVG9Mb3dlclNuYXBQb3NpdGlvbiA/IHN0
ZDo6bWFrZV9wYWlyKGxvd2VyU25hcFBvc2l0aW9uLCBsb3dlckluZGV4KSA6IHN0ZDo6bWFrZV9w
YWlyKHVwcGVyU25hcFBvc2l0aW9uLCB1cHBlckluZGV4KTsKLSAgICB9Ci0KLSAgICAvLyBOb24t
emVybyB2ZWxvY2l0eSBpbmRpY2F0ZXMgYSBmbGljayBnZXN0dXJlLiBFdmVuIGlmIGFub3RoZXIg
c25hcCBwb2ludCBpcyBjbG9zZXIsIHdlIHNob3VsZCBjaG9vc2UgdGhlIG9uZSBpbiB0aGUgZGly
ZWN0aW9uIG9mIHRoZSBmbGljayBnZXN0dXJlCi0gICAgLy8gYXMgbG9uZyBhcyBhIHNjcm9sbCBz
bmFwIG9mZnNldCBpcyBjbG9zZSBlbm91Z2ggZm9yIHByb3hpbWl0eSAob3Igd2UgYXJlbid0IHVz
aW5nIHByb3hpbWl0eSkuIElmIHdlIGFyZSBkb2luZyBkaXJlY3Rpb25hbAotICAgIC8vIHNuYXBw
aW5nLCB3ZSBzaG91bGQgbmV2ZXIgc25hcCB0byBhIHBvaW50IHRoYXQgd2FzIG9uIHRoZSBvdGhl
ciBzaWRlIG9mIHRoZSBvcmlnaW5hbCBwb3NpdGlvbiBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9u
IG9mIHRoaXMgc2Nyb2xsLgotICAgIC8vIFRoaXMgYWxsb3dzIGRpcmVjdGlvbmFsIHNjcm9sbGlu
ZyB0byBlc2NhcGUgc25hcCBwb2ludHMuCi0gICAgYm9vbCBhbHdheXNBbGxvd0VzY2FwaW5nU25h
cFBvc2l0aW9uID0gaW5mby5zdHJpY3RuZXNzICE9IFNjcm9sbFNuYXBTdHJpY3RuZXNzOjpQcm94
aW1pdHkgfHwgc2VhcmNoLnR5cGUgPT0gU25hcFBvaW50U2VhcmNoVHlwZTo6RGlyZWN0aW9uYWw7
Ci0gICAgaWYgKHZlbG9jaXR5IDwgMCkgIHsKLSAgICAgICAgaWYgKHVwcGVySW5kZXggIT0gaW52
YWxpZFNuYXBPZmZzZXRJbmRleCAmJiAoIWFsd2F5c0FsbG93RXNjYXBpbmdTbmFwUG9zaXRpb24g
fHwgc2VhcmNoLm9yaWdpbmFsT2Zmc2V0ID4gdXBwZXJTbmFwUG9zaXRpb24pKQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHVwcGVyU25hcFBvc2l0aW9uLCB1cHBlckluZGV4KTsK
LSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGxvd2VyU25hcFBvc2l0aW9uLCBsb3dlcklu
ZGV4KTsKKyAgICAgICAgYm9vbCBpc0Nsb3NlclRvUHJldmlvdXNTbmFwSW5kZXggPSBzZWFyY2gu
ZGVzdGluYXRpb25PZmZzZXQgLSBwcmV2aW91c1NuYXBPZmZzZXQgPD0gbmV4dFNuYXBPZmZzZXQg
LSBzZWFyY2guZGVzdGluYXRpb25PZmZzZXQ7CisgICAgICAgIHJldHVybiBpc0Nsb3NlclRvUHJl
dmlvdXNTbmFwSW5kZXggPyAqcHJldmlvdXMgOiAqbmV4dDsKICAgICB9CiAKLSAgICBpZiAobG93
ZXJJbmRleCAhPSBpbnZhbGlkU25hcE9mZnNldEluZGV4ICYmICghYWx3YXlzQWxsb3dFc2NhcGlu
Z1NuYXBQb3NpdGlvbiB8fCBzZWFyY2gub3JpZ2luYWxPZmZzZXQgPCBsb3dlclNuYXBQb3NpdGlv
bikpCi0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihsb3dlclNuYXBQb3NpdGlvbiwgbG93
ZXJJbmRleCk7Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHVwcGVyU25hcFBvc2l0aW9uLCB1
cHBlckluZGV4KTsKKyAgICAvLyBGaW5hbGx5LCBpZiB3ZSBoYXZlIGEgZGlyZWN0aW9uYWwgc2Ny
b2xsIHByZWZlciB0aGUgc25hcCBwb2ludCB0aGF0IGlzIGluIHRoZSBzY3JvbGwgZGlyZWN0aW9u
LgorICAgIHJldHVybiB2ZWxvY2l0eSA8IDAgPyAqcHJldmlvdXMgOiAqbmV4dDsKIH0KIAogZW51
bSBjbGFzcyBJbnNldE9yT3V0c2V0IHsKQEAgLTM2MSwxMyArMzg4LDEzIEBAIEZsb2F0U2Nyb2xs
U25hcE9mZnNldHNJbmZvIExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6Y29udmVydFVuaXRz
KGZsb2F0IGRldmljCiB0ZW1wbGF0ZSA8Pgogc3RkOjpwYWlyPExheW91dFVuaXQsIHVuc2lnbmVk
PiBMYXlvdXRTbmFwUG9pbnRTZWFyY2g6OnJ1bihjb25zdCBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0
c0luZm8mIGluZm8pCiB7Ci0gICAgcmV0dXJuIHJ1blNuYXBQb2ludFNlYXJjaDxMYXlvdXRTbmFw
UG9pbnRTZWFyY2gsIExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbywgTGF5b3V0VW5pdD4oKnRo
aXMsIGluZm8pOworICAgIHJldHVybiBydW5TbmFwUG9pbnRTZWFyY2g8TGF5b3V0U25hcFBvaW50
U2VhcmNoLCBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8sIExheW91dFVuaXQsIExheW91dFJl
Y3Q+KCp0aGlzLCBpbmZvKTsKIH0KIAogdGVtcGxhdGUgPD4KIHN0ZDo6cGFpcjxmbG9hdCwgdW5z
aWduZWQ+IEZsb2F0U25hcFBvaW50U2VhcmNoOjpydW4oY29uc3QgRmxvYXRTY3JvbGxTbmFwT2Zm
c2V0c0luZm8mIGluZm8pCiB7Ci0gICAgcmV0dXJuIHJ1blNuYXBQb2ludFNlYXJjaDxGbG9hdFNu
YXBQb2ludFNlYXJjaCwgRmxvYXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8sIGZsb2F0PigqdGhpcywg
aW5mbyk7CisgICAgcmV0dXJuIHJ1blNuYXBQb2ludFNlYXJjaDxGbG9hdFNuYXBQb2ludFNlYXJj
aCwgRmxvYXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8sIGZsb2F0LCBGbG9hdFJlY3Q+KCp0aGlzLCBp
bmZvKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGY3YTE0MjFkZDcwNWMyNWQ4MWVmMjI1NTc5NGY0ZmMwYTRm
ZjhmMGIuLjdhNTNlNWUxYjZmMzg5ZGNmMTViZDM0MjJhYmY1Y2YwOTAyY2VlNWIgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxOSBAQAorMjAyMS0wNS0xNyAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgQ1NTIHNjcm9sbCBzbmFwIHNob3VsZCBhbGxvdyBzY3JvbGxp
bmcgdG8gdGhlIG1pZGRsZSBvZiBzbmFwIGFyZWFzIHRoYXQgb3ZlcmZsb3cgdGhlIHNuYXBwb3J0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjMwMjEK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc1NTE4NjA2PgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeGluZyBzb21lIHRlc3RzIHRoYXQgcmVsaWVk
IG9uIHRoZSBpbmNvcnJlY3QgYmVoYXZpb3IuIFRoZXNlIHRlc3RzIHVzZWQgc25hcCBhcmVhcwor
ICAgICAgICB0aGF0IG92ZXJmbG93ZWQgdGhlIHNuYXAgcG9ydCBhbmQgYXNzdW1lZCB0aGF0IHRo
ZSBzbmFwIHBvaW50IHNlbGVjdGlvbiBhbGdvcml0aG0KKyAgICAgICAgd291bGQgbm90IHN0b3Ag
aW4gdGhlIG1pZGRsZSBvZiB0aG9zZSBzbmFwIGFyZWFzLgorCisgICAgICAgICogY3NzMy9zY3Jv
bGwtc25hcC9zY3JvbGwtc25hcC1jbGljay1zY3JvbGxiYXItZ3V0dGVyLmh0bWw6CisgICAgICAg
ICogdGlsZWQtZHJhd2luZy9zY3JvbGxpbmcvc2Nyb2xsLXNuYXAvc2Nyb2xsLXNuYXAtbWFuZGF0
b3J5LW1haW5mcmFtZS12ZXJ0aWNhbC10aGVuLWhvcml6b250YWwuaHRtbDoKKyAgICAgICAgKiB0
aWxlZC1kcmF3aW5nL3Njcm9sbGluZy9zY3JvbGwtc25hcC9zY3JvbGwtc25hcC1wcm94aW1pdHkt
b3ZlcmZsb3cuaHRtbDoKKwogMjAyMS0wNS0xMyAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29u
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1Njcm9sbCBzbmFwXSBwcm94aW1pdHkgc2Nyb2xsIHNu
YXBwaW5nIGlzIGJyb2tlbgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0No
YW5nZUxvZyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKaW5kZXggZWUxZjY4
OTAwZGViNDk4OTViNTBmYmNkZjczMmE5N2YyZDA5MDU4OS4uNmZjNDViYzRmNTA2YjFhZTA5OTcx
MmEyNDNiNTNhYWMxODM5N2Y0MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTMgQEAKKzIwMjEtMDUtMTcgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFtjc3Mtc2Nyb2xsLXNuYXBdIENvbXB1dGUgcHJveGltaXR5IGlu
Zm9ybWF0aW9uIHdoaWxlIHNuYXBwaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjQzMjYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc2Njk5MzYy
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mtc2Nyb2xsLXNuYXAvb3ZlcmZsb3dpbmctc25hcC1hcmVh
cy1leHBlY3RlZC50eHQ6IE1hcmtlZCB0ZXN0cyBhcyBwYXNzaW5nLgorCiAyMDIxLTA1LTE2ICBD
YW1lcm9uIE1jQ29ybWFjayAgPGhleWNhbUBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBNYXRo
TUwgV1BUcyB3YWl0IGZvciBhbGwgZm9udCBsb2FkcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Y3NzMy9zY3JvbGwtc25hcC9zY3JvbGwtc25hcC1jbGljay1zY3JvbGxiYXItZ3V0dGVyLmh0bWwg
Yi9MYXlvdXRUZXN0cy9jc3MzL3Njcm9sbC1zbmFwL3Njcm9sbC1zbmFwLWNsaWNrLXNjcm9sbGJh
ci1ndXR0ZXIuaHRtbAppbmRleCA3YjM1MjZjYzRkZDA3ZDUxYzllYzkzZGM4OWQ0OTAyYmYwYmQ0
NjMyLi45NGRhOGJlNTMxYmZkZWI5NDIwNWY3ZThlYzIxMjYxZDFkZjg2YmY4IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9jc3MzL3Njcm9sbC1zbmFwL3Njcm9sbC1zbmFwLWNsaWNrLXNjcm9sbGJh
ci1ndXR0ZXIuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9jc3MzL3Njcm9sbC1zbmFwL3Njcm9sbC1z
bmFwLWNsaWNrLXNjcm9sbGJhci1ndXR0ZXIuaHRtbApAQCAtMzQsMjEgKzM0LDMyIEBACiAgICAg
ICAgICAgICAgICAgc2Nyb2xsLXNuYXAtdHlwZTogYm90aCBtYW5kYXRvcnk7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIC5ibG9jayB7Ci0gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAw
cHg7Ci0gICAgICAgICAgICAgICAgd2lkdGg6IDI1MHB4OwotICAgICAgICAgICAgICAgIHNjcm9s
bC1zbmFwLWFsaWduOiBzdGFydDsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgLmhvcml6
b250YWwtZHJhd2VyIHsKICAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICAg
ICAgICAgd2lkdGg6IDIwMDBweDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLmhvcml6
b250YWwtZHJhd2VyIC5ibG9jayB7Ci0gICAgICAgICAgICAgICAgd2lkdGg6IDEwMDBweDsKLSAg
ICAgICAgICAgICAgICBoZWlnaHQ6IDI1MHB4OworICAgICAgICAgICAgLmhvcml6b250YWwtZHJh
d2VyID4gZGl2IHsKKyAgICAgICAgICAgICAgICBmbG9hdDogbGVmdDsKKyAgICAgICAgICAgICAg
ICB3aWR0aDogOTkwcHg7CisgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAuaG9yaXpvbnRhbC1kcmF3ZXIgPiBkaXYuc25hcC1wb2ludCB7
CisgICAgICAgICAgICAgICAgc2Nyb2xsLXNuYXAtYWxpZ246IHN0YXJ0OworICAgICAgICAgICAg
ICAgIHdpZHRoOiAxMHB4OworICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgI3ZlcnRpY2Fs
LWNvbnRhaW5lciA+IGRpdiB7CisgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7CisgICAgICAg
ICAgICAgICAgaGVpZ2h0OiA5OTBweDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgI3Zl
cnRpY2FsLWNvbnRhaW5lciA+IGRpdi5zbmFwLXBvaW50IHsKKyAgICAgICAgICAgICAgICBzY3Jv
bGwtc25hcC1hbGlnbjogc3RhcnQ7CisgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMHB4OwogICAg
ICAgICAgICAgfQorCiAgICAgICAgIDwvc3R5bGU+CiAgICAgICAgIDxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+CiAgICAgICAgIDxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvdWktaGVscGVyLmpzIj48L3NjcmlwdD4KQEAgLTg3LDEzICs5OCwxNyBA
QAogICAgIDxib2R5IG9ubG9hZD0ib25Mb2FkKCk7Ij4KICAgICAgICAgPGRpdiBpZD0iaG9yaXpv
bnRhbC1jb250YWluZXIiIGNsYXNzPSJjb250YWluZXIiPgogICAgICAgICAgICAgPGRpdiBjbGFz
cz0iaG9yaXpvbnRhbC1kcmF3ZXIiPgotICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJsb2Nr
IiBzdHlsZT0iZmxvYXQ6IGxlZnQ7IGJhY2tncm91bmQ6ICM4MDQ3NUUiPjwvZGl2PgotICAgICAg
ICAgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIiBzdHlsZT0id2lkdGg6IDQ1MHB4OyBmbG9hdDog
bGVmdDsgYmFja2dyb3VuZDogI0NDNUE3MSI+PC9kaXY+CisgICAgICAgICAgICAgICAgPGRpdiBj
bGFzcz0ic25hcC1wb2ludCIgc3R5bGU9ImJhY2tncm91bmQ6ICM4MDQ3NUUiPjwvZGl2PgorICAg
ICAgICAgICAgICAgIDxkaXY+PC9kaXY+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic25h
cC1wb2ludCIgc3R5bGU9ImJhY2tncm91bmQ6ICNDQzVBNzEiPjwvZGl2PgorICAgICAgICAgICAg
ICAgIDxkaXY+PC9kaXY+CiAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgPC9kaXY+CiAgICAg
ICAgIDxkaXYgaWQ9InZlcnRpY2FsLWNvbnRhaW5lciIgY2xhc3M9ImNvbnRhaW5lciI+Ci0gICAg
ICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayIgc3R5bGU9ImJhY2tncm91bmQ6ICM4MDQ3NUUiPjwv
ZGl2PgotICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siIHN0eWxlPSJoZWlnaHQ6IDQ1MHB4
OyBiYWNrZ3JvdW5kOiAjQ0M1QTcxIj48L2Rpdj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNu
YXAtcG9pbnQiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjODA0NzVFIj48L2Rpdj4KKyAgICAgICAgICAg
IDxkaXY+PC9kaXY+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbmFwLXBvaW50IiBzdHlsZT0i
YmFja2dyb3VuZDogI0NDNUE3MSI+PC9kaXY+CisgICAgICAgICAgICA8ZGl2PjwvZGl2PgogICAg
ICAgICA8L2Rpdj4KICAgICAgICAgPHAgaWQ9ImNvbnNvbGUiPjwvcD4KICAgICAgICAgPHNjcmlw
dD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvY3NzL2Nzcy1zY3JvbGwtc25hcC9vdmVyZmxvd2luZy1zbmFwLWFyZWFzLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1z
Y3JvbGwtc25hcC9vdmVyZmxvd2luZy1zbmFwLWFyZWFzLWV4cGVjdGVkLnR4dAppbmRleCBhNDVk
MmFkY2RkZjZjZjAzZGYzOTg2M2MzNjM2NTkzM2I4OGUyODFlLi4yNTljZDk4MGM1NDlhMDU4YTA4
ZmZmYTdmMjQzMjFmNmFjNTgzMjI3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mtc2Nyb2xsLXNuYXAvb3ZlcmZsb3dpbmctc25h
cC1hcmVhcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNjcm9sbC1zbmFwL292ZXJmbG93aW5nLXNuYXAtYXJlYXMt
ZXhwZWN0ZWQudHh0CkBAIC0xLDEzICsxLDEzIEBACiAKIFBBU1MgU25hcHMgdG8gdGhlIHNuYXAg
cG9zaXRpb24gaWYgdGhlIHNuYXAgYXJlYSBkb2Vzbid0IGNvdmVyIHRoZSBzbmFwcG9ydCBvbiB4
LgotRkFJTCBTbmFwcyB0byB0aGUgc25hcCBwb3NpdGlvbiBpZiB0aGUgc25hcCBhcmVhIGNvdmVy
cyB0aGUgc25hcHBvcnQgb24geCBvbiB0aGUgcmlnaHQgYm9yZGVyLiBhc3NlcnRfZXF1YWxzOiBl
eHBlY3RlZCAyNzE1IGJ1dCBnb3QgMjAwCi1GQUlMIFNuYXBzIHRvIHRoZSBzbmFwIHBvc2l0aW9u
IGlmIHRoZSBzbmFwIGFyZWEgY292ZXJzIHRoZSBzbmFwcG9ydCBvbiB4IG9uIHRoZSBsZWZ0IGJv
cmRlci4gYXNzZXJ0X2VxdWFsczogZXhwZWN0ZWQgMjAwIGJ1dCBnb3QgMjcxNQorUEFTUyBTbmFw
cyB0byB0aGUgc25hcCBwb3NpdGlvbiBpZiB0aGUgc25hcCBhcmVhIGNvdmVycyB0aGUgc25hcHBv
cnQgb24geCBvbiB0aGUgcmlnaHQgYm9yZGVyLgorUEFTUyBTbmFwcyB0byB0aGUgc25hcCBwb3Np
dGlvbiBpZiB0aGUgc25hcCBhcmVhIGNvdmVycyB0aGUgc25hcHBvcnQgb24geCBvbiB0aGUgbGVm
dCBib3JkZXIuCiBQQVNTIFNuYXBzIGlmIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBwcmV2aW91
cyg0MDApIGFuZCBuZXh0KDgwMCkgc25hcCBwb3NpdGlvbnMgaXMgc21hbGxlciB0aGFuIHNuYXBw
b3J0KDUwMCkgb24geC4KIFBBU1MgU25hcHMgaWYgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIHBy
ZXZpb3VzKDQwMCkgYW5kIG5leHQoODAwKSBzbmFwIHBvc2l0aW9ucyBpcyBzbWFsbGVyIHRoYW4g
c25hcHBvcnQoNTAwKSBvbiB5LgotRkFJTCBTbmFwIHRvIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9u
IHdoaWNoIGlzIGEgdmFsaWQgc25hcCBwb3NpdGlvbiwgYXMgdGhlIHNuYXAgYXJlYSBjb3ZlcnMg
c25hcHBvcnQgb24geCBhbmQgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIHByZXZpb3VzKDgwMCkg
YW5kIG5leHQoMTQwMCkgaXMgbGFyZ2VyIHRoYW4gc25hcHBvcnQoNTAwKS4gYXNzZXJ0X2VxdWFs
czogZXhwZWN0ZWQgOTAwIGJ1dCBnb3QgODAwCi1GQUlMIFNuYXAgdG8gY3VycmVudCBzY3JvbGwg
cG9zaXRpb24gd2hpY2ggaXMgYSB2YWxpZCBzbmFwIHBvc2l0aW9uLCBhcyB0aGUgc25hcCBhcmVh
IGNvdmVycyBzbmFwcG9ydCBvbiB5IGFuZCB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgcHJldmlv
dXMoODAwKSBhbmQgbmV4dCgxNDAwKSBpcyBsYXJnZXIgdGhhbiBzbmFwcG9ydCg1MDApLiBhc3Nl
cnRfZXF1YWxzOiBleHBlY3RlZCA5MDAgYnV0IGdvdCA4MDAKLUZBSUwgU25hcCB0byBjdXJyZW50
IHNjcm9sbCBwb3NpdGlvbiB3aGljaCBpcyBhIHZhbGlkIHNuYXAgcG9zaXRpb24sIGFzIHRoZSBz
bmFwIGFyZWEgY292ZXJzIHNuYXBwb3J0IG9uIHggYW5kIHRoZXJlIGlzIG5vIHN1YnNlcXVlbnQg
c25hcCBwb3NpdGlvbnMuIGFzc2VydF9lcXVhbHM6IGV4cGVjdGVkIDE1MDAgYnV0IGdvdCAxNDAw
Ci1GQUlMIFNuYXAgdG8gY3VycmVudCBzY3JvbGwgcG9zaXRpb24gd2hpY2ggaXMgYSB2YWxpZCBz
bmFwIHBvc2l0aW9uLCBhcyB0aGUgc25hcCBhcmVhIGNvdmVycyBzbmFwcG9ydCBvbiB5IGFuZCB0
aGVyZSBpcyBubyBzdWJzZXF1ZW50IHNuYXAgcG9zaXRpb25zLiBhc3NlcnRfZXF1YWxzOiBleHBl
Y3RlZCAxNTAwIGJ1dCBnb3QgMTQwMAotRkFJTCBEb24ndCBzbmFwIGJhY2sgZXZlbiBpZiBzY3Jv
bGxUbyB0cmllcyB0byBzY3JvbGwgdG8gcG9zaXRpb25zIHdoaWNoIGFyZSBvdXRzaWRlIG9mIHRo
ZSBzY3JvbGwgcmFuZ2UgYW5kIGlmIGEgc25hcCB0YXJnZXQgZWxlbWVudCBjb3ZlcnMgdGhlIHNu
YXBvcnQgYXNzZXJ0X2VxdWFsczogZXhwZWN0ZWQgMzcxNSBidXQgZ290IDIyMDAKLUZBSUwgU25h
cCB0byBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbiBvbiB4IGFzIHRoZSBhcmVhIGlzIGNvdmVyaW5n
IHggYXhpcy5Ib3dldmVyLCB3ZSBzbmFwIHRvIHRoZSBzcGVjaWZpZWQgc25hcCBwb3NpdGlvbiBv
biB5IGFzIHRoZSBhcmVhIGlzIG5vdCBjb3ZlcmluZyB5IGF4aXMuIGFzc2VydF9lcXVhbHM6IGV4
cGVjdGVkIDEwIGJ1dCBnb3QgMAorUEFTUyBTbmFwIHRvIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9u
IHdoaWNoIGlzIGEgdmFsaWQgc25hcCBwb3NpdGlvbiwgYXMgdGhlIHNuYXAgYXJlYSBjb3ZlcnMg
c25hcHBvcnQgb24geCBhbmQgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIHByZXZpb3VzKDgwMCkg
YW5kIG5leHQoMTQwMCkgaXMgbGFyZ2VyIHRoYW4gc25hcHBvcnQoNTAwKS4KK1BBU1MgU25hcCB0
byBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbiB3aGljaCBpcyBhIHZhbGlkIHNuYXAgcG9zaXRpb24s
IGFzIHRoZSBzbmFwIGFyZWEgY292ZXJzIHNuYXBwb3J0IG9uIHkgYW5kIHRoZSBkaXN0YW5jZSBi
ZXR3ZWVuIHRoZSBwcmV2aW91cyg4MDApIGFuZCBuZXh0KDE0MDApIGlzIGxhcmdlciB0aGFuIHNu
YXBwb3J0KDUwMCkuCitQQVNTIFNuYXAgdG8gY3VycmVudCBzY3JvbGwgcG9zaXRpb24gd2hpY2gg
aXMgYSB2YWxpZCBzbmFwIHBvc2l0aW9uLCBhcyB0aGUgc25hcCBhcmVhIGNvdmVycyBzbmFwcG9y
dCBvbiB4IGFuZCB0aGVyZSBpcyBubyBzdWJzZXF1ZW50IHNuYXAgcG9zaXRpb25zLgorUEFTUyBT
bmFwIHRvIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uIHdoaWNoIGlzIGEgdmFsaWQgc25hcCBwb3Np
dGlvbiwgYXMgdGhlIHNuYXAgYXJlYSBjb3ZlcnMgc25hcHBvcnQgb24geSBhbmQgdGhlcmUgaXMg
bm8gc3Vic2VxdWVudCBzbmFwIHBvc2l0aW9ucy4KK1BBU1MgRG9uJ3Qgc25hcCBiYWNrIGV2ZW4g
aWYgc2Nyb2xsVG8gdHJpZXMgdG8gc2Nyb2xsIHRvIHBvc2l0aW9ucyB3aGljaCBhcmUgb3V0c2lk
ZSBvZiB0aGUgc2Nyb2xsIHJhbmdlIGFuZCBpZiBhIHNuYXAgdGFyZ2V0IGVsZW1lbnQgY292ZXJz
IHRoZSBzbmFwb3J0CitQQVNTIFNuYXAgdG8gY3VycmVudCBzY3JvbGwgcG9zaXRpb24gb24geCBh
cyB0aGUgYXJlYSBpcyBjb3ZlcmluZyB4IGF4aXMuSG93ZXZlciwgd2Ugc25hcCB0byB0aGUgc3Bl
Y2lmaWVkIHNuYXAgcG9zaXRpb24gb24geSBhcyB0aGUgYXJlYSBpcyBub3QgY292ZXJpbmcgeSBh
eGlzLgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90aWxlZC1kcmF3aW5nL3Njcm9sbGluZy9z
Y3JvbGwtc25hcC9zY3JvbGwtc25hcC1tYW5kYXRvcnktbWFpbmZyYW1lLXZlcnRpY2FsLXRoZW4t
aG9yaXpvbnRhbC5odG1sIGIvTGF5b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9zY3JvbGxpbmcvc2Ny
b2xsLXNuYXAvc2Nyb2xsLXNuYXAtbWFuZGF0b3J5LW1haW5mcmFtZS12ZXJ0aWNhbC10aGVuLWhv
cml6b250YWwuaHRtbAppbmRleCA2NDI3YTExNGU0OGIyNmJlNjViNTVlN2I4NjhkZjg2NzU2OTFh
OWY4Li45NGRhZDIxNjhjNjBkZTkxNTQ3NmIxZDAxMGE2NDNkMDRmZTkyMGU3IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy90aWxlZC1kcmF3aW5nL3Njcm9sbGluZy9zY3JvbGwtc25hcC9zY3JvbGwt
c25hcC1tYW5kYXRvcnktbWFpbmZyYW1lLXZlcnRpY2FsLXRoZW4taG9yaXpvbnRhbC5odG1sCisr
KyBiL0xheW91dFRlc3RzL3RpbGVkLWRyYXdpbmcvc2Nyb2xsaW5nL3Njcm9sbC1zbmFwL3Njcm9s
bC1zbmFwLW1hbmRhdG9yeS1tYWluZnJhbWUtdmVydGljYWwtdGhlbi1ob3Jpem9udGFsLmh0bWwK
QEAgLTQsNiArNCw3IEBACiAgICAgICAgIDxzdHlsZT4KICAgICAgICAgICAgIGh0bWwgewogICAg
ICAgICAgICAgICAgIHNjcm9sbC1zbmFwLXR5cGU6IHkgbWFuZGF0b3J5OworICAgICAgICAgICAg
ICAgIG1hcmdpbjogMDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC52ZXJ0aWNhbEdhbGxl
cnkgewogICAgICAgICAgICAgICAgIHdpZHRoOiAxMDB2dzsKQEAgLTEyLDcgKzEzLDcgQEAKICAg
ICAgICAgICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLmNv
bG9yQm94IHsKLSAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMHZoOworICAgICAgICAgICAgICAg
IGhlaWdodDogOTB2aDsKICAgICAgICAgICAgICAgICB3aWR0aDogMTAwdnc7CiAgICAgICAgICAg
ICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgICAgICAgICAgICAgc2Nyb2xsLXNuYXAtYWxpZ246IHN0
YXJ0OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9zY3JvbGxpbmcvc2Ny
b2xsLXNuYXAvc2Nyb2xsLXNuYXAtcHJveGltaXR5LW92ZXJmbG93Lmh0bWwgYi9MYXlvdXRUZXN0
cy90aWxlZC1kcmF3aW5nL3Njcm9sbGluZy9zY3JvbGwtc25hcC9zY3JvbGwtc25hcC1wcm94aW1p
dHktb3ZlcmZsb3cuaHRtbAppbmRleCA1YjA1MmZkYmY5NGM4NGEzZDhlMGQxYTI4ZmNiNTIyMDJh
ZWY5ZjJmLi4xNTMxZTFlM2FiMjI1ZTUwMmIzYjcyMGQxZDA2MWI4YmUzMGZmNjJjIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy90aWxlZC1kcmF3aW5nL3Njcm9sbGluZy9zY3JvbGwtc25hcC9zY3Jv
bGwtc25hcC1wcm94aW1pdHktb3ZlcmZsb3cuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90aWxlZC1k
cmF3aW5nL3Njcm9sbGluZy9zY3JvbGwtc25hcC9zY3JvbGwtc25hcC1wcm94aW1pdHktb3ZlcmZs
b3cuaHRtbApAQCAtMTMsMjEgKzEzLDE2IEBACiAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFi
c29sdXRlOwogICAgICAgICAgICAgICAgIHRvcDogMDsKICAgICAgICAgICAgICAgICBsZWZ0OiAw
OwotICAgICAgICAgICAgICAgIG92ZXJmbG93LXg6IG5vbmU7CiAgICAgICAgICAgICAgICAgb3Zl
cmZsb3cteTogc2Nyb2xsOwogICAgICAgICAgICAgICAgIHNjcm9sbC1zbmFwLXR5cGU6IHkgcHJv
eGltaXR5OwotICAgICAgICAgICAgICAgIC13ZWJraXQtc2Nyb2xsLXNuYXAtdHlwZTogcHJveGlt
aXR5OwotICAgICAgICAgICAgICAgIHNjcm9sbC1zbmFwLXR5cGU6IHByb3hpbWl0eTsKICAgICAg
ICAgICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC5h
cmVhIHsKLSAgICAgICAgICAgICAgICBoZWlnaHQ6IDYwMHB4OwotICAgICAgICAgICAgICAgIHdp
ZHRoOiA2MDBweDsKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7CisgICAgICAgICAgICAg
ICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgICAgICAg
ICAgICAgc2Nyb2xsLXNuYXAtYWxpZ246IHN0YXJ0OwotICAgICAgICAgICAgICAgIC13ZWJraXQt
c2Nyb2xsLXNuYXAtY29vcmRpbmF0ZTogMCAwOwotICAgICAgICAgICAgICAgIHNjcm9sbC1zbmFw
LWNvb3JkaW5hdGU6IDAgMDsKICAgICAgICAgICAgIH0KICAgICAgICAgPC9zdHlsZT4KICAgICAg
ICAgPHNjcmlwdD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>