<?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>215942</bug_id>
          
          <creation_ts>2020-08-28 12:14:10 -0700</creation_ts>
          <short_desc>Make StyleRareNonInheritedData::mask and StyleBackgroundData::background DataRefs</short_desc>
          <delta_ts>2020-08-30 21:52:14 -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>CSS</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="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>pdr</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1683737</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-08-28 12:14:10 -0700</bug_when>
    <thetext>Potential progression on the Multiply subtest in MotionMark.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683740</commentid>
    <comment_count>1</comment_count>
      <attachid>407496</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-08-28 12:35:08 -0700</bug_when>
    <thetext>Created attachment 407496
For EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683748</commentid>
    <comment_count>2</comment_count>
      <attachid>407497</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-08-28 12:58:34 -0700</bug_when>
    <thetext>Created attachment 407497
For EWS (and fix GTK build)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683772</commentid>
    <comment_count>3</comment_count>
      <attachid>407497</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-28 14:37:24 -0700</bug_when>
    <thetext>Comment on attachment 407497
For EWS (and fix GTK build)

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

&gt; Source/WebCore/rendering/style/FillLayer.cpp:30
&gt; +struct SameSizeAsFillLayer : public RefCounted&lt;SameSizeAsFillLayer&gt; {

No need for &quot;public&quot; here.

&gt; Source/WebCore/rendering/style/FillLayer.cpp:31
&gt; +    RefPtr&lt;FillLayer&gt; next;

SameSize structures don’t really need to use smart pointers instead of raw pointers.

&gt; Source/WebCore/rendering/style/FillLayer.cpp:110
&gt; +        m_next = FillLayer::create(*o.m_next);

Should just call create here, not FillLayer::create.

&gt; Source/WebCore/rendering/style/FillLayer.h:74
&gt; +    static Ref&lt;FillLayer&gt; create(FillLayerType type)
&gt; +    {
&gt; +        return adoptRef(*new FillLayer(type));
&gt; +    }
&gt; +
&gt; +    static Ref&lt;FillLayer&gt; create(const FillLayer&amp; layer)
&gt; +    {
&gt; +        return adoptRef(*new FillLayer(layer));
&gt; +    }

I suggest not inlining these. We’d rather inline the constructor inside the create function rather than inlining the allocation and then paying function call overhead to call the constructor.

&gt; Source/WebCore/rendering/style/FillLayer.h:79
&gt; +    Ref&lt;FillLayer&gt; copy() const
&gt; +    {
&gt; +        return FillLayer::create(*this);
&gt; +    }

Should call just &quot;create&quot; and should write as a one-liner:

    Ref&lt;FillLayer&gt; copy() const { return create(*this); }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683956</commentid>
    <comment_count>4</comment_count>
      <attachid>407497</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-08-29 16:46:52 -0700</bug_when>
    <thetext>Comment on attachment 407497
For EWS (and fix GTK build)

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

Thanks for the review!

&gt;&gt; Source/WebCore/rendering/style/FillLayer.cpp:30
&gt;&gt; +struct SameSizeAsFillLayer : public RefCounted&lt;SameSizeAsFillLayer&gt; {
&gt; 
&gt; No need for &quot;public&quot; here.

Removed the public!

&gt;&gt; Source/WebCore/rendering/style/FillLayer.cpp:31
&gt;&gt; +    RefPtr&lt;FillLayer&gt; next;
&gt; 
&gt; SameSize structures don’t really need to use smart pointers instead of raw pointers.

Changed back to a raw pointer.

&gt;&gt; Source/WebCore/rendering/style/FillLayer.cpp:110
&gt;&gt; +        m_next = FillLayer::create(*o.m_next);
&gt; 
&gt; Should just call create here, not FillLayer::create.

Removed the FillLayer::

&gt;&gt; Source/WebCore/rendering/style/FillLayer.h:74
&gt;&gt; +    }
&gt; 
&gt; I suggest not inlining these. We’d rather inline the constructor inside the create function rather than inlining the allocation and then paying function call overhead to call the constructor.

Sounds good — moved the definition out of the header.

&gt;&gt; Source/WebCore/rendering/style/FillLayer.h:79
&gt;&gt; +    }
&gt; 
&gt; Should call just &quot;create&quot; and should write as a one-liner:
&gt; 
&gt;     Ref&lt;FillLayer&gt; copy() const { return create(*this); }

Done!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684076</commentid>
    <comment_count>5</comment_count>
      <attachid>407586</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-08-30 21:09:00 -0700</bug_when>
    <thetext>Created attachment 407586
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684078</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-08-30 21:51:24 -0700</bug_when>
    <thetext>Committed r266344: &lt;https://trac.webkit.org/changeset/266344&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 407586.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684079</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-08-30 21:52:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/68052423&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407496</attachid>
            <date>2020-08-28 12:35:08 -0700</date>
            <delta_ts>2020-08-28 12:58:32 -0700</delta_ts>
            <desc>For EWS</desc>
            <filename>bug-215942-20200828123508.patch</filename>
            <type>text/plain</type>
            <size>24356</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MjQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmJiNWVhYWVjYjlmZWU2
NTYzNGU0NmNlNjk0MzY1YmYwMzRhMzJlMi4uNGExMTIzNDU3MWIyMTRmNGQxNzhhNmZkNzA0OGNl
NGZjOWRmYzczZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDIwLTA4LTI4ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgU3R5bGVS
YXJlTm9uSW5oZXJpdGVkRGF0YTo6bWFzayBhbmQgU3R5bGVCYWNrZ3JvdW5kRGF0YTo6YmFja2dy
b3VuZCBEYXRhUmVmcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE1OTQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQSBzaWduaWZpY2FudCBhbW91bnQgb2YgdGltZSBpbiBNb3Rpb25NYXJrJ3MgTXVsdGlw
bHkgc3VidGVzdCBpcyBzcGVudCB1bmRlcm5lYXRoIHRoZSBjb3B5IGNvbnN0cnVjdG9yCisgICAg
ICAgIGBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhYCwgYW5kIGEgc2lnbmlmaWNhbnQgYW1vdW50
IG9mIHRpbWUgdW5kZXJuZWF0aCB0aGlzIGNvcHkgY29uc3RydWN0b3IgaXMgc3BlbnQgY29weWlu
ZworICAgICAgICB0aGUgcmFyZSBub24taW5oZXJpdGVkIGRhdGEncyBtYXNrIChhIGBGaWxsTGF5
ZXJgKS4KKworICAgICAgICBUaGlzIGBGaWxsTGF5ZXJgIGlzIGN1cnJlbnRseSBpbmxpbmUgZGF0
YSBpbiBgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YWA7IHRvIHJlZHVjZSB0aGUgY29zdCBvZiBj
b3B5aW5nIHJhcmUKKyAgICAgICAgbm9uLWluaGVyaXRlZCBkYXRhLCB3ZSBjYW4gaW5zdGVhZCBt
YWtlIHRoaXMgYSBgRGF0YVJlZjxGaWxsTGF5ZXI+YCwgc3VjaCB0aGF0IGNvcHlpbmcgcmFyZSBk
YXRhIHdpbGwgb25seSBjb3B5CisgICAgICAgIHRoZSByZWZlcmVuY2UgdG8gdGhlIGBGaWxsTGF5
ZXJgIHJhdGhlciB0aGFuIHRoZSBgRmlsbExheWVyYCBpdHNlbGYuCisKKyAgICAgICAgVXBvbiBt
dXRhdGluZyB0aGUgYEZpbGxMYXllcmAsIHdlIG5vdyB1c2UgYERhdGFSZWY6OmFjY2VzcygpYCB0
byBlbnN1cmUgdGhhdCB0aGVzZSBgRmlsbExheWVyYHMgYXJlIGNvcGllZAorICAgICAgICBiZWZv
cmUgd3JpdGluZy4gU2VlIGJlbG93IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgICAgKiBjc3Mv
bWFrZXByb3AucGw6CisgICAgICAgIChnZW5lcmF0ZUZpbGxMYXllclByb3BlcnR5SW5oZXJpdFZh
bHVlU2V0dGVyKToKKyAgICAgICAgKGdlbmVyYXRlRmlsbExheWVyUHJvcGVydHlWYWx1ZVNldHRl
cik6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGaWxsTGF5ZXI6OkZpbGxMYXllcik6CisKKyAgICAgICAgRGVlcGx5IGNvcHkgdGhl
IGBGaWxsTGF5ZXJgJ3MgbGlua2VkIGxpc3Qgb2YgYEZpbGxMYXllcmBzLiBUaGlzIHByZXNlcnZl
cyBleGlzdGluZyBiZWhhdmlvciwgd2hpY2ggY3VycmVudGx5CisgICAgICAgIHVzZXMgYHN0ZDo6
dW5pcXVlX3B0cmAgdG8gc3RvcmUgdGhlIHBvaW50ZXIgdG8gdGhlIG5leHQgYEZpbGxMYXllcmAg
KGFuZCB0aGVyZWZvcmUsIHJlcXVpcmVzIGEgZGVlcCBjb3B5IG9mIHRoZQorICAgICAgICBsaW5r
ZWQgbGlzdCB3aGVuIGNvcHlpbmcgYEZpbGxMYXllcmApLgorCisgICAgICAgIEluIGEgZnV0dXJl
IHBhdGNoLCB3ZSBjb3VsZCBwcm9iYWJseSBmdXJ0aGVyIG9wdGltaXplIHRoaXMgYXMgd2VsbCB0
byBiZWhhdmUgaW4gYSBjb3B5LW9uLXdyaXRlIHdheSwgYnkgdHVybmluZworICAgICAgICB0aGUg
YFJlZlB0cjxGaWxsTGF5ZXI+IG1fbmV4dDtgIGludG8gYW4gYE9wdGlvbmFsPERhdGFSZWY8Rmls
bExheWVyPj5gIGluc3RlYWQgKGFuZCB0aGVuIHVzZSBgYWNjZXNzKClgIHRvIGNvcHkKKyAgICAg
ICAgdGhlIG5leHQgYEZpbGxMYXllcmAgcHJpb3IgdG8gd3JpdGluZykuCisKKyAgICAgICAgKFdl
YkNvcmU6OkZpbGxMYXllcjo6fkZpbGxMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpGaWxsTGF5
ZXI6Om9wZXJhdG9yPSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5oOgor
CisgICAgICAgIE1ha2UgYEZpbGxMYXllcmAgcmVmLWNvdW50ZWQsIGFuZCBpbnRyb2R1Y2UgbmV3
IGBjcmVhdGVgIG1ldGhvZHMgZm9yIGNvbnN0cnVjdGluZyBgRmlsbExheWVyYHMuIFVzZSB0aGVz
ZQorICAgICAgICBtZXRob2RzIGluIHNldmVyYWwgcGxhY2VzIHdoZXJlIHdlIGN1cnJlbnRseSBj
YWxsIHRoZSBjb25zdHJ1Y3RvcnMgZGlyZWN0bHksIHZpYSBgbWFrZVVuaXF1ZWAuCisKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbGxMYXllcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGxM
YXllcjo6Y29weSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxsTGF5ZXI6OnNldE5leHQp
OgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU3R5bGU6Omhhc0JhY2tncm91bmRJbWFnZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTdHlsZTo6aGFzRml4ZWRCYWNrZ3JvdW5kSW1hZ2UgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmJhY2tncm91bmRSZXBlYXRYIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kUmVwZWF0WSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6YmFja2dyb3VuZENvbXBvc2l0ZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6YmFja2dyb3VuZEF0dGFjaG1lbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmJhY2tncm91bmRDbGlwIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kT3JpZ2luIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kWFBvc2l0aW9uIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kWVBvc2l0aW9u
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kU2l6ZVR5
cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmJhY2tncm91bmRTaXpl
TGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjplbnN1cmVCYWNr
Z3JvdW5kTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjptYXNrSW1hZ2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6Om1hc2tSZXBlYXRYIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjptYXNrUmVwZWF0WSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6bWFza0NvbXBvc2l0ZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6bWFza0NsaXAgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU3R5bGU6Om1hc2tPcmlnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU3R5bGU6Om1hc2tYUG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU3R5bGU6Om1hc2tZUG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U3R5bGU6Om1hc2tTaXplVHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHls
ZTo6bWFza1NpemVMZW5ndGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6
OmVuc3VyZU1hc2tMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6Omhhc01h
c2sgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNldEJhY2tncm91bmRY
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNldEJhY2tncm91bmRZ
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNldEJhY2tncm91bmRT
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXRCYWNrZ3JvdW5kU2l6ZUxl
bmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6Y2xlYXJCYWNrZ3JvdW5kTGF5
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjppbmhlcml0QmFja2dyb3VuZExh
eWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6Y2xlYXJNYXNrTGF5ZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjppbmhlcml0TWFza0xheWVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6c2V0TWFza0ltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclN0eWxlOjpzZXRNYXNrWFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclN0eWxlOjpzZXRNYXNrWVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0
eWxlOjpzZXRNYXNrU2l6ZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQmFja2dy
b3VuZERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCYWNrZ3JvdW5kRGF0YTo6U3R5
bGVCYWNrZ3JvdW5kRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJhY2tncm91bmREYXRh
OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVCYWNrZ3JvdW5k
RGF0YS5oOgorCisgICAgICAgIFNpbmNlIGBGaWxsTGF5ZXJgIGlzIG5vdyByZWYtY291bnRlZCwg
YFN0eWxlQmFja2dyb3VuZERhdGE6OmJhY2tncm91bmRgIG5lZWRzIHRvIGJlIGEgYERhdGFSZWZg
IGFzIHdlbGwuCisKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJp
dGVkRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRh
OjpTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUv
U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oOgorCiAyMDIwLTA4LTI3ICBXZW5zb24gSHNpZWgg
IDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIE9jY2FzaW9uYWwgY3Jhc2hlcyB3
aGVuIHJlc3RvcmluZyByZXBsYWNlZCB0ZXh0IHVuZGVyIEVkaXRvcjo6Y2hhbmdlQmFja1RvUmVw
bGFjZWRTdHJpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9tYWtlcHJvcC5wbCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9tYWtlcHJvcC5wbAppbmRleCBmNjEwMWY4ODQ3MTAzNzJlOTE4
M2M4MDQwOGQ3ODFiYmY5NzRkYTczLi43YWRkNmYyYjlkYzdkNTY4NmM2OWE4ZmRlYjFlNjAxNmQ4
NTU3YTMxIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvbWFrZXByb3AucGwKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9wLnBsCkBAIC05MjUsNyArOTI1LDcgQEAgc3ViIGdl
bmVyYXRlRmlsbExheWVyUHJvcGVydHlJbmhlcml0VmFsdWVTZXR0ZXIgewogICAkc2V0dGVyQ29u
dGVudCAuPSAkaW5kZW50IC4gIkZpbGxMYXllciogcHJldmlvdXNDaGlsZCA9IG51bGxwdHI7XG4i
OwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImZvciAoYXV0byogcGFyZW50ID0gJmJ1
aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLiIgLiBnZXRMYXllcnNGdW5jdGlvbigkbmFtZSkgLiAi
KCk7IHBhcmVudCAmJiBwYXJlbnQtPiIgLiAkdGVzdEZ1bmN0aW9uIC4gIigpOyBwYXJlbnQgPSBw
YXJlbnQtPm5leHQoKSkge1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAg
aWYgKCFjaGlsZCkge1xuIjsKLSAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAg
IHByZXZpb3VzQ2hpbGQtPnNldE5leHQobWFrZVVuaXF1ZTxGaWxsTGF5ZXI+KCIgLiBnZXRGaWxs
TGF5ZXJUeXBlKCRuYW1lKSAuICIpKTtcbiI7CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQg
LiAiICAgICAgICBwcmV2aW91c0NoaWxkLT5zZXROZXh0KEZpbGxMYXllcjo6Y3JlYXRlKCIgLiBn
ZXRGaWxsTGF5ZXJUeXBlKCRuYW1lKSAuICIpKTtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRp
bmRlbnQgLiAiICAgICAgICBjaGlsZCA9IHByZXZpb3VzQ2hpbGQtPm5leHQoKTtcbiI7CiAgICRz
ZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIH1cbiI7CiAgICRzZXR0ZXJDb250ZW50IC49
ICRpbmRlbnQgLiAiICAgIGNoaWxkLT4iIC4gJHNldHRlciAuICIocGFyZW50LT4iIC4gJGdldHRl
ciAuICIoKSk7XG4iOwpAQCAtOTUxLDcgKzk1MSw3IEBAIHN1YiBnZW5lcmF0ZUZpbGxMYXllclBy
b3BlcnR5VmFsdWVTZXR0ZXIgewogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICAv
LyBXYWxrIGVhY2ggdmFsdWUgYW5kIHB1dCBpdCBpbnRvIGEgbGF5ZXIsIGNyZWF0aW5nIG5ldyBs
YXllcnMgYXMgbmVlZGVkLlxuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAg
Zm9yIChhdXRvJiBpdGVtIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHtcbiI7CiAg
ICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgICAgICBpZiAoIWNoaWxkKSB7XG4iOwot
ICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICAgICAgICAgIHByZXZpb3VzQ2hpbGQt
PnNldE5leHQobWFrZVVuaXF1ZTxGaWxsTGF5ZXI+KCIgLiBnZXRGaWxsTGF5ZXJUeXBlKCRuYW1l
KSAuICIpKTtcbiI7CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgICAgICAgICAg
cHJldmlvdXNDaGlsZC0+c2V0TmV4dChGaWxsTGF5ZXI6OmNyZWF0ZSgiIC4gZ2V0RmlsbExheWVy
VHlwZSgkbmFtZSkgLiAiKSk7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAg
ICAgICAgICAgIGNoaWxkID0gcHJldmlvdXNDaGlsZC0+bmV4dCgpO1xuIjsKICAgJHNldHRlckNv
bnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgIH1cbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRp
bmRlbnQgLiAiICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGVNYXAoKS4iIC4gZ2V0RmlsbExheWVy
TWFwZnVuY3Rpb24oJG5hbWUpIC4gIigiIC4gJENTU1Byb3BlcnR5SWQgLiAiLCAqY2hpbGQsIGl0
ZW0pO1xuIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9GaWxs
TGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5jcHAK
aW5kZXggZmU1YzAxMjZjMDE5ZmZlNDYxZTc5MmIzYTkxYjc2OTliMTNjMzAwZi4uMWE3ZGQ5MzAw
YTA1YjY1YmQzYzExYTQ5NjUzYjU2NTc3MGJiNzMzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5jcHAKQEAgLTI3LDggKzI3LDggQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1zdHJ1Y3QgU2FtZVNpemVBc0ZpbGxMYXllciB7Ci0gICAgRmlsbExheWVy
KiBuZXh0Oworc3RydWN0IFNhbWVTaXplQXNGaWxsTGF5ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxT
YW1lU2l6ZUFzRmlsbExheWVyPiB7CisgICAgUmVmUHRyPEZpbGxMYXllcj4gbmV4dDsKIAogICAg
IFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZTsKIApAQCAtNzYsOCArNzYsNyBAQCBGaWxsTGF5ZXI6
OkZpbGxMYXllcihGaWxsTGF5ZXJUeXBlIHR5cGUpCiB9CiAKIEZpbGxMYXllcjo6RmlsbExheWVy
KGNvbnN0IEZpbGxMYXllciYgbykKLSAgICA6IG1fbmV4dChvLm1fbmV4dCA/IG1ha2VVbmlxdWU8
RmlsbExheWVyPigqby5tX25leHQpIDogbnVsbHB0cikKLSAgICAsIG1faW1hZ2Uoby5tX2ltYWdl
KQorICAgIDogbV9pbWFnZShvLm1faW1hZ2UpCiAgICAgLCBtX3hQb3NpdGlvbihvLm1feFBvc2l0
aW9uKQogICAgICwgbV95UG9zaXRpb24oby5tX3lQb3NpdGlvbikKICAgICAsIG1fc2l6ZUxlbmd0
aChvLm1fc2l6ZUxlbmd0aCkKQEAgLTEwNywxOCArMTA2LDIyIEBAIEZpbGxMYXllcjo6RmlsbExh
eWVyKGNvbnN0IEZpbGxMYXllciYgbykKICAgICAsIG1fbWFza1NvdXJjZVR5cGVTZXQoby5tX21h
c2tTb3VyY2VUeXBlU2V0KQogICAgICwgbV90eXBlKG8ubV90eXBlKQogeworICAgIGlmIChvLm1f
bmV4dCkKKyAgICAgICAgbV9uZXh0ID0gRmlsbExheWVyOjpjcmVhdGUoKm8ubV9uZXh0KTsKIH0K
IAogRmlsbExheWVyOjp+RmlsbExheWVyKCkKIHsKICAgICAvLyBEZWxldGUgdGhlIGxheWVycyBp
biBhIGxvb3AgcmF0aGVyIHRoYW4gYWxsb3dpbmcgcmVjdXJzaXZlIGNhbGxzIHRvIHRoZSBkZXN0
cnVjdG9ycy4KLSAgICBmb3IgKHN0ZDo6dW5pcXVlX3B0cjxGaWxsTGF5ZXI+IG5leHQgPSBXVEZN
b3ZlKG1fbmV4dCk7IG5leHQ7IG5leHQgPSBXVEZNb3ZlKG5leHQtPm1fbmV4dCkpIHsgfQorICAg
IGZvciAoYXV0byBuZXh0ID0gV1RGTW92ZShtX25leHQpOyBuZXh0OyBuZXh0ID0gV1RGTW92ZShu
ZXh0LT5tX25leHQpKSB7IH0KIH0KIAogRmlsbExheWVyJiBGaWxsTGF5ZXI6Om9wZXJhdG9yPShj
b25zdCBGaWxsTGF5ZXImIG8pCiB7Ci0gICAgbV9uZXh0ID0gby5tX25leHQgPyBtYWtlVW5pcXVl
PEZpbGxMYXllcj4oKm8ubV9uZXh0KSA6IG51bGxwdHI7Ci0KKyAgICBpZiAoby5tX25leHQpCisg
ICAgICAgIG1fbmV4dCA9IEZpbGxMYXllcjo6Y3JlYXRlKCpvLm1fbmV4dCk7CisgICAgZWxzZQor
ICAgICAgICBtX25leHQgPSBudWxscHRyOwogICAgIG1faW1hZ2UgPSBvLm1faW1hZ2U7CiAgICAg
bV94UG9zaXRpb24gPSBvLm1feFBvc2l0aW9uOwogICAgIG1feVBvc2l0aW9uID0gby5tX3lQb3Np
dGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5ZXIuaAppbmRleCA0
MzE3NDJiZWJjMmE1YmE5N2JmNmRhOGFmYzUwMzg0N2M1NWE3NzQ2Li5lNTJlMzU5MjVjOTk2MTdl
MWE5NWUwMGNlNjEzOTg0NTc0NzczOTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvRmlsbExheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL0ZpbGxMYXllci5oCkBAIC02MCwxMCArNjAsMjQgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBGaWxsU2l6ZSYgYSwgY29uc3QgRmlsbFNpemUmIGIpCiAgICAgcmV0dXJuICEoYSA9
PSBiKTsKIH0KIAotY2xhc3MgRmlsbExheWVyIHsKK2NsYXNzIEZpbGxMYXllciA6IHB1YmxpYyBS
ZWZDb3VudGVkPEZpbGxMYXllcj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgotICAgIGV4cGxpY2l0IEZpbGxMYXllcihGaWxsTGF5ZXJUeXBlKTsKKyAgICBzdGF0aWMg
UmVmPEZpbGxMYXllcj4gY3JlYXRlKEZpbGxMYXllclR5cGUgdHlwZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxMYXllcih0eXBlKSk7CisgICAgfQorCisgICAgc3Rh
dGljIFJlZjxGaWxsTGF5ZXI+IGNyZWF0ZShjb25zdCBGaWxsTGF5ZXImIGxheWVyKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbExheWVyKGxheWVyKSk7CisgICAgfQor
CisgICAgUmVmPEZpbGxMYXllcj4gY29weSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
RmlsbExheWVyOjpjcmVhdGUoKnRoaXMpOworICAgIH0KKwogICAgIH5GaWxsTGF5ZXIoKTsKIAog
ICAgIFN0eWxlSW1hZ2UqIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQpA
QCAtMTM1LDEwICsxNDksOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhclNpemUoKSB7IG1fc2l6
ZVR5cGUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRmlsbFNpemVUeXBlOjpOb25lKTsgfQogICAg
IHZvaWQgY2xlYXJNYXNrU291cmNlVHlwZSgpIHsgbV9tYXNrU291cmNlVHlwZVNldCA9IGZhbHNl
OyB9CiAKLSAgICB2b2lkIHNldE5leHQoc3RkOjp1bmlxdWVfcHRyPEZpbGxMYXllcj4gbmV4dCkg
eyBtX25leHQgPSBXVEZNb3ZlKG5leHQpOyB9CisgICAgdm9pZCBzZXROZXh0KFJlZlB0cjxGaWxs
TGF5ZXI+JiYgbmV4dCkgeyBtX25leHQgPSBXVEZNb3ZlKG5leHQpOyB9CiAKICAgICBGaWxsTGF5
ZXImIG9wZXJhdG9yPShjb25zdCBGaWxsTGF5ZXImKTsKLSAgICBGaWxsTGF5ZXIoY29uc3QgRmls
bExheWVyJik7CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRmlsbExheWVyJikgY29uc3Q7
CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZpbGxMYXllciYgb3RoZXIpIGNvbnN0IHsgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CkBAIC0xNzQsMTEgKzE4NywxNCBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJTdHlsZTsKIAorICAgIGV4cGxpY2l0IEZp
bGxMYXllcihGaWxsTGF5ZXJUeXBlKTsKKyAgICBGaWxsTGF5ZXIoY29uc3QgRmlsbExheWVyJik7
CisKICAgICB2b2lkIGNvbXB1dGVDbGlwTWF4KCkgY29uc3Q7CiAKICAgICBib29sIGhhc0ltYWdl
SW5BbnlMYXllcigpIGNvbnN0OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEZpbGxMYXllcj4gbV9u
ZXh0OworICAgIFJlZlB0cjxGaWxsTGF5ZXI+IG1fbmV4dDsKIAogICAgIFJlZlB0cjxTdHlsZUlt
YWdlPiBtX2ltYWdlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvUmVuZGVyU3R5bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5oCmluZGV4IDQxYTNjYTgyMDYwOGUzZDI1ZmI0ZDkxOTVlNzNkNzJmMmI0M2M0MGIuLjY3
ZTIzNjljNzA4ZjkyYWE0NGZhMmE4MmEyZjI3Yzk3MDA3MjBkNzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCkBAIC0yMDUsOCArMjA1LDggQEAgcHVi
bGljOgogICAgIGJvb2wgaGFzTWFyZ2luQmVmb3JlUXVpcmsoKSBjb25zdCB7IHJldHVybiBtYXJn
aW5CZWZvcmUoKS5oYXNRdWlyaygpOyB9CiAgICAgYm9vbCBoYXNNYXJnaW5BZnRlclF1aXJrKCkg
Y29uc3QgeyByZXR1cm4gbWFyZ2luQWZ0ZXIoKS5oYXNRdWlyaygpOyB9CiAKLSAgICBib29sIGhh
c0JhY2tncm91bmRJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZERhdGEtPmJhY2tn
cm91bmQuaGFzSW1hZ2UoKTsgfQotICAgIGJvb2wgaGFzRml4ZWRCYWNrZ3JvdW5kSW1hZ2UoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tncm91bmREYXRhLT5iYWNrZ3JvdW5kLmhhc0ZpeGVkSW1hZ2Uo
KTsgfQorICAgIGJvb2wgaGFzQmFja2dyb3VuZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNr
Z3JvdW5kRGF0YS0+YmFja2dyb3VuZC0+aGFzSW1hZ2UoKTsgfQorICAgIGJvb2wgaGFzRml4ZWRC
YWNrZ3JvdW5kSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmREYXRhLT5iYWNrZ3Jv
dW5kLT5oYXNGaXhlZEltYWdlKCk7IH0KIAogICAgIGJvb2wgaGFzRW50aXJlbHlGaXhlZEJhY2tn
cm91bmQoKSBjb25zdDsKIApAQCAtNDA1LDMwICs0MDUsMzAgQEAgcHVibGljOgogICAgIGJvb2wg
YnJlYWtPbmx5QWZ0ZXJXaGl0ZVNwYWNlKCkgY29uc3Q7CiAgICAgYm9vbCBicmVha1dvcmRzKCkg
Y29uc3Q7CiAKLSAgICBGaWxsUmVwZWF0IGJhY2tncm91bmRSZXBlYXRYKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8RmlsbFJlcGVhdD4obV9iYWNrZ3JvdW5kRGF0YS0+YmFja2dyb3VuZC5y
ZXBlYXRYKCkpOyB9Ci0gICAgRmlsbFJlcGVhdCBiYWNrZ3JvdW5kUmVwZWF0WSgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PEZpbGxSZXBlYXQ+KG1fYmFja2dyb3VuZERhdGEtPmJhY2tncm91
bmQucmVwZWF0WSgpKTsgfQotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGJhY2tncm91bmRDb21wb3Np
dGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb21wb3NpdGVPcGVyYXRvcj4obV9iYWNr
Z3JvdW5kRGF0YS0+YmFja2dyb3VuZC5jb21wb3NpdGUoKSk7IH0KLSAgICBGaWxsQXR0YWNobWVu
dCBiYWNrZ3JvdW5kQXR0YWNobWVudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZpbGxB
dHRhY2htZW50PihtX2JhY2tncm91bmREYXRhLT5iYWNrZ3JvdW5kLmF0dGFjaG1lbnQoKSk7IH0K
LSAgICBGaWxsQm94IGJhY2tncm91bmRDbGlwKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
RmlsbEJveD4obV9iYWNrZ3JvdW5kRGF0YS0+YmFja2dyb3VuZC5jbGlwKCkpOyB9Ci0gICAgRmls
bEJveCBiYWNrZ3JvdW5kT3JpZ2luKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RmlsbEJv
eD4obV9iYWNrZ3JvdW5kRGF0YS0+YmFja2dyb3VuZC5vcmlnaW4oKSk7IH0KLSAgICBjb25zdCBM
ZW5ndGgmIGJhY2tncm91bmRYUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRE
YXRhLT5iYWNrZ3JvdW5kLnhQb3NpdGlvbigpOyB9Ci0gICAgY29uc3QgTGVuZ3RoJiBiYWNrZ3Jv
dW5kWVBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kRGF0YS0+YmFja2dyb3Vu
ZC55UG9zaXRpb24oKTsgfQotICAgIEZpbGxTaXplVHlwZSBiYWNrZ3JvdW5kU2l6ZVR5cGUoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tncm91bmREYXRhLT5iYWNrZ3JvdW5kLnNpemVUeXBlKCk7IH0K
LSAgICBjb25zdCBMZW5ndGhTaXplJiBiYWNrZ3JvdW5kU2l6ZUxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fYmFja2dyb3VuZERhdGEtPmJhY2tncm91bmQuc2l6ZUxlbmd0aCgpOyB9Ci0gICAgRmls
bExheWVyJiBlbnN1cmVCYWNrZ3JvdW5kTGF5ZXJzKCkgeyByZXR1cm4gbV9iYWNrZ3JvdW5kRGF0
YS5hY2Nlc3MoKS5iYWNrZ3JvdW5kOyB9CisgICAgRmlsbFJlcGVhdCBiYWNrZ3JvdW5kUmVwZWF0
WCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZpbGxSZXBlYXQ+KG1fYmFja2dyb3VuZERh
dGEtPmJhY2tncm91bmQtPnJlcGVhdFgoKSk7IH0KKyAgICBGaWxsUmVwZWF0IGJhY2tncm91bmRS
ZXBlYXRZKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RmlsbFJlcGVhdD4obV9iYWNrZ3Jv
dW5kRGF0YS0+YmFja2dyb3VuZC0+cmVwZWF0WSgpKTsgfQorICAgIENvbXBvc2l0ZU9wZXJhdG9y
IGJhY2tncm91bmRDb21wb3NpdGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb21wb3Np
dGVPcGVyYXRvcj4obV9iYWNrZ3JvdW5kRGF0YS0+YmFja2dyb3VuZC0+Y29tcG9zaXRlKCkpOyB9
CisgICAgRmlsbEF0dGFjaG1lbnQgYmFja2dyb3VuZEF0dGFjaG1lbnQoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxGaWxsQXR0YWNobWVudD4obV9iYWNrZ3JvdW5kRGF0YS0+YmFja2dyb3Vu
ZC0+YXR0YWNobWVudCgpKTsgfQorICAgIEZpbGxCb3ggYmFja2dyb3VuZENsaXAoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxGaWxsQm94PihtX2JhY2tncm91bmREYXRhLT5iYWNrZ3JvdW5k
LT5jbGlwKCkpOyB9CisgICAgRmlsbEJveCBiYWNrZ3JvdW5kT3JpZ2luKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8RmlsbEJveD4obV9iYWNrZ3JvdW5kRGF0YS0+YmFja2dyb3VuZC0+b3Jp
Z2luKCkpOyB9CisgICAgY29uc3QgTGVuZ3RoJiBiYWNrZ3JvdW5kWFBvc2l0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9iYWNrZ3JvdW5kRGF0YS0+YmFja2dyb3VuZC0+eFBvc2l0aW9uKCk7IH0KKyAg
ICBjb25zdCBMZW5ndGgmIGJhY2tncm91bmRZUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tncm91bmREYXRhLT5iYWNrZ3JvdW5kLT55UG9zaXRpb24oKTsgfQorICAgIEZpbGxTaXplVHlw
ZSBiYWNrZ3JvdW5kU2l6ZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmREYXRhLT5i
YWNrZ3JvdW5kLT5zaXplVHlwZSgpOyB9CisgICAgY29uc3QgTGVuZ3RoU2l6ZSYgYmFja2dyb3Vu
ZFNpemVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmREYXRhLT5iYWNrZ3JvdW5k
LT5zaXplTGVuZ3RoKCk7IH0KKyAgICBGaWxsTGF5ZXImIGVuc3VyZUJhY2tncm91bmRMYXllcnMo
KSB7IHJldHVybiBtX2JhY2tncm91bmREYXRhLmFjY2VzcygpLmJhY2tncm91bmQuYWNjZXNzKCk7
IH0KICAgICBjb25zdCBGaWxsTGF5ZXImIGJhY2tncm91bmRMYXllcnMoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tncm91bmREYXRhLT5iYWNrZ3JvdW5kOyB9CiAKLSAgICBTdHlsZUltYWdlKiBtYXNr
SW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLT5tYXNrLmltYWdl
KCk7IH0KLSAgICBGaWxsUmVwZWF0IG1hc2tSZXBlYXRYKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8RmlsbFJlcGVhdD4obV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bWFzay5yZXBlYXRYKCkp
OyB9Ci0gICAgRmlsbFJlcGVhdCBtYXNrUmVwZWF0WSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PEZpbGxSZXBlYXQ+KG1fcmFyZU5vbkluaGVyaXRlZERhdGEtPm1hc2sucmVwZWF0WSgpKTsg
fQotICAgIENvbXBvc2l0ZU9wZXJhdG9yIG1hc2tDb21wb3NpdGUoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxDb21wb3NpdGVPcGVyYXRvcj4obV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bWFz
ay5jb21wb3NpdGUoKSk7IH0KLSAgICBGaWxsQm94IG1hc2tDbGlwKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8RmlsbEJveD4obV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bWFzay5jbGlwKCkp
OyB9Ci0gICAgRmlsbEJveCBtYXNrT3JpZ2luKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
RmlsbEJveD4obV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bWFzay5vcmlnaW4oKSk7IH0KLSAgICBj
b25zdCBMZW5ndGgmIG1hc2tYUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JhcmVOb25Jbmhl
cml0ZWREYXRhLT5tYXNrLnhQb3NpdGlvbigpOyB9Ci0gICAgY29uc3QgTGVuZ3RoJiBtYXNrWVBv
c2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bWFzay55UG9z
aXRpb24oKTsgfQotICAgIEZpbGxTaXplVHlwZSBtYXNrU2l6ZVR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLT5tYXNrLnNpemVUeXBlKCk7IH0KLSAgICBjb25zdCBM
ZW5ndGhTaXplJiBtYXNrU2l6ZUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZU5vbkluaGVy
aXRlZERhdGEtPm1hc2suc2l6ZUxlbmd0aCgpOyB9Ci0gICAgRmlsbExheWVyJiBlbnN1cmVNYXNr
TGF5ZXJzKCkgeyByZXR1cm4gbV9yYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS5tYXNrOyB9
CisgICAgU3R5bGVJbWFnZSogbWFza0ltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlTm9uSW5o
ZXJpdGVkRGF0YS0+bWFzay0+aW1hZ2UoKTsgfQorICAgIEZpbGxSZXBlYXQgbWFza1JlcGVhdFgo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGaWxsUmVwZWF0PihtX3JhcmVOb25Jbmhlcml0
ZWREYXRhLT5tYXNrLT5yZXBlYXRYKCkpOyB9CisgICAgRmlsbFJlcGVhdCBtYXNrUmVwZWF0WSgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZpbGxSZXBlYXQ+KG1fcmFyZU5vbkluaGVyaXRl
ZERhdGEtPm1hc2stPnJlcGVhdFkoKSk7IH0KKyAgICBDb21wb3NpdGVPcGVyYXRvciBtYXNrQ29t
cG9zaXRlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29tcG9zaXRlT3BlcmF0b3I+KG1f
cmFyZU5vbkluaGVyaXRlZERhdGEtPm1hc2stPmNvbXBvc2l0ZSgpKTsgfQorICAgIEZpbGxCb3gg
bWFza0NsaXAoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGaWxsQm94PihtX3JhcmVOb25J
bmhlcml0ZWREYXRhLT5tYXNrLT5jbGlwKCkpOyB9CisgICAgRmlsbEJveCBtYXNrT3JpZ2luKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RmlsbEJveD4obV9yYXJlTm9uSW5oZXJpdGVkRGF0
YS0+bWFzay0+b3JpZ2luKCkpOyB9CisgICAgY29uc3QgTGVuZ3RoJiBtYXNrWFBvc2l0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bWFzay0+eFBvc2l0aW9uKCk7
IH0KKyAgICBjb25zdCBMZW5ndGgmIG1hc2tZUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Jh
cmVOb25Jbmhlcml0ZWREYXRhLT5tYXNrLT55UG9zaXRpb24oKTsgfQorICAgIEZpbGxTaXplVHlw
ZSBtYXNrU2l6ZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLT5t
YXNrLT5zaXplVHlwZSgpOyB9CisgICAgY29uc3QgTGVuZ3RoU2l6ZSYgbWFza1NpemVMZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLT5tYXNrLT5zaXplTGVuZ3Ro
KCk7IH0KKyAgICBGaWxsTGF5ZXImIGVuc3VyZU1hc2tMYXllcnMoKSB7IHJldHVybiBtX3JhcmVO
b25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLm1hc2suYWNjZXNzKCk7IH0KICAgICBjb25zdCBGaWxs
TGF5ZXImIG1hc2tMYXllcnMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVOb25Jbmhlcml0ZWREYXRh
LT5tYXNrOyB9CiAgICAgY29uc3QgTmluZVBpZWNlSW1hZ2UmIG1hc2tCb3hJbWFnZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmFyZU5vbkluaGVyaXRlZERhdGEtPm1hc2tCb3hJbWFnZTsgfQogICAgIFN0
eWxlSW1hZ2UqIG1hc2tCb3hJbWFnZVNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZU5vbklu
aGVyaXRlZERhdGEtPm1hc2tCb3hJbWFnZS5pbWFnZSgpOyB9CkBAIC02NDksNyArNjQ5LDcgQEAg
cHVibGljOgogICAgIHZvaWQgYXBwbHlUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBj
b25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94LCBBcHBseVRyYW5zZm9ybU9yaWdpbiA9IEluY2x1
ZGVUcmFuc2Zvcm1PcmlnaW4pIGNvbnN0OwogICAgIHZvaWQgc2V0UGFnZVNjYWxlVHJhbnNmb3Jt
KGZsb2F0KTsKIAotICAgIGJvb2wgaGFzTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZU5vbklu
aGVyaXRlZERhdGEtPm1hc2suaGFzSW1hZ2UoKSB8fCBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLT5t
YXNrQm94SW1hZ2UuaGFzSW1hZ2UoKTsgfQorICAgIGJvb2wgaGFzTWFzaygpIGNvbnN0IHsgcmV0
dXJuIG1fcmFyZU5vbkluaGVyaXRlZERhdGEtPm1hc2stPmhhc0ltYWdlKCkgfHwgbV9yYXJlTm9u
SW5oZXJpdGVkRGF0YS0+bWFza0JveEltYWdlLmhhc0ltYWdlKCk7IH0KIAogICAgIFRleHRDb21i
aW5lIHRleHRDb21iaW5lKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dENvbWJpbmU+
KG1fcmFyZU5vbkluaGVyaXRlZERhdGEtPnRleHRDb21iaW5lKTsgfQogICAgIGJvb2wgaGFzVGV4
dENvbWJpbmUoKSBjb25zdCB7IHJldHVybiB0ZXh0Q29tYmluZSgpICE9IFRleHRDb21iaW5lOjpO
b25lOyB9CkBAIC04NDUsMTAgKzg0NSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEJhY2tn
cm91bmRDb2xvcihjb25zdCBDb2xvciYgdikgeyBTRVRfVkFSKG1fYmFja2dyb3VuZERhdGEsIGNv
bG9yLCB2KTsgfQogCi0gICAgdm9pZCBzZXRCYWNrZ3JvdW5kWFBvc2l0aW9uKExlbmd0aCYmIGxl
bmd0aCkgeyBTRVRfVkFSKG1fYmFja2dyb3VuZERhdGEsIGJhY2tncm91bmQubV94UG9zaXRpb24s
IFdURk1vdmUobGVuZ3RoKSk7IH0KLSAgICB2b2lkIHNldEJhY2tncm91bmRZUG9zaXRpb24oTGVu
Z3RoJiYgbGVuZ3RoKSB7IFNFVF9WQVIobV9iYWNrZ3JvdW5kRGF0YSwgYmFja2dyb3VuZC5tX3lQ
b3NpdGlvbiwgV1RGTW92ZShsZW5ndGgpKTsgfQotICAgIHZvaWQgc2V0QmFja2dyb3VuZFNpemUo
RmlsbFNpemVUeXBlIGIpIHsgU0VUX1ZBUihtX2JhY2tncm91bmREYXRhLCBiYWNrZ3JvdW5kLm1f
c2l6ZVR5cGUsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihiKSk7IH0KLSAgICB2b2lkIHNldEJhY2tn
cm91bmRTaXplTGVuZ3RoKExlbmd0aFNpemUmJiBzaXplKSB7IFNFVF9WQVIobV9iYWNrZ3JvdW5k
RGF0YSwgYmFja2dyb3VuZC5tX3NpemVMZW5ndGgsIFdURk1vdmUoc2l6ZSkpOyB9CisgICAgdm9p
ZCBzZXRCYWNrZ3JvdW5kWFBvc2l0aW9uKExlbmd0aCYmIGxlbmd0aCkgeyBTRVRfTkVTVEVEX1ZB
UihtX2JhY2tncm91bmREYXRhLCBiYWNrZ3JvdW5kLCBtX3hQb3NpdGlvbiwgV1RGTW92ZShsZW5n
dGgpKTsgfQorICAgIHZvaWQgc2V0QmFja2dyb3VuZFlQb3NpdGlvbihMZW5ndGgmJiBsZW5ndGgp
IHsgU0VUX05FU1RFRF9WQVIobV9iYWNrZ3JvdW5kRGF0YSwgYmFja2dyb3VuZCwgbV95UG9zaXRp
b24sIFdURk1vdmUobGVuZ3RoKSk7IH0KKyAgICB2b2lkIHNldEJhY2tncm91bmRTaXplKEZpbGxT
aXplVHlwZSBiKSB7IFNFVF9ORVNURURfVkFSKG1fYmFja2dyb3VuZERhdGEsIGJhY2tncm91bmQs
IG1fc2l6ZVR5cGUsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihiKSk7IH0KKyAgICB2b2lkIHNldEJh
Y2tncm91bmRTaXplTGVuZ3RoKExlbmd0aFNpemUmJiBzaXplKSB7IFNFVF9ORVNURURfVkFSKG1f
YmFja2dyb3VuZERhdGEsIGJhY2tncm91bmQsIG1fc2l6ZUxlbmd0aCwgV1RGTW92ZShzaXplKSk7
IH0KICAgICAKICAgICB2b2lkIHNldEJvcmRlckltYWdlKGNvbnN0IE5pbmVQaWVjZUltYWdlJiBi
KSB7IFNFVF9WQVIobV9zdXJyb3VuZERhdGEsIGJvcmRlci5tX2ltYWdlLCBiKTsgfQogICAgIHZv
aWQgc2V0Qm9yZGVySW1hZ2VTb3VyY2UoUmVmUHRyPFN0eWxlSW1hZ2U+JiYpOwpAQCAtOTY1LDIz
ICs5NjUsMjMgQEAgcHVibGljOgogICAgIHZvaWQgc2V0V29yZFNwYWNpbmcoTGVuZ3RoJiYpOwog
ICAgIHZvaWQgc2V0TGV0dGVyU3BhY2luZyhmbG9hdCk7CiAKLSAgICB2b2lkIGNsZWFyQmFja2dy
b3VuZExheWVycygpIHsgbV9iYWNrZ3JvdW5kRGF0YS5hY2Nlc3MoKS5iYWNrZ3JvdW5kID0gRmls
bExheWVyKEZpbGxMYXllclR5cGU6OkJhY2tncm91bmQpOyB9Ci0gICAgdm9pZCBpbmhlcml0QmFj
a2dyb3VuZExheWVycyhjb25zdCBGaWxsTGF5ZXImIHBhcmVudCkgeyBtX2JhY2tncm91bmREYXRh
LmFjY2VzcygpLmJhY2tncm91bmQgPSBwYXJlbnQ7IH0KKyAgICB2b2lkIGNsZWFyQmFja2dyb3Vu
ZExheWVycygpIHsgbV9iYWNrZ3JvdW5kRGF0YS5hY2Nlc3MoKS5iYWNrZ3JvdW5kID0gRmlsbExh
eWVyOjpjcmVhdGUoRmlsbExheWVyVHlwZTo6QmFja2dyb3VuZCk7IH0KKyAgICB2b2lkIGluaGVy
aXRCYWNrZ3JvdW5kTGF5ZXJzKGNvbnN0IEZpbGxMYXllciYgcGFyZW50KSB7IG1fYmFja2dyb3Vu
ZERhdGEuYWNjZXNzKCkuYmFja2dyb3VuZCA9IEZpbGxMYXllcjo6Y3JlYXRlKHBhcmVudCk7IH0K
IAogICAgIHZvaWQgYWRqdXN0QmFja2dyb3VuZExheWVycygpOwogCi0gICAgdm9pZCBjbGVhck1h
c2tMYXllcnMoKSB7IG1fcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCkubWFzayA9IEZpbGxM
YXllcihGaWxsTGF5ZXJUeXBlOjpNYXNrKTsgfQotICAgIHZvaWQgaW5oZXJpdE1hc2tMYXllcnMo
Y29uc3QgRmlsbExheWVyJiBwYXJlbnQpIHsgbV9yYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3Mo
KS5tYXNrID0gcGFyZW50OyB9CisgICAgdm9pZCBjbGVhck1hc2tMYXllcnMoKSB7IG1fcmFyZU5v
bkluaGVyaXRlZERhdGEuYWNjZXNzKCkubWFzayA9IEZpbGxMYXllcjo6Y3JlYXRlKEZpbGxMYXll
clR5cGU6Ok1hc2spOyB9CisgICAgdm9pZCBpbmhlcml0TWFza0xheWVycyhjb25zdCBGaWxsTGF5
ZXImIHBhcmVudCkgeyBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLm1hc2sgPSBGaWxs
TGF5ZXI6OmNyZWF0ZShwYXJlbnQpOyB9CiAKICAgICB2b2lkIGFkanVzdE1hc2tMYXllcnMoKTsK
IAotICAgIHZvaWQgc2V0TWFza0ltYWdlKFJlZlB0cjxTdHlsZUltYWdlPiYmIHYpIHsgbV9yYXJl
Tm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS5tYXNrLnNldEltYWdlKFdURk1vdmUodikpOyB9Cisg
ICAgdm9pZCBzZXRNYXNrSW1hZ2UoUmVmUHRyPFN0eWxlSW1hZ2U+JiYgdikgeyBtX3JhcmVOb25J
bmhlcml0ZWREYXRhLmFjY2VzcygpLm1hc2suYWNjZXNzKCkuc2V0SW1hZ2UoV1RGTW92ZSh2KSk7
IH0KIAogICAgIHZvaWQgc2V0TWFza0JveEltYWdlKGNvbnN0IE5pbmVQaWVjZUltYWdlJiBiKSB7
IFNFVF9WQVIobV9yYXJlTm9uSW5oZXJpdGVkRGF0YSwgbWFza0JveEltYWdlLCBiKTsgfQogICAg
IHZvaWQgc2V0TWFza0JveEltYWdlU291cmNlKFJlZlB0cjxTdHlsZUltYWdlPiYmIHYpIHsgbV9y
YXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS5tYXNrQm94SW1hZ2Uuc2V0SW1hZ2UoV1RGTW92
ZSh2KSk7IH0KLSAgICB2b2lkIHNldE1hc2tYUG9zaXRpb24oTGVuZ3RoJiYgbGVuZ3RoKSB7IFNF
VF9WQVIobV9yYXJlTm9uSW5oZXJpdGVkRGF0YSwgbWFzay5tX3hQb3NpdGlvbiwgV1RGTW92ZShs
ZW5ndGgpKTsgfQotICAgIHZvaWQgc2V0TWFza1lQb3NpdGlvbihMZW5ndGgmJiBsZW5ndGgpIHsg
U0VUX1ZBUihtX3JhcmVOb25Jbmhlcml0ZWREYXRhLCBtYXNrLm1feVBvc2l0aW9uLCBXVEZNb3Zl
KGxlbmd0aCkpOyB9Ci0gICAgdm9pZCBzZXRNYXNrU2l6ZShMZW5ndGhTaXplIHNpemUpIHsgU0VU
X1ZBUihtX3JhcmVOb25Jbmhlcml0ZWREYXRhLCBtYXNrLm1fc2l6ZUxlbmd0aCwgV1RGTW92ZShz
aXplKSk7IH0KKyAgICB2b2lkIHNldE1hc2tYUG9zaXRpb24oTGVuZ3RoJiYgbGVuZ3RoKSB7IFNF
VF9ORVNURURfVkFSKG1fcmFyZU5vbkluaGVyaXRlZERhdGEsIG1hc2ssIG1feFBvc2l0aW9uLCBX
VEZNb3ZlKGxlbmd0aCkpOyB9CisgICAgdm9pZCBzZXRNYXNrWVBvc2l0aW9uKExlbmd0aCYmIGxl
bmd0aCkgeyBTRVRfTkVTVEVEX1ZBUihtX3JhcmVOb25Jbmhlcml0ZWREYXRhLCBtYXNrLCBtX3lQ
b3NpdGlvbiwgV1RGTW92ZShsZW5ndGgpKTsgfQorICAgIHZvaWQgc2V0TWFza1NpemUoTGVuZ3Ro
U2l6ZSBzaXplKSB7IFNFVF9ORVNURURfVkFSKG1fcmFyZU5vbkluaGVyaXRlZERhdGEsIG1hc2ss
IG1fc2l6ZUxlbmd0aCwgV1RGTW92ZShzaXplKSk7IH0KIAogICAgIHZvaWQgc2V0Qm9yZGVyQ29s
bGFwc2UoQm9yZGVyQ29sbGFwc2UgY29sbGFwc2UpIHsgbV9pbmhlcml0ZWRGbGFncy5ib3JkZXJD
b2xsYXBzZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2xsYXBzZSk7IH0KICAgICB2b2lkIHNl
dEhvcml6b250YWxCb3JkZXJTcGFjaW5nKGZsb2F0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUJhY2tncm91bmREYXRhLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUJhY2tncm91bmREYXRhLmNwcAppbmRleCAwYWZhN2Mw
NWRkY2EyZDVjZWQ3MDU1OWQ5Yjk0MDczZWEwZTljNjNhLi5hN2MyNzUwNjhlNmU0YTQ0ZDRkOGRm
MjgwOTdmZjY3ZWRkZmVhY2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvU3R5bGVCYWNrZ3JvdW5kRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIFN0eWxlQmFja2dyb3VuZERhdGE6OlN0eWxlQmFja2dyb3VuZERh
dGEoKQotICAgIDogYmFja2dyb3VuZChGaWxsTGF5ZXJUeXBlOjpCYWNrZ3JvdW5kKQorICAgIDog
YmFja2dyb3VuZChGaWxsTGF5ZXI6OmNyZWF0ZShGaWxsTGF5ZXJUeXBlOjpCYWNrZ3JvdW5kKSkK
ICAgICAsIGNvbG9yKFJlbmRlclN0eWxlOjppbml0aWFsQmFja2dyb3VuZENvbG9yKCkpCiB7CiB9
CkBAIC02Miw3ICs2Miw3IEBAIGJvb2wgU3R5bGVCYWNrZ3JvdW5kRGF0YTo6aXNFcXVpdmFsZW50
Rm9yUGFpbnRpbmcoY29uc3QgU3R5bGVCYWNrZ3JvdW5kRGF0YSYgb3RoCiAKIHZvaWQgU3R5bGVC
YWNrZ3JvdW5kRGF0YTo6ZHVtcChUZXh0U3RyZWFtJiB0cywgRHVtcFN0eWxlVmFsdWVzIGJlaGF2
aW9yKSBjb25zdAogewotICAgIGlmIChiZWhhdmlvciA9PSBEdW1wU3R5bGVWYWx1ZXM6OkFsbCB8
fCBiYWNrZ3JvdW5kICE9IEZpbGxMYXllcihGaWxsTGF5ZXJUeXBlOjpCYWNrZ3JvdW5kKSkKKyAg
ICBpZiAoYmVoYXZpb3IgPT0gRHVtcFN0eWxlVmFsdWVzOjpBbGwgfHwgKmJhY2tncm91bmQgIT0g
RmlsbExheWVyOjpjcmVhdGUoRmlsbExheWVyVHlwZTo6QmFja2dyb3VuZCkuZ2V0KCkpCiAgICAg
ICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmFja2dyb3VuZC1pbWFnZSIsIGJhY2tncm91bmQpOwogICAg
IGlmIChiZWhhdmlvciA9PSBEdW1wU3R5bGVWYWx1ZXM6OkFsbCB8fCBjb2xvciAhPSBSZW5kZXJT
dHlsZTo6aW5pdGlhbEJhY2tncm91bmRDb2xvcigpKQogICAgICAgICB0cy5kdW1wUHJvcGVydHko
ImJhY2tncm91bmQtY29sb3IiLCBjb2xvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU3R5bGVCYWNrZ3JvdW5kRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEuaAppbmRleCA5NzkzNDMxM2JjNDJhZjVh
NWQzNjAwNDYxOWRlMGNiYWY1YTFiMDJhLi42ZTBlMzc5MWRkMWZjYTBhOTlkZjc5YzAyNDEyMTI5
MTIwMWI3NDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5
bGVCYWNrZ3JvdW5kRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9T
dHlsZUJhY2tncm91bmREYXRhLmgKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogCiAgICAgYm9v
bCBpc0VxdWl2YWxlbnRGb3JQYWludGluZyhjb25zdCBTdHlsZUJhY2tncm91bmREYXRhJikgY29u
c3Q7CiAKLSAgICBGaWxsTGF5ZXIgYmFja2dyb3VuZDsKKyAgICBEYXRhUmVmPEZpbGxMYXllcj4g
YmFja2dyb3VuZDsKICAgICBDb2xvciBjb2xvcjsKICAgICBPdXRsaW5lVmFsdWUgb3V0bGluZTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5v
bkluaGVyaXRlZERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxl
UmFyZU5vbkluaGVyaXRlZERhdGEuY3BwCmluZGV4IGE3NzExYTYzMWY4NjBiZmUzYTlkZjRmYjRj
NjY2NjliYTE3OTY4ODUuLjE1YzNlOTI5MjU5ZTA3NmUyOTYyMzIyM2Y4NzgzNTRmMGQ0MDM1ZDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25J
bmhlcml0ZWREYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5
bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHAKQEAgLTY1LDcgKzY1LDcgQEAgU3R5bGVSYXJlTm9u
SW5oZXJpdGVkRGF0YTo6U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSgpCiAgICAgLCBzY3JvbGxT
bmFwQXJlYShTdHlsZVNjcm9sbFNuYXBBcmVhOjpjcmVhdGUoKSkKICNlbmRpZgogICAgICwgd2ls
bENoYW5nZShSZW5kZXJTdHlsZTo6aW5pdGlhbFdpbGxDaGFuZ2UoKSkKLSAgICAsIG1hc2soRmls
bExheWVyVHlwZTo6TWFzaykKKyAgICAsIG1hc2soRmlsbExheWVyOjpjcmVhdGUoRmlsbExheWVy
VHlwZTo6TWFzaykpCiAgICAgLCBtYXNrQm94SW1hZ2UoTmluZVBpZWNlSW1hZ2U6OlR5cGU6Ok1h
c2spCiAgICAgLCBvYmplY3RQb3NpdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbE9iamVjdFBvc2l0
aW9uKCkpCiAgICAgLCBzaGFwZU91dHNpZGUoUmVuZGVyU3R5bGU6OmluaXRpYWxTaGFwZU91dHNp
ZGUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJh
cmVOb25Jbmhlcml0ZWREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5
bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oCmluZGV4IDEyMjg3NmQwNzljM2E3NmFkOTZkNjNmNmI4
OTc5MTM2MmVlN2U4ZGEuLjgxOGNiNjI3NTVlNTY1ZWJmOWEyYjUwMDc0YmZiYTM4NTFjODcyOTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25J
bmhlcml0ZWREYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxl
UmFyZU5vbkluaGVyaXRlZERhdGEuaApAQCAtMTQ0LDcgKzE0NCw3IEBAIHB1YmxpYzoKICAgICBS
ZWZQdHI8QW5pbWF0aW9uTGlzdD4gYW5pbWF0aW9uczsKICAgICBSZWZQdHI8QW5pbWF0aW9uTGlz
dD4gdHJhbnNpdGlvbnM7CiAKLSAgICBGaWxsTGF5ZXIgbWFzazsKKyAgICBEYXRhUmVmPEZpbGxM
YXllcj4gbWFzazsKICAgICBOaW5lUGllY2VJbWFnZSBtYXNrQm94SW1hZ2U7CiAKICAgICBMZW5n
dGhTaXplIHBhZ2VTaXplOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407497</attachid>
            <date>2020-08-28 12:58:34 -0700</date>
            <delta_ts>2020-08-28 14:37:24 -0700</delta_ts>
            <desc>For EWS (and fix GTK build)</desc>
            <filename>bug-215942-20200828125833.patch</filename>
            <type>text/plain</type>
            <size>24524</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MjQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmJiNWVhYWVjYjlmZWU2
NTYzNGU0NmNlNjk0MzY1YmYwMzRhMzJlMi4uNGExMTIzNDU3MWIyMTRmNGQxNzhhNmZkNzA0OGNl
NGZjOWRmYzczZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDIwLTA4LTI4ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgU3R5bGVS
YXJlTm9uSW5oZXJpdGVkRGF0YTo6bWFzayBhbmQgU3R5bGVCYWNrZ3JvdW5kRGF0YTo6YmFja2dy
b3VuZCBEYXRhUmVmcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE1OTQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQSBzaWduaWZpY2FudCBhbW91bnQgb2YgdGltZSBpbiBNb3Rpb25NYXJrJ3MgTXVsdGlw
bHkgc3VidGVzdCBpcyBzcGVudCB1bmRlcm5lYXRoIHRoZSBjb3B5IGNvbnN0cnVjdG9yCisgICAg
ICAgIGBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhYCwgYW5kIGEgc2lnbmlmaWNhbnQgYW1vdW50
IG9mIHRpbWUgdW5kZXJuZWF0aCB0aGlzIGNvcHkgY29uc3RydWN0b3IgaXMgc3BlbnQgY29weWlu
ZworICAgICAgICB0aGUgcmFyZSBub24taW5oZXJpdGVkIGRhdGEncyBtYXNrIChhIGBGaWxsTGF5
ZXJgKS4KKworICAgICAgICBUaGlzIGBGaWxsTGF5ZXJgIGlzIGN1cnJlbnRseSBpbmxpbmUgZGF0
YSBpbiBgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YWA7IHRvIHJlZHVjZSB0aGUgY29zdCBvZiBj
b3B5aW5nIHJhcmUKKyAgICAgICAgbm9uLWluaGVyaXRlZCBkYXRhLCB3ZSBjYW4gaW5zdGVhZCBt
YWtlIHRoaXMgYSBgRGF0YVJlZjxGaWxsTGF5ZXI+YCwgc3VjaCB0aGF0IGNvcHlpbmcgcmFyZSBk
YXRhIHdpbGwgb25seSBjb3B5CisgICAgICAgIHRoZSByZWZlcmVuY2UgdG8gdGhlIGBGaWxsTGF5
ZXJgIHJhdGhlciB0aGFuIHRoZSBgRmlsbExheWVyYCBpdHNlbGYuCisKKyAgICAgICAgVXBvbiBt
dXRhdGluZyB0aGUgYEZpbGxMYXllcmAsIHdlIG5vdyB1c2UgYERhdGFSZWY6OmFjY2VzcygpYCB0
byBlbnN1cmUgdGhhdCB0aGVzZSBgRmlsbExheWVyYHMgYXJlIGNvcGllZAorICAgICAgICBiZWZv
cmUgd3JpdGluZy4gU2VlIGJlbG93IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgICAgKiBjc3Mv
bWFrZXByb3AucGw6CisgICAgICAgIChnZW5lcmF0ZUZpbGxMYXllclByb3BlcnR5SW5oZXJpdFZh
bHVlU2V0dGVyKToKKyAgICAgICAgKGdlbmVyYXRlRmlsbExheWVyUHJvcGVydHlWYWx1ZVNldHRl
cik6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGaWxsTGF5ZXI6OkZpbGxMYXllcik6CisKKyAgICAgICAgRGVlcGx5IGNvcHkgdGhl
IGBGaWxsTGF5ZXJgJ3MgbGlua2VkIGxpc3Qgb2YgYEZpbGxMYXllcmBzLiBUaGlzIHByZXNlcnZl
cyBleGlzdGluZyBiZWhhdmlvciwgd2hpY2ggY3VycmVudGx5CisgICAgICAgIHVzZXMgYHN0ZDo6
dW5pcXVlX3B0cmAgdG8gc3RvcmUgdGhlIHBvaW50ZXIgdG8gdGhlIG5leHQgYEZpbGxMYXllcmAg
KGFuZCB0aGVyZWZvcmUsIHJlcXVpcmVzIGEgZGVlcCBjb3B5IG9mIHRoZQorICAgICAgICBsaW5r
ZWQgbGlzdCB3aGVuIGNvcHlpbmcgYEZpbGxMYXllcmApLgorCisgICAgICAgIEluIGEgZnV0dXJl
IHBhdGNoLCB3ZSBjb3VsZCBwcm9iYWJseSBmdXJ0aGVyIG9wdGltaXplIHRoaXMgYXMgd2VsbCB0
byBiZWhhdmUgaW4gYSBjb3B5LW9uLXdyaXRlIHdheSwgYnkgdHVybmluZworICAgICAgICB0aGUg
YFJlZlB0cjxGaWxsTGF5ZXI+IG1fbmV4dDtgIGludG8gYW4gYE9wdGlvbmFsPERhdGFSZWY8Rmls
bExheWVyPj5gIGluc3RlYWQgKGFuZCB0aGVuIHVzZSBgYWNjZXNzKClgIHRvIGNvcHkKKyAgICAg
ICAgdGhlIG5leHQgYEZpbGxMYXllcmAgcHJpb3IgdG8gd3JpdGluZykuCisKKyAgICAgICAgKFdl
YkNvcmU6OkZpbGxMYXllcjo6fkZpbGxMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpGaWxsTGF5
ZXI6Om9wZXJhdG9yPSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5oOgor
CisgICAgICAgIE1ha2UgYEZpbGxMYXllcmAgcmVmLWNvdW50ZWQsIGFuZCBpbnRyb2R1Y2UgbmV3
IGBjcmVhdGVgIG1ldGhvZHMgZm9yIGNvbnN0cnVjdGluZyBgRmlsbExheWVyYHMuIFVzZSB0aGVz
ZQorICAgICAgICBtZXRob2RzIGluIHNldmVyYWwgcGxhY2VzIHdoZXJlIHdlIGN1cnJlbnRseSBj
YWxsIHRoZSBjb25zdHJ1Y3RvcnMgZGlyZWN0bHksIHZpYSBgbWFrZVVuaXF1ZWAuCisKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbGxMYXllcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGxM
YXllcjo6Y29weSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxsTGF5ZXI6OnNldE5leHQp
OgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU3R5bGU6Omhhc0JhY2tncm91bmRJbWFnZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTdHlsZTo6aGFzRml4ZWRCYWNrZ3JvdW5kSW1hZ2UgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmJhY2tncm91bmRSZXBlYXRYIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kUmVwZWF0WSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6YmFja2dyb3VuZENvbXBvc2l0ZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6YmFja2dyb3VuZEF0dGFjaG1lbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmJhY2tncm91bmRDbGlwIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kT3JpZ2luIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kWFBvc2l0aW9uIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kWVBvc2l0aW9u
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kU2l6ZVR5
cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmJhY2tncm91bmRTaXpl
TGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjplbnN1cmVCYWNr
Z3JvdW5kTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjptYXNrSW1hZ2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6Om1hc2tSZXBlYXRYIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjptYXNrUmVwZWF0WSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6bWFza0NvbXBvc2l0ZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6bWFza0NsaXAgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU3R5bGU6Om1hc2tPcmlnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU3R5bGU6Om1hc2tYUG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU3R5bGU6Om1hc2tZUG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U3R5bGU6Om1hc2tTaXplVHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHls
ZTo6bWFza1NpemVMZW5ndGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6
OmVuc3VyZU1hc2tMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6Omhhc01h
c2sgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNldEJhY2tncm91bmRY
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNldEJhY2tncm91bmRZ
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNldEJhY2tncm91bmRT
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXRCYWNrZ3JvdW5kU2l6ZUxl
bmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6Y2xlYXJCYWNrZ3JvdW5kTGF5
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjppbmhlcml0QmFja2dyb3VuZExh
eWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6Y2xlYXJNYXNrTGF5ZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjppbmhlcml0TWFza0xheWVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6c2V0TWFza0ltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclN0eWxlOjpzZXRNYXNrWFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclN0eWxlOjpzZXRNYXNrWVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0
eWxlOjpzZXRNYXNrU2l6ZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQmFja2dy
b3VuZERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCYWNrZ3JvdW5kRGF0YTo6U3R5
bGVCYWNrZ3JvdW5kRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJhY2tncm91bmREYXRh
OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVCYWNrZ3JvdW5k
RGF0YS5oOgorCisgICAgICAgIFNpbmNlIGBGaWxsTGF5ZXJgIGlzIG5vdyByZWYtY291bnRlZCwg
YFN0eWxlQmFja2dyb3VuZERhdGE6OmJhY2tncm91bmRgIG5lZWRzIHRvIGJlIGEgYERhdGFSZWZg
IGFzIHdlbGwuCisKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJp
dGVkRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRh
OjpTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUv
U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oOgorCiAyMDIwLTA4LTI3ICBXZW5zb24gSHNpZWgg
IDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIE9jY2FzaW9uYWwgY3Jhc2hlcyB3
aGVuIHJlc3RvcmluZyByZXBsYWNlZCB0ZXh0IHVuZGVyIEVkaXRvcjo6Y2hhbmdlQmFja1RvUmVw
bGFjZWRTdHJpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9tYWtlcHJvcC5wbCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9tYWtlcHJvcC5wbAppbmRleCBmNjEwMWY4ODQ3MTAzNzJlOTE4
M2M4MDQwOGQ3ODFiYmY5NzRkYTczLi43YWRkNmYyYjlkYzdkNTY4NmM2OWE4ZmRlYjFlNjAxNmQ4
NTU3YTMxIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvbWFrZXByb3AucGwKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9wLnBsCkBAIC05MjUsNyArOTI1LDcgQEAgc3ViIGdl
bmVyYXRlRmlsbExheWVyUHJvcGVydHlJbmhlcml0VmFsdWVTZXR0ZXIgewogICAkc2V0dGVyQ29u
dGVudCAuPSAkaW5kZW50IC4gIkZpbGxMYXllciogcHJldmlvdXNDaGlsZCA9IG51bGxwdHI7XG4i
OwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImZvciAoYXV0byogcGFyZW50ID0gJmJ1
aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLiIgLiBnZXRMYXllcnNGdW5jdGlvbigkbmFtZSkgLiAi
KCk7IHBhcmVudCAmJiBwYXJlbnQtPiIgLiAkdGVzdEZ1bmN0aW9uIC4gIigpOyBwYXJlbnQgPSBw
YXJlbnQtPm5leHQoKSkge1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAg
aWYgKCFjaGlsZCkge1xuIjsKLSAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAg
IHByZXZpb3VzQ2hpbGQtPnNldE5leHQobWFrZVVuaXF1ZTxGaWxsTGF5ZXI+KCIgLiBnZXRGaWxs
TGF5ZXJUeXBlKCRuYW1lKSAuICIpKTtcbiI7CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQg
LiAiICAgICAgICBwcmV2aW91c0NoaWxkLT5zZXROZXh0KEZpbGxMYXllcjo6Y3JlYXRlKCIgLiBn
ZXRGaWxsTGF5ZXJUeXBlKCRuYW1lKSAuICIpKTtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRp
bmRlbnQgLiAiICAgICAgICBjaGlsZCA9IHByZXZpb3VzQ2hpbGQtPm5leHQoKTtcbiI7CiAgICRz
ZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIH1cbiI7CiAgICRzZXR0ZXJDb250ZW50IC49
ICRpbmRlbnQgLiAiICAgIGNoaWxkLT4iIC4gJHNldHRlciAuICIocGFyZW50LT4iIC4gJGdldHRl
ciAuICIoKSk7XG4iOwpAQCAtOTUxLDcgKzk1MSw3IEBAIHN1YiBnZW5lcmF0ZUZpbGxMYXllclBy
b3BlcnR5VmFsdWVTZXR0ZXIgewogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICAv
LyBXYWxrIGVhY2ggdmFsdWUgYW5kIHB1dCBpdCBpbnRvIGEgbGF5ZXIsIGNyZWF0aW5nIG5ldyBs
YXllcnMgYXMgbmVlZGVkLlxuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAg
Zm9yIChhdXRvJiBpdGVtIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHtcbiI7CiAg
ICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgICAgICBpZiAoIWNoaWxkKSB7XG4iOwot
ICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICAgICAgICAgIHByZXZpb3VzQ2hpbGQt
PnNldE5leHQobWFrZVVuaXF1ZTxGaWxsTGF5ZXI+KCIgLiBnZXRGaWxsTGF5ZXJUeXBlKCRuYW1l
KSAuICIpKTtcbiI7CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgICAgICAgICAg
cHJldmlvdXNDaGlsZC0+c2V0TmV4dChGaWxsTGF5ZXI6OmNyZWF0ZSgiIC4gZ2V0RmlsbExheWVy
VHlwZSgkbmFtZSkgLiAiKSk7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAg
ICAgICAgICAgIGNoaWxkID0gcHJldmlvdXNDaGlsZC0+bmV4dCgpO1xuIjsKICAgJHNldHRlckNv
bnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgIH1cbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRp
bmRlbnQgLiAiICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGVNYXAoKS4iIC4gZ2V0RmlsbExheWVy
TWFwZnVuY3Rpb24oJG5hbWUpIC4gIigiIC4gJENTU1Byb3BlcnR5SWQgLiAiLCAqY2hpbGQsIGl0
ZW0pO1xuIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9GaWxs
TGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5jcHAK
aW5kZXggZmU1YzAxMjZjMDE5ZmZlNDYxZTc5MmIzYTkxYjc2OTliMTNjMzAwZi4uMWE3ZGQ5MzAw
YTA1YjY1YmQzYzExYTQ5NjUzYjU2NTc3MGJiNzMzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5jcHAKQEAgLTI3LDggKzI3LDggQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1zdHJ1Y3QgU2FtZVNpemVBc0ZpbGxMYXllciB7Ci0gICAgRmlsbExheWVy
KiBuZXh0Oworc3RydWN0IFNhbWVTaXplQXNGaWxsTGF5ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxT
YW1lU2l6ZUFzRmlsbExheWVyPiB7CisgICAgUmVmUHRyPEZpbGxMYXllcj4gbmV4dDsKIAogICAg
IFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZTsKIApAQCAtNzYsOCArNzYsNyBAQCBGaWxsTGF5ZXI6
OkZpbGxMYXllcihGaWxsTGF5ZXJUeXBlIHR5cGUpCiB9CiAKIEZpbGxMYXllcjo6RmlsbExheWVy
KGNvbnN0IEZpbGxMYXllciYgbykKLSAgICA6IG1fbmV4dChvLm1fbmV4dCA/IG1ha2VVbmlxdWU8
RmlsbExheWVyPigqby5tX25leHQpIDogbnVsbHB0cikKLSAgICAsIG1faW1hZ2Uoby5tX2ltYWdl
KQorICAgIDogbV9pbWFnZShvLm1faW1hZ2UpCiAgICAgLCBtX3hQb3NpdGlvbihvLm1feFBvc2l0
aW9uKQogICAgICwgbV95UG9zaXRpb24oby5tX3lQb3NpdGlvbikKICAgICAsIG1fc2l6ZUxlbmd0
aChvLm1fc2l6ZUxlbmd0aCkKQEAgLTEwNywxOCArMTA2LDIyIEBAIEZpbGxMYXllcjo6RmlsbExh
eWVyKGNvbnN0IEZpbGxMYXllciYgbykKICAgICAsIG1fbWFza1NvdXJjZVR5cGVTZXQoby5tX21h
c2tTb3VyY2VUeXBlU2V0KQogICAgICwgbV90eXBlKG8ubV90eXBlKQogeworICAgIGlmIChvLm1f
bmV4dCkKKyAgICAgICAgbV9uZXh0ID0gRmlsbExheWVyOjpjcmVhdGUoKm8ubV9uZXh0KTsKIH0K
IAogRmlsbExheWVyOjp+RmlsbExheWVyKCkKIHsKICAgICAvLyBEZWxldGUgdGhlIGxheWVycyBp
biBhIGxvb3AgcmF0aGVyIHRoYW4gYWxsb3dpbmcgcmVjdXJzaXZlIGNhbGxzIHRvIHRoZSBkZXN0
cnVjdG9ycy4KLSAgICBmb3IgKHN0ZDo6dW5pcXVlX3B0cjxGaWxsTGF5ZXI+IG5leHQgPSBXVEZN
b3ZlKG1fbmV4dCk7IG5leHQ7IG5leHQgPSBXVEZNb3ZlKG5leHQtPm1fbmV4dCkpIHsgfQorICAg
IGZvciAoYXV0byBuZXh0ID0gV1RGTW92ZShtX25leHQpOyBuZXh0OyBuZXh0ID0gV1RGTW92ZShu
ZXh0LT5tX25leHQpKSB7IH0KIH0KIAogRmlsbExheWVyJiBGaWxsTGF5ZXI6Om9wZXJhdG9yPShj
b25zdCBGaWxsTGF5ZXImIG8pCiB7Ci0gICAgbV9uZXh0ID0gby5tX25leHQgPyBtYWtlVW5pcXVl
PEZpbGxMYXllcj4oKm8ubV9uZXh0KSA6IG51bGxwdHI7Ci0KKyAgICBpZiAoby5tX25leHQpCisg
ICAgICAgIG1fbmV4dCA9IEZpbGxMYXllcjo6Y3JlYXRlKCpvLm1fbmV4dCk7CisgICAgZWxzZQor
ICAgICAgICBtX25leHQgPSBudWxscHRyOwogICAgIG1faW1hZ2UgPSBvLm1faW1hZ2U7CiAgICAg
bV94UG9zaXRpb24gPSBvLm1feFBvc2l0aW9uOwogICAgIG1feVBvc2l0aW9uID0gby5tX3lQb3Np
dGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5ZXIuaAppbmRleCA0
MzE3NDJiZWJjMmE1YmE5N2JmNmRhOGFmYzUwMzg0N2M1NWE3NzQ2Li5lNTJlMzU5MjVjOTk2MTdl
MWE5NWUwMGNlNjEzOTg0NTc0NzczOTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvRmlsbExheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL0ZpbGxMYXllci5oCkBAIC02MCwxMCArNjAsMjQgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBGaWxsU2l6ZSYgYSwgY29uc3QgRmlsbFNpemUmIGIpCiAgICAgcmV0dXJuICEoYSA9
PSBiKTsKIH0KIAotY2xhc3MgRmlsbExheWVyIHsKK2NsYXNzIEZpbGxMYXllciA6IHB1YmxpYyBS
ZWZDb3VudGVkPEZpbGxMYXllcj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgotICAgIGV4cGxpY2l0IEZpbGxMYXllcihGaWxsTGF5ZXJUeXBlKTsKKyAgICBzdGF0aWMg
UmVmPEZpbGxMYXllcj4gY3JlYXRlKEZpbGxMYXllclR5cGUgdHlwZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxMYXllcih0eXBlKSk7CisgICAgfQorCisgICAgc3Rh
dGljIFJlZjxGaWxsTGF5ZXI+IGNyZWF0ZShjb25zdCBGaWxsTGF5ZXImIGxheWVyKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbExheWVyKGxheWVyKSk7CisgICAgfQor
CisgICAgUmVmPEZpbGxMYXllcj4gY29weSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
RmlsbExheWVyOjpjcmVhdGUoKnRoaXMpOworICAgIH0KKwogICAgIH5GaWxsTGF5ZXIoKTsKIAog
ICAgIFN0eWxlSW1hZ2UqIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQpA
QCAtMTM1LDEwICsxNDksOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhclNpemUoKSB7IG1fc2l6
ZVR5cGUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRmlsbFNpemVUeXBlOjpOb25lKTsgfQogICAg
IHZvaWQgY2xlYXJNYXNrU291cmNlVHlwZSgpIHsgbV9tYXNrU291cmNlVHlwZVNldCA9IGZhbHNl
OyB9CiAKLSAgICB2b2lkIHNldE5leHQoc3RkOjp1bmlxdWVfcHRyPEZpbGxMYXllcj4gbmV4dCkg
eyBtX25leHQgPSBXVEZNb3ZlKG5leHQpOyB9CisgICAgdm9pZCBzZXROZXh0KFJlZlB0cjxGaWxs
TGF5ZXI+JiYgbmV4dCkgeyBtX25leHQgPSBXVEZNb3ZlKG5leHQpOyB9CiAKICAgICBGaWxsTGF5
ZXImIG9wZXJhdG9yPShjb25zdCBGaWxsTGF5ZXImKTsKLSAgICBGaWxsTGF5ZXIoY29uc3QgRmls
bExheWVyJik7CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRmlsbExheWVyJikgY29uc3Q7
CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZpbGxMYXllciYgb3RoZXIpIGNvbnN0IHsgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CkBAIC0xNzQsMTEgKzE4NywxNCBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJTdHlsZTsKIAorICAgIGV4cGxpY2l0IEZp
bGxMYXllcihGaWxsTGF5ZXJUeXBlKTsKKyAgICBGaWxsTGF5ZXIoY29uc3QgRmlsbExheWVyJik7
CisKICAgICB2b2lkIGNvbXB1dGVDbGlwTWF4KCkgY29uc3Q7CiAKICAgICBib29sIGhhc0ltYWdl
SW5BbnlMYXllcigpIGNvbnN0OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEZpbGxMYXllcj4gbV9u
ZXh0OworICAgIFJlZlB0cjxGaWxsTGF5ZXI+IG1fbmV4dDsKIAogICAgIFJlZlB0cjxTdHlsZUlt
YWdlPiBtX2ltYWdlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvUmVuZGVyU3R5bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5oCmluZGV4IDQxYTNjYTgyMDYwOGUzZDI1ZmI0ZDkxOTVlNzNkNzJmMmI0M2M0MGIuLjY3
ZTIzNjljNzA4ZjkyYWE0NGZhMmE4MmEyZjI3Yzk3MDA3MjBkNzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCkBAIC0yMDUsOCArMjA1LDggQEAgcHVi
bGljOgogICAgIGJvb2wgaGFzTWFyZ2luQmVmb3JlUXVpcmsoKSBjb25zdCB7IHJldHVybiBtYXJn
aW5CZWZvcmUoKS5oYXNRdWlyaygpOyB9CiAgICAgYm9vbCBoYXNNYXJnaW5BZnRlclF1aXJrKCkg
Y29uc3QgeyByZXR1cm4gbWFyZ2luQWZ0ZXIoKS5oYXNRdWlyaygpOyB9CiAKLSAgICBib29sIGhh
c0JhY2tncm91bmRJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZERhdGEtPmJhY2tn
cm91bmQuaGFzSW1hZ2UoKTsgfQotICAgIGJvb2wgaGFzRml4ZWRCYWNrZ3JvdW5kSW1hZ2UoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tncm91bmREYXRhLT5iYWNrZ3JvdW5kLmhhc0ZpeGVkSW1hZ2Uo
KTsgfQorICAgIGJvb2wgaGFzQmFja2dyb3VuZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNr
Z3JvdW5kRGF0YS0+YmFja2dyb3VuZC0+aGFzSW1hZ2UoKTsgfQorICAgIGJvb2wgaGFzRml4ZWRC
YWNrZ3JvdW5kSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmREYXRhLT5iYWNrZ3Jv
dW5kLT5oYXNGaXhlZEltYWdlKCk7IH0KIAogICAgIGJvb2wgaGFzRW50aXJlbHlGaXhlZEJhY2tn
cm91bmQoKSBjb25zdDsKIApAQCAtNDA1LDMwICs0MDUsMzAgQEAgcHVibGljOgogICAgIGJvb2wg
YnJlYWtPbmx5QWZ0ZXJXaGl0ZVNwYWNlKCkgY29uc3Q7CiAgICAgYm9vbCBicmVha1dvcmRzKCkg
Y29uc3Q7CiAKLSAgICBGaWxsUmVwZWF0IGJhY2tncm91bmRSZXBlYXRYKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8RmlsbFJlcGVhdD4obV9iYWNrZ3JvdW5kRGF0YS0+YmFja2dyb3VuZC5y
ZXBlYXRYKCkpOyB9Ci0gICAgRmlsbFJlcGVhdCBiYWNrZ3JvdW5kUmVwZWF0WSgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PEZpbGxSZXBlYXQ+KG1fYmFja2dyb3VuZERhdGEtPmJhY2tncm91
bmQucmVwZWF0WSgpKTsgfQotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGJhY2tncm91bmRDb21wb3Np
dGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb21wb3NpdGVPcGVyYXRvcj4obV9iYWNr
Z3JvdW5kRGF0YS0+YmFja2dyb3VuZC5jb21wb3NpdGUoKSk7IH0KLSAgICBGaWxsQXR0YWNobWVu
dCBiYWNrZ3JvdW5kQXR0YWNobWVudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZpbGxB
dHRhY2htZW50PihtX2JhY2tncm91bmREYXRhLT5iYWNrZ3JvdW5kLmF0dGFjaG1lbnQoKSk7IH0K
LSAgICBGaWxsQm94IGJhY2tncm91bmRDbGlwKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
RmlsbEJveD4obV9iYWNrZ3JvdW5kRGF0YS0+YmFja2dyb3VuZC5jbGlwKCkpOyB9Ci0gICAgRmls
bEJveCBiYWNrZ3JvdW5kT3JpZ2luKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RmlsbEJv
eD4obV9iYWNrZ3JvdW5kRGF0YS0+YmFja2dyb3VuZC5vcmlnaW4oKSk7IH0KLSAgICBjb25zdCBM
ZW5ndGgmIGJhY2tncm91bmRYUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRE
YXRhLT5iYWNrZ3JvdW5kLnhQb3NpdGlvbigpOyB9Ci0gICAgY29uc3QgTGVuZ3RoJiBiYWNrZ3Jv
dW5kWVBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kRGF0YS0+YmFja2dyb3Vu
ZC55UG9zaXRpb24oKTsgfQotICAgIEZpbGxTaXplVHlwZSBiYWNrZ3JvdW5kU2l6ZVR5cGUoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tncm91bmREYXRhLT5iYWNrZ3JvdW5kLnNpemVUeXBlKCk7IH0K
LSAgICBjb25zdCBMZW5ndGhTaXplJiBiYWNrZ3JvdW5kU2l6ZUxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fYmFja2dyb3VuZERhdGEtPmJhY2tncm91bmQuc2l6ZUxlbmd0aCgpOyB9Ci0gICAgRmls
bExheWVyJiBlbnN1cmVCYWNrZ3JvdW5kTGF5ZXJzKCkgeyByZXR1cm4gbV9iYWNrZ3JvdW5kRGF0
YS5hY2Nlc3MoKS5iYWNrZ3JvdW5kOyB9CisgICAgRmlsbFJlcGVhdCBiYWNrZ3JvdW5kUmVwZWF0
WCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZpbGxSZXBlYXQ+KG1fYmFja2dyb3VuZERh
dGEtPmJhY2tncm91bmQtPnJlcGVhdFgoKSk7IH0KKyAgICBGaWxsUmVwZWF0IGJhY2tncm91bmRS
ZXBlYXRZKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RmlsbFJlcGVhdD4obV9iYWNrZ3Jv
dW5kRGF0YS0+YmFja2dyb3VuZC0+cmVwZWF0WSgpKTsgfQorICAgIENvbXBvc2l0ZU9wZXJhdG9y
IGJhY2tncm91bmRDb21wb3NpdGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb21wb3Np
dGVPcGVyYXRvcj4obV9iYWNrZ3JvdW5kRGF0YS0+YmFja2dyb3VuZC0+Y29tcG9zaXRlKCkpOyB9
CisgICAgRmlsbEF0dGFjaG1lbnQgYmFja2dyb3VuZEF0dGFjaG1lbnQoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxGaWxsQXR0YWNobWVudD4obV9iYWNrZ3JvdW5kRGF0YS0+YmFja2dyb3Vu
ZC0+YXR0YWNobWVudCgpKTsgfQorICAgIEZpbGxCb3ggYmFja2dyb3VuZENsaXAoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxGaWxsQm94PihtX2JhY2tncm91bmREYXRhLT5iYWNrZ3JvdW5k
LT5jbGlwKCkpOyB9CisgICAgRmlsbEJveCBiYWNrZ3JvdW5kT3JpZ2luKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8RmlsbEJveD4obV9iYWNrZ3JvdW5kRGF0YS0+YmFja2dyb3VuZC0+b3Jp
Z2luKCkpOyB9CisgICAgY29uc3QgTGVuZ3RoJiBiYWNrZ3JvdW5kWFBvc2l0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9iYWNrZ3JvdW5kRGF0YS0+YmFja2dyb3VuZC0+eFBvc2l0aW9uKCk7IH0KKyAg
ICBjb25zdCBMZW5ndGgmIGJhY2tncm91bmRZUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tncm91bmREYXRhLT5iYWNrZ3JvdW5kLT55UG9zaXRpb24oKTsgfQorICAgIEZpbGxTaXplVHlw
ZSBiYWNrZ3JvdW5kU2l6ZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmREYXRhLT5i
YWNrZ3JvdW5kLT5zaXplVHlwZSgpOyB9CisgICAgY29uc3QgTGVuZ3RoU2l6ZSYgYmFja2dyb3Vu
ZFNpemVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmREYXRhLT5iYWNrZ3JvdW5k
LT5zaXplTGVuZ3RoKCk7IH0KKyAgICBGaWxsTGF5ZXImIGVuc3VyZUJhY2tncm91bmRMYXllcnMo
KSB7IHJldHVybiBtX2JhY2tncm91bmREYXRhLmFjY2VzcygpLmJhY2tncm91bmQuYWNjZXNzKCk7
IH0KICAgICBjb25zdCBGaWxsTGF5ZXImIGJhY2tncm91bmRMYXllcnMoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tncm91bmREYXRhLT5iYWNrZ3JvdW5kOyB9CiAKLSAgICBTdHlsZUltYWdlKiBtYXNr
SW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLT5tYXNrLmltYWdl
KCk7IH0KLSAgICBGaWxsUmVwZWF0IG1hc2tSZXBlYXRYKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8RmlsbFJlcGVhdD4obV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bWFzay5yZXBlYXRYKCkp
OyB9Ci0gICAgRmlsbFJlcGVhdCBtYXNrUmVwZWF0WSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PEZpbGxSZXBlYXQ+KG1fcmFyZU5vbkluaGVyaXRlZERhdGEtPm1hc2sucmVwZWF0WSgpKTsg
fQotICAgIENvbXBvc2l0ZU9wZXJhdG9yIG1hc2tDb21wb3NpdGUoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxDb21wb3NpdGVPcGVyYXRvcj4obV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bWFz
ay5jb21wb3NpdGUoKSk7IH0KLSAgICBGaWxsQm94IG1hc2tDbGlwKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8RmlsbEJveD4obV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bWFzay5jbGlwKCkp
OyB9Ci0gICAgRmlsbEJveCBtYXNrT3JpZ2luKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
RmlsbEJveD4obV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bWFzay5vcmlnaW4oKSk7IH0KLSAgICBj
b25zdCBMZW5ndGgmIG1hc2tYUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JhcmVOb25Jbmhl
cml0ZWREYXRhLT5tYXNrLnhQb3NpdGlvbigpOyB9Ci0gICAgY29uc3QgTGVuZ3RoJiBtYXNrWVBv
c2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bWFzay55UG9z
aXRpb24oKTsgfQotICAgIEZpbGxTaXplVHlwZSBtYXNrU2l6ZVR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLT5tYXNrLnNpemVUeXBlKCk7IH0KLSAgICBjb25zdCBM
ZW5ndGhTaXplJiBtYXNrU2l6ZUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZU5vbkluaGVy
aXRlZERhdGEtPm1hc2suc2l6ZUxlbmd0aCgpOyB9Ci0gICAgRmlsbExheWVyJiBlbnN1cmVNYXNr
TGF5ZXJzKCkgeyByZXR1cm4gbV9yYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS5tYXNrOyB9
CisgICAgU3R5bGVJbWFnZSogbWFza0ltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlTm9uSW5o
ZXJpdGVkRGF0YS0+bWFzay0+aW1hZ2UoKTsgfQorICAgIEZpbGxSZXBlYXQgbWFza1JlcGVhdFgo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGaWxsUmVwZWF0PihtX3JhcmVOb25Jbmhlcml0
ZWREYXRhLT5tYXNrLT5yZXBlYXRYKCkpOyB9CisgICAgRmlsbFJlcGVhdCBtYXNrUmVwZWF0WSgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZpbGxSZXBlYXQ+KG1fcmFyZU5vbkluaGVyaXRl
ZERhdGEtPm1hc2stPnJlcGVhdFkoKSk7IH0KKyAgICBDb21wb3NpdGVPcGVyYXRvciBtYXNrQ29t
cG9zaXRlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29tcG9zaXRlT3BlcmF0b3I+KG1f
cmFyZU5vbkluaGVyaXRlZERhdGEtPm1hc2stPmNvbXBvc2l0ZSgpKTsgfQorICAgIEZpbGxCb3gg
bWFza0NsaXAoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGaWxsQm94PihtX3JhcmVOb25J
bmhlcml0ZWREYXRhLT5tYXNrLT5jbGlwKCkpOyB9CisgICAgRmlsbEJveCBtYXNrT3JpZ2luKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RmlsbEJveD4obV9yYXJlTm9uSW5oZXJpdGVkRGF0
YS0+bWFzay0+b3JpZ2luKCkpOyB9CisgICAgY29uc3QgTGVuZ3RoJiBtYXNrWFBvc2l0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bWFzay0+eFBvc2l0aW9uKCk7
IH0KKyAgICBjb25zdCBMZW5ndGgmIG1hc2tZUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Jh
cmVOb25Jbmhlcml0ZWREYXRhLT5tYXNrLT55UG9zaXRpb24oKTsgfQorICAgIEZpbGxTaXplVHlw
ZSBtYXNrU2l6ZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLT5t
YXNrLT5zaXplVHlwZSgpOyB9CisgICAgY29uc3QgTGVuZ3RoU2l6ZSYgbWFza1NpemVMZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLT5tYXNrLT5zaXplTGVuZ3Ro
KCk7IH0KKyAgICBGaWxsTGF5ZXImIGVuc3VyZU1hc2tMYXllcnMoKSB7IHJldHVybiBtX3JhcmVO
b25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLm1hc2suYWNjZXNzKCk7IH0KICAgICBjb25zdCBGaWxs
TGF5ZXImIG1hc2tMYXllcnMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVOb25Jbmhlcml0ZWREYXRh
LT5tYXNrOyB9CiAgICAgY29uc3QgTmluZVBpZWNlSW1hZ2UmIG1hc2tCb3hJbWFnZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmFyZU5vbkluaGVyaXRlZERhdGEtPm1hc2tCb3hJbWFnZTsgfQogICAgIFN0
eWxlSW1hZ2UqIG1hc2tCb3hJbWFnZVNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZU5vbklu
aGVyaXRlZERhdGEtPm1hc2tCb3hJbWFnZS5pbWFnZSgpOyB9CkBAIC02NDksNyArNjQ5LDcgQEAg
cHVibGljOgogICAgIHZvaWQgYXBwbHlUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBj
b25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94LCBBcHBseVRyYW5zZm9ybU9yaWdpbiA9IEluY2x1
ZGVUcmFuc2Zvcm1PcmlnaW4pIGNvbnN0OwogICAgIHZvaWQgc2V0UGFnZVNjYWxlVHJhbnNmb3Jt
KGZsb2F0KTsKIAotICAgIGJvb2wgaGFzTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZU5vbklu
aGVyaXRlZERhdGEtPm1hc2suaGFzSW1hZ2UoKSB8fCBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLT5t
YXNrQm94SW1hZ2UuaGFzSW1hZ2UoKTsgfQorICAgIGJvb2wgaGFzTWFzaygpIGNvbnN0IHsgcmV0
dXJuIG1fcmFyZU5vbkluaGVyaXRlZERhdGEtPm1hc2stPmhhc0ltYWdlKCkgfHwgbV9yYXJlTm9u
SW5oZXJpdGVkRGF0YS0+bWFza0JveEltYWdlLmhhc0ltYWdlKCk7IH0KIAogICAgIFRleHRDb21i
aW5lIHRleHRDb21iaW5lKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dENvbWJpbmU+
KG1fcmFyZU5vbkluaGVyaXRlZERhdGEtPnRleHRDb21iaW5lKTsgfQogICAgIGJvb2wgaGFzVGV4
dENvbWJpbmUoKSBjb25zdCB7IHJldHVybiB0ZXh0Q29tYmluZSgpICE9IFRleHRDb21iaW5lOjpO
b25lOyB9CkBAIC04NDUsMTAgKzg0NSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEJhY2tn
cm91bmRDb2xvcihjb25zdCBDb2xvciYgdikgeyBTRVRfVkFSKG1fYmFja2dyb3VuZERhdGEsIGNv
bG9yLCB2KTsgfQogCi0gICAgdm9pZCBzZXRCYWNrZ3JvdW5kWFBvc2l0aW9uKExlbmd0aCYmIGxl
bmd0aCkgeyBTRVRfVkFSKG1fYmFja2dyb3VuZERhdGEsIGJhY2tncm91bmQubV94UG9zaXRpb24s
IFdURk1vdmUobGVuZ3RoKSk7IH0KLSAgICB2b2lkIHNldEJhY2tncm91bmRZUG9zaXRpb24oTGVu
Z3RoJiYgbGVuZ3RoKSB7IFNFVF9WQVIobV9iYWNrZ3JvdW5kRGF0YSwgYmFja2dyb3VuZC5tX3lQ
b3NpdGlvbiwgV1RGTW92ZShsZW5ndGgpKTsgfQotICAgIHZvaWQgc2V0QmFja2dyb3VuZFNpemUo
RmlsbFNpemVUeXBlIGIpIHsgU0VUX1ZBUihtX2JhY2tncm91bmREYXRhLCBiYWNrZ3JvdW5kLm1f
c2l6ZVR5cGUsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihiKSk7IH0KLSAgICB2b2lkIHNldEJhY2tn
cm91bmRTaXplTGVuZ3RoKExlbmd0aFNpemUmJiBzaXplKSB7IFNFVF9WQVIobV9iYWNrZ3JvdW5k
RGF0YSwgYmFja2dyb3VuZC5tX3NpemVMZW5ndGgsIFdURk1vdmUoc2l6ZSkpOyB9CisgICAgdm9p
ZCBzZXRCYWNrZ3JvdW5kWFBvc2l0aW9uKExlbmd0aCYmIGxlbmd0aCkgeyBTRVRfTkVTVEVEX1ZB
UihtX2JhY2tncm91bmREYXRhLCBiYWNrZ3JvdW5kLCBtX3hQb3NpdGlvbiwgV1RGTW92ZShsZW5n
dGgpKTsgfQorICAgIHZvaWQgc2V0QmFja2dyb3VuZFlQb3NpdGlvbihMZW5ndGgmJiBsZW5ndGgp
IHsgU0VUX05FU1RFRF9WQVIobV9iYWNrZ3JvdW5kRGF0YSwgYmFja2dyb3VuZCwgbV95UG9zaXRp
b24sIFdURk1vdmUobGVuZ3RoKSk7IH0KKyAgICB2b2lkIHNldEJhY2tncm91bmRTaXplKEZpbGxT
aXplVHlwZSBiKSB7IFNFVF9ORVNURURfVkFSKG1fYmFja2dyb3VuZERhdGEsIGJhY2tncm91bmQs
IG1fc2l6ZVR5cGUsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihiKSk7IH0KKyAgICB2b2lkIHNldEJh
Y2tncm91bmRTaXplTGVuZ3RoKExlbmd0aFNpemUmJiBzaXplKSB7IFNFVF9ORVNURURfVkFSKG1f
YmFja2dyb3VuZERhdGEsIGJhY2tncm91bmQsIG1fc2l6ZUxlbmd0aCwgV1RGTW92ZShzaXplKSk7
IH0KICAgICAKICAgICB2b2lkIHNldEJvcmRlckltYWdlKGNvbnN0IE5pbmVQaWVjZUltYWdlJiBi
KSB7IFNFVF9WQVIobV9zdXJyb3VuZERhdGEsIGJvcmRlci5tX2ltYWdlLCBiKTsgfQogICAgIHZv
aWQgc2V0Qm9yZGVySW1hZ2VTb3VyY2UoUmVmUHRyPFN0eWxlSW1hZ2U+JiYpOwpAQCAtOTY1LDIz
ICs5NjUsMjMgQEAgcHVibGljOgogICAgIHZvaWQgc2V0V29yZFNwYWNpbmcoTGVuZ3RoJiYpOwog
ICAgIHZvaWQgc2V0TGV0dGVyU3BhY2luZyhmbG9hdCk7CiAKLSAgICB2b2lkIGNsZWFyQmFja2dy
b3VuZExheWVycygpIHsgbV9iYWNrZ3JvdW5kRGF0YS5hY2Nlc3MoKS5iYWNrZ3JvdW5kID0gRmls
bExheWVyKEZpbGxMYXllclR5cGU6OkJhY2tncm91bmQpOyB9Ci0gICAgdm9pZCBpbmhlcml0QmFj
a2dyb3VuZExheWVycyhjb25zdCBGaWxsTGF5ZXImIHBhcmVudCkgeyBtX2JhY2tncm91bmREYXRh
LmFjY2VzcygpLmJhY2tncm91bmQgPSBwYXJlbnQ7IH0KKyAgICB2b2lkIGNsZWFyQmFja2dyb3Vu
ZExheWVycygpIHsgbV9iYWNrZ3JvdW5kRGF0YS5hY2Nlc3MoKS5iYWNrZ3JvdW5kID0gRmlsbExh
eWVyOjpjcmVhdGUoRmlsbExheWVyVHlwZTo6QmFja2dyb3VuZCk7IH0KKyAgICB2b2lkIGluaGVy
aXRCYWNrZ3JvdW5kTGF5ZXJzKGNvbnN0IEZpbGxMYXllciYgcGFyZW50KSB7IG1fYmFja2dyb3Vu
ZERhdGEuYWNjZXNzKCkuYmFja2dyb3VuZCA9IEZpbGxMYXllcjo6Y3JlYXRlKHBhcmVudCk7IH0K
IAogICAgIHZvaWQgYWRqdXN0QmFja2dyb3VuZExheWVycygpOwogCi0gICAgdm9pZCBjbGVhck1h
c2tMYXllcnMoKSB7IG1fcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCkubWFzayA9IEZpbGxM
YXllcihGaWxsTGF5ZXJUeXBlOjpNYXNrKTsgfQotICAgIHZvaWQgaW5oZXJpdE1hc2tMYXllcnMo
Y29uc3QgRmlsbExheWVyJiBwYXJlbnQpIHsgbV9yYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3Mo
KS5tYXNrID0gcGFyZW50OyB9CisgICAgdm9pZCBjbGVhck1hc2tMYXllcnMoKSB7IG1fcmFyZU5v
bkluaGVyaXRlZERhdGEuYWNjZXNzKCkubWFzayA9IEZpbGxMYXllcjo6Y3JlYXRlKEZpbGxMYXll
clR5cGU6Ok1hc2spOyB9CisgICAgdm9pZCBpbmhlcml0TWFza0xheWVycyhjb25zdCBGaWxsTGF5
ZXImIHBhcmVudCkgeyBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLm1hc2sgPSBGaWxs
TGF5ZXI6OmNyZWF0ZShwYXJlbnQpOyB9CiAKICAgICB2b2lkIGFkanVzdE1hc2tMYXllcnMoKTsK
IAotICAgIHZvaWQgc2V0TWFza0ltYWdlKFJlZlB0cjxTdHlsZUltYWdlPiYmIHYpIHsgbV9yYXJl
Tm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS5tYXNrLnNldEltYWdlKFdURk1vdmUodikpOyB9Cisg
ICAgdm9pZCBzZXRNYXNrSW1hZ2UoUmVmUHRyPFN0eWxlSW1hZ2U+JiYgdikgeyBtX3JhcmVOb25J
bmhlcml0ZWREYXRhLmFjY2VzcygpLm1hc2suYWNjZXNzKCkuc2V0SW1hZ2UoV1RGTW92ZSh2KSk7
IH0KIAogICAgIHZvaWQgc2V0TWFza0JveEltYWdlKGNvbnN0IE5pbmVQaWVjZUltYWdlJiBiKSB7
IFNFVF9WQVIobV9yYXJlTm9uSW5oZXJpdGVkRGF0YSwgbWFza0JveEltYWdlLCBiKTsgfQogICAg
IHZvaWQgc2V0TWFza0JveEltYWdlU291cmNlKFJlZlB0cjxTdHlsZUltYWdlPiYmIHYpIHsgbV9y
YXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS5tYXNrQm94SW1hZ2Uuc2V0SW1hZ2UoV1RGTW92
ZSh2KSk7IH0KLSAgICB2b2lkIHNldE1hc2tYUG9zaXRpb24oTGVuZ3RoJiYgbGVuZ3RoKSB7IFNF
VF9WQVIobV9yYXJlTm9uSW5oZXJpdGVkRGF0YSwgbWFzay5tX3hQb3NpdGlvbiwgV1RGTW92ZShs
ZW5ndGgpKTsgfQotICAgIHZvaWQgc2V0TWFza1lQb3NpdGlvbihMZW5ndGgmJiBsZW5ndGgpIHsg
U0VUX1ZBUihtX3JhcmVOb25Jbmhlcml0ZWREYXRhLCBtYXNrLm1feVBvc2l0aW9uLCBXVEZNb3Zl
KGxlbmd0aCkpOyB9Ci0gICAgdm9pZCBzZXRNYXNrU2l6ZShMZW5ndGhTaXplIHNpemUpIHsgU0VU
X1ZBUihtX3JhcmVOb25Jbmhlcml0ZWREYXRhLCBtYXNrLm1fc2l6ZUxlbmd0aCwgV1RGTW92ZShz
aXplKSk7IH0KKyAgICB2b2lkIHNldE1hc2tYUG9zaXRpb24oTGVuZ3RoJiYgbGVuZ3RoKSB7IFNF
VF9ORVNURURfVkFSKG1fcmFyZU5vbkluaGVyaXRlZERhdGEsIG1hc2ssIG1feFBvc2l0aW9uLCBX
VEZNb3ZlKGxlbmd0aCkpOyB9CisgICAgdm9pZCBzZXRNYXNrWVBvc2l0aW9uKExlbmd0aCYmIGxl
bmd0aCkgeyBTRVRfTkVTVEVEX1ZBUihtX3JhcmVOb25Jbmhlcml0ZWREYXRhLCBtYXNrLCBtX3lQ
b3NpdGlvbiwgV1RGTW92ZShsZW5ndGgpKTsgfQorICAgIHZvaWQgc2V0TWFza1NpemUoTGVuZ3Ro
U2l6ZSBzaXplKSB7IFNFVF9ORVNURURfVkFSKG1fcmFyZU5vbkluaGVyaXRlZERhdGEsIG1hc2ss
IG1fc2l6ZUxlbmd0aCwgV1RGTW92ZShzaXplKSk7IH0KIAogICAgIHZvaWQgc2V0Qm9yZGVyQ29s
bGFwc2UoQm9yZGVyQ29sbGFwc2UgY29sbGFwc2UpIHsgbV9pbmhlcml0ZWRGbGFncy5ib3JkZXJD
b2xsYXBzZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2xsYXBzZSk7IH0KICAgICB2b2lkIHNl
dEhvcml6b250YWxCb3JkZXJTcGFjaW5nKGZsb2F0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUJhY2tncm91bmREYXRhLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUJhY2tncm91bmREYXRhLmNwcAppbmRleCAwYWZhN2Mw
NWRkY2EyZDVjZWQ3MDU1OWQ5Yjk0MDczZWEwZTljNjNhLi5hN2MyNzUwNjhlNmU0YTQ0ZDRkOGRm
MjgwOTdmZjY3ZWRkZmVhY2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvU3R5bGVCYWNrZ3JvdW5kRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIFN0eWxlQmFja2dyb3VuZERhdGE6OlN0eWxlQmFja2dyb3VuZERh
dGEoKQotICAgIDogYmFja2dyb3VuZChGaWxsTGF5ZXJUeXBlOjpCYWNrZ3JvdW5kKQorICAgIDog
YmFja2dyb3VuZChGaWxsTGF5ZXI6OmNyZWF0ZShGaWxsTGF5ZXJUeXBlOjpCYWNrZ3JvdW5kKSkK
ICAgICAsIGNvbG9yKFJlbmRlclN0eWxlOjppbml0aWFsQmFja2dyb3VuZENvbG9yKCkpCiB7CiB9
CkBAIC02Miw3ICs2Miw3IEBAIGJvb2wgU3R5bGVCYWNrZ3JvdW5kRGF0YTo6aXNFcXVpdmFsZW50
Rm9yUGFpbnRpbmcoY29uc3QgU3R5bGVCYWNrZ3JvdW5kRGF0YSYgb3RoCiAKIHZvaWQgU3R5bGVC
YWNrZ3JvdW5kRGF0YTo6ZHVtcChUZXh0U3RyZWFtJiB0cywgRHVtcFN0eWxlVmFsdWVzIGJlaGF2
aW9yKSBjb25zdAogewotICAgIGlmIChiZWhhdmlvciA9PSBEdW1wU3R5bGVWYWx1ZXM6OkFsbCB8
fCBiYWNrZ3JvdW5kICE9IEZpbGxMYXllcihGaWxsTGF5ZXJUeXBlOjpCYWNrZ3JvdW5kKSkKKyAg
ICBpZiAoYmVoYXZpb3IgPT0gRHVtcFN0eWxlVmFsdWVzOjpBbGwgfHwgKmJhY2tncm91bmQgIT0g
RmlsbExheWVyOjpjcmVhdGUoRmlsbExheWVyVHlwZTo6QmFja2dyb3VuZCkuZ2V0KCkpCiAgICAg
ICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmFja2dyb3VuZC1pbWFnZSIsIGJhY2tncm91bmQpOwogICAg
IGlmIChiZWhhdmlvciA9PSBEdW1wU3R5bGVWYWx1ZXM6OkFsbCB8fCBjb2xvciAhPSBSZW5kZXJT
dHlsZTo6aW5pdGlhbEJhY2tncm91bmRDb2xvcigpKQogICAgICAgICB0cy5kdW1wUHJvcGVydHko
ImJhY2tncm91bmQtY29sb3IiLCBjb2xvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU3R5bGVCYWNrZ3JvdW5kRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEuaAppbmRleCA5NzkzNDMxM2JjNDJhZjVh
NWQzNjAwNDYxOWRlMGNiYWY1YTFiMDJhLi5kZGE0OTJiNTVmNDY5ZGJiNDU2YWQzZTZiYzgzZjc5
OGY2YmE5OWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5
bGVCYWNrZ3JvdW5kRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9T
dHlsZUJhY2tncm91bmREYXRhLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJDb2xvci5o
IgogI2luY2x1ZGUgIkZpbGxMYXllci5oIgogI2luY2x1ZGUgIk91dGxpbmVWYWx1ZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9EYXRhUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNs
dWRlIDx3dGYvUmVmLmg+CiAKQEAgLTQyLDcgKzQzLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBp
c0VxdWl2YWxlbnRGb3JQYWludGluZyhjb25zdCBTdHlsZUJhY2tncm91bmREYXRhJikgY29uc3Q7
CiAKLSAgICBGaWxsTGF5ZXIgYmFja2dyb3VuZDsKKyAgICBEYXRhUmVmPEZpbGxMYXllcj4gYmFj
a2dyb3VuZDsKICAgICBDb2xvciBjb2xvcjsKICAgICBPdXRsaW5lVmFsdWUgb3V0bGluZTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbklu
aGVyaXRlZERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFy
ZU5vbkluaGVyaXRlZERhdGEuY3BwCmluZGV4IGE3NzExYTYzMWY4NjBiZmUzYTlkZjRmYjRjNjY2
NjliYTE3OTY4ODUuLjE1YzNlOTI5MjU5ZTA3NmUyOTYyMzIyM2Y4NzgzNTRmMGQ0MDM1ZDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhl
cml0ZWREYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVS
YXJlTm9uSW5oZXJpdGVkRGF0YS5jcHAKQEAgLTY1LDcgKzY1LDcgQEAgU3R5bGVSYXJlTm9uSW5o
ZXJpdGVkRGF0YTo6U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSgpCiAgICAgLCBzY3JvbGxTbmFw
QXJlYShTdHlsZVNjcm9sbFNuYXBBcmVhOjpjcmVhdGUoKSkKICNlbmRpZgogICAgICwgd2lsbENo
YW5nZShSZW5kZXJTdHlsZTo6aW5pdGlhbFdpbGxDaGFuZ2UoKSkKLSAgICAsIG1hc2soRmlsbExh
eWVyVHlwZTo6TWFzaykKKyAgICAsIG1hc2soRmlsbExheWVyOjpjcmVhdGUoRmlsbExheWVyVHlw
ZTo6TWFzaykpCiAgICAgLCBtYXNrQm94SW1hZ2UoTmluZVBpZWNlSW1hZ2U6OlR5cGU6Ok1hc2sp
CiAgICAgLCBvYmplY3RQb3NpdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbE9iamVjdFBvc2l0aW9u
KCkpCiAgICAgLCBzaGFwZU91dHNpZGUoUmVuZGVyU3R5bGU6OmluaXRpYWxTaGFwZU91dHNpZGUo
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVO
b25Jbmhlcml0ZWREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVS
YXJlTm9uSW5oZXJpdGVkRGF0YS5oCmluZGV4IDEyMjg3NmQwNzljM2E3NmFkOTZkNjNmNmI4OTc5
MTM2MmVlN2U4ZGEuLjgxOGNiNjI3NTVlNTY1ZWJmOWEyYjUwMDc0YmZiYTM4NTFjODcyOTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhl
cml0ZWREYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFy
ZU5vbkluaGVyaXRlZERhdGEuaApAQCAtMTQ0LDcgKzE0NCw3IEBAIHB1YmxpYzoKICAgICBSZWZQ
dHI8QW5pbWF0aW9uTGlzdD4gYW5pbWF0aW9uczsKICAgICBSZWZQdHI8QW5pbWF0aW9uTGlzdD4g
dHJhbnNpdGlvbnM7CiAKLSAgICBGaWxsTGF5ZXIgbWFzazsKKyAgICBEYXRhUmVmPEZpbGxMYXll
cj4gbWFzazsKICAgICBOaW5lUGllY2VJbWFnZSBtYXNrQm94SW1hZ2U7CiAKICAgICBMZW5ndGhT
aXplIHBhZ2VTaXplOwo=
</data>
<flag name="review"
          id="422868"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407586</attachid>
            <date>2020-08-30 21:09:00 -0700</date>
            <delta_ts>2020-08-30 21:51:24 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-215942-20200830210859.patch</filename>
            <type>text/plain</type>
            <size>24755</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MzQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDRiOGM1YWQ2NTU4YjI2
MzE0ZjgzMzg0YjVlOGEwYWRiODU5M2Q0My4uYmY1N2ViMWJjMjk5ZWM5ZTBkY2M2Y2RjNWUwNzQx
Mzc2MjZlNTA2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDIwLTA4LTI4ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgU3R5bGVS
YXJlTm9uSW5oZXJpdGVkRGF0YTo6bWFzayBhbmQgU3R5bGVCYWNrZ3JvdW5kRGF0YTo6YmFja2dy
b3VuZCBEYXRhUmVmcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE1OTQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAg
ICAgQSBzaWduaWZpY2FudCBhbW91bnQgb2YgdGltZSBpbiBNb3Rpb25NYXJrJ3MgTXVsdGlwbHkg
c3VidGVzdCBpcyBzcGVudCB1bmRlcm5lYXRoIHRoZSBjb3B5IGNvbnN0cnVjdG9yCisgICAgICAg
IGBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhYCwgYW5kIGEgc2lnbmlmaWNhbnQgYW1vdW50IG9m
IHRpbWUgdW5kZXJuZWF0aCB0aGlzIGNvcHkgY29uc3RydWN0b3IgaXMgc3BlbnQgY29weWluZwor
ICAgICAgICB0aGUgcmFyZSBub24taW5oZXJpdGVkIGRhdGEncyBtYXNrIChhIGBGaWxsTGF5ZXJg
KS4KKworICAgICAgICBUaGlzIGBGaWxsTGF5ZXJgIGlzIGN1cnJlbnRseSBpbmxpbmUgZGF0YSBp
biBgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YWA7IHRvIHJlZHVjZSB0aGUgY29zdCBvZiBjb3B5
aW5nIHJhcmUKKyAgICAgICAgbm9uLWluaGVyaXRlZCBkYXRhLCB3ZSBjYW4gaW5zdGVhZCBtYWtl
IHRoaXMgYSBgRGF0YVJlZjxGaWxsTGF5ZXI+YCwgc3VjaCB0aGF0IGNvcHlpbmcgcmFyZSBkYXRh
IHdpbGwgb25seSBjb3B5CisgICAgICAgIHRoZSByZWZlcmVuY2UgdG8gdGhlIGBGaWxsTGF5ZXJg
IHJhdGhlciB0aGFuIHRoZSBgRmlsbExheWVyYCBpdHNlbGYuCisKKyAgICAgICAgVXBvbiBtdXRh
dGluZyB0aGUgYEZpbGxMYXllcmAsIHdlIG5vdyB1c2UgYERhdGFSZWY6OmFjY2VzcygpYCB0byBl
bnN1cmUgdGhhdCB0aGVzZSBgRmlsbExheWVyYHMgYXJlIGNvcGllZAorICAgICAgICBiZWZvcmUg
d3JpdGluZy4gU2VlIGJlbG93IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgICAgKiBjc3MvbWFr
ZXByb3AucGw6CisgICAgICAgIChnZW5lcmF0ZUZpbGxMYXllclByb3BlcnR5SW5oZXJpdFZhbHVl
U2V0dGVyKToKKyAgICAgICAgKGdlbmVyYXRlRmlsbExheWVyUHJvcGVydHlWYWx1ZVNldHRlcik6
CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGaWxsTGF5ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxsTGF5ZXI6OkZp
bGxMYXllcik6CisKKyAgICAgICAgRGVlcGx5IGNvcHkgdGhlIGBGaWxsTGF5ZXJgJ3MgbGlua2Vk
IGxpc3Qgb2YgYEZpbGxMYXllcmBzLiBUaGlzIHByZXNlcnZlcyBleGlzdGluZyBiZWhhdmlvciwg
d2hpY2ggY3VycmVudGx5CisgICAgICAgIHVzZXMgYHN0ZDo6dW5pcXVlX3B0cmAgdG8gc3RvcmUg
dGhlIHBvaW50ZXIgdG8gdGhlIG5leHQgYEZpbGxMYXllcmAgKGFuZCB0aGVyZWZvcmUsIHJlcXVp
cmVzIGEgZGVlcCBjb3B5IG9mIHRoZQorICAgICAgICBsaW5rZWQgbGlzdCB3aGVuIGNvcHlpbmcg
YEZpbGxMYXllcmApLgorCisgICAgICAgIEluIGEgZnV0dXJlIHBhdGNoLCB3ZSBjb3VsZCBwcm9i
YWJseSBmdXJ0aGVyIG9wdGltaXplIHRoaXMgYXMgd2VsbCB0byBiZWhhdmUgaW4gYSBjb3B5LW9u
LXdyaXRlIHdheSwgYnkgdHVybmluZworICAgICAgICB0aGUgYFJlZlB0cjxGaWxsTGF5ZXI+IG1f
bmV4dDtgIGludG8gYW4gYE9wdGlvbmFsPERhdGFSZWY8RmlsbExheWVyPj5gIGluc3RlYWQgKGFu
ZCB0aGVuIHVzZSBgYWNjZXNzKClgIHRvIGNvcHkKKyAgICAgICAgdGhlIG5leHQgYEZpbGxMYXll
cmAgcHJpb3IgdG8gd3JpdGluZykuCisKKyAgICAgICAgKFdlYkNvcmU6OkZpbGxMYXllcjo6fkZp
bGxMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpGaWxsTGF5ZXI6Om9wZXJhdG9yPSk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5oOgorCisgICAgICAgIE1ha2UgYEZpbGxM
YXllcmAgcmVmLWNvdW50ZWQsIGFuZCBpbnRyb2R1Y2UgbmV3IGBjcmVhdGVgIG1ldGhvZHMgZm9y
IGNvbnN0cnVjdGluZyBgRmlsbExheWVyYHMuIFVzZSB0aGVzZQorICAgICAgICBtZXRob2RzIGlu
IHNldmVyYWwgcGxhY2VzIHdoZXJlIHdlIGN1cnJlbnRseSBjYWxsIHRoZSBjb25zdHJ1Y3RvcnMg
ZGlyZWN0bHksIHZpYSBgbWFrZVVuaXF1ZWAuCisKKyAgICAgICAgKFdlYkNvcmU6OkZpbGxMYXll
cjo6Y29weSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxsTGF5ZXI6OnNldE5leHQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU3R5bGU6Omhhc0JhY2tncm91bmRJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTdHlsZTo6aGFzRml4ZWRCYWNrZ3JvdW5kSW1hZ2UgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmJhY2tncm91bmRSZXBlYXRYIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kUmVwZWF0WSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6YmFja2dyb3VuZENvbXBvc2l0ZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6YmFja2dyb3VuZEF0dGFjaG1lbnQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmJhY2tncm91bmRDbGlwIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kT3JpZ2luIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kWFBvc2l0aW9uIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kWVBvc2l0aW9uIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kU2l6ZVR5cGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmJhY2tncm91bmRTaXplTGVu
Z3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjplbnN1cmVCYWNrZ3Jv
dW5kTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjptYXNrSW1hZ2UgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6Om1hc2tSZXBlYXRYIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjptYXNrUmVwZWF0WSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6bWFza0NvbXBvc2l0ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6bWFza0NsaXAgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU3R5bGU6Om1hc2tPcmlnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU3R5bGU6Om1hc2tYUG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U3R5bGU6Om1hc2tZUG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5
bGU6Om1hc2tTaXplVHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6
bWFza1NpemVMZW5ndGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmVu
c3VyZU1hc2tMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6Omhhc01hc2sg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNldEJhY2tncm91bmRYUG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNldEJhY2tncm91bmRZUG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNldEJhY2tncm91bmRTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXRCYWNrZ3JvdW5kU2l6ZUxlbmd0
aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6Y2xlYXJCYWNrZ3JvdW5kTGF5ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjppbmhlcml0QmFja2dyb3VuZExheWVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6Y2xlYXJNYXNrTGF5ZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjppbmhlcml0TWFza0xheWVycyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6c2V0TWFza0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclN0eWxlOjpzZXRNYXNrWFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clN0eWxlOjpzZXRNYXNrWVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxl
OjpzZXRNYXNrU2l6ZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQmFja2dyb3Vu
ZERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCYWNrZ3JvdW5kRGF0YTo6U3R5bGVC
YWNrZ3JvdW5kRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJhY2tncm91bmREYXRhOjpk
dW1wIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVCYWNrZ3JvdW5kRGF0
YS5oOgorCisgICAgICAgIFNpbmNlIGBGaWxsTGF5ZXJgIGlzIG5vdyByZWYtY291bnRlZCwgYFN0
eWxlQmFja2dyb3VuZERhdGE6OmJhY2tncm91bmRgIG5lZWRzIHRvIGJlIGEgYERhdGFSZWZgIGFz
IHdlbGwuCisKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVk
RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpT
dHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5
bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oOgorCiAyMDIwLTA4LTMwICBUaW0gSG9ydG9uICA8dGlt
b3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSB1bnVzZWQgZWRpdGFibGUg
aW1hZ2UgY29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9wLnBsIGIv
U291cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9wLnBsCmluZGV4IGY2MTAxZjg4NDcxMDM3MmU5MTgz
YzgwNDA4ZDc4MWJiZjk3NGRhNzMuLjdhZGQ2ZjJiOWRjN2Q1Njg2YzY5YThmZGViMWU2MDE2ZDg1
NTdhMzEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9tYWtlcHJvcC5wbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvbWFrZXByb3AucGwKQEAgLTkyNSw3ICs5MjUsNyBAQCBzdWIgZ2Vu
ZXJhdGVGaWxsTGF5ZXJQcm9wZXJ0eUluaGVyaXRWYWx1ZVNldHRlciB7CiAgICRzZXR0ZXJDb250
ZW50IC49ICRpbmRlbnQgLiAiRmlsbExheWVyKiBwcmV2aW91c0NoaWxkID0gbnVsbHB0cjtcbiI7
CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiZm9yIChhdXRvKiBwYXJlbnQgPSAmYnVp
bGRlclN0YXRlLnBhcmVudFN0eWxlKCkuIiAuIGdldExheWVyc0Z1bmN0aW9uKCRuYW1lKSAuICIo
KTsgcGFyZW50ICYmIHBhcmVudC0+IiAuICR0ZXN0RnVuY3Rpb24gLiAiKCk7IHBhcmVudCA9IHBh
cmVudC0+bmV4dCgpKSB7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBp
ZiAoIWNoaWxkKSB7XG4iOwotICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICAgICAg
cHJldmlvdXNDaGlsZC0+c2V0TmV4dChtYWtlVW5pcXVlPEZpbGxMYXllcj4oIiAuIGdldEZpbGxM
YXllclR5cGUoJG5hbWUpIC4gIikpO1xuIjsKKyAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAu
ICIgICAgICAgIHByZXZpb3VzQ2hpbGQtPnNldE5leHQoRmlsbExheWVyOjpjcmVhdGUoIiAuIGdl
dEZpbGxMYXllclR5cGUoJG5hbWUpIC4gIikpO1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGlu
ZGVudCAuICIgICAgICAgIGNoaWxkID0gcHJldmlvdXNDaGlsZC0+bmV4dCgpO1xuIjsKICAgJHNl
dHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgfVxuIjsKICAgJHNldHRlckNvbnRlbnQgLj0g
JGluZGVudCAuICIgICAgY2hpbGQtPiIgLiAkc2V0dGVyIC4gIihwYXJlbnQtPiIgLiAkZ2V0dGVy
IC4gIigpKTtcbiI7CkBAIC05NTEsNyArOTUxLDcgQEAgc3ViIGdlbmVyYXRlRmlsbExheWVyUHJv
cGVydHlWYWx1ZVNldHRlciB7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIC8v
IFdhbGsgZWFjaCB2YWx1ZSBhbmQgcHV0IGl0IGludG8gYSBsYXllciwgY3JlYXRpbmcgbmV3IGxh
eWVycyBhcyBuZWVkZWQuXG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBm
b3IgKGF1dG8mIGl0ZW0gOiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkge1xuIjsKICAg
JHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgIGlmICghY2hpbGQpIHtcbiI7Ci0g
ICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgICAgICAgICAgcHJldmlvdXNDaGlsZC0+
c2V0TmV4dChtYWtlVW5pcXVlPEZpbGxMYXllcj4oIiAuIGdldEZpbGxMYXllclR5cGUoJG5hbWUp
IC4gIikpO1xuIjsKKyAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgICAgICBw
cmV2aW91c0NoaWxkLT5zZXROZXh0KEZpbGxMYXllcjo6Y3JlYXRlKCIgLiBnZXRGaWxsTGF5ZXJU
eXBlKCRuYW1lKSAuICIpKTtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAg
ICAgICAgICAgY2hpbGQgPSBwcmV2aW91c0NoaWxkLT5uZXh0KCk7XG4iOwogICAkc2V0dGVyQ29u
dGVudCAuPSAkaW5kZW50IC4gIiAgICAgICAgfVxuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGlu
ZGVudCAuICIgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZU1hcCgpLiIgLiBnZXRGaWxsTGF5ZXJN
YXBmdW5jdGlvbigkbmFtZSkgLiAiKCIgLiAkQ1NTUHJvcGVydHlJZCAuICIsICpjaGlsZCwgaXRl
bSk7XG4iOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0ZpbGxM
YXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRmlsbExheWVyLmNwcApp
bmRleCBmZTVjMDEyNmMwMTlmZmU0NjFlNzkyYjNhOTFiNzY5OWIxM2MzMDBmLi4wOTYxOWRhMGJj
YjE1ZTdhYzhiZWVhYmIxZDY4NGM1ODE0ZGUwOTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvRmlsbExheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvRmlsbExheWVyLmNwcApAQCAtMjcsNyArMjcsNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXN0cnVjdCBTYW1lU2l6ZUFzRmlsbExheWVyIHsKK3N0cnVjdCBTYW1lU2l6
ZUFzRmlsbExheWVyIDogUmVmQ291bnRlZDxTYW1lU2l6ZUFzRmlsbExheWVyPiB7CiAgICAgRmls
bExheWVyKiBuZXh0OwogCiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlOwpAQCAtNDMsNiAr
NDMsMTYgQEAgc3RydWN0IFNhbWVTaXplQXNGaWxsTGF5ZXIgewogCiBDT01QSUxFX0FTU0VSVChz
aXplb2YoRmlsbExheWVyKSA9PSBzaXplb2YoU2FtZVNpemVBc0ZpbGxMYXllciksIEZpbGxMYXll
cl9zaG91bGRfc3RheV9zbWFsbCk7CiAKK1JlZjxGaWxsTGF5ZXI+IEZpbGxMYXllcjo6Y3JlYXRl
KEZpbGxMYXllclR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsTGF5
ZXIodHlwZSkpOworfQorCitSZWY8RmlsbExheWVyPiBGaWxsTGF5ZXI6OmNyZWF0ZShjb25zdCBG
aWxsTGF5ZXImIGxheWVyKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxMYXllcihs
YXllcikpOworfQorCiBGaWxsTGF5ZXI6OkZpbGxMYXllcihGaWxsTGF5ZXJUeXBlIHR5cGUpCiAg
ICAgOiBtX2ltYWdlKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxJbWFnZSh0eXBlKSkKICAgICAsIG1f
eFBvc2l0aW9uKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxYUG9zaXRpb24odHlwZSkpCkBAIC03Niw4
ICs4Niw3IEBAIEZpbGxMYXllcjo6RmlsbExheWVyKEZpbGxMYXllclR5cGUgdHlwZSkKIH0KIAog
RmlsbExheWVyOjpGaWxsTGF5ZXIoY29uc3QgRmlsbExheWVyJiBvKQotICAgIDogbV9uZXh0KG8u
bV9uZXh0ID8gbWFrZVVuaXF1ZTxGaWxsTGF5ZXI+KCpvLm1fbmV4dCkgOiBudWxscHRyKQotICAg
ICwgbV9pbWFnZShvLm1faW1hZ2UpCisgICAgOiBtX2ltYWdlKG8ubV9pbWFnZSkKICAgICAsIG1f
eFBvc2l0aW9uKG8ubV94UG9zaXRpb24pCiAgICAgLCBtX3lQb3NpdGlvbihvLm1feVBvc2l0aW9u
KQogICAgICwgbV9zaXplTGVuZ3RoKG8ubV9zaXplTGVuZ3RoKQpAQCAtMTA3LDE4ICsxMTYsMjIg
QEAgRmlsbExheWVyOjpGaWxsTGF5ZXIoY29uc3QgRmlsbExheWVyJiBvKQogICAgICwgbV9tYXNr
U291cmNlVHlwZVNldChvLm1fbWFza1NvdXJjZVR5cGVTZXQpCiAgICAgLCBtX3R5cGUoby5tX3R5
cGUpCiB7CisgICAgaWYgKG8ubV9uZXh0KQorICAgICAgICBtX25leHQgPSBjcmVhdGUoKm8ubV9u
ZXh0KTsKIH0KIAogRmlsbExheWVyOjp+RmlsbExheWVyKCkKIHsKICAgICAvLyBEZWxldGUgdGhl
IGxheWVycyBpbiBhIGxvb3AgcmF0aGVyIHRoYW4gYWxsb3dpbmcgcmVjdXJzaXZlIGNhbGxzIHRv
IHRoZSBkZXN0cnVjdG9ycy4KLSAgICBmb3IgKHN0ZDo6dW5pcXVlX3B0cjxGaWxsTGF5ZXI+IG5l
eHQgPSBXVEZNb3ZlKG1fbmV4dCk7IG5leHQ7IG5leHQgPSBXVEZNb3ZlKG5leHQtPm1fbmV4dCkp
IHsgfQorICAgIGZvciAoYXV0byBuZXh0ID0gV1RGTW92ZShtX25leHQpOyBuZXh0OyBuZXh0ID0g
V1RGTW92ZShuZXh0LT5tX25leHQpKSB7IH0KIH0KIAogRmlsbExheWVyJiBGaWxsTGF5ZXI6Om9w
ZXJhdG9yPShjb25zdCBGaWxsTGF5ZXImIG8pCiB7Ci0gICAgbV9uZXh0ID0gby5tX25leHQgPyBt
YWtlVW5pcXVlPEZpbGxMYXllcj4oKm8ubV9uZXh0KSA6IG51bGxwdHI7Ci0KKyAgICBpZiAoby5t
X25leHQpCisgICAgICAgIG1fbmV4dCA9IGNyZWF0ZSgqby5tX25leHQpOworICAgIGVsc2UKKyAg
ICAgICAgbV9uZXh0ID0gbnVsbHB0cjsKICAgICBtX2ltYWdlID0gby5tX2ltYWdlOwogICAgIG1f
eFBvc2l0aW9uID0gby5tX3hQb3NpdGlvbjsKICAgICBtX3lQb3NpdGlvbiA9IG8ubV95UG9zaXRp
b247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRmlsbExheWVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRmlsbExheWVyLmgKaW5kZXggNDMx
NzQyYmViYzJhNWJhOTdiZjZkYThhZmM1MDM4NDdjNTVhNzc0Ni4uOTdjZDgzM2ZjOWNiM2NjMDc5
N2MyNmU3N2NiOGJkN2ZiNzg1MGU0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL0ZpbGxMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9GaWxsTGF5ZXIuaApAQCAtNjAsMTAgKzYwLDE0IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgRmlsbFNpemUmIGEsIGNvbnN0IEZpbGxTaXplJiBiKQogICAgIHJldHVybiAhKGEgPT0g
Yik7CiB9CiAKLWNsYXNzIEZpbGxMYXllciB7CitjbGFzcyBGaWxsTGF5ZXIgOiBwdWJsaWMgUmVm
Q291bnRlZDxGaWxsTGF5ZXI+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKLSAgICBleHBsaWNpdCBGaWxsTGF5ZXIoRmlsbExheWVyVHlwZSk7CisgICAgc3RhdGljIFJl
ZjxGaWxsTGF5ZXI+IGNyZWF0ZShGaWxsTGF5ZXJUeXBlKTsKKyAgICBzdGF0aWMgUmVmPEZpbGxM
YXllcj4gY3JlYXRlKGNvbnN0IEZpbGxMYXllciYpOworCisgICAgUmVmPEZpbGxMYXllcj4gY29w
eSgpIGNvbnN0IHsgcmV0dXJuIGNyZWF0ZSgqdGhpcyk7IH0KKwogICAgIH5GaWxsTGF5ZXIoKTsK
IAogICAgIFN0eWxlSW1hZ2UqIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsg
fQpAQCAtMTM1LDEwICsxMzksOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhclNpemUoKSB7IG1f
c2l6ZVR5cGUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRmlsbFNpemVUeXBlOjpOb25lKTsgfQog
ICAgIHZvaWQgY2xlYXJNYXNrU291cmNlVHlwZSgpIHsgbV9tYXNrU291cmNlVHlwZVNldCA9IGZh
bHNlOyB9CiAKLSAgICB2b2lkIHNldE5leHQoc3RkOjp1bmlxdWVfcHRyPEZpbGxMYXllcj4gbmV4
dCkgeyBtX25leHQgPSBXVEZNb3ZlKG5leHQpOyB9CisgICAgdm9pZCBzZXROZXh0KFJlZlB0cjxG
aWxsTGF5ZXI+JiYgbmV4dCkgeyBtX25leHQgPSBXVEZNb3ZlKG5leHQpOyB9CiAKICAgICBGaWxs
TGF5ZXImIG9wZXJhdG9yPShjb25zdCBGaWxsTGF5ZXImKTsKLSAgICBGaWxsTGF5ZXIoY29uc3Qg
RmlsbExheWVyJik7CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRmlsbExheWVyJikgY29u
c3Q7CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZpbGxMYXllciYgb3RoZXIpIGNvbnN0IHsg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CkBAIC0xNzQsMTEgKzE3NywxNCBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJTdHlsZTsKIAorICAgIGV4cGxpY2l0
IEZpbGxMYXllcihGaWxsTGF5ZXJUeXBlKTsKKyAgICBGaWxsTGF5ZXIoY29uc3QgRmlsbExheWVy
Jik7CisKICAgICB2b2lkIGNvbXB1dGVDbGlwTWF4KCkgY29uc3Q7CiAKICAgICBib29sIGhhc0lt
YWdlSW5BbnlMYXllcigpIGNvbnN0OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEZpbGxMYXllcj4g
bV9uZXh0OworICAgIFJlZlB0cjxGaWxsTGF5ZXI+IG1fbmV4dDsKIAogICAgIFJlZlB0cjxTdHls
ZUltYWdlPiBtX2ltYWdlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5oCmluZGV4IDQxYTNjYTgyMDYwOGUzZDI1ZmI0ZDkxOTVlNzNkNzJmMmI0M2M0MGIu
LjY3ZTIzNjljNzA4ZjkyYWE0NGZhMmE4MmEyZjI3Yzk3MDA3MjBkNzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCkBAIC0yMDUsOCArMjA1LDggQEAg
cHVibGljOgogICAgIGJvb2wgaGFzTWFyZ2luQmVmb3JlUXVpcmsoKSBjb25zdCB7IHJldHVybiBt
YXJnaW5CZWZvcmUoKS5oYXNRdWlyaygpOyB9CiAgICAgYm9vbCBoYXNNYXJnaW5BZnRlclF1aXJr
KCkgY29uc3QgeyByZXR1cm4gbWFyZ2luQWZ0ZXIoKS5oYXNRdWlyaygpOyB9CiAKLSAgICBib29s
IGhhc0JhY2tncm91bmRJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZERhdGEtPmJh
Y2tncm91bmQuaGFzSW1hZ2UoKTsgfQotICAgIGJvb2wgaGFzRml4ZWRCYWNrZ3JvdW5kSW1hZ2Uo
KSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmREYXRhLT5iYWNrZ3JvdW5kLmhhc0ZpeGVkSW1h
Z2UoKTsgfQorICAgIGJvb2wgaGFzQmFja2dyb3VuZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9i
YWNrZ3JvdW5kRGF0YS0+YmFja2dyb3VuZC0+aGFzSW1hZ2UoKTsgfQorICAgIGJvb2wgaGFzRml4
ZWRCYWNrZ3JvdW5kSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmREYXRhLT5iYWNr
Z3JvdW5kLT5oYXNGaXhlZEltYWdlKCk7IH0KIAogICAgIGJvb2wgaGFzRW50aXJlbHlGaXhlZEJh
Y2tncm91bmQoKSBjb25zdDsKIApAQCAtNDA1LDMwICs0MDUsMzAgQEAgcHVibGljOgogICAgIGJv
b2wgYnJlYWtPbmx5QWZ0ZXJXaGl0ZVNwYWNlKCkgY29uc3Q7CiAgICAgYm9vbCBicmVha1dvcmRz
KCkgY29uc3Q7CiAKLSAgICBGaWxsUmVwZWF0IGJhY2tncm91bmRSZXBlYXRYKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RmlsbFJlcGVhdD4obV9iYWNrZ3JvdW5kRGF0YS0+YmFja2dyb3Vu
ZC5yZXBlYXRYKCkpOyB9Ci0gICAgRmlsbFJlcGVhdCBiYWNrZ3JvdW5kUmVwZWF0WSgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZpbGxSZXBlYXQ+KG1fYmFja2dyb3VuZERhdGEtPmJhY2tn
cm91bmQucmVwZWF0WSgpKTsgfQotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGJhY2tncm91bmRDb21w
b3NpdGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb21wb3NpdGVPcGVyYXRvcj4obV9i
YWNrZ3JvdW5kRGF0YS0+YmFja2dyb3VuZC5jb21wb3NpdGUoKSk7IH0KLSAgICBGaWxsQXR0YWNo
bWVudCBiYWNrZ3JvdW5kQXR0YWNobWVudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZp
bGxBdHRhY2htZW50PihtX2JhY2tncm91bmREYXRhLT5iYWNrZ3JvdW5kLmF0dGFjaG1lbnQoKSk7
IH0KLSAgICBGaWxsQm94IGJhY2tncm91bmRDbGlwKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8RmlsbEJveD4obV9iYWNrZ3JvdW5kRGF0YS0+YmFja2dyb3VuZC5jbGlwKCkpOyB9Ci0gICAg
RmlsbEJveCBiYWNrZ3JvdW5kT3JpZ2luKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rmls
bEJveD4obV9iYWNrZ3JvdW5kRGF0YS0+YmFja2dyb3VuZC5vcmlnaW4oKSk7IH0KLSAgICBjb25z
dCBMZW5ndGgmIGJhY2tncm91bmRYUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91
bmREYXRhLT5iYWNrZ3JvdW5kLnhQb3NpdGlvbigpOyB9Ci0gICAgY29uc3QgTGVuZ3RoJiBiYWNr
Z3JvdW5kWVBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kRGF0YS0+YmFja2dy
b3VuZC55UG9zaXRpb24oKTsgfQotICAgIEZpbGxTaXplVHlwZSBiYWNrZ3JvdW5kU2l6ZVR5cGUo
KSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmREYXRhLT5iYWNrZ3JvdW5kLnNpemVUeXBlKCk7
IH0KLSAgICBjb25zdCBMZW5ndGhTaXplJiBiYWNrZ3JvdW5kU2l6ZUxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2dyb3VuZERhdGEtPmJhY2tncm91bmQuc2l6ZUxlbmd0aCgpOyB9Ci0gICAg
RmlsbExheWVyJiBlbnN1cmVCYWNrZ3JvdW5kTGF5ZXJzKCkgeyByZXR1cm4gbV9iYWNrZ3JvdW5k
RGF0YS5hY2Nlc3MoKS5iYWNrZ3JvdW5kOyB9CisgICAgRmlsbFJlcGVhdCBiYWNrZ3JvdW5kUmVw
ZWF0WCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZpbGxSZXBlYXQ+KG1fYmFja2dyb3Vu
ZERhdGEtPmJhY2tncm91bmQtPnJlcGVhdFgoKSk7IH0KKyAgICBGaWxsUmVwZWF0IGJhY2tncm91
bmRSZXBlYXRZKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RmlsbFJlcGVhdD4obV9iYWNr
Z3JvdW5kRGF0YS0+YmFja2dyb3VuZC0+cmVwZWF0WSgpKTsgfQorICAgIENvbXBvc2l0ZU9wZXJh
dG9yIGJhY2tncm91bmRDb21wb3NpdGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb21w
b3NpdGVPcGVyYXRvcj4obV9iYWNrZ3JvdW5kRGF0YS0+YmFja2dyb3VuZC0+Y29tcG9zaXRlKCkp
OyB9CisgICAgRmlsbEF0dGFjaG1lbnQgYmFja2dyb3VuZEF0dGFjaG1lbnQoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxGaWxsQXR0YWNobWVudD4obV9iYWNrZ3JvdW5kRGF0YS0+YmFja2dy
b3VuZC0+YXR0YWNobWVudCgpKTsgfQorICAgIEZpbGxCb3ggYmFja2dyb3VuZENsaXAoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxGaWxsQm94PihtX2JhY2tncm91bmREYXRhLT5iYWNrZ3Jv
dW5kLT5jbGlwKCkpOyB9CisgICAgRmlsbEJveCBiYWNrZ3JvdW5kT3JpZ2luKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RmlsbEJveD4obV9iYWNrZ3JvdW5kRGF0YS0+YmFja2dyb3VuZC0+
b3JpZ2luKCkpOyB9CisgICAgY29uc3QgTGVuZ3RoJiBiYWNrZ3JvdW5kWFBvc2l0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kRGF0YS0+YmFja2dyb3VuZC0+eFBvc2l0aW9uKCk7IH0K
KyAgICBjb25zdCBMZW5ndGgmIGJhY2tncm91bmRZUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBt
X2JhY2tncm91bmREYXRhLT5iYWNrZ3JvdW5kLT55UG9zaXRpb24oKTsgfQorICAgIEZpbGxTaXpl
VHlwZSBiYWNrZ3JvdW5kU2l6ZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmREYXRh
LT5iYWNrZ3JvdW5kLT5zaXplVHlwZSgpOyB9CisgICAgY29uc3QgTGVuZ3RoU2l6ZSYgYmFja2dy
b3VuZFNpemVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmREYXRhLT5iYWNrZ3Jv
dW5kLT5zaXplTGVuZ3RoKCk7IH0KKyAgICBGaWxsTGF5ZXImIGVuc3VyZUJhY2tncm91bmRMYXll
cnMoKSB7IHJldHVybiBtX2JhY2tncm91bmREYXRhLmFjY2VzcygpLmJhY2tncm91bmQuYWNjZXNz
KCk7IH0KICAgICBjb25zdCBGaWxsTGF5ZXImIGJhY2tncm91bmRMYXllcnMoKSBjb25zdCB7IHJl
dHVybiBtX2JhY2tncm91bmREYXRhLT5iYWNrZ3JvdW5kOyB9CiAKLSAgICBTdHlsZUltYWdlKiBt
YXNrSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLT5tYXNrLmlt
YWdlKCk7IH0KLSAgICBGaWxsUmVwZWF0IG1hc2tSZXBlYXRYKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8RmlsbFJlcGVhdD4obV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bWFzay5yZXBlYXRY
KCkpOyB9Ci0gICAgRmlsbFJlcGVhdCBtYXNrUmVwZWF0WSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PEZpbGxSZXBlYXQ+KG1fcmFyZU5vbkluaGVyaXRlZERhdGEtPm1hc2sucmVwZWF0WSgp
KTsgfQotICAgIENvbXBvc2l0ZU9wZXJhdG9yIG1hc2tDb21wb3NpdGUoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxDb21wb3NpdGVPcGVyYXRvcj4obV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+
bWFzay5jb21wb3NpdGUoKSk7IH0KLSAgICBGaWxsQm94IG1hc2tDbGlwKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8RmlsbEJveD4obV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bWFzay5jbGlw
KCkpOyB9Ci0gICAgRmlsbEJveCBtYXNrT3JpZ2luKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8RmlsbEJveD4obV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bWFzay5vcmlnaW4oKSk7IH0KLSAg
ICBjb25zdCBMZW5ndGgmIG1hc2tYUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JhcmVOb25J
bmhlcml0ZWREYXRhLT5tYXNrLnhQb3NpdGlvbigpOyB9Ci0gICAgY29uc3QgTGVuZ3RoJiBtYXNr
WVBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bWFzay55
UG9zaXRpb24oKTsgfQotICAgIEZpbGxTaXplVHlwZSBtYXNrU2l6ZVR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLT5tYXNrLnNpemVUeXBlKCk7IH0KLSAgICBjb25z
dCBMZW5ndGhTaXplJiBtYXNrU2l6ZUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZU5vbklu
aGVyaXRlZERhdGEtPm1hc2suc2l6ZUxlbmd0aCgpOyB9Ci0gICAgRmlsbExheWVyJiBlbnN1cmVN
YXNrTGF5ZXJzKCkgeyByZXR1cm4gbV9yYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS5tYXNr
OyB9CisgICAgU3R5bGVJbWFnZSogbWFza0ltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlTm9u
SW5oZXJpdGVkRGF0YS0+bWFzay0+aW1hZ2UoKTsgfQorICAgIEZpbGxSZXBlYXQgbWFza1JlcGVh
dFgoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGaWxsUmVwZWF0PihtX3JhcmVOb25Jbmhl
cml0ZWREYXRhLT5tYXNrLT5yZXBlYXRYKCkpOyB9CisgICAgRmlsbFJlcGVhdCBtYXNrUmVwZWF0
WSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZpbGxSZXBlYXQ+KG1fcmFyZU5vbkluaGVy
aXRlZERhdGEtPm1hc2stPnJlcGVhdFkoKSk7IH0KKyAgICBDb21wb3NpdGVPcGVyYXRvciBtYXNr
Q29tcG9zaXRlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29tcG9zaXRlT3BlcmF0b3I+
KG1fcmFyZU5vbkluaGVyaXRlZERhdGEtPm1hc2stPmNvbXBvc2l0ZSgpKTsgfQorICAgIEZpbGxC
b3ggbWFza0NsaXAoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGaWxsQm94PihtX3JhcmVO
b25Jbmhlcml0ZWREYXRhLT5tYXNrLT5jbGlwKCkpOyB9CisgICAgRmlsbEJveCBtYXNrT3JpZ2lu
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RmlsbEJveD4obV9yYXJlTm9uSW5oZXJpdGVk
RGF0YS0+bWFzay0+b3JpZ2luKCkpOyB9CisgICAgY29uc3QgTGVuZ3RoJiBtYXNrWFBvc2l0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bWFzay0+eFBvc2l0aW9u
KCk7IH0KKyAgICBjb25zdCBMZW5ndGgmIG1hc2tZUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBt
X3JhcmVOb25Jbmhlcml0ZWREYXRhLT5tYXNrLT55UG9zaXRpb24oKTsgfQorICAgIEZpbGxTaXpl
VHlwZSBtYXNrU2l6ZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX3JhcmVOb25Jbmhlcml0ZWREYXRh
LT5tYXNrLT5zaXplVHlwZSgpOyB9CisgICAgY29uc3QgTGVuZ3RoU2l6ZSYgbWFza1NpemVMZW5n
dGgoKSBjb25zdCB7IHJldHVybiBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLT5tYXNrLT5zaXplTGVu
Z3RoKCk7IH0KKyAgICBGaWxsTGF5ZXImIGVuc3VyZU1hc2tMYXllcnMoKSB7IHJldHVybiBtX3Jh
cmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLm1hc2suYWNjZXNzKCk7IH0KICAgICBjb25zdCBG
aWxsTGF5ZXImIG1hc2tMYXllcnMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVOb25Jbmhlcml0ZWRE
YXRhLT5tYXNrOyB9CiAgICAgY29uc3QgTmluZVBpZWNlSW1hZ2UmIG1hc2tCb3hJbWFnZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmFyZU5vbkluaGVyaXRlZERhdGEtPm1hc2tCb3hJbWFnZTsgfQogICAg
IFN0eWxlSW1hZ2UqIG1hc2tCb3hJbWFnZVNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZU5v
bkluaGVyaXRlZERhdGEtPm1hc2tCb3hJbWFnZS5pbWFnZSgpOyB9CkBAIC02NDksNyArNjQ5LDcg
QEAgcHVibGljOgogICAgIHZvaWQgYXBwbHlUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgm
LCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94LCBBcHBseVRyYW5zZm9ybU9yaWdpbiA9IElu
Y2x1ZGVUcmFuc2Zvcm1PcmlnaW4pIGNvbnN0OwogICAgIHZvaWQgc2V0UGFnZVNjYWxlVHJhbnNm
b3JtKGZsb2F0KTsKIAotICAgIGJvb2wgaGFzTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZU5v
bkluaGVyaXRlZERhdGEtPm1hc2suaGFzSW1hZ2UoKSB8fCBtX3JhcmVOb25Jbmhlcml0ZWREYXRh
LT5tYXNrQm94SW1hZ2UuaGFzSW1hZ2UoKTsgfQorICAgIGJvb2wgaGFzTWFzaygpIGNvbnN0IHsg
cmV0dXJuIG1fcmFyZU5vbkluaGVyaXRlZERhdGEtPm1hc2stPmhhc0ltYWdlKCkgfHwgbV9yYXJl
Tm9uSW5oZXJpdGVkRGF0YS0+bWFza0JveEltYWdlLmhhc0ltYWdlKCk7IH0KIAogICAgIFRleHRD
b21iaW5lIHRleHRDb21iaW5lKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dENvbWJp
bmU+KG1fcmFyZU5vbkluaGVyaXRlZERhdGEtPnRleHRDb21iaW5lKTsgfQogICAgIGJvb2wgaGFz
VGV4dENvbWJpbmUoKSBjb25zdCB7IHJldHVybiB0ZXh0Q29tYmluZSgpICE9IFRleHRDb21iaW5l
OjpOb25lOyB9CkBAIC04NDUsMTAgKzg0NSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEJh
Y2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgdikgeyBTRVRfVkFSKG1fYmFja2dyb3VuZERhdGEs
IGNvbG9yLCB2KTsgfQogCi0gICAgdm9pZCBzZXRCYWNrZ3JvdW5kWFBvc2l0aW9uKExlbmd0aCYm
IGxlbmd0aCkgeyBTRVRfVkFSKG1fYmFja2dyb3VuZERhdGEsIGJhY2tncm91bmQubV94UG9zaXRp
b24sIFdURk1vdmUobGVuZ3RoKSk7IH0KLSAgICB2b2lkIHNldEJhY2tncm91bmRZUG9zaXRpb24o
TGVuZ3RoJiYgbGVuZ3RoKSB7IFNFVF9WQVIobV9iYWNrZ3JvdW5kRGF0YSwgYmFja2dyb3VuZC5t
X3lQb3NpdGlvbiwgV1RGTW92ZShsZW5ndGgpKTsgfQotICAgIHZvaWQgc2V0QmFja2dyb3VuZFNp
emUoRmlsbFNpemVUeXBlIGIpIHsgU0VUX1ZBUihtX2JhY2tncm91bmREYXRhLCBiYWNrZ3JvdW5k
Lm1fc2l6ZVR5cGUsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihiKSk7IH0KLSAgICB2b2lkIHNldEJh
Y2tncm91bmRTaXplTGVuZ3RoKExlbmd0aFNpemUmJiBzaXplKSB7IFNFVF9WQVIobV9iYWNrZ3Jv
dW5kRGF0YSwgYmFja2dyb3VuZC5tX3NpemVMZW5ndGgsIFdURk1vdmUoc2l6ZSkpOyB9CisgICAg
dm9pZCBzZXRCYWNrZ3JvdW5kWFBvc2l0aW9uKExlbmd0aCYmIGxlbmd0aCkgeyBTRVRfTkVTVEVE
X1ZBUihtX2JhY2tncm91bmREYXRhLCBiYWNrZ3JvdW5kLCBtX3hQb3NpdGlvbiwgV1RGTW92ZShs
ZW5ndGgpKTsgfQorICAgIHZvaWQgc2V0QmFja2dyb3VuZFlQb3NpdGlvbihMZW5ndGgmJiBsZW5n
dGgpIHsgU0VUX05FU1RFRF9WQVIobV9iYWNrZ3JvdW5kRGF0YSwgYmFja2dyb3VuZCwgbV95UG9z
aXRpb24sIFdURk1vdmUobGVuZ3RoKSk7IH0KKyAgICB2b2lkIHNldEJhY2tncm91bmRTaXplKEZp
bGxTaXplVHlwZSBiKSB7IFNFVF9ORVNURURfVkFSKG1fYmFja2dyb3VuZERhdGEsIGJhY2tncm91
bmQsIG1fc2l6ZVR5cGUsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihiKSk7IH0KKyAgICB2b2lkIHNl
dEJhY2tncm91bmRTaXplTGVuZ3RoKExlbmd0aFNpemUmJiBzaXplKSB7IFNFVF9ORVNURURfVkFS
KG1fYmFja2dyb3VuZERhdGEsIGJhY2tncm91bmQsIG1fc2l6ZUxlbmd0aCwgV1RGTW92ZShzaXpl
KSk7IH0KICAgICAKICAgICB2b2lkIHNldEJvcmRlckltYWdlKGNvbnN0IE5pbmVQaWVjZUltYWdl
JiBiKSB7IFNFVF9WQVIobV9zdXJyb3VuZERhdGEsIGJvcmRlci5tX2ltYWdlLCBiKTsgfQogICAg
IHZvaWQgc2V0Qm9yZGVySW1hZ2VTb3VyY2UoUmVmUHRyPFN0eWxlSW1hZ2U+JiYpOwpAQCAtOTY1
LDIzICs5NjUsMjMgQEAgcHVibGljOgogICAgIHZvaWQgc2V0V29yZFNwYWNpbmcoTGVuZ3RoJiYp
OwogICAgIHZvaWQgc2V0TGV0dGVyU3BhY2luZyhmbG9hdCk7CiAKLSAgICB2b2lkIGNsZWFyQmFj
a2dyb3VuZExheWVycygpIHsgbV9iYWNrZ3JvdW5kRGF0YS5hY2Nlc3MoKS5iYWNrZ3JvdW5kID0g
RmlsbExheWVyKEZpbGxMYXllclR5cGU6OkJhY2tncm91bmQpOyB9Ci0gICAgdm9pZCBpbmhlcml0
QmFja2dyb3VuZExheWVycyhjb25zdCBGaWxsTGF5ZXImIHBhcmVudCkgeyBtX2JhY2tncm91bmRE
YXRhLmFjY2VzcygpLmJhY2tncm91bmQgPSBwYXJlbnQ7IH0KKyAgICB2b2lkIGNsZWFyQmFja2dy
b3VuZExheWVycygpIHsgbV9iYWNrZ3JvdW5kRGF0YS5hY2Nlc3MoKS5iYWNrZ3JvdW5kID0gRmls
bExheWVyOjpjcmVhdGUoRmlsbExheWVyVHlwZTo6QmFja2dyb3VuZCk7IH0KKyAgICB2b2lkIGlu
aGVyaXRCYWNrZ3JvdW5kTGF5ZXJzKGNvbnN0IEZpbGxMYXllciYgcGFyZW50KSB7IG1fYmFja2dy
b3VuZERhdGEuYWNjZXNzKCkuYmFja2dyb3VuZCA9IEZpbGxMYXllcjo6Y3JlYXRlKHBhcmVudCk7
IH0KIAogICAgIHZvaWQgYWRqdXN0QmFja2dyb3VuZExheWVycygpOwogCi0gICAgdm9pZCBjbGVh
ck1hc2tMYXllcnMoKSB7IG1fcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCkubWFzayA9IEZp
bGxMYXllcihGaWxsTGF5ZXJUeXBlOjpNYXNrKTsgfQotICAgIHZvaWQgaW5oZXJpdE1hc2tMYXll
cnMoY29uc3QgRmlsbExheWVyJiBwYXJlbnQpIHsgbV9yYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nl
c3MoKS5tYXNrID0gcGFyZW50OyB9CisgICAgdm9pZCBjbGVhck1hc2tMYXllcnMoKSB7IG1fcmFy
ZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCkubWFzayA9IEZpbGxMYXllcjo6Y3JlYXRlKEZpbGxM
YXllclR5cGU6Ok1hc2spOyB9CisgICAgdm9pZCBpbmhlcml0TWFza0xheWVycyhjb25zdCBGaWxs
TGF5ZXImIHBhcmVudCkgeyBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLm1hc2sgPSBG
aWxsTGF5ZXI6OmNyZWF0ZShwYXJlbnQpOyB9CiAKICAgICB2b2lkIGFkanVzdE1hc2tMYXllcnMo
KTsKIAotICAgIHZvaWQgc2V0TWFza0ltYWdlKFJlZlB0cjxTdHlsZUltYWdlPiYmIHYpIHsgbV9y
YXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS5tYXNrLnNldEltYWdlKFdURk1vdmUodikpOyB9
CisgICAgdm9pZCBzZXRNYXNrSW1hZ2UoUmVmUHRyPFN0eWxlSW1hZ2U+JiYgdikgeyBtX3JhcmVO
b25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLm1hc2suYWNjZXNzKCkuc2V0SW1hZ2UoV1RGTW92ZSh2
KSk7IH0KIAogICAgIHZvaWQgc2V0TWFza0JveEltYWdlKGNvbnN0IE5pbmVQaWVjZUltYWdlJiBi
KSB7IFNFVF9WQVIobV9yYXJlTm9uSW5oZXJpdGVkRGF0YSwgbWFza0JveEltYWdlLCBiKTsgfQog
ICAgIHZvaWQgc2V0TWFza0JveEltYWdlU291cmNlKFJlZlB0cjxTdHlsZUltYWdlPiYmIHYpIHsg
bV9yYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS5tYXNrQm94SW1hZ2Uuc2V0SW1hZ2UoV1RG
TW92ZSh2KSk7IH0KLSAgICB2b2lkIHNldE1hc2tYUG9zaXRpb24oTGVuZ3RoJiYgbGVuZ3RoKSB7
IFNFVF9WQVIobV9yYXJlTm9uSW5oZXJpdGVkRGF0YSwgbWFzay5tX3hQb3NpdGlvbiwgV1RGTW92
ZShsZW5ndGgpKTsgfQotICAgIHZvaWQgc2V0TWFza1lQb3NpdGlvbihMZW5ndGgmJiBsZW5ndGgp
IHsgU0VUX1ZBUihtX3JhcmVOb25Jbmhlcml0ZWREYXRhLCBtYXNrLm1feVBvc2l0aW9uLCBXVEZN
b3ZlKGxlbmd0aCkpOyB9Ci0gICAgdm9pZCBzZXRNYXNrU2l6ZShMZW5ndGhTaXplIHNpemUpIHsg
U0VUX1ZBUihtX3JhcmVOb25Jbmhlcml0ZWREYXRhLCBtYXNrLm1fc2l6ZUxlbmd0aCwgV1RGTW92
ZShzaXplKSk7IH0KKyAgICB2b2lkIHNldE1hc2tYUG9zaXRpb24oTGVuZ3RoJiYgbGVuZ3RoKSB7
IFNFVF9ORVNURURfVkFSKG1fcmFyZU5vbkluaGVyaXRlZERhdGEsIG1hc2ssIG1feFBvc2l0aW9u
LCBXVEZNb3ZlKGxlbmd0aCkpOyB9CisgICAgdm9pZCBzZXRNYXNrWVBvc2l0aW9uKExlbmd0aCYm
IGxlbmd0aCkgeyBTRVRfTkVTVEVEX1ZBUihtX3JhcmVOb25Jbmhlcml0ZWREYXRhLCBtYXNrLCBt
X3lQb3NpdGlvbiwgV1RGTW92ZShsZW5ndGgpKTsgfQorICAgIHZvaWQgc2V0TWFza1NpemUoTGVu
Z3RoU2l6ZSBzaXplKSB7IFNFVF9ORVNURURfVkFSKG1fcmFyZU5vbkluaGVyaXRlZERhdGEsIG1h
c2ssIG1fc2l6ZUxlbmd0aCwgV1RGTW92ZShzaXplKSk7IH0KIAogICAgIHZvaWQgc2V0Qm9yZGVy
Q29sbGFwc2UoQm9yZGVyQ29sbGFwc2UgY29sbGFwc2UpIHsgbV9pbmhlcml0ZWRGbGFncy5ib3Jk
ZXJDb2xsYXBzZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2xsYXBzZSk7IH0KICAgICB2b2lk
IHNldEhvcml6b250YWxCb3JkZXJTcGFjaW5nKGZsb2F0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUJhY2tncm91bmREYXRhLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUJhY2tncm91bmREYXRhLmNwcAppbmRleCAwYWZh
N2MwNWRkY2EyZDVjZWQ3MDU1OWQ5Yjk0MDczZWEwZTljNjNhLi5hN2MyNzUwNjhlNmU0YTQ0ZDRk
OGRmMjgwOTdmZjY3ZWRkZmVhY2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvU3R5bGVCYWNrZ3JvdW5kRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIFN0eWxlQmFja2dyb3VuZERhdGE6OlN0eWxlQmFja2dyb3Vu
ZERhdGEoKQotICAgIDogYmFja2dyb3VuZChGaWxsTGF5ZXJUeXBlOjpCYWNrZ3JvdW5kKQorICAg
IDogYmFja2dyb3VuZChGaWxsTGF5ZXI6OmNyZWF0ZShGaWxsTGF5ZXJUeXBlOjpCYWNrZ3JvdW5k
KSkKICAgICAsIGNvbG9yKFJlbmRlclN0eWxlOjppbml0aWFsQmFja2dyb3VuZENvbG9yKCkpCiB7
CiB9CkBAIC02Miw3ICs2Miw3IEBAIGJvb2wgU3R5bGVCYWNrZ3JvdW5kRGF0YTo6aXNFcXVpdmFs
ZW50Rm9yUGFpbnRpbmcoY29uc3QgU3R5bGVCYWNrZ3JvdW5kRGF0YSYgb3RoCiAKIHZvaWQgU3R5
bGVCYWNrZ3JvdW5kRGF0YTo6ZHVtcChUZXh0U3RyZWFtJiB0cywgRHVtcFN0eWxlVmFsdWVzIGJl
aGF2aW9yKSBjb25zdAogewotICAgIGlmIChiZWhhdmlvciA9PSBEdW1wU3R5bGVWYWx1ZXM6OkFs
bCB8fCBiYWNrZ3JvdW5kICE9IEZpbGxMYXllcihGaWxsTGF5ZXJUeXBlOjpCYWNrZ3JvdW5kKSkK
KyAgICBpZiAoYmVoYXZpb3IgPT0gRHVtcFN0eWxlVmFsdWVzOjpBbGwgfHwgKmJhY2tncm91bmQg
IT0gRmlsbExheWVyOjpjcmVhdGUoRmlsbExheWVyVHlwZTo6QmFja2dyb3VuZCkuZ2V0KCkpCiAg
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmFja2dyb3VuZC1pbWFnZSIsIGJhY2tncm91bmQpOwog
ICAgIGlmIChiZWhhdmlvciA9PSBEdW1wU3R5bGVWYWx1ZXM6OkFsbCB8fCBjb2xvciAhPSBSZW5k
ZXJTdHlsZTo6aW5pdGlhbEJhY2tncm91bmRDb2xvcigpKQogICAgICAgICB0cy5kdW1wUHJvcGVy
dHkoImJhY2tncm91bmQtY29sb3IiLCBjb2xvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVCYWNrZ3JvdW5kRGF0YS5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEuaAppbmRleCA5NzkzNDMxM2JjNDJh
ZjVhNWQzNjAwNDYxOWRlMGNiYWY1YTFiMDJhLi5kZGE0OTJiNTVmNDY5ZGJiNDU2YWQzZTZiYzgz
Zjc5OGY2YmE5OWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
U3R5bGVCYWNrZ3JvdW5kRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9TdHlsZUJhY2tncm91bmREYXRhLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJDb2xv
ci5oIgogI2luY2x1ZGUgIkZpbGxMYXllci5oIgogI2luY2x1ZGUgIk91dGxpbmVWYWx1ZS5oIgor
I2luY2x1ZGUgPHd0Zi9EYXRhUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmLmg+CiAKQEAgLTQyLDcgKzQzLDcgQEAgcHVibGljOgogCiAgICAgYm9v
bCBpc0VxdWl2YWxlbnRGb3JQYWludGluZyhjb25zdCBTdHlsZUJhY2tncm91bmREYXRhJikgY29u
c3Q7CiAKLSAgICBGaWxsTGF5ZXIgYmFja2dyb3VuZDsKKyAgICBEYXRhUmVmPEZpbGxMYXllcj4g
YmFja2dyb3VuZDsKICAgICBDb2xvciBjb2xvcjsKICAgICBPdXRsaW5lVmFsdWUgb3V0bGluZTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5v
bkluaGVyaXRlZERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxl
UmFyZU5vbkluaGVyaXRlZERhdGEuY3BwCmluZGV4IGE3NzExYTYzMWY4NjBiZmUzYTlkZjRmYjRj
NjY2NjliYTE3OTY4ODUuLjE1YzNlOTI5MjU5ZTA3NmUyOTYyMzIyM2Y4NzgzNTRmMGQ0MDM1ZDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25J
bmhlcml0ZWREYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5
bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHAKQEAgLTY1LDcgKzY1LDcgQEAgU3R5bGVSYXJlTm9u
SW5oZXJpdGVkRGF0YTo6U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSgpCiAgICAgLCBzY3JvbGxT
bmFwQXJlYShTdHlsZVNjcm9sbFNuYXBBcmVhOjpjcmVhdGUoKSkKICNlbmRpZgogICAgICwgd2ls
bENoYW5nZShSZW5kZXJTdHlsZTo6aW5pdGlhbFdpbGxDaGFuZ2UoKSkKLSAgICAsIG1hc2soRmls
bExheWVyVHlwZTo6TWFzaykKKyAgICAsIG1hc2soRmlsbExheWVyOjpjcmVhdGUoRmlsbExheWVy
VHlwZTo6TWFzaykpCiAgICAgLCBtYXNrQm94SW1hZ2UoTmluZVBpZWNlSW1hZ2U6OlR5cGU6Ok1h
c2spCiAgICAgLCBvYmplY3RQb3NpdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbE9iamVjdFBvc2l0
aW9uKCkpCiAgICAgLCBzaGFwZU91dHNpZGUoUmVuZGVyU3R5bGU6OmluaXRpYWxTaGFwZU91dHNp
ZGUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJh
cmVOb25Jbmhlcml0ZWREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5
bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oCmluZGV4IDEyMjg3NmQwNzljM2E3NmFkOTZkNjNmNmI4
OTc5MTM2MmVlN2U4ZGEuLjgxOGNiNjI3NTVlNTY1ZWJmOWEyYjUwMDc0YmZiYTM4NTFjODcyOTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25J
bmhlcml0ZWREYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxl
UmFyZU5vbkluaGVyaXRlZERhdGEuaApAQCAtMTQ0LDcgKzE0NCw3IEBAIHB1YmxpYzoKICAgICBS
ZWZQdHI8QW5pbWF0aW9uTGlzdD4gYW5pbWF0aW9uczsKICAgICBSZWZQdHI8QW5pbWF0aW9uTGlz
dD4gdHJhbnNpdGlvbnM7CiAKLSAgICBGaWxsTGF5ZXIgbWFzazsKKyAgICBEYXRhUmVmPEZpbGxM
YXllcj4gbWFzazsKICAgICBOaW5lUGllY2VJbWFnZSBtYXNrQm94SW1hZ2U7CiAKICAgICBMZW5n
dGhTaXplIHBhZ2VTaXplOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>