<?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>211623</bug_id>
          
          <creation_ts>2020-05-08 07:21:15 -0700</creation_ts>
          <short_desc>[GStreamer] Playbin3 track switch rework</short_desc>
          <delta_ts>2020-05-14 02:58:22 -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>WebKitGTK</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alicia Boya García">aboya</reporter>
          <assigned_to name="Alicia Boya García">aboya</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>calvaris</cc>
    
    <cc>cgarcia</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>jer.noble</cc>
    
    <cc>menard</cc>
    
    <cc>philipj</cc>
    
    <cc>pnormand</cc>
    
    <cc>sergio</cc>
    
    <cc>vjaquez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1650578</commentid>
    <comment_count>0</comment_count>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2020-05-08 07:21:15 -0700</bug_when>
    <thetext>This patch reworks how track selection and reporting of selected
tracks is done in the player.

The following found limitations and assumptions in current GStreamer
have informed this patch:

a) Although the API for playbin3 is designed to be able to accept any
number of tracks of any kind, this is not supported in practice.

b) The first track of each type is always selected. Even in playbin3
mode, looking for GST_STREAM_FLAG_SELECT is not a reliable method, as
in most cases the demuxer does not set it at all. [qtdemux never sets
it at all, and matroskademux only sets it in certain cases.]

c) Sending GST_EVENT_SELECT_STREAMS is only safe at certain moments.
It&apos;s not safe before pre-roll, after EOS or during the handling of
another SELECT_STREAMS.

d) Selecting text tracks with playbin APIs is not relevant. All text
tracks are already being picked by WebKitTextCombiner, unaffected by
playbin track selection.

e) Tracks requested in a GST_EVENT_SELECT_STREAMS are eventually
selected. On the other hand,  looking at
GST_MESSAGE_STREAMS_SELECTED&apos;s content is not reliable, as this has
been seen to miss tracks depending on thread luck.

This patch takes the points above into account to rework how track
selection is handled in MediaPlayerPrivateGStreamer and fix the
following issues:

1) In playbin3 mode, no track was marked as selected initially,
because of reliance on GST_STREAM_FLAG_SELECT.

2) In playbin2 mode, sometimes tracks would not be initially marked as
selected. This occurred because of reliance on the &quot;selected&quot; property
in inputselector sinkpads, whose initialization is racy -- it can
occur after the track has been added and picked up by WebKit.

3) In playbin3 mode, the limitations explained before has been honored
to make track selection stable, delaying SELECT_STREAMS events until
they are safe to send.

This patch doesn&apos;t introduce significative behavior changes, rather
aiming for improving the stabilitity of the player. Existing tests
should provide enough coverage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650583</commentid>
    <comment_count>1</comment_count>
      <attachid>398859</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2020-05-08 07:45:54 -0700</bug_when>
    <thetext>Created attachment 398859
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651653</commentid>
    <comment_count>2</comment_count>
      <attachid>398859</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-05-12 00:55:14 -0700</bug_when>
    <thetext>Comment on attachment 398859
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1595
&gt; +        GST_DEBUG_OBJECT(pipeline(), &quot;Received STREAM_COLLECTION message with upstream id \&quot;%s\&quot; defining the following streams:&quot;, gst_stream_collection_get_upstream_id(collection.get()));
&gt; +        unsigned numStreams = gst_stream_collection_get_size(collection.get());
&gt; +        for (unsigned i = 0; i &lt; numStreams; i++) {
&gt; +            GstStream* stream = gst_stream_collection_get_stream(collection.get(), i);
&gt; +            GST_DEBUG_OBJECT(pipeline(), &quot;#%u %s %s&quot;, i, gst_stream_type_get_name(gst_stream_get_stream_type(stream)), gst_stream_get_stream_id(stream));
&gt; +        }

This is used for logging only, perhaps wrap it around a #ifndef GST_DISABLE_DEBUG?

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1608
&gt; +        GST_DEBUG_OBJECT(pipeline(), &quot;Received STREAMS_SELECTED message selecting the following streams:&quot;);
&gt; +        unsigned numStreams = gst_message_streams_selected_get_size(message);
&gt; +        for (unsigned i = 0; i &lt; numStreams; i++) {
&gt; +            GstStream* stream = gst_message_streams_selected_get_stream(message, i);
&gt; +            GST_DEBUG_OBJECT(pipeline(), &quot;#%u %s %s&quot;, i, gst_stream_type_get_name(gst_stream_get_stream_type(stream)), gst_stream_get_stream_id(stream));
&gt; +        }

Ditto

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:224
&gt; +    void updateEnabledAudioTrack();

no updateEnabledTextTrack()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651679</commentid>
    <comment_count>3</comment_count>
      <attachid>398859</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2020-05-12 04:15:18 -0700</bug_when>
    <thetext>Comment on attachment 398859
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:224
&gt;&gt; +    void updateEnabledAudioTrack();
&gt; 
&gt; no updateEnabledTextTrack()?

This is intentional. Text track selection is handled on another level and it&apos;s unaffected by whatever we select in playbin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651684</commentid>
    <comment_count>4</comment_count>
      <attachid>398859</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-05-12 04:26:59 -0700</bug_when>
    <thetext>Comment on attachment 398859
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:224
&gt;&gt;&gt; +    void updateEnabledAudioTrack();
&gt;&gt; 
&gt;&gt; no updateEnabledTextTrack()?
&gt; 
&gt; This is intentional. Text track selection is handled on another level and it&apos;s unaffected by whatever we select in playbin.

Can you elaborate? Playbin still has code to manage text tracks, last time I checked.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651691</commentid>
    <comment_count>5</comment_count>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2020-05-12 04:52:07 -0700</bug_when>
    <thetext>(In reply to Philippe Normand from comment #4)
&gt; Comment on attachment 398859 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=398859&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:224
&gt; &gt;&gt;&gt; +    void updateEnabledAudioTrack();
&gt; &gt;&gt; 
&gt; &gt;&gt; no updateEnabledTextTrack()?
&gt; &gt; 
&gt; &gt; This is intentional. Text track selection is handled on another level and it&apos;s unaffected by whatever we select in playbin.
&gt; 
&gt; Can you elaborate? Playbin still has code to manage text tracks, last time I
&gt; checked.

All text tracks are connected to WebKitTextCombiner. You can remove all this track selection code and it will still work. WebKit will still detect all the same text tracks and let you select any number of them. This is true even when using playbin2 which wouldn&apos;t support that by itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651693</commentid>
    <comment_count>6</comment_count>
      <attachid>398859</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-05-12 04:58:52 -0700</bug_when>
    <thetext>Comment on attachment 398859
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:224
&gt;&gt;&gt;&gt;&gt; +    void updateEnabledAudioTrack();
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; no updateEnabledTextTrack()?
&gt;&gt;&gt; 
&gt;&gt;&gt; This is intentional. Text track selection is handled on another level and it&apos;s unaffected by whatever we select in playbin.
&gt;&gt; 
&gt;&gt; Can you elaborate? Playbin still has code to manage text tracks, last time I checked.
&gt; 
&gt; All text tracks are connected to WebKitTextCombiner. You can remove all this track selection code and it will still work. WebKit will still detect all the same text tracks and let you select any number of them. This is true even when using playbin2 which wouldn&apos;t support that by itself.

OK, thanks. I totally forgot we had that combiner!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651715</commentid>
    <comment_count>7</comment_count>
      <attachid>399125</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2020-05-12 06:48:11 -0700</bug_when>
    <thetext>Created attachment 399125
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1652158</commentid>
    <comment_count>8</comment_count>
      <attachid>399125</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-05-13 02:09:25 -0700</bug_when>
    <thetext>Comment on attachment 399125
Patch

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

LGTM

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1605
&gt; +    } else if (GST_MESSAGE_TYPE(message) == GST_MESSAGE_STREAMS_SELECTED &amp;&amp; !m_isLegacyPlaybin) {
&gt; +#ifndef GST_DISABLE_DEBUG

Doesn&apos;t it make sense to swap this lines?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1652159</commentid>
    <comment_count>9</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-05-13 02:12:45 -0700</bug_when>
    <thetext>(In reply to Xabier Rodríguez Calvar from comment #8)
&gt; Comment on attachment 399125 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=399125&amp;action=review
&gt; 
&gt; LGTM
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1605
&gt; &gt; +    } else if (GST_MESSAGE_TYPE(message) == GST_MESSAGE_STREAMS_SELECTED &amp;&amp; !m_isLegacyPlaybin) {
&gt; &gt; +#ifndef GST_DISABLE_DEBUG
&gt; 
&gt; Doesn&apos;t it make sense to swap this lines?

Yes I think it would prevent build warnings, when debug is disabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1652557</commentid>
    <comment_count>10</comment_count>
      <attachid>399342</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2020-05-14 02:17:50 -0700</bug_when>
    <thetext>Created attachment 399342
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1652569</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-05-14 02:58:21 -0700</bug_when>
    <thetext>Committed r261683: &lt;https://trac.webkit.org/changeset/261683&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 399342.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398859</attachid>
            <date>2020-05-08 07:45:54 -0700</date>
            <delta_ts>2020-05-12 06:48:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211623-20200508164553.patch</filename>
            <type>text/plain</type>
            <size>32069</size>
            <attacher name="Alicia Boya García">aboya</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxMzAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWY4YWI1YWJkOGE4M2Q3
MTIwODVkZWZhNmIzYjAwMTkwOGUyMTUwNi4uYjMyYzZkMjE1N2FlODUxZGE1ODkyNmM0OWRiMTM5
YjU5ZDEzZGZmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDIwLTA1LTA2ICBBbGlj
aWEgQm95YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBQbGF5YmluMyB0cmFjayBzd2l0Y2ggcmV3b3JrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTE2MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHJld29ya3MgaG93IHRyYWNrIHNlbGVj
dGlvbiBhbmQgcmVwb3J0aW5nIG9mIHNlbGVjdGVkCisgICAgICAgIHRyYWNrcyBpcyBkb25lIGlu
IHRoZSBwbGF5ZXIuCisKKyAgICAgICAgVGhlIGZvbGxvd2luZyBmb3VuZCBsaW1pdGF0aW9ucyBh
bmQgYXNzdW1wdGlvbnMgaW4gY3VycmVudCBHU3RyZWFtZXIKKyAgICAgICAgaGF2ZSBpbmZvcm1l
ZCB0aGlzIHBhdGNoOgorCisgICAgICAgIGEpIEFsdGhvdWdoIHRoZSBBUEkgZm9yIHBsYXliaW4z
IGlzIGRlc2lnbmVkIHRvIGJlIGFibGUgdG8gYWNjZXB0IGFueQorICAgICAgICBudW1iZXIgb2Yg
dHJhY2tzIG9mIGFueSBraW5kLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gcHJhY3RpY2UuCisK
KyAgICAgICAgYikgVGhlIGZpcnN0IHRyYWNrIG9mIGVhY2ggdHlwZSBpcyBhbHdheXMgc2VsZWN0
ZWQuIEV2ZW4gaW4gcGxheWJpbjMKKyAgICAgICAgbW9kZSwgbG9va2luZyBmb3IgR1NUX1NUUkVB
TV9GTEFHX1NFTEVDVCBpcyBub3QgYSByZWxpYWJsZSBtZXRob2QsIGFzCisgICAgICAgIGluIG1v
c3QgY2FzZXMgdGhlIGRlbXV4ZXIgZG9lcyBub3Qgc2V0IGl0IGF0IGFsbC4gW3F0ZGVtdXggbmV2
ZXIgc2V0cworICAgICAgICBpdCBhdCBhbGwsIGFuZCBtYXRyb3NrYWRlbXV4IG9ubHkgc2V0cyBp
dCBpbiBjZXJ0YWluIGNhc2VzLl0KKworICAgICAgICBjKSBTZW5kaW5nIEdTVF9FVkVOVF9TRUxF
Q1RfU1RSRUFNUyBpcyBvbmx5IHNhZmUgYXQgY2VydGFpbiBtb21lbnRzLgorICAgICAgICBJdCdz
IG5vdCBzYWZlIGJlZm9yZSBwcmUtcm9sbCwgYWZ0ZXIgRU9TIG9yIGR1cmluZyB0aGUgaGFuZGxp
bmcgb2YKKyAgICAgICAgYW5vdGhlciBTRUxFQ1RfU1RSRUFNUy4KKworICAgICAgICBkKSBTZWxl
Y3RpbmcgdGV4dCB0cmFja3Mgd2l0aCBwbGF5YmluIEFQSXMgaXMgbm90IHJlbGV2YW50LiBBbGwg
dGV4dAorICAgICAgICB0cmFja3MgYXJlIGFscmVhZHkgYmVpbmcgcGlja2VkIGJ5IFdlYktpdFRl
eHRDb21iaW5lciwgdW5hZmZlY3RlZCBieQorICAgICAgICBwbGF5YmluIHRyYWNrIHNlbGVjdGlv
bi4KKworICAgICAgICBlKSBUcmFja3MgcmVxdWVzdGVkIGluIGEgR1NUX0VWRU5UX1NFTEVDVF9T
VFJFQU1TIGFyZSBldmVudHVhbGx5CisgICAgICAgIHNlbGVjdGVkLiBPbiB0aGUgb3RoZXIgaGFu
ZCwgIGxvb2tpbmcgYXQKKyAgICAgICAgR1NUX01FU1NBR0VfU1RSRUFNU19TRUxFQ1RFRCdzIGNv
bnRlbnQgaXMgbm90IHJlbGlhYmxlLCBhcyB0aGlzIGhhcworICAgICAgICBiZWVuIHNlZW4gdG8g
bWlzcyB0cmFja3MgZGVwZW5kaW5nIG9uIHRocmVhZCBsdWNrLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggdGFrZXMgdGhlIHBvaW50cyBhYm92ZSBpbnRvIGFjY291bnQgdG8gcmV3b3JrIGhvdyB0cmFj
aworICAgICAgICBzZWxlY3Rpb24gaXMgaGFuZGxlZCBpbiBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIgYW5kIGZpeCB0aGUKKyAgICAgICAgZm9sbG93aW5nIGlzc3VlczoKKworICAgICAgICAx
KSBJbiBwbGF5YmluMyBtb2RlLCBubyB0cmFjayB3YXMgbWFya2VkIGFzIHNlbGVjdGVkIGluaXRp
YWxseSwKKyAgICAgICAgYmVjYXVzZSBvZiByZWxpYW5jZSBvbiBHU1RfU1RSRUFNX0ZMQUdfU0VM
RUNULgorCisgICAgICAgIDIpIEluIHBsYXliaW4yIG1vZGUsIHNvbWV0aW1lcyB0cmFja3Mgd291
bGQgbm90IGJlIGluaXRpYWxseSBtYXJrZWQgYXMKKyAgICAgICAgc2VsZWN0ZWQuIFRoaXMgb2Nj
dXJyZWQgYmVjYXVzZSBvZiByZWxpYW5jZSBvbiB0aGUgInNlbGVjdGVkIiBwcm9wZXJ0eQorICAg
ICAgICBpbiBpbnB1dHNlbGVjdG9yIHNpbmtwYWRzLCB3aG9zZSBpbml0aWFsaXphdGlvbiBpcyBy
YWN5IC0tIGl0IGNhbgorICAgICAgICBvY2N1ciBhZnRlciB0aGUgdHJhY2sgaGFzIGJlZW4gYWRk
ZWQgYW5kIHBpY2tlZCB1cCBieSBXZWJLaXQuCisKKyAgICAgICAgMykgSW4gcGxheWJpbjMgbW9k
ZSwgdGhlIGxpbWl0YXRpb25zIGV4cGxhaW5lZCBiZWZvcmUgaGFzIGJlZW4gaG9ub3JlZAorICAg
ICAgICB0byBtYWtlIHRyYWNrIHNlbGVjdGlvbiBzdGFibGUsIGRlbGF5aW5nIFNFTEVDVF9TVFJF
QU1TIGV2ZW50cyB1bnRpbAorICAgICAgICB0aGV5IGFyZSBzYWZlIHRvIHNlbmQuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBzaWduaWZpY2F0aXZlIGJlaGF2aW9yIGNo
YW5nZXMsIHJhdGhlcgorICAgICAgICBhaW1pbmcgZm9yIGltcHJvdmluZyB0aGUgc3RhYmlsaXRp
dHkgb2YgdGhlIHBsYXllci4gRXhpc3RpbmcgdGVzdHMKKyAgICAgICAgc2hvdWxkIHByb3ZpZGUg
ZW5vdWdoIGNvdmVyYWdlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcik6CisgICAg
ICAgIChXZWJDb3JlOjpBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6c2V0RW5hYmxlZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0F1ZGlvVHJhY2tQcml2YXRlR1N0
cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZkF1ZGlvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlRW5hYmxlZFZp
ZGVvVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
Ojp1cGRhdGVFbmFibGVkQXVkaW9UcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnBsYXliaW4zU2VuZFNlbGVjdFN0cmVhbXNJZkFwcHJvcHJpYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRl
VHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
aGFuZGxlU3luY01lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6ZGlkRW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tQcml2YXRlQmFz
ZUdTdHJlYW1lcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNr
UHJpdmF0ZUJhc2VHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpzZXRTZWxlY3Rl
ZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvVHJhY2tQcml2
YXRlR1N0cmVhbWVyLmg6CisKIDIwMjAtMDUtMDcgIEFuZHJlcyBHb256YWxleiAgPGFuZHJlc2df
MjJAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgZGVidWcgYnVpbGQgcnVuIGluIGFjY2Vzc2li
aWxpdHkgaXNvbGF0ZWQgdHJlZSBtb2RlID0gMS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9BdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvQXVkaW9UcmFj
a1ByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IGE0NTZhZjY0YWYxM2JhMTAwN2ZiNDhkM2VmYTI0
MmE1N2NhZjZhZTcuLmI3NDg4NjQwNWU5NDA0NzM2ZTMxZjJiYzkxZWUxYTc1NDZiMWRmMTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9BdWRp
b1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtNDAs
NyArNDAsNiBAQCBBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6QXVkaW9UcmFja1ByaXZhdGVH
U3RyZWFtZXIoV2Vha1B0cjxNZWRpYVBsYXllclByaXZhdAogewogICAgIC8vIEZJWE1FOiBHZXQg
YSByZWFsIElEIGZyb20gdGhlIHRraGQgYXRvbS4KICAgICBtX2lkID0gIkEiICsgU3RyaW5nOjpu
dW1iZXIoaW5kZXgpOwotICAgIG5vdGlmeVRyYWNrT2ZBY3RpdmVDaGFuZ2VkKCk7CiB9CiAKIEF1
ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcihXZWFr
UHRyPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcj4gcGxheWVyLCBnaW50IGluZGV4LCBHUmVm
UHRyPEdzdFN0cmVhbT4gc3RyZWFtKQpAQCAtNTYsMTAgKzU1LDYgQEAgQXVkaW9UcmFja1ByaXZh
dGVHU3RyZWFtZXI6OkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyKFdlYWtQdHI8TWVkaWFQbGF5
ZXJQcml2YXQKICAgICB9CiAKICAgICBtX2lkID0gZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2lkKHN0
cmVhbS5nZXQoKSk7Ci0gICAgaWYgKGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9mbGFncyhzdHJlYW0u
Z2V0KCkpICYgR1NUX1NUUkVBTV9GTEFHX1NFTEVDVCkKLSAgICAgICAgbWFya0FzQWN0aXZlKCk7
Ci0KLSAgICBub3RpZnlUcmFja09mQWN0aXZlQ2hhbmdlZCgpOwogfQogCiBBdWRpb1RyYWNrUHJp
dmF0ZTo6S2luZCBBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6a2luZCgpIGNvbnN0CkBAIC03
NiwxOSArNzEsMTQgQEAgdm9pZCBBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6ZGlzY29ubmVj
dCgpCiAgICAgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6ZGlzY29ubmVjdCgpOwogfQogCi12
b2lkIEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjptYXJrQXNBY3RpdmUoKQotewotICAgIEF1
ZGlvVHJhY2tQcml2YXRlOjpzZXRFbmFibGVkKHRydWUpOwotfQotCiB2b2lkIEF1ZGlvVHJhY2tQ
cml2YXRlR1N0cmVhbWVyOjpzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBpZiAoZW5h
YmxlZCA9PSB0aGlzLT5lbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBBdWRpb1RyYWNr
UHJpdmF0ZTo6c2V0RW5hYmxlZChlbmFibGVkKTsKIAotICAgIGlmIChlbmFibGVkICYmIG1fcGxh
eWVyKQotICAgICAgICBtX3BsYXllci0+ZW5hYmxlVHJhY2soVHJhY2tQcml2YXRlQmFzZUdTdHJl
YW1lcjo6VHJhY2tUeXBlOjpBdWRpbywgbV9pbmRleCk7CisgICAgaWYgKG1fcGxheWVyKQorICAg
ICAgICBtX3BsYXllci0+dXBkYXRlRW5hYmxlZEF1ZGlvVHJhY2soKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIu
aAppbmRleCA3MGI2YjAyZmU5OWFiMWNiMDQ2ZmJkZjM3NjUxYmQwODMzZTdlYjE4Li40NzJkMjA2
MWQxZTc2ZDJiOGI4MjllZjRiY2Q2OGMxMmQwMjYyMWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFt
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvQXVk
aW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaApAQCAtNTMsNyArNTMsNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkaXNjb25uZWN0KCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBtYXJrQXNBY3RpdmUoKTsKICAgICB2b2lkIHNldEFjdGl2ZShi
b29sIGVuYWJsZWQpIG92ZXJyaWRlIHsgc2V0RW5hYmxlZChlbmFibGVkKTsgfQogCiAgICAgaW50
IHRyYWNrSW5kZXgoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2luZGV4OyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IDAyYWE1ZTU0
NmIyNmYzYWE2ODUzN2ZlNWJlZGUxMTMxMjdjNGM3MDMuLmM2YmU1NmVmMjgxN2QyOWJjNDI5NWFl
YjcyNjJlMjQ1MGM2YWM1ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIuY3BwCkBAIC0xMDUsMTEgKzEwNSwxNCBAQAogI2RlZmluZSBDUkVBVEVfVFJB
Q0sodHlwZSwgVHlwZSkgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgICAgICBtX2hhcyMjVHlwZSA9IHRydWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAoIXVzZU1lZGlhU291cmNlKSB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgUmVmUHRyPFR5
cGUjI1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gdHJhY2sgPSBUeXBlIyNUcmFja1ByaXZhdGVHU3Ry
ZWFtZXI6OmNyZWF0ZShtYWtlV2Vha1B0cigqdGhpcyksIGksIHN0cmVhbSk7IFwKKyAgICAgICAg
ICAgIFJlZlB0cjxUeXBlIyNUcmFja1ByaXZhdGVHU3RyZWFtZXI+IHRyYWNrID0gVHlwZSMjVHJh
Y2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobWFrZVdlYWtQdHIoKnRoaXMpLCB0eXBlIyNUcmFj
a0luZGV4KyssIHN0cmVhbSk7IFwKKyAgICAgICAgICAgIGlmICghdHJhY2stPnRyYWNrSW5kZXgo
KSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB0
cmFjay0+c2V0QWN0aXZlKHRydWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgICAgICBtX3dhbnRlZCMjVHlwZSMjU3RyZWFtSWQgPSB0cmFjay0+aWQoKTsg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBtX3JlcXVlc3RlZCMjVHlwZSMjU3Ry
ZWFtSWQgPSB0cmFjay0+aWQoKTsgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICAgICAgICAgIG1fIyN0eXBlIyNUcmFja3MuYWRkKHRyYWNrLT5pZCgpLCB0cmFjayk7ICAgICAg
ICAgICAgICAgICAgIFwKICAgICAgICAgICAgIG1fcGxheWVyLT5hZGQjI1R5cGUjI1RyYWNrKCp0
cmFjayk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmIChnc3Rfc3Ry
ZWFtX2dldF9zdHJlYW1fZmxhZ3Moc3RyZWFtLmdldCgpKSAmIEdTVF9TVFJFQU1fRkxBR19TRUxF
Q1QpIFwKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnQjI1R5cGUjI1N0cmVhbUlkID0gU3RyaW5n
KGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0uZ2V0KCkpKTsgXAogICAgICAgICB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgIH0gR19TVE1UX0VORAogCkBAIC0xMDc0LDYgKzEwNzcsOCBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWaWRlbygpCiAgICAgICAgIH0K
IAogICAgICAgICBhdXRvIHRyYWNrID0gVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0
ZShtYWtlV2Vha1B0cigqdGhpcyksIGksIHBhZCk7CisgICAgICAgIGlmICghdHJhY2stPnRyYWNr
SW5kZXgoKSkKKyAgICAgICAgICAgIHRyYWNrLT5zZXRBY3RpdmUodHJ1ZSk7CiAgICAgICAgIEFT
U0VSVChzdHJlYW1JZCA9PSB0cmFjay0+aWQoKSk7CiAgICAgICAgIG1fdmlkZW9UcmFja3MuYWRk
KHN0cmVhbUlkLCB0cmFjay5jb3B5UmVmKCkpOwogICAgICAgICBtX3BsYXllci0+YWRkVmlkZW9U
cmFjayh0cmFjay5nZXQoKSk7CkBAIC0xMTQ4LDYgKzExNTMsOCBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZBdWRpbygpCiAgICAgICAgIH0KIAogICAg
ICAgICBhdXRvIHRyYWNrID0gQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShtYWtl
V2Vha1B0cigqdGhpcyksIGksIHBhZCk7CisgICAgICAgIGlmICghdHJhY2stPnRyYWNrSW5kZXgo
KSkKKyAgICAgICAgICAgIHRyYWNrLT5zZXRBY3RpdmUodHJ1ZSk7CiAgICAgICAgIEFTU0VSVChz
dHJlYW1JZCA9PSB0cmFjay0+aWQoKSk7CiAgICAgICAgIG1fYXVkaW9UcmFja3MuYWRkKHN0cmVh
bUlkLCB0cmFjayk7CiAgICAgICAgIG1fcGxheWVyLT5hZGRBdWRpb1RyYWNrKCp0cmFjayk7CkBA
IC0xNDIzLDExMCArMTQzMCwxMTEgQEAgTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6cGxheWJhY2tQb3NpdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIHBsYXliYWNrUG9zaXRp
b247CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjplbmFibGVUcmFjayhU
cmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGUgdHJhY2tUeXBlLCB1bnNpZ25lZCBp
bmRleCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVFbmFibGVkVmlk
ZW9UcmFjaygpCiB7Ci0gICAgLy8gRklYTUU6IFJlbW92ZSBpc01lZGlhU291cmNlKCkgdGVzdCBi
ZWxvdyB3aGVuIGZpeGluZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTgyNTMxLgotICAgIGlmIChpc01lZGlhU291cmNlKCkpIHsKLSAgICAgICAgR1NUX0ZJWE1FX09C
SkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQXVkaW8vVmlkZW8vVGV4dCB0cmFjayBzd2l0Y2hpbmcg
aXMgbm90IHlldCBzdXBwb3J0ZWQgYnkgdGhlIE1TRSBiYWNrZW5kLiIpOwotICAgICAgICByZXR1
cm47CisgICAgVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIqIHdhbnRlZFRyYWNrID0gbnVsbHB0
cjsKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3ZpZGVvVHJhY2tzKSB7CisgICAgICAgIFZpZGVv
VHJhY2tQcml2YXRlR1N0cmVhbWVyKiB0cmFjayA9IHBhaXIudmFsdWUuZ2V0KCk7CisgICAgICAg
IGlmICh0cmFjay0+c2VsZWN0ZWQoKSkgeworICAgICAgICAgICAgd2FudGVkVHJhY2sgPSB0cmFj
azsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogCi0gICAgY29uc3QgY2hh
ciogcHJvcGVydHlOYW1lOwotICAgIGNvbnN0IGNoYXIqIHRyYWNrVHlwZUFzU3RyaW5nOwotICAg
IFZlY3RvcjxTdHJpbmc+IHNlbGVjdGVkU3RyZWFtczsKLSAgICBTdHJpbmcgc2VsZWN0ZWRTdHJl
YW1JZDsKLQotICAgIEdzdFN0cmVhbSogc3RyZWFtID0gbnVsbHB0cjsKKyAgICAvLyBObyBhY3Rp
dmUgdHJhY2ssIG5vIGNoYW5nZXMuCisgICAgaWYgKCF3YW50ZWRUcmFjaykKKyAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKCFtX2lzTGVnYWN5UGxheWJpbikgewotICAgICAgICBzdHJlYW0gPSBn
c3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3N0cmVhbShtX3N0cmVhbUNvbGxlY3Rpb24uZ2V0KCks
IGluZGV4KTsKLSAgICAgICAgaWYgKCFzdHJlYW0pIHsKLSAgICAgICAgICAgIEdTVF9XQVJOSU5H
X09CSkVDVChwaXBlbGluZSgpLCAiTm8gc3RyZWFtIHRvIHNlbGVjdCBhdCBpbmRleCAldSIsIGlu
ZGV4KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBzZWxlY3RlZFN0
cmVhbUlkID0gU3RyaW5nOjpmcm9tVVRGOChnc3Rfc3RyZWFtX2dldF9zdHJlYW1faWQoc3RyZWFt
KSk7Ci0gICAgICAgIHNlbGVjdGVkU3RyZWFtcy5hcHBlbmQoc2VsZWN0ZWRTdHJlYW1JZCk7Cisg
ICAgaWYgKG1faXNMZWdhY3lQbGF5YmluKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9w
aXBlbGluZS5nZXQoKSwgIlNldHRpbmcgcGxheWJpbjIgY3VycmVudC12aWRlbz0lZCIsIHdhbnRl
ZFRyYWNrLT50cmFja0luZGV4KCkpOworICAgICAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5n
ZXQoKSwgImN1cnJlbnQtdmlkZW8iLCB3YW50ZWRUcmFjay0+dHJhY2tJbmRleCgpLCBudWxscHRy
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX3dhbnRlZFZpZGVvU3RyZWFtSWQgPSB3YW50ZWRU
cmFjay0+aWQoKTsKKyAgICAgICAgcGxheWJpbjNTZW5kU2VsZWN0U3RyZWFtc0lmQXBwcm9wcmlh
dGUoKTsKICAgICB9Cit9CiAKLSAgICBzd2l0Y2ggKHRyYWNrVHlwZSkgewotICAgIGNhc2UgVHJh
Y2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlOjpBdWRpbzoKLSAgICAgICAgcHJvcGVy
dHlOYW1lID0gImN1cnJlbnQtYXVkaW8iOwotICAgICAgICB0cmFja1R5cGVBc1N0cmluZyA9ICJh
dWRpbyI7Ci0gICAgICAgIGlmICghc2VsZWN0ZWRTdHJlYW1JZC5pc0VtcHR5KCkgJiYgc2VsZWN0
ZWRTdHJlYW1JZCA9PSBtX2N1cnJlbnRBdWRpb1N0cmVhbUlkKSB7Ci0gICAgICAgICAgICBHU1Rf
SU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIiVzIHN0cmVhbTogJXMgYWxyZWFkeSBzZWxlY3RlZCwg
bm90IGRvaW5nIGFueXRoaW5nLiIsIHRyYWNrVHlwZUFzU3RyaW5nLCBzZWxlY3RlZFN0cmVhbUlk
LnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKCFtX2N1cnJlbnRUZXh0U3RyZWFtSWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgc2Vs
ZWN0ZWRTdHJlYW1zLmFwcGVuZChtX2N1cnJlbnRUZXh0U3RyZWFtSWQpOwotICAgICAgICBpZiAo
IW1fY3VycmVudFZpZGVvU3RyZWFtSWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgc2VsZWN0ZWRT
dHJlYW1zLmFwcGVuZChtX2N1cnJlbnRWaWRlb1N0cmVhbUlkKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGU6OlZpZGVvOgotICAg
ICAgICBwcm9wZXJ0eU5hbWUgPSAiY3VycmVudC12aWRlbyI7Ci0gICAgICAgIHRyYWNrVHlwZUFz
U3RyaW5nID0gInZpZGVvIjsKLSAgICAgICAgaWYgKCFzZWxlY3RlZFN0cmVhbUlkLmlzRW1wdHko
KSAmJiBzZWxlY3RlZFN0cmVhbUlkID09IG1fY3VycmVudFZpZGVvU3RyZWFtSWQpIHsKLSAgICAg
ICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiJXMgc3RyZWFtOiAlcyBhbHJlYWR5
IHNlbGVjdGVkLCBub3QgZG9pbmcgYW55dGhpbmcuIiwgdHJhY2tUeXBlQXNTdHJpbmcsIHNlbGVj
dGVkU3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICByZXR1cm47Cit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlRW5hYmxlZEF1ZGlvVHJhY2soKQorewor
ICAgIEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyKiB3YW50ZWRUcmFjayA9IG51bGxwdHI7Cisg
ICAgZm9yIChhdXRvJiBwYWlyIDogbV9hdWRpb1RyYWNrcykgeworICAgICAgICBBdWRpb1RyYWNr
UHJpdmF0ZUdTdHJlYW1lciogdHJhY2sgPSBwYWlyLnZhbHVlLmdldCgpOworICAgICAgICBpZiAo
dHJhY2stPmVuYWJsZWQoKSkgeworICAgICAgICAgICAgd2FudGVkVHJhY2sgPSB0cmFjazsKKyAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgfQogCi0gICAgICAgIGlmICghbV9jdXJy
ZW50QXVkaW9TdHJlYW1JZC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBzZWxlY3RlZFN0cmVhbXMu
YXBwZW5kKG1fY3VycmVudEF1ZGlvU3RyZWFtSWQpOwotICAgICAgICBpZiAoIW1fY3VycmVudFRl
eHRTdHJlYW1JZC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBzZWxlY3RlZFN0cmVhbXMuYXBwZW5k
KG1fY3VycmVudFRleHRTdHJlYW1JZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVHJhY2tQ
cml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlOjpUZXh0OgotICAgICAgICBwcm9wZXJ0eU5h
bWUgPSAiY3VycmVudC10ZXh0IjsKLSAgICAgICAgdHJhY2tUeXBlQXNTdHJpbmcgPSAidGV4dCI7
Ci0gICAgICAgIGlmICghc2VsZWN0ZWRTdHJlYW1JZC5pc0VtcHR5KCkgJiYgc2VsZWN0ZWRTdHJl
YW1JZCA9PSBtX2N1cnJlbnRUZXh0U3RyZWFtSWQpIHsKLSAgICAgICAgICAgIEdTVF9JTkZPX09C
SkVDVChwaXBlbGluZSgpLCAiJXMgc3RyZWFtOiAlcyBhbHJlYWR5IHNlbGVjdGVkLCBub3QgZG9p
bmcgYW55dGhpbmcuIiwgdHJhY2tUeXBlQXNTdHJpbmcsIHNlbGVjdGVkU3RyZWFtSWQudXRmOCgp
LmRhdGEoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAvLyBObyBhY3Rp
dmUgdHJhY2ssIG5vIGNoYW5nZXMuCisgICAgaWYgKCF3YW50ZWRUcmFjaykKKyAgICAgICAgcmV0
dXJuOwogCi0gICAgICAgIGlmICghbV9jdXJyZW50QXVkaW9TdHJlYW1JZC5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICBzZWxlY3RlZFN0cmVhbXMuYXBwZW5kKG1fY3VycmVudEF1ZGlvU3RyZWFtSWQp
OwotICAgICAgICBpZiAoIW1fY3VycmVudFZpZGVvU3RyZWFtSWQuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgc2VsZWN0ZWRTdHJlYW1zLmFwcGVuZChtX2N1cnJlbnRWaWRlb1N0cmVhbUlkKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5
cGU6OlVua25vd246Ci0gICAgICAgIEZBTExUSFJPVUdIOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIGlmIChtX2lzTGVnYWN5UGxheWJpbikgeworICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJTZXR0aW5nIHBsYXliaW4y
IGN1cnJlbnQtYXVkaW89JWQiLCB3YW50ZWRUcmFjay0+dHJhY2tJbmRleCgpKTsKKyAgICAgICAg
Z19vYmplY3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCksICJjdXJyZW50LWF1ZGlvIiwgd2FudGVkVHJh
Y2stPnRyYWNrSW5kZXgoKSwgbnVsbHB0cik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV93YW50
ZWRBdWRpb1N0cmVhbUlkID0gd2FudGVkVHJhY2stPmlkKCk7CisgICAgICAgIHBsYXliaW4zU2Vu
ZFNlbGVjdFN0cmVhbXNJZkFwcHJvcHJpYXRlKCk7CiAgICAgfQorfQogCi0gICAgR1NUX0lORk9f
T0JKRUNUKHBpcGVsaW5lKCksICJFbmFibGluZyAlcyB0cmFjayB3aXRoIGluZGV4OiAldSIsIHRy
YWNrVHlwZUFzU3RyaW5nLCBpbmRleCk7Ci0gICAgaWYgKG1faXNMZWdhY3lQbGF5YmluKQotICAg
ICAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgcHJvcGVydHlOYW1lLCBpbmRleCwg
bnVsbHB0cik7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEdMaXN0KiBzZWxlY3RlZFN0cmVhbXNMaXN0
ID0gbnVsbHB0cjsKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwbGF5YmluM1Nl
bmRTZWxlY3RTdHJlYW1zSWZBcHByb3ByaWF0ZSgpCit7CisgICAgQVNTRVJUKCFtX2lzTGVnYWN5
UGxheWJpbik7CiAKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzdHJlYW1JZCA6IHNlbGVjdGVk
U3RyZWFtcykKLSAgICAgICAgICAgIHNlbGVjdGVkU3RyZWFtc0xpc3QgPSBnX2xpc3RfYXBwZW5k
KHNlbGVjdGVkU3RyZWFtc0xpc3QsIGdfc3RyZHVwKHN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpKTsK
KyAgICBib29sIGhhdmVEaWZmZXJlbnRTdHJlYW1JZHMgPSAobV93YW50ZWRBdWRpb1N0cmVhbUlk
ICE9IG1fY3VycmVudEF1ZGlvU3RyZWFtSWQgfHwgbV93YW50ZWRWaWRlb1N0cmVhbUlkICE9IG1f
Y3VycmVudFZpZGVvU3RyZWFtSWQpOworICAgIGJvb2wgc2hvdWxkU2VuZFNlbGVjdFN0cmVhbXMg
PSAhbV93YWl0aW5nRm9yU3RyZWFtc1NlbGVjdGVkRXZlbnQgJiYgaGF2ZURpZmZlcmVudFN0cmVh
bUlkcyAmJiBtX2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORzsKKyAgICBHU1RfREVC
VUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJDaGVja2luZyBpZiB0byBzZW5kIFNFTEVDVF9T
VFJFQU1TLCBtX3dhaXRpbmdGb3JTdHJlYW1zU2VsZWN0ZWRFdmVudCA9ICVzLCBoYXZlRGlmZmVy
ZW50U3RyZWFtSWRzID0gJXMsIG1fY3VycmVudFN0YXRlID0gJXMuLi4gc2hvdWxkU2VuZFNlbGVj
dFN0cmVhbXMgPSAlcyIsCisgICAgICAgIGJvb2xGb3JQcmludGluZyhtX3dhaXRpbmdGb3JTdHJl
YW1zU2VsZWN0ZWRFdmVudCksIGJvb2xGb3JQcmludGluZyhoYXZlRGlmZmVyZW50U3RyZWFtSWRz
KSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9jdXJyZW50U3RhdGUpLCBib29sRm9yUHJp
bnRpbmcoc2hvdWxkU2VuZFNlbGVjdFN0cmVhbXMpKTsKKyAgICBpZiAoIXNob3VsZFNlbmRTZWxl
Y3RTdHJlYW1zKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgLy8gVE9ETzogTVNFIEdzdFN0
cmVhbSBBUEkgc3VwcG9ydDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE4MjUzMQotICAgICAgICBnc3RfZWxlbWVudF9zZW5kX2V2ZW50KG1fcGlwZWxpbmUuZ2V0KCks
IGdzdF9ldmVudF9uZXdfc2VsZWN0X3N0cmVhbXMoc2VsZWN0ZWRTdHJlYW1zTGlzdCkpOwotICAg
ICAgICBnX2xpc3RfZnJlZV9mdWxsKHNlbGVjdGVkU3RyZWFtc0xpc3QsIHJlaW50ZXJwcmV0X2Nh
c3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfZnJlZSkpOworICAgIEdMaXN0KiBzdHJlYW1zID0gbnVsbHB0
cjsKKyAgICBpZiAoIW1fd2FudGVkVmlkZW9TdHJlYW1JZC5pc051bGwoKSkgeworICAgICAgICBt
X3JlcXVlc3RlZFZpZGVvU3RyZWFtSWQgPSBtX3dhbnRlZFZpZGVvU3RyZWFtSWQ7CisgICAgICAg
IHN0cmVhbXMgPSBnX2xpc3RfYXBwZW5kKHN0cmVhbXMsIGdfc3RyZHVwKG1fd2FudGVkVmlkZW9T
dHJlYW1JZC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgfQorICAgIGlmICghbV93YW50
ZWRBdWRpb1N0cmVhbUlkLmlzTnVsbCgpKSB7CisgICAgICAgIG1fcmVxdWVzdGVkQXVkaW9TdHJl
YW1JZCA9IG1fd2FudGVkQXVkaW9TdHJlYW1JZDsKKyAgICAgICAgc3RyZWFtcyA9IGdfbGlzdF9h
cHBlbmQoc3RyZWFtcywgZ19zdHJkdXAobV93YW50ZWRBdWRpb1N0cmVhbUlkLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpKTsKICAgICB9CisKKyAgICBpZiAoIXN0cmVhbXMpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fd2FpdGluZ0ZvclN0cmVhbXNTZWxlY3RlZEV2ZW50ID0gdHJ1ZTsKKyAgICBn
c3RfZWxlbWVudF9zZW5kX2V2ZW50KG1fcGlwZWxpbmUuZ2V0KCksIGdzdF9ldmVudF9uZXdfc2Vs
ZWN0X3N0cmVhbXMoc3RyZWFtcykpOworICAgIGdfbGlzdF9mcmVlX2Z1bGwoc3RyZWFtcywgcmVp
bnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oZ19mcmVlKSk7CiB9CiAKLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVUcmFja3MoKQordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVRyYWNrcyhHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+
JiYgc3RyZWFtQ29sbGVjdGlvbikKIHsKICAgICBBU1NFUlQoIW1faXNMZWdhY3lQbGF5YmluKTsK
IAogICAgIGJvb2wgdXNlTWVkaWFTb3VyY2UgPSBpc01lZGlhU291cmNlKCk7Ci0gICAgdW5zaWdu
ZWQgbGVuZ3RoID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zaXplKG1fc3RyZWFtQ29sbGVj
dGlvbi5nZXQoKSk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9u
X2dldF9zaXplKHN0cmVhbUNvbGxlY3Rpb24uZ2V0KCkpOworICAgIEdTVF9ERUJVR19PQkpFQ1Qo
cGlwZWxpbmUoKSwgIlByb2Nlc3NpbmcgYSBzdHJlYW0gY29sbGVjdGlvbiB3aXRoICV1IHN0cmVh
bXMiLCBsZW5ndGgpOwogCiAgICAgYm9vbCBvbGRIYXNBdWRpbyA9IG1faGFzQXVkaW87CiAgICAg
Ym9vbCBvbGRIYXNWaWRlbyA9IG1faGFzVmlkZW87CisKICAgICAvLyBOZXcgc3RyZWFtIGNvbGxl
Y3Rpb25zIG92ZXJyaWRlIHByZXZpb3VzIG9uZXMuCi0gICAgY2xlYXJUcmFja3MoKTsKKyAgICB1
bnNpZ25lZCBhdWRpb1RyYWNrSW5kZXggPSAwOworICAgIHVuc2lnbmVkIHZpZGVvVHJhY2tJbmRl
eCA9IDA7CiAgICAgdW5zaWduZWQgdGV4dFRyYWNrSW5kZXggPSAwOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBHUmVmUHRyPEdzdFN0cmVhbT4g
c3RyZWFtID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJlYW0obV9zdHJlYW1Db2xsZWN0
aW9uLmdldCgpLCBpKTsKKyAgICAgICAgR1JlZlB0cjxHc3RTdHJlYW0+IHN0cmVhbSA9IGdzdF9z
dHJlYW1fY29sbGVjdGlvbl9nZXRfc3RyZWFtKHN0cmVhbUNvbGxlY3Rpb24uZ2V0KCksIGkpOwog
ICAgICAgICBTdHJpbmcgc3RyZWFtSWQoZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2lkKHN0cmVhbS5n
ZXQoKSkpOwogICAgICAgICBHc3RTdHJlYW1UeXBlIHR5cGUgPSBnc3Rfc3RyZWFtX2dldF9zdHJl
YW1fdHlwZShzdHJlYW0uZ2V0KCkpOwogCiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxp
bmUoKSwgIkluc3BlY3RpbmcgJXMgdHJhY2sgd2l0aCBJRCAlcyIsIGdzdF9zdHJlYW1fdHlwZV9n
ZXRfbmFtZSh0eXBlKSwgc3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGlmICgodHlw
ZSAmIEdTVF9TVFJFQU1fVFlQRV9BVURJTyAmJiBtX2F1ZGlvVHJhY2tzLmNvbnRhaW5zKHN0cmVh
bUlkKSkgfHwgKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfVklERU8gJiYgbV92aWRlb1RyYWNrcy5j
b250YWlucyhzdHJlYW1JZCkpCisgICAgICAgICAgICB8fCAodHlwZSAmIEdTVF9TVFJFQU1fVFlQ
RV9URVhUICYmIG1fdGV4dFRyYWNrcy5jb250YWlucyhzdHJlYW1JZCkpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICIlcyB0cmFjayB3aXRoIElE
ICVzIGFscmVhZHkgZXhpc3RzLCBza2lwcGluZyIsIGdzdF9zdHJlYW1fdHlwZV9nZXRfbmFtZSh0
eXBlKSwgc3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorCiAgICAgICAgIGlmICh0eXBlICYgR1NUX1NUUkVBTV9UWVBFX0FVRElPKQogICAg
ICAgICAgICAgQ1JFQVRFX1RSQUNLKGF1ZGlvLCBBdWRpbyk7CiAgICAgICAgIGVsc2UgaWYgKHR5
cGUgJiBHU1RfU1RSRUFNX1RZUEVfVklERU8pCkBAIC0xNTUwLDE1ICsxNTU4LDYgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVRyYWNrcygpCiAgICAgbV9wbGF5ZXIt
Pm1lZGlhRW5naW5lVXBkYXRlZCgpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6Y2xlYXJUcmFja3MoKQotewotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICBDTEVB
Ul9UUkFDS1MobV9hdWRpb1RyYWNrcywgbV9wbGF5ZXItPnJlbW92ZUF1ZGlvVHJhY2spOwotICAg
IENMRUFSX1RSQUNLUyhtX3ZpZGVvVHJhY2tzLCBtX3BsYXllci0+cmVtb3ZlVmlkZW9UcmFjayk7
Ci0gICAgQ0xFQVJfVFJBQ0tTKG1fdGV4dFRyYWNrcywgbV9wbGF5ZXItPnJlbW92ZVRleHRUcmFj
ayk7Ci0jZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQotfQotCiB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9DaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyKiBwbGF5ZXIpCiB7CiAgICAgcGxheWVyLT5tX25vdGlmaWVyLT5ub3RpZnkoTWFp
blRocmVhZE5vdGlmaWNhdGlvbjo6VmlkZW9DaGFuZ2VkLCBbcGxheWVyXSB7CkBAIC0xNTg4LDEz
ICsxNTg3LDI1IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5j
TWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgIGlmIChHU1RfTUVTU0FHRV9UWVBFKG1l
c3NhZ2UpID09IEdTVF9NRVNTQUdFX1NUUkVBTV9DT0xMRUNUSU9OICYmICFtX2lzTGVnYWN5UGxh
eWJpbikgewogICAgICAgICBHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+IGNvbGxlY3Rpb247
CiAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9jb2xsZWN0aW9uKG1lc3NhZ2UsICZj
b2xsZWN0aW9uLm91dFB0cigpKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgp
LCAiUmVjZWl2ZWQgU1RSRUFNX0NPTExFQ1RJT04gbWVzc2FnZSB3aXRoIHVwc3RyZWFtIGlkIFwi
JXNcIiBkZWZpbmluZyB0aGUgZm9sbG93aW5nIHN0cmVhbXM6IiwgZ3N0X3N0cmVhbV9jb2xsZWN0
aW9uX2dldF91cHN0cmVhbV9pZChjb2xsZWN0aW9uLmdldCgpKSk7CisgICAgICAgIHVuc2lnbmVk
IG51bVN0cmVhbXMgPSBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3NpemUoY29sbGVjdGlvbi5n
ZXQoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1TdHJlYW1zOyBpKysp
IHsKKyAgICAgICAgICAgIEdzdFN0cmVhbSogc3RyZWFtID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9u
X2dldF9zdHJlYW0oY29sbGVjdGlvbi5nZXQoKSwgaSk7CisgICAgICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKHBpcGVsaW5lKCksICIjJXUgJXMgJXMiLCBpLCBnc3Rfc3RyZWFtX3R5cGVfZ2V0X25h
bWUoZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX3R5cGUoc3RyZWFtKSksIGdzdF9zdHJlYW1fZ2V0X3N0
cmVhbV9pZChzdHJlYW0pKTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChjb2xsZWN0aW9uKSB7
Ci0gICAgICAgICAgICBtX3N0cmVhbUNvbGxlY3Rpb24uc3dhcChjb2xsZWN0aW9uKTsKLSAgICAg
ICAgICAgIG1fbm90aWZpZXItPm5vdGlmeShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpTdHJlYW1D
b2xsZWN0aW9uQ2hhbmdlZCwgW3RoaXNdIHsKLSAgICAgICAgICAgICAgICB0aGlzLT51cGRhdGVU
cmFja3MoKTsKKyAgICAgICAgICAgIG1fbm90aWZpZXItPm5vdGlmeShNYWluVGhyZWFkTm90aWZp
Y2F0aW9uOjpTdHJlYW1Db2xsZWN0aW9uQ2hhbmdlZCwgW3RoaXMsIGNvbGxlY3Rpb24gPSBXVEZN
b3ZlKGNvbGxlY3Rpb24pXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIHRoaXMtPnVwZGF0
ZVRyYWNrcyhXVEZNb3ZlKGNvbGxlY3Rpb24pKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9
CisgICAgfSBlbHNlIGlmIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdF
X1NUUkVBTVNfU0VMRUNURUQgJiYgIW1faXNMZWdhY3lQbGF5YmluKSB7CisgICAgICAgIEdTVF9E
RUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlJlY2VpdmVkIFNUUkVBTVNfU0VMRUNURUQgbWVzc2Fn
ZSBzZWxlY3RpbmcgdGhlIGZvbGxvd2luZyBzdHJlYW1zOiIpOworICAgICAgICB1bnNpZ25lZCBu
dW1TdHJlYW1zID0gZ3N0X21lc3NhZ2Vfc3RyZWFtc19zZWxlY3RlZF9nZXRfc2l6ZShtZXNzYWdl
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVN0cmVhbXM7IGkrKykgewor
ICAgICAgICAgICAgR3N0U3RyZWFtKiBzdHJlYW0gPSBnc3RfbWVzc2FnZV9zdHJlYW1zX3NlbGVj
dGVkX2dldF9zdHJlYW0obWVzc2FnZSwgaSk7CisgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHBpcGVsaW5lKCksICIjJXUgJXMgJXMiLCBpLCBnc3Rfc3RyZWFtX3R5cGVfZ2V0X25hbWUoZ3N0
X3N0cmVhbV9nZXRfc3RyZWFtX3R5cGUoc3RyZWFtKSksIGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9p
ZChzdHJlYW0pKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChHU1RfTUVTU0FHRV9UWVBF
KG1lc3NhZ2UpICE9IEdTVF9NRVNTQUdFX05FRURfQ09OVEVYVCkKQEAgLTE4OTEsNiArMTkwMiw5
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKEdzdE1l
c3NhZ2UqIG1lc3NhZ2UpCiAgICAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShj
dXJyZW50U3RhdGUpLCAnXycsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG5ld1N0YXRlKSku
dXRmOCgpOwogICAgICAgICBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFX1dJVEhfVFMoR1NUX0JJ
TihtX3BpcGVsaW5lLmdldCgpKSwgR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMLCBkb3RGaWxlTmFt
ZS5kYXRhKCkpOwogCisgICAgICAgIGlmICghbV9pc0xlZ2FjeVBsYXliaW4gJiYgY3VycmVudFN0
YXRlID09IEdTVF9TVEFURV9QQVVTRUQgJiYgbmV3U3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcp
CisgICAgICAgICAgICBwbGF5YmluM1NlbmRTZWxlY3RTdHJlYW1zSWZBcHByb3ByaWF0ZSgpOwor
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdTVF9NRVNTQUdFX0JVRkZFUklORzoK
QEAgLTIwNDAsNDUgKzIwNTQsMjIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgIGNhc2UgR1NUX01FU1NBR0VfU1RSRUFNU19TRUxFQ1RFRDogewotICAgICAgICBHUmVm
UHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+IGNvbGxlY3Rpb247Ci0gICAgICAgIGdzdF9tZXNzYWdl
X3BhcnNlX3N0cmVhbXNfc2VsZWN0ZWQobWVzc2FnZSwgJmNvbGxlY3Rpb24ub3V0UHRyKCkpOwot
Ci0gICAgICAgIGlmICghY29sbGVjdGlvbikKKyAgICAgICAgaWYgKG1faXNMZWdhY3lQbGF5Ymlu
KQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgbV9zdHJlYW1Db2xsZWN0aW9uLnN3YXAo
Y29sbGVjdGlvbik7Ci0gICAgICAgIG1fY3VycmVudEF1ZGlvU3RyZWFtSWQgPSAiIjsKLSAgICAg
ICAgbV9jdXJyZW50VmlkZW9TdHJlYW1JZCA9ICIiOwotICAgICAgICBtX2N1cnJlbnRUZXh0U3Ry
ZWFtSWQgPSAiIjsKLQotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBnc3RfbWVzc2FnZV9zdHJl
YW1zX3NlbGVjdGVkX2dldF9zaXplKG1lc3NhZ2UpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIEdSZWZQdHI8R3N0U3RyZWFtPiBz
dHJlYW0gPSBnc3RfbWVzc2FnZV9zdHJlYW1zX3NlbGVjdGVkX2dldF9zdHJlYW0obWVzc2FnZSwg
aSk7Ci0gICAgICAgICAgICBpZiAoIXN0cmVhbSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICAgICAgR3N0U3RyZWFtVHlwZSB0eXBlID0gZ3N0X3N0cmVhbV9nZXRfc3RyZWFt
X3R5cGUoc3RyZWFtLmdldCgpKTsKLSAgICAgICAgICAgIFN0cmluZyBzdHJlYW1JZChnc3Rfc3Ry
ZWFtX2dldF9zdHJlYW1faWQoc3RyZWFtLmdldCgpKSk7Ci0KLSAgICAgICAgICAgIEdTVF9ERUJV
R19PQkpFQ1QocGlwZWxpbmUoKSwgIlNlbGVjdGluZyAlcyB0cmFjayB3aXRoIElEOiAlcyIsIGdz
dF9zdHJlYW1fdHlwZV9nZXRfbmFtZSh0eXBlKSwgc3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7Ci0g
ICAgICAgICAgICAvLyBQbGF5YmluMyBjYW4gc2VuZCBtb3JlIHRoYW4gb25lIHNlbGVjdGVkIHN0
cmVhbSBvZiB0aGUgc2FtZSB0eXBlCi0gICAgICAgICAgICAvLyBidXQgdGhlcmUncyBubyBwcmlv
cml0eSBvciBvcmRlcmluZyBzeXN0ZW0gaW4gcGxhY2UsIHNvIHdlIGFzc3VtZQotICAgICAgICAg
ICAgLy8gdGhlIHNlbGVjdGVkIHN0cmVhbSBpcyB0aGUgbGFzdCBvbmUgYXMgcmVwb3J0ZWQgYnkg
cGxheWJpbjMuCi0gICAgICAgICAgICBpZiAodHlwZSAmIEdTVF9TVFJFQU1fVFlQRV9BVURJTykg
ewotICAgICAgICAgICAgICAgIG1fY3VycmVudEF1ZGlvU3RyZWFtSWQgPSBzdHJlYW1JZDsKLSAg
ICAgICAgICAgICAgICBhdXRvIHRyYWNrID0gbV9hdWRpb1RyYWNrcy5nZXQobV9jdXJyZW50QXVk
aW9TdHJlYW1JZCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHRyYWNrKTsKLSAgICAgICAgICAg
ICAgICB0cmFjay0+bWFya0FzQWN0aXZlKCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUg
JiBHU1RfU1RSRUFNX1RZUEVfVklERU8pIHsKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRWaWRl
b1N0cmVhbUlkID0gc3RyZWFtSWQ7Ci0gICAgICAgICAgICAgICAgYXV0byB0cmFjayA9IG1fdmlk
ZW9UcmFja3MuZ2V0KG1fY3VycmVudFZpZGVvU3RyZWFtSWQpOwotICAgICAgICAgICAgICAgIEFT
U0VSVCh0cmFjayk7Ci0gICAgICAgICAgICAgICAgdHJhY2stPm1hcmtBc0FjdGl2ZSgpOwotICAg
ICAgICAgICAgfSBlbHNlIGlmICh0eXBlICYgR1NUX1NUUkVBTV9UWVBFX1RFWFQpCi0gICAgICAg
ICAgICAgICAgbV9jdXJyZW50VGV4dFN0cmVhbUlkID0gc3RyZWFtSWQ7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgR1NUX1dBUk5JTkcoIlVua25vd24gc3RyZWFtIHR5cGUgd2l0
aCBzdHJlYW0taWQgJXMiLCBzdHJlYW1JZC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgfQorICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJSZWNlaXZlZCBTVFJFQU1T
X1NFTEVDVEVELCBzZXR0aW5nIG1fd2FpdGluZ0ZvclN0cmVhbXNTZWxlY3RlZEV2ZW50IHRvIGZh
bHNlLiIpOworICAgICAgICBtX3dhaXRpbmdGb3JTdHJlYW1zU2VsZWN0ZWRFdmVudCA9IGZhbHNl
OworCisgICAgICAgIC8vIFVuZm9ydHVuYXRlbHksIFNUUkVBTVNfU0VMRUNURUQgbWVzc2FnZXMg
ZnJvbSBwbGF5YmluMyBhcmUgaGlnaGx5IHVucmVsaWFibGUsIG9mdGVuIG9ubHkgaW5jbHVkaW5n
IHRoZSBhdWRpbworICAgICAgICAvLyBzdHJlYW0gb3Igb25seSB0aGUgdmlkZW8gc3RyZWFtIHdo
ZW4gYm90aCBhcmUgcHJlc2VudCBhbmQgZ29pbmcgdG8gYmUgcGxheWVkLgorICAgICAgICAvLyBU
aGVyZWZvcmUsIGluc3RlYWQgb2YgcmVhZGluZyB0aGUgZXZlbnQgZGF0YSwgd2Ugd2lsbCBqdXN0
IGFzc3VtZSBvdXIgcHJldmlvdXNseSByZXF1ZXN0ZWQgc2VsZWN0aW9uIHdhcyBob25vcmVkLgor
ICAgICAgICBtX2N1cnJlbnRBdWRpb1N0cmVhbUlkID0gbV9yZXF1ZXN0ZWRBdWRpb1N0cmVhbUlk
OworICAgICAgICBtX2N1cnJlbnRWaWRlb1N0cmVhbUlkID0gbV9yZXF1ZXN0ZWRWaWRlb1N0cmVh
bUlkOworCisgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhlIHVzZXIgbWFkZSBhIHRyYWNrIHN3
aXRjaCBiZWZvcmUgdGhlIGluaXRpYWwgU1RSRUFNU19TRUxFQ0VELiBOb3cgaXQncyBhIGdvb2Qg
bW9tZW50IHRvCisgICAgICAgIC8vIHJlcXVlc3QgaXQgYmVpbmcgYXR0ZW5kZWQuIE5vdGUgdGhh
dCBpdCdzIG5vdCBwb3NzaWJsZSB0byBzZW5kIGEgU0VMRUNUX1NUUkVBTVMgYmVmb3JlIHRoZSBm
aXJzdAorICAgICAgICAvLyBTVFJFQU1TX1NFTEVDVEVEIG1lc3NhZ2UgYmVjYXVzZSBhdCB0aGF0
IHBvaW50IHRoZSBwaXBlbGluZSBpcyBub3QgY29tcGVsZXRlbHkgY29uc3RydWN0ZWQuCisgICAg
ICAgIHBsYXliaW4zU2VuZFNlbGVjdFN0cmVhbXNJZkFwcHJvcHJpYXRlKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgpAQCAtMjY0MSw2ICsyNjMyLDEwIEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkaWRFbmQoKQogICAgIH0KIAogICAgIG1faXNFbmRS
ZWFjaGVkID0gdHJ1ZTsKKyAgICAvLyBOb3cgdGhhdCBwbGF5YmFjayBoYXMgZW5kZWQgaXQncyBO
T1QgYSBzYWZlIHRpbWUgdG8gc2VuZCBhIFNFTEVDVF9TVFJFQU1TIGV2ZW50LiBJbiBmYWN0LCBh
cyBvZiBHU3RyZWFtZXIgMS4xNiwKKyAgICAvLyBwbGF5YmluMyB3aWxsIGNyYXNoIG9uIGEgR1N0
cmVhbWVyIGFzc2VydGlvbiAoY29tYmluZS0+c2lua3BhZCBiZWluZyB1bmV4cGVjdGVkbHkgbnVs
bCkgaWYgd2UgdHJ5LiBJbnN0ZWFkLCB3YWl0CisgICAgLy8gdW50aWwgd2UgZ2V0IHRoZSBpbml0
aWFsIFNUUkVBTVNfU0VMRUNURUQgbWVzc2FnZSBvbmUgbW9yZSB0aW1lLgorICAgIG1fd2FpdGlu
Z0ZvclN0cmVhbXNTZWxlY3RlZEV2ZW50ID0gdHJ1ZTsKIAogICAgIGlmICghbV9wbGF5ZXItPmlz
TG9vcGluZygpKSB7CiAgICAgICAgIG1faXNQYXVzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IGZlODVlYTk2NGFiMTcxODAyNDIx
MmRjYjM1NGVlN2M4NGE0N2I3NzQuLjM0ZjY3ZDY2NjZkMDg3NDQwYWI1Yzg5MzBlMWI4ODdhYjc1
ZjMzZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgK
QEAgLTIyMCw3ICsyMjAsOSBAQCBwdWJsaWM6CiAgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1h
Z2VGb3JDdXJyZW50VGltZSgpIG92ZXJyaWRlOwogI2VuZGlmCiAKLSAgICB2b2lkIGVuYWJsZVRy
YWNrKFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZSwgdW5zaWduZWQgaW5kZXgp
OworICAgIHZvaWQgdXBkYXRlRW5hYmxlZFZpZGVvVHJhY2soKTsKKyAgICB2b2lkIHVwZGF0ZUVu
YWJsZWRBdWRpb1RyYWNrKCk7CisgICAgdm9pZCBwbGF5YmluM1NlbmRTZWxlY3RTdHJlYW1zSWZB
cHByb3ByaWF0ZSgpOwogCiAgICAgLy8gQXBwZW5kIHBpcGVsaW5lIGludGVyZmFjZQogICAgIC8v
IEZJWE1FOiBVc2UgdGhlIGNsaWVudCBpbnRlcmZhY2UgcGF0dGVybiwgQXBwZW5kUGlwZWxpbmUg
ZG9lcyBub3QgbmVlZCB0aGUgZnVsbCBpbnRlcmZhY2UgdG8gdGhpcyBjbGFzcyBqdXN0IGZvciB0
aGVzZSB0d28gZnVuY3Rpb25zLgpAQCAtNDYxLDggKzQ2Myw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBzZXRQbGF5YmluVVJMKGNvbnN0IFVSTCYgdXJsU3RyaW5nKTsKICAgICB2b2lkIGxvYWRGdWxs
KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHBpcGVsaW5lTmFtZSk7CiAKLSAgICB2
b2lkIHVwZGF0ZVRyYWNrcygpOwotICAgIHZvaWQgY2xlYXJUcmFja3MoKTsKKyAgICB2b2lkIHVw
ZGF0ZVRyYWNrcyhHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+JiYpOwogCiAjaWYgRU5BQkxF
KEVOQ1JZUFRFRF9NRURJQSkKICAgICBib29sIGlzQ0RNQXR0YWNoZWQoKSBjb25zdCB7IHJldHVy
biBtX2NkbUluc3RhbmNlOyB9CkBAIC01MDgsMTMgKzUwOSwxOSBAQCBwcml2YXRlOgogICAgIGJv
b2wgbV9zaG91bGRQcmVzZXJ2ZVBpdGNoIHsgZmFsc2UgfTsKICAgICBtdXRhYmxlIE9wdGlvbmFs
PFNlY29uZHM+IG1fbGFzdFF1ZXJ5VGltZTsKICAgICBib29sIG1faXNMZWdhY3lQbGF5YmluOwot
ICAgIEdSZWZQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4gbV9zdHJlYW1Db2xsZWN0aW9uOwogI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgUmVmUHRyPE1lZGlhU3RyZWFtUHJpdmF0ZT4gbV9z
dHJlYW1Qcml2YXRlOwogI2VuZGlmCi0gICAgU3RyaW5nIG1fY3VycmVudEF1ZGlvU3RyZWFtSWQ7
Ci0gICAgU3RyaW5nIG1fY3VycmVudFZpZGVvU3RyZWFtSWQ7Ci0gICAgU3RyaW5nIG1fY3VycmVu
dFRleHRTdHJlYW1JZDsKKworICAgIC8vIHBsYXliaW4zIG9ubHk6CisgICAgYm9vbCBtX3dhaXRp
bmdGb3JTdHJlYW1zU2VsZWN0ZWRFdmVudCB7IHRydWUgfTsKKyAgICBBdG9tU3RyaW5nIG1fY3Vy
cmVudEF1ZGlvU3RyZWFtSWQ7IC8vIEN1cnJlbnRseSBwbGF5aW5nLgorICAgIEF0b21TdHJpbmcg
bV9jdXJyZW50VmlkZW9TdHJlYW1JZDsKKyAgICBBdG9tU3RyaW5nIG1fd2FudGVkQXVkaW9TdHJl
YW1JZDsgLy8gU2V0IGluIEphdmFTY3JpcHQuCisgICAgQXRvbVN0cmluZyBtX3dhbnRlZFZpZGVv
U3RyZWFtSWQ7CisgICAgQXRvbVN0cmluZyBtX3JlcXVlc3RlZEF1ZGlvU3RyZWFtSWQ7IC8vIEV4
cGVjdGVkIGluIHRoZSBuZXh0IFNUUkVBTVNfU0VMRUNURUQgbWVzc2FnZS4KKyAgICBBdG9tU3Ry
aW5nIG1fcmVxdWVzdGVkVmlkZW9TdHJlYW1JZDsKKwogI2lmIEVOQUJMRShXRUJfQVVESU8pCiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXI+IG1fYXVkaW9T
b3VyY2VQcm92aWRlcjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VH
U3RyZWFtZXIuY3BwCmluZGV4IGRmNzA1Yjk0OTcxZDAyNjAwZWFjMjAxN2IxYjE1MGVhYjMwODQ2
OTEuLjc1OWY5Yzc4ZDE2OTU2ZGRjOWUzNmZlODdlYzYzNTllOGRlNzEyMzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UcmFja1ByaXZhdGVC
YXNlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5jcHAKQEAgLTUxLDcgKzUxLDYgQEAg
VHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcihUcmFj
a1ByaXZhdGVCYXNlKiBvd25lciwgZ2kKIHsKICAgICBBU1NFUlQobV9wYWQpOwogCi0gICAgZ19z
aWduYWxfY29ubmVjdF9zd2FwcGVkKG1fcGFkLmdldCgpLCAibm90aWZ5OjphY3RpdmUiLCBHX0NB
TExCQUNLKGFjdGl2ZUNoYW5nZWRDYWxsYmFjayksIHRoaXMpOwogICAgIGdfc2lnbmFsX2Nvbm5l
Y3Rfc3dhcHBlZChtX3BhZC5nZXQoKSwgIm5vdGlmeTo6dGFncyIsIEdfQ0FMTEJBQ0sodGFnc0No
YW5nZWRDYWxsYmFjayksIHRoaXMpOwogCiAgICAgLy8gV2UgY2FuJ3QgY2FsbCBub3RpZnlUcmFj
a09mVGFnc0NoYW5nZWQoKSBkaXJlY3RseSwgYmVjYXVzZSB3ZSBuZWVkIHRhZ3NDaGFuZ2VkKCkg
dG8gc2V0dXAgbV90YWdzLgpAQCAtOTIsMTEgKzkxLDYgQEAgdm9pZCBUcmFja1ByaXZhdGVCYXNl
R1N0cmVhbWVyOjpkaXNjb25uZWN0KCkKICAgICBtX3BhZC5jbGVhcigpOwogfQogCi12b2lkIFRy
YWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OmFjdGl2ZUNoYW5nZWRDYWxsYmFjayhUcmFja1ByaXZh
dGVCYXNlR1N0cmVhbWVyKiB0cmFjaykKLXsKLSAgICB0cmFjay0+bV9ub3RpZmllci0+bm90aWZ5
KE1haW5UaHJlYWROb3RpZmljYXRpb246OkFjdGl2ZUNoYW5nZWQsIFt0cmFja10geyB0cmFjay0+
bm90aWZ5VHJhY2tPZkFjdGl2ZUNoYW5nZWQoKTsgfSk7Ci19Ci0KIHZvaWQgVHJhY2tQcml2YXRl
QmFzZUdTdHJlYW1lcjo6dGFnc0NoYW5nZWRDYWxsYmFjayhUcmFja1ByaXZhdGVCYXNlR1N0cmVh
bWVyKiB0cmFjaykKIHsKICAgICB0cmFjay0+dGFnc0NoYW5nZWQoKTsKQEAgLTEyNSwxOCArMTE5
LDYgQEAgdm9pZCBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjp0YWdzQ2hhbmdlZCgpCiAgICAg
bV9ub3RpZmllci0+bm90aWZ5KE1haW5UaHJlYWROb3RpZmljYXRpb246OlRhZ3NDaGFuZ2VkLCBb
dGhpc10geyBub3RpZnlUcmFja09mVGFnc0NoYW5nZWQoKTsgfSk7CiB9CiAKLXZvaWQgVHJhY2tQ
cml2YXRlQmFzZUdTdHJlYW1lcjo6bm90aWZ5VHJhY2tPZkFjdGl2ZUNoYW5nZWQoKQotewotICAg
IGlmICghbV9wYWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdib29sZWFuIGFjdGl2ZSA9IGZh
bHNlOwotICAgIGlmIChnX29iamVjdF9jbGFzc19maW5kX3Byb3BlcnR5KEdfT0JKRUNUX0dFVF9D
TEFTUyhtX3BhZC5nZXQoKSksICJhY3RpdmUiKSkKLSAgICAgICAgZ19vYmplY3RfZ2V0KG1fcGFk
LmdldCgpLCAiYWN0aXZlIiwgJmFjdGl2ZSwgbnVsbHB0cik7Ci0KLSAgICBzZXRBY3RpdmUoYWN0
aXZlKTsKLX0KLQogYm9vbCBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpnZXRMYW5ndWFnZUNv
ZGUoR3N0VGFnTGlzdCogdGFncywgQXRvbVN0cmluZyYgdmFsdWUpCiB7CiAgICAgU3RyaW5nIGxh
bmd1YWdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmgKaW5kZXgg
ZGNkOGIzNTQ3NDI0NDk5NDA4NGE0YmU4YjFlYTE4NjZjNjg2OWVkNy4uZThmYWI1ZGMyNDJkNDY2
ZTkyODUxZWY0MTlkMzkxZjc4OTNkYjg1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVHJhY2tQcml2YXRl
QmFzZUdTdHJlYW1lci5oCkBAIC02NSwxMSArNjUsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgVHJhY2tQ
cml2YXRlQmFzZUdTdHJlYW1lcihUcmFja1ByaXZhdGVCYXNlKiBvd25lciwgZ2ludCBpbmRleCwg
R1JlZlB0cjxHc3RQYWQ+KTsKICAgICBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyKFRyYWNrUHJp
dmF0ZUJhc2UqIG93bmVyLCBnaW50IGluZGV4LCBHUmVmUHRyPEdzdFN0cmVhbT4pOwogCi0gICAg
dm9pZCBub3RpZnlUcmFja09mQWN0aXZlQ2hhbmdlZCgpOwogICAgIHZvaWQgbm90aWZ5VHJhY2tP
ZlRhZ3NDaGFuZ2VkKCk7CiAKICAgICBlbnVtIE1haW5UaHJlYWROb3RpZmljYXRpb24gewotICAg
ICAgICBBY3RpdmVDaGFuZ2VkID0gMSA8PCAwLAogICAgICAgICBUYWdzQ2hhbmdlZCA9IDEgPDwg
MSwKICAgICAgICAgTmV3U2FtcGxlID0gMSA8PCAyLAogICAgICAgICBTdHJlYW1DaGFuZ2VkID0g
MSA8PCAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcApp
bmRleCA2NzY2YWI1Zjk1NWUxNjRhM2E1MTljM2ViZWQ3MDdmMTJiMzI3ZjA2Li5mNmIyMjIwZjEy
NzRkYTZlZDBhYmFjZmIzZDZlYmU1YjE5NmFjNTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRl
b1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTQwLDcgKzQwLDYgQEAgVmlkZW9UcmFja1By
aXZhdGVHU3RyZWFtZXI6OlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyKFdlYWtQdHI8TWVkaWFQ
bGF5ZXJQcml2YXQKIHsKICAgICAvLyBGSVhNRTogR2V0IGEgcmVhbCBJRCBmcm9tIHRoZSB0a2hk
IGF0b20uCiAgICAgbV9pZCA9ICJWIiArIFN0cmluZzo6bnVtYmVyKGluZGV4KTsKLSAgICBub3Rp
ZnlUcmFja09mQWN0aXZlQ2hhbmdlZCgpOwogfQogCiBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1l
cjo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIoV2Vha1B0cjxNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI+IHBsYXllciwgZ2ludCBpbmRleCwgR1JlZlB0cjxHc3RTdHJlYW0+IHN0cmVhbSkK
QEAgLTU2LDkgKzU1LDYgQEAgVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OlZpZGVvVHJhY2tQ
cml2YXRlR1N0cmVhbWVyKFdlYWtQdHI8TWVkaWFQbGF5ZXJQcml2YXQKICAgICB9CiAKICAgICBt
X2lkID0gZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2lkKHN0cmVhbS5nZXQoKSk7Ci0gICAgaWYgKGdz
dF9zdHJlYW1fZ2V0X3N0cmVhbV9mbGFncyhzdHJlYW0uZ2V0KCkpICYgR1NUX1NUUkVBTV9GTEFH
X1NFTEVDVCkKLSAgICAgICAgbWFya0FzQWN0aXZlKCk7Ci0gICAgbm90aWZ5VHJhY2tPZkFjdGl2
ZUNoYW5nZWQoKTsKIH0KIAogVmlkZW9UcmFja1ByaXZhdGU6OktpbmQgVmlkZW9UcmFja1ByaXZh
dGVHU3RyZWFtZXI6OmtpbmQoKSBjb25zdApAQCAtNzUsMTkgKzcxLDE0IEBAIHZvaWQgVmlkZW9U
cmFja1ByaXZhdGVHU3RyZWFtZXI6OmRpc2Nvbm5lY3QoKQogICAgIFRyYWNrUHJpdmF0ZUJhc2VH
U3RyZWFtZXI6OmRpc2Nvbm5lY3QoKTsKIH0KIAotdm9pZCBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJl
YW1lcjo6bWFya0FzQWN0aXZlKCkKLXsKLSAgICBWaWRlb1RyYWNrUHJpdmF0ZTo6c2V0U2VsZWN0
ZWQodHJ1ZSk7Ci19Ci0KIHZvaWQgVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OnNldFNlbGVj
dGVkKGJvb2wgc2VsZWN0ZWQpCiB7CiAgICAgaWYgKHNlbGVjdGVkID09IHRoaXMtPnNlbGVjdGVk
KCkpCiAgICAgICAgIHJldHVybjsKICAgICBWaWRlb1RyYWNrUHJpdmF0ZTo6c2V0U2VsZWN0ZWQo
c2VsZWN0ZWQpOwogCi0gICAgaWYgKHNlbGVjdGVkICYmIG1fcGxheWVyKQotICAgICAgICBtX3Bs
YXllci0+ZW5hYmxlVHJhY2soVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlOjpW
aWRlbywgbV9pbmRleCk7CisgICAgaWYgKG1fcGxheWVyKQorICAgICAgICBtX3BsYXllci0+dXBk
YXRlRW5hYmxlZFZpZGVvVHJhY2soKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVv
VHJhY2tQcml2YXRlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaAppbmRleCA0YWYyZThhODdl
NDM5YTYzZGJmYzhmYjY0Zjg5NThiMzZhZTRjYjQ2Li5hOTgxNjNkMWY3MWI3NDY2MzY2OTA4NmFl
MmUyYzI4NDdlZjY2NGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9UcmFja1ByaXZhdGVHU3Ry
ZWFtZXIuaApAQCAtNTMsNyArNTMsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRpc2Nvbm5lY3Qo
KSBvdmVycmlkZTsKIAotICAgIHZvaWQgbWFya0FzQWN0aXZlKCk7CiAgICAgdm9pZCBzZXRTZWxl
Y3RlZChib29sKSBvdmVycmlkZTsKICAgICB2b2lkIHNldEFjdGl2ZShib29sIGVuYWJsZWQpIG92
ZXJyaWRlIHsgc2V0U2VsZWN0ZWQoZW5hYmxlZCk7IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399125</attachid>
            <date>2020-05-12 06:48:11 -0700</date>
            <delta_ts>2020-05-14 02:17:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211623-20200512154809.patch</filename>
            <type>text/plain</type>
            <size>32125</size>
            <attacher name="Alicia Boya García">aboya</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxNTUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzQ1NTI1NWMzNDY3YmZk
N2Q5M2VkZDE5YTZmNThjZTVmZTUyZTg5ZS4uZDBkODcwZjEwMzYzZTJmZWIyOTEzNWViMDQyMDBh
ZDkzZjMyYmVmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDIwLTA1LTA2ICBBbGlj
aWEgQm95YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBQbGF5YmluMyB0cmFjayBzd2l0Y2ggcmV3b3JrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTE2MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHJld29ya3MgaG93IHRyYWNrIHNlbGVj
dGlvbiBhbmQgcmVwb3J0aW5nIG9mIHNlbGVjdGVkCisgICAgICAgIHRyYWNrcyBpcyBkb25lIGlu
IHRoZSBwbGF5ZXIuCisKKyAgICAgICAgVGhlIGZvbGxvd2luZyBmb3VuZCBsaW1pdGF0aW9ucyBh
bmQgYXNzdW1wdGlvbnMgaW4gY3VycmVudCBHU3RyZWFtZXIKKyAgICAgICAgaGF2ZSBpbmZvcm1l
ZCB0aGlzIHBhdGNoOgorCisgICAgICAgIGEpIEFsdGhvdWdoIHRoZSBBUEkgZm9yIHBsYXliaW4z
IGlzIGRlc2lnbmVkIHRvIGJlIGFibGUgdG8gYWNjZXB0IGFueQorICAgICAgICBudW1iZXIgb2Yg
dHJhY2tzIG9mIGFueSBraW5kLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gcHJhY3RpY2UuCisK
KyAgICAgICAgYikgVGhlIGZpcnN0IHRyYWNrIG9mIGVhY2ggdHlwZSBpcyBhbHdheXMgc2VsZWN0
ZWQuIEV2ZW4gaW4gcGxheWJpbjMKKyAgICAgICAgbW9kZSwgbG9va2luZyBmb3IgR1NUX1NUUkVB
TV9GTEFHX1NFTEVDVCBpcyBub3QgYSByZWxpYWJsZSBtZXRob2QsIGFzCisgICAgICAgIGluIG1v
c3QgY2FzZXMgdGhlIGRlbXV4ZXIgZG9lcyBub3Qgc2V0IGl0IGF0IGFsbC4gW3F0ZGVtdXggbmV2
ZXIgc2V0cworICAgICAgICBpdCBhdCBhbGwsIGFuZCBtYXRyb3NrYWRlbXV4IG9ubHkgc2V0cyBp
dCBpbiBjZXJ0YWluIGNhc2VzLl0KKworICAgICAgICBjKSBTZW5kaW5nIEdTVF9FVkVOVF9TRUxF
Q1RfU1RSRUFNUyBpcyBvbmx5IHNhZmUgYXQgY2VydGFpbiBtb21lbnRzLgorICAgICAgICBJdCdz
IG5vdCBzYWZlIGJlZm9yZSBwcmUtcm9sbCwgYWZ0ZXIgRU9TIG9yIGR1cmluZyB0aGUgaGFuZGxp
bmcgb2YKKyAgICAgICAgYW5vdGhlciBTRUxFQ1RfU1RSRUFNUy4KKworICAgICAgICBkKSBTZWxl
Y3RpbmcgdGV4dCB0cmFja3Mgd2l0aCBwbGF5YmluIEFQSXMgaXMgbm90IHJlbGV2YW50LiBBbGwg
dGV4dAorICAgICAgICB0cmFja3MgYXJlIGFscmVhZHkgYmVpbmcgcGlja2VkIGJ5IFdlYktpdFRl
eHRDb21iaW5lciwgdW5hZmZlY3RlZCBieQorICAgICAgICBwbGF5YmluIHRyYWNrIHNlbGVjdGlv
bi4KKworICAgICAgICBlKSBUcmFja3MgcmVxdWVzdGVkIGluIGEgR1NUX0VWRU5UX1NFTEVDVF9T
VFJFQU1TIGFyZSBldmVudHVhbGx5CisgICAgICAgIHNlbGVjdGVkLiBPbiB0aGUgb3RoZXIgaGFu
ZCwgIGxvb2tpbmcgYXQKKyAgICAgICAgR1NUX01FU1NBR0VfU1RSRUFNU19TRUxFQ1RFRCdzIGNv
bnRlbnQgaXMgbm90IHJlbGlhYmxlLCBhcyB0aGlzIGhhcworICAgICAgICBiZWVuIHNlZW4gdG8g
bWlzcyB0cmFja3MgZGVwZW5kaW5nIG9uIHRocmVhZCBsdWNrLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggdGFrZXMgdGhlIHBvaW50cyBhYm92ZSBpbnRvIGFjY291bnQgdG8gcmV3b3JrIGhvdyB0cmFj
aworICAgICAgICBzZWxlY3Rpb24gaXMgaGFuZGxlZCBpbiBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIgYW5kIGZpeCB0aGUKKyAgICAgICAgZm9sbG93aW5nIGlzc3VlczoKKworICAgICAgICAx
KSBJbiBwbGF5YmluMyBtb2RlLCBubyB0cmFjayB3YXMgbWFya2VkIGFzIHNlbGVjdGVkIGluaXRp
YWxseSwKKyAgICAgICAgYmVjYXVzZSBvZiByZWxpYW5jZSBvbiBHU1RfU1RSRUFNX0ZMQUdfU0VM
RUNULgorCisgICAgICAgIDIpIEluIHBsYXliaW4yIG1vZGUsIHNvbWV0aW1lcyB0cmFja3Mgd291
bGQgbm90IGJlIGluaXRpYWxseSBtYXJrZWQgYXMKKyAgICAgICAgc2VsZWN0ZWQuIFRoaXMgb2Nj
dXJyZWQgYmVjYXVzZSBvZiByZWxpYW5jZSBvbiB0aGUgInNlbGVjdGVkIiBwcm9wZXJ0eQorICAg
ICAgICBpbiBpbnB1dHNlbGVjdG9yIHNpbmtwYWRzLCB3aG9zZSBpbml0aWFsaXphdGlvbiBpcyBy
YWN5IC0tIGl0IGNhbgorICAgICAgICBvY2N1ciBhZnRlciB0aGUgdHJhY2sgaGFzIGJlZW4gYWRk
ZWQgYW5kIHBpY2tlZCB1cCBieSBXZWJLaXQuCisKKyAgICAgICAgMykgSW4gcGxheWJpbjMgbW9k
ZSwgdGhlIGxpbWl0YXRpb25zIGV4cGxhaW5lZCBiZWZvcmUgaGFzIGJlZW4gaG9ub3JlZAorICAg
ICAgICB0byBtYWtlIHRyYWNrIHNlbGVjdGlvbiBzdGFibGUsIGRlbGF5aW5nIFNFTEVDVF9TVFJF
QU1TIGV2ZW50cyB1bnRpbAorICAgICAgICB0aGV5IGFyZSBzYWZlIHRvIHNlbmQuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBzaWduaWZpY2F0aXZlIGJlaGF2aW9yIGNo
YW5nZXMsIHJhdGhlcgorICAgICAgICBhaW1pbmcgZm9yIGltcHJvdmluZyB0aGUgc3RhYmlsaXRp
dHkgb2YgdGhlIHBsYXllci4gRXhpc3RpbmcgdGVzdHMKKyAgICAgICAgc2hvdWxkIHByb3ZpZGUg
ZW5vdWdoIGNvdmVyYWdlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcik6CisgICAg
ICAgIChXZWJDb3JlOjpBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6c2V0RW5hYmxlZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0F1ZGlvVHJhY2tQcml2YXRlR1N0
cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZkF1ZGlvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlRW5hYmxlZFZp
ZGVvVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
Ojp1cGRhdGVFbmFibGVkQXVkaW9UcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnBsYXliaW4zU2VuZFNlbGVjdFN0cmVhbXNJZkFwcHJvcHJpYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRl
VHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
aGFuZGxlU3luY01lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6ZGlkRW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tQcml2YXRlQmFz
ZUdTdHJlYW1lcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNr
UHJpdmF0ZUJhc2VHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpzZXRTZWxlY3Rl
ZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvVHJhY2tQcml2
YXRlR1N0cmVhbWVyLmg6CisKIDIwMjAtMDUtMTIgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBw
bGUuY29tPgogCiAgICAgICAgIEludHJvZHVjZSBhIFJlYWx0aW1lTWVkaWFTb3VyY2UgdmlkZW8g
c2FtcGxlIG9ic2VydmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVh
bWVyLmNwcAppbmRleCBhNDU2YWY2NGFmMTNiYTEwMDdmYjQ4ZDNlZmEyNDJhNTdjYWY2YWU3Li5i
NzQ4ODY0MDVlOTQwNDczNmUzMWYyYmM5MWVlMWE3NTQ2YjFkZjE5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvQXVkaW9UcmFja1ByaXZhdGVH
U3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9BdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTQwLDcgKzQwLDYgQEAgQXVk
aW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyKFdlYWtQ
dHI8TWVkaWFQbGF5ZXJQcml2YXQKIHsKICAgICAvLyBGSVhNRTogR2V0IGEgcmVhbCBJRCBmcm9t
IHRoZSB0a2hkIGF0b20uCiAgICAgbV9pZCA9ICJBIiArIFN0cmluZzo6bnVtYmVyKGluZGV4KTsK
LSAgICBub3RpZnlUcmFja09mQWN0aXZlQ2hhbmdlZCgpOwogfQogCiBBdWRpb1RyYWNrUHJpdmF0
ZUdTdHJlYW1lcjo6QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIoV2Vha1B0cjxNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI+IHBsYXllciwgZ2ludCBpbmRleCwgR1JlZlB0cjxHc3RTdHJlYW0+
IHN0cmVhbSkKQEAgLTU2LDEwICs1NSw2IEBAIEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpB
dWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcihXZWFrUHRyPE1lZGlhUGxheWVyUHJpdmF0CiAgICAg
fQogCiAgICAgbV9pZCA9IGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0uZ2V0KCkpOwot
ICAgIGlmIChnc3Rfc3RyZWFtX2dldF9zdHJlYW1fZmxhZ3Moc3RyZWFtLmdldCgpKSAmIEdTVF9T
VFJFQU1fRkxBR19TRUxFQ1QpCi0gICAgICAgIG1hcmtBc0FjdGl2ZSgpOwotCi0gICAgbm90aWZ5
VHJhY2tPZkFjdGl2ZUNoYW5nZWQoKTsKIH0KIAogQXVkaW9UcmFja1ByaXZhdGU6OktpbmQgQXVk
aW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OmtpbmQoKSBjb25zdApAQCAtNzYsMTkgKzcxLDE0IEBA
IHZvaWQgQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OmRpc2Nvbm5lY3QoKQogICAgIFRyYWNr
UHJpdmF0ZUJhc2VHU3RyZWFtZXI6OmRpc2Nvbm5lY3QoKTsKIH0KIAotdm9pZCBBdWRpb1RyYWNr
UHJpdmF0ZUdTdHJlYW1lcjo6bWFya0FzQWN0aXZlKCkKLXsKLSAgICBBdWRpb1RyYWNrUHJpdmF0
ZTo6c2V0RW5hYmxlZCh0cnVlKTsKLX0KLQogdm9pZCBBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1l
cjo6c2V0RW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgaWYgKGVuYWJsZWQgPT0gdGhpcy0+
ZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgQXVkaW9UcmFja1ByaXZhdGU6OnNldEVu
YWJsZWQoZW5hYmxlZCk7CiAKLSAgICBpZiAoZW5hYmxlZCAmJiBtX3BsYXllcikKLSAgICAgICAg
bV9wbGF5ZXItPmVuYWJsZVRyYWNrKFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlw
ZTo6QXVkaW8sIG1faW5kZXgpOworICAgIGlmIChtX3BsYXllcikKKyAgICAgICAgbV9wbGF5ZXIt
PnVwZGF0ZUVuYWJsZWRBdWRpb1RyYWNrKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9B
dWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggNzBiNmIw
MmZlOTlhYjFjYjA0NmZiZGYzNzY1MWJkMDgzM2U3ZWIxOC4uNDcyZDIwNjFkMWU3NmQyYjhiODI5
ZWY0YmNkNjhjMTJkMDI2MjFkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0F1ZGlvVHJhY2tQcml2YXRl
R1N0cmVhbWVyLmgKQEAgLTUzLDcgKzUzLDYgQEAgcHVibGljOgogICAgIHZvaWQgZGlzY29ubmVj
dCgpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpIG92ZXJyaWRlOwotICAg
IHZvaWQgbWFya0FzQWN0aXZlKCk7CiAgICAgdm9pZCBzZXRBY3RpdmUoYm9vbCBlbmFibGVkKSBv
dmVycmlkZSB7IHNldEVuYWJsZWQoZW5hYmxlZCk7IH0KIAogICAgIGludCB0cmFja0luZGV4KCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9pbmRleDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCA3MDVlOGM0YjI2ZWIzN2MzYWM1ZTVl
MjdmZTg1NzQyY2ZlZDk0YWYzLi42YzZjYWY0YzFmYzMwMTE1MDM1ZGYyMDIzYmUwZThjODdiZTJm
MDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNw
cApAQCAtMTA1LDExICsxMDUsMTQgQEAKICNkZWZpbmUgQ1JFQVRFX1RSQUNLKHR5cGUsIFR5cGUp
IEdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgbV9oYXMj
I1R5cGUgPSB0cnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKICAgICAgICAgaWYgKCF1c2VNZWRpYVNvdXJjZSkgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFJlZlB0cjxUeXBlIyNUcmFja1ByaXZh
dGVHU3RyZWFtZXI+IHRyYWNrID0gVHlwZSMjVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUo
bWFrZVdlYWtQdHIoKnRoaXMpLCBpLCBzdHJlYW0pOyBcCisgICAgICAgICAgICBSZWZQdHI8VHlw
ZSMjVHJhY2tQcml2YXRlR1N0cmVhbWVyPiB0cmFjayA9IFR5cGUjI1RyYWNrUHJpdmF0ZUdTdHJl
YW1lcjo6Y3JlYXRlKG1ha2VXZWFrUHRyKCp0aGlzKSwgdHlwZSMjVHJhY2tJbmRleCsrLCBzdHJl
YW0pOyBcCisgICAgICAgICAgICBpZiAoIXRyYWNrLT50cmFja0luZGV4KCkpIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgdHJhY2stPnNldEFjdGl2
ZSh0cnVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAg
ICAgbV93YW50ZWQjI1R5cGUjI1N0cmVhbUlkID0gdHJhY2stPmlkKCk7ICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICAgICAgbV9yZXF1ZXN0ZWQjI1R5cGUjI1N0cmVhbUlkID0gdHJhY2st
PmlkKCk7ICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBtXyMj
dHlwZSMjVHJhY2tzLmFkZCh0cmFjay0+aWQoKSwgdHJhY2spOyAgICAgICAgICAgICAgICAgICBc
CiAgICAgICAgICAgICBtX3BsYXllci0+YWRkIyNUeXBlIyNUcmFjaygqdHJhY2spOyAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAoZ3N0X3N0cmVhbV9nZXRfc3RyZWFt
X2ZsYWdzKHN0cmVhbS5nZXQoKSkgJiBHU1RfU1RSRUFNX0ZMQUdfU0VMRUNUKSBcCi0gICAgICAg
ICAgICAgICAgbV9jdXJyZW50IyNUeXBlIyNTdHJlYW1JZCA9IFN0cmluZyhnc3Rfc3RyZWFtX2dl
dF9zdHJlYW1faWQoc3RyZWFtLmdldCgpKSk7IFwKICAgICAgICAgfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9IEdf
U1RNVF9FTkQKIApAQCAtMTA3NCw2ICsxMDc3LDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVmlkZW8oKQogICAgICAgICB9CiAKICAgICAgICAgYXV0
byB0cmFjayA9IFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobWFrZVdlYWtQdHIo
KnRoaXMpLCBpLCBwYWQpOworICAgICAgICBpZiAoIXRyYWNrLT50cmFja0luZGV4KCkpCisgICAg
ICAgICAgICB0cmFjay0+c2V0QWN0aXZlKHRydWUpOwogICAgICAgICBBU1NFUlQoc3RyZWFtSWQg
PT0gdHJhY2stPmlkKCkpOwogICAgICAgICBtX3ZpZGVvVHJhY2tzLmFkZChzdHJlYW1JZCwgdHJh
Y2suY29weVJlZigpKTsKICAgICAgICAgbV9wbGF5ZXItPmFkZFZpZGVvVHJhY2sodHJhY2suZ2V0
KCkpOwpAQCAtMTE0OCw2ICsxMTUzLDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6Om5vdGlmeVBsYXllck9mQXVkaW8oKQogICAgICAgICB9CiAKICAgICAgICAgYXV0byB0cmFj
ayA9IEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobWFrZVdlYWtQdHIoKnRoaXMp
LCBpLCBwYWQpOworICAgICAgICBpZiAoIXRyYWNrLT50cmFja0luZGV4KCkpCisgICAgICAgICAg
ICB0cmFjay0+c2V0QWN0aXZlKHRydWUpOwogICAgICAgICBBU1NFUlQoc3RyZWFtSWQgPT0gdHJh
Y2stPmlkKCkpOwogICAgICAgICBtX2F1ZGlvVHJhY2tzLmFkZChzdHJlYW1JZCwgdHJhY2spOwog
ICAgICAgICBtX3BsYXllci0+YWRkQXVkaW9UcmFjaygqdHJhY2spOwpAQCAtMTQyMywxMTAgKzE0
MzAsMTExIEBAIE1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXliYWNr
UG9zaXRpb24oKSBjb25zdAogICAgIHJldHVybiBwbGF5YmFja1Bvc2l0aW9uOwogfQogCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZW5hYmxlVHJhY2soVHJhY2tQcml2YXRlQmFz
ZUdTdHJlYW1lcjo6VHJhY2tUeXBlIHRyYWNrVHlwZSwgdW5zaWduZWQgaW5kZXgpCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlRW5hYmxlZFZpZGVvVHJhY2soKQogewot
ICAgIC8vIEZJWE1FOiBSZW1vdmUgaXNNZWRpYVNvdXJjZSgpIHRlc3QgYmVsb3cgd2hlbiBmaXhp
bmcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjUzMS4KLSAgICBp
ZiAoaXNNZWRpYVNvdXJjZSgpKSB7Ci0gICAgICAgIEdTVF9GSVhNRV9PQkpFQ1QobV9waXBlbGlu
ZS5nZXQoKSwgIkF1ZGlvL1ZpZGVvL1RleHQgdHJhY2sgc3dpdGNoaW5nIGlzIG5vdCB5ZXQgc3Vw
cG9ydGVkIGJ5IHRoZSBNU0UgYmFja2VuZC4iKTsKLSAgICAgICAgcmV0dXJuOworICAgIFZpZGVv
VHJhY2tQcml2YXRlR1N0cmVhbWVyKiB3YW50ZWRUcmFjayA9IG51bGxwdHI7CisgICAgZm9yIChh
dXRvJiBwYWlyIDogbV92aWRlb1RyYWNrcykgeworICAgICAgICBWaWRlb1RyYWNrUHJpdmF0ZUdT
dHJlYW1lciogdHJhY2sgPSBwYWlyLnZhbHVlLmdldCgpOworICAgICAgICBpZiAodHJhY2stPnNl
bGVjdGVkKCkpIHsKKyAgICAgICAgICAgIHdhbnRlZFRyYWNrID0gdHJhY2s7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGNvbnN0IGNoYXIqIHByb3BlcnR5TmFt
ZTsKLSAgICBjb25zdCBjaGFyKiB0cmFja1R5cGVBc1N0cmluZzsKLSAgICBWZWN0b3I8U3RyaW5n
PiBzZWxlY3RlZFN0cmVhbXM7Ci0gICAgU3RyaW5nIHNlbGVjdGVkU3RyZWFtSWQ7Ci0KLSAgICBH
c3RTdHJlYW0qIHN0cmVhbSA9IG51bGxwdHI7CisgICAgLy8gTm8gYWN0aXZlIHRyYWNrLCBubyBj
aGFuZ2VzLgorICAgIGlmICghd2FudGVkVHJhY2spCisgICAgICAgIHJldHVybjsKIAotICAgIGlm
ICghbV9pc0xlZ2FjeVBsYXliaW4pIHsKLSAgICAgICAgc3RyZWFtID0gZ3N0X3N0cmVhbV9jb2xs
ZWN0aW9uX2dldF9zdHJlYW0obV9zdHJlYW1Db2xsZWN0aW9uLmdldCgpLCBpbmRleCk7Ci0gICAg
ICAgIGlmICghc3RyZWFtKSB7Ci0gICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QocGlwZWxp
bmUoKSwgIk5vIHN0cmVhbSB0byBzZWxlY3QgYXQgaW5kZXggJXUiLCBpbmRleCk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgc2VsZWN0ZWRTdHJlYW1JZCA9IFN0cmlu
Zzo6ZnJvbVVURjgoZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2lkKHN0cmVhbSkpOwotICAgICAgICBz
ZWxlY3RlZFN0cmVhbXMuYXBwZW5kKHNlbGVjdGVkU3RyZWFtSWQpOworICAgIGlmIChtX2lzTGVn
YWN5UGxheWJpbikgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCks
ICJTZXR0aW5nIHBsYXliaW4yIGN1cnJlbnQtdmlkZW89JWQiLCB3YW50ZWRUcmFjay0+dHJhY2tJ
bmRleCgpKTsKKyAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCksICJjdXJyZW50
LXZpZGVvIiwgd2FudGVkVHJhY2stPnRyYWNrSW5kZXgoKSwgbnVsbHB0cik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgbV93YW50ZWRWaWRlb1N0cmVhbUlkID0gd2FudGVkVHJhY2stPmlkKCk7Cisg
ICAgICAgIHBsYXliaW4zU2VuZFNlbGVjdFN0cmVhbXNJZkFwcHJvcHJpYXRlKCk7CiAgICAgfQor
fQogCi0gICAgc3dpdGNoICh0cmFja1R5cGUpIHsKLSAgICBjYXNlIFRyYWNrUHJpdmF0ZUJhc2VH
U3RyZWFtZXI6OlRyYWNrVHlwZTo6QXVkaW86Ci0gICAgICAgIHByb3BlcnR5TmFtZSA9ICJjdXJy
ZW50LWF1ZGlvIjsKLSAgICAgICAgdHJhY2tUeXBlQXNTdHJpbmcgPSAiYXVkaW8iOwotICAgICAg
ICBpZiAoIXNlbGVjdGVkU3RyZWFtSWQuaXNFbXB0eSgpICYmIHNlbGVjdGVkU3RyZWFtSWQgPT0g
bV9jdXJyZW50QXVkaW9TdHJlYW1JZCkgewotICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBp
cGVsaW5lKCksICIlcyBzdHJlYW06ICVzIGFscmVhZHkgc2VsZWN0ZWQsIG5vdCBkb2luZyBhbnl0
aGluZy4iLCB0cmFja1R5cGVBc1N0cmluZywgc2VsZWN0ZWRTdHJlYW1JZC51dGY4KCkuZGF0YSgp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbV9jdXJy
ZW50VGV4dFN0cmVhbUlkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHNlbGVjdGVkU3RyZWFtcy5h
cHBlbmQobV9jdXJyZW50VGV4dFN0cmVhbUlkKTsKLSAgICAgICAgaWYgKCFtX2N1cnJlbnRWaWRl
b1N0cmVhbUlkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHNlbGVjdGVkU3RyZWFtcy5hcHBlbmQo
bV9jdXJyZW50VmlkZW9TdHJlYW1JZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVHJhY2tQ
cml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlOjpWaWRlbzoKLSAgICAgICAgcHJvcGVydHlO
YW1lID0gImN1cnJlbnQtdmlkZW8iOwotICAgICAgICB0cmFja1R5cGVBc1N0cmluZyA9ICJ2aWRl
byI7Ci0gICAgICAgIGlmICghc2VsZWN0ZWRTdHJlYW1JZC5pc0VtcHR5KCkgJiYgc2VsZWN0ZWRT
dHJlYW1JZCA9PSBtX2N1cnJlbnRWaWRlb1N0cmVhbUlkKSB7Ci0gICAgICAgICAgICBHU1RfSU5G
T19PQkpFQ1QocGlwZWxpbmUoKSwgIiVzIHN0cmVhbTogJXMgYWxyZWFkeSBzZWxlY3RlZCwgbm90
IGRvaW5nIGFueXRoaW5nLiIsIHRyYWNrVHlwZUFzU3RyaW5nLCBzZWxlY3RlZFN0cmVhbUlkLnV0
ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgcmV0dXJuOwordm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnVwZGF0ZUVuYWJsZWRBdWRpb1RyYWNrKCkKK3sKKyAgICBBdWRpb1RyYWNr
UHJpdmF0ZUdTdHJlYW1lciogd2FudGVkVHJhY2sgPSBudWxscHRyOworICAgIGZvciAoYXV0byYg
cGFpciA6IG1fYXVkaW9UcmFja3MpIHsKKyAgICAgICAgQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFt
ZXIqIHRyYWNrID0gcGFpci52YWx1ZS5nZXQoKTsKKyAgICAgICAgaWYgKHRyYWNrLT5lbmFibGVk
KCkpIHsKKyAgICAgICAgICAgIHdhbnRlZFRyYWNrID0gdHJhY2s7CisgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQorICAgIH0KIAotICAgICAgICBpZiAoIW1fY3VycmVudEF1ZGlvU3RyZWFt
SWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgc2VsZWN0ZWRTdHJlYW1zLmFwcGVuZChtX2N1cnJl
bnRBdWRpb1N0cmVhbUlkKTsKLSAgICAgICAgaWYgKCFtX2N1cnJlbnRUZXh0U3RyZWFtSWQuaXNF
bXB0eSgpKQotICAgICAgICAgICAgc2VsZWN0ZWRTdHJlYW1zLmFwcGVuZChtX2N1cnJlbnRUZXh0
U3RyZWFtSWQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRyYWNrUHJpdmF0ZUJhc2VHU3Ry
ZWFtZXI6OlRyYWNrVHlwZTo6VGV4dDoKLSAgICAgICAgcHJvcGVydHlOYW1lID0gImN1cnJlbnQt
dGV4dCI7Ci0gICAgICAgIHRyYWNrVHlwZUFzU3RyaW5nID0gInRleHQiOwotICAgICAgICBpZiAo
IXNlbGVjdGVkU3RyZWFtSWQuaXNFbXB0eSgpICYmIHNlbGVjdGVkU3RyZWFtSWQgPT0gbV9jdXJy
ZW50VGV4dFN0cmVhbUlkKSB7Ci0gICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUo
KSwgIiVzIHN0cmVhbTogJXMgYWxyZWFkeSBzZWxlY3RlZCwgbm90IGRvaW5nIGFueXRoaW5nLiIs
IHRyYWNrVHlwZUFzU3RyaW5nLCBzZWxlY3RlZFN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgLy8gTm8gYWN0aXZlIHRyYWNrLCBubyBj
aGFuZ2VzLgorICAgIGlmICghd2FudGVkVHJhY2spCisgICAgICAgIHJldHVybjsKIAotICAgICAg
ICBpZiAoIW1fY3VycmVudEF1ZGlvU3RyZWFtSWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgc2Vs
ZWN0ZWRTdHJlYW1zLmFwcGVuZChtX2N1cnJlbnRBdWRpb1N0cmVhbUlkKTsKLSAgICAgICAgaWYg
KCFtX2N1cnJlbnRWaWRlb1N0cmVhbUlkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHNlbGVjdGVk
U3RyZWFtcy5hcHBlbmQobV9jdXJyZW50VmlkZW9TdHJlYW1JZCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlOjpVbmtub3duOgot
ICAgICAgICBGQUxMVEhST1VHSDsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICBpZiAobV9pc0xlZ2FjeVBsYXliaW4pIHsKKyAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiU2V0dGluZyBwbGF5YmluMiBjdXJyZW50LWF1ZGlv
PSVkIiwgd2FudGVkVHJhY2stPnRyYWNrSW5kZXgoKSk7CisgICAgICAgIGdfb2JqZWN0X3NldCht
X3BpcGVsaW5lLmdldCgpLCAiY3VycmVudC1hdWRpbyIsIHdhbnRlZFRyYWNrLT50cmFja0luZGV4
KCksIG51bGxwdHIpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fd2FudGVkQXVkaW9TdHJlYW1J
ZCA9IHdhbnRlZFRyYWNrLT5pZCgpOworICAgICAgICBwbGF5YmluM1NlbmRTZWxlY3RTdHJlYW1z
SWZBcHByb3ByaWF0ZSgpOwogICAgIH0KK30KIAotICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGlu
ZSgpLCAiRW5hYmxpbmcgJXMgdHJhY2sgd2l0aCBpbmRleDogJXUiLCB0cmFja1R5cGVBc1N0cmlu
ZywgaW5kZXgpOwotICAgIGlmIChtX2lzTGVnYWN5UGxheWJpbikKLSAgICAgICAgZ19vYmplY3Rf
c2V0KG1fcGlwZWxpbmUuZ2V0KCksIHByb3BlcnR5TmFtZSwgaW5kZXgsIG51bGxwdHIpOwotICAg
IGVsc2UgewotICAgICAgICBHTGlzdCogc2VsZWN0ZWRTdHJlYW1zTGlzdCA9IG51bGxwdHI7Cit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGxheWJpbjNTZW5kU2VsZWN0U3RyZWFt
c0lmQXBwcm9wcmlhdGUoKQoreworICAgIEFTU0VSVCghbV9pc0xlZ2FjeVBsYXliaW4pOwogCi0g
ICAgICAgIGZvciAoY29uc3QgYXV0byYgc3RyZWFtSWQgOiBzZWxlY3RlZFN0cmVhbXMpCi0gICAg
ICAgICAgICBzZWxlY3RlZFN0cmVhbXNMaXN0ID0gZ19saXN0X2FwcGVuZChzZWxlY3RlZFN0cmVh
bXNMaXN0LCBnX3N0cmR1cChzdHJlYW1JZC51dGY4KCkuZGF0YSgpKSk7CisgICAgYm9vbCBoYXZl
RGlmZmVyZW50U3RyZWFtSWRzID0gKG1fd2FudGVkQXVkaW9TdHJlYW1JZCAhPSBtX2N1cnJlbnRB
dWRpb1N0cmVhbUlkIHx8IG1fd2FudGVkVmlkZW9TdHJlYW1JZCAhPSBtX2N1cnJlbnRWaWRlb1N0
cmVhbUlkKTsKKyAgICBib29sIHNob3VsZFNlbmRTZWxlY3RTdHJlYW1zID0gIW1fd2FpdGluZ0Zv
clN0cmVhbXNTZWxlY3RlZEV2ZW50ICYmIGhhdmVEaWZmZXJlbnRTdHJlYW1JZHMgJiYgbV9jdXJy
ZW50U3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkc7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3Bp
cGVsaW5lLmdldCgpLCAiQ2hlY2tpbmcgaWYgdG8gc2VuZCBTRUxFQ1RfU1RSRUFNUywgbV93YWl0
aW5nRm9yU3RyZWFtc1NlbGVjdGVkRXZlbnQgPSAlcywgaGF2ZURpZmZlcmVudFN0cmVhbUlkcyA9
ICVzLCBtX2N1cnJlbnRTdGF0ZSA9ICVzLi4uIHNob3VsZFNlbmRTZWxlY3RTdHJlYW1zID0gJXMi
LAorICAgICAgICBib29sRm9yUHJpbnRpbmcobV93YWl0aW5nRm9yU3RyZWFtc1NlbGVjdGVkRXZl
bnQpLCBib29sRm9yUHJpbnRpbmcoaGF2ZURpZmZlcmVudFN0cmVhbUlkcyksIGdzdF9lbGVtZW50
X3N0YXRlX2dldF9uYW1lKG1fY3VycmVudFN0YXRlKSwgYm9vbEZvclByaW50aW5nKHNob3VsZFNl
bmRTZWxlY3RTdHJlYW1zKSk7CisgICAgaWYgKCFzaG91bGRTZW5kU2VsZWN0U3RyZWFtcykKKyAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgIC8vIFRPRE86IE1TRSBHc3RTdHJlYW0gQVBJIHN1cHBv
cnQ6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODI1MzEKLSAgICAg
ICAgZ3N0X2VsZW1lbnRfc2VuZF9ldmVudChtX3BpcGVsaW5lLmdldCgpLCBnc3RfZXZlbnRfbmV3
X3NlbGVjdF9zdHJlYW1zKHNlbGVjdGVkU3RyZWFtc0xpc3QpKTsKLSAgICAgICAgZ19saXN0X2Zy
ZWVfZnVsbChzZWxlY3RlZFN0cmVhbXNMaXN0LCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90
aWZ5PihnX2ZyZWUpKTsKKyAgICBHTGlzdCogc3RyZWFtcyA9IG51bGxwdHI7CisgICAgaWYgKCFt
X3dhbnRlZFZpZGVvU3RyZWFtSWQuaXNOdWxsKCkpIHsKKyAgICAgICAgbV9yZXF1ZXN0ZWRWaWRl
b1N0cmVhbUlkID0gbV93YW50ZWRWaWRlb1N0cmVhbUlkOworICAgICAgICBzdHJlYW1zID0gZ19s
aXN0X2FwcGVuZChzdHJlYW1zLCBnX3N0cmR1cChtX3dhbnRlZFZpZGVvU3RyZWFtSWQuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSkpOwogICAgIH0KKyAgICBpZiAoIW1fd2FudGVkQXVkaW9TdHJlYW1J
ZC5pc051bGwoKSkgeworICAgICAgICBtX3JlcXVlc3RlZEF1ZGlvU3RyZWFtSWQgPSBtX3dhbnRl
ZEF1ZGlvU3RyZWFtSWQ7CisgICAgICAgIHN0cmVhbXMgPSBnX2xpc3RfYXBwZW5kKHN0cmVhbXMs
IGdfc3RyZHVwKG1fd2FudGVkQXVkaW9TdHJlYW1JZC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7
CisgICAgfQorCisgICAgaWYgKCFzdHJlYW1zKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3dh
aXRpbmdGb3JTdHJlYW1zU2VsZWN0ZWRFdmVudCA9IHRydWU7CisgICAgZ3N0X2VsZW1lbnRfc2Vu
ZF9ldmVudChtX3BpcGVsaW5lLmdldCgpLCBnc3RfZXZlbnRfbmV3X3NlbGVjdF9zdHJlYW1zKHN0
cmVhbXMpKTsKKyAgICBnX2xpc3RfZnJlZV9mdWxsKHN0cmVhbXMsIHJlaW50ZXJwcmV0X2Nhc3Q8
R0Rlc3Ryb3lOb3RpZnk+KGdfZnJlZSkpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6dXBkYXRlVHJhY2tzKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
Ojp1cGRhdGVUcmFja3MoR1JlZlB0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPiYmIHN0cmVhbUNvbGxl
Y3Rpb24pCiB7CiAgICAgQVNTRVJUKCFtX2lzTGVnYWN5UGxheWJpbik7CiAKICAgICBib29sIHVz
ZU1lZGlhU291cmNlID0gaXNNZWRpYVNvdXJjZSgpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdz
dF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfc2l6ZShtX3N0cmVhbUNvbGxlY3Rpb24uZ2V0KCkpOwor
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfc2l6ZShzdHJl
YW1Db2xsZWN0aW9uLmdldCgpKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJQ
cm9jZXNzaW5nIGEgc3RyZWFtIGNvbGxlY3Rpb24gd2l0aCAldSBzdHJlYW1zIiwgbGVuZ3RoKTsK
IAogICAgIGJvb2wgb2xkSGFzQXVkaW8gPSBtX2hhc0F1ZGlvOwogICAgIGJvb2wgb2xkSGFzVmlk
ZW8gPSBtX2hhc1ZpZGVvOworCiAgICAgLy8gTmV3IHN0cmVhbSBjb2xsZWN0aW9ucyBvdmVycmlk
ZSBwcmV2aW91cyBvbmVzLgotICAgIGNsZWFyVHJhY2tzKCk7CisgICAgdW5zaWduZWQgYXVkaW9U
cmFja0luZGV4ID0gMDsKKyAgICB1bnNpZ25lZCB2aWRlb1RyYWNrSW5kZXggPSAwOwogICAgIHVu
c2lnbmVkIHRleHRUcmFja0luZGV4ID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgR1JlZlB0cjxHc3RTdHJlYW0+IHN0cmVhbSA9IGdzdF9z
dHJlYW1fY29sbGVjdGlvbl9nZXRfc3RyZWFtKG1fc3RyZWFtQ29sbGVjdGlvbi5nZXQoKSwgaSk7
CisgICAgICAgIEdSZWZQdHI8R3N0U3RyZWFtPiBzdHJlYW0gPSBnc3Rfc3RyZWFtX2NvbGxlY3Rp
b25fZ2V0X3N0cmVhbShzdHJlYW1Db2xsZWN0aW9uLmdldCgpLCBpKTsKICAgICAgICAgU3RyaW5n
IHN0cmVhbUlkKGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0uZ2V0KCkpKTsKICAgICAg
ICAgR3N0U3RyZWFtVHlwZSB0eXBlID0gZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX3R5cGUoc3RyZWFt
LmdldCgpKTsKIAogICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJJbnNwZWN0
aW5nICVzIHRyYWNrIHdpdGggSUQgJXMiLCBnc3Rfc3RyZWFtX3R5cGVfZ2V0X25hbWUodHlwZSks
IHN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBpZiAoKHR5cGUgJiBHU1RfU1RSRUFN
X1RZUEVfQVVESU8gJiYgbV9hdWRpb1RyYWNrcy5jb250YWlucyhzdHJlYW1JZCkpIHx8ICh0eXBl
ICYgR1NUX1NUUkVBTV9UWVBFX1ZJREVPICYmIG1fdmlkZW9UcmFja3MuY29udGFpbnMoc3RyZWFt
SWQpKQorICAgICAgICAgICAgfHwgKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfVEVYVCAmJiBtX3Rl
eHRUcmFja3MuY29udGFpbnMoc3RyZWFtSWQpKSkKKyAgICAgICAgeworICAgICAgICAgICAgR1NU
X0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiJXMgdHJhY2sgd2l0aCBJRCAlcyBhbHJlYWR5IGV4
aXN0cywgc2tpcHBpbmciLCBnc3Rfc3RyZWFtX3R5cGVfZ2V0X25hbWUodHlwZSksIHN0cmVhbUlk
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwogICAg
ICAgICBpZiAodHlwZSAmIEdTVF9TVFJFQU1fVFlQRV9BVURJTykKICAgICAgICAgICAgIENSRUFU
RV9UUkFDSyhhdWRpbywgQXVkaW8pOwogICAgICAgICBlbHNlIGlmICh0eXBlICYgR1NUX1NUUkVB
TV9UWVBFX1ZJREVPKQpAQCAtMTU1MCwxNSArMTU1OCw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjp1cGRhdGVUcmFja3MoKQogICAgIG1fcGxheWVyLT5tZWRpYUVuZ2luZVVw
ZGF0ZWQoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNsZWFyVHJh
Y2tzKCkKLXsKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgQ0xFQVJfVFJBQ0tTKG1fYXVk
aW9UcmFja3MsIG1fcGxheWVyLT5yZW1vdmVBdWRpb1RyYWNrKTsKLSAgICBDTEVBUl9UUkFDS1Mo
bV92aWRlb1RyYWNrcywgbV9wbGF5ZXItPnJlbW92ZVZpZGVvVHJhY2spOwotICAgIENMRUFSX1RS
QUNLUyhtX3RleHRUcmFja3MsIG1fcGxheWVyLT5yZW1vdmVUZXh0VHJhY2spOwotI2VuZGlmIC8v
IEVOQUJMRShWSURFT19UUkFDSykKLX0KLQogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnZpZGVvQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxh
eWVyKQogewogICAgIHBsYXllci0+bV9ub3RpZmllci0+bm90aWZ5KE1haW5UaHJlYWROb3RpZmlj
YXRpb246OlZpZGVvQ2hhbmdlZCwgW3BsYXllcl0gewpAQCAtMTU4OCwxMyArMTU4NywyOSBAQCBi
b29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlU3luY01lc3NhZ2UoR3N0TWVz
c2FnZSogbWVzc2FnZSkKICAgICBpZiAoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSA9PSBHU1Rf
TUVTU0FHRV9TVFJFQU1fQ09MTEVDVElPTiAmJiAhbV9pc0xlZ2FjeVBsYXliaW4pIHsKICAgICAg
ICAgR1JlZlB0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPiBjb2xsZWN0aW9uOwogICAgICAgICBnc3Rf
bWVzc2FnZV9wYXJzZV9zdHJlYW1fY29sbGVjdGlvbihtZXNzYWdlLCAmY29sbGVjdGlvbi5vdXRQ
dHIoKSk7CisjaWZuZGVmIEdTVF9ESVNBQkxFX0RFQlVHCisgICAgICAgIEdTVF9ERUJVR19PQkpF
Q1QocGlwZWxpbmUoKSwgIlJlY2VpdmVkIFNUUkVBTV9DT0xMRUNUSU9OIG1lc3NhZ2Ugd2l0aCB1
cHN0cmVhbSBpZCBcIiVzXCIgZGVmaW5pbmcgdGhlIGZvbGxvd2luZyBzdHJlYW1zOiIsIGdzdF9z
dHJlYW1fY29sbGVjdGlvbl9nZXRfdXBzdHJlYW1faWQoY29sbGVjdGlvbi5nZXQoKSkpOworICAg
ICAgICB1bnNpZ25lZCBudW1TdHJlYW1zID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zaXpl
KGNvbGxlY3Rpb24uZ2V0KCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
U3RyZWFtczsgaSsrKSB7CisgICAgICAgICAgICBHc3RTdHJlYW0qIHN0cmVhbSA9IGdzdF9zdHJl
YW1fY29sbGVjdGlvbl9nZXRfc3RyZWFtKGNvbGxlY3Rpb24uZ2V0KCksIGkpOworICAgICAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiIyV1ICVzICVzIiwgaSwgZ3N0X3N0cmVh
bV90eXBlX2dldF9uYW1lKGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV90eXBlKHN0cmVhbSkpLCBnc3Rf
c3RyZWFtX2dldF9zdHJlYW1faWQoc3RyZWFtKSk7CisgICAgICAgIH0KKyNlbmRpZgogCiAgICAg
ICAgIGlmIChjb2xsZWN0aW9uKSB7Ci0gICAgICAgICAgICBtX3N0cmVhbUNvbGxlY3Rpb24uc3dh
cChjb2xsZWN0aW9uKTsKLSAgICAgICAgICAgIG1fbm90aWZpZXItPm5vdGlmeShNYWluVGhyZWFk
Tm90aWZpY2F0aW9uOjpTdHJlYW1Db2xsZWN0aW9uQ2hhbmdlZCwgW3RoaXNdIHsKLSAgICAgICAg
ICAgICAgICB0aGlzLT51cGRhdGVUcmFja3MoKTsKKyAgICAgICAgICAgIG1fbm90aWZpZXItPm5v
dGlmeShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpTdHJlYW1Db2xsZWN0aW9uQ2hhbmdlZCwgW3Ro
aXMsIGNvbGxlY3Rpb24gPSBXVEZNb3ZlKGNvbGxlY3Rpb24pXSgpIG11dGFibGUgeworICAgICAg
ICAgICAgICAgIHRoaXMtPnVwZGF0ZVRyYWNrcyhXVEZNb3ZlKGNvbGxlY3Rpb24pKTsKICAgICAg
ICAgICAgIH0pOwogICAgICAgICB9CisgICAgfSBlbHNlIGlmIChHU1RfTUVTU0FHRV9UWVBFKG1l
c3NhZ2UpID09IEdTVF9NRVNTQUdFX1NUUkVBTVNfU0VMRUNURUQgJiYgIW1faXNMZWdhY3lQbGF5
YmluKSB7CisjaWZuZGVmIEdTVF9ESVNBQkxFX0RFQlVHCisgICAgICAgIEdTVF9ERUJVR19PQkpF
Q1QocGlwZWxpbmUoKSwgIlJlY2VpdmVkIFNUUkVBTVNfU0VMRUNURUQgbWVzc2FnZSBzZWxlY3Rp
bmcgdGhlIGZvbGxvd2luZyBzdHJlYW1zOiIpOworICAgICAgICB1bnNpZ25lZCBudW1TdHJlYW1z
ID0gZ3N0X21lc3NhZ2Vfc3RyZWFtc19zZWxlY3RlZF9nZXRfc2l6ZShtZXNzYWdlKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVN0cmVhbXM7IGkrKykgeworICAgICAgICAg
ICAgR3N0U3RyZWFtKiBzdHJlYW0gPSBnc3RfbWVzc2FnZV9zdHJlYW1zX3NlbGVjdGVkX2dldF9z
dHJlYW0obWVzc2FnZSwgaSk7CisgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5l
KCksICIjJXUgJXMgJXMiLCBpLCBnc3Rfc3RyZWFtX3R5cGVfZ2V0X25hbWUoZ3N0X3N0cmVhbV9n
ZXRfc3RyZWFtX3R5cGUoc3RyZWFtKSksIGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0p
KTsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgfQogCiAgICAgaWYgKEdTVF9NRVNTQUdFX1RZUEUo
bWVzc2FnZSkgIT0gR1NUX01FU1NBR0VfTkVFRF9DT05URVhUKQpAQCAtMTg5MSw2ICsxOTA2LDkg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVz
c2FnZSogbWVzc2FnZSkKICAgICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKGN1
cnJlbnRTdGF0ZSksICdfJywgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobmV3U3RhdGUpKS51
dGY4KCk7CiAgICAgICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklO
KG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsIGRvdEZpbGVOYW1l
LmRhdGEoKSk7CiAKKyAgICAgICAgaWYgKCFtX2lzTGVnYWN5UGxheWJpbiAmJiBjdXJyZW50U3Rh
dGUgPT0gR1NUX1NUQVRFX1BBVVNFRCAmJiBuZXdTdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykK
KyAgICAgICAgICAgIHBsYXliaW4zU2VuZFNlbGVjdFN0cmVhbXNJZkFwcHJvcHJpYXRlKCk7CisK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR1NUX01FU1NBR0VfQlVGRkVSSU5HOgpA
QCAtMjA0MCw0NSArMjA1OCwyMiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
aGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgY2FzZSBHU1RfTUVTU0FHRV9TVFJFQU1TX1NFTEVDVEVEOiB7Ci0gICAgICAgIEdSZWZQ
dHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4gY29sbGVjdGlvbjsKLSAgICAgICAgZ3N0X21lc3NhZ2Vf
cGFyc2Vfc3RyZWFtc19zZWxlY3RlZChtZXNzYWdlLCAmY29sbGVjdGlvbi5vdXRQdHIoKSk7Ci0K
LSAgICAgICAgaWYgKCFjb2xsZWN0aW9uKQorICAgICAgICBpZiAobV9pc0xlZ2FjeVBsYXliaW4p
CiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBtX3N0cmVhbUNvbGxlY3Rpb24uc3dhcChj
b2xsZWN0aW9uKTsKLSAgICAgICAgbV9jdXJyZW50QXVkaW9TdHJlYW1JZCA9ICIiOwotICAgICAg
ICBtX2N1cnJlbnRWaWRlb1N0cmVhbUlkID0gIiI7Ci0gICAgICAgIG1fY3VycmVudFRleHRTdHJl
YW1JZCA9ICIiOwotCi0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdzdF9tZXNzYWdlX3N0cmVh
bXNfc2VsZWN0ZWRfZ2V0X3NpemUobWVzc2FnZSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgR1JlZlB0cjxHc3RTdHJlYW0+IHN0
cmVhbSA9IGdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfZ2V0X3N0cmVhbShtZXNzYWdlLCBp
KTsKLSAgICAgICAgICAgIGlmICghc3RyZWFtKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgICAgICBHc3RTdHJlYW1UeXBlIHR5cGUgPSBnc3Rfc3RyZWFtX2dldF9zdHJlYW1f
dHlwZShzdHJlYW0uZ2V0KCkpOwotICAgICAgICAgICAgU3RyaW5nIHN0cmVhbUlkKGdzdF9zdHJl
YW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0uZ2V0KCkpKTsKLQotICAgICAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChwaXBlbGluZSgpLCAiU2VsZWN0aW5nICVzIHRyYWNrIHdpdGggSUQ6ICVzIiwgZ3N0
X3N0cmVhbV90eXBlX2dldF9uYW1lKHR5cGUpLCBzdHJlYW1JZC51dGY4KCkuZGF0YSgpKTsKLSAg
ICAgICAgICAgIC8vIFBsYXliaW4zIGNhbiBzZW5kIG1vcmUgdGhhbiBvbmUgc2VsZWN0ZWQgc3Ry
ZWFtIG9mIHRoZSBzYW1lIHR5cGUKLSAgICAgICAgICAgIC8vIGJ1dCB0aGVyZSdzIG5vIHByaW9y
aXR5IG9yIG9yZGVyaW5nIHN5c3RlbSBpbiBwbGFjZSwgc28gd2UgYXNzdW1lCi0gICAgICAgICAg
ICAvLyB0aGUgc2VsZWN0ZWQgc3RyZWFtIGlzIHRoZSBsYXN0IG9uZSBhcyByZXBvcnRlZCBieSBw
bGF5YmluMy4KLSAgICAgICAgICAgIGlmICh0eXBlICYgR1NUX1NUUkVBTV9UWVBFX0FVRElPKSB7
Ci0gICAgICAgICAgICAgICAgbV9jdXJyZW50QXVkaW9TdHJlYW1JZCA9IHN0cmVhbUlkOwotICAg
ICAgICAgICAgICAgIGF1dG8gdHJhY2sgPSBtX2F1ZGlvVHJhY2tzLmdldChtX2N1cnJlbnRBdWRp
b1N0cmVhbUlkKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQodHJhY2spOwotICAgICAgICAgICAg
ICAgIHRyYWNrLT5tYXJrQXNBY3RpdmUoKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSAm
IEdTVF9TVFJFQU1fVFlQRV9WSURFTykgewotICAgICAgICAgICAgICAgIG1fY3VycmVudFZpZGVv
U3RyZWFtSWQgPSBzdHJlYW1JZDsKLSAgICAgICAgICAgICAgICBhdXRvIHRyYWNrID0gbV92aWRl
b1RyYWNrcy5nZXQobV9jdXJyZW50VmlkZW9TdHJlYW1JZCk7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKHRyYWNrKTsKLSAgICAgICAgICAgICAgICB0cmFjay0+bWFya0FzQWN0aXZlKCk7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfVEVYVCkKLSAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRUZXh0U3RyZWFtSWQgPSBzdHJlYW1JZDsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBHU1RfV0FSTklORygiVW5rbm93biBzdHJlYW0gdHlwZSB3aXRo
IHN0cmVhbS1pZCAlcyIsIHN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICB9CisgICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlJlY2VpdmVkIFNUUkVBTVNf
U0VMRUNURUQsIHNldHRpbmcgbV93YWl0aW5nRm9yU3RyZWFtc1NlbGVjdGVkRXZlbnQgdG8gZmFs
c2UuIik7CisgICAgICAgIG1fd2FpdGluZ0ZvclN0cmVhbXNTZWxlY3RlZEV2ZW50ID0gZmFsc2U7
CisKKyAgICAgICAgLy8gVW5mb3J0dW5hdGVseSwgU1RSRUFNU19TRUxFQ1RFRCBtZXNzYWdlcyBm
cm9tIHBsYXliaW4zIGFyZSBoaWdobHkgdW5yZWxpYWJsZSwgb2Z0ZW4gb25seSBpbmNsdWRpbmcg
dGhlIGF1ZGlvCisgICAgICAgIC8vIHN0cmVhbSBvciBvbmx5IHRoZSB2aWRlbyBzdHJlYW0gd2hl
biBib3RoIGFyZSBwcmVzZW50IGFuZCBnb2luZyB0byBiZSBwbGF5ZWQuCisgICAgICAgIC8vIFRo
ZXJlZm9yZSwgaW5zdGVhZCBvZiByZWFkaW5nIHRoZSBldmVudCBkYXRhLCB3ZSB3aWxsIGp1c3Qg
YXNzdW1lIG91ciBwcmV2aW91c2x5IHJlcXVlc3RlZCBzZWxlY3Rpb24gd2FzIGhvbm9yZWQuCisg
ICAgICAgIG1fY3VycmVudEF1ZGlvU3RyZWFtSWQgPSBtX3JlcXVlc3RlZEF1ZGlvU3RyZWFtSWQ7
CisgICAgICAgIG1fY3VycmVudFZpZGVvU3RyZWFtSWQgPSBtX3JlcXVlc3RlZFZpZGVvU3RyZWFt
SWQ7CisKKyAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGUgdXNlciBtYWRlIGEgdHJhY2sgc3dp
dGNoIGJlZm9yZSB0aGUgaW5pdGlhbCBTVFJFQU1TX1NFTEVDRUQuIE5vdyBpdCdzIGEgZ29vZCBt
b21lbnQgdG8KKyAgICAgICAgLy8gcmVxdWVzdCBpdCBiZWluZyBhdHRlbmRlZC4gTm90ZSB0aGF0
IGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNlbmQgYSBTRUxFQ1RfU1RSRUFNUyBiZWZvcmUgdGhlIGZp
cnN0CisgICAgICAgIC8vIFNUUkVBTVNfU0VMRUNURUQgbWVzc2FnZSBiZWNhdXNlIGF0IHRoYXQg
cG9pbnQgdGhlIHBpcGVsaW5lIGlzIG5vdCBjb21wZWxldGVseSBjb25zdHJ1Y3RlZC4KKyAgICAg
ICAgcGxheWJpbjNTZW5kU2VsZWN0U3RyZWFtc0lmQXBwcm9wcmlhdGUoKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGRlZmF1bHQ6CkBAIC0yNjQxLDYgKzI2MzYsMTAgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRpZEVuZCgpCiAgICAgfQogCiAgICAgbV9pc0VuZFJl
YWNoZWQgPSB0cnVlOworICAgIC8vIE5vdyB0aGF0IHBsYXliYWNrIGhhcyBlbmRlZCBpdCdzIE5P
VCBhIHNhZmUgdGltZSB0byBzZW5kIGEgU0VMRUNUX1NUUkVBTVMgZXZlbnQuIEluIGZhY3QsIGFz
IG9mIEdTdHJlYW1lciAxLjE2LAorICAgIC8vIHBsYXliaW4zIHdpbGwgY3Jhc2ggb24gYSBHU3Ry
ZWFtZXIgYXNzZXJ0aW9uIChjb21iaW5lLT5zaW5rcGFkIGJlaW5nIHVuZXhwZWN0ZWRseSBudWxs
KSBpZiB3ZSB0cnkuIEluc3RlYWQsIHdhaXQKKyAgICAvLyB1bnRpbCB3ZSBnZXQgdGhlIGluaXRp
YWwgU1RSRUFNU19TRUxFQ1RFRCBtZXNzYWdlIG9uZSBtb3JlIHRpbWUuCisgICAgbV93YWl0aW5n
Rm9yU3RyZWFtc1NlbGVjdGVkRXZlbnQgPSB0cnVlOwogCiAgICAgaWYgKCFtX3BsYXllci0+aXNM
b29waW5nKCkpIHsKICAgICAgICAgbV9pc1BhdXNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggZmU4NWVhOTY0YWIxNzE4MDI0MjEy
ZGNiMzU0ZWU3Yzg0YTQ3Yjc3NC4uMzRmNjdkNjY2NmQwODc0NDBhYjVjODkzMGUxYjg4N2FiNzVm
MzNlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaApA
QCAtMjIwLDcgKzIyMCw5IEBAIHB1YmxpYzoKICAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFn
ZUZvckN1cnJlbnRUaW1lKCkgb3ZlcnJpZGU7CiAjZW5kaWYKIAotICAgIHZvaWQgZW5hYmxlVHJh
Y2soVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlLCB1bnNpZ25lZCBpbmRleCk7
CisgICAgdm9pZCB1cGRhdGVFbmFibGVkVmlkZW9UcmFjaygpOworICAgIHZvaWQgdXBkYXRlRW5h
YmxlZEF1ZGlvVHJhY2soKTsKKyAgICB2b2lkIHBsYXliaW4zU2VuZFNlbGVjdFN0cmVhbXNJZkFw
cHJvcHJpYXRlKCk7CiAKICAgICAvLyBBcHBlbmQgcGlwZWxpbmUgaW50ZXJmYWNlCiAgICAgLy8g
RklYTUU6IFVzZSB0aGUgY2xpZW50IGludGVyZmFjZSBwYXR0ZXJuLCBBcHBlbmRQaXBlbGluZSBk
b2VzIG5vdCBuZWVkIHRoZSBmdWxsIGludGVyZmFjZSB0byB0aGlzIGNsYXNzIGp1c3QgZm9yIHRo
ZXNlIHR3byBmdW5jdGlvbnMuCkBAIC00NjEsOCArNDYzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHNldFBsYXliaW5VUkwoY29uc3QgVVJMJiB1cmxTdHJpbmcpOwogICAgIHZvaWQgbG9hZEZ1bGwo
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcGlwZWxpbmVOYW1lKTsKIAotICAgIHZv
aWQgdXBkYXRlVHJhY2tzKCk7Ci0gICAgdm9pZCBjbGVhclRyYWNrcygpOworICAgIHZvaWQgdXBk
YXRlVHJhY2tzKEdSZWZQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4mJik7CiAKICNpZiBFTkFCTEUo
RU5DUllQVEVEX01FRElBKQogICAgIGJvb2wgaXNDRE1BdHRhY2hlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fY2RtSW5zdGFuY2U7IH0KQEAgLTUwOCwxMyArNTA5LDE5IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX3Nob3VsZFByZXNlcnZlUGl0Y2ggeyBmYWxzZSB9OwogICAgIG11dGFibGUgT3B0aW9uYWw8
U2Vjb25kcz4gbV9sYXN0UXVlcnlUaW1lOwogICAgIGJvb2wgbV9pc0xlZ2FjeVBsYXliaW47Ci0g
ICAgR1JlZlB0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPiBtX3N0cmVhbUNvbGxlY3Rpb247CiAjaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBSZWZQdHI8TWVkaWFTdHJlYW1Qcml2YXRlPiBtX3N0
cmVhbVByaXZhdGU7CiAjZW5kaWYKLSAgICBTdHJpbmcgbV9jdXJyZW50QXVkaW9TdHJlYW1JZDsK
LSAgICBTdHJpbmcgbV9jdXJyZW50VmlkZW9TdHJlYW1JZDsKLSAgICBTdHJpbmcgbV9jdXJyZW50
VGV4dFN0cmVhbUlkOworCisgICAgLy8gcGxheWJpbjMgb25seToKKyAgICBib29sIG1fd2FpdGlu
Z0ZvclN0cmVhbXNTZWxlY3RlZEV2ZW50IHsgdHJ1ZSB9OworICAgIEF0b21TdHJpbmcgbV9jdXJy
ZW50QXVkaW9TdHJlYW1JZDsgLy8gQ3VycmVudGx5IHBsYXlpbmcuCisgICAgQXRvbVN0cmluZyBt
X2N1cnJlbnRWaWRlb1N0cmVhbUlkOworICAgIEF0b21TdHJpbmcgbV93YW50ZWRBdWRpb1N0cmVh
bUlkOyAvLyBTZXQgaW4gSmF2YVNjcmlwdC4KKyAgICBBdG9tU3RyaW5nIG1fd2FudGVkVmlkZW9T
dHJlYW1JZDsKKyAgICBBdG9tU3RyaW5nIG1fcmVxdWVzdGVkQXVkaW9TdHJlYW1JZDsgLy8gRXhw
ZWN0ZWQgaW4gdGhlIG5leHQgU1RSRUFNU19TRUxFQ1RFRCBtZXNzYWdlLgorICAgIEF0b21TdHJp
bmcgbV9yZXF1ZXN0ZWRWaWRlb1N0cmVhbUlkOworCiAjaWYgRU5BQkxFKFdFQl9BVURJTykKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lcj4gbV9hdWRpb1Nv
dXJjZVByb3ZpZGVyOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVHJhY2tQcml2YXRlQmFzZUdT
dHJlYW1lci5jcHAKaW5kZXggZGY3MDViOTQ5NzFkMDI2MDBlYWMyMDE3YjFiMTUwZWFiMzA4NDY5
MS4uNzU5ZjljNzhkMTY5NTZkZGM5ZTM2ZmU4N2VjNjM1OWU4ZGU3MTIzNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJh
c2VHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9UcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmNwcApAQCAtNTEsNyArNTEsNiBAQCBU
cmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyKFRyYWNr
UHJpdmF0ZUJhc2UqIG93bmVyLCBnaQogewogICAgIEFTU0VSVChtX3BhZCk7CiAKLSAgICBnX3Np
Z25hbF9jb25uZWN0X3N3YXBwZWQobV9wYWQuZ2V0KCksICJub3RpZnk6OmFjdGl2ZSIsIEdfQ0FM
TEJBQ0soYWN0aXZlQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CiAgICAgZ19zaWduYWxfY29ubmVj
dF9zd2FwcGVkKG1fcGFkLmdldCgpLCAibm90aWZ5Ojp0YWdzIiwgR19DQUxMQkFDSyh0YWdzQ2hh
bmdlZENhbGxiYWNrKSwgdGhpcyk7CiAKICAgICAvLyBXZSBjYW4ndCBjYWxsIG5vdGlmeVRyYWNr
T2ZUYWdzQ2hhbmdlZCgpIGRpcmVjdGx5LCBiZWNhdXNlIHdlIG5lZWQgdGFnc0NoYW5nZWQoKSB0
byBzZXR1cCBtX3RhZ3MuCkBAIC05MiwxMSArOTEsNiBAQCB2b2lkIFRyYWNrUHJpdmF0ZUJhc2VH
U3RyZWFtZXI6OmRpc2Nvbm5lY3QoKQogICAgIG1fcGFkLmNsZWFyKCk7CiB9CiAKLXZvaWQgVHJh
Y2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6YWN0aXZlQ2hhbmdlZENhbGxiYWNrKFRyYWNrUHJpdmF0
ZUJhc2VHU3RyZWFtZXIqIHRyYWNrKQotewotICAgIHRyYWNrLT5tX25vdGlmaWVyLT5ub3RpZnko
TWFpblRocmVhZE5vdGlmaWNhdGlvbjo6QWN0aXZlQ2hhbmdlZCwgW3RyYWNrXSB7IHRyYWNrLT5u
b3RpZnlUcmFja09mQWN0aXZlQ2hhbmdlZCgpOyB9KTsKLX0KLQogdm9pZCBUcmFja1ByaXZhdGVC
YXNlR1N0cmVhbWVyOjp0YWdzQ2hhbmdlZENhbGxiYWNrKFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFt
ZXIqIHRyYWNrKQogewogICAgIHRyYWNrLT50YWdzQ2hhbmdlZCgpOwpAQCAtMTI1LDE4ICsxMTks
NiBAQCB2b2lkIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OnRhZ3NDaGFuZ2VkKCkKICAgICBt
X25vdGlmaWVyLT5ub3RpZnkoTWFpblRocmVhZE5vdGlmaWNhdGlvbjo6VGFnc0NoYW5nZWQsIFt0
aGlzXSB7IG5vdGlmeVRyYWNrT2ZUYWdzQ2hhbmdlZCgpOyB9KTsKIH0KIAotdm9pZCBUcmFja1By
aXZhdGVCYXNlR1N0cmVhbWVyOjpub3RpZnlUcmFja09mQWN0aXZlQ2hhbmdlZCgpCi17Ci0gICAg
aWYgKCFtX3BhZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ2Jvb2xlYW4gYWN0aXZlID0gZmFs
c2U7Ci0gICAgaWYgKGdfb2JqZWN0X2NsYXNzX2ZpbmRfcHJvcGVydHkoR19PQkpFQ1RfR0VUX0NM
QVNTKG1fcGFkLmdldCgpKSwgImFjdGl2ZSIpKQotICAgICAgICBnX29iamVjdF9nZXQobV9wYWQu
Z2V0KCksICJhY3RpdmUiLCAmYWN0aXZlLCBudWxscHRyKTsKLQotICAgIHNldEFjdGl2ZShhY3Rp
dmUpOwotfQotCiBib29sIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OmdldExhbmd1YWdlQ29k
ZShHc3RUYWdMaXN0KiB0YWdzLCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBTdHJpbmcgbGFu
Z3VhZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIuaAppbmRleCBk
Y2Q4YjM1NDc0MjQ0OTk0MDg0YTRiZThiMWVhMTg2NmM2ODY5ZWQ3Li5lOGZhYjVkYzI0MmQ0NjZl
OTI4NTFlZjQxOWQzOTFmNzg5M2RiODU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UcmFja1ByaXZhdGVC
YXNlR1N0cmVhbWVyLmgKQEAgLTY1LDExICs2NSw5IEBAIHByb3RlY3RlZDoKICAgICBUcmFja1By
aXZhdGVCYXNlR1N0cmVhbWVyKFRyYWNrUHJpdmF0ZUJhc2UqIG93bmVyLCBnaW50IGluZGV4LCBH
UmVmUHRyPEdzdFBhZD4pOwogICAgIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIoVHJhY2tQcml2
YXRlQmFzZSogb3duZXIsIGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0U3RyZWFtPik7CiAKLSAgICB2
b2lkIG5vdGlmeVRyYWNrT2ZBY3RpdmVDaGFuZ2VkKCk7CiAgICAgdm9pZCBub3RpZnlUcmFja09m
VGFnc0NoYW5nZWQoKTsKIAogICAgIGVudW0gTWFpblRocmVhZE5vdGlmaWNhdGlvbiB7Ci0gICAg
ICAgIEFjdGl2ZUNoYW5nZWQgPSAxIDw8IDAsCiAgICAgICAgIFRhZ3NDaGFuZ2VkID0gMSA8PCAx
LAogICAgICAgICBOZXdTYW1wbGUgPSAxIDw8IDIsCiAgICAgICAgIFN0cmVhbUNoYW5nZWQgPSAx
IDw8IDMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCmlu
ZGV4IDY3NjZhYjVmOTU1ZTE2NGEzYTUxOWMzZWJlZDcwN2YxMmIzMjdmMDYuLmY2YjIyMjBmMTI3
NGRhNmVkMGFiYWNmYjNkNmViZTViMTk2YWM1MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVv
VHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtNDAsNyArNDAsNiBAQCBWaWRlb1RyYWNrUHJp
dmF0ZUdTdHJlYW1lcjo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIoV2Vha1B0cjxNZWRpYVBs
YXllclByaXZhdAogewogICAgIC8vIEZJWE1FOiBHZXQgYSByZWFsIElEIGZyb20gdGhlIHRraGQg
YXRvbS4KICAgICBtX2lkID0gIlYiICsgU3RyaW5nOjpudW1iZXIoaW5kZXgpOwotICAgIG5vdGlm
eVRyYWNrT2ZBY3RpdmVDaGFuZ2VkKCk7CiB9CiAKIFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVy
OjpWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcihXZWFrUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcj4gcGxheWVyLCBnaW50IGluZGV4LCBHUmVmUHRyPEdzdFN0cmVhbT4gc3RyZWFtKQpA
QCAtNTYsOSArNTUsNiBAQCBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6VmlkZW9UcmFja1By
aXZhdGVHU3RyZWFtZXIoV2Vha1B0cjxNZWRpYVBsYXllclByaXZhdAogICAgIH0KIAogICAgIG1f
aWQgPSBnc3Rfc3RyZWFtX2dldF9zdHJlYW1faWQoc3RyZWFtLmdldCgpKTsKLSAgICBpZiAoZ3N0
X3N0cmVhbV9nZXRfc3RyZWFtX2ZsYWdzKHN0cmVhbS5nZXQoKSkgJiBHU1RfU1RSRUFNX0ZMQUdf
U0VMRUNUKQotICAgICAgICBtYXJrQXNBY3RpdmUoKTsKLSAgICBub3RpZnlUcmFja09mQWN0aXZl
Q2hhbmdlZCgpOwogfQogCiBWaWRlb1RyYWNrUHJpdmF0ZTo6S2luZCBWaWRlb1RyYWNrUHJpdmF0
ZUdTdHJlYW1lcjo6a2luZCgpIGNvbnN0CkBAIC03NSwxOSArNzEsMTQgQEAgdm9pZCBWaWRlb1Ry
YWNrUHJpdmF0ZUdTdHJlYW1lcjo6ZGlzY29ubmVjdCgpCiAgICAgVHJhY2tQcml2YXRlQmFzZUdT
dHJlYW1lcjo6ZGlzY29ubmVjdCgpOwogfQogCi12b2lkIFZpZGVvVHJhY2tQcml2YXRlR1N0cmVh
bWVyOjptYXJrQXNBY3RpdmUoKQotewotICAgIFZpZGVvVHJhY2tQcml2YXRlOjpzZXRTZWxlY3Rl
ZCh0cnVlKTsKLX0KLQogdm9pZCBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6c2V0U2VsZWN0
ZWQoYm9vbCBzZWxlY3RlZCkKIHsKICAgICBpZiAoc2VsZWN0ZWQgPT0gdGhpcy0+c2VsZWN0ZWQo
KSkKICAgICAgICAgcmV0dXJuOwogICAgIFZpZGVvVHJhY2tQcml2YXRlOjpzZXRTZWxlY3RlZChz
ZWxlY3RlZCk7CiAKLSAgICBpZiAoc2VsZWN0ZWQgJiYgbV9wbGF5ZXIpCi0gICAgICAgIG1fcGxh
eWVyLT5lbmFibGVUcmFjayhUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGU6OlZp
ZGVvLCBtX2luZGV4KTsKKyAgICBpZiAobV9wbGF5ZXIpCisgICAgICAgIG1fcGxheWVyLT51cGRh
dGVFbmFibGVkVmlkZW9UcmFjaygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9U
cmFja1ByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IDRhZjJlOGE4N2U0
MzlhNjNkYmZjOGZiNjRmODk1OGIzNmFlNGNiNDYuLmE5ODE2M2QxZjcxYjc0NjYzNjY5MDg2YWUy
ZTJjMjg0N2VmNjY0ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdTdHJl
YW1lci5oCkBAIC01Myw3ICs1Myw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlzY29ubmVjdCgp
IG92ZXJyaWRlOwogCi0gICAgdm9pZCBtYXJrQXNBY3RpdmUoKTsKICAgICB2b2lkIHNldFNlbGVj
dGVkKGJvb2wpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wgZW5hYmxlZCkgb3Zl
cnJpZGUgeyBzZXRTZWxlY3RlZChlbmFibGVkKTsgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399342</attachid>
            <date>2020-05-14 02:17:50 -0700</date>
            <delta_ts>2020-05-14 02:58:22 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-211623-20200514111748.patch</filename>
            <type>text/plain</type>
            <size>32127</size>
            <attacher name="Alicia Boya García">aboya</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxNTUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzQ1NTI1NWMzNDY3YmZk
N2Q5M2VkZDE5YTZmNThjZTVmZTUyZTg5ZS4uMDkwYmY5OGU1MTgyM2IzN2U5N2YxNTlkMDc0ZDVm
ZTRjZWM3Yzc2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDIwLTA1LTA2ICBBbGlj
aWEgQm95YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBQbGF5YmluMyB0cmFjayBzd2l0Y2ggcmV3b3JrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTE2MjMKKworICAgICAgICBSZXZpZXdlZCBieSBQaGls
aXBwZSBOb3JtYW5kLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmV3b3JrcyBob3cgdHJhY2sgc2Vs
ZWN0aW9uIGFuZCByZXBvcnRpbmcgb2Ygc2VsZWN0ZWQKKyAgICAgICAgdHJhY2tzIGlzIGRvbmUg
aW4gdGhlIHBsYXllci4KKworICAgICAgICBUaGUgZm9sbG93aW5nIGZvdW5kIGxpbWl0YXRpb25z
IGFuZCBhc3N1bXB0aW9ucyBpbiBjdXJyZW50IEdTdHJlYW1lcgorICAgICAgICBoYXZlIGluZm9y
bWVkIHRoaXMgcGF0Y2g6CisKKyAgICAgICAgYSkgQWx0aG91Z2ggdGhlIEFQSSBmb3IgcGxheWJp
bjMgaXMgZGVzaWduZWQgdG8gYmUgYWJsZSB0byBhY2NlcHQgYW55CisgICAgICAgIG51bWJlciBv
ZiB0cmFja3Mgb2YgYW55IGtpbmQsIHRoaXMgaXMgbm90IHN1cHBvcnRlZCBpbiBwcmFjdGljZS4K
KworICAgICAgICBiKSBUaGUgZmlyc3QgdHJhY2sgb2YgZWFjaCB0eXBlIGlzIGFsd2F5cyBzZWxl
Y3RlZC4gRXZlbiBpbiBwbGF5YmluMworICAgICAgICBtb2RlLCBsb29raW5nIGZvciBHU1RfU1RS
RUFNX0ZMQUdfU0VMRUNUIGlzIG5vdCBhIHJlbGlhYmxlIG1ldGhvZCwgYXMKKyAgICAgICAgaW4g
bW9zdCBjYXNlcyB0aGUgZGVtdXhlciBkb2VzIG5vdCBzZXQgaXQgYXQgYWxsLiBbcXRkZW11eCBu
ZXZlciBzZXRzCisgICAgICAgIGl0IGF0IGFsbCwgYW5kIG1hdHJvc2thZGVtdXggb25seSBzZXRz
IGl0IGluIGNlcnRhaW4gY2FzZXMuXQorCisgICAgICAgIGMpIFNlbmRpbmcgR1NUX0VWRU5UX1NF
TEVDVF9TVFJFQU1TIGlzIG9ubHkgc2FmZSBhdCBjZXJ0YWluIG1vbWVudHMuCisgICAgICAgIEl0
J3Mgbm90IHNhZmUgYmVmb3JlIHByZS1yb2xsLCBhZnRlciBFT1Mgb3IgZHVyaW5nIHRoZSBoYW5k
bGluZyBvZgorICAgICAgICBhbm90aGVyIFNFTEVDVF9TVFJFQU1TLgorCisgICAgICAgIGQpIFNl
bGVjdGluZyB0ZXh0IHRyYWNrcyB3aXRoIHBsYXliaW4gQVBJcyBpcyBub3QgcmVsZXZhbnQuIEFs
bCB0ZXh0CisgICAgICAgIHRyYWNrcyBhcmUgYWxyZWFkeSBiZWluZyBwaWNrZWQgYnkgV2ViS2l0
VGV4dENvbWJpbmVyLCB1bmFmZmVjdGVkIGJ5CisgICAgICAgIHBsYXliaW4gdHJhY2sgc2VsZWN0
aW9uLgorCisgICAgICAgIGUpIFRyYWNrcyByZXF1ZXN0ZWQgaW4gYSBHU1RfRVZFTlRfU0VMRUNU
X1NUUkVBTVMgYXJlIGV2ZW50dWFsbHkKKyAgICAgICAgc2VsZWN0ZWQuIE9uIHRoZSBvdGhlciBo
YW5kLCAgbG9va2luZyBhdAorICAgICAgICBHU1RfTUVTU0FHRV9TVFJFQU1TX1NFTEVDVEVEJ3Mg
Y29udGVudCBpcyBub3QgcmVsaWFibGUsIGFzIHRoaXMgaGFzCisgICAgICAgIGJlZW4gc2VlbiB0
byBtaXNzIHRyYWNrcyBkZXBlbmRpbmcgb24gdGhyZWFkIGx1Y2suCisKKyAgICAgICAgVGhpcyBw
YXRjaCB0YWtlcyB0aGUgcG9pbnRzIGFib3ZlIGludG8gYWNjb3VudCB0byByZXdvcmsgaG93IHRy
YWNrCisgICAgICAgIHNlbGVjdGlvbiBpcyBoYW5kbGVkIGluIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lciBhbmQgZml4IHRoZQorICAgICAgICBmb2xsb3dpbmcgaXNzdWVzOgorCisgICAgICAg
IDEpIEluIHBsYXliaW4zIG1vZGUsIG5vIHRyYWNrIHdhcyBtYXJrZWQgYXMgc2VsZWN0ZWQgaW5p
dGlhbGx5LAorICAgICAgICBiZWNhdXNlIG9mIHJlbGlhbmNlIG9uIEdTVF9TVFJFQU1fRkxBR19T
RUxFQ1QuCisKKyAgICAgICAgMikgSW4gcGxheWJpbjIgbW9kZSwgc29tZXRpbWVzIHRyYWNrcyB3
b3VsZCBub3QgYmUgaW5pdGlhbGx5IG1hcmtlZCBhcworICAgICAgICBzZWxlY3RlZC4gVGhpcyBv
Y2N1cnJlZCBiZWNhdXNlIG9mIHJlbGlhbmNlIG9uIHRoZSAic2VsZWN0ZWQiIHByb3BlcnR5Cisg
ICAgICAgIGluIGlucHV0c2VsZWN0b3Igc2lua3BhZHMsIHdob3NlIGluaXRpYWxpemF0aW9uIGlz
IHJhY3kgLS0gaXQgY2FuCisgICAgICAgIG9jY3VyIGFmdGVyIHRoZSB0cmFjayBoYXMgYmVlbiBh
ZGRlZCBhbmQgcGlja2VkIHVwIGJ5IFdlYktpdC4KKworICAgICAgICAzKSBJbiBwbGF5YmluMyBt
b2RlLCB0aGUgbGltaXRhdGlvbnMgZXhwbGFpbmVkIGJlZm9yZSBoYXMgYmVlbiBob25vcmVkCisg
ICAgICAgIHRvIG1ha2UgdHJhY2sgc2VsZWN0aW9uIHN0YWJsZSwgZGVsYXlpbmcgU0VMRUNUX1NU
UkVBTVMgZXZlbnRzIHVudGlsCisgICAgICAgIHRoZXkgYXJlIHNhZmUgdG8gc2VuZC4KKworICAg
ICAgICBUaGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIHNpZ25pZmljYXRpdmUgYmVoYXZpb3Ig
Y2hhbmdlcywgcmF0aGVyCisgICAgICAgIGFpbWluZyBmb3IgaW1wcm92aW5nIHRoZSBzdGFiaWxp
dGl0eSBvZiB0aGUgcGxheWVyLiBFeGlzdGluZyB0ZXN0cworICAgICAgICBzaG91bGQgcHJvdmlk
ZSBlbm91Z2ggY292ZXJhZ2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpzZXRFbmFibGVkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvQXVkaW9UcmFja1ByaXZhdGVH
U3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWaWRlbyk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mQXVkaW8pOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVFbmFibGVk
VmlkZW9UcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnVwZGF0ZUVuYWJsZWRBdWRpb1RyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGxheWJpbjNTZW5kU2VsZWN0U3RyZWFtc0lmQXBwcm9wcmlh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRh
dGVUcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpoYW5kbGVTeW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpkaWRFbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1ByaXZhdGVC
YXNlR1N0cmVhbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVHJh
Y2tQcml2YXRlQmFzZUdTdHJlYW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIp
OgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OnNldFNlbGVj
dGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9UcmFja1By
aXZhdGVHU3RyZWFtZXIuaDoKKwogMjAyMC0wNS0xMiAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBh
cHBsZS5jb20+CiAKICAgICAgICAgSW50cm9kdWNlIGEgUmVhbHRpbWVNZWRpYVNvdXJjZSB2aWRl
byBzYW1wbGUgb2JzZXJ2ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9BdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvQXVkaW9UcmFja1ByaXZhdGVHU3Ry
ZWFtZXIuY3BwCmluZGV4IGE0NTZhZjY0YWYxM2JhMTAwN2ZiNDhkM2VmYTI0MmE1N2NhZjZhZTcu
LmI3NDg4NjQwNWU5NDA0NzM2ZTMxZjJiYzkxZWUxYTc1NDZiMWRmMTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9BdWRpb1RyYWNrUHJpdmF0
ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtNDAsNyArNDAsNiBAQCBB
dWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIoV2Vh
a1B0cjxNZWRpYVBsYXllclByaXZhdAogewogICAgIC8vIEZJWE1FOiBHZXQgYSByZWFsIElEIGZy
b20gdGhlIHRraGQgYXRvbS4KICAgICBtX2lkID0gIkEiICsgU3RyaW5nOjpudW1iZXIoaW5kZXgp
OwotICAgIG5vdGlmeVRyYWNrT2ZBY3RpdmVDaGFuZ2VkKCk7CiB9CiAKIEF1ZGlvVHJhY2tQcml2
YXRlR1N0cmVhbWVyOjpBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcihXZWFrUHRyPE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcj4gcGxheWVyLCBnaW50IGluZGV4LCBHUmVmUHRyPEdzdFN0cmVh
bT4gc3RyZWFtKQpAQCAtNTYsMTAgKzU1LDYgQEAgQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6
OkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyKFdlYWtQdHI8TWVkaWFQbGF5ZXJQcml2YXQKICAg
ICB9CiAKICAgICBtX2lkID0gZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2lkKHN0cmVhbS5nZXQoKSk7
Ci0gICAgaWYgKGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9mbGFncyhzdHJlYW0uZ2V0KCkpICYgR1NU
X1NUUkVBTV9GTEFHX1NFTEVDVCkKLSAgICAgICAgbWFya0FzQWN0aXZlKCk7Ci0KLSAgICBub3Rp
ZnlUcmFja09mQWN0aXZlQ2hhbmdlZCgpOwogfQogCiBBdWRpb1RyYWNrUHJpdmF0ZTo6S2luZCBB
dWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6a2luZCgpIGNvbnN0CkBAIC03NiwxOSArNzEsMTQg
QEAgdm9pZCBBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6ZGlzY29ubmVjdCgpCiAgICAgVHJh
Y2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6ZGlzY29ubmVjdCgpOwogfQogCi12b2lkIEF1ZGlvVHJh
Y2tQcml2YXRlR1N0cmVhbWVyOjptYXJrQXNBY3RpdmUoKQotewotICAgIEF1ZGlvVHJhY2tQcml2
YXRlOjpzZXRFbmFibGVkKHRydWUpOwotfQotCiB2b2lkIEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVh
bWVyOjpzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBpZiAoZW5hYmxlZCA9PSB0aGlz
LT5lbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBBdWRpb1RyYWNrUHJpdmF0ZTo6c2V0
RW5hYmxlZChlbmFibGVkKTsKIAotICAgIGlmIChlbmFibGVkICYmIG1fcGxheWVyKQotICAgICAg
ICBtX3BsYXllci0+ZW5hYmxlVHJhY2soVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tU
eXBlOjpBdWRpbywgbV9pbmRleCk7CisgICAgaWYgKG1fcGxheWVyKQorICAgICAgICBtX3BsYXll
ci0+dXBkYXRlRW5hYmxlZEF1ZGlvVHJhY2soKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaAppbmRleCA3MGI2
YjAyZmU5OWFiMWNiMDQ2ZmJkZjM3NjUxYmQwODMzZTdlYjE4Li40NzJkMjA2MWQxZTc2ZDJiOGI4
MjllZjRiY2Q2OGMxMmQwMjYyMWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvQXVkaW9UcmFja1ByaXZh
dGVHU3RyZWFtZXIuaApAQCAtNTMsNyArNTMsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNjb25u
ZWN0KCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBtYXJrQXNBY3RpdmUoKTsKICAgICB2b2lkIHNldEFjdGl2ZShib29sIGVuYWJsZWQp
IG92ZXJyaWRlIHsgc2V0RW5hYmxlZChlbmFibGVkKTsgfQogCiAgICAgaW50IHRyYWNrSW5kZXgo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2luZGV4OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IDcwNWU4YzRiMjZlYjM3YzNhYzVl
NWUyN2ZlODU3NDJjZmVkOTRhZjMuLjNjMDBlYmVlNWM0ZGJlODViNWM2MjdiMTViMjNkNDJhNWZk
YjMxYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
Y3BwCkBAIC0xMDUsMTEgKzEwNSwxNCBAQAogI2RlZmluZSBDUkVBVEVfVFJBQ0sodHlwZSwgVHlw
ZSkgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBtX2hh
cyMjVHlwZSA9IHRydWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgICAgICBpZiAoIXVzZU1lZGlhU291cmNlKSB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgUmVmUHRyPFR5cGUjI1RyYWNrUHJp
dmF0ZUdTdHJlYW1lcj4gdHJhY2sgPSBUeXBlIyNUcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0
ZShtYWtlV2Vha1B0cigqdGhpcyksIGksIHN0cmVhbSk7IFwKKyAgICAgICAgICAgIFJlZlB0cjxU
eXBlIyNUcmFja1ByaXZhdGVHU3RyZWFtZXI+IHRyYWNrID0gVHlwZSMjVHJhY2tQcml2YXRlR1N0
cmVhbWVyOjpjcmVhdGUobWFrZVdlYWtQdHIoKnRoaXMpLCB0eXBlIyNUcmFja0luZGV4KyssIHN0
cmVhbSk7IFwKKyAgICAgICAgICAgIGlmICghdHJhY2stPnRyYWNrSW5kZXgoKSkgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB0cmFjay0+c2V0QWN0
aXZlKHRydWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
ICAgICBtX3dhbnRlZCMjVHlwZSMjU3RyZWFtSWQgPSB0cmFjay0+aWQoKTsgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgICAgICBtX3JlcXVlc3RlZCMjVHlwZSMjU3RyZWFtSWQgPSB0cmFj
ay0+aWQoKTsgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIG1f
IyN0eXBlIyNUcmFja3MuYWRkKHRyYWNrLT5pZCgpLCB0cmFjayk7ICAgICAgICAgICAgICAgICAg
IFwKICAgICAgICAgICAgIG1fcGxheWVyLT5hZGQjI1R5cGUjI1RyYWNrKCp0cmFjayk7ICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmIChnc3Rfc3RyZWFtX2dldF9zdHJl
YW1fZmxhZ3Moc3RyZWFtLmdldCgpKSAmIEdTVF9TVFJFQU1fRkxBR19TRUxFQ1QpIFwKLSAgICAg
ICAgICAgICAgICBtX2N1cnJlbnQjI1R5cGUjI1N0cmVhbUlkID0gU3RyaW5nKGdzdF9zdHJlYW1f
Z2V0X3N0cmVhbV9pZChzdHJlYW0uZ2V0KCkpKTsgXAogICAgICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0g
R19TVE1UX0VORAogCkBAIC0xMDc0LDYgKzEwNzcsOCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWaWRlbygpCiAgICAgICAgIH0KIAogICAgICAgICBh
dXRvIHRyYWNrID0gVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShtYWtlV2Vha1B0
cigqdGhpcyksIGksIHBhZCk7CisgICAgICAgIGlmICghdHJhY2stPnRyYWNrSW5kZXgoKSkKKyAg
ICAgICAgICAgIHRyYWNrLT5zZXRBY3RpdmUodHJ1ZSk7CiAgICAgICAgIEFTU0VSVChzdHJlYW1J
ZCA9PSB0cmFjay0+aWQoKSk7CiAgICAgICAgIG1fdmlkZW9UcmFja3MuYWRkKHN0cmVhbUlkLCB0
cmFjay5jb3B5UmVmKCkpOwogICAgICAgICBtX3BsYXllci0+YWRkVmlkZW9UcmFjayh0cmFjay5n
ZXQoKSk7CkBAIC0xMTQ4LDYgKzExNTMsOCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6bm90aWZ5UGxheWVyT2ZBdWRpbygpCiAgICAgICAgIH0KIAogICAgICAgICBhdXRvIHRy
YWNrID0gQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShtYWtlV2Vha1B0cigqdGhp
cyksIGksIHBhZCk7CisgICAgICAgIGlmICghdHJhY2stPnRyYWNrSW5kZXgoKSkKKyAgICAgICAg
ICAgIHRyYWNrLT5zZXRBY3RpdmUodHJ1ZSk7CiAgICAgICAgIEFTU0VSVChzdHJlYW1JZCA9PSB0
cmFjay0+aWQoKSk7CiAgICAgICAgIG1fYXVkaW9UcmFja3MuYWRkKHN0cmVhbUlkLCB0cmFjayk7
CiAgICAgICAgIG1fcGxheWVyLT5hZGRBdWRpb1RyYWNrKCp0cmFjayk7CkBAIC0xNDIzLDExMCAr
MTQzMCwxMTEgQEAgTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGxheWJh
Y2tQb3NpdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIHBsYXliYWNrUG9zaXRpb247CiB9CiAKLXZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjplbmFibGVUcmFjayhUcmFja1ByaXZhdGVC
YXNlR1N0cmVhbWVyOjpUcmFja1R5cGUgdHJhY2tUeXBlLCB1bnNpZ25lZCBpbmRleCkKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVFbmFibGVkVmlkZW9UcmFjaygpCiB7
Ci0gICAgLy8gRklYTUU6IFJlbW92ZSBpc01lZGlhU291cmNlKCkgdGVzdCBiZWxvdyB3aGVuIGZp
eGluZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyNTMxLgotICAg
IGlmIChpc01lZGlhU291cmNlKCkpIHsKLSAgICAgICAgR1NUX0ZJWE1FX09CSkVDVChtX3BpcGVs
aW5lLmdldCgpLCAiQXVkaW8vVmlkZW8vVGV4dCB0cmFjayBzd2l0Y2hpbmcgaXMgbm90IHlldCBz
dXBwb3J0ZWQgYnkgdGhlIE1TRSBiYWNrZW5kLiIpOwotICAgICAgICByZXR1cm47CisgICAgVmlk
ZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIqIHdhbnRlZFRyYWNrID0gbnVsbHB0cjsKKyAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBtX3ZpZGVvVHJhY2tzKSB7CisgICAgICAgIFZpZGVvVHJhY2tQcml2YXRl
R1N0cmVhbWVyKiB0cmFjayA9IHBhaXIudmFsdWUuZ2V0KCk7CisgICAgICAgIGlmICh0cmFjay0+
c2VsZWN0ZWQoKSkgeworICAgICAgICAgICAgd2FudGVkVHJhY2sgPSB0cmFjazsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogCi0gICAgY29uc3QgY2hhciogcHJvcGVydHlO
YW1lOwotICAgIGNvbnN0IGNoYXIqIHRyYWNrVHlwZUFzU3RyaW5nOwotICAgIFZlY3RvcjxTdHJp
bmc+IHNlbGVjdGVkU3RyZWFtczsKLSAgICBTdHJpbmcgc2VsZWN0ZWRTdHJlYW1JZDsKLQotICAg
IEdzdFN0cmVhbSogc3RyZWFtID0gbnVsbHB0cjsKKyAgICAvLyBObyBhY3RpdmUgdHJhY2ssIG5v
IGNoYW5nZXMuCisgICAgaWYgKCF3YW50ZWRUcmFjaykKKyAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKCFtX2lzTGVnYWN5UGxheWJpbikgewotICAgICAgICBzdHJlYW0gPSBnc3Rfc3RyZWFtX2Nv
bGxlY3Rpb25fZ2V0X3N0cmVhbShtX3N0cmVhbUNvbGxlY3Rpb24uZ2V0KCksIGluZGV4KTsKLSAg
ICAgICAgaWYgKCFzdHJlYW0pIHsKLSAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChwaXBl
bGluZSgpLCAiTm8gc3RyZWFtIHRvIHNlbGVjdCBhdCBpbmRleCAldSIsIGluZGV4KTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBzZWxlY3RlZFN0cmVhbUlkID0gU3Ry
aW5nOjpmcm9tVVRGOChnc3Rfc3RyZWFtX2dldF9zdHJlYW1faWQoc3RyZWFtKSk7Ci0gICAgICAg
IHNlbGVjdGVkU3RyZWFtcy5hcHBlbmQoc2VsZWN0ZWRTdHJlYW1JZCk7CisgICAgaWYgKG1faXNM
ZWdhY3lQbGF5YmluKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQo
KSwgIlNldHRpbmcgcGxheWJpbjIgY3VycmVudC12aWRlbz0lZCIsIHdhbnRlZFRyYWNrLT50cmFj
a0luZGV4KCkpOworICAgICAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgImN1cnJl
bnQtdmlkZW8iLCB3YW50ZWRUcmFjay0+dHJhY2tJbmRleCgpLCBudWxscHRyKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBtX3dhbnRlZFZpZGVvU3RyZWFtSWQgPSB3YW50ZWRUcmFjay0+aWQoKTsK
KyAgICAgICAgcGxheWJpbjNTZW5kU2VsZWN0U3RyZWFtc0lmQXBwcm9wcmlhdGUoKTsKICAgICB9
Cit9CiAKLSAgICBzd2l0Y2ggKHRyYWNrVHlwZSkgewotICAgIGNhc2UgVHJhY2tQcml2YXRlQmFz
ZUdTdHJlYW1lcjo6VHJhY2tUeXBlOjpBdWRpbzoKLSAgICAgICAgcHJvcGVydHlOYW1lID0gImN1
cnJlbnQtYXVkaW8iOwotICAgICAgICB0cmFja1R5cGVBc1N0cmluZyA9ICJhdWRpbyI7Ci0gICAg
ICAgIGlmICghc2VsZWN0ZWRTdHJlYW1JZC5pc0VtcHR5KCkgJiYgc2VsZWN0ZWRTdHJlYW1JZCA9
PSBtX2N1cnJlbnRBdWRpb1N0cmVhbUlkKSB7Ci0gICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1Qo
cGlwZWxpbmUoKSwgIiVzIHN0cmVhbTogJXMgYWxyZWFkeSBzZWxlY3RlZCwgbm90IGRvaW5nIGFu
eXRoaW5nLiIsIHRyYWNrVHlwZUFzU3RyaW5nLCBzZWxlY3RlZFN0cmVhbUlkLnV0ZjgoKS5kYXRh
KCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtX2N1
cnJlbnRUZXh0U3RyZWFtSWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgc2VsZWN0ZWRTdHJlYW1z
LmFwcGVuZChtX2N1cnJlbnRUZXh0U3RyZWFtSWQpOwotICAgICAgICBpZiAoIW1fY3VycmVudFZp
ZGVvU3RyZWFtSWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgc2VsZWN0ZWRTdHJlYW1zLmFwcGVu
ZChtX2N1cnJlbnRWaWRlb1N0cmVhbUlkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUcmFj
a1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGU6OlZpZGVvOgotICAgICAgICBwcm9wZXJ0
eU5hbWUgPSAiY3VycmVudC12aWRlbyI7Ci0gICAgICAgIHRyYWNrVHlwZUFzU3RyaW5nID0gInZp
ZGVvIjsKLSAgICAgICAgaWYgKCFzZWxlY3RlZFN0cmVhbUlkLmlzRW1wdHkoKSAmJiBzZWxlY3Rl
ZFN0cmVhbUlkID09IG1fY3VycmVudFZpZGVvU3RyZWFtSWQpIHsKLSAgICAgICAgICAgIEdTVF9J
TkZPX09CSkVDVChwaXBlbGluZSgpLCAiJXMgc3RyZWFtOiAlcyBhbHJlYWR5IHNlbGVjdGVkLCBu
b3QgZG9pbmcgYW55dGhpbmcuIiwgdHJhY2tUeXBlQXNTdHJpbmcsIHNlbGVjdGVkU3RyZWFtSWQu
dXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICByZXR1cm47Cit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6dXBkYXRlRW5hYmxlZEF1ZGlvVHJhY2soKQoreworICAgIEF1ZGlvVHJh
Y2tQcml2YXRlR1N0cmVhbWVyKiB3YW50ZWRUcmFjayA9IG51bGxwdHI7CisgICAgZm9yIChhdXRv
JiBwYWlyIDogbV9hdWRpb1RyYWNrcykgeworICAgICAgICBBdWRpb1RyYWNrUHJpdmF0ZUdTdHJl
YW1lciogdHJhY2sgPSBwYWlyLnZhbHVlLmdldCgpOworICAgICAgICBpZiAodHJhY2stPmVuYWJs
ZWQoKSkgeworICAgICAgICAgICAgd2FudGVkVHJhY2sgPSB0cmFjazsKKyAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CisgICAgfQogCi0gICAgICAgIGlmICghbV9jdXJyZW50QXVkaW9TdHJl
YW1JZC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBzZWxlY3RlZFN0cmVhbXMuYXBwZW5kKG1fY3Vy
cmVudEF1ZGlvU3RyZWFtSWQpOwotICAgICAgICBpZiAoIW1fY3VycmVudFRleHRTdHJlYW1JZC5p
c0VtcHR5KCkpCi0gICAgICAgICAgICBzZWxlY3RlZFN0cmVhbXMuYXBwZW5kKG1fY3VycmVudFRl
eHRTdHJlYW1JZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVHJhY2tQcml2YXRlQmFzZUdT
dHJlYW1lcjo6VHJhY2tUeXBlOjpUZXh0OgotICAgICAgICBwcm9wZXJ0eU5hbWUgPSAiY3VycmVu
dC10ZXh0IjsKLSAgICAgICAgdHJhY2tUeXBlQXNTdHJpbmcgPSAidGV4dCI7Ci0gICAgICAgIGlm
ICghc2VsZWN0ZWRTdHJlYW1JZC5pc0VtcHR5KCkgJiYgc2VsZWN0ZWRTdHJlYW1JZCA9PSBtX2N1
cnJlbnRUZXh0U3RyZWFtSWQpIHsKLSAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGlu
ZSgpLCAiJXMgc3RyZWFtOiAlcyBhbHJlYWR5IHNlbGVjdGVkLCBub3QgZG9pbmcgYW55dGhpbmcu
IiwgdHJhY2tUeXBlQXNTdHJpbmcsIHNlbGVjdGVkU3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAvLyBObyBhY3RpdmUgdHJhY2ssIG5v
IGNoYW5nZXMuCisgICAgaWYgKCF3YW50ZWRUcmFjaykKKyAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgIGlmICghbV9jdXJyZW50QXVkaW9TdHJlYW1JZC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBz
ZWxlY3RlZFN0cmVhbXMuYXBwZW5kKG1fY3VycmVudEF1ZGlvU3RyZWFtSWQpOwotICAgICAgICBp
ZiAoIW1fY3VycmVudFZpZGVvU3RyZWFtSWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgc2VsZWN0
ZWRTdHJlYW1zLmFwcGVuZChtX2N1cnJlbnRWaWRlb1N0cmVhbUlkKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGU6OlVua25vd246
Ci0gICAgICAgIEZBTExUSFJPVUdIOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIGlmIChtX2lzTGVnYWN5UGxheWJpbikgeworICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJTZXR0aW5nIHBsYXliaW4yIGN1cnJlbnQtYXVk
aW89JWQiLCB3YW50ZWRUcmFjay0+dHJhY2tJbmRleCgpKTsKKyAgICAgICAgZ19vYmplY3Rfc2V0
KG1fcGlwZWxpbmUuZ2V0KCksICJjdXJyZW50LWF1ZGlvIiwgd2FudGVkVHJhY2stPnRyYWNrSW5k
ZXgoKSwgbnVsbHB0cik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV93YW50ZWRBdWRpb1N0cmVh
bUlkID0gd2FudGVkVHJhY2stPmlkKCk7CisgICAgICAgIHBsYXliaW4zU2VuZFNlbGVjdFN0cmVh
bXNJZkFwcHJvcHJpYXRlKCk7CiAgICAgfQorfQogCi0gICAgR1NUX0lORk9fT0JKRUNUKHBpcGVs
aW5lKCksICJFbmFibGluZyAlcyB0cmFjayB3aXRoIGluZGV4OiAldSIsIHRyYWNrVHlwZUFzU3Ry
aW5nLCBpbmRleCk7Ci0gICAgaWYgKG1faXNMZWdhY3lQbGF5YmluKQotICAgICAgICBnX29iamVj
dF9zZXQobV9waXBlbGluZS5nZXQoKSwgcHJvcGVydHlOYW1lLCBpbmRleCwgbnVsbHB0cik7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIEdMaXN0KiBzZWxlY3RlZFN0cmVhbXNMaXN0ID0gbnVsbHB0cjsK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwbGF5YmluM1NlbmRTZWxlY3RTdHJl
YW1zSWZBcHByb3ByaWF0ZSgpCit7CisgICAgQVNTRVJUKCFtX2lzTGVnYWN5UGxheWJpbik7CiAK
LSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzdHJlYW1JZCA6IHNlbGVjdGVkU3RyZWFtcykKLSAg
ICAgICAgICAgIHNlbGVjdGVkU3RyZWFtc0xpc3QgPSBnX2xpc3RfYXBwZW5kKHNlbGVjdGVkU3Ry
ZWFtc0xpc3QsIGdfc3RyZHVwKHN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBib29sIGhh
dmVEaWZmZXJlbnRTdHJlYW1JZHMgPSAobV93YW50ZWRBdWRpb1N0cmVhbUlkICE9IG1fY3VycmVu
dEF1ZGlvU3RyZWFtSWQgfHwgbV93YW50ZWRWaWRlb1N0cmVhbUlkICE9IG1fY3VycmVudFZpZGVv
U3RyZWFtSWQpOworICAgIGJvb2wgc2hvdWxkU2VuZFNlbGVjdFN0cmVhbXMgPSAhbV93YWl0aW5n
Rm9yU3RyZWFtc1NlbGVjdGVkRXZlbnQgJiYgaGF2ZURpZmZlcmVudFN0cmVhbUlkcyAmJiBtX2N1
cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORzsKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1f
cGlwZWxpbmUuZ2V0KCksICJDaGVja2luZyBpZiB0byBzZW5kIFNFTEVDVF9TVFJFQU1TLCBtX3dh
aXRpbmdGb3JTdHJlYW1zU2VsZWN0ZWRFdmVudCA9ICVzLCBoYXZlRGlmZmVyZW50U3RyZWFtSWRz
ID0gJXMsIG1fY3VycmVudFN0YXRlID0gJXMuLi4gc2hvdWxkU2VuZFNlbGVjdFN0cmVhbXMgPSAl
cyIsCisgICAgICAgIGJvb2xGb3JQcmludGluZyhtX3dhaXRpbmdGb3JTdHJlYW1zU2VsZWN0ZWRF
dmVudCksIGJvb2xGb3JQcmludGluZyhoYXZlRGlmZmVyZW50U3RyZWFtSWRzKSwgZ3N0X2VsZW1l
bnRfc3RhdGVfZ2V0X25hbWUobV9jdXJyZW50U3RhdGUpLCBib29sRm9yUHJpbnRpbmcoc2hvdWxk
U2VuZFNlbGVjdFN0cmVhbXMpKTsKKyAgICBpZiAoIXNob3VsZFNlbmRTZWxlY3RTdHJlYW1zKQor
ICAgICAgICByZXR1cm47CiAKLSAgICAgICAgLy8gVE9ETzogTVNFIEdzdFN0cmVhbSBBUEkgc3Vw
cG9ydDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjUzMQotICAg
ICAgICBnc3RfZWxlbWVudF9zZW5kX2V2ZW50KG1fcGlwZWxpbmUuZ2V0KCksIGdzdF9ldmVudF9u
ZXdfc2VsZWN0X3N0cmVhbXMoc2VsZWN0ZWRTdHJlYW1zTGlzdCkpOwotICAgICAgICBnX2xpc3Rf
ZnJlZV9mdWxsKHNlbGVjdGVkU3RyZWFtc0xpc3QsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lO
b3RpZnk+KGdfZnJlZSkpOworICAgIEdMaXN0KiBzdHJlYW1zID0gbnVsbHB0cjsKKyAgICBpZiAo
IW1fd2FudGVkVmlkZW9TdHJlYW1JZC5pc051bGwoKSkgeworICAgICAgICBtX3JlcXVlc3RlZFZp
ZGVvU3RyZWFtSWQgPSBtX3dhbnRlZFZpZGVvU3RyZWFtSWQ7CisgICAgICAgIHN0cmVhbXMgPSBn
X2xpc3RfYXBwZW5kKHN0cmVhbXMsIGdfc3RyZHVwKG1fd2FudGVkVmlkZW9TdHJlYW1JZC5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpKSk7CiAgICAgfQorICAgIGlmICghbV93YW50ZWRBdWRpb1N0cmVh
bUlkLmlzTnVsbCgpKSB7CisgICAgICAgIG1fcmVxdWVzdGVkQXVkaW9TdHJlYW1JZCA9IG1fd2Fu
dGVkQXVkaW9TdHJlYW1JZDsKKyAgICAgICAgc3RyZWFtcyA9IGdfbGlzdF9hcHBlbmQoc3RyZWFt
cywgZ19zdHJkdXAobV93YW50ZWRBdWRpb1N0cmVhbUlkLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
KTsKKyAgICB9CisKKyAgICBpZiAoIXN0cmVhbXMpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
d2FpdGluZ0ZvclN0cmVhbXNTZWxlY3RlZEV2ZW50ID0gdHJ1ZTsKKyAgICBnc3RfZWxlbWVudF9z
ZW5kX2V2ZW50KG1fcGlwZWxpbmUuZ2V0KCksIGdzdF9ldmVudF9uZXdfc2VsZWN0X3N0cmVhbXMo
c3RyZWFtcykpOworICAgIGdfbGlzdF9mcmVlX2Z1bGwoc3RyZWFtcywgcmVpbnRlcnByZXRfY2Fz
dDxHRGVzdHJveU5vdGlmeT4oZ19mcmVlKSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjp1cGRhdGVUcmFja3MoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnVwZGF0ZVRyYWNrcyhHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+JiYgc3RyZWFtQ29s
bGVjdGlvbikKIHsKICAgICBBU1NFUlQoIW1faXNMZWdhY3lQbGF5YmluKTsKIAogICAgIGJvb2wg
dXNlTWVkaWFTb3VyY2UgPSBpc01lZGlhU291cmNlKCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0g
Z3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zaXplKG1fc3RyZWFtQ29sbGVjdGlvbi5nZXQoKSk7
CisgICAgdW5zaWduZWQgbGVuZ3RoID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zaXplKHN0
cmVhbUNvbGxlY3Rpb24uZ2V0KCkpOworICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwg
IlByb2Nlc3NpbmcgYSBzdHJlYW0gY29sbGVjdGlvbiB3aXRoICV1IHN0cmVhbXMiLCBsZW5ndGgp
OwogCiAgICAgYm9vbCBvbGRIYXNBdWRpbyA9IG1faGFzQXVkaW87CiAgICAgYm9vbCBvbGRIYXNW
aWRlbyA9IG1faGFzVmlkZW87CisKICAgICAvLyBOZXcgc3RyZWFtIGNvbGxlY3Rpb25zIG92ZXJy
aWRlIHByZXZpb3VzIG9uZXMuCi0gICAgY2xlYXJUcmFja3MoKTsKKyAgICB1bnNpZ25lZCBhdWRp
b1RyYWNrSW5kZXggPSAwOworICAgIHVuc2lnbmVkIHZpZGVvVHJhY2tJbmRleCA9IDA7CiAgICAg
dW5zaWduZWQgdGV4dFRyYWNrSW5kZXggPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgewotICAgICAgICBHUmVmUHRyPEdzdFN0cmVhbT4gc3RyZWFtID0gZ3N0
X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJlYW0obV9zdHJlYW1Db2xsZWN0aW9uLmdldCgpLCBp
KTsKKyAgICAgICAgR1JlZlB0cjxHc3RTdHJlYW0+IHN0cmVhbSA9IGdzdF9zdHJlYW1fY29sbGVj
dGlvbl9nZXRfc3RyZWFtKHN0cmVhbUNvbGxlY3Rpb24uZ2V0KCksIGkpOwogICAgICAgICBTdHJp
bmcgc3RyZWFtSWQoZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2lkKHN0cmVhbS5nZXQoKSkpOwogICAg
ICAgICBHc3RTdHJlYW1UeXBlIHR5cGUgPSBnc3Rfc3RyZWFtX2dldF9zdHJlYW1fdHlwZShzdHJl
YW0uZ2V0KCkpOwogCiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkluc3Bl
Y3RpbmcgJXMgdHJhY2sgd2l0aCBJRCAlcyIsIGdzdF9zdHJlYW1fdHlwZV9nZXRfbmFtZSh0eXBl
KSwgc3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGlmICgodHlwZSAmIEdTVF9TVFJF
QU1fVFlQRV9BVURJTyAmJiBtX2F1ZGlvVHJhY2tzLmNvbnRhaW5zKHN0cmVhbUlkKSkgfHwgKHR5
cGUgJiBHU1RfU1RSRUFNX1RZUEVfVklERU8gJiYgbV92aWRlb1RyYWNrcy5jb250YWlucyhzdHJl
YW1JZCkpCisgICAgICAgICAgICB8fCAodHlwZSAmIEdTVF9TVFJFQU1fVFlQRV9URVhUICYmIG1f
dGV4dFRyYWNrcy5jb250YWlucyhzdHJlYW1JZCkpKQorICAgICAgICB7CisgICAgICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICIlcyB0cmFjayB3aXRoIElEICVzIGFscmVhZHkg
ZXhpc3RzLCBza2lwcGluZyIsIGdzdF9zdHJlYW1fdHlwZV9nZXRfbmFtZSh0eXBlKSwgc3RyZWFt
SWQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCiAg
ICAgICAgIGlmICh0eXBlICYgR1NUX1NUUkVBTV9UWVBFX0FVRElPKQogICAgICAgICAgICAgQ1JF
QVRFX1RSQUNLKGF1ZGlvLCBBdWRpbyk7CiAgICAgICAgIGVsc2UgaWYgKHR5cGUgJiBHU1RfU1RS
RUFNX1RZUEVfVklERU8pCkBAIC0xNTUwLDE1ICsxNTU4LDYgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVRyYWNrcygpCiAgICAgbV9wbGF5ZXItPm1lZGlhRW5naW5l
VXBkYXRlZCgpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2xlYXJU
cmFja3MoKQotewotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICBDTEVBUl9UUkFDS1MobV9h
dWRpb1RyYWNrcywgbV9wbGF5ZXItPnJlbW92ZUF1ZGlvVHJhY2spOwotICAgIENMRUFSX1RSQUNL
UyhtX3ZpZGVvVHJhY2tzLCBtX3BsYXllci0+cmVtb3ZlVmlkZW9UcmFjayk7Ci0gICAgQ0xFQVJf
VFJBQ0tTKG1fdGV4dFRyYWNrcywgbV9wbGF5ZXItPnJlbW92ZVRleHRUcmFjayk7Ci0jZW5kaWYg
Ly8gRU5BQkxFKFZJREVPX1RSQUNLKQotfQotCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6dmlkZW9DaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBw
bGF5ZXIpCiB7CiAgICAgcGxheWVyLT5tX25vdGlmaWVyLT5ub3RpZnkoTWFpblRocmVhZE5vdGlm
aWNhdGlvbjo6VmlkZW9DaGFuZ2VkLCBbcGxheWVyXSB7CkBAIC0xNTg4LDEzICsxNTg3LDI5IEBA
IGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5jTWVzc2FnZShHc3RN
ZXNzYWdlKiBtZXNzYWdlKQogICAgIGlmIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpID09IEdT
VF9NRVNTQUdFX1NUUkVBTV9DT0xMRUNUSU9OICYmICFtX2lzTGVnYWN5UGxheWJpbikgewogICAg
ICAgICBHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+IGNvbGxlY3Rpb247CiAgICAgICAgIGdz
dF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9jb2xsZWN0aW9uKG1lc3NhZ2UsICZjb2xsZWN0aW9uLm91
dFB0cigpKTsKKyNpZm5kZWYgR1NUX0RJU0FCTEVfREVCVUcKKyAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChwaXBlbGluZSgpLCAiUmVjZWl2ZWQgU1RSRUFNX0NPTExFQ1RJT04gbWVzc2FnZSB3aXRo
IHVwc3RyZWFtIGlkIFwiJXNcIiBkZWZpbmluZyB0aGUgZm9sbG93aW5nIHN0cmVhbXM6IiwgZ3N0
X3N0cmVhbV9jb2xsZWN0aW9uX2dldF91cHN0cmVhbV9pZChjb2xsZWN0aW9uLmdldCgpKSk7Cisg
ICAgICAgIHVuc2lnbmVkIG51bVN0cmVhbXMgPSBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3Np
emUoY29sbGVjdGlvbi5nZXQoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1TdHJlYW1zOyBpKyspIHsKKyAgICAgICAgICAgIEdzdFN0cmVhbSogc3RyZWFtID0gZ3N0X3N0
cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJlYW0oY29sbGVjdGlvbi5nZXQoKSwgaSk7CisgICAgICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICIjJXUgJXMgJXMiLCBpLCBnc3Rfc3Ry
ZWFtX3R5cGVfZ2V0X25hbWUoZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX3R5cGUoc3RyZWFtKSksIGdz
dF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0pKTsKKyAgICAgICAgfQorI2VuZGlmCiAKICAg
ICAgICAgaWYgKGNvbGxlY3Rpb24pIHsKLSAgICAgICAgICAgIG1fc3RyZWFtQ29sbGVjdGlvbi5z
d2FwKGNvbGxlY3Rpb24pOwotICAgICAgICAgICAgbV9ub3RpZmllci0+bm90aWZ5KE1haW5UaHJl
YWROb3RpZmljYXRpb246OlN0cmVhbUNvbGxlY3Rpb25DaGFuZ2VkLCBbdGhpc10gewotICAgICAg
ICAgICAgICAgIHRoaXMtPnVwZGF0ZVRyYWNrcygpOworICAgICAgICAgICAgbV9ub3RpZmllci0+
bm90aWZ5KE1haW5UaHJlYWROb3RpZmljYXRpb246OlN0cmVhbUNvbGxlY3Rpb25DaGFuZ2VkLCBb
dGhpcywgY29sbGVjdGlvbiA9IFdURk1vdmUoY29sbGVjdGlvbildKCkgbXV0YWJsZSB7CisgICAg
ICAgICAgICAgICAgdGhpcy0+dXBkYXRlVHJhY2tzKFdURk1vdmUoY29sbGVjdGlvbikpOwogICAg
ICAgICAgICAgfSk7CiAgICAgICAgIH0KKyNpZm5kZWYgR1NUX0RJU0FCTEVfREVCVUcKKyAgICB9
IGVsc2UgaWYgKEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfU1RSRUFN
U19TRUxFQ1RFRCAmJiAhbV9pc0xlZ2FjeVBsYXliaW4pIHsKKyAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChwaXBlbGluZSgpLCAiUmVjZWl2ZWQgU1RSRUFNU19TRUxFQ1RFRCBtZXNzYWdlIHNlbGVj
dGluZyB0aGUgZm9sbG93aW5nIHN0cmVhbXM6Iik7CisgICAgICAgIHVuc2lnbmVkIG51bVN0cmVh
bXMgPSBnc3RfbWVzc2FnZV9zdHJlYW1zX3NlbGVjdGVkX2dldF9zaXplKG1lc3NhZ2UpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtU3RyZWFtczsgaSsrKSB7CisgICAgICAg
ICAgICBHc3RTdHJlYW0qIHN0cmVhbSA9IGdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfZ2V0
X3N0cmVhbShtZXNzYWdlLCBpKTsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxp
bmUoKSwgIiMldSAlcyAlcyIsIGksIGdzdF9zdHJlYW1fdHlwZV9nZXRfbmFtZShnc3Rfc3RyZWFt
X2dldF9zdHJlYW1fdHlwZShzdHJlYW0pKSwgZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2lkKHN0cmVh
bSkpOworICAgICAgICB9CisjZW5kaWYKICAgICB9CiAKICAgICBpZiAoR1NUX01FU1NBR0VfVFlQ
RShtZXNzYWdlKSAhPSBHU1RfTUVTU0FHRV9ORUVEX0NPTlRFWFQpCkBAIC0xODkxLDYgKzE5MDYs
OSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlTWVzc2FnZShHc3RN
ZXNzYWdlKiBtZXNzYWdlKQogICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUo
Y3VycmVudFN0YXRlKSwgJ18nLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShuZXdTdGF0ZSkp
LnV0ZjgoKTsKICAgICAgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9C
SU4obV9waXBlbGluZS5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgZG90RmlsZU5h
bWUuZGF0YSgpKTsKIAorICAgICAgICBpZiAoIW1faXNMZWdhY3lQbGF5YmluICYmIGN1cnJlbnRT
dGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEICYmIG5ld1N0YXRlID09IEdTVF9TVEFURV9QTEFZSU5H
KQorICAgICAgICAgICAgcGxheWJpbjNTZW5kU2VsZWN0U3RyZWFtc0lmQXBwcm9wcmlhdGUoKTsK
KwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBHU1RfTUVTU0FHRV9CVUZGRVJJTkc6
CkBAIC0yMDQwLDQ1ICsyMDU4LDIyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICBjYXNlIEdTVF9NRVNTQUdFX1NUUkVBTVNfU0VMRUNURUQ6IHsKLSAgICAgICAgR1Jl
ZlB0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPiBjb2xsZWN0aW9uOwotICAgICAgICBnc3RfbWVzc2Fn
ZV9wYXJzZV9zdHJlYW1zX3NlbGVjdGVkKG1lc3NhZ2UsICZjb2xsZWN0aW9uLm91dFB0cigpKTsK
LQotICAgICAgICBpZiAoIWNvbGxlY3Rpb24pCisgICAgICAgIGlmIChtX2lzTGVnYWN5UGxheWJp
bikKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIG1fc3RyZWFtQ29sbGVjdGlvbi5zd2Fw
KGNvbGxlY3Rpb24pOwotICAgICAgICBtX2N1cnJlbnRBdWRpb1N0cmVhbUlkID0gIiI7Ci0gICAg
ICAgIG1fY3VycmVudFZpZGVvU3RyZWFtSWQgPSAiIjsKLSAgICAgICAgbV9jdXJyZW50VGV4dFN0
cmVhbUlkID0gIiI7Ci0KLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ3N0X21lc3NhZ2Vfc3Ry
ZWFtc19zZWxlY3RlZF9nZXRfc2l6ZShtZXNzYWdlKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBHUmVmUHRyPEdzdFN0cmVhbT4g
c3RyZWFtID0gZ3N0X21lc3NhZ2Vfc3RyZWFtc19zZWxlY3RlZF9nZXRfc3RyZWFtKG1lc3NhZ2Us
IGkpOwotICAgICAgICAgICAgaWYgKCFzdHJlYW0pCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgICAgIEdzdFN0cmVhbVR5cGUgdHlwZSA9IGdzdF9zdHJlYW1fZ2V0X3N0cmVh
bV90eXBlKHN0cmVhbS5nZXQoKSk7Ci0gICAgICAgICAgICBTdHJpbmcgc3RyZWFtSWQoZ3N0X3N0
cmVhbV9nZXRfc3RyZWFtX2lkKHN0cmVhbS5nZXQoKSkpOwotCi0gICAgICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHBpcGVsaW5lKCksICJTZWxlY3RpbmcgJXMgdHJhY2sgd2l0aCBJRDogJXMiLCBn
c3Rfc3RyZWFtX3R5cGVfZ2V0X25hbWUodHlwZSksIHN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpOwot
ICAgICAgICAgICAgLy8gUGxheWJpbjMgY2FuIHNlbmQgbW9yZSB0aGFuIG9uZSBzZWxlY3RlZCBz
dHJlYW0gb2YgdGhlIHNhbWUgdHlwZQotICAgICAgICAgICAgLy8gYnV0IHRoZXJlJ3Mgbm8gcHJp
b3JpdHkgb3Igb3JkZXJpbmcgc3lzdGVtIGluIHBsYWNlLCBzbyB3ZSBhc3N1bWUKLSAgICAgICAg
ICAgIC8vIHRoZSBzZWxlY3RlZCBzdHJlYW0gaXMgdGhlIGxhc3Qgb25lIGFzIHJlcG9ydGVkIGJ5
IHBsYXliaW4zLgotICAgICAgICAgICAgaWYgKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfQVVESU8p
IHsKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRBdWRpb1N0cmVhbUlkID0gc3RyZWFtSWQ7Ci0g
ICAgICAgICAgICAgICAgYXV0byB0cmFjayA9IG1fYXVkaW9UcmFja3MuZ2V0KG1fY3VycmVudEF1
ZGlvU3RyZWFtSWQpOwotICAgICAgICAgICAgICAgIEFTU0VSVCh0cmFjayk7Ci0gICAgICAgICAg
ICAgICAgdHJhY2stPm1hcmtBc0FjdGl2ZSgpOwotICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBl
ICYgR1NUX1NUUkVBTV9UWVBFX1ZJREVPKSB7Ci0gICAgICAgICAgICAgICAgbV9jdXJyZW50Vmlk
ZW9TdHJlYW1JZCA9IHN0cmVhbUlkOwotICAgICAgICAgICAgICAgIGF1dG8gdHJhY2sgPSBtX3Zp
ZGVvVHJhY2tzLmdldChtX2N1cnJlbnRWaWRlb1N0cmVhbUlkKTsKLSAgICAgICAgICAgICAgICBB
U1NFUlQodHJhY2spOwotICAgICAgICAgICAgICAgIHRyYWNrLT5tYXJrQXNBY3RpdmUoKTsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSAmIEdTVF9TVFJFQU1fVFlQRV9URVhUKQotICAgICAg
ICAgICAgICAgIG1fY3VycmVudFRleHRTdHJlYW1JZCA9IHN0cmVhbUlkOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJVbmtub3duIHN0cmVhbSB0eXBlIHdp
dGggc3RyZWFtLWlkICVzIiwgc3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIH0KKyAg
ICAgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiUmVjZWl2ZWQgU1RSRUFN
U19TRUxFQ1RFRCwgc2V0dGluZyBtX3dhaXRpbmdGb3JTdHJlYW1zU2VsZWN0ZWRFdmVudCB0byBm
YWxzZS4iKTsKKyAgICAgICAgbV93YWl0aW5nRm9yU3RyZWFtc1NlbGVjdGVkRXZlbnQgPSBmYWxz
ZTsKKworICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5LCBTVFJFQU1TX1NFTEVDVEVEIG1lc3NhZ2Vz
IGZyb20gcGxheWJpbjMgYXJlIGhpZ2hseSB1bnJlbGlhYmxlLCBvZnRlbiBvbmx5IGluY2x1ZGlu
ZyB0aGUgYXVkaW8KKyAgICAgICAgLy8gc3RyZWFtIG9yIG9ubHkgdGhlIHZpZGVvIHN0cmVhbSB3
aGVuIGJvdGggYXJlIHByZXNlbnQgYW5kIGdvaW5nIHRvIGJlIHBsYXllZC4KKyAgICAgICAgLy8g
VGhlcmVmb3JlLCBpbnN0ZWFkIG9mIHJlYWRpbmcgdGhlIGV2ZW50IGRhdGEsIHdlIHdpbGwganVz
dCBhc3N1bWUgb3VyIHByZXZpb3VzbHkgcmVxdWVzdGVkIHNlbGVjdGlvbiB3YXMgaG9ub3JlZC4K
KyAgICAgICAgbV9jdXJyZW50QXVkaW9TdHJlYW1JZCA9IG1fcmVxdWVzdGVkQXVkaW9TdHJlYW1J
ZDsKKyAgICAgICAgbV9jdXJyZW50VmlkZW9TdHJlYW1JZCA9IG1fcmVxdWVzdGVkVmlkZW9TdHJl
YW1JZDsKKworICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoZSB1c2VyIG1hZGUgYSB0cmFjayBz
d2l0Y2ggYmVmb3JlIHRoZSBpbml0aWFsIFNUUkVBTVNfU0VMRUNFRC4gTm93IGl0J3MgYSBnb29k
IG1vbWVudCB0bworICAgICAgICAvLyByZXF1ZXN0IGl0IGJlaW5nIGF0dGVuZGVkLiBOb3RlIHRo
YXQgaXQncyBub3QgcG9zc2libGUgdG8gc2VuZCBhIFNFTEVDVF9TVFJFQU1TIGJlZm9yZSB0aGUg
Zmlyc3QKKyAgICAgICAgLy8gU1RSRUFNU19TRUxFQ1RFRCBtZXNzYWdlIGJlY2F1c2UgYXQgdGhh
dCBwb2ludCB0aGUgcGlwZWxpbmUgaXMgbm90IGNvbXBlbGV0ZWx5IGNvbnN0cnVjdGVkLgorICAg
ICAgICBwbGF5YmluM1NlbmRTZWxlY3RTdHJlYW1zSWZBcHByb3ByaWF0ZSgpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKQEAgLTI2NDEsNiArMjYzNiwxMCBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkRW5kKCkKICAgICB9CiAKICAgICBtX2lzRW5k
UmVhY2hlZCA9IHRydWU7CisgICAgLy8gTm93IHRoYXQgcGxheWJhY2sgaGFzIGVuZGVkIGl0J3Mg
Tk9UIGEgc2FmZSB0aW1lIHRvIHNlbmQgYSBTRUxFQ1RfU1RSRUFNUyBldmVudC4gSW4gZmFjdCwg
YXMgb2YgR1N0cmVhbWVyIDEuMTYsCisgICAgLy8gcGxheWJpbjMgd2lsbCBjcmFzaCBvbiBhIEdT
dHJlYW1lciBhc3NlcnRpb24gKGNvbWJpbmUtPnNpbmtwYWQgYmVpbmcgdW5leHBlY3RlZGx5IG51
bGwpIGlmIHdlIHRyeS4gSW5zdGVhZCwgd2FpdAorICAgIC8vIHVudGlsIHdlIGdldCB0aGUgaW5p
dGlhbCBTVFJFQU1TX1NFTEVDVEVEIG1lc3NhZ2Ugb25lIG1vcmUgdGltZS4KKyAgICBtX3dhaXRp
bmdGb3JTdHJlYW1zU2VsZWN0ZWRFdmVudCA9IHRydWU7CiAKICAgICBpZiAoIW1fcGxheWVyLT5p
c0xvb3BpbmcoKSkgewogICAgICAgICBtX2lzUGF1c2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAppbmRleCBmZTg1ZWE5NjRhYjE3MTgwMjQy
MTJkY2IzNTRlZTdjODRhNDdiNzc0Li4zNGY2N2Q2NjY2ZDA4NzQ0MGFiNWM4OTMwZTFiODg3YWI3
NWYzM2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5o
CkBAIC0yMjAsNyArMjIwLDkgQEAgcHVibGljOgogICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUlt
YWdlRm9yQ3VycmVudFRpbWUoKSBvdmVycmlkZTsKICNlbmRpZgogCi0gICAgdm9pZCBlbmFibGVU
cmFjayhUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGUsIHVuc2lnbmVkIGluZGV4
KTsKKyAgICB2b2lkIHVwZGF0ZUVuYWJsZWRWaWRlb1RyYWNrKCk7CisgICAgdm9pZCB1cGRhdGVF
bmFibGVkQXVkaW9UcmFjaygpOworICAgIHZvaWQgcGxheWJpbjNTZW5kU2VsZWN0U3RyZWFtc0lm
QXBwcm9wcmlhdGUoKTsKIAogICAgIC8vIEFwcGVuZCBwaXBlbGluZSBpbnRlcmZhY2UKICAgICAv
LyBGSVhNRTogVXNlIHRoZSBjbGllbnQgaW50ZXJmYWNlIHBhdHRlcm4sIEFwcGVuZFBpcGVsaW5l
IGRvZXMgbm90IG5lZWQgdGhlIGZ1bGwgaW50ZXJmYWNlIHRvIHRoaXMgY2xhc3MganVzdCBmb3Ig
dGhlc2UgdHdvIGZ1bmN0aW9ucy4KQEAgLTQ2MSw4ICs0NjMsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgc2V0UGxheWJpblVSTChjb25zdCBVUkwmIHVybFN0cmluZyk7CiAgICAgdm9pZCBsb2FkRnVs
bChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBwaXBlbGluZU5hbWUpOwogCi0gICAg
dm9pZCB1cGRhdGVUcmFja3MoKTsKLSAgICB2b2lkIGNsZWFyVHJhY2tzKCk7CisgICAgdm9pZCB1
cGRhdGVUcmFja3MoR1JlZlB0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPiYmKTsKIAogI2lmIEVOQUJM
RShFTkNSWVBURURfTUVESUEpCiAgICAgYm9vbCBpc0NETUF0dGFjaGVkKCkgY29uc3QgeyByZXR1
cm4gbV9jZG1JbnN0YW5jZTsgfQpAQCAtNTA4LDEzICs1MDksMTkgQEAgcHJpdmF0ZToKICAgICBi
b29sIG1fc2hvdWxkUHJlc2VydmVQaXRjaCB7IGZhbHNlIH07CiAgICAgbXV0YWJsZSBPcHRpb25h
bDxTZWNvbmRzPiBtX2xhc3RRdWVyeVRpbWU7CiAgICAgYm9vbCBtX2lzTGVnYWN5UGxheWJpbjsK
LSAgICBHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+IG1fc3RyZWFtQ29sbGVjdGlvbjsKICNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIFJlZlB0cjxNZWRpYVN0cmVhbVByaXZhdGU+IG1f
c3RyZWFtUHJpdmF0ZTsKICNlbmRpZgotICAgIFN0cmluZyBtX2N1cnJlbnRBdWRpb1N0cmVhbUlk
OwotICAgIFN0cmluZyBtX2N1cnJlbnRWaWRlb1N0cmVhbUlkOwotICAgIFN0cmluZyBtX2N1cnJl
bnRUZXh0U3RyZWFtSWQ7CisKKyAgICAvLyBwbGF5YmluMyBvbmx5OgorICAgIGJvb2wgbV93YWl0
aW5nRm9yU3RyZWFtc1NlbGVjdGVkRXZlbnQgeyB0cnVlIH07CisgICAgQXRvbVN0cmluZyBtX2N1
cnJlbnRBdWRpb1N0cmVhbUlkOyAvLyBDdXJyZW50bHkgcGxheWluZy4KKyAgICBBdG9tU3RyaW5n
IG1fY3VycmVudFZpZGVvU3RyZWFtSWQ7CisgICAgQXRvbVN0cmluZyBtX3dhbnRlZEF1ZGlvU3Ry
ZWFtSWQ7IC8vIFNldCBpbiBKYXZhU2NyaXB0LgorICAgIEF0b21TdHJpbmcgbV93YW50ZWRWaWRl
b1N0cmVhbUlkOworICAgIEF0b21TdHJpbmcgbV9yZXF1ZXN0ZWRBdWRpb1N0cmVhbUlkOyAvLyBF
eHBlY3RlZCBpbiB0aGUgbmV4dCBTVFJFQU1TX1NFTEVDVEVEIG1lc3NhZ2UuCisgICAgQXRvbVN0
cmluZyBtX3JlcXVlc3RlZFZpZGVvU3RyZWFtSWQ7CisKICNpZiBFTkFCTEUoV0VCX0FVRElPKQog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyPiBtX2F1ZGlv
U291cmNlUHJvdmlkZXI7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UcmFja1ByaXZhdGVCYXNl
R1N0cmVhbWVyLmNwcAppbmRleCBkZjcwNWI5NDk3MWQwMjYwMGVhYzIwMTdiMWIxNTBlYWIzMDg0
NjkxLi43NTlmOWM3OGQxNjk1NmRkYzllMzZmZTg3ZWM2MzU5ZThkZTcxMjM1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVHJhY2tQcml2YXRl
QmFzZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIuY3BwCkBAIC01MSw3ICs1MSw2IEBA
IFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIoVHJh
Y2tQcml2YXRlQmFzZSogb3duZXIsIGdpCiB7CiAgICAgQVNTRVJUKG1fcGFkKTsKIAotICAgIGdf
c2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3BhZC5nZXQoKSwgIm5vdGlmeTo6YWN0aXZlIiwgR19D
QUxMQkFDSyhhY3RpdmVDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKICAgICBnX3NpZ25hbF9jb25u
ZWN0X3N3YXBwZWQobV9wYWQuZ2V0KCksICJub3RpZnk6OnRhZ3MiLCBHX0NBTExCQUNLKHRhZ3ND
aGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKIAogICAgIC8vIFdlIGNhbid0IGNhbGwgbm90aWZ5VHJh
Y2tPZlRhZ3NDaGFuZ2VkKCkgZGlyZWN0bHksIGJlY2F1c2Ugd2UgbmVlZCB0YWdzQ2hhbmdlZCgp
IHRvIHNldHVwIG1fdGFncy4KQEAgLTkyLDExICs5MSw2IEBAIHZvaWQgVHJhY2tQcml2YXRlQmFz
ZUdTdHJlYW1lcjo6ZGlzY29ubmVjdCgpCiAgICAgbV9wYWQuY2xlYXIoKTsKIH0KIAotdm9pZCBU
cmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjphY3RpdmVDaGFuZ2VkQ2FsbGJhY2soVHJhY2tQcml2
YXRlQmFzZUdTdHJlYW1lciogdHJhY2spCi17Ci0gICAgdHJhY2stPm1fbm90aWZpZXItPm5vdGlm
eShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpBY3RpdmVDaGFuZ2VkLCBbdHJhY2tdIHsgdHJhY2st
Pm5vdGlmeVRyYWNrT2ZBY3RpdmVDaGFuZ2VkKCk7IH0pOwotfQotCiB2b2lkIFRyYWNrUHJpdmF0
ZUJhc2VHU3RyZWFtZXI6OnRhZ3NDaGFuZ2VkQ2FsbGJhY2soVHJhY2tQcml2YXRlQmFzZUdTdHJl
YW1lciogdHJhY2spCiB7CiAgICAgdHJhY2stPnRhZ3NDaGFuZ2VkKCk7CkBAIC0xMjUsMTggKzEx
OSw2IEBAIHZvaWQgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6dGFnc0NoYW5nZWQoKQogICAg
IG1fbm90aWZpZXItPm5vdGlmeShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpUYWdzQ2hhbmdlZCwg
W3RoaXNdIHsgbm90aWZ5VHJhY2tPZlRhZ3NDaGFuZ2VkKCk7IH0pOwogfQogCi12b2lkIFRyYWNr
UHJpdmF0ZUJhc2VHU3RyZWFtZXI6Om5vdGlmeVRyYWNrT2ZBY3RpdmVDaGFuZ2VkKCkKLXsKLSAg
ICBpZiAoIW1fcGFkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBnYm9vbGVhbiBhY3RpdmUgPSBm
YWxzZTsKLSAgICBpZiAoZ19vYmplY3RfY2xhc3NfZmluZF9wcm9wZXJ0eShHX09CSkVDVF9HRVRf
Q0xBU1MobV9wYWQuZ2V0KCkpLCAiYWN0aXZlIikpCi0gICAgICAgIGdfb2JqZWN0X2dldChtX3Bh
ZC5nZXQoKSwgImFjdGl2ZSIsICZhY3RpdmUsIG51bGxwdHIpOwotCi0gICAgc2V0QWN0aXZlKGFj
dGl2ZSk7Ci19Ci0KIGJvb2wgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6Z2V0TGFuZ3VhZ2VD
b2RlKEdzdFRhZ0xpc3QqIHRhZ3MsIEF0b21TdHJpbmcmIHZhbHVlKQogewogICAgIFN0cmluZyBs
YW5ndWFnZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9UcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5oCmluZGV4
IGRjZDhiMzU0NzQyNDQ5OTQwODRhNGJlOGIxZWExODY2YzY4NjllZDcuLmU4ZmFiNWRjMjQyZDQ2
NmU5Mjg1MWVmNDE5ZDM5MWY3ODkzZGI4NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0
ZUJhc2VHU3RyZWFtZXIuaApAQCAtNjUsMTEgKzY1LDkgQEAgcHJvdGVjdGVkOgogICAgIFRyYWNr
UHJpdmF0ZUJhc2VHU3RyZWFtZXIoVHJhY2tQcml2YXRlQmFzZSogb3duZXIsIGdpbnQgaW5kZXgs
IEdSZWZQdHI8R3N0UGFkPik7CiAgICAgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcihUcmFja1By
aXZhdGVCYXNlKiBvd25lciwgZ2ludCBpbmRleCwgR1JlZlB0cjxHc3RTdHJlYW0+KTsKIAotICAg
IHZvaWQgbm90aWZ5VHJhY2tPZkFjdGl2ZUNoYW5nZWQoKTsKICAgICB2b2lkIG5vdGlmeVRyYWNr
T2ZUYWdzQ2hhbmdlZCgpOwogCiAgICAgZW51bSBNYWluVGhyZWFkTm90aWZpY2F0aW9uIHsKLSAg
ICAgICAgQWN0aXZlQ2hhbmdlZCA9IDEgPDwgMCwKICAgICAgICAgVGFnc0NoYW5nZWQgPSAxIDw8
IDEsCiAgICAgICAgIE5ld1NhbXBsZSA9IDEgPDwgMiwKICAgICAgICAgU3RyZWFtQ2hhbmdlZCA9
IDEgPDwgMwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL1ZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAK
aW5kZXggNjc2NmFiNWY5NTVlMTY0YTNhNTE5YzNlYmVkNzA3ZjEyYjMyN2YwNi4uZjZiMjIyMGYx
Mjc0ZGE2ZWQwYWJhY2ZiM2Q2ZWJlNWIxOTZhYzUwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlk
ZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC00MCw3ICs0MCw2IEBAIFZpZGVvVHJhY2tQ
cml2YXRlR1N0cmVhbWVyOjpWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcihXZWFrUHRyPE1lZGlh
UGxheWVyUHJpdmF0CiB7CiAgICAgLy8gRklYTUU6IEdldCBhIHJlYWwgSUQgZnJvbSB0aGUgdGto
ZCBhdG9tLgogICAgIG1faWQgPSAiViIgKyBTdHJpbmc6Om51bWJlcihpbmRleCk7Ci0gICAgbm90
aWZ5VHJhY2tPZkFjdGl2ZUNoYW5nZWQoKTsKIH0KIAogVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFt
ZXI6OlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyKFdlYWtQdHI8TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyPiBwbGF5ZXIsIGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0U3RyZWFtPiBzdHJlYW0p
CkBAIC01Niw5ICs1NSw2IEBAIFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpWaWRlb1RyYWNr
UHJpdmF0ZUdTdHJlYW1lcihXZWFrUHRyPE1lZGlhUGxheWVyUHJpdmF0CiAgICAgfQogCiAgICAg
bV9pZCA9IGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0uZ2V0KCkpOwotICAgIGlmIChn
c3Rfc3RyZWFtX2dldF9zdHJlYW1fZmxhZ3Moc3RyZWFtLmdldCgpKSAmIEdTVF9TVFJFQU1fRkxB
R19TRUxFQ1QpCi0gICAgICAgIG1hcmtBc0FjdGl2ZSgpOwotICAgIG5vdGlmeVRyYWNrT2ZBY3Rp
dmVDaGFuZ2VkKCk7CiB9CiAKIFZpZGVvVHJhY2tQcml2YXRlOjpLaW5kIFZpZGVvVHJhY2tQcml2
YXRlR1N0cmVhbWVyOjpraW5kKCkgY29uc3QKQEAgLTc1LDE5ICs3MSwxNCBAQCB2b2lkIFZpZGVv
VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpkaXNjb25uZWN0KCkKICAgICBUcmFja1ByaXZhdGVCYXNl
R1N0cmVhbWVyOjpkaXNjb25uZWN0KCk7CiB9CiAKLXZvaWQgVmlkZW9UcmFja1ByaXZhdGVHU3Ry
ZWFtZXI6Om1hcmtBc0FjdGl2ZSgpCi17Ci0gICAgVmlkZW9UcmFja1ByaXZhdGU6OnNldFNlbGVj
dGVkKHRydWUpOwotfQotCiB2b2lkIFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpzZXRTZWxl
Y3RlZChib29sIHNlbGVjdGVkKQogewogICAgIGlmIChzZWxlY3RlZCA9PSB0aGlzLT5zZWxlY3Rl
ZCgpKQogICAgICAgICByZXR1cm47CiAgICAgVmlkZW9UcmFja1ByaXZhdGU6OnNldFNlbGVjdGVk
KHNlbGVjdGVkKTsKIAotICAgIGlmIChzZWxlY3RlZCAmJiBtX3BsYXllcikKLSAgICAgICAgbV9w
bGF5ZXItPmVuYWJsZVRyYWNrKFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZTo6
VmlkZW8sIG1faW5kZXgpOworICAgIGlmIChtX3BsYXllcikKKyAgICAgICAgbV9wbGF5ZXItPnVw
ZGF0ZUVuYWJsZWRWaWRlb1RyYWNrKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRl
b1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL1ZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggNGFmMmU4YTg3
ZTQzOWE2M2RiZmM4ZmI2NGY4OTU4YjM2YWU0Y2I0Ni4uYTk4MTYzZDFmNzFiNzQ2NjM2NjkwODZh
ZTJlMmMyODQ3ZWY2NjRmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1ZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvVHJhY2tQcml2YXRlR1N0
cmVhbWVyLmgKQEAgLTUzLDcgKzUzLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaXNjb25uZWN0
KCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIG1hcmtBc0FjdGl2ZSgpOwogICAgIHZvaWQgc2V0U2Vs
ZWN0ZWQoYm9vbCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRBY3RpdmUoYm9vbCBlbmFibGVkKSBv
dmVycmlkZSB7IHNldFNlbGVjdGVkKGVuYWJsZWQpOyB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>