<?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>220214</bug_id>
          
          <creation_ts>2020-12-31 13:08:49 -0800</creation_ts>
          <short_desc>[LFC Display] Introduce type-safe rect types for the display tree</short_desc>
          <delta_ts>2021-08-15 08:44:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>koivisto</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1716933</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-12-31 13:08:49 -0800</bug_when>
    <thetext>[LFC Display] Introduce typesafe rect types for the display tree</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1716934</commentid>
    <comment_count>1</comment_count>
      <attachid>416870</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-12-31 13:10:58 -0800</bug_when>
    <thetext>Created attachment 416870
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1716935</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-12-31 13:11:23 -0800</bug_when>
    <thetext>Feedback welcome on this approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717048</commentid>
    <comment_count>3</comment_count>
      <attachid>416870</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-01-03 11:40:22 -0800</bug_when>
    <thetext>Comment on attachment 416870
Patch

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

&gt; Source/WebCore/display/DisplayGeometryTypes.h:43
&gt; +template&lt;typename T&gt; class TypedFloatRect : public FloatRect {
&gt; +};
&gt; +
&gt; +enum AbsoluteCoordinates { };
&gt; +using AbsoluteFloatRect = TypedFloatRect&lt;AbsoluteCoordinates&gt;;
&gt; +
&gt; +
&gt; +enum ViewCoordinates { };
&gt; +using ViewFloatRect = TypedFloatRect&lt;ViewCoordinates&gt;;

I&apos;m not sure having the template adds much here. Maybe instead just have `class AbsoluteFloatRect : public FloatRect { };` etc. 

For the intersection() and unionRect() functions below, then you could just have:

template&lt;typename T&gt;
inline auto intersection(T&amp; a, const T&amp; b) -&gt; typename std::enable_if_t&lt;std::is_base_of_v&lt;FloatRect, T&gt;, T&gt;
{
    T c = a;
    c.intersect(b);
    return c;
}

(you might just be able to replace the definition in FloatRect with this generic one actually, since std::is_base_of_v&lt;FloatRect, FloatRect&gt; == true).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717049</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-01-03 11:41:56 -0800</bug_when>
    <thetext>The templates were intended to prevent implicit conversion, but maybe I can achieve the same with explicit constructors etc?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717128</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-01-04 08:46:33 -0800</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #4)
&gt; The templates were intended to prevent implicit conversion, but maybe I can
&gt; achieve the same with explicit constructors etc?

Implicit conversion in which direction?

Just by having the subclass you will avoid implicit conversion of FloatRect to AbsoluteFloatRect. As an example

void foo(const AbsoluteFloatRect&amp; rect)
{
}

FloatRect rect;
foo(rect);

This would fail to compile.

However, this would still work:

void bar(const FloatRect&amp; rect)
{
}

AbsoluteFloatRect rect;
bar(rect);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718060</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-01-07 13:09:24 -0800</bug_when>
    <thetext>&lt;rdar://problem/72902364&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784362</commentid>
    <comment_count>7</comment_count>
      <attachid>435555</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-08-14 20:00:46 -0700</bug_when>
    <thetext>Created attachment 435555
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784385</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-08-15 08:44:35 -0700</bug_when>
    <thetext>Committed r281061 (240523@main): &lt;https://commits.webkit.org/240523@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 435555.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416870</attachid>
            <date>2020-12-31 13:10:58 -0800</date>
            <delta_ts>2021-08-14 20:00:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220214-20201231131057.patch</filename>
            <type>text/plain</type>
            <size>15848</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxMTEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjY3ZjM5ODZmNGU0ZGQ4
YTdhYjk5M2VkYzJjMmEzNmY2NmZlYTVjOC4uZTU3ZTA1NWU2NTM0MTBiZGVjM2Q4NTlkMzU3ZTcw
Mzg3OTA1NmFmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIwLTEyLTMxICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFtMRkMgRGlzcGxh
eV0gSW50cm9kdWNlIHR5cGUtc2FmZSByZWN0IHR5cGVzIGZvciB0aGUgZGlzcGxheSB0cmVlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjAyMTQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIEFic29s
dXRlRmxvYXRSZWN0IGFuZCBWaWV3RmxvYXRSZWN0IHdoaWNoIGFyZSB0eXBlLXNhZmUgZmxvYXQg
cmVjdCB0eXBlcyBmb3IKKyAgICAgICAgdGhlIGRpc3BsYXkgdHJlZS4KKworICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkaXNwbGF5L0Rpc3Bs
YXlHZW9tZXRyeVR5cGVzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvRGlz
cGxheVRyZWUuaC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OmludGVyc2VjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Ojp1bmlvblJlY3QpOgorICAgICAgICAqIGRpc3BsYXkv
RGlzcGxheVRyZWUuaDoKKyAgICAgICAgKiBkaXNwbGF5L2Nzcy9EaXNwbGF5Qm94Lmg6CisgICAg
ICAgICogZGlzcGxheS9jc3MvRGlzcGxheUJveENsaXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6Qm94Q2xpcDo6cHVzaFJvdW5kZWRDbGlwKToKKyAgICAgICAgKiBkaXNwbGF5L2Nz
cy9EaXNwbGF5Qm94RmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hG
YWN0b3J5OjpkaXNwbGF5Qm94Rm9yUm9vdEJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5OjpCb3hGYWN0b3J5OjpkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveEZhY3Rvcnk6OmRpc3BsYXlCb3hGb3JUZXh0UnVuIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveEZhY3Rvcnk6OnNldHVwQm94R2Vv
bWV0cnkgY29uc3QpOgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlCb3hNb2RlbEJveC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hNb2RlbEJveDo6Y2xpcEZvckRlc2Nl
bmRhbnRzIGNvbnN0KToKKwogMjAyMC0xMi0zMSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2Vy
QGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDIERpc3BsYXldIEdpdmUgZGlzcGxheSBib3hlcyBh
IHByZXZpb3VzU2libGluZyBwb2ludGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYjU5YmEwOTc4NDQ2Y2UzNjYyNWE2MjYwODM0
NTgxYzAxNmVjZjkyZS4uN2M5NzRkZWM0NjY3NjM0ODJmYTFlMzc3MjQ4YWZiNDhlOWVmYmE2MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtNjA0Nyw4ICs2MDQ3LDggQEAKIAkJMEY0Q0RFQUEyM0Q5MUE4QTAwMjUxQjAyIC8qIFNj
cm9sbFR5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbFR5cGVzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1M0ZCODEyMTNCMUJCODAwQzQwRDM0IC8qIENTU0Zp
bHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGaWx0ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4MzIxM0IxQkI4MDBDNDBE
MzQgLyogQ1NTRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0Zp
bHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjUzRkI4NDIxM0I3ODY0MDBD
NDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NTNGQjgzMjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjUzRkI4NDIxM0I3ODY0MDBDNDBEMzQgLyogUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjg5MjEzQjc2ODQw
MEM0MEQzNCAvKiBSZW5kZXJMYXllckZpbHRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTGF5
ZXJGaWx0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjhCMjEzQjc2
ODQwMEM0MEQzNCAvKiBSZW5kZXJMYXllckZpbHRlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1
NERDRTMxODgxMDUxRDAwM0VFREJCIC8qIFRleHRBdXRvU2l6aW5nLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRBdXRvU2l6aW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTYxMzcsNiArNjEzNyw3IEBACiAJCTBGQjYyNTJEMThERTFCMTUw
MEEwN0MwNSAvKiBHZW9tZXRyeVV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBHZW9tZXRyeVV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkI4ODkwQzE2N0QzMDE2MDAxMENEQTUgLyogU2Nyb2xsaW5nU3RhdGVTdGlja3lOb2RlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGluZ1N0YXRlU3Rp
Y2t5Tm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjg4OTBEMTY3RDMw
MTYwMDEwQ0RBNSAvKiBTY3JvbGxpbmdTdGF0ZVN0aWNreU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsaW5nU3RhdGVTdGlja3lOb2RlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQkRCQUUxMjU5RTZEOTIwMDIzQTg1QSAvKiBEaXNwbGF5R2Vv
bWV0cnlUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5R2VvbWV0cnlUeXBlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkJGQ0UyNDI1NkNCRDlBMDBBMEI0ODkgLyogRGlz
cGxheUJveENsaXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlzcGxheUJveENsaXAuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkJGQ0UyNjI1NkNCRDlBMDBBMEI0ODkgLyog
RGlzcGxheUJveENsaXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUJveENsaXAuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDMDUxNjgyMTlCNUVCRTAwMzFDMzlFIC8qIFNjcm9s
bGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlTWFjLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTc4NTIsNiArMTc4NTMsNyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJ
CQkJMEZDNjkyQzMyNTdENzBDQTAwOThFM0Y5IC8qIGNvbXBvc2l0aW5nICovLAogCQkJCTBGRkYx
QjcxMjUxQkM2NTcwMDk4Nzk1QSAvKiBjc3MgKi8sCisJCQkJMEZCREJBRTEyNTlFNkQ5MjAwMjNB
ODVBIC8qIERpc3BsYXlHZW9tZXRyeVR5cGVzLmggKi8sCiAJCQkJMEZGRjFCODIyNTFCQzY2MzAw
OTg3OTVBIC8qIERpc3BsYXlUcmVlLmNwcCAqLywKIAkJCQkwRkZGMUI4MTI1MUJDNjYzMDA5ODc5
NUEgLyogRGlzcGxheVRyZWUuaCAqLywKIAkJCQkwRkZGMUI4MDI1MUJDNjYyMDA5ODc5NUEgLyog
RGlzcGxheVRyZWVCdWlsZGVyLmNwcCAqLywKQEAgLTMxNDM4LDYgKzMxNDQwLDcgQEAKIAkJCQk3
Q0FDNkFFOTI0N0YwODJGMDBFNjFENTkgLyogQ29sb3JNYXRyaXguaCBpbiBIZWFkZXJzICovLAog
CQkJCTdDRDFFNjkzMjRBQkY2MjQwMDg5QzQxOSAvKiBDb2xvclNlcmlhbGl6YXRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzODJERjU4MTBBOEQ1QzkwMDkyNTY1MiAvKiBDb2xvclNwYWNlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlCQ0FGRURCNDI1OTY4RDBCMDAzMEU2QUEgLyogQ29sb3JTcGFj
ZUNHLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzAyOUM2RTI0OTNDOEY4MDAyNjgyMDQgLyogQ29s
b3JUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQUY2NkIyM0JGQzM5RTAwNDAzMERBIC8q
IENvbG9yVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0RENDU0RTEyMzZDOTVDMDA5
QTc5ODUgLyogQ29sdW1uSW5mby5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDgxOSw3ICszNDgyMiw2
IEBACiAJCQkJQjIyMjc5RjIwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFTGlnaHRFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzlGNDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVNZXJn
ZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OUY3MEQwMEJGMjIwMDcxQjc4MiAv
KiBTVkdGRU1lcmdlTm9kZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUJDQUZFREI0MjU5
NjhEMEIwMDMwRTZBQSAvKiBDb2xvclNwYWNlQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0MjI0
MTk0MTA3RTc4QTcwMDc2NkE4NyAvKiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCMjIyNzlGQTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVPZmZzZXRFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzlGRDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVQ
b2ludExpZ2h0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kaXNwbGF5L0Rpc3BsYXlHZW9tZXRyeVR5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9kaXNw
bGF5L0Rpc3BsYXlHZW9tZXRyeVR5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGFjNjFkMmI4NjMyNDRmODdh
ZmEzNGEyMTkwZGQ4ZDhmMTg2MTgzZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Rpc3BsYXkvRGlzcGxheUdlb21ldHJ5VHlwZXMuaApAQCAtMCwwICsxLDY2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVY
VCkKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1l
c3BhY2UgRGlzcGxheSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFR5cGVkRmxvYXRS
ZWN0IDogcHVibGljIEZsb2F0UmVjdCB7Cit9OworCitlbnVtIEFic29sdXRlQ29vcmRpbmF0ZXMg
eyB9OwordXNpbmcgQWJzb2x1dGVGbG9hdFJlY3QgPSBUeXBlZEZsb2F0UmVjdDxBYnNvbHV0ZUNv
b3JkaW5hdGVzPjsKKworCitlbnVtIFZpZXdDb29yZGluYXRlcyB7IH07Cit1c2luZyBWaWV3Rmxv
YXRSZWN0ID0gVHlwZWRGbG9hdFJlY3Q8Vmlld0Nvb3JkaW5hdGVzPjsKKworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgoraW5saW5lIFR5cGVkRmxvYXRSZWN0PFQ+IGludGVyc2VjdGlvbihjb25zdCBU
eXBlZEZsb2F0UmVjdDxUPiYgYSwgY29uc3QgVHlwZWRGbG9hdFJlY3Q8VD4mIGIpCit7CisgICAg
VHlwZWRGbG9hdFJlY3Q8VD4gYyA9IGE7CisgICAgYy5pbnRlcnNlY3QoYik7CisgICAgcmV0dXJu
IGM7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgVHlwZWRGbG9hdFJlY3Q8VD4g
dW5pb25SZWN0KGNvbnN0IFR5cGVkRmxvYXRSZWN0PFQ+JiBhLCBjb25zdCBUeXBlZEZsb2F0UmVj
dDxUPiYgYikKK3sKKyAgICBUeXBlZEZsb2F0UmVjdDxUPiBjID0gYTsKKyAgICBjLnVuaXRlKGIp
OworICAgIHJldHVybiBjOworfQorCisKK30gLy8gbmFtZXNwYWNlIERpc3BsYXkKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05U
RVhUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNwbGF5VHJlZS5oIGIv
U291cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNwbGF5VHJlZS5oCmluZGV4IDBjYmE2MzNmMTM1MzA2
YzI5Mzc5OGYwOWVmZTFhNTgzMTE1MTYwOGMuLjExMTk0YzQ1MjUwMjUzODRjNTYwOTAxMGQzMDIx
NGMzMTNmMzI2YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvRGlzcGxheVRy
ZWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlUcmVlLmgKQEAgLTI3LDcg
KzI3LDcgQEAKIAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCi0jaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRGlzcGxheUdlb21ldHJ5VHlwZXMuaCIKICNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDgg
KzM4LDYgQEAgY2xhc3MgQ29udGFpbmVyQm94OwogY2xhc3MgU3RhY2tpbmdJdGVtOwogY2xhc3Mg
VmlldzsKIAotdXNpbmcgQWJzb2x1dGVGbG9hdFJlY3QgPSBGbG9hdFJlY3Q7Ci0KIGNsYXNzIFRy
ZWUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEKFRyZWUpOwogICAgIGZyaWVuZCBjbGFz
cyBUcmVlQnVpbGRlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rp
c3BsYXlCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3guaAppbmRl
eCBhYzJlOTc0YjM4MWFlMzM3ZWNiNmY0NmFkZTU5M2FkOWM3MmQ0MzcyLi5iNmY1OTJjNDM4OTZl
NzNlOTgzODBkMzg0MDcwZTVkN2M1YTQzZWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
aXNwbGF5L2Nzcy9EaXNwbGF5Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3Mv
RGlzcGxheUJveC5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1B
VFRJTkdfQ09OVEVYVCkKIAorI2luY2x1ZGUgIkRpc3BsYXlHZW9tZXRyeVR5cGVzLmgiCiAjaW5j
bHVkZSAiRGlzcGxheVN0eWxlLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSA8
d3RmL0lzb01hbGxvYy5oPgpAQCAtMzgsOSArMzksNiBAQCBuYW1lc3BhY2UgRGlzcGxheSB7CiBj
bGFzcyBDb250YWluZXJCb3g7CiBjbGFzcyBUcmVlOwogCi0vLyBGSVhNRTogTWFrZSB0aGlzIGEg
c3Ryb25nIHR5cGUuCi11c2luZyBBYnNvbHV0ZUZsb2F0UmVjdCA9IEZsb2F0UmVjdDsKLQogY2xh
c3MgQm94IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklF
UihCb3gpOwogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3Mv
RGlzcGxheUJveENsaXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJv
eENsaXAuY3BwCmluZGV4IGRmMmU4NWFmNDAzNWI5NzQ0YjU0Nzc5YTM2MjQ5NmI5NmE5YTk3NDYu
LmY3M2FmM2UwOTJiMTJlMjM3YTZmNTVhMGIzOTEwYmI5OWI3OTJlNTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hDbGlwLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94Q2xpcC5jcHAKQEAgLTYxLDcgKzYxLDcgQEAg
dm9pZCBCb3hDbGlwOjpwdXNoQ2xpcChjb25zdCBBYnNvbHV0ZUZsb2F0UmVjdCYgcmVjdCkKIHZv
aWQgQm94Q2xpcDo6cHVzaFJvdW5kZWRDbGlwKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5k
ZWRSZWN0KQogewogICAgIEFTU0VSVChyb3VuZGVkUmVjdC5pc1JvdW5kZWQoKSk7Ci0gICAgcHVz
aENsaXAocm91bmRlZFJlY3QucmVjdCgpKTsKKyAgICBwdXNoQ2xpcChBYnNvbHV0ZUZsb2F0UmVj
dCB7IHJvdW5kZWRSZWN0LnJlY3QoKSB9KTsKIAogICAgIG1fYWZmZWN0ZWRCeUJvcmRlclJhZGl1
cyA9IHRydWU7CiAgICAgbV9jbGlwU3RhY2suYXBwZW5kKHJvdW5kZWRSZWN0KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hGYWN0b3J5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hGYWN0b3J5LmNwcAppbmRleCA3NTk5
ZmIxNDc3NDE1MTBjNDQ0OTdhYjU1MDQ1YTI2ZDg2NTY4YTY2Li5lNDI1NGJiODI4YjkzMDY3OGQ5
M2NkYTRhNDliN2M5MjQ0ZjQ0ZmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5
L2Nzcy9EaXNwbGF5Qm94RmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9j
c3MvRGlzcGxheUJveEZhY3RvcnkuY3BwCkBAIC04OCw3ICs4OCw3IEBAIHN0ZDo6dW5pcXVlX3B0
cjxDb250YWluZXJCb3g+IEJveEZhY3Rvcnk6OmRpc3BsYXlCb3hGb3JSb290Qm94KGNvbnN0IExh
eW91dDo6Q29uCiAKICAgICBhdXRvIHN0eWxlID0gU3R5bGUgeyByb290TGF5b3V0Qm94LnN0eWxl
KCksIHN0eWxlRm9yQmFja2dyb3VuZCB9OwogCi0gICAgYXV0byByb290Qm94ID0gbWFrZVVuaXF1
ZTxDb250YWluZXJCb3g+KG1fdHJlZUJ1aWxkZXIudHJlZSgpLCBzbmFwUmVjdFRvRGV2aWNlUGl4
ZWxzKGJvcmRlckJveFJlY3QsIG1fcGl4ZWxTbmFwcGluZ0ZhY3RvciksIFdURk1vdmUoc3R5bGUp
KTsKKyAgICBhdXRvIHJvb3RCb3ggPSBtYWtlVW5pcXVlPENvbnRhaW5lckJveD4obV90cmVlQnVp
bGRlci50cmVlKCksIEFic29sdXRlRmxvYXRSZWN0IHsgc25hcFJlY3RUb0RldmljZVBpeGVscyhi
b3JkZXJCb3hSZWN0LCBtX3BpeGVsU25hcHBpbmdGYWN0b3IpIH0sIFdURk1vdmUoc3R5bGUpKTsK
ICAgICAvLyBXZSBwYXNzIHJvb3RCb3ggYXMgaXRzIG93biBjb250YWluaW5nQmxvY2tCb3ggaGVy
ZSB0byBhbGxvdyBpdCB0byBiZSBhIHJlZmVyZW5jZSBldmVyeXdoZXJlIGVsc2UuCiAgICAgc2V0
dXBCb3hNb2RlbEJveCgqcm9vdEJveCwgcm9vdExheW91dEJveCwgZ2VvbWV0cnksIHsgKnJvb3RC
b3gsIHsgMCwgMCB9IH0sIHN0eWxlRm9yQmFja2dyb3VuZCk7CiAgICAgcmV0dXJuIHJvb3RCb3g7
CkBAIC0xMTYsNyArMTE2LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEJveD4gQm94RmFjdG9yeTo6ZGlz
cGxheUJveEZvckxheW91dEJveChjb25zdCBMYXlvdXQ6OkJveCYgbGF5b3UKICAgICAvLyBGSVhN
RTogTmVlZCB0byBtYXAgbG9naWNhbCB0byBwaHlzaWNhbCByZWN0cy4KICAgICBhdXRvIGJvcmRl
ckJveFJlY3QgPSBMYXlvdXRSZWN0IHsgTGF5b3V0OjpCb3hHZW9tZXRyeTo6Ym9yZGVyQm94UmVj
dChnZW9tZXRyeSkgfTsKICAgICBib3JkZXJCb3hSZWN0Lm1vdmUoY29udGFpbmluZ0Jsb2NrQ29u
dGV4dC5vZmZzZXRGcm9tUm9vdCk7Ci0gICAgYXV0byBwaXhlbFNuYXBwZWRCb3JkZXJCb3hSZWN0
ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhib3JkZXJCb3hSZWN0LCBtX3BpeGVsU25hcHBpbmdG
YWN0b3IpOworICAgIGF1dG8gcGl4ZWxTbmFwcGVkQm9yZGVyQm94UmVjdCA9IEFic29sdXRlRmxv
YXRSZWN0IHsgc25hcFJlY3RUb0RldmljZVBpeGVscyhib3JkZXJCb3hSZWN0LCBtX3BpeGVsU25h
cHBpbmdGYWN0b3IpIH07CiAKICAgICAvLyBGSVhNRTogSGFuZGxlIGlzQW5vbnltb3VzKCkKICAg
ICAKQEAgLTE0Myw3ICsxNDMsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8Qm94PiBCb3hGYWN0b3J5Ojpk
aXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGNvbnN0IExheW91dDo6Qm94JiBsYXlvdQogICAgIGlmIChs
YXlvdXRCb3guaXNMaW5lQnJlYWtCb3goKSkKICAgICAgICAgZmxhZ3MuYWRkKEJveDo6RmxhZ3M6
OkxpbmVCcmVha0JveCk7CiAKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxCb3g+KG1fdHJlZUJ1aWxk
ZXIudHJlZSgpLCBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGJvcmRlckJveFJlY3QsIG1fcGl4ZWxT
bmFwcGluZ0ZhY3RvciksIFdURk1vdmUoc3R5bGUpLCBmbGFncyk7CisgICAgcmV0dXJuIG1ha2VV
bmlxdWU8Qm94PihtX3RyZWVCdWlsZGVyLnRyZWUoKSwgcGl4ZWxTbmFwcGVkQm9yZGVyQm94UmVj
dCwgV1RGTW92ZShzdHlsZSksIGZsYWdzKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEJveD4gQm94
RmFjdG9yeTo6ZGlzcGxheUJveEZvclRleHRSdW4oY29uc3QgTGF5b3V0OjpMaW5lUnVuJiBydW4s
IGNvbnN0IExheW91dDo6SW5saW5lTGluZUdlb21ldHJ5JiBsaW5lR2VvbWV0cnksIGNvbnN0IENv
bnRhaW5pbmdCbG9ja0NvbnRleHQmIGNvbnRhaW5pbmdCbG9ja0NvbnRleHQpIGNvbnN0CkBAIC0x
NTcsNyArMTU3LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEJveD4gQm94RmFjdG9yeTo6ZGlzcGxheUJv
eEZvclRleHRSdW4oY29uc3QgTGF5b3V0OjpMaW5lUnVuJiBydW4KICAgICBydW5SZWN0Lm1vdmUo
Y29udGFpbmluZ0Jsb2NrQ29udGV4dC5vZmZzZXRGcm9tUm9vdCk7CiAKICAgICBhdXRvIHN0eWxl
ID0gU3R5bGUgeyBydW4ubGF5b3V0Qm94KCkuc3R5bGUoKSB9OwotICAgIHJldHVybiBtYWtlVW5p
cXVlPFRleHRCb3g+KG1fdHJlZUJ1aWxkZXIudHJlZSgpLCBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxz
KHJ1blJlY3QsIG1fcGl4ZWxTbmFwcGluZ0ZhY3RvciksIFdURk1vdmUoc3R5bGUpLCBydW4pOwor
ICAgIHJldHVybiBtYWtlVW5pcXVlPFRleHRCb3g+KG1fdHJlZUJ1aWxkZXIudHJlZSgpLCBBYnNv
bHV0ZUZsb2F0UmVjdCB7IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMocnVuUmVjdCwgbV9waXhlbFNu
YXBwaW5nRmFjdG9yKSB9LCBXVEZNb3ZlKHN0eWxlKSwgcnVuKTsKIH0KIAogdm9pZCBCb3hGYWN0
b3J5OjpzZXR1cEJveEdlb21ldHJ5KEJveE1vZGVsQm94JiBib3gsIGNvbnN0IExheW91dDo6Qm94
JiwgY29uc3QgTGF5b3V0OjpCb3hHZW9tZXRyeSYgbGF5b3V0R2VvbWV0cnksIGNvbnN0IENvbnRh
aW5pbmdCbG9ja0NvbnRleHQmIGNvbnRhaW5pbmdCbG9ja0NvbnRleHQpIGNvbnN0CkBAIC0xNjcs
MTggKzE2NywxOCBAQCB2b2lkIEJveEZhY3Rvcnk6OnNldHVwQm94R2VvbWV0cnkoQm94TW9kZWxC
b3gmIGJveCwgY29uc3QgTGF5b3V0OjpCb3gmLCBjb25zdCBMYQogCiAgICAgYXV0byBwYWRkaW5n
Qm94UmVjdCA9IExheW91dFJlY3QgeyBsYXlvdXRHZW9tZXRyeS5wYWRkaW5nQm94KCkgfTsKICAg
ICBwYWRkaW5nQm94UmVjdC5tb3ZlQnkoYm9yZGVyQm94UmVjdC5sb2NhdGlvbigpKTsKLSAgICBi
b3guc2V0QWJzb2x1dGVQYWRkaW5nQm94UmVjdChzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKHBhZGRp
bmdCb3hSZWN0LCBtX3BpeGVsU25hcHBpbmdGYWN0b3IpKTsKKyAgICBib3guc2V0QWJzb2x1dGVQ
YWRkaW5nQm94UmVjdChBYnNvbHV0ZUZsb2F0UmVjdCB7IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMo
cGFkZGluZ0JveFJlY3QsIG1fcGl4ZWxTbmFwcGluZ0ZhY3RvcikgfSk7CiAKICAgICBhdXRvIGNv
bnRlbnRCb3hSZWN0ID0gTGF5b3V0UmVjdCB7IGxheW91dEdlb21ldHJ5LmNvbnRlbnRCb3goKSB9
OwogICAgIGNvbnRlbnRCb3hSZWN0Lm1vdmVCeShib3JkZXJCb3hSZWN0LmxvY2F0aW9uKCkpOwot
ICAgIGJveC5zZXRBYnNvbHV0ZUNvbnRlbnRCb3hSZWN0KHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMo
Y29udGVudEJveFJlY3QsIG1fcGl4ZWxTbmFwcGluZ0ZhY3RvcikpOworICAgIGJveC5zZXRBYnNv
bHV0ZUNvbnRlbnRCb3hSZWN0KEFic29sdXRlRmxvYXRSZWN0IHsgc25hcFJlY3RUb0RldmljZVBp
eGVscyhjb250ZW50Qm94UmVjdCwgbV9waXhlbFNuYXBwaW5nRmFjdG9yKSB9KTsKIAogICAgIGlm
IChpczxSZXBsYWNlZEJveD4oYm94KSkgewogICAgICAgICBhdXRvJiByZXBsYWNlZEJveCA9IGRv
d25jYXN0PFJlcGxhY2VkQm94Pihib3gpOwogICAgICAgICAvLyBGSVhNRTogTmVlZCB0byBnZXQg
dGhlIGNvcnJlY3QgcmVjdCB0YWtpbmcgb2JqZWN0LWZpdCBldGMgaW50byBhY2NvdW50LgogICAg
ICAgICBhdXRvIHJlcGxhY2VkQ29udGVudFJlY3QgPSBMYXlvdXRSZWN0IHsgbGF5b3V0R2VvbWV0
cnkuY29udGVudEJveExlZnQoKSwgbGF5b3V0R2VvbWV0cnkuY29udGVudEJveFRvcCgpLCBsYXlv
dXRHZW9tZXRyeS5jb250ZW50Qm94V2lkdGgoKSwgbGF5b3V0R2VvbWV0cnkuY29udGVudEJveEhl
aWdodCgpIH07CiAgICAgICAgIHJlcGxhY2VkQ29udGVudFJlY3QubW92ZUJ5KGJvcmRlckJveFJl
Y3QubG9jYXRpb24oKSk7Ci0gICAgICAgIGF1dG8gcGl4ZWxTbmFwcGVkUmVwbGFjZWRDb250ZW50
UmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMocmVwbGFjZWRDb250ZW50UmVjdCwgbV9waXhl
bFNuYXBwaW5nRmFjdG9yKTsKKyAgICAgICAgYXV0byBwaXhlbFNuYXBwZWRSZXBsYWNlZENvbnRl
bnRSZWN0ID0gQWJzb2x1dGVGbG9hdFJlY3QgeyBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKHJlcGxh
Y2VkQ29udGVudFJlY3QsIG1fcGl4ZWxTbmFwcGluZ0ZhY3RvcikgfTsKICAgICAgICAgcmVwbGFj
ZWRCb3guc2V0UmVwbGFjZWRDb250ZW50UmVjdChwaXhlbFNuYXBwZWRSZXBsYWNlZENvbnRlbnRS
ZWN0KTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9E
aXNwbGF5Qm94TW9kZWxCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxh
eUJveE1vZGVsQm94LmNwcAppbmRleCAwNjFlODdiMTY3MGIwOWRiNGRkYWIzYzFhZWNiZDU5OWFh
OTBkZjU5Li5mNmEwMDc4OWYzYjVmNDEyZjBmOTJiNzU4OGIwYTQ4ODRhOWY0ODllIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94TW9kZWxCb3guY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hNb2RlbEJveC5jcHAKQEAg
LTEwNiw3ICsxMDYsNyBAQCBSZWZQdHI8Qm94Q2xpcD4gQm94TW9kZWxCb3g6OmNsaXBGb3JEZXNj
ZW5kYW50cygpIGNvbnN0CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBib3hDbGlwLnB1c2hDbGlwKHJvdW5kZWRJbm5lckJvcmRlci5yZWN0KCkp
OworICAgICAgICAgICAgYm94Q2xpcC5wdXNoQ2xpcChBYnNvbHV0ZUZsb2F0UmVjdCB7IHJvdW5k
ZWRJbm5lckJvcmRlci5yZWN0KCkgfSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435555</attachid>
            <date>2021-08-14 20:00:46 -0700</date>
            <delta_ts>2021-08-15 08:44:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220214-20210814200045.patch</filename>
            <type>text/plain</type>
            <size>35274</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwODcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTdkMWE3M2I2YTU1Y2Y1
YmMyZmM1MmM5MTI0OTZkOTZkZWE2OTZlNS4uODU0NjJhYThmN2Q2NjFhOTBlYTk1MjkxMGE5M2Iz
NmM0MWZjZmQ3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDIxLTA4LTE0ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFtMRkMgRGlzcGxh
eV0gSW50cm9kdWNlIHR5cGUtc2FmZSByZWN0IHR5cGVzIGZvciB0aGUgZGlzcGxheSB0cmVlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjAyMTQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2Ug
QWJzb2x1dGVGbG9hdFJlY3QsIFVuYWRqdXN0ZWRBYnNvbHV0ZUZsb2F0UmVjdCBhbmQgVmlld0Zs
b2F0UmVjdCB3aGljaCBhcmUKKyAgICAgICAgdHlwZS1zYWZlIGZsb2F0IHJlY3QgdHlwZXMgZm9y
IHRoZSBkaXNwbGF5IHRyZWUuCisKKyAgICAgICAgQWJzb2x1dGVGbG9hdFJlY3QgaXMgcmVsYXRp
dmUgdG8gZG9jdW1lbnQgb3JpZ2luLiBVbmFkanVzdGVkQWJzb2x1dGVGbG9hdFJlY3QgaXMgc2lt
aWxhciwKKyAgICAgICAgYnV0IGlzIGNvbXB1dGVkIGJlZm9yZSBzY3JvbGxpbmcgYW5kIHRyYW5z
Zm9ybXMgYXJlIHRha2VuIGludG8gYWNjb3VudC4KKworICAgICAgICBWaWV3RmxvYXRSZWN0IGlz
IHJlbGF0aXZlIHRvIHRoZSB2aWV3LgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGRpc3BsYXkvRGlzcGxheUdlb21ldHJ5VHlwZXMuaDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheVJlcGxhY2VkQm94
LmguCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjppbnRlcnNlY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheTo6dW5pb25SZWN0KToKKyAgICAgICAgKiBkaXNwbGF5L0Rpc3BsYXlU
cmVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlRyZWU6OnNldEJveE5lZWRzRGlz
cGxheSBjb25zdCk6CisgICAgICAgICogZGlzcGxheS9EaXNwbGF5VHJlZS5oOgorICAgICAgICAq
IGRpc3BsYXkvRGlzcGxheVRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKiBkaXNwbGF5L2Nzcy9E
aXNwbGF5Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6Qm94KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveDo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAg
KiBkaXNwbGF5L2Nzcy9EaXNwbGF5Qm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpC
b3g6OkJveCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OmFic29sdXRlQm94UmVj
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3g6OmFic29sdXRlUGFpbnRp
bmdFeHRlbnQgY29uc3QpOgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlCb3hDbGlwLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveENsaXA6OnB1c2hDbGlwKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveENsaXA6OnB1c2hSb3VuZGVkQ2xpcCk6CisgICAgICAg
ICogZGlzcGxheS9jc3MvRGlzcGxheUJveENsaXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXk6OkJveENsaXA6OmNsaXBSZWN0IGNvbnN0KToKKyAgICAgICAgKiBkaXNwbGF5L2Nzcy9EaXNw
bGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6
Qm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50RmlsbExheWVyIGNvbnN0KToKKyAgICAgICAgKiBk
aXNwbGF5L2Nzcy9EaXNwbGF5Qm94RmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5OjpCb3hGYWN0b3J5OjpkaXNwbGF5Qm94Rm9yUm9vdEJveCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5OjpCb3hGYWN0b3J5OjpkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveEZhY3Rvcnk6OmRpc3BsYXlCb3hGb3JU
ZXh0UnVuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveEZhY3Rvcnk6OnNl
dHVwQm94R2VvbWV0cnkgY29uc3QpOgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlCb3hN
b2RlbEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hNb2RlbEJveDo6Qm94
TW9kZWxCb3gpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94TW9kZWxCb3g6OmNsaXBG
b3JEZXNjZW5kYW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hNb2Rl
bEJveDo6YWJzb2x1dGVQYWludGluZ0V4dGVudCBjb25zdCk6CisgICAgICAgICogZGlzcGxheS9j
c3MvRGlzcGxheUJveE1vZGVsQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hN
b2RlbEJveDo6Qm94TW9kZWxCb3gpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94TW9k
ZWxCb3g6OmFic29sdXRlQm9yZGVyQm94UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5OjpCb3hNb2RlbEJveDo6YWJzb2x1dGVQYWRkaW5nQm94UmVjdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hNb2RlbEJveDo6YWJzb2x1dGVDb250ZW50Qm94UmVj
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hNb2RlbEJveDo6c2V0QWJz
b2x1dGVQYWRkaW5nQm94UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hNb2Rl
bEJveDo6c2V0QWJzb2x1dGVDb250ZW50Qm94UmVjdCk6CisgICAgICAgICogZGlzcGxheS9jc3Mv
RGlzcGxheUNvbnRhaW5lckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpDb250
YWluZXJCb3g6OkNvbnRhaW5lckJveCk6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUNv
bnRhaW5lckJveC5oOgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlJbWFnZUJveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpJbWFnZUJveDo6SW1hZ2VCb3gpOgorICAgICAg
ICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlJbWFnZUJveC5oOgorICAgICAgICAqIGRpc3BsYXkvY3Nz
L0Rpc3BsYXlSZXBsYWNlZEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSZXBs
YWNlZEJveDo6UmVwbGFjZWRCb3gpOgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlSZXBs
YWNlZEJveC5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVwbGFjZWRCb3g6OnJlcGxh
Y2VkQ29udGVudFJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UmVwbGFj
ZWRCb3g6OnNldFJlcGxhY2VkQ29udGVudFJlY3QpOgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rp
c3BsYXlTdGFja2luZ0l0ZW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlN0YWNraW5n
SXRlbTo6cGFpbnRlZENvbnRlbnRCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheTo6U3RhY2tpbmdJdGVtOjpwYWludGVkQm91bmRzSW5jbHVkaW5nRGVzY2VuZGFudEl0ZW1z
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlN0YWNraW5nSXRlbTo6c2V0UGFp
bnRlZENvbnRlbnRCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6U3RhY2tpbmdJ
dGVtOjpzZXRQYWludGVkQm91bmRzSW5jbHVkaW5nRGVzY2VuZGFudEl0ZW1zKToKKyAgICAgICAg
KiBkaXNwbGF5L2Nzcy9EaXNwbGF5VGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5OjpUZXh0Qm94OjpUZXh0Qm94KToKKyAgICAgICAgKiBkaXNwbGF5L2Nzcy9EaXNwbGF5VGV4
dEJveC5oOgorCiAyMDIxLTA4LTE0ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtMRkMgRGlzcGxheV0gR2l2ZSBkaXNwbGF5IGJveGVzIGEgcHJldmlv
dXNTaWJsaW5nIHBvaW50ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCAzNjQxNzExNGYwM2FlMDEzOTJiODlkNzNhY2NhZWRjNzY4
NGIwYzdhLi43NGM0NmQ1Mzk4MWU5ZDBmYzEyMDUyMDM5YTk3OGQyMjI1ZDlkYWQ3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02
MzU1LDYgKzYzNTUsNyBAQAogCQkwRkYyOUE1MzI1MTAxQTYxMDAzQzM0RTIgLyogTGF5b3V0Qm94
R2VvbWV0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0Qm94R2VvbWV0cnkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGMjlBNTUyNTEwMUE2MTAwM0MzNEUyIC8qIExheW91dEJv
eEdlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dEJveEdlb21ldHJ5LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGMkU4MEMxRUUwRDQzMDAwOUVBQkQ0IC8q
IFBlcmZvcm1hbmNlTG9nZ2luZ0NsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQZXJmb3JtYW5jZUxvZ2dpbmdDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkYzMzEyOTI2QzhBMUVDMDBFMjdENDggLyogRGlzcGxheUdlb21ldHJ5
VHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUdlb21ldHJ5VHlwZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGM0I5MjQxRUUzQjZERTAwQjg0MTQ0IC8qIEpTRE9NUXVh
ZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVF1YWQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkYzQjkyNTFFRTNCNkRFMDBCODQxNDQg
LyogSlNET01RdWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NUXVh
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkYzQjkyNjFFRTNCNkRFMDBCODQx
NDQgLyogSlNET01RdWFkSW5pdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0RPTVF1YWRJbml0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3
ODI5LDYgKzE3ODMwLDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTBGQzY5MkMzMjU3RDcwQ0Ew
MDk4RTNGOSAvKiBjb21wb3NpdGluZyAqLywKIAkJCQkwRkZGMUI3MTI1MUJDNjU3MDA5ODc5NUEg
LyogY3NzICovLAorCQkJCTBGRjMzMTI5MjZDOEExRUMwMEUyN0Q0OCAvKiBEaXNwbGF5R2VvbWV0
cnlUeXBlcy5oICovLAogCQkJCTBGRkYxQjgyMjUxQkM2NjMwMDk4Nzk1QSAvKiBEaXNwbGF5VHJl
ZS5jcHAgKi8sCiAJCQkJMEZGRjFCODEyNTFCQzY2MzAwOTg3OTVBIC8qIERpc3BsYXlUcmVlLmgg
Ki8sCiAJCQkJMEZGRjFCODAyNTFCQzY2MjAwOTg3OTVBIC8qIERpc3BsYXlUcmVlQnVpbGRlci5j
cHAgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlHZW9tZXRy
eVR5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlHZW9tZXRyeVR5cGVzLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNWRmODZmMWM0MDMxZmIxZmNhOTNhNWZhYzExNjRhZGU5NjgxOTA2MQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvRGlzcGxheUdlb21ldHJ5VHlw
ZXMuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheSB7CisKKy8vIEFic29s
dXRlIGNvb3JkaW5hdGVzIGFyZSBhbmNob3JlZCBhdCB0aGUgZG9jdW1lbnQgb3JpZ2luLgorY2xh
c3MgQWJzb2x1dGVGbG9hdFJlY3QgOiBwdWJsaWMgRmxvYXRSZWN0IHsgfTsKKworLy8gQWJzb2x1
dGUgY29vcmRpbmF0ZXMgaWdub3JpbmcgdGhlIGVmZmVjdHMgb2Ygc2Nyb2xsaW5nIGFuZCB0cmFu
c2Zvcm1zLgorY2xhc3MgVW5hZGp1c3RlZEFic29sdXRlRmxvYXRSZWN0IDogcHVibGljIEZsb2F0
UmVjdCB7IH07CisKKy8vIFZpZXcgY29vcmRpbmF0ZXMuCitjbGFzcyBWaWV3RmxvYXRSZWN0IDog
cHVibGljIEZsb2F0UmVjdCB7IH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgYXV0
byBpbnRlcnNlY3Rpb24oVCYgYSwgY29uc3QgVCYgYikgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVf
aWZfdDxzdGQ6OmlzX2Jhc2Vfb2ZfdjxGbG9hdFJlY3QsIFQ+LCBUPgoreworICAgIFQgYyA9IGE7
CisgICAgYy5pbnRlcnNlY3QoYik7CisgICAgcmV0dXJuIGM7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitpbmxpbmUgYXV0byB1bmlvblJlY3QoVCYgYSwgY29uc3QgVCYgYikgLT4gdHlwZW5h
bWUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2Jhc2Vfb2ZfdjxGbG9hdFJlY3QsIFQ+LCBUPgor
eworICAgIFQgYyA9IGE7CisgICAgYy51bml0ZShiKTsKKyAgICByZXR1cm4gYzsKK30KKworfSAv
LyBuYW1lc3BhY2UgRGlzcGxheQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kaXNwbGF5L0Rpc3BsYXlUcmVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvRGlz
cGxheVRyZWUuY3BwCmluZGV4IDFlYTY0OGMwZTNhZTE5ODEwMmRlZTgwODg4NDMyN2RkYmY3Yjk3
MGEuLjFmNzBiNWZkMDdhNGYyZTZjYzI0NzJiZDRhNDg3NTRhNTM2ZDY4NmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvRGlzcGxheVRyZWUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Rpc3BsYXkvRGlzcGxheVRyZWUuY3BwCkBAIC00OSw3ICs0OSw3IEBAIGNvbnN0IENvbnRh
aW5lckJveCYgVHJlZTo6cm9vdEJveCgpIGNvbnN0CiAgICAgcmV0dXJuIGRvd25jYXN0PENvbnRh
aW5lckJveD4obV9yb290U3RhY2tpbmdJdGVtLT5ib3goKSk7CiB9CiAKLXZvaWQgVHJlZTo6c2V0
Qm94TmVlZHNEaXNwbGF5KEJveCYsIHN0ZDo6b3B0aW9uYWw8QWJzb2x1dGVGbG9hdFJlY3Q+KSBj
b25zdAordm9pZCBUcmVlOjpzZXRCb3hOZWVkc0Rpc3BsYXkoQm94Jiwgc3RkOjpvcHRpb25hbDxV
bmFkanVzdGVkQWJzb2x1dGVGbG9hdFJlY3Q+KSBjb25zdAogewogICAgIC8vIEZJWE1FOiBGb3Ig
bm93LCBqdXN0IHJlcGFpbnQgdGhlIHdvcmxkLgogICAgIGlmIChtX3ZpZXcpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlUcmVlLmggYi9Tb3VyY2UvV2ViQ29yZS9k
aXNwbGF5L0Rpc3BsYXlUcmVlLmgKaW5kZXggZjBjMGM0Mjc0NGM3NWQwN2IxNmIyZjQwMzI2YzVm
ZDdjZGE3Zjg5MS4uZjk2MTBiODBhM2MwMGM2NWQ4YWEwZDRiZTczOTZjNWMwODIxNjMyOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNwbGF5VHJlZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Rpc3BsYXkvRGlzcGxheVRyZWUuaApAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYg
RU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKLSNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKKyNpbmNsdWRlICJEaXNwbGF5R2VvbWV0cnlUeXBlcy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29N
YWxsb2MuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsOCArMzgsNiBAQCBjbGFzcyBD
b250YWluZXJCb3g7CiBjbGFzcyBTdGFja2luZ0l0ZW07CiBjbGFzcyBWaWV3OwogCi11c2luZyBB
YnNvbHV0ZUZsb2F0UmVjdCA9IEZsb2F0UmVjdDsKLQogY2xhc3MgVHJlZSB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQoVHJlZSk7CiAgICAgZnJpZW5kIGNsYXNzIFRyZWVCdWlsZGVyOwpA
QCAtNTEsOSArNDksOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRWaWV3KFZpZXcqIHZpZXcpIHsg
bV92aWV3ID0gdmlldzsgfQogCiAgICAgY29uc3QgU3RhY2tpbmdJdGVtJiByb290U3RhY2tpbmdJ
dGVtKCkgY29uc3QgeyByZXR1cm4gKm1fcm9vdFN0YWNraW5nSXRlbTsgfQotICAgICBjb25zdCBD
b250YWluZXJCb3gmIHJvb3RCb3goKSBjb25zdDsKKyAgICBjb25zdCBDb250YWluZXJCb3gmIHJv
b3RCb3goKSBjb25zdDsKIAotICAgIHZvaWQgc2V0Qm94TmVlZHNEaXNwbGF5KEJveCYsIHN0ZDo6
b3B0aW9uYWw8QWJzb2x1dGVGbG9hdFJlY3Q+IHN1YnJlY3QgPSBzdGQ6Om51bGxvcHQpIGNvbnN0
OworICAgIHZvaWQgc2V0Qm94TmVlZHNEaXNwbGF5KEJveCYsIHN0ZDo6b3B0aW9uYWw8VW5hZGp1
c3RlZEFic29sdXRlRmxvYXRSZWN0PiBzdWJyZWN0ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKIAog
cHJpdmF0ZToKICAgICB2b2lkIHNldFJvb3RTdGFja2luZ0l0ZW0oc3RkOjp1bmlxdWVfcHRyPFN0
YWNraW5nSXRlbT4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L0Rpc3Bs
YXlUcmVlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L0Rpc3BsYXlUcmVlQnVp
bGRlci5jcHAKaW5kZXggYmZmNzFkY2NhOGI2ZjcwZmRjZDdiMGU2ZDFiNDZmMmMzMjY0NjVjOC4u
OTY4YzI1ZjJkZTAxNDZjZGU3YzYyZGIxMTY2ZGRlYWNkMmMzMDYxNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZGlzcGxheS9EaXNwbGF5VHJlZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Rpc3BsYXkvRGlzcGxheVRyZWVCdWlsZGVyLmNwcApAQCAtMTA0LDggKzEwNCw4IEBA
IHN0cnVjdCBCdWlsZGluZ1N0YXRlIHsKICAgICBTdGFja2luZ0l0ZW0mIGN1cnJlbnRTdGFja2lu
Z0l0ZW07CiAgICAgU3RhY2tpbmdJdGVtJiBjdXJyZW50U3RhY2tpbmdDb250ZXh0SXRlbTsKIAot
ICAgIEFic29sdXRlRmxvYXRSZWN0IGN1cnJlbnRTdGFja2luZ0l0ZW1QYWludGVkQ29udGVudEV4
dGVudDsgLy8gVGhpcyBzdGFja2luZyBpdGVtJ3MgY29udGVudHMgb25seS4KLSAgICBBYnNvbHV0
ZUZsb2F0UmVjdCBjdXJyZW50U3RhY2tpbmdJdGVtUGFpbnRpbmdFeHRlbnQ7IC8vIEluY2x1ZGlu
ZyBkZXNjZW5kYW50IGl0ZW1zLgorICAgIFVuYWRqdXN0ZWRBYnNvbHV0ZUZsb2F0UmVjdCBjdXJy
ZW50U3RhY2tpbmdJdGVtUGFpbnRlZENvbnRlbnRFeHRlbnQ7IC8vIFRoaXMgc3RhY2tpbmcgaXRl
bSdzIGNvbnRlbnRzIG9ubHkuCisgICAgVW5hZGp1c3RlZEFic29sdXRlRmxvYXRSZWN0IGN1cnJl
bnRTdGFja2luZ0l0ZW1QYWludGluZ0V4dGVudDsgLy8gSW5jbHVkaW5nIGRlc2NlbmRhbnQgaXRl
bXMuCiB9OwogCiBUcmVlQnVpbGRlcjo6VHJlZUJ1aWxkZXIoZmxvYXQgcGl4ZWxTbmFwcGluZ0Zh
Y3RvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3gu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveC5jcHAKaW5kZXggZmQx
NzdiYjgxMTY2OTFiYzE4ZGE1ZmQ2OTNjNzczMjkwZTk0ZjJiOC4uMGU0NzFiYmVhNTFmOTQwODM0
NWI0ZTI5MzdkMzU1ZjMzODEwOTNhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZGlzcGxh
eS9jc3MvRGlzcGxheUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlz
cGxheUJveC5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIERpc3BsYXkgewogCiBERUZJ
TkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEJveCk7CiAKLUJveDo6Qm94KFRyZWUm
IHRyZWUsIEFic29sdXRlRmxvYXRSZWN0IGFic29sdXRlUmVjdCwgU3R5bGUmJiBkaXNwbGF5U3R5
bGUsIE9wdGlvblNldDxUeXBlRmxhZ3M+IGZsYWdzKQorQm94OjpCb3goVHJlZSYgdHJlZSwgVW5h
ZGp1c3RlZEFic29sdXRlRmxvYXRSZWN0IGFic29sdXRlUmVjdCwgU3R5bGUmJiBkaXNwbGF5U3R5
bGUsIE9wdGlvblNldDxUeXBlRmxhZ3M+IGZsYWdzKQogICAgIDogbV90cmVlKHRyZWUpCiAgICAg
LCBtX2Fic29sdXRlQm94UmVjdChhYnNvbHV0ZVJlY3QpCiAgICAgLCBtX3N0eWxlKFdURk1vdmUo
ZGlzcGxheVN0eWxlKSkKQEAgLTU0LDcgKzU0LDcgQEAgYm9vbCBCb3g6OnBhcnRpY2lwYXRlc0lu
Wk9yZGVyU29ydGluZygpIGNvbnN0CiAgICAgcmV0dXJuICFpc0xpbmVCcmVha0JveCgpICYmIHN0
eWxlKCkucGFydGljaXBhdGVzSW5aT3JkZXJTb3J0aW5nKCk7CiB9CiAKLXZvaWQgQm94OjpzZXRO
ZWVkc0Rpc3BsYXkoc3RkOjpvcHRpb25hbDxBYnNvbHV0ZUZsb2F0UmVjdD4gc3VicmVjdCkKK3Zv
aWQgQm94OjpzZXROZWVkc0Rpc3BsYXkoc3RkOjpvcHRpb25hbDxVbmFkanVzdGVkQWJzb2x1dGVG
bG9hdFJlY3Q+IHN1YnJlY3QpCiB7CiAgICAgbV90cmVlLnNldEJveE5lZWRzRGlzcGxheSgqdGhp
cywgc3VicmVjdCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9E
aXNwbGF5Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94LmgKaW5k
ZXggNDY3ZjczNGFlNDU4YThmMDRlZmY2OWY4MDk2YjA5OTM3YjNkNTE2Ni4uNWMxZTFkMDgxMjkx
MzZiNDUzZjUzYTU1NTMzMDIxYjE4OWU3YjA4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZGlzcGxheS9jc3MvRGlzcGxheUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3Nz
L0Rpc3BsYXlCb3guaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JN
QVRUSU5HX0NPTlRFWFQpCiAKKyNpbmNsdWRlICJEaXNwbGF5R2VvbWV0cnlUeXBlcy5oIgogI2lu
Y2x1ZGUgIkRpc3BsYXlTdHlsZS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUg
PHd0Zi9Jc29NYWxsb2MuaD4KQEAgLTM4LDkgKzM5LDYgQEAgbmFtZXNwYWNlIERpc3BsYXkgewog
Y2xhc3MgQ29udGFpbmVyQm94OwogY2xhc3MgVHJlZTsKIAotLy8gRklYTUU6IE1ha2UgdGhpcyBh
IHN0cm9uZyB0eXBlLgotdXNpbmcgQWJzb2x1dGVGbG9hdFJlY3QgPSBGbG9hdFJlY3Q7Ci0KIERF
Q0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEJveCk7CiBjbGFzcyBCb3ggewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKEJveCk7CkBA
IC01NywxNCArNTUsMTQgQEAgcHVibGljOgogICAgICAgICBIYXNUcmFuc2Zvcm0gICAgID0gMSA8
PCAwLAogICAgIH07CiAKLSAgICBCb3goVHJlZSYsIEFic29sdXRlRmxvYXRSZWN0LCBTdHlsZSYm
LCBPcHRpb25TZXQ8VHlwZUZsYWdzPiA9IHsgfSk7CisgICAgQm94KFRyZWUmLCBVbmFkanVzdGVk
QWJzb2x1dGVGbG9hdFJlY3QsIFN0eWxlJiYsIE9wdGlvblNldDxUeXBlRmxhZ3M+ID0geyB9KTsK
ICAgICB2aXJ0dWFsIH5Cb3goKTsKIAogICAgIGNvbnN0IFN0eWxlJiBzdHlsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3R5bGU7IH0KIAotICAgIEFic29sdXRlRmxvYXRSZWN0IGFic29sdXRlQm94UmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVCb3hSZWN0OyB9CisgICAgVW5hZGp1c3RlZEFi
c29sdXRlRmxvYXRSZWN0IGFic29sdXRlQm94UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1
dGVCb3hSZWN0OyB9CiAKLSAgICB2aXJ0dWFsIEFic29sdXRlRmxvYXRSZWN0IGFic29sdXRlUGFp
bnRpbmdFeHRlbnQoKSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlQm94UmVjdDsgfQorICAgIHZp
cnR1YWwgVW5hZGp1c3RlZEFic29sdXRlRmxvYXRSZWN0IGFic29sdXRlUGFpbnRpbmdFeHRlbnQo
KSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlQm94UmVjdDsgfQogCiAgICAgYm9vbCBpc0JveE1v
ZGVsQm94KCkgY29uc3QgeyByZXR1cm4gbV90eXBlRmxhZ3MuY29udGFpbnMoVHlwZUZsYWdzOjpC
b3hNb2RlbEJveCk7IH0KICAgICBib29sIGlzQ29udGFpbmVyQm94KCkgY29uc3QgeyByZXR1cm4g
bV90eXBlRmxhZ3MuY29udGFpbnMoVHlwZUZsYWdzOjpDb250YWluZXJCb3gpOyB9CkBAIC04Nyw3
ICs4NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhhc1RyYW5zZm9ybShib29sIHZhbHVlKSB7
IG1fc3R5bGVGbGFncy5zZXQoU3R5bGVGbGFnczo6SGFzVHJhbnNmb3JtLCB2YWx1ZSk7IH0KICAg
ICBib29sIGhhc1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVGbGFncy5jb250YWlu
cyhTdHlsZUZsYWdzOjpIYXNUcmFuc2Zvcm0pOyB9CiAKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxh
eShzdGQ6Om9wdGlvbmFsPEFic29sdXRlRmxvYXRSZWN0PiBzdWJyZWN0ID0gc3RkOjpudWxsb3B0
KTsKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheShzdGQ6Om9wdGlvbmFsPFVuYWRqdXN0ZWRBYnNv
bHV0ZUZsb2F0UmVjdD4gc3VicmVjdCA9IHN0ZDo6bnVsbG9wdCk7CiAKICAgICB2aXJ0dWFsIFN0
cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3Q7CiAKQEAgLTk1LDcgKzkzLDcgQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGJveE5hbWUoKSBjb25zdDsKIAogICAgIGNvbnN0
IFRyZWUmIG1fdHJlZTsKLSAgICBBYnNvbHV0ZUZsb2F0UmVjdCBtX2Fic29sdXRlQm94UmVjdDsK
KyAgICBVbmFkanVzdGVkQWJzb2x1dGVGbG9hdFJlY3QgbV9hYnNvbHV0ZUJveFJlY3Q7CiAgICAg
U3R5bGUgbV9zdHlsZTsKICAgICBDb250YWluZXJCb3gqIG1fcGFyZW50IHsgbnVsbHB0ciB9Owog
ICAgIEJveCogbV9wcmV2aW91c1NpYmxpbmcgeyBudWxscHRyIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94Q2xpcC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94Q2xpcC5jcHAKaW5kZXggOGE2NTJlODU5MGUyZGY3MjU1
OTZjODNiYThkNTVjOGUwMWVjMWZlMS4uMjYyZGE3ZTZjMDY2MGY5M2M0NTc0MjU5ODdmMTMwNDY4
ZGUwYWFlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJv
eENsaXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hDbGlw
LmNwcApAQCAtNTAsNyArNTAsNyBAQCBSZWY8Qm94Q2xpcD4gQm94Q2xpcDo6Y29weSgpIGNvbnN0
CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQm94Q2xpcCgqdGhpcykpOwogfQogCi12b2lkIEJv
eENsaXA6OnB1c2hDbGlwKGNvbnN0IEFic29sdXRlRmxvYXRSZWN0JiByZWN0KQordm9pZCBCb3hD
bGlwOjpwdXNoQ2xpcChjb25zdCBVbmFkanVzdGVkQWJzb2x1dGVGbG9hdFJlY3QmIHJlY3QpCiB7
CiAgICAgaWYgKG1fY2xpcFJlY3QpIHsKICAgICAgICAgbV9jbGlwUmVjdC0+aW50ZXJzZWN0KHJl
Y3QpOwpAQCAtNjMsNyArNjMsNyBAQCB2b2lkIEJveENsaXA6OnB1c2hDbGlwKGNvbnN0IEFic29s
dXRlRmxvYXRSZWN0JiByZWN0KQogdm9pZCBCb3hDbGlwOjpwdXNoUm91bmRlZENsaXAoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QpCiB7CiAgICAgQVNTRVJUKHJvdW5kZWRSZWN0
LmlzUm91bmRlZCgpKTsKLSAgICBwdXNoQ2xpcChyb3VuZGVkUmVjdC5yZWN0KCkpOworICAgIHB1
c2hDbGlwKFVuYWRqdXN0ZWRBYnNvbHV0ZUZsb2F0UmVjdCB7IHJvdW5kZWRSZWN0LnJlY3QoKSB9
KTsKIAogICAgIG1fYWZmZWN0ZWRCeUJvcmRlclJhZGl1cyA9IHRydWU7CiAgICAgbV9jbGlwU3Rh
Y2suYXBwZW5kKHJvdW5kZWRSZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3Bs
YXkvY3NzL0Rpc3BsYXlCb3hDbGlwLmggYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNw
bGF5Qm94Q2xpcC5oCmluZGV4IDRkNDJjOWViOGQ2OWQ3NDlmNGYxMDc5OWNmNjk2NDJjYmJmZTMx
YzMuLjk1NDkxMjhkZjdiY2I0ZTUxODZjNTFkZWNiMTE0YjM1ZjQ1Njg3ZTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hDbGlwLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveENsaXAuaApAQCAtNTQsMTkgKzU0LDE5IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEJveENsaXA+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgQm94Q2xpcCk7IH0KICAgICBSZWY8Qm94Q2xpcD4gY29weSgpIGNvbnN0OwogCi0g
ICAgc3RkOjpvcHRpb25hbDxBYnNvbHV0ZUZsb2F0UmVjdD4gY2xpcFJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX2NsaXBSZWN0OyB9CisgICAgc3RkOjpvcHRpb25hbDxVbmFkanVzdGVkQWJzb2x1dGVG
bG9hdFJlY3Q+IGNsaXBSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jbGlwUmVjdDsgfQogICAgIAog
ICAgIGJvb2wgYWZmZWN0ZWRCeUJvcmRlclJhZGl1cygpIGNvbnN0IHsgcmV0dXJuIG1fYWZmZWN0
ZWRCeUJvcmRlclJhZGl1czsgfQogICAgIGNvbnN0IFZlY3RvcjxGbG9hdFJvdW5kZWRSZWN0PiYg
Y2xpcFN0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9jbGlwU3RhY2s7IH0KIAotICAgIHZvaWQgcHVz
aENsaXAoY29uc3QgQWJzb2x1dGVGbG9hdFJlY3QmKTsKKyAgICB2b2lkIHB1c2hDbGlwKGNvbnN0
IFVuYWRqdXN0ZWRBYnNvbHV0ZUZsb2F0UmVjdCYpOwogICAgIHZvaWQgcHVzaFJvdW5kZWRDbGlw
KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKIAogcHJpdmF0ZToKICAgICBCb3hDbGlwKCk7CiAg
ICAgQm94Q2xpcChjb25zdCBCb3hDbGlwJik7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPEFic29sdXRl
RmxvYXRSZWN0PiBtX2NsaXBSZWN0OworICAgIHN0ZDo6b3B0aW9uYWw8VW5hZGp1c3RlZEFic29s
dXRlRmxvYXRSZWN0PiBtX2NsaXBSZWN0OwogICAgIFZlY3RvcjxGbG9hdFJvdW5kZWRSZWN0PiBt
X2NsaXBTdGFjazsKICAgICBib29sIG1fYWZmZWN0ZWRCeUJvcmRlclJhZGl1cyB7IGZhbHNlIH07
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERl
Y29yYXRpb25QYWludGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlC
b3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKaW5kZXggMDEyOTkwNGIwODhhOTgyNzY2NTgwZGQ2MzFi
ZTQ5ODI0OWNlZWRiNC4uZjc1ODI3NzdjMjQ3MzBhN2ZmNGViY2QxNDk2NTYwYjk1MjMzNmE3ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRp
b25QYWludGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94
RGVjb3JhdGlvblBhaW50ZXIuY3BwCkBAIC0xMjA0LDcgKzEyMDQsNyBAQCB2b2lkIEJveERlY29y
YXRpb25QYWludGVyOjpwYWludEZpbGxMYXllcihQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29u
dGV4dCwgY29ucwogewogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihw
YWludGluZ0NvbnRleHQuY29udGV4dCwgZmFsc2UpOwogCi0gICAgYXV0byBjbGlwUmVjdEZvckxh
eWVyID0gW10oY29uc3QgQm94TW9kZWxCb3gmIGJveCwgY29uc3QgRmlsbExheWVyJiBsYXllcikg
eworICAgIGF1dG8gY2xpcFJlY3RGb3JMYXllciA9IFtdKGNvbnN0IEJveE1vZGVsQm94JiBib3gs
IGNvbnN0IEZpbGxMYXllciYgbGF5ZXIpIC0+IFVuYWRqdXN0ZWRBYnNvbHV0ZUZsb2F0UmVjdCB7
CiAgICAgICAgIHN3aXRjaCAobGF5ZXIuY2xpcCgpKSB7CiAgICAgICAgIGNhc2UgRmlsbEJveDo6
Qm9yZGVyOgogICAgICAgICAgICAgcmV0dXJuIGJveC5hYnNvbHV0ZUJvcmRlckJveFJlY3QoKTsK
QEAgLTEyMTUsNyArMTIxNSw3IEBAIHZvaWQgQm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50Rmls
bExheWVyKFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBjb25zCiAgICAgICAgIGNh
c2UgRmlsbEJveDo6VGV4dDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBBYnNvbHV0ZUZsb2F0UmVjdCgpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH07
CiAKICAgICBzd2l0Y2ggKGxheWVyLmNsaXAoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZGlzcGxheS9jc3MvRGlzcGxheUJveEZhY3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvZGlz
cGxheS9jc3MvRGlzcGxheUJveEZhY3RvcnkuY3BwCmluZGV4IGNjYWUwMWMzYzk1NjQ1OGMxZDdj
ZTU2ODYyODcyNGFjMjdlOWNkZDkuLmFkNTk2OTNiMTdhMTBjMTk3OWY1OGU5ZGI2MTk5NTc2Y2Zi
MmNhOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hG
YWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RmFj
dG9yeS5jcHAKQEAgLTg4LDcgKzg4LDcgQEAgc3RkOjp1bmlxdWVfcHRyPENvbnRhaW5lckJveD4g
Qm94RmFjdG9yeTo6ZGlzcGxheUJveEZvclJvb3RCb3goY29uc3QgTGF5b3V0OjpDb24KIAogICAg
IGF1dG8gc3R5bGUgPSBTdHlsZSB7IHJvb3RMYXlvdXRCb3guc3R5bGUoKSwgc3R5bGVGb3JCYWNr
Z3JvdW5kIH07CiAKLSAgICBhdXRvIHJvb3RCb3ggPSBtYWtlVW5pcXVlPENvbnRhaW5lckJveD4o
bV90cmVlQnVpbGRlci50cmVlKCksIHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoYm9yZGVyQm94UmVj
dCwgbV9waXhlbFNuYXBwaW5nRmFjdG9yKSwgV1RGTW92ZShzdHlsZSkpOworICAgIGF1dG8gcm9v
dEJveCA9IG1ha2VVbmlxdWU8Q29udGFpbmVyQm94PihtX3RyZWVCdWlsZGVyLnRyZWUoKSwgVW5h
ZGp1c3RlZEFic29sdXRlRmxvYXRSZWN0IHsgc25hcFJlY3RUb0RldmljZVBpeGVscyhib3JkZXJC
b3hSZWN0LCBtX3BpeGVsU25hcHBpbmdGYWN0b3IpIH0sIFdURk1vdmUoc3R5bGUpKTsKICAgICAv
LyBXZSBwYXNzIHJvb3RCb3ggYXMgaXRzIG93biBjb250YWluaW5nQmxvY2tCb3ggaGVyZSB0byBh
bGxvdyBpdCB0byBiZSBhIHJlZmVyZW5jZSBldmVyeXdoZXJlIGVsc2UuCiAgICAgc2V0dXBCb3hN
b2RlbEJveCgqcm9vdEJveCwgcm9vdExheW91dEJveCwgZ2VvbWV0cnksIHsgKnJvb3RCb3gsIHsg
MCwgMCB9IH0sIHN0eWxlRm9yQmFja2dyb3VuZCk7CiAgICAgcmV0dXJuIHJvb3RCb3g7CkBAIC0x
MTYsNyArMTE2LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEJveD4gQm94RmFjdG9yeTo6ZGlzcGxheUJv
eEZvckxheW91dEJveChjb25zdCBMYXlvdXQ6OkJveCYgbGF5b3UKICAgICAvLyBGSVhNRTogTmVl
ZCB0byBtYXAgbG9naWNhbCB0byBwaHlzaWNhbCByZWN0cy4KICAgICBhdXRvIGJvcmRlckJveFJl
Y3QgPSBMYXlvdXRSZWN0IHsgTGF5b3V0OjpCb3hHZW9tZXRyeTo6Ym9yZGVyQm94UmVjdChnZW9t
ZXRyeSkgfTsKICAgICBib3JkZXJCb3hSZWN0Lm1vdmUoY29udGFpbmluZ0Jsb2NrQ29udGV4dC5v
ZmZzZXRGcm9tUm9vdCk7Ci0gICAgYXV0byBwaXhlbFNuYXBwZWRCb3JkZXJCb3hSZWN0ID0gc25h
cFJlY3RUb0RldmljZVBpeGVscyhib3JkZXJCb3hSZWN0LCBtX3BpeGVsU25hcHBpbmdGYWN0b3Ip
OworICAgIGF1dG8gcGl4ZWxTbmFwcGVkQm9yZGVyQm94UmVjdCA9IFVuYWRqdXN0ZWRBYnNvbHV0
ZUZsb2F0UmVjdCB7IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoYm9yZGVyQm94UmVjdCwgbV9waXhl
bFNuYXBwaW5nRmFjdG9yKSB9OwogCiAgICAgLy8gRklYTUU6IEhhbmRsZSBpc0Fub255bW91cygp
CiAgICAgCkBAIC0xNDMsNyArMTQzLDcgQEAgc3RkOjp1bmlxdWVfcHRyPEJveD4gQm94RmFjdG9y
eTo6ZGlzcGxheUJveEZvckxheW91dEJveChjb25zdCBMYXlvdXQ6OkJveCYgbGF5b3UKICAgICBp
ZiAobGF5b3V0Qm94LmlzTGluZUJyZWFrQm94KCkpCiAgICAgICAgIGZsYWdzLmFkZChCb3g6OlR5
cGVGbGFnczo6TGluZUJyZWFrQm94KTsKIAotICAgIHJldHVybiBtYWtlVW5pcXVlPEJveD4obV90
cmVlQnVpbGRlci50cmVlKCksIHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoYm9yZGVyQm94UmVjdCwg
bV9waXhlbFNuYXBwaW5nRmFjdG9yKSwgV1RGTW92ZShzdHlsZSksIGZsYWdzKTsKKyAgICByZXR1
cm4gbWFrZVVuaXF1ZTxCb3g+KG1fdHJlZUJ1aWxkZXIudHJlZSgpLCBwaXhlbFNuYXBwZWRCb3Jk
ZXJCb3hSZWN0LCBXVEZNb3ZlKHN0eWxlKSwgZmxhZ3MpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8
Qm94PiBCb3hGYWN0b3J5OjpkaXNwbGF5Qm94Rm9yVGV4dFJ1bihjb25zdCBMYXlvdXQ6OkxpbmVS
dW4mIHJ1biwgY29uc3QgTGF5b3V0OjpJbmxpbmVMaW5lR2VvbWV0cnkmIGxpbmVHZW9tZXRyeSwg
Y29uc3QgQ29udGFpbmluZ0Jsb2NrQ29udGV4dCYgY29udGFpbmluZ0Jsb2NrQ29udGV4dCkgY29u
c3QKQEAgLTE1Nyw3ICsxNTcsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8Qm94PiBCb3hGYWN0b3J5Ojpk
aXNwbGF5Qm94Rm9yVGV4dFJ1bihjb25zdCBMYXlvdXQ6OkxpbmVSdW4mIHJ1bgogICAgIHJ1blJl
Y3QubW92ZShjb250YWluaW5nQmxvY2tDb250ZXh0Lm9mZnNldEZyb21Sb290KTsKIAogICAgIGF1
dG8gc3R5bGUgPSBTdHlsZSB7IHJ1bi5sYXlvdXRCb3goKS5zdHlsZSgpIH07Ci0gICAgcmV0dXJu
IG1ha2VVbmlxdWU8VGV4dEJveD4obV90cmVlQnVpbGRlci50cmVlKCksIHNuYXBSZWN0VG9EZXZp
Y2VQaXhlbHMocnVuUmVjdCwgbV9waXhlbFNuYXBwaW5nRmFjdG9yKSwgV1RGTW92ZShzdHlsZSks
IHJ1bik7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8VGV4dEJveD4obV90cmVlQnVpbGRlci50cmVl
KCksIFVuYWRqdXN0ZWRBYnNvbHV0ZUZsb2F0UmVjdCB7IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMo
cnVuUmVjdCwgbV9waXhlbFNuYXBwaW5nRmFjdG9yKSB9LCBXVEZNb3ZlKHN0eWxlKSwgcnVuKTsK
IH0KIAogdm9pZCBCb3hGYWN0b3J5OjpzZXR1cEJveEdlb21ldHJ5KEJveE1vZGVsQm94JiBib3gs
IGNvbnN0IExheW91dDo6Qm94JiwgY29uc3QgTGF5b3V0OjpCb3hHZW9tZXRyeSYgbGF5b3V0R2Vv
bWV0cnksIGNvbnN0IENvbnRhaW5pbmdCbG9ja0NvbnRleHQmIGNvbnRhaW5pbmdCbG9ja0NvbnRl
eHQpIGNvbnN0CkBAIC0xNjcsMTggKzE2NywxOCBAQCB2b2lkIEJveEZhY3Rvcnk6OnNldHVwQm94
R2VvbWV0cnkoQm94TW9kZWxCb3gmIGJveCwgY29uc3QgTGF5b3V0OjpCb3gmLCBjb25zdCBMYQog
CiAgICAgYXV0byBwYWRkaW5nQm94UmVjdCA9IExheW91dFJlY3QgeyBsYXlvdXRHZW9tZXRyeS5w
YWRkaW5nQm94KCkgfTsKICAgICBwYWRkaW5nQm94UmVjdC5tb3ZlQnkoYm9yZGVyQm94UmVjdC5s
b2NhdGlvbigpKTsKLSAgICBib3guc2V0QWJzb2x1dGVQYWRkaW5nQm94UmVjdChzbmFwUmVjdFRv
RGV2aWNlUGl4ZWxzKHBhZGRpbmdCb3hSZWN0LCBtX3BpeGVsU25hcHBpbmdGYWN0b3IpKTsKKyAg
ICBib3guc2V0QWJzb2x1dGVQYWRkaW5nQm94UmVjdChVbmFkanVzdGVkQWJzb2x1dGVGbG9hdFJl
Y3QgeyBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKHBhZGRpbmdCb3hSZWN0LCBtX3BpeGVsU25hcHBp
bmdGYWN0b3IpIH0pOwogCiAgICAgYXV0byBjb250ZW50Qm94UmVjdCA9IExheW91dFJlY3QgeyBs
YXlvdXRHZW9tZXRyeS5jb250ZW50Qm94KCkgfTsKICAgICBjb250ZW50Qm94UmVjdC5tb3ZlQnko
Ym9yZGVyQm94UmVjdC5sb2NhdGlvbigpKTsKLSAgICBib3guc2V0QWJzb2x1dGVDb250ZW50Qm94
UmVjdChzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGNvbnRlbnRCb3hSZWN0LCBtX3BpeGVsU25hcHBp
bmdGYWN0b3IpKTsKKyAgICBib3guc2V0QWJzb2x1dGVDb250ZW50Qm94UmVjdChVbmFkanVzdGVk
QWJzb2x1dGVGbG9hdFJlY3QgeyBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGNvbnRlbnRCb3hSZWN0
LCBtX3BpeGVsU25hcHBpbmdGYWN0b3IpIH0pOwogCiAgICAgaWYgKGlzPFJlcGxhY2VkQm94Pihi
b3gpKSB7CiAgICAgICAgIGF1dG8mIHJlcGxhY2VkQm94ID0gZG93bmNhc3Q8UmVwbGFjZWRCb3g+
KGJveCk7CiAgICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIGdldCB0aGUgY29ycmVjdCByZWN0IHRh
a2luZyBvYmplY3QtZml0IGV0YyBpbnRvIGFjY291bnQuCiAgICAgICAgIGF1dG8gcmVwbGFjZWRD
b250ZW50UmVjdCA9IExheW91dFJlY3QgeyBsYXlvdXRHZW9tZXRyeS5jb250ZW50Qm94TGVmdCgp
LCBsYXlvdXRHZW9tZXRyeS5jb250ZW50Qm94VG9wKCksIGxheW91dEdlb21ldHJ5LmNvbnRlbnRC
b3hXaWR0aCgpLCBsYXlvdXRHZW9tZXRyeS5jb250ZW50Qm94SGVpZ2h0KCkgfTsKICAgICAgICAg
cmVwbGFjZWRDb250ZW50UmVjdC5tb3ZlQnkoYm9yZGVyQm94UmVjdC5sb2NhdGlvbigpKTsKLSAg
ICAgICAgYXV0byBwaXhlbFNuYXBwZWRSZXBsYWNlZENvbnRlbnRSZWN0ID0gc25hcFJlY3RUb0Rl
dmljZVBpeGVscyhyZXBsYWNlZENvbnRlbnRSZWN0LCBtX3BpeGVsU25hcHBpbmdGYWN0b3IpOwor
ICAgICAgICBhdXRvIHBpeGVsU25hcHBlZFJlcGxhY2VkQ29udGVudFJlY3QgPSBVbmFkanVzdGVk
QWJzb2x1dGVGbG9hdFJlY3QgeyBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKHJlcGxhY2VkQ29udGVu
dFJlY3QsIG1fcGl4ZWxTbmFwcGluZ0ZhY3RvcikgfTsKICAgICAgICAgcmVwbGFjZWRCb3guc2V0
UmVwbGFjZWRDb250ZW50UmVjdChwaXhlbFNuYXBwZWRSZXBsYWNlZENvbnRlbnRSZWN0KTsKICAg
ICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94
TW9kZWxCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveE1vZGVs
Qm94LmNwcAppbmRleCA1MzBlNmI5NmI5MDI2ZGMzOGU4OWRjOTZmYjgzYmU4OTVmY2IzODhiLi5j
OWEzNTcwMGE1ZjM4YTA0NzIxYzE0MTRiNDkyNWQzNzRlOWVkZjkzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94TW9kZWxCb3guY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hNb2RlbEJveC5jcHAKQEAgLTQwLDcgKzQw
LDcgQEAgbmFtZXNwYWNlIERpc3BsYXkgewogCiBERUZJTkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9J
REVOVElGSUVSKEJveE1vZGVsQm94KTsKIAotQm94TW9kZWxCb3g6OkJveE1vZGVsQm94KFRyZWUm
IHRyZWUsIEFic29sdXRlRmxvYXRSZWN0IGJvcmRlckJveCwgU3R5bGUmJiBkaXNwbGF5U3R5bGUs
IE9wdGlvblNldDxUeXBlRmxhZ3M+IGZsYWdzKQorQm94TW9kZWxCb3g6OkJveE1vZGVsQm94KFRy
ZWUmIHRyZWUsIFVuYWRqdXN0ZWRBYnNvbHV0ZUZsb2F0UmVjdCBib3JkZXJCb3gsIFN0eWxlJiYg
ZGlzcGxheVN0eWxlLCBPcHRpb25TZXQ8VHlwZUZsYWdzPiBmbGFncykKICAgICA6IEJveCh0cmVl
LCBib3JkZXJCb3gsIFdURk1vdmUoZGlzcGxheVN0eWxlKSwgZmxhZ3MgfCBUeXBlRmxhZ3M6OkJv
eE1vZGVsQm94KQogewogfQpAQCAtMTA4LDcgKzEwOCw3IEBAIFJlZlB0cjxCb3hDbGlwPiBCb3hN
b2RlbEJveDo6Y2xpcEZvckRlc2NlbmRhbnRzKCkgY29uc3QKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGJveENsaXAucHVzaENsaXAocm91bmRl
ZElubmVyQm9yZGVyLnJlY3QoKSk7CisgICAgICAgICAgICBib3hDbGlwLnB1c2hDbGlwKFVuYWRq
dXN0ZWRBYnNvbHV0ZUZsb2F0UmVjdCB7IHJvdW5kZWRJbm5lckJvcmRlci5yZWN0KCkgfSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTE5LDcgKzExOSw3IEBAIFJlZlB0
cjxCb3hDbGlwPiBCb3hNb2RlbEJveDo6Y2xpcEZvckRlc2NlbmRhbnRzKCkgY29uc3QKICAgICBy
ZXR1cm4gY2xpcDsKIH0KIAotQWJzb2x1dGVGbG9hdFJlY3QgQm94TW9kZWxCb3g6OmFic29sdXRl
UGFpbnRpbmdFeHRlbnQoKSBjb25zdAorVW5hZGp1c3RlZEFic29sdXRlRmxvYXRSZWN0IEJveE1v
ZGVsQm94OjphYnNvbHV0ZVBhaW50aW5nRXh0ZW50KCkgY29uc3QKIHsKICAgICBhdXRvIHBhaW50
aW5nRXh0ZW50ID0gYWJzb2x1dGVCb3JkZXJCb3hSZWN0KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hNb2RlbEJveC5oIGIvU291cmNlL1dlYkNv
cmUvZGlzcGxheS9jc3MvRGlzcGxheUJveE1vZGVsQm94LmgKaW5kZXggOTlmZmZiMjYyNWYwOWM3
YTVmNTNlOGIwOGMyNTQ0YzAxOWI2ZTlhNS4uMzRlYzU0YmFkYzk5YmQ1NzZlYWM0ZjU3NjJlZmU5
ZDQwOTNiZDU5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxh
eUJveE1vZGVsQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJv
eE1vZGVsQm94LmgKQEAgLTQ0LDE0ICs0NCwxNCBAQCBjbGFzcyBCb3hNb2RlbEJveCA6IHB1Ymxp
YyBCb3ggewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVS
KEJveE1vZGVsQm94KTsKICAgICBmcmllbmQgY2xhc3MgQm94RmFjdG9yeTsKIHB1YmxpYzoKLSAg
ICBCb3hNb2RlbEJveChUcmVlJiwgQWJzb2x1dGVGbG9hdFJlY3QgYm9yZGVyQm94LCBTdHlsZSYm
LCBPcHRpb25TZXQ8VHlwZUZsYWdzPiA9IHsgfSk7CisgICAgQm94TW9kZWxCb3goVHJlZSYsIFVu
YWRqdXN0ZWRBYnNvbHV0ZUZsb2F0UmVjdCBib3JkZXJCb3gsIFN0eWxlJiYsIE9wdGlvblNldDxU
eXBlRmxhZ3M+ID0geyB9KTsKICAgICB2aXJ0dWFsIH5Cb3hNb2RlbEJveCgpOwogCi0gICAgQWJz
b2x1dGVGbG9hdFJlY3QgYWJzb2x1dGVCb3JkZXJCb3hSZWN0KCkgY29uc3QgeyByZXR1cm4gYWJz
b2x1dGVCb3hSZWN0KCk7IH0KLSAgICBBYnNvbHV0ZUZsb2F0UmVjdCBhYnNvbHV0ZVBhZGRpbmdC
b3hSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9wYWRkaW5nQm94UmVjdDsgfQotICAgIEFic29sdXRl
RmxvYXRSZWN0IGFic29sdXRlQ29udGVudEJveFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
bnRCb3hSZWN0OyB9CisgICAgVW5hZGp1c3RlZEFic29sdXRlRmxvYXRSZWN0IGFic29sdXRlQm9y
ZGVyQm94UmVjdCgpIGNvbnN0IHsgcmV0dXJuIGFic29sdXRlQm94UmVjdCgpOyB9CisgICAgVW5h
ZGp1c3RlZEFic29sdXRlRmxvYXRSZWN0IGFic29sdXRlUGFkZGluZ0JveFJlY3QoKSBjb25zdCB7
IHJldHVybiBtX3BhZGRpbmdCb3hSZWN0OyB9CisgICAgVW5hZGp1c3RlZEFic29sdXRlRmxvYXRS
ZWN0IGFic29sdXRlQ29udGVudEJveFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRCb3hS
ZWN0OyB9CiAKLSAgICBBYnNvbHV0ZUZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50aW5nRXh0ZW50KCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgVW5hZGp1c3RlZEFic29sdXRlRmxvYXRSZWN0IGFic29sdXRl
UGFpbnRpbmdFeHRlbnQoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGNvbnN0IEJveERlY29yYXRp
b25EYXRhKiBib3hEZWNvcmF0aW9uRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fYm94RGVjb3JhdGlv
bkRhdGEuZ2V0KCk7IH0KICAgICBjb25zdCBCb3hSYXJlR2VvbWV0cnkqIHJhcmVHZW9tZXRyeSgp
IGNvbnN0IHsgcmV0dXJuIG1fYm94UmFyZUdlb21ldHJ5LmdldCgpOyB9CkBAIC02OCw4ICs2OCw4
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgY29uc3QgY2hhciogYm94TmFtZSgpIGNvbnN0IG92
ZXJyaWRlOwogCi0gICAgdm9pZCBzZXRBYnNvbHV0ZVBhZGRpbmdCb3hSZWN0KGNvbnN0IEFic29s
dXRlRmxvYXRSZWN0JiBib3gpIHsgbV9wYWRkaW5nQm94UmVjdCA9IGJveDsgfQotICAgIHZvaWQg
c2V0QWJzb2x1dGVDb250ZW50Qm94UmVjdChjb25zdCBBYnNvbHV0ZUZsb2F0UmVjdCYgYm94KSB7
IG1fY29udGVudEJveFJlY3QgPSBib3g7IH0KKyAgICB2b2lkIHNldEFic29sdXRlUGFkZGluZ0Jv
eFJlY3QoY29uc3QgVW5hZGp1c3RlZEFic29sdXRlRmxvYXRSZWN0JiBib3gpIHsgbV9wYWRkaW5n
Qm94UmVjdCA9IGJveDsgfQorICAgIHZvaWQgc2V0QWJzb2x1dGVDb250ZW50Qm94UmVjdChjb25z
dCBVbmFkanVzdGVkQWJzb2x1dGVGbG9hdFJlY3QmIGJveCkgeyBtX2NvbnRlbnRCb3hSZWN0ID0g
Ym94OyB9CiAKICAgICB2b2lkIHNldEJveERlY29yYXRpb25EYXRhKHN0ZDo6dW5pcXVlX3B0cjxC
b3hEZWNvcmF0aW9uRGF0YT4mJik7CiAgICAgdm9pZCBzZXRCb3hSYXJlR2VvbWV0cnkoc3RkOjp1
bmlxdWVfcHRyPEJveFJhcmVHZW9tZXRyeT4mJik7CkBAIC03Nyw4ICs3Nyw4IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBzZXRBbmNlc3RvckNsaXAoUmVmUHRyPEJveENsaXA+JiYpOwogICAgIFJlZlB0
cjxCb3hDbGlwPiBjbGlwRm9yRGVzY2VuZGFudHMoKSBjb25zdDsKIAotICAgIEFic29sdXRlRmxv
YXRSZWN0IG1fcGFkZGluZ0JveFJlY3Q7Ci0gICAgQWJzb2x1dGVGbG9hdFJlY3QgbV9jb250ZW50
Qm94UmVjdDsKKyAgICBVbmFkanVzdGVkQWJzb2x1dGVGbG9hdFJlY3QgbV9wYWRkaW5nQm94UmVj
dDsKKyAgICBVbmFkanVzdGVkQWJzb2x1dGVGbG9hdFJlY3QgbV9jb250ZW50Qm94UmVjdDsKIAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxCb3hEZWNvcmF0aW9uRGF0YT4gbV9ib3hEZWNvcmF0aW9uRGF0
YTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qm94UmFyZUdlb21ldHJ5PiBtX2JveFJhcmVHZW9tZXRy
eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlDb250YWlu
ZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUNvbnRhaW5lckJv
eC5jcHAKaW5kZXggNWQ0MjJmOWM1NTM5NTcxODc1ZmJhZDBhMTRmOTVmNWMyMTdhYTQ3YS4uYjE5
NzNiY2UxNjdkMTZhOWRkM2U3YTcwYmM1ZjUxYmYwZTU5NzNjYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUNvbnRhaW5lckJveC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUNvbnRhaW5lckJveC5jcHAKQEAgLTM3LDcgKzM3
LDcgQEAgbmFtZXNwYWNlIERpc3BsYXkgewogCiBERUZJTkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9J
REVOVElGSUVSKENvbnRhaW5lckJveCk7CiAKLUNvbnRhaW5lckJveDo6Q29udGFpbmVyQm94KFRy
ZWUmIHRyZWUsIEFic29sdXRlRmxvYXRSZWN0IGJvcmRlckJveCwgU3R5bGUmJiBkaXNwbGF5U3R5
bGUpCitDb250YWluZXJCb3g6OkNvbnRhaW5lckJveChUcmVlJiB0cmVlLCBVbmFkanVzdGVkQWJz
b2x1dGVGbG9hdFJlY3QgYm9yZGVyQm94LCBTdHlsZSYmIGRpc3BsYXlTdHlsZSkKICAgICA6IEJv
eE1vZGVsQm94KHRyZWUsIGJvcmRlckJveCwgV1RGTW92ZShkaXNwbGF5U3R5bGUpLCB7IFR5cGVG
bGFnczo6Q29udGFpbmVyQm94IH0pCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
aXNwbGF5L2Nzcy9EaXNwbGF5Q29udGFpbmVyQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5
L2Nzcy9EaXNwbGF5Q29udGFpbmVyQm94LmgKaW5kZXggMjUyYTJiMTM1OGI3OWYwMTQ5YzZmZTJh
N2M2NDFhYmNjZDU1NjA2ZC4uNmI5ODczODZkMTQzMDBkZDk5YTg2YzMzMDVjZjgyOTYyNmEyYTNh
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUNvbnRhaW5l
ckJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlDb250YWluZXJC
b3guaApAQCAtMzYsNyArMzYsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJ
RklFUihDb250YWluZXJCb3gpOwogY2xhc3MgQ29udGFpbmVyQm94IDogcHVibGljIEJveE1vZGVs
Qm94IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihD
b250YWluZXJCb3gpOwogcHVibGljOgotICAgIENvbnRhaW5lckJveChUcmVlJiwgQWJzb2x1dGVG
bG9hdFJlY3QgYm9yZGVyQm94LCBTdHlsZSYmKTsKKyAgICBDb250YWluZXJCb3goVHJlZSYsIFVu
YWRqdXN0ZWRBYnNvbHV0ZUZsb2F0UmVjdCBib3JkZXJCb3gsIFN0eWxlJiYpOwogICAgIAogICAg
IGNvbnN0IEJveCogZmlyc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RDaGlsZC5nZXQo
KTsgfQogICAgIHZvaWQgc2V0Rmlyc3RDaGlsZChzdGQ6OnVuaXF1ZV9wdHI8Qm94PiYmKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlJbWFnZUJveC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5SW1hZ2VCb3guY3BwCmluZGV4IDg5
MGRhMDdmOGFlZmFmNzIwNWM1YmQ3MGVkNzdlZGMyNTIzZTAzZjcuLmFmODQ4MTE1N2FkZDAyMDI5
N2RhZGIyZjY0NWJmN2YyYjVjZDBmZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rpc3Bs
YXkvY3NzL0Rpc3BsYXlJbWFnZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9j
c3MvRGlzcGxheUltYWdlQm94LmNwcApAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgRGlzcGxh
eSB7CiAKIERFRklORV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSW1hZ2VCb3gpOwog
Ci1JbWFnZUJveDo6SW1hZ2VCb3goVHJlZSYgdHJlZSwgQWJzb2x1dGVGbG9hdFJlY3QgYm9yZGVy
Qm94LCBTdHlsZSYmIGRpc3BsYXlTdHlsZSwgUmVmUHRyPEltYWdlPiYmIGltYWdlKQorSW1hZ2VC
b3g6OkltYWdlQm94KFRyZWUmIHRyZWUsIFVuYWRqdXN0ZWRBYnNvbHV0ZUZsb2F0UmVjdCBib3Jk
ZXJCb3gsIFN0eWxlJiYgZGlzcGxheVN0eWxlLCBSZWZQdHI8SW1hZ2U+JiYgaW1hZ2UpCiAgICAg
OiBSZXBsYWNlZEJveCh0cmVlLCBib3JkZXJCb3gsIFdURk1vdmUoZGlzcGxheVN0eWxlKSwgeyBU
eXBlRmxhZ3M6OkltYWdlQm94IH0pCiAgICAgLCBtX2ltYWdlKFdURk1vdmUoaW1hZ2UpKQogewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUltYWdlQm94Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5SW1hZ2VCb3guaAppbmRleCA0ZmVh
NTVhOGNjZjMyMTdlNzkyYTNjYmNmMzczZjA3MDE2NzdmZWE3Li4zNTU4MjUxYzEzM2FkZDM2MjBi
YjVhOGY2ZWFiMTM4OWM0OTlmZjk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5
L2Nzcy9EaXNwbGF5SW1hZ2VCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9E
aXNwbGF5SW1hZ2VCb3guaApAQCAtNDEsNyArNDEsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRI
X0hFQVBfSURFTlRJRklFUihJbWFnZUJveCk7CiBjbGFzcyBJbWFnZUJveCA6IHB1YmxpYyBSZXBs
YWNlZEJveCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJ
RVIoSW1hZ2VCb3gpOwogcHVibGljOgotICAgIEltYWdlQm94KFRyZWUmLCBBYnNvbHV0ZUZsb2F0
UmVjdCBib3JkZXJCb3gsIFN0eWxlJiYsIFJlZlB0cjxJbWFnZT4mJik7CisgICAgSW1hZ2VCb3go
VHJlZSYsIFVuYWRqdXN0ZWRBYnNvbHV0ZUZsb2F0UmVjdCBib3JkZXJCb3gsIFN0eWxlJiYsIFJl
ZlB0cjxJbWFnZT4mJik7CiAKICAgICBJbWFnZSogaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2lt
YWdlLmdldCgpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rp
c3BsYXlSZXBsYWNlZEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5
UmVwbGFjZWRCb3guY3BwCmluZGV4IDAxOTg1NDY1YmY3M2FlMDMyODg3ZjUzNWQ1N2U2NGFjODE2
Njg4NjYuLmRjMjU2Zjk1ZGFiNzE3ODgzOTUxODkwM2NhZTM2NDI4ODg2ZGVlZTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlSZXBsYWNlZEJveC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheVJlcGxhY2VkQm94LmNwcApAQCAt
MzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgRGlzcGxheSB7CiAKIERFRklORV9BTExPQ0FUT1JfV0lU
SF9IRUFQX0lERU5USUZJRVIoUmVwbGFjZWRCb3gpOwogCi1SZXBsYWNlZEJveDo6UmVwbGFjZWRC
b3goVHJlZSYgdHJlZSwgQWJzb2x1dGVGbG9hdFJlY3QgYm9yZGVyQm94LCBTdHlsZSYmIGRpc3Bs
YXlTdHlsZSwgT3B0aW9uU2V0PFR5cGVGbGFncz4gZmxhZ3MpCitSZXBsYWNlZEJveDo6UmVwbGFj
ZWRCb3goVHJlZSYgdHJlZSwgVW5hZGp1c3RlZEFic29sdXRlRmxvYXRSZWN0IGJvcmRlckJveCwg
U3R5bGUmJiBkaXNwbGF5U3R5bGUsIE9wdGlvblNldDxUeXBlRmxhZ3M+IGZsYWdzKQogICAgIDog
Qm94TW9kZWxCb3godHJlZSwgYm9yZGVyQm94LCBXVEZNb3ZlKGRpc3BsYXlTdHlsZSksIGZsYWdz
KQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheVJl
cGxhY2VkQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5UmVwbGFjZWRC
b3guaAppbmRleCAzYTAzNjNjZDgwMDMyZmVkZTJjZjUzNmY3NWE0ZDFjYzcyN2FiYzM2Li4wZGYy
MzAzZGM3MDY0M2RmYWJhNTM4MTk2YjI1Mjg2NDdkMmJjZTJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5UmVwbGFjZWRCb3guaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5UmVwbGFjZWRCb3guaApAQCAtMzMsMjAgKzMzLDIxIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBEaXNwbGF5IHsKIAogREVDTEFSRV9BTExP
Q0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoUmVwbGFjZWRCb3gpOworCiBjbGFzcyBSZXBsYWNl
ZEJveCA6IHB1YmxpYyBCb3hNb2RlbEJveCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURf
V0lUSF9IRUFQX0lERU5USUZJRVIoUmVwbGFjZWRCb3gpOwogICAgIGZyaWVuZCBjbGFzcyBCb3hG
YWN0b3J5OwogcHVibGljOgotICAgIFJlcGxhY2VkQm94KFRyZWUmLCBBYnNvbHV0ZUZsb2F0UmVj
dCBib3JkZXJCb3gsIFN0eWxlJiYsIE9wdGlvblNldDxUeXBlRmxhZ3M+KTsKKyAgICBSZXBsYWNl
ZEJveChUcmVlJiwgVW5hZGp1c3RlZEFic29sdXRlRmxvYXRSZWN0IGJvcmRlckJveCwgU3R5bGUm
JiwgT3B0aW9uU2V0PFR5cGVGbGFncz4pOwogICAgIAotICAgIEFic29sdXRlRmxvYXRSZWN0IHJl
cGxhY2VkQ29udGVudFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlcGxhY2VkQ29udGVudFJlY3Q7
IH0KKyAgICBVbmFkanVzdGVkQWJzb2x1dGVGbG9hdFJlY3QgcmVwbGFjZWRDb250ZW50UmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVwbGFjZWRDb250ZW50UmVjdDsgfQogCiBwcml2YXRlOgogICAg
IGNvbnN0IGNoYXIqIGJveE5hbWUoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgc2V0UmVw
bGFjZWRDb250ZW50UmVjdChjb25zdCBBYnNvbHV0ZUZsb2F0UmVjdCYgYm94KSB7IG1fcmVwbGFj
ZWRDb250ZW50UmVjdCA9IGJveDsgfQorICAgIHZvaWQgc2V0UmVwbGFjZWRDb250ZW50UmVjdChj
b25zdCBVbmFkanVzdGVkQWJzb2x1dGVGbG9hdFJlY3QmIGJveCkgeyBtX3JlcGxhY2VkQ29udGVu
dFJlY3QgPSBib3g7IH0KIAotICAgIEFic29sdXRlRmxvYXRSZWN0IG1fcmVwbGFjZWRDb250ZW50
UmVjdDsKKyAgICBVbmFkanVzdGVkQWJzb2x1dGVGbG9hdFJlY3QgbV9yZXBsYWNlZENvbnRlbnRS
ZWN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgRGlzcGxheQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheVN0YWNraW5nSXRlbS5oIGIvU291cmNlL1dlYkNvcmUv
ZGlzcGxheS9jc3MvRGlzcGxheVN0YWNraW5nSXRlbS5oCmluZGV4IGJkOGIzZWE4NmM1YzJiMjYw
ZmJjYjc0Y2FjMzMxYjJmZDg3ZjJkOTEuLjMzNWFiZmU3YTY1N2IyNTgwNmM1ZDc5ODM0MjFlYmM4
MWJmZDczNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlT
dGFja2luZ0l0ZW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5U3Rh
Y2tpbmdJdGVtLmgKQEAgLTU1LDkgKzU1LDkgQEAgcHVibGljOgogICAgIGJvb2wgaXNTdGFja2lu
Z0NvbnRleHQoKSBjb25zdDsKIAogICAgIC8vIEJvdW5kcyBmb3IgdGhlIHBhaW50ZWQgY29udGVu
dCBvZiB0aGlzIHN0YWNraW5nIGl0ZW0gKGV4Y2x1ZGluZyBkZXNjZW5kYW50IGl0ZW1zKSwgbm90
IHRha2luZyBjbGlwcyBmcm9tIGFuY2VzdG9ycyBpbnRvIGFjY291bnQuCi0gICAgQWJzb2x1dGVG
bG9hdFJlY3QgcGFpbnRlZENvbnRlbnRCb3VuZHMoKSBjb25zdCB7IHJldHVybiBtX3BhaW50ZWRD
b250ZW50Qm91bmRzOyB9CisgICAgVW5hZGp1c3RlZEFic29sdXRlRmxvYXRSZWN0IHBhaW50ZWRD
b250ZW50Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9wYWludGVkQ29udGVudEJvdW5kczsgfQog
ICAgIC8vIEJvdW5kcyBmb3IgdGhlIHBhaW50ZWQgY29udGVudCBvZiB0aGlzIHN0YWNraW5nIGl0
ZW0gYW5kIGRlc2NlbmRhbnQgc3RhY2tpbmcgaXRlbXMuCi0gICAgQWJzb2x1dGVGbG9hdFJlY3Qg
cGFpbnRlZEJvdW5kc0luY2x1ZGluZ0Rlc2NlbmRhbnRJdGVtcygpIGNvbnN0IHsgcmV0dXJuIG1f
cGFpbnRlZEJvdW5kc0luY2x1ZGluZ0Rlc2NlbmRhbnRJdGVtczsgfQorICAgIFVuYWRqdXN0ZWRB
YnNvbHV0ZUZsb2F0UmVjdCBwYWludGVkQm91bmRzSW5jbHVkaW5nRGVzY2VuZGFudEl0ZW1zKCkg
Y29uc3QgeyByZXR1cm4gbV9wYWludGVkQm91bmRzSW5jbHVkaW5nRGVzY2VuZGFudEl0ZW1zOyB9
CiAKICAgICBjb25zdCBTdGFja2luZ0l0ZW1MaXN0JiBuZWdhdGl2ZVpPcmRlckxpc3QoKSBjb25z
dCB7IHJldHVybiBtX25lZ2F0aXZlWk9yZGVyTGlzdDsgfQogICAgIGNvbnN0IFN0YWNraW5nSXRl
bUxpc3QmIHBvc2l0aXZlWk9yZGVyTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpdmVaT3Jk
ZXJMaXN0OyB9CkBAIC02NSwxNSArNjUsMTUgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lk
IHNvcnRMaXN0cygpOwogCi0gICAgdm9pZCBzZXRQYWludGVkQ29udGVudEJvdW5kcyhjb25zdCBB
YnNvbHV0ZUZsb2F0UmVjdCYgYm91bmRzKSB7IG1fcGFpbnRlZENvbnRlbnRCb3VuZHMgPSBib3Vu
ZHM7IH0KLSAgICB2b2lkIHNldFBhaW50ZWRCb3VuZHNJbmNsdWRpbmdEZXNjZW5kYW50SXRlbXMo
Y29uc3QgQWJzb2x1dGVGbG9hdFJlY3QmIGJvdW5kcykgeyBtX3BhaW50ZWRCb3VuZHNJbmNsdWRp
bmdEZXNjZW5kYW50SXRlbXMgPSBib3VuZHM7IH0KKyAgICB2b2lkIHNldFBhaW50ZWRDb250ZW50
Qm91bmRzKGNvbnN0IFVuYWRqdXN0ZWRBYnNvbHV0ZUZsb2F0UmVjdCYgYm91bmRzKSB7IG1fcGFp
bnRlZENvbnRlbnRCb3VuZHMgPSBib3VuZHM7IH0KKyAgICB2b2lkIHNldFBhaW50ZWRCb3VuZHNJ
bmNsdWRpbmdEZXNjZW5kYW50SXRlbXMoY29uc3QgVW5hZGp1c3RlZEFic29sdXRlRmxvYXRSZWN0
JiBib3VuZHMpIHsgbV9wYWludGVkQm91bmRzSW5jbHVkaW5nRGVzY2VuZGFudEl0ZW1zID0gYm91
bmRzOyB9CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qm94TW9kZWxCb3g+IG1fYm94OwogICAgIFN0
YWNraW5nSXRlbUxpc3QgbV9uZWdhdGl2ZVpPcmRlckxpc3Q7CiAgICAgU3RhY2tpbmdJdGVtTGlz
dCBtX3Bvc2l0aXZlWk9yZGVyTGlzdDsKICAgICAKLSAgICBBYnNvbHV0ZUZsb2F0UmVjdCBtX3Bh
aW50ZWRDb250ZW50Qm91bmRzOwotICAgIEFic29sdXRlRmxvYXRSZWN0IG1fcGFpbnRlZEJvdW5k
c0luY2x1ZGluZ0Rlc2NlbmRhbnRJdGVtczsKKyAgICBVbmFkanVzdGVkQWJzb2x1dGVGbG9hdFJl
Y3QgbV9wYWludGVkQ29udGVudEJvdW5kczsKKyAgICBVbmFkanVzdGVkQWJzb2x1dGVGbG9hdFJl
Y3QgbV9wYWludGVkQm91bmRzSW5jbHVkaW5nRGVzY2VuZGFudEl0ZW1zOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgRGlzcGxheQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3Mv
RGlzcGxheVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheVRl
eHRCb3guY3BwCmluZGV4IDM0MGQyNDVkOWJiMjEwMWMxZGQ4NTY5YTUxY2VlYzUzYTcwMzg2OTMu
LjVmYjU0ZDAzZTRmOGM5NmEyMWM3MjRiYmFhMzBhYjFjMzk1ZWMxMGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5VGV4dEJveC5jcHAKQEAgLTM2LDcgKzM2LDcgQEAg
bmFtZXNwYWNlIERpc3BsYXkgewogCiBERUZJTkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElG
SUVSKFRleHRCb3gpOwogCi1UZXh0Qm94OjpUZXh0Qm94KFRyZWUmIHRyZWUsIEFic29sdXRlRmxv
YXRSZWN0IGJvcmRlckJveCwgU3R5bGUmJiBkaXNwbGF5U3R5bGUsIGNvbnN0IExheW91dDo6TGlu
ZVJ1biYgbGluZVJ1bikKK1RleHRCb3g6OlRleHRCb3goVHJlZSYgdHJlZSwgVW5hZGp1c3RlZEFi
c29sdXRlRmxvYXRSZWN0IGJvcmRlckJveCwgU3R5bGUmJiBkaXNwbGF5U3R5bGUsIGNvbnN0IExh
eW91dDo6TGluZVJ1biYgbGluZVJ1bikKICAgICA6IEJveCh0cmVlLCBib3JkZXJCb3gsIFdURk1v
dmUoZGlzcGxheVN0eWxlKSwgeyBUeXBlRmxhZ3M6OlRleHRCb3ggfSkKICAgICAsIG1fZXhwYW5z
aW9uKGxpbmVSdW4uZXhwYW5zaW9uKCkpCiAgICAgLCBtX3RleHQobGluZVJ1bi50ZXh0KCkudmFs
dWUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlUZXh0
Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5VGV4dEJveC5oCmluZGV4
IDI1YjA5NTcxYjgwN2Q3NTFmNzE3ZmRhZWY5NDUzNDY2NzRmMWFhNjkuLjgwYzJmMDRjODVjYmY5
ZjlmOTgxNDE0MzEzMmI0Y2YxZjk1YmFkNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rp
c3BsYXkvY3NzL0Rpc3BsYXlUZXh0Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9j
c3MvRGlzcGxheVRleHRCb3guaApAQCAtMzgsNyArMzgsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9X
SVRIX0hFQVBfSURFTlRJRklFUihUZXh0Qm94KTsKIGNsYXNzIFRleHRCb3ggOiBwdWJsaWMgQm94
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihUZXh0
Qm94KTsKIHB1YmxpYzoKLSAgICBUZXh0Qm94KFRyZWUmLCBBYnNvbHV0ZUZsb2F0UmVjdCBib3Jk
ZXJCb3gsIFN0eWxlJiYsIGNvbnN0IExheW91dDo6TGluZVJ1biYpOworICAgIFRleHRCb3goVHJl
ZSYsIFVuYWRqdXN0ZWRBYnNvbHV0ZUZsb2F0UmVjdCBib3JkZXJCb3gsIFN0eWxlJiYsIGNvbnN0
IExheW91dDo6TGluZVJ1biYpOwogCiAgICAgTGF5b3V0OjpMaW5lUnVuOjpFeHBhbnNpb24gZXhw
YW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9leHBhbnNpb247IH0KICAgICBjb25zdCBMYXlvdXQ6
OkxpbmVSdW46OlRleHQmIHRleHQoKSBjb25zdCB7IHJldHVybiBtX3RleHQ7IH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>