<?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>160828</bug_id>
          
          <creation_ts>2016-08-12 15:30:47 -0700</creation_ts>
          <short_desc>Align the event listener firing code with the latest DOM specification and simplify it</short_desc>
          <delta_ts>2016-08-15 23:37:33 -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>DOM</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="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1219743</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-08-12 15:30:47 -0700</bug_when>
    <thetext>Align the event listener firing code with the latest DOM specification:
- https://dom.spec.whatwg.org/#concept-event-listener-invoke
- https://dom.spec.whatwg.org/#concept-event-listener-inner-invoke
- https://dom.spec.whatwg.org/#concept-event-listener

This simplifies the code a bit and makes it less error prone. There should be no web-exposed behavior change though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219747</commentid>
    <comment_count>1</comment_count>
      <attachid>285964</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-08-12 15:37:21 -0700</bug_when>
    <thetext>Created attachment 285964
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219754</commentid>
    <comment_count>2</comment_count>
      <attachid>285967</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-08-12 15:49:20 -0700</bug_when>
    <thetext>Created attachment 285967
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219773</commentid>
    <comment_count>3</comment_count>
      <attachid>285972</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-08-12 16:25:22 -0700</bug_when>
    <thetext>Created attachment 285972
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219948</commentid>
    <comment_count>4</comment_count>
      <attachid>285972</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-08-14 14:13:58 -0700</bug_when>
    <thetext>Comment on attachment 285972
Patch

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

&gt; Source/WebCore/dom/EventListenerMap.cpp:125
&gt; +    m_entries.append(std::make_pair(eventType, WTFMove(listeners)));

Can we use brace syntax instead of make_pair here?

&gt; Source/WebCore/dom/EventListenerMap.cpp:136
&gt; +    listeners[indexOfRemovedListener]-&gt;markAsRemoved();
&gt; +    listeners.remove(indexOfRemovedListener);

This makes me think we need a take function in Vector. Would make this code a bit more elegant. Not suggesting we do that at this time, though.

&gt; Source/WebCore/dom/EventListenerMap.cpp:176
&gt; +    bool foundListener = listenerVector.removeFirstMatching([] (const auto&amp; registeredListener) {
&gt; +        if (registeredListener-&gt;listener().wasCreatedFromMarkup()) {
&gt; +            registeredListener-&gt;markAsRemoved();
&gt; +            return true;
&gt; +        }
&gt; +        return false;
&gt;      });

This also would read better with a takeFirstMatching function. Putting the side effect inside the predicate is tricky, not necessarily in a good way.

&gt; Source/WebCore/dom/EventListenerMap.h:46
&gt; +using EventListenerVector = Vector&lt;RefPtr&lt;RegisteredEventListener&gt;, 1&gt;;

Should change this header to use #pragma once.

&gt; Source/WebCore/dom/EventTarget.cpp:208
&gt; +class FiringEventListenersScope {
&gt; +public:
&gt; +    explicit FiringEventListenersScope(EventTargetData&amp; data)
&gt; +        : m_data(data)
&gt; +    {
&gt; +        m_data.isFiringEventListeners++;
&gt; +    }
&gt; +
&gt; +    ~FiringEventListenersScope()
&gt; +    {
&gt; +        ASSERT(m_data.isFiringEventListeners);
&gt; +        m_data.isFiringEventListeners--;
&gt; +    }
&gt; +
&gt; +private:
&gt; +    EventTargetData&amp; m_data;
&gt; +};

Instead of a count, this could use a boolean and a save/restore idiom. We’d then need only 1 bit, not 32 bits, in every EventTargetData. But either way seems OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219952</commentid>
    <comment_count>5</comment_count>
      <attachid>285972</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-08-14 14:41:57 -0700</bug_when>
    <thetext>Comment on attachment 285972
Patch

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

&gt;&gt; Source/WebCore/dom/EventTarget.cpp:208
&gt;&gt; +};
&gt; 
&gt; Instead of a count, this could use a boolean and a save/restore idiom. We’d then need only 1 bit, not 32 bits, in every EventTargetData. But either way seems OK.

It seems I could simply use the following in fireEventListeners:
TemporaryChange firingEventListenersScope(data-&gt;isFiringEventListeners, true);

Unless I am missing something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219966</commentid>
    <comment_count>6</comment_count>
      <attachid>286035</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-08-14 15:57:35 -0700</bug_when>
    <thetext>Created attachment 286035
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219990</commentid>
    <comment_count>7</comment_count>
      <attachid>286035</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-14 17:49:52 -0700</bug_when>
    <thetext>Comment on attachment 286035
Patch

Clearing flags on attachment: 286035

Committed r204459: &lt;http://trac.webkit.org/changeset/204459&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219991</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-14 17:49:57 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220056</commentid>
    <comment_count>9</comment_count>
      <attachid>286035</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-08-15 10:10:19 -0700</bug_when>
    <thetext>Comment on attachment 286035
Patch

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

&gt; Source/WebCore/ChangeLog:15
&gt; +        1. RegisteredEventListener (equivalent to &quot;event listener&quot; in the spec)
&gt; +           is now RefCounted

Might be nice to follow this up by finding a new name for EventListener and renaming RegisteredEventListener to EventListener, following our &quot;rule of thumb&quot; where we like to have our classes be named to match things mentioned in the specifications.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220058</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-08-15 10:11:32 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Comment on attachment 286035 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=286035&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:15
&gt; &gt; +        1. RegisteredEventListener (equivalent to &quot;event listener&quot; in the spec)
&gt; &gt; +           is now RefCounted
&gt; 
&gt; Might be nice to follow this up by finding a new name for EventListener and
&gt; renaming RegisteredEventListener to EventListener, following our &quot;rule of
&gt; thumb&quot; where we like to have our classes be named to match things mentioned
&gt; in the specifications.

Agreed. I&apos;ll follow-up on this shortly and a couple of other suggestions you made in your earlier review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220066</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-08-15 10:25:45 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; Comment on attachment 286035 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=286035&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/ChangeLog:15
&gt; &gt; &gt; +        1. RegisteredEventListener (equivalent to &quot;event listener&quot; in the spec)
&gt; &gt; &gt; +           is now RefCounted
&gt; &gt; 
&gt; &gt; Might be nice to follow this up by finding a new name for EventListener and
&gt; &gt; renaming RegisteredEventListener to EventListener, following our &quot;rule of
&gt; &gt; thumb&quot; where we like to have our classes be named to match things mentioned
&gt; &gt; in the specifications.
&gt; 
&gt; Agreed. I&apos;ll follow-up on this shortly and a couple of other suggestions you
&gt; made in your earlier review.

I am thinking:
- EventListener -&gt; EventListenerCallback
- RegisteredEventListener -&gt; EventListener</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220161</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-08-15 14:37:02 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; Comment on attachment 286035 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=286035&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/ChangeLog:15
&gt; &gt; &gt; &gt; +        1. RegisteredEventListener (equivalent to &quot;event listener&quot; in the spec)
&gt; &gt; &gt; &gt; +           is now RefCounted
&gt; &gt; &gt; 
&gt; &gt; &gt; Might be nice to follow this up by finding a new name for EventListener and
&gt; &gt; &gt; renaming RegisteredEventListener to EventListener, following our &quot;rule of
&gt; &gt; &gt; thumb&quot; where we like to have our classes be named to match things mentioned
&gt; &gt; &gt; in the specifications.
&gt; &gt; 
&gt; &gt; Agreed. I&apos;ll follow-up on this shortly and a couple of other suggestions you
&gt; &gt; made in your earlier review.
&gt; 
&gt; I am thinking:
&gt; - EventListener -&gt; EventListenerCallback
&gt; - RegisteredEventListener -&gt; EventListener

I actually don&apos;t know now. The issue is that the specification defines an &quot;event listener&quot; as so [1]:
&quot;&quot;&quot;
An event listener can be used to observe a specific event.

An event listener consists of these fields:

type (a string)
callback (an EventListener)
capture (a boolean, initially false)
passive (a boolean, initially false)
once (a boolean, initially false)
removed (a boolean for bookkeeping purposes, initially false)
&quot;&quot;&quot;

But then the callback field is an &quot;EventListener&quot; type:
https://dom.spec.whatwg.org/#callbackdef-eventlistener

Therefore, our &quot;EventListener&quot; naming is in line with the specification. We then use the &quot;RegisteredEventListener&quot; naming for what the specification refers to as &quot;event listener&quot; in prose.
I think it is an issue with the specification that uses basically the same naming for 2 different things.


[1] https://dom.spec.whatwg.org/#concept-event-listener</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220386</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-08-15 23:37:33 -0700</bug_when>
    <thetext>OK, guess we leave the names alone.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285964</attachid>
            <date>2016-08-12 15:37:21 -0700</date>
            <delta_ts>2016-08-12 15:49:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160828-20160812153542.patch</filename>
            <type>text/plain</type>
            <size>43641</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MzgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmQ0MzAwYTQwN2UxNGYx
MTExMTY1NzIyYjY1ODk0ZDI1YjFhY2YwZC4uNzE3ODdhMmY4YmVjZjgzOTU3ZDMxYzU5MzdhNDk4
YmUwZGM1OWY4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBACisyMDE2LTA4LTEyICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQWxpZ24gdGhlIGV2ZW50IGxp
c3RlbmVyIGZpcmluZyBjb2RlIHdpdGggdGhlIGxhdGVzdCBET00gU3BlY2lmaWNhdGlvbiBhbmQg
c2ltcGxpZnkgaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MDgyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFsaWduIHRoZSBldmVudCBsaXN0ZW5lciBmaXJpbmcgY29kZSB3aXRoIHRoZSBsYXRlc3Qg
RE9NIHNwZWNpZmljYXRpb246CisgICAgICAgIC0gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3Jn
LyNjb25jZXB0LWV2ZW50LWxpc3RlbmVyLWludm9rZQorICAgICAgICAtIGh0dHBzOi8vZG9tLnNw
ZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ldmVudC1saXN0ZW5lci1pbm5lci1pbnZva2UKKyAgICAg
ICAgLSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZXZlbnQtbGlzdGVuZXIK
KworICAgICAgICBUaGUgZm9sbG93aW5nIGNoYW5nZXMgd2VyZSBtYWRlOgorICAgICAgICAxLiBS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciAoZXF1aXZhbGVudCB0byAiZXZlbnQgbGlzdGVuZXIiIGlu
IHRoZSBzcGVjKQorICAgICAgICAgICBpcyBub3cgUmVmQ291bnRlZAorICAgICAgICAyLiBSZWdp
c3RlcmVkRXZlbnRMaXN0ZW5lciBub3cgaGFzIGEgd2FzUmVtb3ZlZCBmbGFnIGFzIGluIHNwZWNp
ZmljYXRpb24uCisgICAgICAgIDMuIGZpcmVFdmVudExpc3RlbmVycygpIGlzIG5vdyBpdGVyYXRp
bmcgb3ZlciBhIGNvcHkgb2YgdGhlIGV2ZW50CisgICAgICAgICAgIGxpc3RlbmVycywgYXMgaW4g
dGhlIHNwZWNpZmljYXRpb24uIFdlIHJlbHkgb24gdGhlIHdhc1JlbW92ZWQgcmVtb3ZlZAorICAg
ICAgICAgICBmbGFnIHRvIGF2b2lkIGV4ZWN1dGluZyBldmVudCBsaXN0ZW5lcnMgdGhhdCB3ZXJl
IHJlbW92ZWQgd2hpbGUgd2UKKyAgICAgICAgICAgaXRlcmF0ZS4KKworICAgICAgICBQcmV2aW91
c2x5LCB0aGUgY29kZSB3YXMgbW9kaWZ5aW5nIHRoZSBldmVudCBsaXN0ZW5lcnMgdmVjdG9yIHdl
IHdlcmUKKyAgICAgICAgaXRlcmF0aW5nIG9uLiBEb2luZyBzbyBzYWZlbHkgbGVhZCB0byBjb21w
bGljYXRlZCBhbmQgZXJyb3IgcHJvbmUgY29kZS4KKyAgICAgICAgVGhlIG5ldyBjb2RlIGlzIG11
Y2ggc2ltcGxlciBhbmQgZWFzaWVyIHRvIHJlYXNvbiBhYm91dC4KKworICAgICAgICBUaGlzIGNo
YW5nZSBzZWVtcyB0byBiZSBwZXJmLW5ldXRyYWwgb24gU3BlZWRvbWV0ZXIuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLCBubyB3ZWItZXhwb3NlZCBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDb21tYW5kTGluZUFQSUhvc3RDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SlNMaXN0ZW5lckZ1bmN0aW9ucyk6CisgICAgICAg
ICogZG9tL0RPTUFsbEluT25lLmNwcDoKKyAgICAgICAgKiBkb20vRXZlbnRMaXN0ZW5lck1hcC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3RlbmVyTWFwOjphc3NlcnROb0FjdGl2ZUl0
ZXJhdG9ycyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3RlbmVyTWFwOjpjb250YWluc0Nh
cHR1cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3RlbmVyTWFwOjpjb250YWluc0Fj
dGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kTGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRMaXN0ZW5lck1hcDo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OnJlbW92ZUxpc3Rl
bmVyRnJvbVZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3RlbmVyTWFwOjpyZW1v
dmUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6ZmluZCk6CisgICAgICAg
IChXZWJDb3JlOjpyZW1vdmVGaXJzdExpc3RlbmVyQ3JlYXRlZEZyb21NYXJrdXApOgorICAgICAg
ICAoV2ViQ29yZTo6Y29weUxpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJnZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6Y29weUV2ZW50TGlzdGVuZXJzTm90
Q3JlYXRlZEZyb21NYXJrdXBUb1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3Rl
bmVySXRlcmF0b3I6Om5leHRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3Rl
bmVyTWFwOjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgICogZG9tL0V2ZW50TGlzdGVuZXJNYXAu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXJNYXA6OmNvbnRhaW5zKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXJNYXA6OmFzc2VydE5vQWN0aXZlSXRlcmF0b3JzKToK
KyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRU
YXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJn
ZXQ6OmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlyaW5n
RXZlbnRMaXN0ZW5lcnNTY29wZTo6RmlyaW5nRXZlbnRMaXN0ZW5lcnNTY29wZSk6CisgICAgICAg
IChXZWJDb3JlOjpGaXJpbmdFdmVudExpc3RlbmVyc1Njb3BlOjp+RmlyaW5nRXZlbnRMaXN0ZW5l
cnNTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldDo6ZmlyZUV2ZW50TGlzdGVu
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjpzZXRBdHRyaWJ1dGVFdmVudExp
c3RlbmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjpoYXNBY3Rp
dmVFdmVudExpc3RlbmVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdl
dDo6ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50VGFyZ2V0OjpnZXRFdmVudExpc3RlbmVycyk6IERlbGV0ZWQuCisgICAgICAgICogZG9t
L0V2ZW50VGFyZ2V0Lmg6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldDo6aXNGaXJpbmdF
dmVudExpc3RlbmVycyk6CisgICAgICAgICogZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBkb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOjpPcHRpb25zOjpPcHRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI6Omxpc3RlbmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOjp1c2VDYXB0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOjppc1Bhc3NpdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI6OmlzT25jZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjo6d2FzUmVtb3ZlZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjo6bWFya0FzUmVtb3ZlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjo6UmVnaXN0ZXJlZEV2ZW50TGlz
dGVuZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JF
dmVudExpc3RlbmVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXJJbmZvOjpFdmVudExpc3RlbmVySW5mbyk6
CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFzTG9h
ZExpc3RlbmVyKToKKwogMjAxNi0wOC0xMSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNl
bkB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCBVUkxQYXJzZXIgc3R1YgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAppbmRleCAzZGVhMDQ5ZDY5MWQ5ZGE3YWYxMmY2M2FlYTNlYzA1ZGNjMzVhMDkxLi4zNWM3
OGZlNWQ0N2U3MDgzYjRlM2UwM2IxYmI5YWZjNTJkOTlkYTAxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dApAQCAtMTUwMyw3ICsxNTAzLDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGRvbS9RdWFs
aWZpZWROYW1lLmNwcAogICAgIGRvbS9SYWRpb0J1dHRvbkdyb3Vwcy5jcHAKICAgICBkb20vUmFu
Z2UuY3BwCi0gICAgZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNwcAogICAgIGRvbS9TY29w
ZWRFdmVudFF1ZXVlLmNwcAogICAgIGRvbS9TY3JpcHRFbGVtZW50LmNwcAogICAgIGRvbS9TY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDc3NDcwMDgzNjdmZTY1MGRiODZkZTRkMDkxOGNh
MTQ0OWM4YTk3YzYuLjUzMTIwMjg3OWI1OWVmZjJkZGZiZTM2MGI3ZGRlYTRkNjkzNzY5ODUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTMwNjUsNyArMzA2NSw2IEBACiAJCTg1MDMxQjQ4MEE0NEVGQzcwMEY5OTJFMCAvKiBNb3Vz
ZVJlbGF0ZWRFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODUwMzFCMzIwQTQ0RUZDNzAwRjk5MkUwIC8qIE1vdXNlUmVsYXRlZEV2ZW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODUwMzFCNDkw
QTQ0RUZDNzAwRjk5MkUwIC8qIE11dGF0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODUwMzFCMzMwQTQ0RUZDNzAwRjk5MkUwIC8qIE11
dGF0aW9uRXZlbnQuY3BwICovOyB9OwogCQk4NTAzMUI0QTBBNDRFRkM3MDBGOTkyRTAgLyogTXV0
YXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODUwMzFCMzQwQTQ0RUZDNzAwRjk5MkUwIC8qIE11dGF0aW9uRXZlbnQuaCAqLzsgfTsKLQkJ
ODUwMzFCNEIwQTQ0RUZDNzAwRjk5MkUwIC8qIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1MDMxQjM1MEE0
NEVGQzcwMEY5OTJFMCAvKiBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5jcHAgKi87IH07CiAJCTg1
MDMxQjRDMEE0NEVGQzcwMEY5OTJFMCAvKiBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODUwMzFCMzYwQTQ0RUZD
NzAwRjk5MkUwIC8qIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODUwMzFCNEQwQTQ0RUZDNzAwRjk5MkUw
IC8qIFVJRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODUwMzFCMzcwQTQ0RUZDNzAwRjk5MkUwIC8qIFVJRXZlbnQuY3BwICovOyB9OwogCQk4
NTAzMUI0RTBBNDRFRkM3MDBGOTkyRTAgLyogVUlFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODUwMzFCMzgwQTQ0RUZDNzAwRjk5MkUwIC8qIFVJ
RXZlbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMTA1MDUsNyArMTA1MDQsNiBAQAogCQk4NTAzMUIzMjBBNDRFRkM3MDBGOTkyRTAgLyogTW91
c2VSZWxhdGVkRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vdXNl
UmVsYXRlZEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg1MDMxQjMzMEE0
NEVGQzcwMEY5OTJFMCAvKiBNdXRhdGlvbkV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBNdXRhdGlvbkV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJODUwMzFCMzQwQTQ0RUZDNzAwRjk5MkUwIC8qIE11dGF0aW9uRXZlbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE11dGF0aW9uRXZlbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODUwMzFCMzUwQTQ0RUZDNzAwRjk5MkUwIC8qIFJlZ2lzdGVy
ZWRFdmVudExpc3RlbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTg1MDMxQjM2MEE0NEVGQzcwMEY5OTJFMCAvKiBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODUwMzFCMzcwQTQ0RUZDNzAwRjk5
MkUwIC8qIFVJRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFVJRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NTAzMUIzODBBNDRF
RkM3MDBGOTkyRTAgLyogVUlFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVUlFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTE1MTIsOCArMTE1
MTAsOCBAQAogCQk5QkQ0RTkxODFDNDYyQ0ZDMDA1MDY1QkMgLyogQ3VzdG9tRWxlbWVudHNSZWdp
c3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDdXN0b21FbGVt
ZW50c1JlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJENEU5MTkx
QzQ2MkNGQzAwNTA2NUJDIC8qIEN1c3RvbUVsZW1lbnRzUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ3VzdG9tRWxlbWVudHNSZWdpc3RyeS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5QkQ4QTk1OTE4QkVGQzc2MDA5ODdFOUEgLyogQ29sbGVjdGlv
bkluZGV4Q2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29s
bGVjdGlvbkluZGV4Q2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5QkU2
NzEwOTFENUFFQjA0MDAzNDU1MTQgLyogSlNDdXN0b21FbGVtZW50c1JlZ2lzdHJ5LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTQ3VzdG9tRWxlbWVudHNSZWdpc3Ry
eS5jcHA7IHBhdGggPSAiSlNDdXN0b21FbGVtZW50c1JlZ2lzdHJ5LmNwcCI7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTlCRTY3MTBBMUQ1QUVCMDQwMDM0NTUxNCAvKiBKU0N1c3RvbUVs
ZW1lbnRzUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNDdXN0
b21FbGVtZW50c1JlZ2lzdHJ5Lmg7IHBhdGggPSAiSlNDdXN0b21FbGVtZW50c1JlZ2lzdHJ5Lmgi
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QkU2NzEwOTFENUFFQjA0MDAzNDU1MTQg
LyogSlNDdXN0b21FbGVtZW50c1JlZ2lzdHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTQ3VzdG9tRWxlbWVudHNSZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTlCRTY3MTBBMUQ1QUVCMDQwMDM0NTUxNCAvKiBKU0N1c3RvbUVsZW1l
bnRzUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDdXN0b21F
bGVtZW50c1JlZ2lzdHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCRjlBODdF
MTY0OEREMkYwMDFDNkIyMyAvKiBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTEZvcm1Db250cm9sc0NvbGxl
Y3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkY5QTg3RjE2NDhERDJG
MDAxQzZCMjMgLyogSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlENjM4MDBGMUFGMTZFMTYwMDMxQTE1QyAvKiBTdHls
ZVNlbGZBbGlnbm1lbnREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0
eWxlU2VsZkFsaWdubWVudERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0
MTkyLDcgKzI0MTkwLDYgQEAKIAkJCQk5MzZERDAzQTA5Q0VBQzI3MDA1NkFFOEMgLyogUmFuZ2Uu
aWRsICovLAogCQkJCTkzRDlENTNCMERBMjdFMTgwMDc3MjE2QyAvKiBSYW5nZUJvdW5kYXJ5UG9p
bnQuaCAqLywKIAkJCQlBODREODI3QjExRDMzM0VEMDA5NzI5OTAgLyogUmF3RGF0YURvY3VtZW50
UGFyc2VyLmggKi8sCi0JCQkJODUwMzFCMzUwQTQ0RUZDNzAwRjk5MkUwIC8qIFJlZ2lzdGVyZWRF
dmVudExpc3RlbmVyLmNwcCAqLywKIAkJCQk4NTAzMUIzNjBBNDRFRkM3MDBGOTkyRTAgLyogUmVn
aXN0ZXJlZEV2ZW50TGlzdGVuZXIuaCAqLywKIAkJCQlBNzZFNUY3RTEzNUUwRENGMDBBNjk4Mzcg
LyogUmVuZGVyZWREb2N1bWVudE1hcmtlci5oICovLAogCQkJCTQ5OThBRUM0MTNGOUQwRUEwMDkw
QjFBQSAvKiBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjay5oICovLApAQCAtMzA4NzUsNyAr
MzA4NzIsNiBAQAogCQkJCTJFQzQxREU0MUMwNDEwQTMwMEQyOTRGRSAvKiBSZWFsdGltZU1lZGlh
U291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ0NUE5
NUExNzVENDE3MTAwQzIxRUM4IC8qIFJlY3RhbmdsZVNoYXBlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDQUI0MTgxMTNFMzU2RTgwMEQ4QUFGMyAvKiBSZWdpb24uY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJODUwMzFCNEIwQTQ0RUZDNzAwRjk5MkUwIC8qIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNERkMzNjA1MThDQTYxQzIwMDI2RTU2RiAvKiBSZW1v
dGVDb21tYW5kTGlzdGVuZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RGQzM2MDcxOENBNjk2
QzAwMjZFNTZGIC8qIFJlbW90ZUNvbW1hbmRMaXN0ZW5lcklPUy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUNEOEFDQTg4MUQyMzdBQTIwMEVDQzU5RSAvKiBSZW1vdGVDb21tYW5kTGlzdGVuZXJNYWMu
bW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9tLmNwcAppbmRleCBhMGNhODNlYzFhOGVkMDM4
OWRmOTA5Y2NhZTJjODg0YmUzMjRlNTFhLi41NzUxOTYyYzBiMmQzMGIzODEwMWVmMjBhZWMxYTA1
NzRjNzI3MmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NvbW1h
bmRMaW5lQVBJSG9zdEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDb21tYW5kTGluZUFQSUhvc3RDdXN0b20uY3BwCkBAIC03Myw3ICs3Myw3IEBAIHN0YXRpYyBK
U0FycmF5KiBnZXRKU0xpc3RlbmVyRnVuY3Rpb25zKEV4ZWNTdGF0ZSYgc3RhdGUsIERvY3VtZW50
KiBkb2N1bWVudCwgY29uCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHNpemVfdCBoYW5k
bGVyc0NvdW50ID0gbGlzdGVuZXJJbmZvLmV2ZW50TGlzdGVuZXJWZWN0b3Iuc2l6ZSgpOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwLCBvdXRwdXRJbmRleCA9IDA7IGkgPCBoYW5kbGVyc0NvdW50OyAr
K2kpIHsKLSAgICAgICAgY29uc3QgSlNFdmVudExpc3RlbmVyKiBqc0xpc3RlbmVyID0gSlNFdmVu
dExpc3RlbmVyOjpjYXN0KGxpc3RlbmVySW5mby5ldmVudExpc3RlbmVyVmVjdG9yW2ldLmxpc3Rl
bmVyLmdldCgpKTsKKyAgICAgICAgY29uc3QgSlNFdmVudExpc3RlbmVyKiBqc0xpc3RlbmVyID0g
SlNFdmVudExpc3RlbmVyOjpjYXN0KCZsaXN0ZW5lckluZm8uZXZlbnRMaXN0ZW5lclZlY3Rvcltp
XS0+bGlzdGVuZXIoKSk7CiAgICAgICAgIGlmICghanNMaXN0ZW5lcikgewogICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTg5LDcgKzg5
LDcgQEAgc3RhdGljIEpTQXJyYXkqIGdldEpTTGlzdGVuZXJGdW5jdGlvbnMoRXhlY1N0YXRlJiBz
dGF0ZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBjb24KIAogICAgICAgICBKU09iamVjdCogbGlzdGVu
ZXJFbnRyeSA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7CiAgICAgICAgIGxpc3RlbmVy
RW50cnktPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJsaXN0
ZW5lciIpLCBmdW5jdGlvbik7Ci0gICAgICAgIGxpc3RlbmVyRW50cnktPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1c2VDYXB0dXJlIiksIGpzQm9vbGVhbihs
aXN0ZW5lckluZm8uZXZlbnRMaXN0ZW5lclZlY3RvcltpXS51c2VDYXB0dXJlKSk7CisgICAgICAg
IGxpc3RlbmVyRW50cnktPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJ1c2VDYXB0dXJlIiksIGpzQm9vbGVhbihsaXN0ZW5lckluZm8uZXZlbnRMaXN0ZW5lclZl
Y3RvcltpXS0+dXNlQ2FwdHVyZSgpKSk7CiAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgo
JnN0YXRlLCBvdXRwdXRJbmRleCsrLCBKU1ZhbHVlKGxpc3RlbmVyRW50cnkpKTsKICAgICB9CiAg
ICAgcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01BbGxJ
bk9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCmluZGV4IGQzZDVl
YTM4YmIwYzlkN2UyZmU3MDM1ZTBjMWYxNTYyM2U4NjU2ZDYuLmMwYmY0ZmMwMjNhOGYyZDViZjk3
NGVlN2FiNjRkOTgxY2Y5OGY3ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01B
bGxJbk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcApAQCAt
MTI4LDcgKzEyOCw2IEBACiAvLyAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5jcHAiCiAjaW5jbHVk
ZSAiUmFkaW9CdXR0b25Hcm91cHMuY3BwIgogI2luY2x1ZGUgIlJhbmdlLmNwcCIKLSNpbmNsdWRl
ICJSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5jcHAiCiAjaW5jbHVkZSAiU2NvcGVkRXZlbnRRdWV1
ZS5jcHAiCiAjaW5jbHVkZSAiU2NyaXB0RWxlbWVudC5jcHAiCiAjaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRM
aXN0ZW5lck1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lck1hcC5jcHAK
aW5kZXggN2U3OWFlYmI2ODNmZDk2YjUwNTRlNjE0NTg1MzIyN2Y2NTI5NTUzYi4uMTgwYTljOGJm
MTZkNGRjNTY0OWQyZGU0ZTdjYWIwMTlmOTY4ZjVmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dExpc3RlbmVyTWFwLmNwcApAQCAtNDUsNyArNDUsNyBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWZuZGVmIE5ERUJVRwotdm9pZCBFdmVudExpc3RlbmVy
TWFwOjphc3NlcnROb0FjdGl2ZUl0ZXJhdG9ycygpCit2b2lkIEV2ZW50TGlzdGVuZXJNYXA6OmFz
c2VydE5vQWN0aXZlSXRlcmF0b3JzKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIW1fYWN0aXZlSXRl
cmF0b3JDb3VudCk7CiB9CkBAIC01NSwzNyArNTUsMjggQEAgRXZlbnRMaXN0ZW5lck1hcDo6RXZl
bnRMaXN0ZW5lck1hcCgpCiB7CiB9CiAKLWJvb2wgRXZlbnRMaXN0ZW5lck1hcDo6Y29udGFpbnMo
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpIGNvbnN0Ci17Ci0gICAgZm9yIChhdXRvJiBl
bnRyeSA6IG1fZW50cmllcykgewotICAgICAgICBpZiAoZW50cnkuZmlyc3QgPT0gZXZlbnRUeXBl
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQogYm9vbCBFdmVudExpc3RlbmVyTWFwOjpjb250YWluc0NhcHR1cmluZyhjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSkgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9lbnRy
aWVzKSB7Ci0gICAgICAgIGlmIChlbnRyeS5maXJzdCA9PSBldmVudFR5cGUpIHsKLSAgICAgICAg
ICAgIGZvciAoYXV0byYgZXZlbnRMaXN0ZW5lciA6ICplbnRyeS5zZWNvbmQpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoZXZlbnRMaXN0ZW5lci51c2VDYXB0dXJlKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGF1dG8qIGxpc3Rl
bmVycyA9IGZpbmQoZXZlbnRUeXBlKTsKKyAgICBpZiAoIWxpc3RlbmVycykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgZm9yIChhdXRvJiBldmVudExpc3RlbmVyIDogKmxpc3RlbmVycykg
eworICAgICAgICBpZiAoZXZlbnRMaXN0ZW5lci0+dXNlQ2FwdHVyZSgpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBFdmVudExp
c3RlbmVyTWFwOjpjb250YWluc0FjdGl2ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkg
Y29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9lbnRyaWVzKSB7Ci0gICAgICAgIGlm
IChlbnRyeS5maXJzdCA9PSBldmVudFR5cGUpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgZXZl
bnRMaXN0ZW5lciA6ICplbnRyeS5zZWNvbmQpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWV2ZW50
TGlzdGVuZXIuaXNQYXNzaXZlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGF1dG8qIGxpc3RlbmVycyA9IGZpbmQoZXZlbnRU
eXBlKTsKKyAgICBpZiAoIWxpc3RlbmVycykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Zm9yIChhdXRvJiBldmVudExpc3RlbmVyIDogKmxpc3RlbmVycykgeworICAgICAgICBpZiAoIWV2
ZW50TGlzdGVuZXItPmlzUGFzc2l2ZSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTEwOCw0NyArOTksNTEgQEAgVmVjdG9yPEF0b21p
Y1N0cmluZz4gRXZlbnRMaXN0ZW5lck1hcDo6ZXZlbnRUeXBlcygpIGNvbnN0CiAgICAgcmV0dXJu
IHR5cGVzOwogfQogCi1zdGF0aWMgYm9vbCBhZGRMaXN0ZW5lclRvVmVjdG9yKEV2ZW50TGlzdGVu
ZXJWZWN0b3IqIHZlY3RvciwgUmVmPEV2ZW50TGlzdGVuZXI+JiYgbGlzdGVuZXIsIGNvbnN0IFJl
Z2lzdGVyZWRFdmVudExpc3RlbmVyOjpPcHRpb25zJiBvcHRpb25zKQorc3RhdGljIGlubGluZSBz
aXplX3QgZmluZExpc3RlbmVyKEV2ZW50TGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycywgRXZlbnRM
aXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsKLSAgICBSZWdpc3RlcmVkRXZl
bnRMaXN0ZW5lciByZWdpc3RlcmVkTGlzdGVuZXIoV1RGTW92ZShsaXN0ZW5lciksIG9wdGlvbnMp
OwotCi0gICAgaWYgKHZlY3Rvci0+ZmluZChyZWdpc3RlcmVkTGlzdGVuZXIpICE9IG5vdEZvdW5k
KQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIER1cGxpY2F0ZSBsaXN0ZW5lci4KLQotICAgIHZl
Y3Rvci0+YXBwZW5kKHJlZ2lzdGVyZWRMaXN0ZW5lcik7Ci0gICAgcmV0dXJuIHRydWU7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0ZW5lcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
YXV0byYgcmVnaXN0ZXJlZExpc3RlbmVyID0gbGlzdGVuZXJzW2ldOworICAgICAgICBpZiAocmVn
aXN0ZXJlZExpc3RlbmVyLT5saXN0ZW5lcigpID09IGxpc3RlbmVyICYmIHJlZ2lzdGVyZWRMaXN0
ZW5lci0+dXNlQ2FwdHVyZSgpID09IHVzZUNhcHR1cmUpCisgICAgICAgICAgICByZXR1cm4gaTsK
KyAgICB9CisgICAgcmV0dXJuIG5vdEZvdW5kOwogfQogCiBib29sIEV2ZW50TGlzdGVuZXJNYXA6
OmFkZChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUmVmPEV2ZW50TGlzdGVuZXI+JiYg
bGlzdGVuZXIsIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOjpPcHRpb25zJiBvcHRpb25z
KQogewogICAgIGFzc2VydE5vQWN0aXZlSXRlcmF0b3JzKCk7CiAKLSAgICBmb3IgKGF1dG8mIGVu
dHJ5IDogbV9lbnRyaWVzKSB7Ci0gICAgICAgIGlmIChlbnRyeS5maXJzdCA9PSBldmVudFR5cGUp
Ci0gICAgICAgICAgICByZXR1cm4gYWRkTGlzdGVuZXJUb1ZlY3RvcihlbnRyeS5zZWNvbmQuZ2V0
KCksIFdURk1vdmUobGlzdGVuZXIpLCBvcHRpb25zKTsKKyAgICBpZiAoYXV0byogbGlzdGVuZXJz
ID0gZmluZChldmVudFR5cGUpKSB7CisgICAgICAgIGlmIChmaW5kTGlzdGVuZXIoKmxpc3RlbmVy
cywgbGlzdGVuZXIsIG9wdGlvbnMuY2FwdHVyZSkgIT0gbm90Rm91bmQpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7IC8vIER1cGxpY2F0ZSBsaXN0ZW5lci4KKyAgICAgICAgbGlzdGVuZXJzLT5h
cHBlbmQoUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI6OmNyZWF0ZShXVEZNb3ZlKGxpc3RlbmVyKSwg
b3B0aW9ucykpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBtX2VudHJpZXMu
YXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGV2ZW50VHlwZSwgc3RkOjptYWtlX3VuaXF1ZTxFdmVudExp
c3RlbmVyVmVjdG9yPigpKSk7Ci0gICAgcmV0dXJuIGFkZExpc3RlbmVyVG9WZWN0b3IobV9lbnRy
aWVzLmxhc3QoKS5zZWNvbmQuZ2V0KCksIFdURk1vdmUobGlzdGVuZXIpLCBvcHRpb25zKTsKKyAg
ICBhdXRvIGxpc3RlbmVycyA9IHN0ZDo6bWFrZV91bmlxdWU8RXZlbnRMaXN0ZW5lclZlY3Rvcj4o
KTsKKyAgICBsaXN0ZW5lcnMtPnVuY2hlY2tlZEFwcGVuZChSZWdpc3RlcmVkRXZlbnRMaXN0ZW5l
cjo6Y3JlYXRlKFdURk1vdmUobGlzdGVuZXIpLCBvcHRpb25zKSk7CisgICAgbV9lbnRyaWVzLmFw
cGVuZChzdGQ6Om1ha2VfcGFpcihldmVudFR5cGUsIFdURk1vdmUobGlzdGVuZXJzKSkpOworICAg
IHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCByZW1vdmVMaXN0ZW5lckZyb21WZWN0b3Io
RXZlbnRMaXN0ZW5lclZlY3RvciogbGlzdGVuZXJWZWN0b3IsIEV2ZW50TGlzdGVuZXImIGxpc3Rl
bmVyLCBib29sIHVzZUNhcHR1cmUsIHNpemVfdCYgaW5kZXhPZlJlbW92ZWRMaXN0ZW5lcikKK3N0
YXRpYyBib29sIHJlbW92ZUxpc3RlbmVyRnJvbVZlY3RvcihFdmVudExpc3RlbmVyVmVjdG9yJiBs
aXN0ZW5lcnMsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCiB7Ci0g
ICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgcmVnaXN0ZXJlZExpc3RlbmVyKGxpc3RlbmVyLCB1
c2VDYXB0dXJlKTsKLSAgICBpbmRleE9mUmVtb3ZlZExpc3RlbmVyID0gbGlzdGVuZXJWZWN0b3It
PmZpbmQocmVnaXN0ZXJlZExpc3RlbmVyKTsKLSAgICBpZiAoaW5kZXhPZlJlbW92ZWRMaXN0ZW5l
ciA9PSBub3RGb3VuZCkKKyAgICBzaXplX3QgaW5kZXhPZlJlbW92ZWRMaXN0ZW5lciA9IGZpbmRM
aXN0ZW5lcihsaXN0ZW5lcnMsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKKyAgICBpZiAoVU5MSUtF
TFkoaW5kZXhPZlJlbW92ZWRMaXN0ZW5lciA9PSBub3RGb3VuZCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBsaXN0ZW5lclZlY3Rvci0+cmVtb3ZlKGluZGV4T2ZSZW1vdmVkTGlzdGVuZXIp
OworCisgICAgbGlzdGVuZXJzW2luZGV4T2ZSZW1vdmVkTGlzdGVuZXJdLT5tYXJrQXNSZW1vdmVk
KCk7CisgICAgbGlzdGVuZXJzLnJlbW92ZShpbmRleE9mUmVtb3ZlZExpc3RlbmVyKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBFdmVudExpc3RlbmVyTWFwOjpyZW1vdmUoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29sIHVzZUNh
cHR1cmUsIHNpemVfdCYgaW5kZXhPZlJlbW92ZWRMaXN0ZW5lcikKK2Jvb2wgRXZlbnRMaXN0ZW5l
ck1hcDo6cmVtb3ZlKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVy
JiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQogewogICAgIGFzc2VydE5vQWN0aXZlSXRlcmF0
b3JzKCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9lbnRyaWVzLnNpemUoKTsg
KytpKSB7CiAgICAgICAgIGlmIChtX2VudHJpZXNbaV0uZmlyc3QgPT0gZXZlbnRUeXBlKSB7Ci0g
ICAgICAgICAgICBib29sIHdhc1JlbW92ZWQgPSByZW1vdmVMaXN0ZW5lckZyb21WZWN0b3IobV9l
bnRyaWVzW2ldLnNlY29uZC5nZXQoKSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUsIGluZGV4T2ZSZW1v
dmVkTGlzdGVuZXIpOworICAgICAgICAgICAgYm9vbCB3YXNSZW1vdmVkID0gcmVtb3ZlTGlzdGVu
ZXJGcm9tVmVjdG9yKCptX2VudHJpZXNbaV0uc2Vjb25kLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7
CiAgICAgICAgICAgICBpZiAobV9lbnRyaWVzW2ldLnNlY29uZC0+aXNFbXB0eSgpKQogICAgICAg
ICAgICAgICAgIG1fZW50cmllcy5yZW1vdmUoaSk7CiAgICAgICAgICAgICByZXR1cm4gd2FzUmVt
b3ZlZDsKQEAgLTE1OCw3ICsxNTMsNyBAQCBib29sIEV2ZW50TGlzdGVuZXJNYXA6OnJlbW92ZShj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYgbGlzdAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotRXZlbnRMaXN0ZW5lclZlY3RvciogRXZlbnRMaXN0ZW5lck1hcDo6
ZmluZChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKK0V2ZW50TGlzdGVuZXJWZWN0b3Iq
IEV2ZW50TGlzdGVuZXJNYXA6OmZpbmQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpIGNv
bnN0CiB7CiAgICAgYXNzZXJ0Tm9BY3RpdmVJdGVyYXRvcnMoKTsKIApAQCAtMTcyLDggKzE2Nywx
MiBAQCBFdmVudExpc3RlbmVyVmVjdG9yKiBFdmVudExpc3RlbmVyTWFwOjpmaW5kKGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnRUeXBlKQogCiBzdGF0aWMgdm9pZCByZW1vdmVGaXJzdExpc3RlbmVy
Q3JlYXRlZEZyb21NYXJrdXAoRXZlbnRMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJWZWN0b3IpCiB7
Ci0gICAgYm9vbCBmb3VuZExpc3RlbmVyID0gbGlzdGVuZXJWZWN0b3IucmVtb3ZlRmlyc3RNYXRj
aGluZyhbXSAoY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyKSB7Ci0gICAg
ICAgIHJldHVybiBsaXN0ZW5lci5saXN0ZW5lci0+d2FzQ3JlYXRlZEZyb21NYXJrdXAoKTsKKyAg
ICBib29sIGZvdW5kTGlzdGVuZXIgPSBsaXN0ZW5lclZlY3Rvci5yZW1vdmVGaXJzdE1hdGNoaW5n
KFtdIChjb25zdCBhdXRvJiByZWdpc3RlcmVkTGlzdGVuZXIpIHsKKyAgICAgICAgaWYgKHJlZ2lz
dGVyZWRMaXN0ZW5lci0+bGlzdGVuZXIoKS53YXNDcmVhdGVkRnJvbU1hcmt1cCgpKSB7CisgICAg
ICAgICAgICByZWdpc3RlcmVkTGlzdGVuZXItPm1hcmtBc1JlbW92ZWQoKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9KTsK
ICAgICBBU1NFUlRfVU5VU0VEKGZvdW5kTGlzdGVuZXIsIGZvdW5kTGlzdGVuZXIpOwogfQpAQCAt
MTkyLDEzICsxOTEsMTMgQEAgdm9pZCBFdmVudExpc3RlbmVyTWFwOjpyZW1vdmVGaXJzdEV2ZW50
TGlzdGVuZXJDcmVhdGVkRnJvbU1hcmt1cChjb25zdCBBdG9taWNTdHIKICAgICB9CiB9CiAKLXN0
YXRpYyB2b2lkIGNvcHlMaXN0ZW5lcnNOb3RDcmVhdGVkRnJvbU1hcmt1cFRvVGFyZ2V0KGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyVmVjdG9yKiBsaXN0ZW5lclZl
Y3RvciwgRXZlbnRUYXJnZXQqIHRhcmdldCkKK3N0YXRpYyB2b2lkIGNvcHlMaXN0ZW5lcnNOb3RD
cmVhdGVkRnJvbU1hcmt1cFRvVGFyZ2V0KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBF
dmVudExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lclZlY3RvciwgRXZlbnRUYXJnZXQqIHRhcmdldCkK
IHsKLSAgICBmb3IgKGF1dG8mIGxpc3RlbmVyIDogKmxpc3RlbmVyVmVjdG9yKSB7CisgICAgZm9y
IChhdXRvJiByZWdpc3RlcmVkTGlzdGVuZXIgOiBsaXN0ZW5lclZlY3RvcikgewogICAgICAgICAv
LyBFdmVudCBsaXN0ZW5lcnMgY3JlYXRlZCBmcm9tIG1hcmt1cCBoYXZlIGFscmVhZHkgYmVlbiB0
cmFuc2ZlcmVkIHRvIHRoZSBzaGFkb3cgdHJlZSBkdXJpbmcgY2xvbmluZy4KLSAgICAgICAgaWYg
KGxpc3RlbmVyLmxpc3RlbmVyLT53YXNDcmVhdGVkRnJvbU1hcmt1cCgpKQorICAgICAgICBpZiAo
cmVnaXN0ZXJlZExpc3RlbmVyLT5saXN0ZW5lcigpLndhc0NyZWF0ZWRGcm9tTWFya3VwKCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdGFyZ2V0LT5hZGRFdmVudExpc3RlbmVyKGV2
ZW50VHlwZSwgKmxpc3RlbmVyLmxpc3RlbmVyLCBsaXN0ZW5lci51c2VDYXB0dXJlKTsKKyAgICAg
ICAgdGFyZ2V0LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgcmVnaXN0ZXJlZExpc3RlbmVy
LT5saXN0ZW5lcigpLCByZWdpc3RlcmVkTGlzdGVuZXItPnVzZUNhcHR1cmUoKSk7CiAgICAgfQog
fQogCkBAIC0yMDcsNyArMjA2LDcgQEAgdm9pZCBFdmVudExpc3RlbmVyTWFwOjpjb3B5RXZlbnRM
aXN0ZW5lcnNOb3RDcmVhdGVkRnJvbU1hcmt1cFRvVGFyZ2V0KEV2ZW50VGFyZ2UKICAgICBhc3Nl
cnROb0FjdGl2ZUl0ZXJhdG9ycygpOwogCiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fZW50cmll
cykKLSAgICAgICAgY29weUxpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJnZXQoZW50
cnkuZmlyc3QsIGVudHJ5LnNlY29uZC5nZXQoKSwgdGFyZ2V0KTsKKyAgICAgICAgY29weUxpc3Rl
bmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJnZXQoZW50cnkuZmlyc3QsICplbnRyeS5zZWNv
bmQsIHRhcmdldCk7CiB9CiAKIEV2ZW50TGlzdGVuZXJJdGVyYXRvcjo6RXZlbnRMaXN0ZW5lckl0
ZXJhdG9yKEV2ZW50VGFyZ2V0KiB0YXJnZXQpCkBAIC0yMzYsMTYgKzIzNSwxNiBAQCBFdmVudExp
c3RlbmVySXRlcmF0b3I6On5FdmVudExpc3RlbmVySXRlcmF0b3IoKQogRXZlbnRMaXN0ZW5lciog
RXZlbnRMaXN0ZW5lckl0ZXJhdG9yOjpuZXh0TGlzdGVuZXIoKQogewogICAgIGlmICghbV9tYXAp
Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGZvciAo
OyBtX2VudHJ5SW5kZXggPCBtX21hcC0+bV9lbnRyaWVzLnNpemUoKTsgKyttX2VudHJ5SW5kZXgp
IHsKICAgICAgICAgRXZlbnRMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gKm1fbWFwLT5tX2Vu
dHJpZXNbbV9lbnRyeUluZGV4XS5zZWNvbmQ7CiAgICAgICAgIGlmIChtX2luZGV4IDwgbGlzdGVu
ZXJzLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBsaXN0ZW5lcnNbbV9pbmRleCsrXS5saXN0
ZW5lci5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiAmbGlzdGVuZXJzW21faW5kZXgrK10tPmxp
c3RlbmVyKCk7CiAgICAgICAgIG1faW5kZXggPSAwOwogICAgIH0KIAotICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lck1hcC5oIGIvU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50TGlzdGVuZXJNYXAuaAppbmRleCA5ZjUzMmFkMWU2NjM4NWQ0MmIzNTA1N2I3
OGI3MzkwNDQ1ZjZmYzVlLi41YzY1MmY5YzEyYjMxNDViYWMyNWQyMDVhN2U3NGFjY2ZmNmJlZjYz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lck1hcC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyTWFwLmgKQEAgLTQzLDIyICs0MywyMiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEV2ZW50VGFyZ2V0OwogCi10eXBlZGVmIFZl
Y3RvcjxSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciwgMT4gRXZlbnRMaXN0ZW5lclZlY3RvcjsKK3Vz
aW5nIEV2ZW50TGlzdGVuZXJWZWN0b3IgPSBWZWN0b3I8UmVmUHRyPFJlZ2lzdGVyZWRFdmVudExp
c3RlbmVyPiwgMT47CiAKIGNsYXNzIEV2ZW50TGlzdGVuZXJNYXAgewogcHVibGljOgogICAgIEV2
ZW50TGlzdGVuZXJNYXAoKTsKIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZW50cmllcy5pc0VtcHR5KCk7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGNvbnRhaW5zKGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5zKGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKSBjb25zdCB7IHJldHVybiBmaW5kKGV2ZW50VHlw
ZSk7IH0KICAgICBib29sIGNvbnRhaW5zQ2FwdHVyaW5nKGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlKSBjb25zdDsKICAgICBib29sIGNvbnRhaW5zQWN0aXZlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlKSBjb25zdDsKIAogICAgIHZvaWQgY2xlYXIoKTsKIAogICAgIGJvb2wgYWRk
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBSZWY8RXZlbnRMaXN0ZW5lcj4mJiwgY29u
c3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI6Ok9wdGlvbnMmKTsKLSAgICBib29sIHJlbW92ZShj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYsIGJvb2wgdXNlQ2Fw
dHVyZSwgc2l6ZV90JiBpbmRleE9mUmVtb3ZlZExpc3RlbmVyKTsKLSAgICBFdmVudExpc3RlbmVy
VmVjdG9yKiBmaW5kKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKTsKKyAgICBib29sIHJl
bW92ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYsIGJvb2wg
dXNlQ2FwdHVyZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgRXZlbnRMaXN0ZW5lclZlY3RvciogZmlu
ZChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkgY29uc3Q7CiAgICAgVmVjdG9yPEF0b21p
Y1N0cmluZz4gZXZlbnRUeXBlcygpIGNvbnN0OwogCiAgICAgdm9pZCByZW1vdmVGaXJzdEV2ZW50
TGlzdGVuZXJDcmVhdGVkRnJvbU1hcmt1cChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSk7
CkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEV2
ZW50TGlzdGVuZXJJdGVyYXRvcjsKIAotICAgIHZvaWQgYXNzZXJ0Tm9BY3RpdmVJdGVyYXRvcnMo
KTsKKyAgICB2b2lkIGFzc2VydE5vQWN0aXZlSXRlcmF0b3JzKCkgY29uc3Q7CiAKICAgICBWZWN0
b3I8c3RkOjpwYWlyPEF0b21pY1N0cmluZywgc3RkOjp1bmlxdWVfcHRyPEV2ZW50TGlzdGVuZXJW
ZWN0b3I+PiwgMj4gbV9lbnRyaWVzOwogCkBAIC03OSw3ICs3OSw2IEBAIHByaXZhdGU6CiBjbGFz
cyBFdmVudExpc3RlbmVySXRlcmF0b3IgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEV2ZW50
TGlzdGVuZXJJdGVyYXRvcik7CiBwdWJsaWM6Ci0gICAgRXZlbnRMaXN0ZW5lckl0ZXJhdG9yKCk7
CiAgICAgZXhwbGljaXQgRXZlbnRMaXN0ZW5lckl0ZXJhdG9yKEV2ZW50VGFyZ2V0Kik7CiAjaWZu
ZGVmIE5ERUJVRwogICAgIH5FdmVudExpc3RlbmVySXRlcmF0b3IoKTsKQEAgLTk0LDcgKzkzLDcg
QEAgcHJpdmF0ZToKIH07CiAKICNpZmRlZiBOREVCVUcKLWlubGluZSB2b2lkIEV2ZW50TGlzdGVu
ZXJNYXA6OmFzc2VydE5vQWN0aXZlSXRlcmF0b3JzKCkgeyB9CitpbmxpbmUgdm9pZCBFdmVudExp
c3RlbmVyTWFwOjphc3NlcnROb0FjdGl2ZUl0ZXJhdG9ycygpIGNvbnN0IHsgfQogI2VuZGlmCiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCmluZGV4
IDBiZDViODBjN2U3M2FlZWRmM2JlZWViM2VjM2E1ODU1MmNiM2YxODEuLjA5ZjBmOGExYWZmMjBk
MDMxZGYzNGQzMmMxMDI5ZTM2NDM3NDI3Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudFRhcmdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNw
cApAQCAtMTAxLDI4ICsxMDEsNyBAQCBib29sIEV2ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExpc3Rl
bmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbgogICAgIGlmICgh
ZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc2l6ZV90IGluZGV4T2ZSZW1vdmVkTGlz
dGVuZXI7Ci0KLSAgICBpZiAoIWQtPmV2ZW50TGlzdGVuZXJNYXAucmVtb3ZlKGV2ZW50VHlwZSwg
bGlzdGVuZXIsIG9wdGlvbnMuY2FwdHVyZSwgaW5kZXhPZlJlbW92ZWRMaXN0ZW5lcikpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIE5vdGlmeSBmaXJpbmcgZXZlbnRzIHBsYW5uaW5n
IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgYXQgJ2luZGV4JyB0aGF0Ci0gICAgLy8gdGhleSBoYXZl
IG9uZSBsZXNzIGxpc3RlbmVyIHRvIGludm9rZS4KLSAgICBpZiAoIWQtPmZpcmluZ0V2ZW50SXRl
cmF0b3JzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBmb3IgKGF1dG8mIGZpcmluZ0l0ZXJh
dG9yIDogKmQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzKSB7Ci0gICAgICAgIGlmIChldmVudFR5cGUg
IT0gZmlyaW5nSXRlcmF0b3IuZXZlbnRUeXBlKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgaWYgKGluZGV4T2ZSZW1vdmVkTGlzdGVuZXIgPj0gZmlyaW5nSXRlcmF0b3Iuc2l6ZSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC0tZmlyaW5nSXRlcmF0b3Iuc2l6ZTsK
LSAgICAgICAgaWYgKGluZGV4T2ZSZW1vdmVkTGlzdGVuZXIgPD0gZmlyaW5nSXRlcmF0b3IuaXRl
cmF0b3IpCi0gICAgICAgICAgICAtLWZpcmluZ0l0ZXJhdG9yLml0ZXJhdG9yOwotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBkLT5ldmVudExpc3RlbmVyTWFwLnJlbW92ZShl
dmVudFR5cGUsIGxpc3RlbmVyLCBvcHRpb25zLmNhcHR1cmUpOwogfQogCiBib29sIEV2ZW50VGFy
Z2V0OjpzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlLCBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4mJiBsaXN0ZW5lcikKQEAgLTEzNiwxMCArMTE1LDEw
IEBAIGJvb2wgRXZlbnRUYXJnZXQ6OnNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIFJlZlB0CiBFdmVudExpc3RlbmVyKiBFdmVudFRhcmdldDo6
Z2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkK
IHsKICAgICBmb3IgKGF1dG8mIGV2ZW50TGlzdGVuZXIgOiBnZXRFdmVudExpc3RlbmVycyhldmVu
dFR5cGUpKSB7Ci0gICAgICAgIGlmIChldmVudExpc3RlbmVyLmxpc3RlbmVyLT5pc0F0dHJpYnV0
ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGV2ZW50TGlzdGVuZXIubGlzdGVuZXIuZ2V0KCk7Cisg
ICAgICAgIGlmIChldmVudExpc3RlbmVyLT5saXN0ZW5lcigpLmlzQXR0cmlidXRlKCkpCisgICAg
ICAgICAgICByZXR1cm4gJmV2ZW50TGlzdGVuZXItPmxpc3RlbmVyKCk7CiAgICAgfQotICAgIHJl
dHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBib29sIEV2ZW50VGFyZ2V0OjpoYXNB
Y3RpdmVFdmVudExpc3RlbmVycyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkgY29uc3QK
QEAgLTIxMCw2MiArMTg5LDc0IEBAIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIGxlZ2FjeVR5
cGUoY29uc3QgRXZlbnQmIGV2ZW50KQogICAgIHJldHVybiBlbXB0eUF0b207CiB9CiAKK2NsYXNz
IEZpcmluZ0V2ZW50TGlzdGVuZXJzU2NvcGUgeworcHVibGljOgorICAgIGV4cGxpY2l0IEZpcmlu
Z0V2ZW50TGlzdGVuZXJzU2NvcGUoRXZlbnRUYXJnZXREYXRhJiBkYXRhKQorICAgICAgICA6IG1f
ZGF0YShkYXRhKQorICAgIHsKKyAgICAgICAgbV9kYXRhLmlzRmlyaW5nRXZlbnRMaXN0ZW5lcnMr
KzsKKyAgICB9CisKKyAgICB+RmlyaW5nRXZlbnRMaXN0ZW5lcnNTY29wZSgpCisgICAgeworICAg
ICAgICBBU1NFUlQobV9kYXRhLmlzRmlyaW5nRXZlbnRMaXN0ZW5lcnMpOworICAgICAgICBtX2Rh
dGEuaXNGaXJpbmdFdmVudExpc3RlbmVycy0tOworICAgIH0KKworcHJpdmF0ZToKKyAgICBFdmVu
dFRhcmdldERhdGEmIG1fZGF0YTsKK307CisKIGJvb2wgRXZlbnRUYXJnZXQ6OmZpcmVFdmVudExp
c3RlbmVycyhFdmVudCYgZXZlbnQpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oIU5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6aXNFdmVudERpc3BhdGNoRm9yYmlkZGVu
KCkpOwogICAgIEFTU0VSVChldmVudC5pc0luaXRpYWxpemVkKCkpOwogCi0gICAgRXZlbnRUYXJn
ZXREYXRhKiBkID0gZXZlbnRUYXJnZXREYXRhKCk7Ci0gICAgaWYgKCFkKQorICAgIEV2ZW50VGFy
Z2V0RGF0YSogZGF0YSA9IGV2ZW50VGFyZ2V0RGF0YSgpOworICAgIGlmICghZGF0YSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKLSAgICBFdmVudExpc3RlbmVyVmVjdG9yKiBsZWdhY3lMaXN0ZW5l
cnNWZWN0b3IgPSBudWxscHRyOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbGVnYWN5VHlwZU5h
bWUgPSBsZWdhY3lUeXBlKGV2ZW50KTsKLSAgICBpZiAoIWxlZ2FjeVR5cGVOYW1lLmlzRW1wdHko
KSkKLSAgICAgICAgbGVnYWN5TGlzdGVuZXJzVmVjdG9yID0gZC0+ZXZlbnRMaXN0ZW5lck1hcC5m
aW5kKGxlZ2FjeVR5cGVOYW1lKTsKLQotICAgIEV2ZW50TGlzdGVuZXJWZWN0b3IqIGxpc3RlbmVy
c1ZlY3RvciA9IGQtPmV2ZW50TGlzdGVuZXJNYXAuZmluZChldmVudC50eXBlKCkpOwotCi0gICAg
aWYgKGxpc3RlbmVyc1ZlY3RvcikKLSAgICAgICAgZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50LCBk
LCAqbGlzdGVuZXJzVmVjdG9yKTsKLSAgICBlbHNlIGlmIChsZWdhY3lMaXN0ZW5lcnNWZWN0b3Ip
IHsKLSAgICAgICAgQXRvbWljU3RyaW5nIHR5cGVOYW1lID0gZXZlbnQudHlwZSgpOwotICAgICAg
ICBldmVudC5zZXRUeXBlKGxlZ2FjeVR5cGVOYW1lKTsKLSAgICAgICAgZmlyZUV2ZW50TGlzdGVu
ZXJzKGV2ZW50LCBkLCAqbGVnYWN5TGlzdGVuZXJzVmVjdG9yKTsKLSAgICAgICAgZXZlbnQuc2V0
VHlwZSh0eXBlTmFtZSk7CisgICAgRmlyaW5nRXZlbnRMaXN0ZW5lcnNTY29wZSBmaXJpbmdFdmVu
dExpc3RlbmVyc1Njb3BlKCpkYXRhKTsKKworICAgIGlmIChhdXRvKiBsaXN0ZW5lcnNWZWN0b3Ig
PSBkYXRhLT5ldmVudExpc3RlbmVyTWFwLmZpbmQoZXZlbnQudHlwZSgpKSkgeworICAgICAgICBm
aXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQsICpsaXN0ZW5lcnNWZWN0b3IpOworICAgICAgICByZXR1
cm4gIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQoKTsKICAgICB9CiAKKyAgICBjb25zdCBBdG9taWNT
dHJpbmcmIGxlZ2FjeVR5cGVOYW1lID0gbGVnYWN5VHlwZShldmVudCk7CisgICAgaWYgKCFsZWdh
Y3lUeXBlTmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGxlZ2FjeUxpc3RlbmVy
c1ZlY3RvciA9IGRhdGEtPmV2ZW50TGlzdGVuZXJNYXAuZmluZChsZWdhY3lUeXBlTmFtZSkpIHsK
KyAgICAgICAgICAgIEF0b21pY1N0cmluZyB0eXBlTmFtZSA9IGV2ZW50LnR5cGUoKTsKKyAgICAg
ICAgICAgIGV2ZW50LnNldFR5cGUobGVnYWN5VHlwZU5hbWUpOworICAgICAgICAgICAgZmlyZUV2
ZW50TGlzdGVuZXJzKGV2ZW50LCAqbGVnYWN5TGlzdGVuZXJzVmVjdG9yKTsKKyAgICAgICAgICAg
IGV2ZW50LnNldFR5cGUodHlwZU5hbWUpOworICAgICAgICB9CisgICAgfQogICAgIHJldHVybiAh
ZXZlbnQuZGVmYXVsdFByZXZlbnRlZCgpOwogfQogCi12b2lkIEV2ZW50VGFyZ2V0OjpmaXJlRXZl
bnRMaXN0ZW5lcnMoRXZlbnQmIGV2ZW50LCBFdmVudFRhcmdldERhdGEqIGQsIEV2ZW50TGlzdGVu
ZXJWZWN0b3ImIGVudHJ5KQorLy8gSW50ZW50aW9uYWxseSBjcmVhdGVzIGEgY29weSBvZiB0aGUg
bGlzdGVuZXJzIHZlY3RvciB0byBhdm9pZCBldmVudCBsaXN0ZW5lcnMgYWRkZWQgYWZ0ZXIgdGhp
cyBwb2ludCBmcm9tIGJlaW5nIHJ1bi4KKy8vIE5vdGUgdGhhdCByZW1vdmFsIHN0aWxsIGhhcyBh
biBlZmZlY3QgZHVlIHRvIHRoZSByZW1vdmVkIGZpZWxkIGluIFJlZ2lzdGVyZWRFdmVudExpc3Rl
bmVyLgordm9pZCBFdmVudFRhcmdldDo6ZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50JiBldmVudCwg
RXZlbnRMaXN0ZW5lclZlY3RvciBsaXN0ZW5lcnMpCiB7CiAgICAgUmVmPEV2ZW50VGFyZ2V0PiBw
cm90ZWN0ZWRUaGlzKCp0aGlzKTsKLQotICAgIC8vIEZpcmUgYWxsIGxpc3RlbmVycyByZWdpc3Rl
cmVkIGZvciB0aGlzIGV2ZW50LiBEb24ndCBmaXJlIGxpc3RlbmVycyByZW1vdmVkIGR1cmluZyBl
dmVudCBkaXNwYXRjaC4KLSAgICAvLyBBbHNvLCBkb24ndCBmaXJlIGV2ZW50IGxpc3RlbmVycyBh
ZGRlZCBkdXJpbmcgZXZlbnQgZGlzcGF0Y2guIENvbnZlbmllbnRseSwgYWxsIG5ldyBldmVudCBs
aXN0ZW5lcnMgd2lsbCBiZSBhZGRlZAotICAgIC8vIGFmdGVyIG9yIGF0IGluZGV4IHxzaXplfCwg
c28gaXRlcmF0aW5nIHVwIHRvIChidXQgbm90IGluY2x1ZGluZykgfHNpemV8IG5hdHVyYWxseSBl
eGNsdWRlcyBuZXcgZXZlbnQgbGlzdGVuZXJzLgotCi0gICAgc2l6ZV90IGkgPSAwOwotICAgIHNp
emVfdCBzaXplID0gZW50cnkuc2l6ZSgpOwotICAgIGlmICghZC0+ZmlyaW5nRXZlbnRJdGVyYXRv
cnMpCi0gICAgICAgIGQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzID0gc3RkOjptYWtlX3VuaXF1ZTxG
aXJpbmdFdmVudEl0ZXJhdG9yVmVjdG9yPigpOwotICAgIGQtPmZpcmluZ0V2ZW50SXRlcmF0b3Jz
LT5hcHBlbmQoRmlyaW5nRXZlbnRJdGVyYXRvcihldmVudC50eXBlKCksIGksIHNpemUpKTsKKyAg
ICBBU1NFUlQoIWxpc3RlbmVycy5pc0VtcHR5KCkpOwogCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBudWxscHRyOwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3
aWxsRGlzcGF0Y2hFdmVudENvb2tpZTsKICAgICBpZiAoaXM8RG9jdW1lbnQ+KGNvbnRleHQpKSB7
CiAgICAgICAgIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpOwotICAgICAg
ICB3aWxsRGlzcGF0Y2hFdmVudENvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2ls
bERpc3BhdGNoRXZlbnQoKmRvY3VtZW50LCBldmVudCwgc2l6ZSA+IDApOworICAgICAgICB3aWxs
RGlzcGF0Y2hFdmVudENvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERpc3Bh
dGNoRXZlbnQoKmRvY3VtZW50LCBldmVudCwgdHJ1ZSk7CiAgICAgfQogCi0gICAgZm9yICg7IGkg
PCBzaXplOyArK2kpIHsKLSAgICAgICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgcmVnaXN0ZXJl
ZExpc3RlbmVyID0gZW50cnlbaV07CisgICAgZm9yIChhdXRvJiByZWdpc3RlcmVkTGlzdGVuZXIg
OiBsaXN0ZW5lcnMpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKHJlZ2lzdGVyZWRMaXN0ZW5lci0+
d2FzUmVtb3ZlZCgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChldmVu
dC5ldmVudFBoYXNlKCkgPT0gRXZlbnQ6OkNBUFRVUklOR19QSEFTRSAmJiAhcmVnaXN0ZXJlZExp
c3RlbmVyLnVzZUNhcHR1cmUpCisgICAgICAgIGlmIChldmVudC5ldmVudFBoYXNlKCkgPT0gRXZl
bnQ6OkNBUFRVUklOR19QSEFTRSAmJiAhcmVnaXN0ZXJlZExpc3RlbmVyLT51c2VDYXB0dXJlKCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGV2ZW50LmV2ZW50UGhhc2UoKSA9
PSBFdmVudDo6QlVCQkxJTkdfUEhBU0UgJiYgcmVnaXN0ZXJlZExpc3RlbmVyLnVzZUNhcHR1cmUp
CisgICAgICAgIGlmIChldmVudC5ldmVudFBoYXNlKCkgPT0gRXZlbnQ6OkJVQkJMSU5HX1BIQVNF
ICYmIHJlZ2lzdGVyZWRMaXN0ZW5lci0+dXNlQ2FwdHVyZSgpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKICAgICAgICAgLy8gSWYgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIGhhcyBiZWVuIGNh
bGxlZCwgd2UganVzdCBicmVhayBvdXQgaW1tZWRpYXRlbHksIHdpdGhvdXQKQEAgLTI3NCwyNCAr
MjY1LDIyIEBAIHZvaWQgRXZlbnRUYXJnZXQ6OmZpcmVFdmVudExpc3RlbmVycyhFdmVudCYgZXZl
bnQsIEV2ZW50VGFyZ2V0RGF0YSogZCwgRXZlbnRMaXN0CiAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICAvLyBEbyB0aGlzIGJlZm9yZSBpbnZvY2F0aW9uIHRvIGF2b2lkIHJlZW50cmFuY3kg
aXNzdWVzLgotICAgICAgICBpZiAocmVnaXN0ZXJlZExpc3RlbmVyLmlzT25jZSkKLSAgICAgICAg
ICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQudHlwZSgpLCAqcmVnaXN0ZXJlZExpc3RlbmVy
Lmxpc3RlbmVyLCBMaXN0ZW5lck9wdGlvbnMocmVnaXN0ZXJlZExpc3RlbmVyLnVzZUNhcHR1cmUp
KTsKKyAgICAgICAgaWYgKHJlZ2lzdGVyZWRMaXN0ZW5lci0+aXNPbmNlKCkpCisgICAgICAgICAg
ICByZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LnR5cGUoKSwgcmVnaXN0ZXJlZExpc3RlbmVyLT5s
aXN0ZW5lcigpLCBMaXN0ZW5lck9wdGlvbnMocmVnaXN0ZXJlZExpc3RlbmVyLT51c2VDYXB0dXJl
KCkpKTsKIAotICAgICAgICBpZiAocmVnaXN0ZXJlZExpc3RlbmVyLmlzUGFzc2l2ZSkKKyAgICAg
ICAgaWYgKHJlZ2lzdGVyZWRMaXN0ZW5lci0+aXNQYXNzaXZlKCkpCiAgICAgICAgICAgICBldmVu
dC5zZXRJblBhc3NpdmVMaXN0ZW5lcih0cnVlKTsKIAogICAgICAgICBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsSGFu
ZGxlRXZlbnQoY29udGV4dCwgZXZlbnQpOwogICAgICAgICAvLyBUbyBtYXRjaCBNb3ppbGxhLCB0
aGUgQVRfVEFSR0VUIHBoYXNlIGZpcmVzIGJvdGggY2FwdHVyaW5nIGFuZCBidWJibGluZwogICAg
ICAgICAvLyBldmVudCBsaXN0ZW5lcnMsIGV2ZW4gdGhvdWdoIHRoYXQgdmlvbGF0ZXMgc29tZSB2
ZXJzaW9ucyBvZiB0aGUgRE9NIHNwZWMuCi0gICAgICAgIHJlZ2lzdGVyZWRMaXN0ZW5lci5saXN0
ZW5lci0+aGFuZGxlRXZlbnQoY29udGV4dCwgJmV2ZW50KTsKKyAgICAgICAgcmVnaXN0ZXJlZExp
c3RlbmVyLT5saXN0ZW5lcigpLmhhbmRsZUV2ZW50KGNvbnRleHQsICZldmVudCk7CiAgICAgICAg
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSGFuZGxlRXZlbnQoY29va2llKTsKIAotICAg
ICAgICBpZiAocmVnaXN0ZXJlZExpc3RlbmVyLmlzUGFzc2l2ZSkKKyAgICAgICAgaWYgKHJlZ2lz
dGVyZWRMaXN0ZW5lci0+aXNQYXNzaXZlKCkpCiAgICAgICAgICAgICBldmVudC5zZXRJblBhc3Np
dmVMaXN0ZW5lcihmYWxzZSk7CiAgICAgfQogCi0gICAgZC0+ZmlyaW5nRXZlbnRJdGVyYXRvcnMt
PnJlbW92ZUxhc3QoKTsKLQogICAgIGlmIChkb2N1bWVudCkKICAgICAgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWREaXNwYXRjaEV2ZW50KHdpbGxEaXNwYXRjaEV2ZW50Q29va2llKTsK
IH0KQEAgLTMxMCwxNSArMjk5LDYgQEAgdm9pZCBFdmVudFRhcmdldDo6cmVtb3ZlQWxsRXZlbnRM
aXN0ZW5lcnMoKQogICAgIGlmICghZCkKICAgICAgICAgcmV0dXJuOwogICAgIGQtPmV2ZW50TGlz
dGVuZXJNYXAuY2xlYXIoKTsKLQotICAgIC8vIE5vdGlmeSBmaXJpbmcgZXZlbnRzIHBsYW5uaW5n
IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgYXQgJ2luZGV4JyB0aGF0Ci0gICAgLy8gdGhleSBoYXZl
IG9uZSBsZXNzIGxpc3RlbmVyIHRvIGludm9rZS4KLSAgICBpZiAoZC0+ZmlyaW5nRXZlbnRJdGVy
YXRvcnMpIHsKLSAgICAgICAgZm9yIChhdXRvJiBmaXJpbmdFdmVudEl0ZXJhdG9yIDogKmQtPmZp
cmluZ0V2ZW50SXRlcmF0b3JzKSB7Ci0gICAgICAgICAgICBmaXJpbmdFdmVudEl0ZXJhdG9yLml0
ZXJhdG9yID0gMDsKLSAgICAgICAgICAgIGZpcmluZ0V2ZW50SXRlcmF0b3Iuc2l6ZSA9IDA7Ci0g
ICAgICAgIH0KLSAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50VGFyZ2V0LmgKaW5kZXggNDM5ODJhNjUzOGFiOTA1YmJmODZjODhhMTJlMTRkNTdjMTAzY2Vk
Ni4uNzg2YWNiNzNjNGE2OGM4ZGM4NjA4OWViZDk0OWI0ZjM3MThhZTczYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50VGFyZ2V0LmgKQEAgLTk3LDcgKzk3LDcgQEAgcHVibGljOgogICAgIH5FdmVudFRhcmdl
dERhdGEoKTsKIAogICAgIEV2ZW50TGlzdGVuZXJNYXAgZXZlbnRMaXN0ZW5lck1hcDsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8RmlyaW5nRXZlbnRJdGVyYXRvclZlY3Rvcj4gZmlyaW5nRXZlbnRJdGVy
YXRvcnM7CisgICAgdW5zaWduZWQgaXNGaXJpbmdFdmVudExpc3RlbmVycyB7IDAgfTsKIH07CiAK
IGVudW0gRXZlbnRUYXJnZXRJbnRlcmZhY2UgewpAQCAtMTgyLDcgKzE4Miw3IEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBkZXJlZkV2ZW50VGFyZ2V0KCkgPSAwOwogICAgIAotICAgIHZvaWQgZmlyZUV2ZW50TGlzdGVu
ZXJzKEV2ZW50JiwgRXZlbnRUYXJnZXREYXRhKiwgRXZlbnRMaXN0ZW5lclZlY3RvciYpOworICAg
IHZvaWQgZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50JiwgRXZlbnRMaXN0ZW5lclZlY3Rvcik7CiAK
ICAgICBmcmllbmQgY2xhc3MgRXZlbnRMaXN0ZW5lckl0ZXJhdG9yOwogfTsKQEAgLTIwNyw3ICsy
MDcsNyBAQCBpbmxpbmUgYm9vbCBFdmVudFRhcmdldDo6aXNGaXJpbmdFdmVudExpc3RlbmVycygp
CiAgICAgRXZlbnRUYXJnZXREYXRhKiBkID0gZXZlbnRUYXJnZXREYXRhKCk7CiAgICAgaWYgKCFk
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGQtPmZpcmluZ0V2ZW50SXRlcmF0
b3JzICYmICFkLT5maXJpbmdFdmVudEl0ZXJhdG9ycy0+aXNFbXB0eSgpOworICAgIHJldHVybiBk
LT5pc0ZpcmluZ0V2ZW50TGlzdGVuZXJzOwogfQogCiBpbmxpbmUgYm9vbCBFdmVudFRhcmdldDo6
aGFzRXZlbnRMaXN0ZW5lcnMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SZWdpc3Rl
cmVkRXZlbnRMaXN0ZW5lci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhZGFj
YTM3ODc1MWIyYTYwNTVkNjgzZjdkN2FhMjkwZDUxNThiOWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JlZ2lzdGVyZWRF
dmVudExpc3RlbmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqIENvcHlyaWdo
dCAoQykgMjAwMSBUb2JpYXMgQW50b24gKGFudG9uQHN0dWQuZmJpLmZoLWRhcm1zdGFkdC5kZSkK
LSAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNv
bSkKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZWdpc3Rl
cmVkRXZlbnRMaXN0ZW5lci5oIgotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JlZ2lzdGVyZWRF
dmVudExpc3RlbmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXIuaAppbmRleCBkNTVkOWUyYWM5YWEyMWNjZTYzZjNkNjgxOTg5MjBjODRiNWU0MzhjLi40MWVh
NjJhMjBiMmNhZmM1MjUzMWE4Y2MzNzU3MzMzMGRmOTVlOWY5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaApAQCAtMjksNDcgKzI5LDUwIEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyIHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIHN0cnVjdCBPcHRpb25zIHsKLSAgICAgICAgICAgIE9wdGlv
bnMoYm9vbCBjYXB0dXJlID0gZmFsc2UsIGJvb2wgcGFzc2l2ZSA9IGZhbHNlLCBib29sIG9uY2Ug
PSBmYWxzZSkKLSAgICAgICAgICAgICAgICA6IGNhcHR1cmUoY2FwdHVyZSkKLSAgICAgICAgICAg
ICAgICAsIHBhc3NpdmUocGFzc2l2ZSkKLSAgICAgICAgICAgICAgICAsIG9uY2Uob25jZSkKLSAg
ICAgICAgICAgIHsgfQorLy8gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWV2
ZW50LWxpc3RlbmVyCitjbGFzcyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBSZWZD
b3VudGVkPFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyPiB7CitwdWJsaWM6CisgICAgc3RydWN0IE9w
dGlvbnMgeworICAgICAgICBPcHRpb25zKGJvb2wgY2FwdHVyZSA9IGZhbHNlLCBib29sIHBhc3Np
dmUgPSBmYWxzZSwgYm9vbCBvbmNlID0gZmFsc2UpCisgICAgICAgICAgICA6IGNhcHR1cmUoY2Fw
dHVyZSkKKyAgICAgICAgICAgICwgcGFzc2l2ZShwYXNzaXZlKQorICAgICAgICAgICAgLCBvbmNl
KG9uY2UpCisgICAgICAgIHsgfQogCi0gICAgICAgICAgICBib29sIGNhcHR1cmU7Ci0gICAgICAg
ICAgICBib29sIHBhc3NpdmU7Ci0gICAgICAgICAgICBib29sIG9uY2U7Ci0gICAgICAgIH07Cisg
ICAgICAgIGJvb2wgY2FwdHVyZTsKKyAgICAgICAgYm9vbCBwYXNzaXZlOworICAgICAgICBib29s
IG9uY2U7CisgICAgfTsKKworICAgIHN0YXRpYyBSZWY8UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI+
IGNyZWF0ZShSZWY8RXZlbnRMaXN0ZW5lcj4mJiBsaXN0ZW5lciwgY29uc3QgT3B0aW9ucyYgb3B0
aW9ucykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlZ2lzdGVyZWRFdmVu
dExpc3RlbmVyKFdURk1vdmUobGlzdGVuZXIpLCBvcHRpb25zKSk7CisgICAgfQogCi0gICAgICAg
IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyKFJlZjxFdmVudExpc3RlbmVyPiYmIGxpc3RlbmVyLCBj
b25zdCBPcHRpb25zJiBvcHRpb25zKQotICAgICAgICAgICAgOiBsaXN0ZW5lcihXVEZNb3ZlKGxp
c3RlbmVyKSkKLSAgICAgICAgICAgICwgdXNlQ2FwdHVyZShvcHRpb25zLmNhcHR1cmUpCi0gICAg
ICAgICAgICAsIGlzUGFzc2l2ZShvcHRpb25zLnBhc3NpdmUpCi0gICAgICAgICAgICAsIGlzT25j
ZShvcHRpb25zLm9uY2UpCi0gICAgICAgIHsKLSAgICAgICAgfQorICAgIEV2ZW50TGlzdGVuZXIm
IGxpc3RlbmVyKCkgY29uc3QgeyBBU1NFUlQoIW1fd2FzUmVtb3ZlZCk7IHJldHVybiBjb25zdF9j
YXN0PEV2ZW50TGlzdGVuZXImPihtX2xpc3RlbmVyLmdldCgpKTsgfQorICAgIGJvb2wgdXNlQ2Fw
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlQ2FwdHVyZTsgfQorICAgIGJvb2wgaXNQYXNzaXZl
KCkgY29uc3QgeyByZXR1cm4gbV9pc1Bhc3NpdmU7IH0KKyAgICBib29sIGlzT25jZSgpIGNvbnN0
IHsgcmV0dXJuIG1faXNPbmNlOyB9CisgICAgYm9vbCB3YXNSZW1vdmVkKCkgY29uc3QgeyByZXR1
cm4gbV93YXNSZW1vdmVkOyB9CiAKLSAgICAgICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIoUmVm
PEV2ZW50TGlzdGVuZXI+JiYgbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKLSAgICAgICAgICAg
IDogbGlzdGVuZXIoV1RGTW92ZShsaXN0ZW5lcikpCi0gICAgICAgICAgICAsIHVzZUNhcHR1cmUo
dXNlQ2FwdHVyZSkKLSAgICAgICAgewotICAgICAgICB9CisgICAgdm9pZCBtYXJrQXNSZW1vdmVk
KCkgeyBtX3dhc1JlbW92ZWQgPSB0cnVlOyB9CiAKLSAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGxpc3RlbmVyOwotICAgICAgICBib29sIHVzZUNhcHR1cmUgeyBmYWxzZSB9OwotICAgICAg
ICBib29sIGlzUGFzc2l2ZSB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wgaXNPbmNlIHsgZmFsc2Ug
fTsKLSAgICB9OwotICAgIAotICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVnaXN0
ZXJlZEV2ZW50TGlzdGVuZXImIGEsIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiBiKQor
cHJpdmF0ZToKKyAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcihSZWY8RXZlbnRMaXN0ZW5lcj4m
JiBsaXN0ZW5lciwgY29uc3QgT3B0aW9ucyYgb3B0aW9ucykKKyAgICAgICAgOiBtX2xpc3RlbmVy
KFdURk1vdmUobGlzdGVuZXIpKQorICAgICAgICAsIG1fdXNlQ2FwdHVyZShvcHRpb25zLmNhcHR1
cmUpCisgICAgICAgICwgbV9pc1Bhc3NpdmUob3B0aW9ucy5wYXNzaXZlKQorICAgICAgICAsIG1f
aXNPbmNlKG9wdGlvbnMub25jZSkKICAgICB7Ci0gICAgICAgIC8vIE90aGVyIGRhdGEgbWVtYmVy
cyBhcmUgcHVycG9zZWZ1bGx5IG5vdCBjaGVja2VkLiBUaGUgRE9NIHNwZWNpZmljYXRpb24gc2F5
cyB0aGF0IHVwb24gYWRkaW5nIC8gcmVtb3ZpbmcKLSAgICAgICAgLy8gRXZlbnRMaXN0ZW5lcnMs
IHdlIHNob3VsZCBvbmx5IGNoZWNrIHRoZSB0eXBlIGFuZCB0aGUgY2FwdHVyZSBmbGFnLgotICAg
ICAgICByZXR1cm4gKmEubGlzdGVuZXIgPT0gKmIubGlzdGVuZXIgJiYgYS51c2VDYXB0dXJlID09
IGIudXNlQ2FwdHVyZTsKICAgICB9CiAKKyAgICBSZWY8RXZlbnRMaXN0ZW5lcj4gbV9saXN0ZW5l
cjsKKyAgICBib29sIG1fdXNlQ2FwdHVyZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzUGFzc2l2
ZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzT25jZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX3dh
c1JlbW92ZWQgeyBmYWxzZSB9OworfTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggZDk0ZDg0YmNlNTljNzRmZGMwOWU0NTYz
MDdjN2IyZjA5MDgxNDRiMC4uNjQ0M2I2NTY5ZWI3YmZjZjQ3NzkzM2E3YmZkODhlMGEyZWYzMjNm
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
CkBAIC04MjIsOCArODIyLDggQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0
ZW5lcnNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG4KICAgICBzaXplX3Qg
ZXZlbnRJbmZvcm1hdGlvbkxlbmd0aCA9IGV2ZW50SW5mb3JtYXRpb24uc2l6ZSgpOwogICAgIGZv
ciAoYXV0byYgaW5mbyA6IGV2ZW50SW5mb3JtYXRpb24pIHsKICAgICAgICAgZm9yIChhdXRvJiBs
aXN0ZW5lciA6IGluZm8uZXZlbnRMaXN0ZW5lclZlY3RvcikgewotICAgICAgICAgICAgaWYgKGxp
c3RlbmVyLnVzZUNhcHR1cmUpCi0gICAgICAgICAgICAgICAgbGlzdGVuZXJzQXJyYXktPmFkZEl0
ZW0oYnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGxpc3RlbmVyLCBpbmZvLmV2ZW50VHlwZSwg
aW5mby5ub2RlLCBvYmplY3RHcm91cCkpOworICAgICAgICAgICAgaWYgKGxpc3RlbmVyLT51c2VD
YXB0dXJlKCkpCisgICAgICAgICAgICAgICAgbGlzdGVuZXJzQXJyYXktPmFkZEl0ZW0oYnVpbGRP
YmplY3RGb3JFdmVudExpc3RlbmVyKCpsaXN0ZW5lciwgaW5mby5ldmVudFR5cGUsIGluZm8ubm9k
ZSwgb2JqZWN0R3JvdXApKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtODMxLDggKzgzMSw4IEBA
IHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGludCBuCiAgICAgZm9yIChzaXplX3QgaSA9IGV2ZW50SW5mb3Jt
YXRpb25MZW5ndGg7IGk7IC0taSkgewogICAgICAgICBjb25zdCBFdmVudExpc3RlbmVySW5mbyYg
aW5mbyA9IGV2ZW50SW5mb3JtYXRpb25baSAtIDFdOwogICAgICAgICBmb3IgKGF1dG8mIGxpc3Rl
bmVyIDogaW5mby5ldmVudExpc3RlbmVyVmVjdG9yKSB7Ci0gICAgICAgICAgICBpZiAoIWxpc3Rl
bmVyLnVzZUNhcHR1cmUpCi0gICAgICAgICAgICAgICAgbGlzdGVuZXJzQXJyYXktPmFkZEl0ZW0o
YnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGxpc3RlbmVyLCBpbmZvLmV2ZW50VHlwZSwgaW5m
by5ub2RlLCBvYmplY3RHcm91cCkpOworICAgICAgICAgICAgaWYgKCFsaXN0ZW5lci0+dXNlQ2Fw
dHVyZSgpKQorICAgICAgICAgICAgICAgIGxpc3RlbmVyc0FycmF5LT5hZGRJdGVtKGJ1aWxkT2Jq
ZWN0Rm9yRXZlbnRMaXN0ZW5lcigqbGlzdGVuZXIsIGluZm8uZXZlbnRUeXBlLCBpbmZvLm5vZGUs
IG9iamVjdEdyb3VwKSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC04NTgsMTMgKzg1OCwxMyBA
QCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVycyhOb2RlKiBub2RlLCBW
ZWN0b3I8RXZlbnRMaXN0ZW5lckluZm8+JgogICAgICAgICBmb3IgKGF1dG8mIHR5cGUgOiBkLT5l
dmVudExpc3RlbmVyTWFwLmV2ZW50VHlwZXMoKSkgewogICAgICAgICAgICAgY29uc3QgRXZlbnRM
aXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gYW5jZXN0b3ItPmdldEV2ZW50TGlzdGVuZXJzKHR5
cGUpOwogICAgICAgICAgICAgRXZlbnRMaXN0ZW5lclZlY3RvciBmaWx0ZXJlZExpc3RlbmVyczsK
LSAgICAgICAgICAgIGZpbHRlcmVkTGlzdGVuZXJzLnJlc2VydmVDYXBhY2l0eShsaXN0ZW5lcnMu
c2l6ZSgpKTsKKyAgICAgICAgICAgIGZpbHRlcmVkTGlzdGVuZXJzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobGlzdGVuZXJzLnNpemUoKSk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGxpc3RlbmVy
IDogbGlzdGVuZXJzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxpc3RlbmVyLmxpc3RlbmVyLT50
eXBlKCkgPT0gRXZlbnRMaXN0ZW5lcjo6SlNFdmVudExpc3RlbmVyVHlwZSkKLSAgICAgICAgICAg
ICAgICAgICAgZmlsdGVyZWRMaXN0ZW5lcnMuYXBwZW5kKGxpc3RlbmVyKTsKKyAgICAgICAgICAg
ICAgICBpZiAobGlzdGVuZXItPmxpc3RlbmVyKCkudHlwZSgpID09IEV2ZW50TGlzdGVuZXI6OkpT
RXZlbnRMaXN0ZW5lclR5cGUpCisgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkTGlzdGVuZXJz
LnVuY2hlY2tlZEFwcGVuZChsaXN0ZW5lcik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBp
ZiAoIWZpbHRlcmVkTGlzdGVuZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBldmVudElu
Zm9ybWF0aW9uLmFwcGVuZChFdmVudExpc3RlbmVySW5mbyhhbmNlc3RvciwgdHlwZSwgZmlsdGVy
ZWRMaXN0ZW5lcnMpKTsKKyAgICAgICAgICAgICAgICBldmVudEluZm9ybWF0aW9uLmFwcGVuZChF
dmVudExpc3RlbmVySW5mbyhhbmNlc3RvciwgdHlwZSwgV1RGTW92ZShmaWx0ZXJlZExpc3RlbmVy
cykpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE0NzcsNyArMTQ3Nyw3IEBAIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+
PiBJbnNwZWN0b3JET01BCiAKIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlz
dGVuZXI+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIoY29u
c3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIHJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLCBjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nKiBvYmpl
Y3RHcm91cElkKQogewotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyID0g
cmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIubGlzdGVuZXI7CisgICAgUmVmPEV2ZW50TGlzdGVuZXI+
IGV2ZW50TGlzdGVuZXIgPSByZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5saXN0ZW5lcigpOwogCiAg
ICAgSlNDOjpFeGVjU3RhdGUqIHN0YXRlID0gbnVsbHB0cjsKICAgICBKU0M6OkpTT2JqZWN0KiBo
YW5kbGVyID0gbnVsbHB0cjsKQEAgLTE0ODYsNyArMTQ4Niw3IEBAIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVj
dEZvckV2CiAgICAgaW50IGNvbHVtbk51bWJlciA9IDA7CiAgICAgU3RyaW5nIHNjcmlwdElEOwog
ICAgIFN0cmluZyBzb3VyY2VOYW1lOwotICAgIGlmIChhdXRvIHNjcmlwdExpc3RlbmVyID0gSlNF
dmVudExpc3RlbmVyOjpjYXN0KGV2ZW50TGlzdGVuZXIuZ2V0KCkpKSB7CisgICAgaWYgKGF1dG8g
c2NyaXB0TGlzdGVuZXIgPSBKU0V2ZW50TGlzdGVuZXI6OmNhc3QoZXZlbnRMaXN0ZW5lci5wdHIo
KSkpIHsKICAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhzY3JpcHRMaXN0ZW5lci0+aXNv
bGF0ZWRXb3JsZCgpLnZtKCkpOwogICAgICAgICBzdGF0ZSA9IGV4ZWNTdGF0ZUZyb21Ob2RlKHNj
cmlwdExpc3RlbmVyLT5pc29sYXRlZFdvcmxkKCksICZub2RlLT5kb2N1bWVudCgpKTsKICAgICAg
ICAgaGFuZGxlciA9IHNjcmlwdExpc3RlbmVyLT5qc0Z1bmN0aW9uKCZub2RlLT5kb2N1bWVudCgp
KTsKQEAgLTE1MDcsNyArMTUwNyw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2
ZW50TGlzdGVuZXI+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckV2CiAKICAgICBh
dXRvIHZhbHVlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyOjpjcmVh
dGUoKQogICAgICAgICAuc2V0VHlwZShldmVudFR5cGUpCi0gICAgICAgIC5zZXRVc2VDYXB0dXJl
KHJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLnVzZUNhcHR1cmUpCisgICAgICAgIC5zZXRVc2VDYXB0
dXJlKHJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLnVzZUNhcHR1cmUoKSkKICAgICAgICAgLnNldElz
QXR0cmlidXRlKGV2ZW50TGlzdGVuZXItPmlzQXR0cmlidXRlKCkpCiAgICAgICAgIC5zZXROb2Rl
SWQocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2RlKSkKICAgICAgICAgLnNldEhhbmRsZXJCb2R5
KGJvZHkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9N
QWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCmlu
ZGV4IDM3NDRjYjFhY2I0NTBmN2QwYTNjM2E1NDBiMDBiMzZkOTg2ZDYxMGMuLmNjOTcxNWMzN2Ji
ZTUxM2Y1YTQwN2ZkNDk2OTQyYjdmZWRjODFkODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC04MCwxMCArODAsMTAgQEAgdHlwZWRlZiBTdHJp
bmcgRXJyb3JTdHJpbmc7CiB0eXBlZGVmIGludCBCYWNrZW5kTm9kZUlkOwogCiBzdHJ1Y3QgRXZl
bnRMaXN0ZW5lckluZm8gewotICAgIEV2ZW50TGlzdGVuZXJJbmZvKE5vZGUqIG5vZGUsIGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBjb25zdCBFdmVudExpc3RlbmVyVmVjdG9yJiBldmVu
dExpc3RlbmVyVmVjdG9yKQorICAgIEV2ZW50TGlzdGVuZXJJbmZvKE5vZGUqIG5vZGUsIGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyVmVjdG9yJiYgZXZlbnRMaXN0
ZW5lclZlY3RvcikKICAgICAgICAgOiBub2RlKG5vZGUpCiAgICAgICAgICwgZXZlbnRUeXBlKGV2
ZW50VHlwZSkKLSAgICAgICAgLCBldmVudExpc3RlbmVyVmVjdG9yKGV2ZW50TGlzdGVuZXJWZWN0
b3IpCisgICAgICAgICwgZXZlbnRMaXN0ZW5lclZlY3RvcihXVEZNb3ZlKGV2ZW50TGlzdGVuZXJW
ZWN0b3IpKQogICAgIHsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAppbmRleCBh
MWQ3N2U2MzM3MmEzMDM2MzY1Y2U1ZDdkZmRiZmJkMjY1Nzk0ZjdmLi5mYjc5YmQ5ZTI0YWM1ZGRh
ODBiYWFiM2UwYzg3OWYwNjEyYmJlMjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCkBA
IC01ODQsMTEgKzU4NCw4IEBAIHN0YXRpYyBib29sIGhhc0xvYWRMaXN0ZW5lcihFbGVtZW50KiBl
bGVtZW50KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGZvciAoZWxlbWVudCA9IGVsZW1l
bnQtPnBhcmVudE9yU2hhZG93SG9zdEVsZW1lbnQoKTsgZWxlbWVudDsgZWxlbWVudCA9IGVsZW1l
bnQtPnBhcmVudE9yU2hhZG93SG9zdEVsZW1lbnQoKSkgewotICAgICAgICBjb25zdCBFdmVudExp
c3RlbmVyVmVjdG9yJiBlbnRyeSA9IGVsZW1lbnQtPmdldEV2ZW50TGlzdGVuZXJzKGV2ZW50TmFt
ZXMoKS5sb2FkRXZlbnQpOwotICAgICAgICBmb3IgKGF1dG8mIGxpc3RlbmVyIDogZW50cnkpIHsK
LSAgICAgICAgICAgIGlmIChsaXN0ZW5lci51c2VDYXB0dXJlKQotICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNDYXB0dXJpbmdF
dmVudExpc3RlbmVycyhldmVudE5hbWVzKCkubG9hZEV2ZW50KSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285967</attachid>
            <date>2016-08-12 15:49:20 -0700</date>
            <delta_ts>2016-08-12 16:25:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160828-20160812154741.patch</filename>
            <type>text/plain</type>
            <size>43647</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MzgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmQ0MzAwYTQwN2UxNGYx
MTExMTY1NzIyYjY1ODk0ZDI1YjFhY2YwZC4uNzE3ODdhMmY4YmVjZjgzOTU3ZDMxYzU5MzdhNDk4
YmUwZGM1OWY4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBACisyMDE2LTA4LTEyICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQWxpZ24gdGhlIGV2ZW50IGxp
c3RlbmVyIGZpcmluZyBjb2RlIHdpdGggdGhlIGxhdGVzdCBET00gU3BlY2lmaWNhdGlvbiBhbmQg
c2ltcGxpZnkgaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MDgyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFsaWduIHRoZSBldmVudCBsaXN0ZW5lciBmaXJpbmcgY29kZSB3aXRoIHRoZSBsYXRlc3Qg
RE9NIHNwZWNpZmljYXRpb246CisgICAgICAgIC0gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3Jn
LyNjb25jZXB0LWV2ZW50LWxpc3RlbmVyLWludm9rZQorICAgICAgICAtIGh0dHBzOi8vZG9tLnNw
ZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ldmVudC1saXN0ZW5lci1pbm5lci1pbnZva2UKKyAgICAg
ICAgLSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZXZlbnQtbGlzdGVuZXIK
KworICAgICAgICBUaGUgZm9sbG93aW5nIGNoYW5nZXMgd2VyZSBtYWRlOgorICAgICAgICAxLiBS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciAoZXF1aXZhbGVudCB0byAiZXZlbnQgbGlzdGVuZXIiIGlu
IHRoZSBzcGVjKQorICAgICAgICAgICBpcyBub3cgUmVmQ291bnRlZAorICAgICAgICAyLiBSZWdp
c3RlcmVkRXZlbnRMaXN0ZW5lciBub3cgaGFzIGEgd2FzUmVtb3ZlZCBmbGFnIGFzIGluIHNwZWNp
ZmljYXRpb24uCisgICAgICAgIDMuIGZpcmVFdmVudExpc3RlbmVycygpIGlzIG5vdyBpdGVyYXRp
bmcgb3ZlciBhIGNvcHkgb2YgdGhlIGV2ZW50CisgICAgICAgICAgIGxpc3RlbmVycywgYXMgaW4g
dGhlIHNwZWNpZmljYXRpb24uIFdlIHJlbHkgb24gdGhlIHdhc1JlbW92ZWQgcmVtb3ZlZAorICAg
ICAgICAgICBmbGFnIHRvIGF2b2lkIGV4ZWN1dGluZyBldmVudCBsaXN0ZW5lcnMgdGhhdCB3ZXJl
IHJlbW92ZWQgd2hpbGUgd2UKKyAgICAgICAgICAgaXRlcmF0ZS4KKworICAgICAgICBQcmV2aW91
c2x5LCB0aGUgY29kZSB3YXMgbW9kaWZ5aW5nIHRoZSBldmVudCBsaXN0ZW5lcnMgdmVjdG9yIHdl
IHdlcmUKKyAgICAgICAgaXRlcmF0aW5nIG9uLiBEb2luZyBzbyBzYWZlbHkgbGVhZCB0byBjb21w
bGljYXRlZCBhbmQgZXJyb3IgcHJvbmUgY29kZS4KKyAgICAgICAgVGhlIG5ldyBjb2RlIGlzIG11
Y2ggc2ltcGxlciBhbmQgZWFzaWVyIHRvIHJlYXNvbiBhYm91dC4KKworICAgICAgICBUaGlzIGNo
YW5nZSBzZWVtcyB0byBiZSBwZXJmLW5ldXRyYWwgb24gU3BlZWRvbWV0ZXIuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLCBubyB3ZWItZXhwb3NlZCBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDb21tYW5kTGluZUFQSUhvc3RDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SlNMaXN0ZW5lckZ1bmN0aW9ucyk6CisgICAgICAg
ICogZG9tL0RPTUFsbEluT25lLmNwcDoKKyAgICAgICAgKiBkb20vRXZlbnRMaXN0ZW5lck1hcC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3RlbmVyTWFwOjphc3NlcnROb0FjdGl2ZUl0
ZXJhdG9ycyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3RlbmVyTWFwOjpjb250YWluc0Nh
cHR1cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3RlbmVyTWFwOjpjb250YWluc0Fj
dGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kTGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRMaXN0ZW5lck1hcDo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OnJlbW92ZUxpc3Rl
bmVyRnJvbVZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3RlbmVyTWFwOjpyZW1v
dmUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6ZmluZCk6CisgICAgICAg
IChXZWJDb3JlOjpyZW1vdmVGaXJzdExpc3RlbmVyQ3JlYXRlZEZyb21NYXJrdXApOgorICAgICAg
ICAoV2ViQ29yZTo6Y29weUxpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJnZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6Y29weUV2ZW50TGlzdGVuZXJzTm90
Q3JlYXRlZEZyb21NYXJrdXBUb1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3Rl
bmVySXRlcmF0b3I6Om5leHRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3Rl
bmVyTWFwOjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgICogZG9tL0V2ZW50TGlzdGVuZXJNYXAu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXJNYXA6OmNvbnRhaW5zKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXJNYXA6OmFzc2VydE5vQWN0aXZlSXRlcmF0b3JzKToK
KyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRU
YXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJn
ZXQ6OmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlyaW5n
RXZlbnRMaXN0ZW5lcnNTY29wZTo6RmlyaW5nRXZlbnRMaXN0ZW5lcnNTY29wZSk6CisgICAgICAg
IChXZWJDb3JlOjpGaXJpbmdFdmVudExpc3RlbmVyc1Njb3BlOjp+RmlyaW5nRXZlbnRMaXN0ZW5l
cnNTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldDo6ZmlyZUV2ZW50TGlzdGVu
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjpzZXRBdHRyaWJ1dGVFdmVudExp
c3RlbmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjpoYXNBY3Rp
dmVFdmVudExpc3RlbmVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdl
dDo6ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50VGFyZ2V0OjpnZXRFdmVudExpc3RlbmVycyk6IERlbGV0ZWQuCisgICAgICAgICogZG9t
L0V2ZW50VGFyZ2V0Lmg6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldDo6aXNGaXJpbmdF
dmVudExpc3RlbmVycyk6CisgICAgICAgICogZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBkb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOjpPcHRpb25zOjpPcHRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI6Omxpc3RlbmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOjp1c2VDYXB0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOjppc1Bhc3NpdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI6OmlzT25jZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjo6d2FzUmVtb3ZlZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjo6bWFya0FzUmVtb3ZlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjo6UmVnaXN0ZXJlZEV2ZW50TGlz
dGVuZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JF
dmVudExpc3RlbmVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXJJbmZvOjpFdmVudExpc3RlbmVySW5mbyk6
CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFzTG9h
ZExpc3RlbmVyKToKKwogMjAxNi0wOC0xMSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNl
bkB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCBVUkxQYXJzZXIgc3R1YgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAppbmRleCAzZGVhMDQ5ZDY5MWQ5ZGE3YWYxMmY2M2FlYTNlYzA1ZGNjMzVhMDkxLi4zNWM3
OGZlNWQ0N2U3MDgzYjRlM2UwM2IxYmI5YWZjNTJkOTlkYTAxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dApAQCAtMTUwMyw3ICsxNTAzLDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGRvbS9RdWFs
aWZpZWROYW1lLmNwcAogICAgIGRvbS9SYWRpb0J1dHRvbkdyb3Vwcy5jcHAKICAgICBkb20vUmFu
Z2UuY3BwCi0gICAgZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNwcAogICAgIGRvbS9TY29w
ZWRFdmVudFF1ZXVlLmNwcAogICAgIGRvbS9TY3JpcHRFbGVtZW50LmNwcAogICAgIGRvbS9TY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDc3NDcwMDgzNjdmZTY1MGRiODZkZTRkMDkxOGNh
MTQ0OWM4YTk3YzYuLjUzMTIwMjg3OWI1OWVmZjJkZGZiZTM2MGI3ZGRlYTRkNjkzNzY5ODUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTMwNjUsNyArMzA2NSw2IEBACiAJCTg1MDMxQjQ4MEE0NEVGQzcwMEY5OTJFMCAvKiBNb3Vz
ZVJlbGF0ZWRFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODUwMzFCMzIwQTQ0RUZDNzAwRjk5MkUwIC8qIE1vdXNlUmVsYXRlZEV2ZW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODUwMzFCNDkw
QTQ0RUZDNzAwRjk5MkUwIC8qIE11dGF0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODUwMzFCMzMwQTQ0RUZDNzAwRjk5MkUwIC8qIE11
dGF0aW9uRXZlbnQuY3BwICovOyB9OwogCQk4NTAzMUI0QTBBNDRFRkM3MDBGOTkyRTAgLyogTXV0
YXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODUwMzFCMzQwQTQ0RUZDNzAwRjk5MkUwIC8qIE11dGF0aW9uRXZlbnQuaCAqLzsgfTsKLQkJ
ODUwMzFCNEIwQTQ0RUZDNzAwRjk5MkUwIC8qIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1MDMxQjM1MEE0
NEVGQzcwMEY5OTJFMCAvKiBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5jcHAgKi87IH07CiAJCTg1
MDMxQjRDMEE0NEVGQzcwMEY5OTJFMCAvKiBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODUwMzFCMzYwQTQ0RUZD
NzAwRjk5MkUwIC8qIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODUwMzFCNEQwQTQ0RUZDNzAwRjk5MkUw
IC8qIFVJRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODUwMzFCMzcwQTQ0RUZDNzAwRjk5MkUwIC8qIFVJRXZlbnQuY3BwICovOyB9OwogCQk4
NTAzMUI0RTBBNDRFRkM3MDBGOTkyRTAgLyogVUlFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODUwMzFCMzgwQTQ0RUZDNzAwRjk5MkUwIC8qIFVJ
RXZlbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMTA1MDUsNyArMTA1MDQsNiBAQAogCQk4NTAzMUIzMjBBNDRFRkM3MDBGOTkyRTAgLyogTW91
c2VSZWxhdGVkRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vdXNl
UmVsYXRlZEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg1MDMxQjMzMEE0
NEVGQzcwMEY5OTJFMCAvKiBNdXRhdGlvbkV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBNdXRhdGlvbkV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJODUwMzFCMzQwQTQ0RUZDNzAwRjk5MkUwIC8qIE11dGF0aW9uRXZlbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE11dGF0aW9uRXZlbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODUwMzFCMzUwQTQ0RUZDNzAwRjk5MkUwIC8qIFJlZ2lzdGVy
ZWRFdmVudExpc3RlbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTg1MDMxQjM2MEE0NEVGQzcwMEY5OTJFMCAvKiBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODUwMzFCMzcwQTQ0RUZDNzAwRjk5
MkUwIC8qIFVJRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFVJRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NTAzMUIzODBBNDRF
RkM3MDBGOTkyRTAgLyogVUlFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVUlFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTE1MTIsOCArMTE1
MTAsOCBAQAogCQk5QkQ0RTkxODFDNDYyQ0ZDMDA1MDY1QkMgLyogQ3VzdG9tRWxlbWVudHNSZWdp
c3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDdXN0b21FbGVt
ZW50c1JlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJENEU5MTkx
QzQ2MkNGQzAwNTA2NUJDIC8qIEN1c3RvbUVsZW1lbnRzUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ3VzdG9tRWxlbWVudHNSZWdpc3RyeS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5QkQ4QTk1OTE4QkVGQzc2MDA5ODdFOUEgLyogQ29sbGVjdGlv
bkluZGV4Q2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29s
bGVjdGlvbkluZGV4Q2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5QkU2
NzEwOTFENUFFQjA0MDAzNDU1MTQgLyogSlNDdXN0b21FbGVtZW50c1JlZ2lzdHJ5LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTQ3VzdG9tRWxlbWVudHNSZWdpc3Ry
eS5jcHA7IHBhdGggPSAiSlNDdXN0b21FbGVtZW50c1JlZ2lzdHJ5LmNwcCI7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTlCRTY3MTBBMUQ1QUVCMDQwMDM0NTUxNCAvKiBKU0N1c3RvbUVs
ZW1lbnRzUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNDdXN0
b21FbGVtZW50c1JlZ2lzdHJ5Lmg7IHBhdGggPSAiSlNDdXN0b21FbGVtZW50c1JlZ2lzdHJ5Lmgi
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QkU2NzEwOTFENUFFQjA0MDAzNDU1MTQg
LyogSlNDdXN0b21FbGVtZW50c1JlZ2lzdHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTQ3VzdG9tRWxlbWVudHNSZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTlCRTY3MTBBMUQ1QUVCMDQwMDM0NTUxNCAvKiBKU0N1c3RvbUVsZW1l
bnRzUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDdXN0b21F
bGVtZW50c1JlZ2lzdHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCRjlBODdF
MTY0OEREMkYwMDFDNkIyMyAvKiBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTEZvcm1Db250cm9sc0NvbGxl
Y3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkY5QTg3RjE2NDhERDJG
MDAxQzZCMjMgLyogSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlENjM4MDBGMUFGMTZFMTYwMDMxQTE1QyAvKiBTdHls
ZVNlbGZBbGlnbm1lbnREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0
eWxlU2VsZkFsaWdubWVudERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0
MTkyLDcgKzI0MTkwLDYgQEAKIAkJCQk5MzZERDAzQTA5Q0VBQzI3MDA1NkFFOEMgLyogUmFuZ2Uu
aWRsICovLAogCQkJCTkzRDlENTNCMERBMjdFMTgwMDc3MjE2QyAvKiBSYW5nZUJvdW5kYXJ5UG9p
bnQuaCAqLywKIAkJCQlBODREODI3QjExRDMzM0VEMDA5NzI5OTAgLyogUmF3RGF0YURvY3VtZW50
UGFyc2VyLmggKi8sCi0JCQkJODUwMzFCMzUwQTQ0RUZDNzAwRjk5MkUwIC8qIFJlZ2lzdGVyZWRF
dmVudExpc3RlbmVyLmNwcCAqLywKIAkJCQk4NTAzMUIzNjBBNDRFRkM3MDBGOTkyRTAgLyogUmVn
aXN0ZXJlZEV2ZW50TGlzdGVuZXIuaCAqLywKIAkJCQlBNzZFNUY3RTEzNUUwRENGMDBBNjk4Mzcg
LyogUmVuZGVyZWREb2N1bWVudE1hcmtlci5oICovLAogCQkJCTQ5OThBRUM0MTNGOUQwRUEwMDkw
QjFBQSAvKiBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjay5oICovLApAQCAtMzA4NzUsNyAr
MzA4NzIsNiBAQAogCQkJCTJFQzQxREU0MUMwNDEwQTMwMEQyOTRGRSAvKiBSZWFsdGltZU1lZGlh
U291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ0NUE5
NUExNzVENDE3MTAwQzIxRUM4IC8qIFJlY3RhbmdsZVNoYXBlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDQUI0MTgxMTNFMzU2RTgwMEQ4QUFGMyAvKiBSZWdpb24uY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJODUwMzFCNEIwQTQ0RUZDNzAwRjk5MkUwIC8qIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNERkMzNjA1MThDQTYxQzIwMDI2RTU2RiAvKiBSZW1v
dGVDb21tYW5kTGlzdGVuZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RGQzM2MDcxOENBNjk2
QzAwMjZFNTZGIC8qIFJlbW90ZUNvbW1hbmRMaXN0ZW5lcklPUy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUNEOEFDQTg4MUQyMzdBQTIwMEVDQzU5RSAvKiBSZW1vdGVDb21tYW5kTGlzdGVuZXJNYWMu
bW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9tLmNwcAppbmRleCBhMGNhODNlYzFhOGVkMDM4
OWRmOTA5Y2NhZTJjODg0YmUzMjRlNTFhLi41NzUxOTYyYzBiMmQzMGIzODEwMWVmMjBhZWMxYTA1
NzRjNzI3MmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NvbW1h
bmRMaW5lQVBJSG9zdEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDb21tYW5kTGluZUFQSUhvc3RDdXN0b20uY3BwCkBAIC03Myw3ICs3Myw3IEBAIHN0YXRpYyBK
U0FycmF5KiBnZXRKU0xpc3RlbmVyRnVuY3Rpb25zKEV4ZWNTdGF0ZSYgc3RhdGUsIERvY3VtZW50
KiBkb2N1bWVudCwgY29uCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHNpemVfdCBoYW5k
bGVyc0NvdW50ID0gbGlzdGVuZXJJbmZvLmV2ZW50TGlzdGVuZXJWZWN0b3Iuc2l6ZSgpOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwLCBvdXRwdXRJbmRleCA9IDA7IGkgPCBoYW5kbGVyc0NvdW50OyAr
K2kpIHsKLSAgICAgICAgY29uc3QgSlNFdmVudExpc3RlbmVyKiBqc0xpc3RlbmVyID0gSlNFdmVu
dExpc3RlbmVyOjpjYXN0KGxpc3RlbmVySW5mby5ldmVudExpc3RlbmVyVmVjdG9yW2ldLmxpc3Rl
bmVyLmdldCgpKTsKKyAgICAgICAgY29uc3QgSlNFdmVudExpc3RlbmVyKiBqc0xpc3RlbmVyID0g
SlNFdmVudExpc3RlbmVyOjpjYXN0KCZsaXN0ZW5lckluZm8uZXZlbnRMaXN0ZW5lclZlY3Rvcltp
XS0+bGlzdGVuZXIoKSk7CiAgICAgICAgIGlmICghanNMaXN0ZW5lcikgewogICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTg5LDcgKzg5
LDcgQEAgc3RhdGljIEpTQXJyYXkqIGdldEpTTGlzdGVuZXJGdW5jdGlvbnMoRXhlY1N0YXRlJiBz
dGF0ZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBjb24KIAogICAgICAgICBKU09iamVjdCogbGlzdGVu
ZXJFbnRyeSA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7CiAgICAgICAgIGxpc3RlbmVy
RW50cnktPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJsaXN0
ZW5lciIpLCBmdW5jdGlvbik7Ci0gICAgICAgIGxpc3RlbmVyRW50cnktPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1c2VDYXB0dXJlIiksIGpzQm9vbGVhbihs
aXN0ZW5lckluZm8uZXZlbnRMaXN0ZW5lclZlY3RvcltpXS51c2VDYXB0dXJlKSk7CisgICAgICAg
IGxpc3RlbmVyRW50cnktPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJ1c2VDYXB0dXJlIiksIGpzQm9vbGVhbihsaXN0ZW5lckluZm8uZXZlbnRMaXN0ZW5lclZl
Y3RvcltpXS0+dXNlQ2FwdHVyZSgpKSk7CiAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgo
JnN0YXRlLCBvdXRwdXRJbmRleCsrLCBKU1ZhbHVlKGxpc3RlbmVyRW50cnkpKTsKICAgICB9CiAg
ICAgcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01BbGxJ
bk9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCmluZGV4IGQzZDVl
YTM4YmIwYzlkN2UyZmU3MDM1ZTBjMWYxNTYyM2U4NjU2ZDYuLmMwYmY0ZmMwMjNhOGYyZDViZjk3
NGVlN2FiNjRkOTgxY2Y5OGY3ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01B
bGxJbk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcApAQCAt
MTI4LDcgKzEyOCw2IEBACiAvLyAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5jcHAiCiAjaW5jbHVk
ZSAiUmFkaW9CdXR0b25Hcm91cHMuY3BwIgogI2luY2x1ZGUgIlJhbmdlLmNwcCIKLSNpbmNsdWRl
ICJSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5jcHAiCiAjaW5jbHVkZSAiU2NvcGVkRXZlbnRRdWV1
ZS5jcHAiCiAjaW5jbHVkZSAiU2NyaXB0RWxlbWVudC5jcHAiCiAjaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRM
aXN0ZW5lck1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lck1hcC5jcHAK
aW5kZXggN2U3OWFlYmI2ODNmZDk2YjUwNTRlNjE0NTg1MzIyN2Y2NTI5NTUzYi4uM2M5ZjRlZDMw
ZTkxYzdhNGE5ZDAwOWU4NmZiZDlhMDk0MzE3OWRkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dExpc3RlbmVyTWFwLmNwcApAQCAtNDUsNyArNDUsNyBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWZuZGVmIE5ERUJVRwotdm9pZCBFdmVudExpc3RlbmVy
TWFwOjphc3NlcnROb0FjdGl2ZUl0ZXJhdG9ycygpCit2b2lkIEV2ZW50TGlzdGVuZXJNYXA6OmFz
c2VydE5vQWN0aXZlSXRlcmF0b3JzKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIW1fYWN0aXZlSXRl
cmF0b3JDb3VudCk7CiB9CkBAIC01NSwzNyArNTUsMjggQEAgRXZlbnRMaXN0ZW5lck1hcDo6RXZl
bnRMaXN0ZW5lck1hcCgpCiB7CiB9CiAKLWJvb2wgRXZlbnRMaXN0ZW5lck1hcDo6Y29udGFpbnMo
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpIGNvbnN0Ci17Ci0gICAgZm9yIChhdXRvJiBl
bnRyeSA6IG1fZW50cmllcykgewotICAgICAgICBpZiAoZW50cnkuZmlyc3QgPT0gZXZlbnRUeXBl
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQogYm9vbCBFdmVudExpc3RlbmVyTWFwOjpjb250YWluc0NhcHR1cmluZyhjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSkgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9lbnRy
aWVzKSB7Ci0gICAgICAgIGlmIChlbnRyeS5maXJzdCA9PSBldmVudFR5cGUpIHsKLSAgICAgICAg
ICAgIGZvciAoYXV0byYgZXZlbnRMaXN0ZW5lciA6ICplbnRyeS5zZWNvbmQpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoZXZlbnRMaXN0ZW5lci51c2VDYXB0dXJlKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGF1dG8qIGxpc3Rl
bmVycyA9IGZpbmQoZXZlbnRUeXBlKTsKKyAgICBpZiAoIWxpc3RlbmVycykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgZm9yIChhdXRvJiBldmVudExpc3RlbmVyIDogKmxpc3RlbmVycykg
eworICAgICAgICBpZiAoZXZlbnRMaXN0ZW5lci0+dXNlQ2FwdHVyZSgpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBFdmVudExp
c3RlbmVyTWFwOjpjb250YWluc0FjdGl2ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkg
Y29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9lbnRyaWVzKSB7Ci0gICAgICAgIGlm
IChlbnRyeS5maXJzdCA9PSBldmVudFR5cGUpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgZXZl
bnRMaXN0ZW5lciA6ICplbnRyeS5zZWNvbmQpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWV2ZW50
TGlzdGVuZXIuaXNQYXNzaXZlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGF1dG8qIGxpc3RlbmVycyA9IGZpbmQoZXZlbnRU
eXBlKTsKKyAgICBpZiAoIWxpc3RlbmVycykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Zm9yIChhdXRvJiBldmVudExpc3RlbmVyIDogKmxpc3RlbmVycykgeworICAgICAgICBpZiAoIWV2
ZW50TGlzdGVuZXItPmlzUGFzc2l2ZSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTEwOCw0NyArOTksNTEgQEAgVmVjdG9yPEF0b21p
Y1N0cmluZz4gRXZlbnRMaXN0ZW5lck1hcDo6ZXZlbnRUeXBlcygpIGNvbnN0CiAgICAgcmV0dXJu
IHR5cGVzOwogfQogCi1zdGF0aWMgYm9vbCBhZGRMaXN0ZW5lclRvVmVjdG9yKEV2ZW50TGlzdGVu
ZXJWZWN0b3IqIHZlY3RvciwgUmVmPEV2ZW50TGlzdGVuZXI+JiYgbGlzdGVuZXIsIGNvbnN0IFJl
Z2lzdGVyZWRFdmVudExpc3RlbmVyOjpPcHRpb25zJiBvcHRpb25zKQorc3RhdGljIGlubGluZSBz
aXplX3QgZmluZExpc3RlbmVyKGNvbnN0IEV2ZW50TGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycywg
RXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsKLSAgICBSZWdpc3Rl
cmVkRXZlbnRMaXN0ZW5lciByZWdpc3RlcmVkTGlzdGVuZXIoV1RGTW92ZShsaXN0ZW5lciksIG9w
dGlvbnMpOwotCi0gICAgaWYgKHZlY3Rvci0+ZmluZChyZWdpc3RlcmVkTGlzdGVuZXIpICE9IG5v
dEZvdW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIER1cGxpY2F0ZSBsaXN0ZW5lci4KLQot
ICAgIHZlY3Rvci0+YXBwZW5kKHJlZ2lzdGVyZWRMaXN0ZW5lcik7Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0ZW5lcnMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgYXV0byYgcmVnaXN0ZXJlZExpc3RlbmVyID0gbGlzdGVuZXJzW2ldOworICAgICAgICBp
ZiAocmVnaXN0ZXJlZExpc3RlbmVyLT5saXN0ZW5lcigpID09IGxpc3RlbmVyICYmIHJlZ2lzdGVy
ZWRMaXN0ZW5lci0+dXNlQ2FwdHVyZSgpID09IHVzZUNhcHR1cmUpCisgICAgICAgICAgICByZXR1
cm4gaTsKKyAgICB9CisgICAgcmV0dXJuIG5vdEZvdW5kOwogfQogCiBib29sIEV2ZW50TGlzdGVu
ZXJNYXA6OmFkZChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUmVmPEV2ZW50TGlzdGVu
ZXI+JiYgbGlzdGVuZXIsIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOjpPcHRpb25zJiBv
cHRpb25zKQogewogICAgIGFzc2VydE5vQWN0aXZlSXRlcmF0b3JzKCk7CiAKLSAgICBmb3IgKGF1
dG8mIGVudHJ5IDogbV9lbnRyaWVzKSB7Ci0gICAgICAgIGlmIChlbnRyeS5maXJzdCA9PSBldmVu
dFR5cGUpCi0gICAgICAgICAgICByZXR1cm4gYWRkTGlzdGVuZXJUb1ZlY3RvcihlbnRyeS5zZWNv
bmQuZ2V0KCksIFdURk1vdmUobGlzdGVuZXIpLCBvcHRpb25zKTsKKyAgICBpZiAoYXV0byogbGlz
dGVuZXJzID0gZmluZChldmVudFR5cGUpKSB7CisgICAgICAgIGlmIChmaW5kTGlzdGVuZXIoKmxp
c3RlbmVycywgbGlzdGVuZXIsIG9wdGlvbnMuY2FwdHVyZSkgIT0gbm90Rm91bmQpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7IC8vIER1cGxpY2F0ZSBsaXN0ZW5lci4KKyAgICAgICAgbGlzdGVu
ZXJzLT5hcHBlbmQoUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI6OmNyZWF0ZShXVEZNb3ZlKGxpc3Rl
bmVyKSwgb3B0aW9ucykpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBtX2Vu
dHJpZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGV2ZW50VHlwZSwgc3RkOjptYWtlX3VuaXF1ZTxF
dmVudExpc3RlbmVyVmVjdG9yPigpKSk7Ci0gICAgcmV0dXJuIGFkZExpc3RlbmVyVG9WZWN0b3Io
bV9lbnRyaWVzLmxhc3QoKS5zZWNvbmQuZ2V0KCksIFdURk1vdmUobGlzdGVuZXIpLCBvcHRpb25z
KTsKKyAgICBhdXRvIGxpc3RlbmVycyA9IHN0ZDo6bWFrZV91bmlxdWU8RXZlbnRMaXN0ZW5lclZl
Y3Rvcj4oKTsKKyAgICBsaXN0ZW5lcnMtPnVuY2hlY2tlZEFwcGVuZChSZWdpc3RlcmVkRXZlbnRM
aXN0ZW5lcjo6Y3JlYXRlKFdURk1vdmUobGlzdGVuZXIpLCBvcHRpb25zKSk7CisgICAgbV9lbnRy
aWVzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihldmVudFR5cGUsIFdURk1vdmUobGlzdGVuZXJzKSkp
OworICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCByZW1vdmVMaXN0ZW5lckZyb21W
ZWN0b3IoRXZlbnRMaXN0ZW5lclZlY3RvciogbGlzdGVuZXJWZWN0b3IsIEV2ZW50TGlzdGVuZXIm
IGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUsIHNpemVfdCYgaW5kZXhPZlJlbW92ZWRMaXN0ZW5l
cikKK3N0YXRpYyBib29sIHJlbW92ZUxpc3RlbmVyRnJvbVZlY3RvcihFdmVudExpc3RlbmVyVmVj
dG9yJiBsaXN0ZW5lcnMsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUp
CiB7Ci0gICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgcmVnaXN0ZXJlZExpc3RlbmVyKGxpc3Rl
bmVyLCB1c2VDYXB0dXJlKTsKLSAgICBpbmRleE9mUmVtb3ZlZExpc3RlbmVyID0gbGlzdGVuZXJW
ZWN0b3ItPmZpbmQocmVnaXN0ZXJlZExpc3RlbmVyKTsKLSAgICBpZiAoaW5kZXhPZlJlbW92ZWRM
aXN0ZW5lciA9PSBub3RGb3VuZCkKKyAgICBzaXplX3QgaW5kZXhPZlJlbW92ZWRMaXN0ZW5lciA9
IGZpbmRMaXN0ZW5lcihsaXN0ZW5lcnMsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKKyAgICBpZiAo
VU5MSUtFTFkoaW5kZXhPZlJlbW92ZWRMaXN0ZW5lciA9PSBub3RGb3VuZCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBsaXN0ZW5lclZlY3Rvci0+cmVtb3ZlKGluZGV4T2ZSZW1vdmVkTGlz
dGVuZXIpOworCisgICAgbGlzdGVuZXJzW2luZGV4T2ZSZW1vdmVkTGlzdGVuZXJdLT5tYXJrQXNS
ZW1vdmVkKCk7CisgICAgbGlzdGVuZXJzLnJlbW92ZShpbmRleE9mUmVtb3ZlZExpc3RlbmVyKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBFdmVudExpc3RlbmVyTWFwOjpyZW1vdmUoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29s
IHVzZUNhcHR1cmUsIHNpemVfdCYgaW5kZXhPZlJlbW92ZWRMaXN0ZW5lcikKK2Jvb2wgRXZlbnRM
aXN0ZW5lck1hcDo6cmVtb3ZlKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExp
c3RlbmVyJiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQogewogICAgIGFzc2VydE5vQWN0aXZl
SXRlcmF0b3JzKCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9lbnRyaWVzLnNp
emUoKTsgKytpKSB7CiAgICAgICAgIGlmIChtX2VudHJpZXNbaV0uZmlyc3QgPT0gZXZlbnRUeXBl
KSB7Ci0gICAgICAgICAgICBib29sIHdhc1JlbW92ZWQgPSByZW1vdmVMaXN0ZW5lckZyb21WZWN0
b3IobV9lbnRyaWVzW2ldLnNlY29uZC5nZXQoKSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUsIGluZGV4
T2ZSZW1vdmVkTGlzdGVuZXIpOworICAgICAgICAgICAgYm9vbCB3YXNSZW1vdmVkID0gcmVtb3Zl
TGlzdGVuZXJGcm9tVmVjdG9yKCptX2VudHJpZXNbaV0uc2Vjb25kLCBsaXN0ZW5lciwgdXNlQ2Fw
dHVyZSk7CiAgICAgICAgICAgICBpZiAobV9lbnRyaWVzW2ldLnNlY29uZC0+aXNFbXB0eSgpKQog
ICAgICAgICAgICAgICAgIG1fZW50cmllcy5yZW1vdmUoaSk7CiAgICAgICAgICAgICByZXR1cm4g
d2FzUmVtb3ZlZDsKQEAgLTE1OCw3ICsxNTMsNyBAQCBib29sIEV2ZW50TGlzdGVuZXJNYXA6OnJl
bW92ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYgbGlzdAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotRXZlbnRMaXN0ZW5lclZlY3RvciogRXZlbnRMaXN0ZW5l
ck1hcDo6ZmluZChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKK0V2ZW50TGlzdGVuZXJW
ZWN0b3IqIEV2ZW50TGlzdGVuZXJNYXA6OmZpbmQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5
cGUpIGNvbnN0CiB7CiAgICAgYXNzZXJ0Tm9BY3RpdmVJdGVyYXRvcnMoKTsKIApAQCAtMTcyLDgg
KzE2NywxMiBAQCBFdmVudExpc3RlbmVyVmVjdG9yKiBFdmVudExpc3RlbmVyTWFwOjpmaW5kKGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQogCiBzdGF0aWMgdm9pZCByZW1vdmVGaXJzdExp
c3RlbmVyQ3JlYXRlZEZyb21NYXJrdXAoRXZlbnRMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJWZWN0
b3IpCiB7Ci0gICAgYm9vbCBmb3VuZExpc3RlbmVyID0gbGlzdGVuZXJWZWN0b3IucmVtb3ZlRmly
c3RNYXRjaGluZyhbXSAoY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyKSB7
Ci0gICAgICAgIHJldHVybiBsaXN0ZW5lci5saXN0ZW5lci0+d2FzQ3JlYXRlZEZyb21NYXJrdXAo
KTsKKyAgICBib29sIGZvdW5kTGlzdGVuZXIgPSBsaXN0ZW5lclZlY3Rvci5yZW1vdmVGaXJzdE1h
dGNoaW5nKFtdIChjb25zdCBhdXRvJiByZWdpc3RlcmVkTGlzdGVuZXIpIHsKKyAgICAgICAgaWYg
KHJlZ2lzdGVyZWRMaXN0ZW5lci0+bGlzdGVuZXIoKS53YXNDcmVhdGVkRnJvbU1hcmt1cCgpKSB7
CisgICAgICAgICAgICByZWdpc3RlcmVkTGlzdGVuZXItPm1hcmtBc1JlbW92ZWQoKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9KTsKICAgICBBU1NFUlRfVU5VU0VEKGZvdW5kTGlzdGVuZXIsIGZvdW5kTGlzdGVuZXIpOwog
fQpAQCAtMTkyLDEzICsxOTEsMTMgQEAgdm9pZCBFdmVudExpc3RlbmVyTWFwOjpyZW1vdmVGaXJz
dEV2ZW50TGlzdGVuZXJDcmVhdGVkRnJvbU1hcmt1cChjb25zdCBBdG9taWNTdHIKICAgICB9CiB9
CiAKLXN0YXRpYyB2b2lkIGNvcHlMaXN0ZW5lcnNOb3RDcmVhdGVkRnJvbU1hcmt1cFRvVGFyZ2V0
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyVmVjdG9yKiBsaXN0
ZW5lclZlY3RvciwgRXZlbnRUYXJnZXQqIHRhcmdldCkKK3N0YXRpYyB2b2lkIGNvcHlMaXN0ZW5l
cnNOb3RDcmVhdGVkRnJvbU1hcmt1cFRvVGFyZ2V0KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlLCBFdmVudExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lclZlY3RvciwgRXZlbnRUYXJnZXQqIHRh
cmdldCkKIHsKLSAgICBmb3IgKGF1dG8mIGxpc3RlbmVyIDogKmxpc3RlbmVyVmVjdG9yKSB7Cisg
ICAgZm9yIChhdXRvJiByZWdpc3RlcmVkTGlzdGVuZXIgOiBsaXN0ZW5lclZlY3RvcikgewogICAg
ICAgICAvLyBFdmVudCBsaXN0ZW5lcnMgY3JlYXRlZCBmcm9tIG1hcmt1cCBoYXZlIGFscmVhZHkg
YmVlbiB0cmFuc2ZlcmVkIHRvIHRoZSBzaGFkb3cgdHJlZSBkdXJpbmcgY2xvbmluZy4KLSAgICAg
ICAgaWYgKGxpc3RlbmVyLmxpc3RlbmVyLT53YXNDcmVhdGVkRnJvbU1hcmt1cCgpKQorICAgICAg
ICBpZiAocmVnaXN0ZXJlZExpc3RlbmVyLT5saXN0ZW5lcigpLndhc0NyZWF0ZWRGcm9tTWFya3Vw
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdGFyZ2V0LT5hZGRFdmVudExpc3Rl
bmVyKGV2ZW50VHlwZSwgKmxpc3RlbmVyLmxpc3RlbmVyLCBsaXN0ZW5lci51c2VDYXB0dXJlKTsK
KyAgICAgICAgdGFyZ2V0LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgcmVnaXN0ZXJlZExp
c3RlbmVyLT5saXN0ZW5lcigpLCByZWdpc3RlcmVkTGlzdGVuZXItPnVzZUNhcHR1cmUoKSk7CiAg
ICAgfQogfQogCkBAIC0yMDcsNyArMjA2LDcgQEAgdm9pZCBFdmVudExpc3RlbmVyTWFwOjpjb3B5
RXZlbnRMaXN0ZW5lcnNOb3RDcmVhdGVkRnJvbU1hcmt1cFRvVGFyZ2V0KEV2ZW50VGFyZ2UKICAg
ICBhc3NlcnROb0FjdGl2ZUl0ZXJhdG9ycygpOwogCiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1f
ZW50cmllcykKLSAgICAgICAgY29weUxpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJn
ZXQoZW50cnkuZmlyc3QsIGVudHJ5LnNlY29uZC5nZXQoKSwgdGFyZ2V0KTsKKyAgICAgICAgY29w
eUxpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJnZXQoZW50cnkuZmlyc3QsICplbnRy
eS5zZWNvbmQsIHRhcmdldCk7CiB9CiAKIEV2ZW50TGlzdGVuZXJJdGVyYXRvcjo6RXZlbnRMaXN0
ZW5lckl0ZXJhdG9yKEV2ZW50VGFyZ2V0KiB0YXJnZXQpCkBAIC0yMzYsMTYgKzIzNSwxNiBAQCBF
dmVudExpc3RlbmVySXRlcmF0b3I6On5FdmVudExpc3RlbmVySXRlcmF0b3IoKQogRXZlbnRMaXN0
ZW5lciogRXZlbnRMaXN0ZW5lckl0ZXJhdG9yOjpuZXh0TGlzdGVuZXIoKQogewogICAgIGlmICgh
bV9tYXApCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IGZvciAoOyBtX2VudHJ5SW5kZXggPCBtX21hcC0+bV9lbnRyaWVzLnNpemUoKTsgKyttX2VudHJ5
SW5kZXgpIHsKICAgICAgICAgRXZlbnRMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gKm1fbWFw
LT5tX2VudHJpZXNbbV9lbnRyeUluZGV4XS5zZWNvbmQ7CiAgICAgICAgIGlmIChtX2luZGV4IDwg
bGlzdGVuZXJzLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBsaXN0ZW5lcnNbbV9pbmRleCsr
XS5saXN0ZW5lci5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiAmbGlzdGVuZXJzW21faW5kZXgr
K10tPmxpc3RlbmVyKCk7CiAgICAgICAgIG1faW5kZXggPSAwOwogICAgIH0KIAotICAgIHJldHVy
biAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lck1hcC5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXJNYXAuaAppbmRleCA5ZjUzMmFkMWU2NjM4NWQ0MmIz
NTA1N2I3OGI3MzkwNDQ1ZjZmYzVlLi41YzY1MmY5YzEyYjMxNDViYWMyNWQyMDVhN2U3NGFjY2Zm
NmJlZjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lck1hcC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyTWFwLmgKQEAgLTQzLDIyICs0
MywyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEV2ZW50VGFyZ2V0OwogCi10eXBl
ZGVmIFZlY3RvcjxSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciwgMT4gRXZlbnRMaXN0ZW5lclZlY3Rv
cjsKK3VzaW5nIEV2ZW50TGlzdGVuZXJWZWN0b3IgPSBWZWN0b3I8UmVmUHRyPFJlZ2lzdGVyZWRF
dmVudExpc3RlbmVyPiwgMT47CiAKIGNsYXNzIEV2ZW50TGlzdGVuZXJNYXAgewogcHVibGljOgog
ICAgIEV2ZW50TGlzdGVuZXJNYXAoKTsKIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fZW50cmllcy5pc0VtcHR5KCk7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGNvbnRh
aW5zKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKSBjb25zdDsKKyAgICBib29sIGNvbnRh
aW5zKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKSBjb25zdCB7IHJldHVybiBmaW5kKGV2
ZW50VHlwZSk7IH0KICAgICBib29sIGNvbnRhaW5zQ2FwdHVyaW5nKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlKSBjb25zdDsKICAgICBib29sIGNvbnRhaW5zQWN0aXZlKGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlKSBjb25zdDsKIAogICAgIHZvaWQgY2xlYXIoKTsKIAogICAgIGJv
b2wgYWRkKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBSZWY8RXZlbnRMaXN0ZW5lcj4m
JiwgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI6Ok9wdGlvbnMmKTsKLSAgICBib29sIHJl
bW92ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYsIGJvb2wg
dXNlQ2FwdHVyZSwgc2l6ZV90JiBpbmRleE9mUmVtb3ZlZExpc3RlbmVyKTsKLSAgICBFdmVudExp
c3RlbmVyVmVjdG9yKiBmaW5kKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKTsKKyAgICBi
b29sIHJlbW92ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYs
IGJvb2wgdXNlQ2FwdHVyZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgRXZlbnRMaXN0ZW5lclZlY3Rv
ciogZmluZChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkgY29uc3Q7CiAgICAgVmVjdG9y
PEF0b21pY1N0cmluZz4gZXZlbnRUeXBlcygpIGNvbnN0OwogCiAgICAgdm9pZCByZW1vdmVGaXJz
dEV2ZW50TGlzdGVuZXJDcmVhdGVkRnJvbU1hcmt1cChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSk7CkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIEV2ZW50TGlzdGVuZXJJdGVyYXRvcjsKIAotICAgIHZvaWQgYXNzZXJ0Tm9BY3RpdmVJdGVy
YXRvcnMoKTsKKyAgICB2b2lkIGFzc2VydE5vQWN0aXZlSXRlcmF0b3JzKCkgY29uc3Q7CiAKICAg
ICBWZWN0b3I8c3RkOjpwYWlyPEF0b21pY1N0cmluZywgc3RkOjp1bmlxdWVfcHRyPEV2ZW50TGlz
dGVuZXJWZWN0b3I+PiwgMj4gbV9lbnRyaWVzOwogCkBAIC03OSw3ICs3OSw2IEBAIHByaXZhdGU6
CiBjbGFzcyBFdmVudExpc3RlbmVySXRlcmF0b3IgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEV2ZW50TGlzdGVuZXJJdGVyYXRvcik7CiBwdWJsaWM6Ci0gICAgRXZlbnRMaXN0ZW5lckl0ZXJh
dG9yKCk7CiAgICAgZXhwbGljaXQgRXZlbnRMaXN0ZW5lckl0ZXJhdG9yKEV2ZW50VGFyZ2V0Kik7
CiAjaWZuZGVmIE5ERUJVRwogICAgIH5FdmVudExpc3RlbmVySXRlcmF0b3IoKTsKQEAgLTk0LDcg
KzkzLDcgQEAgcHJpdmF0ZToKIH07CiAKICNpZmRlZiBOREVCVUcKLWlubGluZSB2b2lkIEV2ZW50
TGlzdGVuZXJNYXA6OmFzc2VydE5vQWN0aXZlSXRlcmF0b3JzKCkgeyB9CitpbmxpbmUgdm9pZCBF
dmVudExpc3RlbmVyTWFwOjphc3NlcnROb0FjdGl2ZUl0ZXJhdG9ycygpIGNvbnN0IHsgfQogI2Vu
ZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3Bw
CmluZGV4IDBiZDViODBjN2U3M2FlZWRmM2JlZWViM2VjM2E1ODU1MmNiM2YxODEuLjA5ZjBmOGEx
YWZmMjBkMDMxZGYzNGQzMmMxMDI5ZTM2NDM3NDI3Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudFRhcmdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFy
Z2V0LmNwcApAQCAtMTAxLDI4ICsxMDEsNyBAQCBib29sIEV2ZW50VGFyZ2V0OjpyZW1vdmVFdmVu
dExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbgogICAg
IGlmICghZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc2l6ZV90IGluZGV4T2ZSZW1v
dmVkTGlzdGVuZXI7Ci0KLSAgICBpZiAoIWQtPmV2ZW50TGlzdGVuZXJNYXAucmVtb3ZlKGV2ZW50
VHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMuY2FwdHVyZSwgaW5kZXhPZlJlbW92ZWRMaXN0ZW5lcikp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIE5vdGlmeSBmaXJpbmcgZXZlbnRzIHBs
YW5uaW5nIHRvIGludm9rZSB0aGUgbGlzdGVuZXIgYXQgJ2luZGV4JyB0aGF0Ci0gICAgLy8gdGhl
eSBoYXZlIG9uZSBsZXNzIGxpc3RlbmVyIHRvIGludm9rZS4KLSAgICBpZiAoIWQtPmZpcmluZ0V2
ZW50SXRlcmF0b3JzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBmb3IgKGF1dG8mIGZpcmlu
Z0l0ZXJhdG9yIDogKmQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzKSB7Ci0gICAgICAgIGlmIChldmVu
dFR5cGUgIT0gZmlyaW5nSXRlcmF0b3IuZXZlbnRUeXBlKQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgaWYgKGluZGV4T2ZSZW1vdmVkTGlzdGVuZXIgPj0gZmlyaW5nSXRlcmF0b3Iu
c2l6ZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC0tZmlyaW5nSXRlcmF0b3Iu
c2l6ZTsKLSAgICAgICAgaWYgKGluZGV4T2ZSZW1vdmVkTGlzdGVuZXIgPD0gZmlyaW5nSXRlcmF0
b3IuaXRlcmF0b3IpCi0gICAgICAgICAgICAtLWZpcmluZ0l0ZXJhdG9yLml0ZXJhdG9yOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBkLT5ldmVudExpc3RlbmVyTWFwLnJl
bW92ZShldmVudFR5cGUsIGxpc3RlbmVyLCBvcHRpb25zLmNhcHR1cmUpOwogfQogCiBib29sIEV2
ZW50VGFyZ2V0OjpzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlLCBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4mJiBsaXN0ZW5lcikKQEAgLTEzNiwxMCAr
MTE1LDEwIEBAIGJvb2wgRXZlbnRUYXJnZXQ6OnNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFJlZlB0CiBFdmVudExpc3RlbmVyKiBFdmVudFRh
cmdldDo6Z2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSkKIHsKICAgICBmb3IgKGF1dG8mIGV2ZW50TGlzdGVuZXIgOiBnZXRFdmVudExpc3RlbmVy
cyhldmVudFR5cGUpKSB7Ci0gICAgICAgIGlmIChldmVudExpc3RlbmVyLmxpc3RlbmVyLT5pc0F0
dHJpYnV0ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGV2ZW50TGlzdGVuZXIubGlzdGVuZXIuZ2V0
KCk7CisgICAgICAgIGlmIChldmVudExpc3RlbmVyLT5saXN0ZW5lcigpLmlzQXR0cmlidXRlKCkp
CisgICAgICAgICAgICByZXR1cm4gJmV2ZW50TGlzdGVuZXItPmxpc3RlbmVyKCk7CiAgICAgfQot
ICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBib29sIEV2ZW50VGFyZ2V0
OjpoYXNBY3RpdmVFdmVudExpc3RlbmVycyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkg
Y29uc3QKQEAgLTIxMCw2MiArMTg5LDc0IEBAIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIGxl
Z2FjeVR5cGUoY29uc3QgRXZlbnQmIGV2ZW50KQogICAgIHJldHVybiBlbXB0eUF0b207CiB9CiAK
K2NsYXNzIEZpcmluZ0V2ZW50TGlzdGVuZXJzU2NvcGUgeworcHVibGljOgorICAgIGV4cGxpY2l0
IEZpcmluZ0V2ZW50TGlzdGVuZXJzU2NvcGUoRXZlbnRUYXJnZXREYXRhJiBkYXRhKQorICAgICAg
ICA6IG1fZGF0YShkYXRhKQorICAgIHsKKyAgICAgICAgbV9kYXRhLmlzRmlyaW5nRXZlbnRMaXN0
ZW5lcnMrKzsKKyAgICB9CisKKyAgICB+RmlyaW5nRXZlbnRMaXN0ZW5lcnNTY29wZSgpCisgICAg
eworICAgICAgICBBU1NFUlQobV9kYXRhLmlzRmlyaW5nRXZlbnRMaXN0ZW5lcnMpOworICAgICAg
ICBtX2RhdGEuaXNGaXJpbmdFdmVudExpc3RlbmVycy0tOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBFdmVudFRhcmdldERhdGEmIG1fZGF0YTsKK307CisKIGJvb2wgRXZlbnRUYXJnZXQ6OmZpcmVF
dmVudExpc3RlbmVycyhFdmVudCYgZXZlbnQpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04oIU5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6aXNFdmVudERpc3BhdGNoRm9y
YmlkZGVuKCkpOwogICAgIEFTU0VSVChldmVudC5pc0luaXRpYWxpemVkKCkpOwogCi0gICAgRXZl
bnRUYXJnZXREYXRhKiBkID0gZXZlbnRUYXJnZXREYXRhKCk7Ci0gICAgaWYgKCFkKQorICAgIEV2
ZW50VGFyZ2V0RGF0YSogZGF0YSA9IGV2ZW50VGFyZ2V0RGF0YSgpOworICAgIGlmICghZGF0YSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBFdmVudExpc3RlbmVyVmVjdG9yKiBsZWdhY3lM
aXN0ZW5lcnNWZWN0b3IgPSBudWxscHRyOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbGVnYWN5
VHlwZU5hbWUgPSBsZWdhY3lUeXBlKGV2ZW50KTsKLSAgICBpZiAoIWxlZ2FjeVR5cGVOYW1lLmlz
RW1wdHkoKSkKLSAgICAgICAgbGVnYWN5TGlzdGVuZXJzVmVjdG9yID0gZC0+ZXZlbnRMaXN0ZW5l
ck1hcC5maW5kKGxlZ2FjeVR5cGVOYW1lKTsKLQotICAgIEV2ZW50TGlzdGVuZXJWZWN0b3IqIGxp
c3RlbmVyc1ZlY3RvciA9IGQtPmV2ZW50TGlzdGVuZXJNYXAuZmluZChldmVudC50eXBlKCkpOwot
Ci0gICAgaWYgKGxpc3RlbmVyc1ZlY3RvcikKLSAgICAgICAgZmlyZUV2ZW50TGlzdGVuZXJzKGV2
ZW50LCBkLCAqbGlzdGVuZXJzVmVjdG9yKTsKLSAgICBlbHNlIGlmIChsZWdhY3lMaXN0ZW5lcnNW
ZWN0b3IpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nIHR5cGVOYW1lID0gZXZlbnQudHlwZSgpOwot
ICAgICAgICBldmVudC5zZXRUeXBlKGxlZ2FjeVR5cGVOYW1lKTsKLSAgICAgICAgZmlyZUV2ZW50
TGlzdGVuZXJzKGV2ZW50LCBkLCAqbGVnYWN5TGlzdGVuZXJzVmVjdG9yKTsKLSAgICAgICAgZXZl
bnQuc2V0VHlwZSh0eXBlTmFtZSk7CisgICAgRmlyaW5nRXZlbnRMaXN0ZW5lcnNTY29wZSBmaXJp
bmdFdmVudExpc3RlbmVyc1Njb3BlKCpkYXRhKTsKKworICAgIGlmIChhdXRvKiBsaXN0ZW5lcnNW
ZWN0b3IgPSBkYXRhLT5ldmVudExpc3RlbmVyTWFwLmZpbmQoZXZlbnQudHlwZSgpKSkgeworICAg
ICAgICBmaXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQsICpsaXN0ZW5lcnNWZWN0b3IpOworICAgICAg
ICByZXR1cm4gIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQoKTsKICAgICB9CiAKKyAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGxlZ2FjeVR5cGVOYW1lID0gbGVnYWN5VHlwZShldmVudCk7CisgICAgaWYg
KCFsZWdhY3lUeXBlTmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGxlZ2FjeUxp
c3RlbmVyc1ZlY3RvciA9IGRhdGEtPmV2ZW50TGlzdGVuZXJNYXAuZmluZChsZWdhY3lUeXBlTmFt
ZSkpIHsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyB0eXBlTmFtZSA9IGV2ZW50LnR5cGUoKTsK
KyAgICAgICAgICAgIGV2ZW50LnNldFR5cGUobGVnYWN5VHlwZU5hbWUpOworICAgICAgICAgICAg
ZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50LCAqbGVnYWN5TGlzdGVuZXJzVmVjdG9yKTsKKyAgICAg
ICAgICAgIGV2ZW50LnNldFR5cGUodHlwZU5hbWUpOworICAgICAgICB9CisgICAgfQogICAgIHJl
dHVybiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCgpOwogfQogCi12b2lkIEV2ZW50VGFyZ2V0Ojpm
aXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQmIGV2ZW50LCBFdmVudFRhcmdldERhdGEqIGQsIEV2ZW50
TGlzdGVuZXJWZWN0b3ImIGVudHJ5KQorLy8gSW50ZW50aW9uYWxseSBjcmVhdGVzIGEgY29weSBv
ZiB0aGUgbGlzdGVuZXJzIHZlY3RvciB0byBhdm9pZCBldmVudCBsaXN0ZW5lcnMgYWRkZWQgYWZ0
ZXIgdGhpcyBwb2ludCBmcm9tIGJlaW5nIHJ1bi4KKy8vIE5vdGUgdGhhdCByZW1vdmFsIHN0aWxs
IGhhcyBhbiBlZmZlY3QgZHVlIHRvIHRoZSByZW1vdmVkIGZpZWxkIGluIFJlZ2lzdGVyZWRFdmVu
dExpc3RlbmVyLgordm9pZCBFdmVudFRhcmdldDo6ZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50JiBl
dmVudCwgRXZlbnRMaXN0ZW5lclZlY3RvciBsaXN0ZW5lcnMpCiB7CiAgICAgUmVmPEV2ZW50VGFy
Z2V0PiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKLQotICAgIC8vIEZpcmUgYWxsIGxpc3RlbmVycyBy
ZWdpc3RlcmVkIGZvciB0aGlzIGV2ZW50LiBEb24ndCBmaXJlIGxpc3RlbmVycyByZW1vdmVkIGR1
cmluZyBldmVudCBkaXNwYXRjaC4KLSAgICAvLyBBbHNvLCBkb24ndCBmaXJlIGV2ZW50IGxpc3Rl
bmVycyBhZGRlZCBkdXJpbmcgZXZlbnQgZGlzcGF0Y2guIENvbnZlbmllbnRseSwgYWxsIG5ldyBl
dmVudCBsaXN0ZW5lcnMgd2lsbCBiZSBhZGRlZAotICAgIC8vIGFmdGVyIG9yIGF0IGluZGV4IHxz
aXplfCwgc28gaXRlcmF0aW5nIHVwIHRvIChidXQgbm90IGluY2x1ZGluZykgfHNpemV8IG5hdHVy
YWxseSBleGNsdWRlcyBuZXcgZXZlbnQgbGlzdGVuZXJzLgotCi0gICAgc2l6ZV90IGkgPSAwOwot
ICAgIHNpemVfdCBzaXplID0gZW50cnkuc2l6ZSgpOwotICAgIGlmICghZC0+ZmlyaW5nRXZlbnRJ
dGVyYXRvcnMpCi0gICAgICAgIGQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzID0gc3RkOjptYWtlX3Vu
aXF1ZTxGaXJpbmdFdmVudEl0ZXJhdG9yVmVjdG9yPigpOwotICAgIGQtPmZpcmluZ0V2ZW50SXRl
cmF0b3JzLT5hcHBlbmQoRmlyaW5nRXZlbnRJdGVyYXRvcihldmVudC50eXBlKCksIGksIHNpemUp
KTsKKyAgICBBU1NFUlQoIWxpc3RlbmVycy5pc0VtcHR5KCkpOwogCiAgICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBudWxscHRyOwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZSB3aWxsRGlzcGF0Y2hFdmVudENvb2tpZTsKICAgICBpZiAoaXM8RG9jdW1lbnQ+KGNvbnRl
eHQpKSB7CiAgICAgICAgIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpOwot
ICAgICAgICB3aWxsRGlzcGF0Y2hFdmVudENvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6d2lsbERpc3BhdGNoRXZlbnQoKmRvY3VtZW50LCBldmVudCwgc2l6ZSA+IDApOworICAgICAg
ICB3aWxsRGlzcGF0Y2hFdmVudENvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2ls
bERpc3BhdGNoRXZlbnQoKmRvY3VtZW50LCBldmVudCwgdHJ1ZSk7CiAgICAgfQogCi0gICAgZm9y
ICg7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgcmVn
aXN0ZXJlZExpc3RlbmVyID0gZW50cnlbaV07CisgICAgZm9yIChhdXRvJiByZWdpc3RlcmVkTGlz
dGVuZXIgOiBsaXN0ZW5lcnMpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKHJlZ2lzdGVyZWRMaXN0
ZW5lci0+d2FzUmVtb3ZlZCgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlm
IChldmVudC5ldmVudFBoYXNlKCkgPT0gRXZlbnQ6OkNBUFRVUklOR19QSEFTRSAmJiAhcmVnaXN0
ZXJlZExpc3RlbmVyLnVzZUNhcHR1cmUpCisgICAgICAgIGlmIChldmVudC5ldmVudFBoYXNlKCkg
PT0gRXZlbnQ6OkNBUFRVUklOR19QSEFTRSAmJiAhcmVnaXN0ZXJlZExpc3RlbmVyLT51c2VDYXB0
dXJlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGV2ZW50LmV2ZW50UGhh
c2UoKSA9PSBFdmVudDo6QlVCQkxJTkdfUEhBU0UgJiYgcmVnaXN0ZXJlZExpc3RlbmVyLnVzZUNh
cHR1cmUpCisgICAgICAgIGlmIChldmVudC5ldmVudFBoYXNlKCkgPT0gRXZlbnQ6OkJVQkJMSU5H
X1BIQVNFICYmIHJlZ2lzdGVyZWRMaXN0ZW5lci0+dXNlQ2FwdHVyZSgpKQogICAgICAgICAgICAg
Y29udGludWU7CiAKICAgICAgICAgLy8gSWYgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIGhhcyBi
ZWVuIGNhbGxlZCwgd2UganVzdCBicmVhayBvdXQgaW1tZWRpYXRlbHksIHdpdGhvdXQKQEAgLTI3
NCwyNCArMjY1LDIyIEBAIHZvaWQgRXZlbnRUYXJnZXQ6OmZpcmVFdmVudExpc3RlbmVycyhFdmVu
dCYgZXZlbnQsIEV2ZW50VGFyZ2V0RGF0YSogZCwgRXZlbnRMaXN0CiAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICAvLyBEbyB0aGlzIGJlZm9yZSBpbnZvY2F0aW9uIHRvIGF2b2lkIHJlZW50
cmFuY3kgaXNzdWVzLgotICAgICAgICBpZiAocmVnaXN0ZXJlZExpc3RlbmVyLmlzT25jZSkKLSAg
ICAgICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQudHlwZSgpLCAqcmVnaXN0ZXJlZExp
c3RlbmVyLmxpc3RlbmVyLCBMaXN0ZW5lck9wdGlvbnMocmVnaXN0ZXJlZExpc3RlbmVyLnVzZUNh
cHR1cmUpKTsKKyAgICAgICAgaWYgKHJlZ2lzdGVyZWRMaXN0ZW5lci0+aXNPbmNlKCkpCisgICAg
ICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LnR5cGUoKSwgcmVnaXN0ZXJlZExpc3Rl
bmVyLT5saXN0ZW5lcigpLCBMaXN0ZW5lck9wdGlvbnMocmVnaXN0ZXJlZExpc3RlbmVyLT51c2VD
YXB0dXJlKCkpKTsKIAotICAgICAgICBpZiAocmVnaXN0ZXJlZExpc3RlbmVyLmlzUGFzc2l2ZSkK
KyAgICAgICAgaWYgKHJlZ2lzdGVyZWRMaXN0ZW5lci0+aXNQYXNzaXZlKCkpCiAgICAgICAgICAg
ICBldmVudC5zZXRJblBhc3NpdmVMaXN0ZW5lcih0cnVlKTsKIAogICAgICAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
aWxsSGFuZGxlRXZlbnQoY29udGV4dCwgZXZlbnQpOwogICAgICAgICAvLyBUbyBtYXRjaCBNb3pp
bGxhLCB0aGUgQVRfVEFSR0VUIHBoYXNlIGZpcmVzIGJvdGggY2FwdHVyaW5nIGFuZCBidWJibGlu
ZwogICAgICAgICAvLyBldmVudCBsaXN0ZW5lcnMsIGV2ZW4gdGhvdWdoIHRoYXQgdmlvbGF0ZXMg
c29tZSB2ZXJzaW9ucyBvZiB0aGUgRE9NIHNwZWMuCi0gICAgICAgIHJlZ2lzdGVyZWRMaXN0ZW5l
ci5saXN0ZW5lci0+aGFuZGxlRXZlbnQoY29udGV4dCwgJmV2ZW50KTsKKyAgICAgICAgcmVnaXN0
ZXJlZExpc3RlbmVyLT5saXN0ZW5lcigpLmhhbmRsZUV2ZW50KGNvbnRleHQsICZldmVudCk7CiAg
ICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSGFuZGxlRXZlbnQoY29va2llKTsK
IAotICAgICAgICBpZiAocmVnaXN0ZXJlZExpc3RlbmVyLmlzUGFzc2l2ZSkKKyAgICAgICAgaWYg
KHJlZ2lzdGVyZWRMaXN0ZW5lci0+aXNQYXNzaXZlKCkpCiAgICAgICAgICAgICBldmVudC5zZXRJ
blBhc3NpdmVMaXN0ZW5lcihmYWxzZSk7CiAgICAgfQogCi0gICAgZC0+ZmlyaW5nRXZlbnRJdGVy
YXRvcnMtPnJlbW92ZUxhc3QoKTsKLQogICAgIGlmIChkb2N1bWVudCkKICAgICAgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpkaWREaXNwYXRjaEV2ZW50KHdpbGxEaXNwYXRjaEV2ZW50Q29v
a2llKTsKIH0KQEAgLTMxMCwxNSArMjk5LDYgQEAgdm9pZCBFdmVudFRhcmdldDo6cmVtb3ZlQWxs
RXZlbnRMaXN0ZW5lcnMoKQogICAgIGlmICghZCkKICAgICAgICAgcmV0dXJuOwogICAgIGQtPmV2
ZW50TGlzdGVuZXJNYXAuY2xlYXIoKTsKLQotICAgIC8vIE5vdGlmeSBmaXJpbmcgZXZlbnRzIHBs
YW5uaW5nIHRvIGludm9rZSB0aGUgbGlzdGVuZXIgYXQgJ2luZGV4JyB0aGF0Ci0gICAgLy8gdGhl
eSBoYXZlIG9uZSBsZXNzIGxpc3RlbmVyIHRvIGludm9rZS4KLSAgICBpZiAoZC0+ZmlyaW5nRXZl
bnRJdGVyYXRvcnMpIHsKLSAgICAgICAgZm9yIChhdXRvJiBmaXJpbmdFdmVudEl0ZXJhdG9yIDog
KmQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzKSB7Ci0gICAgICAgICAgICBmaXJpbmdFdmVudEl0ZXJh
dG9yLml0ZXJhdG9yID0gMDsKLSAgICAgICAgICAgIGZpcmluZ0V2ZW50SXRlcmF0b3Iuc2l6ZSA9
IDA7Ci0gICAgICAgIH0KLSAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50VGFyZ2V0LmgKaW5kZXggNDM5ODJhNjUzOGFiOTA1YmJmODZjODhhMTJlMTRkNTdj
MTAzY2VkNi4uNzg2YWNiNzNjNGE2OGM4ZGM4NjA4OWViZDk0OWI0ZjM3MThhZTczYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50VGFyZ2V0LmgKQEAgLTk3LDcgKzk3LDcgQEAgcHVibGljOgogICAgIH5FdmVu
dFRhcmdldERhdGEoKTsKIAogICAgIEV2ZW50TGlzdGVuZXJNYXAgZXZlbnRMaXN0ZW5lck1hcDsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlyaW5nRXZlbnRJdGVyYXRvclZlY3Rvcj4gZmlyaW5nRXZl
bnRJdGVyYXRvcnM7CisgICAgdW5zaWduZWQgaXNGaXJpbmdFdmVudExpc3RlbmVycyB7IDAgfTsK
IH07CiAKIGVudW0gRXZlbnRUYXJnZXRJbnRlcmZhY2UgewpAQCAtMTgyLDcgKzE4Miw3IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgPSAwOwogICAgIAotICAgIHZvaWQgZmlyZUV2ZW50
TGlzdGVuZXJzKEV2ZW50JiwgRXZlbnRUYXJnZXREYXRhKiwgRXZlbnRMaXN0ZW5lclZlY3RvciYp
OworICAgIHZvaWQgZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50JiwgRXZlbnRMaXN0ZW5lclZlY3Rv
cik7CiAKICAgICBmcmllbmQgY2xhc3MgRXZlbnRMaXN0ZW5lckl0ZXJhdG9yOwogfTsKQEAgLTIw
Nyw3ICsyMDcsNyBAQCBpbmxpbmUgYm9vbCBFdmVudFRhcmdldDo6aXNGaXJpbmdFdmVudExpc3Rl
bmVycygpCiAgICAgRXZlbnRUYXJnZXREYXRhKiBkID0gZXZlbnRUYXJnZXREYXRhKCk7CiAgICAg
aWYgKCFkKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGQtPmZpcmluZ0V2ZW50
SXRlcmF0b3JzICYmICFkLT5maXJpbmdFdmVudEl0ZXJhdG9ycy0+aXNFbXB0eSgpOworICAgIHJl
dHVybiBkLT5pc0ZpcmluZ0V2ZW50TGlzdGVuZXJzOwogfQogCiBpbmxpbmUgYm9vbCBFdmVudFRh
cmdldDo6aGFzRXZlbnRMaXN0ZW5lcnMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9S
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDNhZGFjYTM3ODc1MWIyYTYwNTVkNjgzZjdkN2FhMjkwZDUxNThiOWYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JlZ2lz
dGVyZWRFdmVudExpc3RlbmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqIENv
cHlyaWdodCAoQykgMjAwMSBUb2JpYXMgQW50b24gKGFudG9uQHN0dWQuZmJpLmZoLWRhcm1zdGFk
dC5kZSkKLSAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdt
YWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5oIgotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JlZ2lz
dGVyZWRFdmVudExpc3RlbmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmVnaXN0ZXJlZEV2ZW50
TGlzdGVuZXIuaAppbmRleCBkNTVkOWUyYWM5YWEyMWNjZTYzZjNkNjgxOTg5MjBjODRiNWU0Mzhj
Li40MWVhNjJhMjBiMmNhZmM1MjUzMWE4Y2MzNzU3MzMzMGRmOTVlOWY5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaApAQCAtMjksNDcgKzI5LDUwIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIFJlZ2lzdGVyZWRFdmVudExpc3Rl
bmVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0cnVjdCBPcHRpb25zIHsKLSAgICAgICAgICAg
IE9wdGlvbnMoYm9vbCBjYXB0dXJlID0gZmFsc2UsIGJvb2wgcGFzc2l2ZSA9IGZhbHNlLCBib29s
IG9uY2UgPSBmYWxzZSkKLSAgICAgICAgICAgICAgICA6IGNhcHR1cmUoY2FwdHVyZSkKLSAgICAg
ICAgICAgICAgICAsIHBhc3NpdmUocGFzc2l2ZSkKLSAgICAgICAgICAgICAgICAsIG9uY2Uob25j
ZSkKLSAgICAgICAgICAgIHsgfQorLy8gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25j
ZXB0LWV2ZW50LWxpc3RlbmVyCitjbGFzcyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciA6IHB1Ymxp
YyBSZWZDb3VudGVkPFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyPiB7CitwdWJsaWM6CisgICAgc3Ry
dWN0IE9wdGlvbnMgeworICAgICAgICBPcHRpb25zKGJvb2wgY2FwdHVyZSA9IGZhbHNlLCBib29s
IHBhc3NpdmUgPSBmYWxzZSwgYm9vbCBvbmNlID0gZmFsc2UpCisgICAgICAgICAgICA6IGNhcHR1
cmUoY2FwdHVyZSkKKyAgICAgICAgICAgICwgcGFzc2l2ZShwYXNzaXZlKQorICAgICAgICAgICAg
LCBvbmNlKG9uY2UpCisgICAgICAgIHsgfQogCi0gICAgICAgICAgICBib29sIGNhcHR1cmU7Ci0g
ICAgICAgICAgICBib29sIHBhc3NpdmU7Ci0gICAgICAgICAgICBib29sIG9uY2U7Ci0gICAgICAg
IH07CisgICAgICAgIGJvb2wgY2FwdHVyZTsKKyAgICAgICAgYm9vbCBwYXNzaXZlOworICAgICAg
ICBib29sIG9uY2U7CisgICAgfTsKKworICAgIHN0YXRpYyBSZWY8UmVnaXN0ZXJlZEV2ZW50TGlz
dGVuZXI+IGNyZWF0ZShSZWY8RXZlbnRMaXN0ZW5lcj4mJiBsaXN0ZW5lciwgY29uc3QgT3B0aW9u
cyYgb3B0aW9ucykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlZ2lzdGVy
ZWRFdmVudExpc3RlbmVyKFdURk1vdmUobGlzdGVuZXIpLCBvcHRpb25zKSk7CisgICAgfQogCi0g
ICAgICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyKFJlZjxFdmVudExpc3RlbmVyPiYmIGxpc3Rl
bmVyLCBjb25zdCBPcHRpb25zJiBvcHRpb25zKQotICAgICAgICAgICAgOiBsaXN0ZW5lcihXVEZN
b3ZlKGxpc3RlbmVyKSkKLSAgICAgICAgICAgICwgdXNlQ2FwdHVyZShvcHRpb25zLmNhcHR1cmUp
Ci0gICAgICAgICAgICAsIGlzUGFzc2l2ZShvcHRpb25zLnBhc3NpdmUpCi0gICAgICAgICAgICAs
IGlzT25jZShvcHRpb25zLm9uY2UpCi0gICAgICAgIHsKLSAgICAgICAgfQorICAgIEV2ZW50TGlz
dGVuZXImIGxpc3RlbmVyKCkgY29uc3QgeyBBU1NFUlQoIW1fd2FzUmVtb3ZlZCk7IHJldHVybiBj
b25zdF9jYXN0PEV2ZW50TGlzdGVuZXImPihtX2xpc3RlbmVyLmdldCgpKTsgfQorICAgIGJvb2wg
dXNlQ2FwdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlQ2FwdHVyZTsgfQorICAgIGJvb2wgaXNQ
YXNzaXZlKCkgY29uc3QgeyByZXR1cm4gbV9pc1Bhc3NpdmU7IH0KKyAgICBib29sIGlzT25jZSgp
IGNvbnN0IHsgcmV0dXJuIG1faXNPbmNlOyB9CisgICAgYm9vbCB3YXNSZW1vdmVkKCkgY29uc3Qg
eyByZXR1cm4gbV93YXNSZW1vdmVkOyB9CiAKLSAgICAgICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXIoUmVmPEV2ZW50TGlzdGVuZXI+JiYgbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKLSAgICAg
ICAgICAgIDogbGlzdGVuZXIoV1RGTW92ZShsaXN0ZW5lcikpCi0gICAgICAgICAgICAsIHVzZUNh
cHR1cmUodXNlQ2FwdHVyZSkKLSAgICAgICAgewotICAgICAgICB9CisgICAgdm9pZCBtYXJrQXNS
ZW1vdmVkKCkgeyBtX3dhc1JlbW92ZWQgPSB0cnVlOyB9CiAKLSAgICAgICAgUmVmUHRyPEV2ZW50
TGlzdGVuZXI+IGxpc3RlbmVyOwotICAgICAgICBib29sIHVzZUNhcHR1cmUgeyBmYWxzZSB9Owot
ICAgICAgICBib29sIGlzUGFzc2l2ZSB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wgaXNPbmNlIHsg
ZmFsc2UgfTsKLSAgICB9OwotICAgIAotICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIGEsIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
JiBiKQorcHJpdmF0ZToKKyAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcihSZWY8RXZlbnRMaXN0
ZW5lcj4mJiBsaXN0ZW5lciwgY29uc3QgT3B0aW9ucyYgb3B0aW9ucykKKyAgICAgICAgOiBtX2xp
c3RlbmVyKFdURk1vdmUobGlzdGVuZXIpKQorICAgICAgICAsIG1fdXNlQ2FwdHVyZShvcHRpb25z
LmNhcHR1cmUpCisgICAgICAgICwgbV9pc1Bhc3NpdmUob3B0aW9ucy5wYXNzaXZlKQorICAgICAg
ICAsIG1faXNPbmNlKG9wdGlvbnMub25jZSkKICAgICB7Ci0gICAgICAgIC8vIE90aGVyIGRhdGEg
bWVtYmVycyBhcmUgcHVycG9zZWZ1bGx5IG5vdCBjaGVja2VkLiBUaGUgRE9NIHNwZWNpZmljYXRp
b24gc2F5cyB0aGF0IHVwb24gYWRkaW5nIC8gcmVtb3ZpbmcKLSAgICAgICAgLy8gRXZlbnRMaXN0
ZW5lcnMsIHdlIHNob3VsZCBvbmx5IGNoZWNrIHRoZSB0eXBlIGFuZCB0aGUgY2FwdHVyZSBmbGFn
LgotICAgICAgICByZXR1cm4gKmEubGlzdGVuZXIgPT0gKmIubGlzdGVuZXIgJiYgYS51c2VDYXB0
dXJlID09IGIudXNlQ2FwdHVyZTsKICAgICB9CiAKKyAgICBSZWY8RXZlbnRMaXN0ZW5lcj4gbV9s
aXN0ZW5lcjsKKyAgICBib29sIG1fdXNlQ2FwdHVyZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lz
UGFzc2l2ZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzT25jZSB7IGZhbHNlIH07CisgICAgYm9v
bCBtX3dhc1JlbW92ZWQgeyBmYWxzZSB9OworfTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggZDk0ZDg0YmNlNTljNzRmZGMw
OWU0NTYzMDdjN2IyZjA5MDgxNDRiMC4uNjQ0M2I2NTY5ZWI3YmZjZjQ3NzkzM2E3YmZkODhlMGEy
ZWYzMjNmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuY3BwCkBAIC04MjIsOCArODIyLDggQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZl
bnRMaXN0ZW5lcnNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG4KICAgICBz
aXplX3QgZXZlbnRJbmZvcm1hdGlvbkxlbmd0aCA9IGV2ZW50SW5mb3JtYXRpb24uc2l6ZSgpOwog
ICAgIGZvciAoYXV0byYgaW5mbyA6IGV2ZW50SW5mb3JtYXRpb24pIHsKICAgICAgICAgZm9yIChh
dXRvJiBsaXN0ZW5lciA6IGluZm8uZXZlbnRMaXN0ZW5lclZlY3RvcikgewotICAgICAgICAgICAg
aWYgKGxpc3RlbmVyLnVzZUNhcHR1cmUpCi0gICAgICAgICAgICAgICAgbGlzdGVuZXJzQXJyYXkt
PmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGxpc3RlbmVyLCBpbmZvLmV2ZW50
VHlwZSwgaW5mby5ub2RlLCBvYmplY3RHcm91cCkpOworICAgICAgICAgICAgaWYgKGxpc3RlbmVy
LT51c2VDYXB0dXJlKCkpCisgICAgICAgICAgICAgICAgbGlzdGVuZXJzQXJyYXktPmFkZEl0ZW0o
YnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKCpsaXN0ZW5lciwgaW5mby5ldmVudFR5cGUsIGlu
Zm8ubm9kZSwgb2JqZWN0R3JvdXApKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtODMxLDggKzgz
MSw4IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBuCiAgICAgZm9yIChzaXplX3QgaSA9IGV2ZW50
SW5mb3JtYXRpb25MZW5ndGg7IGk7IC0taSkgewogICAgICAgICBjb25zdCBFdmVudExpc3RlbmVy
SW5mbyYgaW5mbyA9IGV2ZW50SW5mb3JtYXRpb25baSAtIDFdOwogICAgICAgICBmb3IgKGF1dG8m
IGxpc3RlbmVyIDogaW5mby5ldmVudExpc3RlbmVyVmVjdG9yKSB7Ci0gICAgICAgICAgICBpZiAo
IWxpc3RlbmVyLnVzZUNhcHR1cmUpCi0gICAgICAgICAgICAgICAgbGlzdGVuZXJzQXJyYXktPmFk
ZEl0ZW0oYnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGxpc3RlbmVyLCBpbmZvLmV2ZW50VHlw
ZSwgaW5mby5ub2RlLCBvYmplY3RHcm91cCkpOworICAgICAgICAgICAgaWYgKCFsaXN0ZW5lci0+
dXNlQ2FwdHVyZSgpKQorICAgICAgICAgICAgICAgIGxpc3RlbmVyc0FycmF5LT5hZGRJdGVtKGJ1
aWxkT2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcigqbGlzdGVuZXIsIGluZm8uZXZlbnRUeXBlLCBpbmZv
Lm5vZGUsIG9iamVjdEdyb3VwKSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC04NTgsMTMgKzg1
OCwxMyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVycyhOb2RlKiBu
b2RlLCBWZWN0b3I8RXZlbnRMaXN0ZW5lckluZm8+JgogICAgICAgICBmb3IgKGF1dG8mIHR5cGUg
OiBkLT5ldmVudExpc3RlbmVyTWFwLmV2ZW50VHlwZXMoKSkgewogICAgICAgICAgICAgY29uc3Qg
RXZlbnRMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gYW5jZXN0b3ItPmdldEV2ZW50TGlzdGVu
ZXJzKHR5cGUpOwogICAgICAgICAgICAgRXZlbnRMaXN0ZW5lclZlY3RvciBmaWx0ZXJlZExpc3Rl
bmVyczsKLSAgICAgICAgICAgIGZpbHRlcmVkTGlzdGVuZXJzLnJlc2VydmVDYXBhY2l0eShsaXN0
ZW5lcnMuc2l6ZSgpKTsKKyAgICAgICAgICAgIGZpbHRlcmVkTGlzdGVuZXJzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobGlzdGVuZXJzLnNpemUoKSk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGxp
c3RlbmVyIDogbGlzdGVuZXJzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxpc3RlbmVyLmxpc3Rl
bmVyLT50eXBlKCkgPT0gRXZlbnRMaXN0ZW5lcjo6SlNFdmVudExpc3RlbmVyVHlwZSkKLSAgICAg
ICAgICAgICAgICAgICAgZmlsdGVyZWRMaXN0ZW5lcnMuYXBwZW5kKGxpc3RlbmVyKTsKKyAgICAg
ICAgICAgICAgICBpZiAobGlzdGVuZXItPmxpc3RlbmVyKCkudHlwZSgpID09IEV2ZW50TGlzdGVu
ZXI6OkpTRXZlbnRMaXN0ZW5lclR5cGUpCisgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkTGlz
dGVuZXJzLnVuY2hlY2tlZEFwcGVuZChsaXN0ZW5lcik7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBpZiAoIWZpbHRlcmVkTGlzdGVuZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBl
dmVudEluZm9ybWF0aW9uLmFwcGVuZChFdmVudExpc3RlbmVySW5mbyhhbmNlc3RvciwgdHlwZSwg
ZmlsdGVyZWRMaXN0ZW5lcnMpKTsKKyAgICAgICAgICAgICAgICBldmVudEluZm9ybWF0aW9uLmFw
cGVuZChFdmVudExpc3RlbmVySW5mbyhhbmNlc3RvciwgdHlwZSwgV1RGTW92ZShmaWx0ZXJlZExp
c3RlbmVycykpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE0NzcsNyArMTQ3Nyw3IEBAIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006
Ok5vZGU+PiBJbnNwZWN0b3JET01BCiAKIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2
ZW50TGlzdGVuZXI+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckV2ZW50TGlzdGVu
ZXIoY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIHJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
LCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgTm9kZSogbm9kZSwgY29uc3QgU3RyaW5n
KiBvYmplY3RHcm91cElkKQogewotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3Rl
bmVyID0gcmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIubGlzdGVuZXI7CisgICAgUmVmPEV2ZW50TGlz
dGVuZXI+IGV2ZW50TGlzdGVuZXIgPSByZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5saXN0ZW5lcigp
OwogCiAgICAgSlNDOjpFeGVjU3RhdGUqIHN0YXRlID0gbnVsbHB0cjsKICAgICBKU0M6OkpTT2Jq
ZWN0KiBoYW5kbGVyID0gbnVsbHB0cjsKQEAgLTE0ODYsNyArMTQ4Niw3IEBAIFJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+IEluc3BlY3RvckRPTUFnZW50OjpidWls
ZE9iamVjdEZvckV2CiAgICAgaW50IGNvbHVtbk51bWJlciA9IDA7CiAgICAgU3RyaW5nIHNjcmlw
dElEOwogICAgIFN0cmluZyBzb3VyY2VOYW1lOwotICAgIGlmIChhdXRvIHNjcmlwdExpc3RlbmVy
ID0gSlNFdmVudExpc3RlbmVyOjpjYXN0KGV2ZW50TGlzdGVuZXIuZ2V0KCkpKSB7CisgICAgaWYg
KGF1dG8gc2NyaXB0TGlzdGVuZXIgPSBKU0V2ZW50TGlzdGVuZXI6OmNhc3QoZXZlbnRMaXN0ZW5l
ci5wdHIoKSkpIHsKICAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhzY3JpcHRMaXN0ZW5l
ci0+aXNvbGF0ZWRXb3JsZCgpLnZtKCkpOwogICAgICAgICBzdGF0ZSA9IGV4ZWNTdGF0ZUZyb21O
b2RlKHNjcmlwdExpc3RlbmVyLT5pc29sYXRlZFdvcmxkKCksICZub2RlLT5kb2N1bWVudCgpKTsK
ICAgICAgICAgaGFuZGxlciA9IHNjcmlwdExpc3RlbmVyLT5qc0Z1bmN0aW9uKCZub2RlLT5kb2N1
bWVudCgpKTsKQEAgLTE1MDcsNyArMTUwNyw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006OkV2ZW50TGlzdGVuZXI+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckV2CiAK
ICAgICBhdXRvIHZhbHVlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVy
OjpjcmVhdGUoKQogICAgICAgICAuc2V0VHlwZShldmVudFR5cGUpCi0gICAgICAgIC5zZXRVc2VD
YXB0dXJlKHJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLnVzZUNhcHR1cmUpCisgICAgICAgIC5zZXRV
c2VDYXB0dXJlKHJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLnVzZUNhcHR1cmUoKSkKICAgICAgICAg
LnNldElzQXR0cmlidXRlKGV2ZW50TGlzdGVuZXItPmlzQXR0cmlidXRlKCkpCiAgICAgICAgIC5z
ZXROb2RlSWQocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2RlKSkKICAgICAgICAgLnNldEhhbmRs
ZXJCb2R5KGJvZHkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5oCmluZGV4IDM3NDRjYjFhY2I0NTBmN2QwYTNjM2E1NDBiMDBiMzZkOTg2ZDYxMGMuLmNjOTcx
NWMzN2JiZTUxM2Y1YTQwN2ZkNDk2OTQyYjdmZWRjODFkODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC04MCwxMCArODAsMTAgQEAgdHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiB0eXBlZGVmIGludCBCYWNrZW5kTm9kZUlkOwogCiBzdHJ1
Y3QgRXZlbnRMaXN0ZW5lckluZm8gewotICAgIEV2ZW50TGlzdGVuZXJJbmZvKE5vZGUqIG5vZGUs
IGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBjb25zdCBFdmVudExpc3RlbmVyVmVjdG9y
JiBldmVudExpc3RlbmVyVmVjdG9yKQorICAgIEV2ZW50TGlzdGVuZXJJbmZvKE5vZGUqIG5vZGUs
IGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyVmVjdG9yJiYgZXZl
bnRMaXN0ZW5lclZlY3RvcikKICAgICAgICAgOiBub2RlKG5vZGUpCiAgICAgICAgICwgZXZlbnRU
eXBlKGV2ZW50VHlwZSkKLSAgICAgICAgLCBldmVudExpc3RlbmVyVmVjdG9yKGV2ZW50TGlzdGVu
ZXJWZWN0b3IpCisgICAgICAgICwgZXZlbnRMaXN0ZW5lclZlY3RvcihXVEZNb3ZlKGV2ZW50TGlz
dGVuZXJWZWN0b3IpKQogICAgIHsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcApp
bmRleCBhMWQ3N2U2MzM3MmEzMDM2MzY1Y2U1ZDdkZmRiZmJkMjY1Nzk0ZjdmLi5mYjc5YmQ5ZTI0
YWM1ZGRhODBiYWFiM2UwYzg3OWYwNjEyYmJlMjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQu
Y3BwCkBAIC01ODQsMTEgKzU4NCw4IEBAIHN0YXRpYyBib29sIGhhc0xvYWRMaXN0ZW5lcihFbGVt
ZW50KiBlbGVtZW50KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGZvciAoZWxlbWVudCA9
IGVsZW1lbnQtPnBhcmVudE9yU2hhZG93SG9zdEVsZW1lbnQoKTsgZWxlbWVudDsgZWxlbWVudCA9
IGVsZW1lbnQtPnBhcmVudE9yU2hhZG93SG9zdEVsZW1lbnQoKSkgewotICAgICAgICBjb25zdCBF
dmVudExpc3RlbmVyVmVjdG9yJiBlbnRyeSA9IGVsZW1lbnQtPmdldEV2ZW50TGlzdGVuZXJzKGV2
ZW50TmFtZXMoKS5sb2FkRXZlbnQpOwotICAgICAgICBmb3IgKGF1dG8mIGxpc3RlbmVyIDogZW50
cnkpIHsKLSAgICAgICAgICAgIGlmIChsaXN0ZW5lci51c2VDYXB0dXJlKQotICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNDYXB0
dXJpbmdFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkubG9hZEV2ZW50KSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285972</attachid>
            <date>2016-08-12 16:25:22 -0700</date>
            <delta_ts>2016-08-14 15:57:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160828-20160812162343.patch</filename>
            <type>text/plain</type>
            <size>43624</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MzgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmQ0MzAwYTQwN2UxNGYx
MTExMTY1NzIyYjY1ODk0ZDI1YjFhY2YwZC4uNzE3ODdhMmY4YmVjZjgzOTU3ZDMxYzU5MzdhNDk4
YmUwZGM1OWY4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBACisyMDE2LTA4LTEyICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQWxpZ24gdGhlIGV2ZW50IGxp
c3RlbmVyIGZpcmluZyBjb2RlIHdpdGggdGhlIGxhdGVzdCBET00gU3BlY2lmaWNhdGlvbiBhbmQg
c2ltcGxpZnkgaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MDgyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFsaWduIHRoZSBldmVudCBsaXN0ZW5lciBmaXJpbmcgY29kZSB3aXRoIHRoZSBsYXRlc3Qg
RE9NIHNwZWNpZmljYXRpb246CisgICAgICAgIC0gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3Jn
LyNjb25jZXB0LWV2ZW50LWxpc3RlbmVyLWludm9rZQorICAgICAgICAtIGh0dHBzOi8vZG9tLnNw
ZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ldmVudC1saXN0ZW5lci1pbm5lci1pbnZva2UKKyAgICAg
ICAgLSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZXZlbnQtbGlzdGVuZXIK
KworICAgICAgICBUaGUgZm9sbG93aW5nIGNoYW5nZXMgd2VyZSBtYWRlOgorICAgICAgICAxLiBS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciAoZXF1aXZhbGVudCB0byAiZXZlbnQgbGlzdGVuZXIiIGlu
IHRoZSBzcGVjKQorICAgICAgICAgICBpcyBub3cgUmVmQ291bnRlZAorICAgICAgICAyLiBSZWdp
c3RlcmVkRXZlbnRMaXN0ZW5lciBub3cgaGFzIGEgd2FzUmVtb3ZlZCBmbGFnIGFzIGluIHNwZWNp
ZmljYXRpb24uCisgICAgICAgIDMuIGZpcmVFdmVudExpc3RlbmVycygpIGlzIG5vdyBpdGVyYXRp
bmcgb3ZlciBhIGNvcHkgb2YgdGhlIGV2ZW50CisgICAgICAgICAgIGxpc3RlbmVycywgYXMgaW4g
dGhlIHNwZWNpZmljYXRpb24uIFdlIHJlbHkgb24gdGhlIHdhc1JlbW92ZWQgcmVtb3ZlZAorICAg
ICAgICAgICBmbGFnIHRvIGF2b2lkIGV4ZWN1dGluZyBldmVudCBsaXN0ZW5lcnMgdGhhdCB3ZXJl
IHJlbW92ZWQgd2hpbGUgd2UKKyAgICAgICAgICAgaXRlcmF0ZS4KKworICAgICAgICBQcmV2aW91
c2x5LCB0aGUgY29kZSB3YXMgbW9kaWZ5aW5nIHRoZSBldmVudCBsaXN0ZW5lcnMgdmVjdG9yIHdl
IHdlcmUKKyAgICAgICAgaXRlcmF0aW5nIG9uLiBEb2luZyBzbyBzYWZlbHkgbGVhZCB0byBjb21w
bGljYXRlZCBhbmQgZXJyb3IgcHJvbmUgY29kZS4KKyAgICAgICAgVGhlIG5ldyBjb2RlIGlzIG11
Y2ggc2ltcGxlciBhbmQgZWFzaWVyIHRvIHJlYXNvbiBhYm91dC4KKworICAgICAgICBUaGlzIGNo
YW5nZSBzZWVtcyB0byBiZSBwZXJmLW5ldXRyYWwgb24gU3BlZWRvbWV0ZXIuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLCBubyB3ZWItZXhwb3NlZCBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDb21tYW5kTGluZUFQSUhvc3RDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SlNMaXN0ZW5lckZ1bmN0aW9ucyk6CisgICAgICAg
ICogZG9tL0RPTUFsbEluT25lLmNwcDoKKyAgICAgICAgKiBkb20vRXZlbnRMaXN0ZW5lck1hcC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3RlbmVyTWFwOjphc3NlcnROb0FjdGl2ZUl0
ZXJhdG9ycyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3RlbmVyTWFwOjpjb250YWluc0Nh
cHR1cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3RlbmVyTWFwOjpjb250YWluc0Fj
dGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kTGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRMaXN0ZW5lck1hcDo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OnJlbW92ZUxpc3Rl
bmVyRnJvbVZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3RlbmVyTWFwOjpyZW1v
dmUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6ZmluZCk6CisgICAgICAg
IChXZWJDb3JlOjpyZW1vdmVGaXJzdExpc3RlbmVyQ3JlYXRlZEZyb21NYXJrdXApOgorICAgICAg
ICAoV2ViQ29yZTo6Y29weUxpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJnZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6Y29weUV2ZW50TGlzdGVuZXJzTm90
Q3JlYXRlZEZyb21NYXJrdXBUb1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3Rl
bmVySXRlcmF0b3I6Om5leHRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3Rl
bmVyTWFwOjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgICogZG9tL0V2ZW50TGlzdGVuZXJNYXAu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXJNYXA6OmNvbnRhaW5zKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXJNYXA6OmFzc2VydE5vQWN0aXZlSXRlcmF0b3JzKToK
KyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRU
YXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJn
ZXQ6OmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlyaW5n
RXZlbnRMaXN0ZW5lcnNTY29wZTo6RmlyaW5nRXZlbnRMaXN0ZW5lcnNTY29wZSk6CisgICAgICAg
IChXZWJDb3JlOjpGaXJpbmdFdmVudExpc3RlbmVyc1Njb3BlOjp+RmlyaW5nRXZlbnRMaXN0ZW5l
cnNTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldDo6ZmlyZUV2ZW50TGlzdGVu
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjpzZXRBdHRyaWJ1dGVFdmVudExp
c3RlbmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjpoYXNBY3Rp
dmVFdmVudExpc3RlbmVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdl
dDo6ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50VGFyZ2V0OjpnZXRFdmVudExpc3RlbmVycyk6IERlbGV0ZWQuCisgICAgICAgICogZG9t
L0V2ZW50VGFyZ2V0Lmg6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldDo6aXNGaXJpbmdF
dmVudExpc3RlbmVycyk6CisgICAgICAgICogZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBkb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOjpPcHRpb25zOjpPcHRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI6Omxpc3RlbmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOjp1c2VDYXB0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOjppc1Bhc3NpdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI6OmlzT25jZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjo6d2FzUmVtb3ZlZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjo6bWFya0FzUmVtb3ZlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjo6UmVnaXN0ZXJlZEV2ZW50TGlz
dGVuZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JF
dmVudExpc3RlbmVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXJJbmZvOjpFdmVudExpc3RlbmVySW5mbyk6
CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFzTG9h
ZExpc3RlbmVyKToKKwogMjAxNi0wOC0xMSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNl
bkB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCBVUkxQYXJzZXIgc3R1YgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAppbmRleCAzZGVhMDQ5ZDY5MWQ5ZGE3YWYxMmY2M2FlYTNlYzA1ZGNjMzVhMDkxLi4zNWM3
OGZlNWQ0N2U3MDgzYjRlM2UwM2IxYmI5YWZjNTJkOTlkYTAxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dApAQCAtMTUwMyw3ICsxNTAzLDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGRvbS9RdWFs
aWZpZWROYW1lLmNwcAogICAgIGRvbS9SYWRpb0J1dHRvbkdyb3Vwcy5jcHAKICAgICBkb20vUmFu
Z2UuY3BwCi0gICAgZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNwcAogICAgIGRvbS9TY29w
ZWRFdmVudFF1ZXVlLmNwcAogICAgIGRvbS9TY3JpcHRFbGVtZW50LmNwcAogICAgIGRvbS9TY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDc3NDcwMDgzNjdmZTY1MGRiODZkZTRkMDkxOGNh
MTQ0OWM4YTk3YzYuLjUzMTIwMjg3OWI1OWVmZjJkZGZiZTM2MGI3ZGRlYTRkNjkzNzY5ODUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTMwNjUsNyArMzA2NSw2IEBACiAJCTg1MDMxQjQ4MEE0NEVGQzcwMEY5OTJFMCAvKiBNb3Vz
ZVJlbGF0ZWRFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODUwMzFCMzIwQTQ0RUZDNzAwRjk5MkUwIC8qIE1vdXNlUmVsYXRlZEV2ZW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODUwMzFCNDkw
QTQ0RUZDNzAwRjk5MkUwIC8qIE11dGF0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODUwMzFCMzMwQTQ0RUZDNzAwRjk5MkUwIC8qIE11
dGF0aW9uRXZlbnQuY3BwICovOyB9OwogCQk4NTAzMUI0QTBBNDRFRkM3MDBGOTkyRTAgLyogTXV0
YXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODUwMzFCMzQwQTQ0RUZDNzAwRjk5MkUwIC8qIE11dGF0aW9uRXZlbnQuaCAqLzsgfTsKLQkJ
ODUwMzFCNEIwQTQ0RUZDNzAwRjk5MkUwIC8qIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1MDMxQjM1MEE0
NEVGQzcwMEY5OTJFMCAvKiBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5jcHAgKi87IH07CiAJCTg1
MDMxQjRDMEE0NEVGQzcwMEY5OTJFMCAvKiBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODUwMzFCMzYwQTQ0RUZD
NzAwRjk5MkUwIC8qIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODUwMzFCNEQwQTQ0RUZDNzAwRjk5MkUw
IC8qIFVJRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODUwMzFCMzcwQTQ0RUZDNzAwRjk5MkUwIC8qIFVJRXZlbnQuY3BwICovOyB9OwogCQk4
NTAzMUI0RTBBNDRFRkM3MDBGOTkyRTAgLyogVUlFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODUwMzFCMzgwQTQ0RUZDNzAwRjk5MkUwIC8qIFVJ
RXZlbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMTA1MDUsNyArMTA1MDQsNiBAQAogCQk4NTAzMUIzMjBBNDRFRkM3MDBGOTkyRTAgLyogTW91
c2VSZWxhdGVkRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vdXNl
UmVsYXRlZEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg1MDMxQjMzMEE0
NEVGQzcwMEY5OTJFMCAvKiBNdXRhdGlvbkV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBNdXRhdGlvbkV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJODUwMzFCMzQwQTQ0RUZDNzAwRjk5MkUwIC8qIE11dGF0aW9uRXZlbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE11dGF0aW9uRXZlbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODUwMzFCMzUwQTQ0RUZDNzAwRjk5MkUwIC8qIFJlZ2lzdGVy
ZWRFdmVudExpc3RlbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTg1MDMxQjM2MEE0NEVGQzcwMEY5OTJFMCAvKiBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODUwMzFCMzcwQTQ0RUZDNzAwRjk5
MkUwIC8qIFVJRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFVJRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NTAzMUIzODBBNDRF
RkM3MDBGOTkyRTAgLyogVUlFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVUlFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTE1MTIsOCArMTE1
MTAsOCBAQAogCQk5QkQ0RTkxODFDNDYyQ0ZDMDA1MDY1QkMgLyogQ3VzdG9tRWxlbWVudHNSZWdp
c3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDdXN0b21FbGVt
ZW50c1JlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJENEU5MTkx
QzQ2MkNGQzAwNTA2NUJDIC8qIEN1c3RvbUVsZW1lbnRzUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ3VzdG9tRWxlbWVudHNSZWdpc3RyeS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5QkQ4QTk1OTE4QkVGQzc2MDA5ODdFOUEgLyogQ29sbGVjdGlv
bkluZGV4Q2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29s
bGVjdGlvbkluZGV4Q2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5QkU2
NzEwOTFENUFFQjA0MDAzNDU1MTQgLyogSlNDdXN0b21FbGVtZW50c1JlZ2lzdHJ5LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTQ3VzdG9tRWxlbWVudHNSZWdpc3Ry
eS5jcHA7IHBhdGggPSAiSlNDdXN0b21FbGVtZW50c1JlZ2lzdHJ5LmNwcCI7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTlCRTY3MTBBMUQ1QUVCMDQwMDM0NTUxNCAvKiBKU0N1c3RvbUVs
ZW1lbnRzUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNDdXN0
b21FbGVtZW50c1JlZ2lzdHJ5Lmg7IHBhdGggPSAiSlNDdXN0b21FbGVtZW50c1JlZ2lzdHJ5Lmgi
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QkU2NzEwOTFENUFFQjA0MDAzNDU1MTQg
LyogSlNDdXN0b21FbGVtZW50c1JlZ2lzdHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTQ3VzdG9tRWxlbWVudHNSZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTlCRTY3MTBBMUQ1QUVCMDQwMDM0NTUxNCAvKiBKU0N1c3RvbUVsZW1l
bnRzUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDdXN0b21F
bGVtZW50c1JlZ2lzdHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCRjlBODdF
MTY0OEREMkYwMDFDNkIyMyAvKiBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTEZvcm1Db250cm9sc0NvbGxl
Y3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkY5QTg3RjE2NDhERDJG
MDAxQzZCMjMgLyogSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlENjM4MDBGMUFGMTZFMTYwMDMxQTE1QyAvKiBTdHls
ZVNlbGZBbGlnbm1lbnREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0
eWxlU2VsZkFsaWdubWVudERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0
MTkyLDcgKzI0MTkwLDYgQEAKIAkJCQk5MzZERDAzQTA5Q0VBQzI3MDA1NkFFOEMgLyogUmFuZ2Uu
aWRsICovLAogCQkJCTkzRDlENTNCMERBMjdFMTgwMDc3MjE2QyAvKiBSYW5nZUJvdW5kYXJ5UG9p
bnQuaCAqLywKIAkJCQlBODREODI3QjExRDMzM0VEMDA5NzI5OTAgLyogUmF3RGF0YURvY3VtZW50
UGFyc2VyLmggKi8sCi0JCQkJODUwMzFCMzUwQTQ0RUZDNzAwRjk5MkUwIC8qIFJlZ2lzdGVyZWRF
dmVudExpc3RlbmVyLmNwcCAqLywKIAkJCQk4NTAzMUIzNjBBNDRFRkM3MDBGOTkyRTAgLyogUmVn
aXN0ZXJlZEV2ZW50TGlzdGVuZXIuaCAqLywKIAkJCQlBNzZFNUY3RTEzNUUwRENGMDBBNjk4Mzcg
LyogUmVuZGVyZWREb2N1bWVudE1hcmtlci5oICovLAogCQkJCTQ5OThBRUM0MTNGOUQwRUEwMDkw
QjFBQSAvKiBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjay5oICovLApAQCAtMzA4NzUsNyAr
MzA4NzIsNiBAQAogCQkJCTJFQzQxREU0MUMwNDEwQTMwMEQyOTRGRSAvKiBSZWFsdGltZU1lZGlh
U291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ0NUE5
NUExNzVENDE3MTAwQzIxRUM4IC8qIFJlY3RhbmdsZVNoYXBlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDQUI0MTgxMTNFMzU2RTgwMEQ4QUFGMyAvKiBSZWdpb24uY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJODUwMzFCNEIwQTQ0RUZDNzAwRjk5MkUwIC8qIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNERkMzNjA1MThDQTYxQzIwMDI2RTU2RiAvKiBSZW1v
dGVDb21tYW5kTGlzdGVuZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RGQzM2MDcxOENBNjk2
QzAwMjZFNTZGIC8qIFJlbW90ZUNvbW1hbmRMaXN0ZW5lcklPUy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUNEOEFDQTg4MUQyMzdBQTIwMEVDQzU5RSAvKiBSZW1vdGVDb21tYW5kTGlzdGVuZXJNYWMu
bW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9tLmNwcAppbmRleCBhMGNhODNlYzFhOGVkMDM4
OWRmOTA5Y2NhZTJjODg0YmUzMjRlNTFhLi41NzUxOTYyYzBiMmQzMGIzODEwMWVmMjBhZWMxYTA1
NzRjNzI3MmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NvbW1h
bmRMaW5lQVBJSG9zdEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDb21tYW5kTGluZUFQSUhvc3RDdXN0b20uY3BwCkBAIC03Myw3ICs3Myw3IEBAIHN0YXRpYyBK
U0FycmF5KiBnZXRKU0xpc3RlbmVyRnVuY3Rpb25zKEV4ZWNTdGF0ZSYgc3RhdGUsIERvY3VtZW50
KiBkb2N1bWVudCwgY29uCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHNpemVfdCBoYW5k
bGVyc0NvdW50ID0gbGlzdGVuZXJJbmZvLmV2ZW50TGlzdGVuZXJWZWN0b3Iuc2l6ZSgpOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwLCBvdXRwdXRJbmRleCA9IDA7IGkgPCBoYW5kbGVyc0NvdW50OyAr
K2kpIHsKLSAgICAgICAgY29uc3QgSlNFdmVudExpc3RlbmVyKiBqc0xpc3RlbmVyID0gSlNFdmVu
dExpc3RlbmVyOjpjYXN0KGxpc3RlbmVySW5mby5ldmVudExpc3RlbmVyVmVjdG9yW2ldLmxpc3Rl
bmVyLmdldCgpKTsKKyAgICAgICAgY29uc3QgSlNFdmVudExpc3RlbmVyKiBqc0xpc3RlbmVyID0g
SlNFdmVudExpc3RlbmVyOjpjYXN0KCZsaXN0ZW5lckluZm8uZXZlbnRMaXN0ZW5lclZlY3Rvcltp
XS0+bGlzdGVuZXIoKSk7CiAgICAgICAgIGlmICghanNMaXN0ZW5lcikgewogICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTg5LDcgKzg5
LDcgQEAgc3RhdGljIEpTQXJyYXkqIGdldEpTTGlzdGVuZXJGdW5jdGlvbnMoRXhlY1N0YXRlJiBz
dGF0ZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBjb24KIAogICAgICAgICBKU09iamVjdCogbGlzdGVu
ZXJFbnRyeSA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7CiAgICAgICAgIGxpc3RlbmVy
RW50cnktPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJsaXN0
ZW5lciIpLCBmdW5jdGlvbik7Ci0gICAgICAgIGxpc3RlbmVyRW50cnktPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1c2VDYXB0dXJlIiksIGpzQm9vbGVhbihs
aXN0ZW5lckluZm8uZXZlbnRMaXN0ZW5lclZlY3RvcltpXS51c2VDYXB0dXJlKSk7CisgICAgICAg
IGxpc3RlbmVyRW50cnktPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJ1c2VDYXB0dXJlIiksIGpzQm9vbGVhbihsaXN0ZW5lckluZm8uZXZlbnRMaXN0ZW5lclZl
Y3RvcltpXS0+dXNlQ2FwdHVyZSgpKSk7CiAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgo
JnN0YXRlLCBvdXRwdXRJbmRleCsrLCBKU1ZhbHVlKGxpc3RlbmVyRW50cnkpKTsKICAgICB9CiAg
ICAgcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01BbGxJ
bk9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCmluZGV4IGQzZDVl
YTM4YmIwYzlkN2UyZmU3MDM1ZTBjMWYxNTYyM2U4NjU2ZDYuLmMwYmY0ZmMwMjNhOGYyZDViZjk3
NGVlN2FiNjRkOTgxY2Y5OGY3ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01B
bGxJbk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcApAQCAt
MTI4LDcgKzEyOCw2IEBACiAvLyAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5jcHAiCiAjaW5jbHVk
ZSAiUmFkaW9CdXR0b25Hcm91cHMuY3BwIgogI2luY2x1ZGUgIlJhbmdlLmNwcCIKLSNpbmNsdWRl
ICJSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5jcHAiCiAjaW5jbHVkZSAiU2NvcGVkRXZlbnRRdWV1
ZS5jcHAiCiAjaW5jbHVkZSAiU2NyaXB0RWxlbWVudC5jcHAiCiAjaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRM
aXN0ZW5lck1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lck1hcC5jcHAK
aW5kZXggN2U3OWFlYmI2ODNmZDk2YjUwNTRlNjE0NTg1MzIyN2Y2NTI5NTUzYi4uM2M5ZjRlZDMw
ZTkxYzdhNGE5ZDAwOWU4NmZiZDlhMDk0MzE3OWRkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dExpc3RlbmVyTWFwLmNwcApAQCAtNDUsNyArNDUsNyBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWZuZGVmIE5ERUJVRwotdm9pZCBFdmVudExpc3RlbmVy
TWFwOjphc3NlcnROb0FjdGl2ZUl0ZXJhdG9ycygpCit2b2lkIEV2ZW50TGlzdGVuZXJNYXA6OmFz
c2VydE5vQWN0aXZlSXRlcmF0b3JzKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIW1fYWN0aXZlSXRl
cmF0b3JDb3VudCk7CiB9CkBAIC01NSwzNyArNTUsMjggQEAgRXZlbnRMaXN0ZW5lck1hcDo6RXZl
bnRMaXN0ZW5lck1hcCgpCiB7CiB9CiAKLWJvb2wgRXZlbnRMaXN0ZW5lck1hcDo6Y29udGFpbnMo
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpIGNvbnN0Ci17Ci0gICAgZm9yIChhdXRvJiBl
bnRyeSA6IG1fZW50cmllcykgewotICAgICAgICBpZiAoZW50cnkuZmlyc3QgPT0gZXZlbnRUeXBl
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQogYm9vbCBFdmVudExpc3RlbmVyTWFwOjpjb250YWluc0NhcHR1cmluZyhjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSkgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9lbnRy
aWVzKSB7Ci0gICAgICAgIGlmIChlbnRyeS5maXJzdCA9PSBldmVudFR5cGUpIHsKLSAgICAgICAg
ICAgIGZvciAoYXV0byYgZXZlbnRMaXN0ZW5lciA6ICplbnRyeS5zZWNvbmQpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoZXZlbnRMaXN0ZW5lci51c2VDYXB0dXJlKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGF1dG8qIGxpc3Rl
bmVycyA9IGZpbmQoZXZlbnRUeXBlKTsKKyAgICBpZiAoIWxpc3RlbmVycykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgZm9yIChhdXRvJiBldmVudExpc3RlbmVyIDogKmxpc3RlbmVycykg
eworICAgICAgICBpZiAoZXZlbnRMaXN0ZW5lci0+dXNlQ2FwdHVyZSgpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBFdmVudExp
c3RlbmVyTWFwOjpjb250YWluc0FjdGl2ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkg
Y29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9lbnRyaWVzKSB7Ci0gICAgICAgIGlm
IChlbnRyeS5maXJzdCA9PSBldmVudFR5cGUpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgZXZl
bnRMaXN0ZW5lciA6ICplbnRyeS5zZWNvbmQpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWV2ZW50
TGlzdGVuZXIuaXNQYXNzaXZlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGF1dG8qIGxpc3RlbmVycyA9IGZpbmQoZXZlbnRU
eXBlKTsKKyAgICBpZiAoIWxpc3RlbmVycykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Zm9yIChhdXRvJiBldmVudExpc3RlbmVyIDogKmxpc3RlbmVycykgeworICAgICAgICBpZiAoIWV2
ZW50TGlzdGVuZXItPmlzUGFzc2l2ZSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTEwOCw0NyArOTksNTEgQEAgVmVjdG9yPEF0b21p
Y1N0cmluZz4gRXZlbnRMaXN0ZW5lck1hcDo6ZXZlbnRUeXBlcygpIGNvbnN0CiAgICAgcmV0dXJu
IHR5cGVzOwogfQogCi1zdGF0aWMgYm9vbCBhZGRMaXN0ZW5lclRvVmVjdG9yKEV2ZW50TGlzdGVu
ZXJWZWN0b3IqIHZlY3RvciwgUmVmPEV2ZW50TGlzdGVuZXI+JiYgbGlzdGVuZXIsIGNvbnN0IFJl
Z2lzdGVyZWRFdmVudExpc3RlbmVyOjpPcHRpb25zJiBvcHRpb25zKQorc3RhdGljIGlubGluZSBz
aXplX3QgZmluZExpc3RlbmVyKGNvbnN0IEV2ZW50TGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycywg
RXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsKLSAgICBSZWdpc3Rl
cmVkRXZlbnRMaXN0ZW5lciByZWdpc3RlcmVkTGlzdGVuZXIoV1RGTW92ZShsaXN0ZW5lciksIG9w
dGlvbnMpOwotCi0gICAgaWYgKHZlY3Rvci0+ZmluZChyZWdpc3RlcmVkTGlzdGVuZXIpICE9IG5v
dEZvdW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIER1cGxpY2F0ZSBsaXN0ZW5lci4KLQot
ICAgIHZlY3Rvci0+YXBwZW5kKHJlZ2lzdGVyZWRMaXN0ZW5lcik7Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0ZW5lcnMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgYXV0byYgcmVnaXN0ZXJlZExpc3RlbmVyID0gbGlzdGVuZXJzW2ldOworICAgICAgICBp
ZiAocmVnaXN0ZXJlZExpc3RlbmVyLT5saXN0ZW5lcigpID09IGxpc3RlbmVyICYmIHJlZ2lzdGVy
ZWRMaXN0ZW5lci0+dXNlQ2FwdHVyZSgpID09IHVzZUNhcHR1cmUpCisgICAgICAgICAgICByZXR1
cm4gaTsKKyAgICB9CisgICAgcmV0dXJuIG5vdEZvdW5kOwogfQogCiBib29sIEV2ZW50TGlzdGVu
ZXJNYXA6OmFkZChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUmVmPEV2ZW50TGlzdGVu
ZXI+JiYgbGlzdGVuZXIsIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOjpPcHRpb25zJiBv
cHRpb25zKQogewogICAgIGFzc2VydE5vQWN0aXZlSXRlcmF0b3JzKCk7CiAKLSAgICBmb3IgKGF1
dG8mIGVudHJ5IDogbV9lbnRyaWVzKSB7Ci0gICAgICAgIGlmIChlbnRyeS5maXJzdCA9PSBldmVu
dFR5cGUpCi0gICAgICAgICAgICByZXR1cm4gYWRkTGlzdGVuZXJUb1ZlY3RvcihlbnRyeS5zZWNv
bmQuZ2V0KCksIFdURk1vdmUobGlzdGVuZXIpLCBvcHRpb25zKTsKKyAgICBpZiAoYXV0byogbGlz
dGVuZXJzID0gZmluZChldmVudFR5cGUpKSB7CisgICAgICAgIGlmIChmaW5kTGlzdGVuZXIoKmxp
c3RlbmVycywgbGlzdGVuZXIsIG9wdGlvbnMuY2FwdHVyZSkgIT0gbm90Rm91bmQpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7IC8vIER1cGxpY2F0ZSBsaXN0ZW5lci4KKyAgICAgICAgbGlzdGVu
ZXJzLT5hcHBlbmQoUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI6OmNyZWF0ZShXVEZNb3ZlKGxpc3Rl
bmVyKSwgb3B0aW9ucykpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBtX2Vu
dHJpZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGV2ZW50VHlwZSwgc3RkOjptYWtlX3VuaXF1ZTxF
dmVudExpc3RlbmVyVmVjdG9yPigpKSk7Ci0gICAgcmV0dXJuIGFkZExpc3RlbmVyVG9WZWN0b3Io
bV9lbnRyaWVzLmxhc3QoKS5zZWNvbmQuZ2V0KCksIFdURk1vdmUobGlzdGVuZXIpLCBvcHRpb25z
KTsKKyAgICBhdXRvIGxpc3RlbmVycyA9IHN0ZDo6bWFrZV91bmlxdWU8RXZlbnRMaXN0ZW5lclZl
Y3Rvcj4oKTsKKyAgICBsaXN0ZW5lcnMtPnVuY2hlY2tlZEFwcGVuZChSZWdpc3RlcmVkRXZlbnRM
aXN0ZW5lcjo6Y3JlYXRlKFdURk1vdmUobGlzdGVuZXIpLCBvcHRpb25zKSk7CisgICAgbV9lbnRy
aWVzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihldmVudFR5cGUsIFdURk1vdmUobGlzdGVuZXJzKSkp
OworICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCByZW1vdmVMaXN0ZW5lckZyb21W
ZWN0b3IoRXZlbnRMaXN0ZW5lclZlY3RvciogbGlzdGVuZXJWZWN0b3IsIEV2ZW50TGlzdGVuZXIm
IGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUsIHNpemVfdCYgaW5kZXhPZlJlbW92ZWRMaXN0ZW5l
cikKK3N0YXRpYyBib29sIHJlbW92ZUxpc3RlbmVyRnJvbVZlY3RvcihFdmVudExpc3RlbmVyVmVj
dG9yJiBsaXN0ZW5lcnMsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUp
CiB7Ci0gICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgcmVnaXN0ZXJlZExpc3RlbmVyKGxpc3Rl
bmVyLCB1c2VDYXB0dXJlKTsKLSAgICBpbmRleE9mUmVtb3ZlZExpc3RlbmVyID0gbGlzdGVuZXJW
ZWN0b3ItPmZpbmQocmVnaXN0ZXJlZExpc3RlbmVyKTsKLSAgICBpZiAoaW5kZXhPZlJlbW92ZWRM
aXN0ZW5lciA9PSBub3RGb3VuZCkKKyAgICBzaXplX3QgaW5kZXhPZlJlbW92ZWRMaXN0ZW5lciA9
IGZpbmRMaXN0ZW5lcihsaXN0ZW5lcnMsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKKyAgICBpZiAo
VU5MSUtFTFkoaW5kZXhPZlJlbW92ZWRMaXN0ZW5lciA9PSBub3RGb3VuZCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBsaXN0ZW5lclZlY3Rvci0+cmVtb3ZlKGluZGV4T2ZSZW1vdmVkTGlz
dGVuZXIpOworCisgICAgbGlzdGVuZXJzW2luZGV4T2ZSZW1vdmVkTGlzdGVuZXJdLT5tYXJrQXNS
ZW1vdmVkKCk7CisgICAgbGlzdGVuZXJzLnJlbW92ZShpbmRleE9mUmVtb3ZlZExpc3RlbmVyKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBFdmVudExpc3RlbmVyTWFwOjpyZW1vdmUoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29s
IHVzZUNhcHR1cmUsIHNpemVfdCYgaW5kZXhPZlJlbW92ZWRMaXN0ZW5lcikKK2Jvb2wgRXZlbnRM
aXN0ZW5lck1hcDo6cmVtb3ZlKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExp
c3RlbmVyJiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQogewogICAgIGFzc2VydE5vQWN0aXZl
SXRlcmF0b3JzKCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9lbnRyaWVzLnNp
emUoKTsgKytpKSB7CiAgICAgICAgIGlmIChtX2VudHJpZXNbaV0uZmlyc3QgPT0gZXZlbnRUeXBl
KSB7Ci0gICAgICAgICAgICBib29sIHdhc1JlbW92ZWQgPSByZW1vdmVMaXN0ZW5lckZyb21WZWN0
b3IobV9lbnRyaWVzW2ldLnNlY29uZC5nZXQoKSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUsIGluZGV4
T2ZSZW1vdmVkTGlzdGVuZXIpOworICAgICAgICAgICAgYm9vbCB3YXNSZW1vdmVkID0gcmVtb3Zl
TGlzdGVuZXJGcm9tVmVjdG9yKCptX2VudHJpZXNbaV0uc2Vjb25kLCBsaXN0ZW5lciwgdXNlQ2Fw
dHVyZSk7CiAgICAgICAgICAgICBpZiAobV9lbnRyaWVzW2ldLnNlY29uZC0+aXNFbXB0eSgpKQog
ICAgICAgICAgICAgICAgIG1fZW50cmllcy5yZW1vdmUoaSk7CiAgICAgICAgICAgICByZXR1cm4g
d2FzUmVtb3ZlZDsKQEAgLTE1OCw3ICsxNTMsNyBAQCBib29sIEV2ZW50TGlzdGVuZXJNYXA6OnJl
bW92ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYgbGlzdAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotRXZlbnRMaXN0ZW5lclZlY3RvciogRXZlbnRMaXN0ZW5l
ck1hcDo6ZmluZChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKK0V2ZW50TGlzdGVuZXJW
ZWN0b3IqIEV2ZW50TGlzdGVuZXJNYXA6OmZpbmQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5
cGUpIGNvbnN0CiB7CiAgICAgYXNzZXJ0Tm9BY3RpdmVJdGVyYXRvcnMoKTsKIApAQCAtMTcyLDgg
KzE2NywxMiBAQCBFdmVudExpc3RlbmVyVmVjdG9yKiBFdmVudExpc3RlbmVyTWFwOjpmaW5kKGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQogCiBzdGF0aWMgdm9pZCByZW1vdmVGaXJzdExp
c3RlbmVyQ3JlYXRlZEZyb21NYXJrdXAoRXZlbnRMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJWZWN0
b3IpCiB7Ci0gICAgYm9vbCBmb3VuZExpc3RlbmVyID0gbGlzdGVuZXJWZWN0b3IucmVtb3ZlRmly
c3RNYXRjaGluZyhbXSAoY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyKSB7
Ci0gICAgICAgIHJldHVybiBsaXN0ZW5lci5saXN0ZW5lci0+d2FzQ3JlYXRlZEZyb21NYXJrdXAo
KTsKKyAgICBib29sIGZvdW5kTGlzdGVuZXIgPSBsaXN0ZW5lclZlY3Rvci5yZW1vdmVGaXJzdE1h
dGNoaW5nKFtdIChjb25zdCBhdXRvJiByZWdpc3RlcmVkTGlzdGVuZXIpIHsKKyAgICAgICAgaWYg
KHJlZ2lzdGVyZWRMaXN0ZW5lci0+bGlzdGVuZXIoKS53YXNDcmVhdGVkRnJvbU1hcmt1cCgpKSB7
CisgICAgICAgICAgICByZWdpc3RlcmVkTGlzdGVuZXItPm1hcmtBc1JlbW92ZWQoKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9KTsKICAgICBBU1NFUlRfVU5VU0VEKGZvdW5kTGlzdGVuZXIsIGZvdW5kTGlzdGVuZXIpOwog
fQpAQCAtMTkyLDEzICsxOTEsMTMgQEAgdm9pZCBFdmVudExpc3RlbmVyTWFwOjpyZW1vdmVGaXJz
dEV2ZW50TGlzdGVuZXJDcmVhdGVkRnJvbU1hcmt1cChjb25zdCBBdG9taWNTdHIKICAgICB9CiB9
CiAKLXN0YXRpYyB2b2lkIGNvcHlMaXN0ZW5lcnNOb3RDcmVhdGVkRnJvbU1hcmt1cFRvVGFyZ2V0
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyVmVjdG9yKiBsaXN0
ZW5lclZlY3RvciwgRXZlbnRUYXJnZXQqIHRhcmdldCkKK3N0YXRpYyB2b2lkIGNvcHlMaXN0ZW5l
cnNOb3RDcmVhdGVkRnJvbU1hcmt1cFRvVGFyZ2V0KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlLCBFdmVudExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lclZlY3RvciwgRXZlbnRUYXJnZXQqIHRh
cmdldCkKIHsKLSAgICBmb3IgKGF1dG8mIGxpc3RlbmVyIDogKmxpc3RlbmVyVmVjdG9yKSB7Cisg
ICAgZm9yIChhdXRvJiByZWdpc3RlcmVkTGlzdGVuZXIgOiBsaXN0ZW5lclZlY3RvcikgewogICAg
ICAgICAvLyBFdmVudCBsaXN0ZW5lcnMgY3JlYXRlZCBmcm9tIG1hcmt1cCBoYXZlIGFscmVhZHkg
YmVlbiB0cmFuc2ZlcmVkIHRvIHRoZSBzaGFkb3cgdHJlZSBkdXJpbmcgY2xvbmluZy4KLSAgICAg
ICAgaWYgKGxpc3RlbmVyLmxpc3RlbmVyLT53YXNDcmVhdGVkRnJvbU1hcmt1cCgpKQorICAgICAg
ICBpZiAocmVnaXN0ZXJlZExpc3RlbmVyLT5saXN0ZW5lcigpLndhc0NyZWF0ZWRGcm9tTWFya3Vw
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdGFyZ2V0LT5hZGRFdmVudExpc3Rl
bmVyKGV2ZW50VHlwZSwgKmxpc3RlbmVyLmxpc3RlbmVyLCBsaXN0ZW5lci51c2VDYXB0dXJlKTsK
KyAgICAgICAgdGFyZ2V0LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgcmVnaXN0ZXJlZExp
c3RlbmVyLT5saXN0ZW5lcigpLCByZWdpc3RlcmVkTGlzdGVuZXItPnVzZUNhcHR1cmUoKSk7CiAg
ICAgfQogfQogCkBAIC0yMDcsNyArMjA2LDcgQEAgdm9pZCBFdmVudExpc3RlbmVyTWFwOjpjb3B5
RXZlbnRMaXN0ZW5lcnNOb3RDcmVhdGVkRnJvbU1hcmt1cFRvVGFyZ2V0KEV2ZW50VGFyZ2UKICAg
ICBhc3NlcnROb0FjdGl2ZUl0ZXJhdG9ycygpOwogCiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1f
ZW50cmllcykKLSAgICAgICAgY29weUxpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJn
ZXQoZW50cnkuZmlyc3QsIGVudHJ5LnNlY29uZC5nZXQoKSwgdGFyZ2V0KTsKKyAgICAgICAgY29w
eUxpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJnZXQoZW50cnkuZmlyc3QsICplbnRy
eS5zZWNvbmQsIHRhcmdldCk7CiB9CiAKIEV2ZW50TGlzdGVuZXJJdGVyYXRvcjo6RXZlbnRMaXN0
ZW5lckl0ZXJhdG9yKEV2ZW50VGFyZ2V0KiB0YXJnZXQpCkBAIC0yMzYsMTYgKzIzNSwxNiBAQCBF
dmVudExpc3RlbmVySXRlcmF0b3I6On5FdmVudExpc3RlbmVySXRlcmF0b3IoKQogRXZlbnRMaXN0
ZW5lciogRXZlbnRMaXN0ZW5lckl0ZXJhdG9yOjpuZXh0TGlzdGVuZXIoKQogewogICAgIGlmICgh
bV9tYXApCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IGZvciAoOyBtX2VudHJ5SW5kZXggPCBtX21hcC0+bV9lbnRyaWVzLnNpemUoKTsgKyttX2VudHJ5
SW5kZXgpIHsKICAgICAgICAgRXZlbnRMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gKm1fbWFw
LT5tX2VudHJpZXNbbV9lbnRyeUluZGV4XS5zZWNvbmQ7CiAgICAgICAgIGlmIChtX2luZGV4IDwg
bGlzdGVuZXJzLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBsaXN0ZW5lcnNbbV9pbmRleCsr
XS5saXN0ZW5lci5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiAmbGlzdGVuZXJzW21faW5kZXgr
K10tPmxpc3RlbmVyKCk7CiAgICAgICAgIG1faW5kZXggPSAwOwogICAgIH0KIAotICAgIHJldHVy
biAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lck1hcC5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXJNYXAuaAppbmRleCA5ZjUzMmFkMWU2NjM4NWQ0MmIz
NTA1N2I3OGI3MzkwNDQ1ZjZmYzVlLi41YzY1MmY5YzEyYjMxNDViYWMyNWQyMDVhN2U3NGFjY2Zm
NmJlZjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lck1hcC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyTWFwLmgKQEAgLTQzLDIyICs0
MywyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEV2ZW50VGFyZ2V0OwogCi10eXBl
ZGVmIFZlY3RvcjxSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciwgMT4gRXZlbnRMaXN0ZW5lclZlY3Rv
cjsKK3VzaW5nIEV2ZW50TGlzdGVuZXJWZWN0b3IgPSBWZWN0b3I8UmVmUHRyPFJlZ2lzdGVyZWRF
dmVudExpc3RlbmVyPiwgMT47CiAKIGNsYXNzIEV2ZW50TGlzdGVuZXJNYXAgewogcHVibGljOgog
ICAgIEV2ZW50TGlzdGVuZXJNYXAoKTsKIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fZW50cmllcy5pc0VtcHR5KCk7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGNvbnRh
aW5zKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKSBjb25zdDsKKyAgICBib29sIGNvbnRh
aW5zKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKSBjb25zdCB7IHJldHVybiBmaW5kKGV2
ZW50VHlwZSk7IH0KICAgICBib29sIGNvbnRhaW5zQ2FwdHVyaW5nKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlKSBjb25zdDsKICAgICBib29sIGNvbnRhaW5zQWN0aXZlKGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlKSBjb25zdDsKIAogICAgIHZvaWQgY2xlYXIoKTsKIAogICAgIGJv
b2wgYWRkKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBSZWY8RXZlbnRMaXN0ZW5lcj4m
JiwgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI6Ok9wdGlvbnMmKTsKLSAgICBib29sIHJl
bW92ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYsIGJvb2wg
dXNlQ2FwdHVyZSwgc2l6ZV90JiBpbmRleE9mUmVtb3ZlZExpc3RlbmVyKTsKLSAgICBFdmVudExp
c3RlbmVyVmVjdG9yKiBmaW5kKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKTsKKyAgICBi
b29sIHJlbW92ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYs
IGJvb2wgdXNlQ2FwdHVyZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgRXZlbnRMaXN0ZW5lclZlY3Rv
ciogZmluZChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkgY29uc3Q7CiAgICAgVmVjdG9y
PEF0b21pY1N0cmluZz4gZXZlbnRUeXBlcygpIGNvbnN0OwogCiAgICAgdm9pZCByZW1vdmVGaXJz
dEV2ZW50TGlzdGVuZXJDcmVhdGVkRnJvbU1hcmt1cChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSk7CkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIEV2ZW50TGlzdGVuZXJJdGVyYXRvcjsKIAotICAgIHZvaWQgYXNzZXJ0Tm9BY3RpdmVJdGVy
YXRvcnMoKTsKKyAgICB2b2lkIGFzc2VydE5vQWN0aXZlSXRlcmF0b3JzKCkgY29uc3Q7CiAKICAg
ICBWZWN0b3I8c3RkOjpwYWlyPEF0b21pY1N0cmluZywgc3RkOjp1bmlxdWVfcHRyPEV2ZW50TGlz
dGVuZXJWZWN0b3I+PiwgMj4gbV9lbnRyaWVzOwogCkBAIC03OSw3ICs3OSw2IEBAIHByaXZhdGU6
CiBjbGFzcyBFdmVudExpc3RlbmVySXRlcmF0b3IgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEV2ZW50TGlzdGVuZXJJdGVyYXRvcik7CiBwdWJsaWM6Ci0gICAgRXZlbnRMaXN0ZW5lckl0ZXJh
dG9yKCk7CiAgICAgZXhwbGljaXQgRXZlbnRMaXN0ZW5lckl0ZXJhdG9yKEV2ZW50VGFyZ2V0Kik7
CiAjaWZuZGVmIE5ERUJVRwogICAgIH5FdmVudExpc3RlbmVySXRlcmF0b3IoKTsKQEAgLTk0LDcg
KzkzLDcgQEAgcHJpdmF0ZToKIH07CiAKICNpZmRlZiBOREVCVUcKLWlubGluZSB2b2lkIEV2ZW50
TGlzdGVuZXJNYXA6OmFzc2VydE5vQWN0aXZlSXRlcmF0b3JzKCkgeyB9CitpbmxpbmUgdm9pZCBF
dmVudExpc3RlbmVyTWFwOjphc3NlcnROb0FjdGl2ZUl0ZXJhdG9ycygpIGNvbnN0IHsgfQogI2Vu
ZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3Bw
CmluZGV4IDBiZDViODBjN2U3M2FlZWRmM2JlZWViM2VjM2E1ODU1MmNiM2YxODEuLjA5ZjBmOGEx
YWZmMjBkMDMxZGYzNGQzMmMxMDI5ZTM2NDM3NDI3Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudFRhcmdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFy
Z2V0LmNwcApAQCAtMTAxLDI4ICsxMDEsNyBAQCBib29sIEV2ZW50VGFyZ2V0OjpyZW1vdmVFdmVu
dExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbgogICAg
IGlmICghZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc2l6ZV90IGluZGV4T2ZSZW1v
dmVkTGlzdGVuZXI7Ci0KLSAgICBpZiAoIWQtPmV2ZW50TGlzdGVuZXJNYXAucmVtb3ZlKGV2ZW50
VHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMuY2FwdHVyZSwgaW5kZXhPZlJlbW92ZWRMaXN0ZW5lcikp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIE5vdGlmeSBmaXJpbmcgZXZlbnRzIHBs
YW5uaW5nIHRvIGludm9rZSB0aGUgbGlzdGVuZXIgYXQgJ2luZGV4JyB0aGF0Ci0gICAgLy8gdGhl
eSBoYXZlIG9uZSBsZXNzIGxpc3RlbmVyIHRvIGludm9rZS4KLSAgICBpZiAoIWQtPmZpcmluZ0V2
ZW50SXRlcmF0b3JzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBmb3IgKGF1dG8mIGZpcmlu
Z0l0ZXJhdG9yIDogKmQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzKSB7Ci0gICAgICAgIGlmIChldmVu
dFR5cGUgIT0gZmlyaW5nSXRlcmF0b3IuZXZlbnRUeXBlKQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgaWYgKGluZGV4T2ZSZW1vdmVkTGlzdGVuZXIgPj0gZmlyaW5nSXRlcmF0b3Iu
c2l6ZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC0tZmlyaW5nSXRlcmF0b3Iu
c2l6ZTsKLSAgICAgICAgaWYgKGluZGV4T2ZSZW1vdmVkTGlzdGVuZXIgPD0gZmlyaW5nSXRlcmF0
b3IuaXRlcmF0b3IpCi0gICAgICAgICAgICAtLWZpcmluZ0l0ZXJhdG9yLml0ZXJhdG9yOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBkLT5ldmVudExpc3RlbmVyTWFwLnJl
bW92ZShldmVudFR5cGUsIGxpc3RlbmVyLCBvcHRpb25zLmNhcHR1cmUpOwogfQogCiBib29sIEV2
ZW50VGFyZ2V0OjpzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlLCBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4mJiBsaXN0ZW5lcikKQEAgLTEzNiwxMCAr
MTE1LDEwIEBAIGJvb2wgRXZlbnRUYXJnZXQ6OnNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFJlZlB0CiBFdmVudExpc3RlbmVyKiBFdmVudFRh
cmdldDo6Z2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSkKIHsKICAgICBmb3IgKGF1dG8mIGV2ZW50TGlzdGVuZXIgOiBnZXRFdmVudExpc3RlbmVy
cyhldmVudFR5cGUpKSB7Ci0gICAgICAgIGlmIChldmVudExpc3RlbmVyLmxpc3RlbmVyLT5pc0F0
dHJpYnV0ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGV2ZW50TGlzdGVuZXIubGlzdGVuZXIuZ2V0
KCk7CisgICAgICAgIGlmIChldmVudExpc3RlbmVyLT5saXN0ZW5lcigpLmlzQXR0cmlidXRlKCkp
CisgICAgICAgICAgICByZXR1cm4gJmV2ZW50TGlzdGVuZXItPmxpc3RlbmVyKCk7CiAgICAgfQot
ICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBib29sIEV2ZW50VGFyZ2V0
OjpoYXNBY3RpdmVFdmVudExpc3RlbmVycyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkg
Y29uc3QKQEAgLTIxMCw2MiArMTg5LDc0IEBAIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIGxl
Z2FjeVR5cGUoY29uc3QgRXZlbnQmIGV2ZW50KQogICAgIHJldHVybiBlbXB0eUF0b207CiB9CiAK
K2NsYXNzIEZpcmluZ0V2ZW50TGlzdGVuZXJzU2NvcGUgeworcHVibGljOgorICAgIGV4cGxpY2l0
IEZpcmluZ0V2ZW50TGlzdGVuZXJzU2NvcGUoRXZlbnRUYXJnZXREYXRhJiBkYXRhKQorICAgICAg
ICA6IG1fZGF0YShkYXRhKQorICAgIHsKKyAgICAgICAgbV9kYXRhLmlzRmlyaW5nRXZlbnRMaXN0
ZW5lcnMrKzsKKyAgICB9CisKKyAgICB+RmlyaW5nRXZlbnRMaXN0ZW5lcnNTY29wZSgpCisgICAg
eworICAgICAgICBBU1NFUlQobV9kYXRhLmlzRmlyaW5nRXZlbnRMaXN0ZW5lcnMpOworICAgICAg
ICBtX2RhdGEuaXNGaXJpbmdFdmVudExpc3RlbmVycy0tOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBFdmVudFRhcmdldERhdGEmIG1fZGF0YTsKK307CisKIGJvb2wgRXZlbnRUYXJnZXQ6OmZpcmVF
dmVudExpc3RlbmVycyhFdmVudCYgZXZlbnQpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04oIU5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6aXNFdmVudERpc3BhdGNoRm9y
YmlkZGVuKCkpOwogICAgIEFTU0VSVChldmVudC5pc0luaXRpYWxpemVkKCkpOwogCi0gICAgRXZl
bnRUYXJnZXREYXRhKiBkID0gZXZlbnRUYXJnZXREYXRhKCk7Ci0gICAgaWYgKCFkKQorICAgIEV2
ZW50VGFyZ2V0RGF0YSogZGF0YSA9IGV2ZW50VGFyZ2V0RGF0YSgpOworICAgIGlmICghZGF0YSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBFdmVudExpc3RlbmVyVmVjdG9yKiBsZWdhY3lM
aXN0ZW5lcnNWZWN0b3IgPSBudWxscHRyOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbGVnYWN5
VHlwZU5hbWUgPSBsZWdhY3lUeXBlKGV2ZW50KTsKLSAgICBpZiAoIWxlZ2FjeVR5cGVOYW1lLmlz
RW1wdHkoKSkKLSAgICAgICAgbGVnYWN5TGlzdGVuZXJzVmVjdG9yID0gZC0+ZXZlbnRMaXN0ZW5l
ck1hcC5maW5kKGxlZ2FjeVR5cGVOYW1lKTsKLQotICAgIEV2ZW50TGlzdGVuZXJWZWN0b3IqIGxp
c3RlbmVyc1ZlY3RvciA9IGQtPmV2ZW50TGlzdGVuZXJNYXAuZmluZChldmVudC50eXBlKCkpOwot
Ci0gICAgaWYgKGxpc3RlbmVyc1ZlY3RvcikKLSAgICAgICAgZmlyZUV2ZW50TGlzdGVuZXJzKGV2
ZW50LCBkLCAqbGlzdGVuZXJzVmVjdG9yKTsKLSAgICBlbHNlIGlmIChsZWdhY3lMaXN0ZW5lcnNW
ZWN0b3IpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nIHR5cGVOYW1lID0gZXZlbnQudHlwZSgpOwot
ICAgICAgICBldmVudC5zZXRUeXBlKGxlZ2FjeVR5cGVOYW1lKTsKLSAgICAgICAgZmlyZUV2ZW50
TGlzdGVuZXJzKGV2ZW50LCBkLCAqbGVnYWN5TGlzdGVuZXJzVmVjdG9yKTsKLSAgICAgICAgZXZl
bnQuc2V0VHlwZSh0eXBlTmFtZSk7CisgICAgRmlyaW5nRXZlbnRMaXN0ZW5lcnNTY29wZSBmaXJp
bmdFdmVudExpc3RlbmVyc1Njb3BlKCpkYXRhKTsKKworICAgIGlmIChhdXRvKiBsaXN0ZW5lcnNW
ZWN0b3IgPSBkYXRhLT5ldmVudExpc3RlbmVyTWFwLmZpbmQoZXZlbnQudHlwZSgpKSkgeworICAg
ICAgICBmaXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQsICpsaXN0ZW5lcnNWZWN0b3IpOworICAgICAg
ICByZXR1cm4gIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQoKTsKICAgICB9CiAKKyAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGxlZ2FjeVR5cGVOYW1lID0gbGVnYWN5VHlwZShldmVudCk7CisgICAgaWYg
KCFsZWdhY3lUeXBlTmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGxlZ2FjeUxp
c3RlbmVyc1ZlY3RvciA9IGRhdGEtPmV2ZW50TGlzdGVuZXJNYXAuZmluZChsZWdhY3lUeXBlTmFt
ZSkpIHsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyB0eXBlTmFtZSA9IGV2ZW50LnR5cGUoKTsK
KyAgICAgICAgICAgIGV2ZW50LnNldFR5cGUobGVnYWN5VHlwZU5hbWUpOworICAgICAgICAgICAg
ZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50LCAqbGVnYWN5TGlzdGVuZXJzVmVjdG9yKTsKKyAgICAg
ICAgICAgIGV2ZW50LnNldFR5cGUodHlwZU5hbWUpOworICAgICAgICB9CisgICAgfQogICAgIHJl
dHVybiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCgpOwogfQogCi12b2lkIEV2ZW50VGFyZ2V0Ojpm
aXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQmIGV2ZW50LCBFdmVudFRhcmdldERhdGEqIGQsIEV2ZW50
TGlzdGVuZXJWZWN0b3ImIGVudHJ5KQorLy8gSW50ZW50aW9uYWxseSBjcmVhdGVzIGEgY29weSBv
ZiB0aGUgbGlzdGVuZXJzIHZlY3RvciB0byBhdm9pZCBldmVudCBsaXN0ZW5lcnMgYWRkZWQgYWZ0
ZXIgdGhpcyBwb2ludCBmcm9tIGJlaW5nIHJ1bi4KKy8vIE5vdGUgdGhhdCByZW1vdmFsIHN0aWxs
IGhhcyBhbiBlZmZlY3QgZHVlIHRvIHRoZSByZW1vdmVkIGZpZWxkIGluIFJlZ2lzdGVyZWRFdmVu
dExpc3RlbmVyLgordm9pZCBFdmVudFRhcmdldDo6ZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50JiBl
dmVudCwgRXZlbnRMaXN0ZW5lclZlY3RvciBsaXN0ZW5lcnMpCiB7CiAgICAgUmVmPEV2ZW50VGFy
Z2V0PiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKLQotICAgIC8vIEZpcmUgYWxsIGxpc3RlbmVycyBy
ZWdpc3RlcmVkIGZvciB0aGlzIGV2ZW50LiBEb24ndCBmaXJlIGxpc3RlbmVycyByZW1vdmVkIGR1
cmluZyBldmVudCBkaXNwYXRjaC4KLSAgICAvLyBBbHNvLCBkb24ndCBmaXJlIGV2ZW50IGxpc3Rl
bmVycyBhZGRlZCBkdXJpbmcgZXZlbnQgZGlzcGF0Y2guIENvbnZlbmllbnRseSwgYWxsIG5ldyBl
dmVudCBsaXN0ZW5lcnMgd2lsbCBiZSBhZGRlZAotICAgIC8vIGFmdGVyIG9yIGF0IGluZGV4IHxz
aXplfCwgc28gaXRlcmF0aW5nIHVwIHRvIChidXQgbm90IGluY2x1ZGluZykgfHNpemV8IG5hdHVy
YWxseSBleGNsdWRlcyBuZXcgZXZlbnQgbGlzdGVuZXJzLgotCi0gICAgc2l6ZV90IGkgPSAwOwot
ICAgIHNpemVfdCBzaXplID0gZW50cnkuc2l6ZSgpOwotICAgIGlmICghZC0+ZmlyaW5nRXZlbnRJ
dGVyYXRvcnMpCi0gICAgICAgIGQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzID0gc3RkOjptYWtlX3Vu
aXF1ZTxGaXJpbmdFdmVudEl0ZXJhdG9yVmVjdG9yPigpOwotICAgIGQtPmZpcmluZ0V2ZW50SXRl
cmF0b3JzLT5hcHBlbmQoRmlyaW5nRXZlbnRJdGVyYXRvcihldmVudC50eXBlKCksIGksIHNpemUp
KTsKKyAgICBBU1NFUlQoIWxpc3RlbmVycy5pc0VtcHR5KCkpOwogCiAgICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBudWxscHRyOwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZSB3aWxsRGlzcGF0Y2hFdmVudENvb2tpZTsKICAgICBpZiAoaXM8RG9jdW1lbnQ+KGNvbnRl
eHQpKSB7CiAgICAgICAgIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpOwot
ICAgICAgICB3aWxsRGlzcGF0Y2hFdmVudENvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6d2lsbERpc3BhdGNoRXZlbnQoKmRvY3VtZW50LCBldmVudCwgc2l6ZSA+IDApOworICAgICAg
ICB3aWxsRGlzcGF0Y2hFdmVudENvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2ls
bERpc3BhdGNoRXZlbnQoKmRvY3VtZW50LCBldmVudCwgdHJ1ZSk7CiAgICAgfQogCi0gICAgZm9y
ICg7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgcmVn
aXN0ZXJlZExpc3RlbmVyID0gZW50cnlbaV07CisgICAgZm9yIChhdXRvJiByZWdpc3RlcmVkTGlz
dGVuZXIgOiBsaXN0ZW5lcnMpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKHJlZ2lzdGVyZWRMaXN0
ZW5lci0+d2FzUmVtb3ZlZCgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlm
IChldmVudC5ldmVudFBoYXNlKCkgPT0gRXZlbnQ6OkNBUFRVUklOR19QSEFTRSAmJiAhcmVnaXN0
ZXJlZExpc3RlbmVyLnVzZUNhcHR1cmUpCisgICAgICAgIGlmIChldmVudC5ldmVudFBoYXNlKCkg
PT0gRXZlbnQ6OkNBUFRVUklOR19QSEFTRSAmJiAhcmVnaXN0ZXJlZExpc3RlbmVyLT51c2VDYXB0
dXJlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGV2ZW50LmV2ZW50UGhh
c2UoKSA9PSBFdmVudDo6QlVCQkxJTkdfUEhBU0UgJiYgcmVnaXN0ZXJlZExpc3RlbmVyLnVzZUNh
cHR1cmUpCisgICAgICAgIGlmIChldmVudC5ldmVudFBoYXNlKCkgPT0gRXZlbnQ6OkJVQkJMSU5H
X1BIQVNFICYmIHJlZ2lzdGVyZWRMaXN0ZW5lci0+dXNlQ2FwdHVyZSgpKQogICAgICAgICAgICAg
Y29udGludWU7CiAKICAgICAgICAgLy8gSWYgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIGhhcyBi
ZWVuIGNhbGxlZCwgd2UganVzdCBicmVhayBvdXQgaW1tZWRpYXRlbHksIHdpdGhvdXQKQEAgLTI3
NCwyNCArMjY1LDIyIEBAIHZvaWQgRXZlbnRUYXJnZXQ6OmZpcmVFdmVudExpc3RlbmVycyhFdmVu
dCYgZXZlbnQsIEV2ZW50VGFyZ2V0RGF0YSogZCwgRXZlbnRMaXN0CiAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICAvLyBEbyB0aGlzIGJlZm9yZSBpbnZvY2F0aW9uIHRvIGF2b2lkIHJlZW50
cmFuY3kgaXNzdWVzLgotICAgICAgICBpZiAocmVnaXN0ZXJlZExpc3RlbmVyLmlzT25jZSkKLSAg
ICAgICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQudHlwZSgpLCAqcmVnaXN0ZXJlZExp
c3RlbmVyLmxpc3RlbmVyLCBMaXN0ZW5lck9wdGlvbnMocmVnaXN0ZXJlZExpc3RlbmVyLnVzZUNh
cHR1cmUpKTsKKyAgICAgICAgaWYgKHJlZ2lzdGVyZWRMaXN0ZW5lci0+aXNPbmNlKCkpCisgICAg
ICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LnR5cGUoKSwgcmVnaXN0ZXJlZExpc3Rl
bmVyLT5saXN0ZW5lcigpLCBMaXN0ZW5lck9wdGlvbnMocmVnaXN0ZXJlZExpc3RlbmVyLT51c2VD
YXB0dXJlKCkpKTsKIAotICAgICAgICBpZiAocmVnaXN0ZXJlZExpc3RlbmVyLmlzUGFzc2l2ZSkK
KyAgICAgICAgaWYgKHJlZ2lzdGVyZWRMaXN0ZW5lci0+aXNQYXNzaXZlKCkpCiAgICAgICAgICAg
ICBldmVudC5zZXRJblBhc3NpdmVMaXN0ZW5lcih0cnVlKTsKIAogICAgICAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
aWxsSGFuZGxlRXZlbnQoY29udGV4dCwgZXZlbnQpOwogICAgICAgICAvLyBUbyBtYXRjaCBNb3pp
bGxhLCB0aGUgQVRfVEFSR0VUIHBoYXNlIGZpcmVzIGJvdGggY2FwdHVyaW5nIGFuZCBidWJibGlu
ZwogICAgICAgICAvLyBldmVudCBsaXN0ZW5lcnMsIGV2ZW4gdGhvdWdoIHRoYXQgdmlvbGF0ZXMg
c29tZSB2ZXJzaW9ucyBvZiB0aGUgRE9NIHNwZWMuCi0gICAgICAgIHJlZ2lzdGVyZWRMaXN0ZW5l
ci5saXN0ZW5lci0+aGFuZGxlRXZlbnQoY29udGV4dCwgJmV2ZW50KTsKKyAgICAgICAgcmVnaXN0
ZXJlZExpc3RlbmVyLT5saXN0ZW5lcigpLmhhbmRsZUV2ZW50KGNvbnRleHQsICZldmVudCk7CiAg
ICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSGFuZGxlRXZlbnQoY29va2llKTsK
IAotICAgICAgICBpZiAocmVnaXN0ZXJlZExpc3RlbmVyLmlzUGFzc2l2ZSkKKyAgICAgICAgaWYg
KHJlZ2lzdGVyZWRMaXN0ZW5lci0+aXNQYXNzaXZlKCkpCiAgICAgICAgICAgICBldmVudC5zZXRJ
blBhc3NpdmVMaXN0ZW5lcihmYWxzZSk7CiAgICAgfQogCi0gICAgZC0+ZmlyaW5nRXZlbnRJdGVy
YXRvcnMtPnJlbW92ZUxhc3QoKTsKLQogICAgIGlmIChkb2N1bWVudCkKICAgICAgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpkaWREaXNwYXRjaEV2ZW50KHdpbGxEaXNwYXRjaEV2ZW50Q29v
a2llKTsKIH0KQEAgLTMxMCwxNSArMjk5LDYgQEAgdm9pZCBFdmVudFRhcmdldDo6cmVtb3ZlQWxs
RXZlbnRMaXN0ZW5lcnMoKQogICAgIGlmICghZCkKICAgICAgICAgcmV0dXJuOwogICAgIGQtPmV2
ZW50TGlzdGVuZXJNYXAuY2xlYXIoKTsKLQotICAgIC8vIE5vdGlmeSBmaXJpbmcgZXZlbnRzIHBs
YW5uaW5nIHRvIGludm9rZSB0aGUgbGlzdGVuZXIgYXQgJ2luZGV4JyB0aGF0Ci0gICAgLy8gdGhl
eSBoYXZlIG9uZSBsZXNzIGxpc3RlbmVyIHRvIGludm9rZS4KLSAgICBpZiAoZC0+ZmlyaW5nRXZl
bnRJdGVyYXRvcnMpIHsKLSAgICAgICAgZm9yIChhdXRvJiBmaXJpbmdFdmVudEl0ZXJhdG9yIDog
KmQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzKSB7Ci0gICAgICAgICAgICBmaXJpbmdFdmVudEl0ZXJh
dG9yLml0ZXJhdG9yID0gMDsKLSAgICAgICAgICAgIGZpcmluZ0V2ZW50SXRlcmF0b3Iuc2l6ZSA9
IDA7Ci0gICAgICAgIH0KLSAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50VGFyZ2V0LmgKaW5kZXggNDM5ODJhNjUzOGFiOTA1YmJmODZjODhhMTJlMTRkNTdj
MTAzY2VkNi4uNzg2YWNiNzNjNGE2OGM4ZGM4NjA4OWViZDk0OWI0ZjM3MThhZTczYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50VGFyZ2V0LmgKQEAgLTk3LDcgKzk3LDcgQEAgcHVibGljOgogICAgIH5FdmVu
dFRhcmdldERhdGEoKTsKIAogICAgIEV2ZW50TGlzdGVuZXJNYXAgZXZlbnRMaXN0ZW5lck1hcDsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlyaW5nRXZlbnRJdGVyYXRvclZlY3Rvcj4gZmlyaW5nRXZl
bnRJdGVyYXRvcnM7CisgICAgdW5zaWduZWQgaXNGaXJpbmdFdmVudExpc3RlbmVycyB7IDAgfTsK
IH07CiAKIGVudW0gRXZlbnRUYXJnZXRJbnRlcmZhY2UgewpAQCAtMTgyLDcgKzE4Miw3IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgPSAwOwogICAgIAotICAgIHZvaWQgZmlyZUV2ZW50
TGlzdGVuZXJzKEV2ZW50JiwgRXZlbnRUYXJnZXREYXRhKiwgRXZlbnRMaXN0ZW5lclZlY3RvciYp
OworICAgIHZvaWQgZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50JiwgRXZlbnRMaXN0ZW5lclZlY3Rv
cik7CiAKICAgICBmcmllbmQgY2xhc3MgRXZlbnRMaXN0ZW5lckl0ZXJhdG9yOwogfTsKQEAgLTIw
Nyw3ICsyMDcsNyBAQCBpbmxpbmUgYm9vbCBFdmVudFRhcmdldDo6aXNGaXJpbmdFdmVudExpc3Rl
bmVycygpCiAgICAgRXZlbnRUYXJnZXREYXRhKiBkID0gZXZlbnRUYXJnZXREYXRhKCk7CiAgICAg
aWYgKCFkKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGQtPmZpcmluZ0V2ZW50
SXRlcmF0b3JzICYmICFkLT5maXJpbmdFdmVudEl0ZXJhdG9ycy0+aXNFbXB0eSgpOworICAgIHJl
dHVybiBkLT5pc0ZpcmluZ0V2ZW50TGlzdGVuZXJzOwogfQogCiBpbmxpbmUgYm9vbCBFdmVudFRh
cmdldDo6aGFzRXZlbnRMaXN0ZW5lcnMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9S
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDNhZGFjYTM3ODc1MWIyYTYwNTVkNjgzZjdkN2FhMjkwZDUxNThiOWYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JlZ2lz
dGVyZWRFdmVudExpc3RlbmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqIENv
cHlyaWdodCAoQykgMjAwMSBUb2JpYXMgQW50b24gKGFudG9uQHN0dWQuZmJpLmZoLWRhcm1zdGFk
dC5kZSkKLSAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdt
YWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5oIgotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JlZ2lz
dGVyZWRFdmVudExpc3RlbmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmVnaXN0ZXJlZEV2ZW50
TGlzdGVuZXIuaAppbmRleCBkNTVkOWUyYWM5YWEyMWNjZTYzZjNkNjgxOTg5MjBjODRiNWU0Mzhj
Li5jMmNkNGNmOGI5ZjE4YmQyNTRiZjNmNWVhYTI5MzRjNmQ1NzY3OTE5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaApAQCAtMjksNDcgKzI5LDUwIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIFJlZ2lzdGVyZWRFdmVudExpc3Rl
bmVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0cnVjdCBPcHRpb25zIHsKLSAgICAgICAgICAg
IE9wdGlvbnMoYm9vbCBjYXB0dXJlID0gZmFsc2UsIGJvb2wgcGFzc2l2ZSA9IGZhbHNlLCBib29s
IG9uY2UgPSBmYWxzZSkKLSAgICAgICAgICAgICAgICA6IGNhcHR1cmUoY2FwdHVyZSkKLSAgICAg
ICAgICAgICAgICAsIHBhc3NpdmUocGFzc2l2ZSkKLSAgICAgICAgICAgICAgICAsIG9uY2Uob25j
ZSkKLSAgICAgICAgICAgIHsgfQorLy8gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25j
ZXB0LWV2ZW50LWxpc3RlbmVyCitjbGFzcyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciA6IHB1Ymxp
YyBSZWZDb3VudGVkPFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyPiB7CitwdWJsaWM6CisgICAgc3Ry
dWN0IE9wdGlvbnMgeworICAgICAgICBPcHRpb25zKGJvb2wgY2FwdHVyZSA9IGZhbHNlLCBib29s
IHBhc3NpdmUgPSBmYWxzZSwgYm9vbCBvbmNlID0gZmFsc2UpCisgICAgICAgICAgICA6IGNhcHR1
cmUoY2FwdHVyZSkKKyAgICAgICAgICAgICwgcGFzc2l2ZShwYXNzaXZlKQorICAgICAgICAgICAg
LCBvbmNlKG9uY2UpCisgICAgICAgIHsgfQogCi0gICAgICAgICAgICBib29sIGNhcHR1cmU7Ci0g
ICAgICAgICAgICBib29sIHBhc3NpdmU7Ci0gICAgICAgICAgICBib29sIG9uY2U7Ci0gICAgICAg
IH07CisgICAgICAgIGJvb2wgY2FwdHVyZTsKKyAgICAgICAgYm9vbCBwYXNzaXZlOworICAgICAg
ICBib29sIG9uY2U7CisgICAgfTsKKworICAgIHN0YXRpYyBSZWY8UmVnaXN0ZXJlZEV2ZW50TGlz
dGVuZXI+IGNyZWF0ZShSZWY8RXZlbnRMaXN0ZW5lcj4mJiBsaXN0ZW5lciwgY29uc3QgT3B0aW9u
cyYgb3B0aW9ucykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlZ2lzdGVy
ZWRFdmVudExpc3RlbmVyKFdURk1vdmUobGlzdGVuZXIpLCBvcHRpb25zKSk7CisgICAgfQogCi0g
ICAgICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyKFJlZjxFdmVudExpc3RlbmVyPiYmIGxpc3Rl
bmVyLCBjb25zdCBPcHRpb25zJiBvcHRpb25zKQotICAgICAgICAgICAgOiBsaXN0ZW5lcihXVEZN
b3ZlKGxpc3RlbmVyKSkKLSAgICAgICAgICAgICwgdXNlQ2FwdHVyZShvcHRpb25zLmNhcHR1cmUp
Ci0gICAgICAgICAgICAsIGlzUGFzc2l2ZShvcHRpb25zLnBhc3NpdmUpCi0gICAgICAgICAgICAs
IGlzT25jZShvcHRpb25zLm9uY2UpCi0gICAgICAgIHsKLSAgICAgICAgfQorICAgIEV2ZW50TGlz
dGVuZXImIGxpc3RlbmVyKCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxFdmVudExpc3RlbmVy
Jj4obV9saXN0ZW5lci5nZXQoKSk7IH0KKyAgICBib29sIHVzZUNhcHR1cmUoKSBjb25zdCB7IHJl
dHVybiBtX3VzZUNhcHR1cmU7IH0KKyAgICBib29sIGlzUGFzc2l2ZSgpIGNvbnN0IHsgcmV0dXJu
IG1faXNQYXNzaXZlOyB9CisgICAgYm9vbCBpc09uY2UoKSBjb25zdCB7IHJldHVybiBtX2lzT25j
ZTsgfQorICAgIGJvb2wgd2FzUmVtb3ZlZCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzUmVtb3ZlZDsg
fQogCi0gICAgICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyKFJlZjxFdmVudExpc3RlbmVyPiYm
IGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCi0gICAgICAgICAgICA6IGxpc3RlbmVyKFdURk1v
dmUobGlzdGVuZXIpKQotICAgICAgICAgICAgLCB1c2VDYXB0dXJlKHVzZUNhcHR1cmUpCi0gICAg
ICAgIHsKLSAgICAgICAgfQorICAgIHZvaWQgbWFya0FzUmVtb3ZlZCgpIHsgbV93YXNSZW1vdmVk
ID0gdHJ1ZTsgfQogCi0gICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lcjsKLSAg
ICAgICAgYm9vbCB1c2VDYXB0dXJlIHsgZmFsc2UgfTsKLSAgICAgICAgYm9vbCBpc1Bhc3NpdmUg
eyBmYWxzZSB9OwotICAgICAgICBib29sIGlzT25jZSB7IGZhbHNlIH07Ci0gICAgfTsKLSAgICAK
LSAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
JiBhLCBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgYikKK3ByaXZhdGU6CisgICAgUmVn
aXN0ZXJlZEV2ZW50TGlzdGVuZXIoUmVmPEV2ZW50TGlzdGVuZXI+JiYgbGlzdGVuZXIsIGNvbnN0
IE9wdGlvbnMmIG9wdGlvbnMpCisgICAgICAgIDogbV9saXN0ZW5lcihXVEZNb3ZlKGxpc3RlbmVy
KSkKKyAgICAgICAgLCBtX3VzZUNhcHR1cmUob3B0aW9ucy5jYXB0dXJlKQorICAgICAgICAsIG1f
aXNQYXNzaXZlKG9wdGlvbnMucGFzc2l2ZSkKKyAgICAgICAgLCBtX2lzT25jZShvcHRpb25zLm9u
Y2UpCiAgICAgewotICAgICAgICAvLyBPdGhlciBkYXRhIG1lbWJlcnMgYXJlIHB1cnBvc2VmdWxs
eSBub3QgY2hlY2tlZC4gVGhlIERPTSBzcGVjaWZpY2F0aW9uIHNheXMgdGhhdCB1cG9uIGFkZGlu
ZyAvIHJlbW92aW5nCi0gICAgICAgIC8vIEV2ZW50TGlzdGVuZXJzLCB3ZSBzaG91bGQgb25seSBj
aGVjayB0aGUgdHlwZSBhbmQgdGhlIGNhcHR1cmUgZmxhZy4KLSAgICAgICAgcmV0dXJuICphLmxp
c3RlbmVyID09ICpiLmxpc3RlbmVyICYmIGEudXNlQ2FwdHVyZSA9PSBiLnVzZUNhcHR1cmU7CiAg
ICAgfQogCisgICAgUmVmPEV2ZW50TGlzdGVuZXI+IG1fbGlzdGVuZXI7CisgICAgYm9vbCBtX3Vz
ZUNhcHR1cmUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1Bhc3NpdmUgeyBmYWxzZSB9OworICAg
IGJvb2wgbV9pc09uY2UgeyBmYWxzZSB9OworICAgIGJvb2wgbV93YXNSZW1vdmVkIHsgZmFsc2Ug
fTsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFJlZ2lzdGVyZWRF
dmVudExpc3RlbmVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9N
QWdlbnQuY3BwCmluZGV4IGQ5NGQ4NGJjZTU5Yzc0ZmRjMDllNDU2MzA3YzdiMmYwOTA4MTQ0YjAu
LjY0NDNiNjU2OWViN2JmY2Y0Nzc5MzNhN2JmZDg4ZTBhMmVmMzIzZjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtODIyLDggKzgyMiw4
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBuCiAgICAgc2l6ZV90IGV2ZW50SW5mb3JtYXRpb25M
ZW5ndGggPSBldmVudEluZm9ybWF0aW9uLnNpemUoKTsKICAgICBmb3IgKGF1dG8mIGluZm8gOiBl
dmVudEluZm9ybWF0aW9uKSB7CiAgICAgICAgIGZvciAoYXV0byYgbGlzdGVuZXIgOiBpbmZvLmV2
ZW50TGlzdGVuZXJWZWN0b3IpIHsKLSAgICAgICAgICAgIGlmIChsaXN0ZW5lci51c2VDYXB0dXJl
KQotICAgICAgICAgICAgICAgIGxpc3RlbmVyc0FycmF5LT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9y
RXZlbnRMaXN0ZW5lcihsaXN0ZW5lciwgaW5mby5ldmVudFR5cGUsIGluZm8ubm9kZSwgb2JqZWN0
R3JvdXApKTsKKyAgICAgICAgICAgIGlmIChsaXN0ZW5lci0+dXNlQ2FwdHVyZSgpKQorICAgICAg
ICAgICAgICAgIGxpc3RlbmVyc0FycmF5LT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0
ZW5lcigqbGlzdGVuZXIsIGluZm8uZXZlbnRUeXBlLCBpbmZvLm5vZGUsIG9iamVjdEdyb3VwKSk7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTgzMSw4ICs4MzEsOCBAQCB2b2lkIEluc3BlY3RvckRP
TUFnZW50OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBpbnQgbgogICAgIGZvciAoc2l6ZV90IGkgPSBldmVudEluZm9ybWF0aW9uTGVuZ3RoOyBpOyAt
LWkpIHsKICAgICAgICAgY29uc3QgRXZlbnRMaXN0ZW5lckluZm8mIGluZm8gPSBldmVudEluZm9y
bWF0aW9uW2kgLSAxXTsKICAgICAgICAgZm9yIChhdXRvJiBsaXN0ZW5lciA6IGluZm8uZXZlbnRM
aXN0ZW5lclZlY3RvcikgewotICAgICAgICAgICAgaWYgKCFsaXN0ZW5lci51c2VDYXB0dXJlKQot
ICAgICAgICAgICAgICAgIGxpc3RlbmVyc0FycmF5LT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yRXZl
bnRMaXN0ZW5lcihsaXN0ZW5lciwgaW5mby5ldmVudFR5cGUsIGluZm8ubm9kZSwgb2JqZWN0R3Jv
dXApKTsKKyAgICAgICAgICAgIGlmICghbGlzdGVuZXItPnVzZUNhcHR1cmUoKSkKKyAgICAgICAg
ICAgICAgICBsaXN0ZW5lcnNBcnJheS0+YWRkSXRlbShidWlsZE9iamVjdEZvckV2ZW50TGlzdGVu
ZXIoKmxpc3RlbmVyLCBpbmZvLmV2ZW50VHlwZSwgaW5mby5ub2RlLCBvYmplY3RHcm91cCkpOwog
ICAgICAgICB9CiAgICAgfQogfQpAQCAtODU4LDEzICs4NTgsMTMgQEAgdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnMoTm9kZSogbm9kZSwgVmVjdG9yPEV2ZW50TGlzdGVu
ZXJJbmZvPiYKICAgICAgICAgZm9yIChhdXRvJiB0eXBlIDogZC0+ZXZlbnRMaXN0ZW5lck1hcC5l
dmVudFR5cGVzKCkpIHsKICAgICAgICAgICAgIGNvbnN0IEV2ZW50TGlzdGVuZXJWZWN0b3ImIGxp
c3RlbmVycyA9IGFuY2VzdG9yLT5nZXRFdmVudExpc3RlbmVycyh0eXBlKTsKICAgICAgICAgICAg
IEV2ZW50TGlzdGVuZXJWZWN0b3IgZmlsdGVyZWRMaXN0ZW5lcnM7Ci0gICAgICAgICAgICBmaWx0
ZXJlZExpc3RlbmVycy5yZXNlcnZlQ2FwYWNpdHkobGlzdGVuZXJzLnNpemUoKSk7CisgICAgICAg
ICAgICBmaWx0ZXJlZExpc3RlbmVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxpc3RlbmVycy5z
aXplKCkpOwogICAgICAgICAgICAgZm9yIChhdXRvJiBsaXN0ZW5lciA6IGxpc3RlbmVycykgewot
ICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lci5saXN0ZW5lci0+dHlwZSgpID09IEV2ZW50TGlz
dGVuZXI6OkpTRXZlbnRMaXN0ZW5lclR5cGUpCi0gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVk
TGlzdGVuZXJzLmFwcGVuZChsaXN0ZW5lcik7CisgICAgICAgICAgICAgICAgaWYgKGxpc3RlbmVy
LT5saXN0ZW5lcigpLnR5cGUoKSA9PSBFdmVudExpc3RlbmVyOjpKU0V2ZW50TGlzdGVuZXJUeXBl
KQorICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZExpc3RlbmVycy51bmNoZWNrZWRBcHBlbmQo
bGlzdGVuZXIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFmaWx0ZXJlZExpc3Rl
bmVycy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgZXZlbnRJbmZvcm1hdGlvbi5hcHBlbmQo
RXZlbnRMaXN0ZW5lckluZm8oYW5jZXN0b3IsIHR5cGUsIGZpbHRlcmVkTGlzdGVuZXJzKSk7Cisg
ICAgICAgICAgICAgICAgZXZlbnRJbmZvcm1hdGlvbi5hcHBlbmQoRXZlbnRMaXN0ZW5lckluZm8o
YW5jZXN0b3IsIHR5cGUsIFdURk1vdmUoZmlsdGVyZWRMaXN0ZW5lcnMpKSk7CiAgICAgICAgIH0K
ICAgICB9CiB9CkBAIC0xNDc3LDcgKzE0NzcsNyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPj4gSW5zcGVjdG9yRE9NQQog
CiBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPiBJbnNwZWN0b3JE
T01BZ2VudDo6YnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGNvbnN0IFJlZ2lzdGVyZWRFdmVu
dExpc3RlbmVyJiByZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciwgY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUsIE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXBJZCkKIHsKLSAg
ICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lciA9IHJlZ2lzdGVyZWRFdmVudExp
c3RlbmVyLmxpc3RlbmVyOworICAgIFJlZjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyID0g
cmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIubGlzdGVuZXIoKTsKIAogICAgIEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSA9IG51bGxwdHI7CiAgICAgSlNDOjpKU09iamVjdCogaGFuZGxlciA9IG51bGxwdHI7
CkBAIC0xNDg2LDcgKzE0ODYsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVu
dExpc3RlbmVyPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JFdgogICAgIGludCBj
b2x1bW5OdW1iZXIgPSAwOwogICAgIFN0cmluZyBzY3JpcHRJRDsKICAgICBTdHJpbmcgc291cmNl
TmFtZTsKLSAgICBpZiAoYXV0byBzY3JpcHRMaXN0ZW5lciA9IEpTRXZlbnRMaXN0ZW5lcjo6Y2Fz
dChldmVudExpc3RlbmVyLmdldCgpKSkgeworICAgIGlmIChhdXRvIHNjcmlwdExpc3RlbmVyID0g
SlNFdmVudExpc3RlbmVyOjpjYXN0KGV2ZW50TGlzdGVuZXIucHRyKCkpKSB7CiAgICAgICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0TGlzdGVuZXItPmlzb2xhdGVkV29ybGQoKS52bSgp
KTsKICAgICAgICAgc3RhdGUgPSBleGVjU3RhdGVGcm9tTm9kZShzY3JpcHRMaXN0ZW5lci0+aXNv
bGF0ZWRXb3JsZCgpLCAmbm9kZS0+ZG9jdW1lbnQoKSk7CiAgICAgICAgIGhhbmRsZXIgPSBzY3Jp
cHRMaXN0ZW5lci0+anNGdW5jdGlvbigmbm9kZS0+ZG9jdW1lbnQoKSk7CkBAIC0xNTA3LDcgKzE1
MDcsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPiBJbnNw
ZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JFdgogCiAgICAgYXV0byB2YWx1ZSA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKCkKICAgICAgICAgLnNl
dFR5cGUoZXZlbnRUeXBlKQotICAgICAgICAuc2V0VXNlQ2FwdHVyZShyZWdpc3RlcmVkRXZlbnRM
aXN0ZW5lci51c2VDYXB0dXJlKQorICAgICAgICAuc2V0VXNlQ2FwdHVyZShyZWdpc3RlcmVkRXZl
bnRMaXN0ZW5lci51c2VDYXB0dXJlKCkpCiAgICAgICAgIC5zZXRJc0F0dHJpYnV0ZShldmVudExp
c3RlbmVyLT5pc0F0dHJpYnV0ZSgpKQogICAgICAgICAuc2V0Tm9kZUlkKHB1c2hOb2RlUGF0aFRv
RnJvbnRlbmQobm9kZSkpCiAgICAgICAgIC5zZXRIYW5kbGVyQm9keShib2R5KQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCAzNzQ0Y2IxYWNiNDUw
ZjdkMGEzYzNhNTQwYjAwYjM2ZDk4NmQ2MTBjLi5jYzk3MTVjMzdiYmU1MTNmNWE0MDdmZDQ5Njk0
MmI3ZmVkYzgxZDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9N
QWdlbnQuaApAQCAtODAsMTAgKzgwLDEwIEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwog
dHlwZWRlZiBpbnQgQmFja2VuZE5vZGVJZDsKIAogc3RydWN0IEV2ZW50TGlzdGVuZXJJbmZvIHsK
LSAgICBFdmVudExpc3RlbmVySW5mbyhOb2RlKiBub2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSwgY29uc3QgRXZlbnRMaXN0ZW5lclZlY3RvciYgZXZlbnRMaXN0ZW5lclZlY3RvcikK
KyAgICBFdmVudExpc3RlbmVySW5mbyhOb2RlKiBub2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSwgRXZlbnRMaXN0ZW5lclZlY3RvciYmIGV2ZW50TGlzdGVuZXJWZWN0b3IpCiAgICAg
ICAgIDogbm9kZShub2RlKQogICAgICAgICAsIGV2ZW50VHlwZShldmVudFR5cGUpCi0gICAgICAg
ICwgZXZlbnRMaXN0ZW5lclZlY3RvcihldmVudExpc3RlbmVyVmVjdG9yKQorICAgICAgICAsIGV2
ZW50TGlzdGVuZXJWZWN0b3IoV1RGTW92ZShldmVudExpc3RlbmVyVmVjdG9yKSkKICAgICB7CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKaW5kZXggYTFkNzdlNjMzNzJhMzAzNjM2
NWNlNWQ3ZGZkYmZiZDI2NTc5NGY3Zi4uZmI3OWJkOWUyNGFjNWRkYTgwYmFhYjNlMGM4NzlmMDYx
MmJiZTI0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcApAQCAtNTg0LDExICs1ODQsOCBA
QCBzdGF0aWMgYm9vbCBoYXNMb2FkTGlzdGVuZXIoRWxlbWVudCogZWxlbWVudCkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICBmb3IgKGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRPclNoYWRv
d0hvc3RFbGVtZW50KCk7IGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRPclNoYWRv
d0hvc3RFbGVtZW50KCkpIHsKLSAgICAgICAgY29uc3QgRXZlbnRMaXN0ZW5lclZlY3RvciYgZW50
cnkgPSBlbGVtZW50LT5nZXRFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkubG9hZEV2ZW50KTsK
LSAgICAgICAgZm9yIChhdXRvJiBsaXN0ZW5lciA6IGVudHJ5KSB7Ci0gICAgICAgICAgICBpZiAo
bGlzdGVuZXIudXNlQ2FwdHVyZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQorICAgICAgICBpZiAoZWxlbWVudC0+aGFzQ2FwdHVyaW5nRXZlbnRMaXN0ZW5lcnMoZXZl
bnROYW1lcygpLmxvYWRFdmVudCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
ICAgICByZXR1cm4gZmFsc2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286035</attachid>
            <date>2016-08-14 15:57:35 -0700</date>
            <delta_ts>2016-08-14 17:49:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160828-20160814155551.patch</filename>
            <type>text/plain</type>
            <size>41381</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0NDUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDg4OGUxMjRjODA4M2Ni
NGYwNDVmOTcxNzNkNGRlN2Y2NjVhMmVkMi4uZTM4ZGEwYmI1NGE3ZjlkYjcxNjAzYzQwMWJiZGRl
MDQ0ZTFmNDllMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBACisyMDE2LTA4LTE0ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQWxpZ24gdGhlIGV2ZW50IGxp
c3RlbmVyIGZpcmluZyBjb2RlIHdpdGggdGhlIGxhdGVzdCBET00gU3BlY2lmaWNhdGlvbiBhbmQg
c2ltcGxpZnkgaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MDgyOAorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAg
IEFsaWduIHRoZSBldmVudCBsaXN0ZW5lciBmaXJpbmcgY29kZSB3aXRoIHRoZSBsYXRlc3QgRE9N
IHNwZWNpZmljYXRpb246CisgICAgICAgIC0gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNj
b25jZXB0LWV2ZW50LWxpc3RlbmVyLWludm9rZQorICAgICAgICAtIGh0dHBzOi8vZG9tLnNwZWMu
d2hhdHdnLm9yZy8jY29uY2VwdC1ldmVudC1saXN0ZW5lci1pbm5lci1pbnZva2UKKyAgICAgICAg
LSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZXZlbnQtbGlzdGVuZXIKKwor
ICAgICAgICBUaGUgZm9sbG93aW5nIGNoYW5nZXMgd2VyZSBtYWRlOgorICAgICAgICAxLiBSZWdp
c3RlcmVkRXZlbnRMaXN0ZW5lciAoZXF1aXZhbGVudCB0byAiZXZlbnQgbGlzdGVuZXIiIGluIHRo
ZSBzcGVjKQorICAgICAgICAgICBpcyBub3cgUmVmQ291bnRlZAorICAgICAgICAyLiBSZWdpc3Rl
cmVkRXZlbnRMaXN0ZW5lciBub3cgaGFzIGEgd2FzUmVtb3ZlZCBmbGFnIGFzIGluIHNwZWNpZmlj
YXRpb24uCisgICAgICAgIDMuIGZpcmVFdmVudExpc3RlbmVycygpIGlzIG5vdyBpdGVyYXRpbmcg
b3ZlciBhIGNvcHkgb2YgdGhlIGV2ZW50CisgICAgICAgICAgIGxpc3RlbmVycywgYXMgaW4gdGhl
IHNwZWNpZmljYXRpb24uIFdlIHJlbHkgb24gdGhlIHdhc1JlbW92ZWQgcmVtb3ZlZAorICAgICAg
ICAgICBmbGFnIHRvIGF2b2lkIGV4ZWN1dGluZyBldmVudCBsaXN0ZW5lcnMgdGhhdCB3ZXJlIHJl
bW92ZWQgd2hpbGUgd2UKKyAgICAgICAgICAgaXRlcmF0ZS4KKworICAgICAgICBQcmV2aW91c2x5
LCB0aGUgY29kZSB3YXMgbW9kaWZ5aW5nIHRoZSBldmVudCBsaXN0ZW5lcnMgdmVjdG9yIHdlIHdl
cmUKKyAgICAgICAgaXRlcmF0aW5nIG9uLiBEb2luZyBzbyBzYWZlbHkgbGVhZCB0byBjb21wbGlj
YXRlZCBhbmQgZXJyb3IgcHJvbmUgY29kZS4KKyAgICAgICAgVGhlIG5ldyBjb2RlIGlzIG11Y2gg
c2ltcGxlciBhbmQgZWFzaWVyIHRvIHJlYXNvbiBhYm91dC4KKworICAgICAgICBUaGlzIGNoYW5n
ZSBzZWVtcyB0byBiZSBwZXJmLW5ldXRyYWwgb24gU3BlZWRvbWV0ZXIuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLCBubyB3ZWItZXhwb3NlZCBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBD
TWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDb21tYW5kTGluZUFQSUhvc3RDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Z2V0SlNMaXN0ZW5lckZ1bmN0aW9ucyk6CisgICAgICAgICog
ZG9tL0RPTUFsbEluT25lLmNwcDoKKyAgICAgICAgKiBkb20vRXZlbnRMaXN0ZW5lck1hcC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3RlbmVyTWFwOjphc3NlcnROb0FjdGl2ZUl0ZXJh
dG9ycyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3RlbmVyTWFwOjpjb250YWluc0NhcHR1
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3RlbmVyTWFwOjpjb250YWluc0FjdGl2
ZSk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kTGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRMaXN0ZW5lck1hcDo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OnJlbW92ZUxpc3RlbmVy
RnJvbVZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3RlbmVyTWFwOjpyZW1vdmUp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6ZmluZCk6CisgICAgICAgIChX
ZWJDb3JlOjpyZW1vdmVGaXJzdExpc3RlbmVyQ3JlYXRlZEZyb21NYXJrdXApOgorICAgICAgICAo
V2ViQ29yZTo6Y29weUxpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6Y29weUV2ZW50TGlzdGVuZXJzTm90Q3Jl
YXRlZEZyb21NYXJrdXBUb1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3RlbmVy
SXRlcmF0b3I6Om5leHRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3RlbmVy
TWFwOjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgICogZG9tL0V2ZW50TGlzdGVuZXJNYXAuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXJNYXA6OmNvbnRhaW5zKToKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50TGlzdGVuZXJNYXA6OmFzc2VydE5vQWN0aXZlSXRlcmF0b3JzKToKKyAg
ICAgICAgKiBkb20vRXZlbnRUYXJnZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJn
ZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXQ6
OmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlyaW5nRXZl
bnRMaXN0ZW5lcnNTY29wZTo6RmlyaW5nRXZlbnRMaXN0ZW5lcnNTY29wZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGaXJpbmdFdmVudExpc3RlbmVyc1Njb3BlOjp+RmlyaW5nRXZlbnRMaXN0ZW5lcnNT
Y29wZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldDo6ZmlyZUV2ZW50TGlzdGVuZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjpzZXRBdHRyaWJ1dGVFdmVudExpc3Rl
bmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjpoYXNBY3RpdmVF
dmVudExpc3RlbmVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldDo6
ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50VGFyZ2V0OjpnZXRFdmVudExpc3RlbmVycyk6IERlbGV0ZWQuCisgICAgICAgICogZG9tL0V2
ZW50VGFyZ2V0Lmg6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldDo6aXNGaXJpbmdFdmVu
dExpc3RlbmVycyk6CisgICAgICAgICogZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBkb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOjpPcHRpb25zOjpPcHRpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI6Omxpc3RlbmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOjp1c2VDYXB0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOjppc1Bhc3NpdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI6OmlzT25jZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjo6d2FzUmVtb3ZlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjo6bWFya0FzUmVtb3ZlZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjo6UmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVycyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JFdmVu
dExpc3RlbmVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXJJbmZvOjpFdmVudExpc3RlbmVySW5mbyk6Cisg
ICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFzTG9hZExp
c3RlbmVyKToKKwogMjAxNi0wOC0xNCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBw
bGUuY29tPgogCiAgICAgICAgIEZpeCBHVEsgRGVidWcgYm90cyBhZnRlciByMjA0NDAwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0CmluZGV4IDIxYmY4OTE0MjczZWZkMGRjNmZiMDUwMzE5ZWU1OGY2NGVlMWQ0
Y2IuLjY2NjFhY2RhZjAyM2Q0MGM5NTJlMjgwMzI4MTIxMDBiM2ZkYjQ3ZjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CkBAIC0xNTAzLDcgKzE1MDMsNiBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAg
ZG9tL1F1YWxpZmllZE5hbWUuY3BwCiAgICAgZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcAogICAg
IGRvbS9SYW5nZS5jcHAKLSAgICBkb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuY3BwCiAgICAg
ZG9tL1Njb3BlZEV2ZW50UXVldWUuY3BwCiAgICAgZG9tL1NjcmlwdEVsZW1lbnQuY3BwCiAgICAg
ZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZmU0NWRhZjgzNWNhNmM3ZWI0YmZj
ODNmZmJjYTQ5NjJkNWZhZjljZi4uNWNiNjM4MmVhYmU0ZDdmYjIwZTQ5YjhjZWYyZDZjY2E4M2Uy
ZDA2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMzA2Niw3ICszMDY2LDYgQEAKIAkJODUwMzFCNDgwQTQ0RUZDNzAwRjk5MkUw
IC8qIE1vdXNlUmVsYXRlZEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NTAzMUIzMjBBNDRFRkM3MDBGOTkyRTAgLyogTW91c2VSZWxhdGVkRXZl
bnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4
NTAzMUI0OTBBNDRFRkM3MDBGOTkyRTAgLyogTXV0YXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTAzMUIzMzBBNDRFRkM3MDBGOTky
RTAgLyogTXV0YXRpb25FdmVudC5jcHAgKi87IH07CiAJCTg1MDMxQjRBMEE0NEVGQzcwMEY5OTJF
MCAvKiBNdXRhdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4NTAzMUIzNDBBNDRFRkM3MDBGOTkyRTAgLyogTXV0YXRpb25FdmVudC5oICov
OyB9OwotCQk4NTAzMUI0QjBBNDRFRkM3MDBGOTkyRTAgLyogUmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODUw
MzFCMzUwQTQ0RUZDNzAwRjk5MkUwIC8qIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNwcCAqLzsg
fTsKIAkJODUwMzFCNEMwQTQ0RUZDNzAwRjk5MkUwIC8qIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTAzMUIz
NjBBNDRFRkM3MDBGOTkyRTAgLyogUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NTAzMUI0RDBBNDRFRkM3
MDBGOTkyRTAgLyogVUlFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NTAzMUIzNzBBNDRFRkM3MDBGOTkyRTAgLyogVUlFdmVudC5jcHAgKi87
IH07CiAJCTg1MDMxQjRFMEE0NEVGQzcwMEY5OTJFMCAvKiBVSUV2ZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTAzMUIzODBBNDRFRkM3MDBGOTky
RTAgLyogVUlFdmVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0xMDUwNyw3ICsxMDUwNiw2IEBACiAJCTg1MDMxQjMyMEE0NEVGQzcwMEY5OTJF
MCAvKiBNb3VzZVJlbGF0ZWRFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTW91c2VSZWxhdGVkRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODUw
MzFCMzMwQTQ0RUZDNzAwRjk5MkUwIC8qIE11dGF0aW9uRXZlbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE11dGF0aW9uRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4NTAzMUIzNDBBNDRFRkM3MDBGOTkyRTAgLyogTXV0YXRpb25FdmVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTXV0YXRpb25FdmVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NTAzMUIzNTBBNDRFRkM3MDBGOTkyRTAgLyog
UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODUwMzFCMzYwQTQ0RUZDNzAwRjk5MkUwIC8qIFJlZ2lzdGVyZWRFdmVudExp
c3RlbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWdpc3RlcmVkRXZl
bnRMaXN0ZW5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NTAzMUIzNzBBNDRF
RkM3MDBGOTkyRTAgLyogVUlFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVUlFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg1MDMx
QjM4MEE0NEVGQzcwMEY5OTJFMCAvKiBVSUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBVSUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDE5
NSw3ICsyNDE5Myw2IEBACiAJCQkJOTM2REQwM0EwOUNFQUMyNzAwNTZBRThDIC8qIFJhbmdlLmlk
bCAqLywKIAkJCQk5M0Q5RDUzQjBEQTI3RTE4MDA3NzIxNkMgLyogUmFuZ2VCb3VuZGFyeVBvaW50
LmggKi8sCiAJCQkJQTg0RDgyN0IxMUQzMzNFRDAwOTcyOTkwIC8qIFJhd0RhdGFEb2N1bWVudFBh
cnNlci5oICovLAotCQkJCTg1MDMxQjM1MEE0NEVGQzcwMEY5OTJFMCAvKiBSZWdpc3RlcmVkRXZl
bnRMaXN0ZW5lci5jcHAgKi8sCiAJCQkJODUwMzFCMzYwQTQ0RUZDNzAwRjk5MkUwIC8qIFJlZ2lz
dGVyZWRFdmVudExpc3RlbmVyLmggKi8sCiAJCQkJQTc2RTVGN0UxMzVFMERDRjAwQTY5ODM3IC8q
IFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaCAqLywKIAkJCQk0OTk4QUVDNDEzRjlEMEVBMDA5MEIx
QUEgLyogUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2suaCAqLywKQEAgLTMwODc5LDcgKzMw
ODc2LDYgQEAKIAkJCQkyRUM0MURFNDFDMDQxMEEzMDBEMjk0RkUgLyogUmVhbHRpbWVNZWRpYVNv
dXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZENDVBOTVB
MTc1RDQxNzEwMEMyMUVDOCAvKiBSZWN0YW5nbGVTaGFwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQ0FCNDE4MTEzRTM1NkU4MDBEOEFBRjMgLyogUmVnaW9uLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTg1MDMxQjRCMEE0NEVGQzcwMEY5OTJFMCAvKiBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlDREZDMzYwNTE4Q0E2MUMyMDAyNkU1NkYgLyogUmVtb3Rl
Q29tbWFuZExpc3RlbmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNERkMzNjA3MThDQTY5NkMw
MDI2RTU2RiAvKiBSZW1vdGVDb21tYW5kTGlzdGVuZXJJT1MubW0gaW4gU291cmNlcyAqLywKIAkJ
CQlDRDhBQ0E4ODFEMjM3QUEyMDBFQ0M1OUUgLyogUmVtb3RlQ29tbWFuZExpc3RlbmVyTWFjLm1t
IGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NvbW1hbmRMaW5lQVBJSG9zdEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NvbW1hbmRMaW5lQVBJSG9zdEN1c3RvbS5jcHAKaW5kZXggYTBjYTgzZWMxYThlZDAzODlk
ZjkwOWNjYWUyYzg4NGJlMzI0ZTUxYS4uNTc1MTk2MmMwYjJkMzBiMzgxMDFlZjIwYWVjMWEwNTc0
YzcyNzJiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDb21tYW5k
TGluZUFQSUhvc3RDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q29tbWFuZExpbmVBUElIb3N0Q3VzdG9tLmNwcApAQCAtNzMsNyArNzMsNyBAQCBzdGF0aWMgSlNB
cnJheSogZ2V0SlNMaXN0ZW5lckZ1bmN0aW9ucyhFeGVjU3RhdGUmIHN0YXRlLCBEb2N1bWVudCog
ZG9jdW1lbnQsIGNvbgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBzaXplX3QgaGFuZGxl
cnNDb3VudCA9IGxpc3RlbmVySW5mby5ldmVudExpc3RlbmVyVmVjdG9yLnNpemUoKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMCwgb3V0cHV0SW5kZXggPSAwOyBpIDwgaGFuZGxlcnNDb3VudDsgKytp
KSB7Ci0gICAgICAgIGNvbnN0IEpTRXZlbnRMaXN0ZW5lcioganNMaXN0ZW5lciA9IEpTRXZlbnRM
aXN0ZW5lcjo6Y2FzdChsaXN0ZW5lckluZm8uZXZlbnRMaXN0ZW5lclZlY3RvcltpXS5saXN0ZW5l
ci5nZXQoKSk7CisgICAgICAgIGNvbnN0IEpTRXZlbnRMaXN0ZW5lcioganNMaXN0ZW5lciA9IEpT
RXZlbnRMaXN0ZW5lcjo6Y2FzdCgmbGlzdGVuZXJJbmZvLmV2ZW50TGlzdGVuZXJWZWN0b3JbaV0t
Pmxpc3RlbmVyKCkpOwogICAgICAgICBpZiAoIWpzTGlzdGVuZXIpIHsKICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgY29udGludWU7CkBAIC04OSw3ICs4OSw3
IEBAIHN0YXRpYyBKU0FycmF5KiBnZXRKU0xpc3RlbmVyRnVuY3Rpb25zKEV4ZWNTdGF0ZSYgc3Rh
dGUsIERvY3VtZW50KiBkb2N1bWVudCwgY29uCiAKICAgICAgICAgSlNPYmplY3QqIGxpc3RlbmVy
RW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwogICAgICAgICBsaXN0ZW5lckVu
dHJ5LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAibGlzdGVu
ZXIiKSwgZnVuY3Rpb24pOwotICAgICAgICBsaXN0ZW5lckVudHJ5LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidXNlQ2FwdHVyZSIpLCBqc0Jvb2xlYW4obGlz
dGVuZXJJbmZvLmV2ZW50TGlzdGVuZXJWZWN0b3JbaV0udXNlQ2FwdHVyZSkpOworICAgICAgICBs
aXN0ZW5lckVudHJ5LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LCAidXNlQ2FwdHVyZSIpLCBqc0Jvb2xlYW4obGlzdGVuZXJJbmZvLmV2ZW50TGlzdGVuZXJWZWN0
b3JbaV0tPnVzZUNhcHR1cmUoKSkpOwogICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KCZz
dGF0ZSwgb3V0cHV0SW5kZXgrKywgSlNWYWx1ZShsaXN0ZW5lckVudHJ5KSk7CiAgICAgfQogICAg
IHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5P
bmUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcAppbmRleCBkM2Q1ZWEz
OGJiMGM5ZDdlMmZlNzAzNWUwYzFmMTU2MjNlODY1NmQ2Li5jMGJmNGZjMDIzYThmMmQ1YmY5NzRl
ZTdhYjY0ZDk4MWNmOThmN2Y1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxs
SW5PbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01BbGxJbk9uZS5jcHAKQEAgLTEy
OCw3ICsxMjgsNiBAQAogLy8gI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuY3BwIgogI2luY2x1ZGUg
IlJhZGlvQnV0dG9uR3JvdXBzLmNwcCIKICNpbmNsdWRlICJSYW5nZS5jcHAiCi0jaW5jbHVkZSAi
UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuY3BwIgogI2luY2x1ZGUgIlNjb3BlZEV2ZW50UXVldWUu
Y3BwIgogI2luY2x1ZGUgIlNjcmlwdEVsZW1lbnQuY3BwIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlz
dGVuZXJNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwCmlu
ZGV4IDdlNzlhZWJiNjgzZmQ5NmI1MDU0ZTYxNDU4NTMyMjdmNjUyOTU1M2IuLjliNDY2OTRjYmUx
ZWVjMjcwZmE1ODlkMGNhOTYxZmU2NmJhNTllZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudExpc3RlbmVyTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRM
aXN0ZW5lck1hcC5jcHAKQEAgLTQ1LDcgKzQ1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdURjsKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmbmRlZiBOREVCVUcKLXZvaWQgRXZlbnRMaXN0ZW5lck1h
cDo6YXNzZXJ0Tm9BY3RpdmVJdGVyYXRvcnMoKQordm9pZCBFdmVudExpc3RlbmVyTWFwOjphc3Nl
cnROb0FjdGl2ZUl0ZXJhdG9ycygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFtX2FjdGl2ZUl0ZXJh
dG9yQ291bnQpOwogfQpAQCAtNTUsMzcgKzU1LDI4IEBAIEV2ZW50TGlzdGVuZXJNYXA6OkV2ZW50
TGlzdGVuZXJNYXAoKQogewogfQogCi1ib29sIEV2ZW50TGlzdGVuZXJNYXA6OmNvbnRhaW5zKGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKSBjb25zdAotewotICAgIGZvciAoYXV0byYgZW50
cnkgOiBtX2VudHJpZXMpIHsKLSAgICAgICAgaWYgKGVudHJ5LmZpcnN0ID09IGV2ZW50VHlwZSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
IGJvb2wgRXZlbnRMaXN0ZW5lck1hcDo6Y29udGFpbnNDYXB0dXJpbmcoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUpIGNvbnN0CiB7Ci0gICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fZW50cmll
cykgewotICAgICAgICBpZiAoZW50cnkuZmlyc3QgPT0gZXZlbnRUeXBlKSB7Ci0gICAgICAgICAg
ICBmb3IgKGF1dG8mIGV2ZW50TGlzdGVuZXIgOiAqZW50cnkuc2Vjb25kKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGV2ZW50TGlzdGVuZXIudXNlQ2FwdHVyZSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBhdXRvKiBsaXN0ZW5l
cnMgPSBmaW5kKGV2ZW50VHlwZSk7CisgICAgaWYgKCFsaXN0ZW5lcnMpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGZvciAoYXV0byYgZXZlbnRMaXN0ZW5lciA6ICpsaXN0ZW5lcnMpIHsK
KyAgICAgICAgaWYgKGV2ZW50TGlzdGVuZXItPnVzZUNhcHR1cmUoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgRXZlbnRMaXN0
ZW5lck1hcDo6Y29udGFpbnNBY3RpdmUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpIGNv
bnN0CiB7Ci0gICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fZW50cmllcykgewotICAgICAgICBpZiAo
ZW50cnkuZmlyc3QgPT0gZXZlbnRUeXBlKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGV2ZW50
TGlzdGVuZXIgOiAqZW50cnkuc2Vjb25kKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFldmVudExp
c3RlbmVyLmlzUGFzc2l2ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBhdXRvKiBsaXN0ZW5lcnMgPSBmaW5kKGV2ZW50VHlw
ZSk7CisgICAgaWYgKCFsaXN0ZW5lcnMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZv
ciAoYXV0byYgZXZlbnRMaXN0ZW5lciA6ICpsaXN0ZW5lcnMpIHsKKyAgICAgICAgaWYgKCFldmVu
dExpc3RlbmVyLT5pc1Bhc3NpdmUoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0xMDgsNDcgKzk5LDUxIEBAIFZlY3RvcjxBdG9taWNT
dHJpbmc+IEV2ZW50TGlzdGVuZXJNYXA6OmV2ZW50VHlwZXMoKSBjb25zdAogICAgIHJldHVybiB0
eXBlczsKIH0KIAotc3RhdGljIGJvb2wgYWRkTGlzdGVuZXJUb1ZlY3RvcihFdmVudExpc3RlbmVy
VmVjdG9yKiB2ZWN0b3IsIFJlZjxFdmVudExpc3RlbmVyPiYmIGxpc3RlbmVyLCBjb25zdCBSZWdp
c3RlcmVkRXZlbnRMaXN0ZW5lcjo6T3B0aW9ucyYgb3B0aW9ucykKK3N0YXRpYyBpbmxpbmUgc2l6
ZV90IGZpbmRMaXN0ZW5lcihjb25zdCBFdmVudExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMsIEV2
ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCiB7Ci0gICAgUmVnaXN0ZXJl
ZEV2ZW50TGlzdGVuZXIgcmVnaXN0ZXJlZExpc3RlbmVyKFdURk1vdmUobGlzdGVuZXIpLCBvcHRp
b25zKTsKLQotICAgIGlmICh2ZWN0b3ItPmZpbmQocmVnaXN0ZXJlZExpc3RlbmVyKSAhPSBub3RG
b3VuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBEdXBsaWNhdGUgbGlzdGVuZXIuCi0KLSAg
ICB2ZWN0b3ItPmFwcGVuZChyZWdpc3RlcmVkTGlzdGVuZXIpOwotICAgIHJldHVybiB0cnVlOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdGVuZXJzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGF1dG8mIHJlZ2lzdGVyZWRMaXN0ZW5lciA9IGxpc3RlbmVyc1tpXTsKKyAgICAgICAgaWYg
KHJlZ2lzdGVyZWRMaXN0ZW5lci0+bGlzdGVuZXIoKSA9PSBsaXN0ZW5lciAmJiByZWdpc3RlcmVk
TGlzdGVuZXItPnVzZUNhcHR1cmUoKSA9PSB1c2VDYXB0dXJlKQorICAgICAgICAgICAgcmV0dXJu
IGk7CisgICAgfQorICAgIHJldHVybiBub3RGb3VuZDsKIH0KIAogYm9vbCBFdmVudExpc3RlbmVy
TWFwOjphZGQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFJlZjxFdmVudExpc3RlbmVy
PiYmIGxpc3RlbmVyLCBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjo6T3B0aW9ucyYgb3B0
aW9ucykKIHsKICAgICBhc3NlcnROb0FjdGl2ZUl0ZXJhdG9ycygpOwogCi0gICAgZm9yIChhdXRv
JiBlbnRyeSA6IG1fZW50cmllcykgewotICAgICAgICBpZiAoZW50cnkuZmlyc3QgPT0gZXZlbnRU
eXBlKQotICAgICAgICAgICAgcmV0dXJuIGFkZExpc3RlbmVyVG9WZWN0b3IoZW50cnkuc2Vjb25k
LmdldCgpLCBXVEZNb3ZlKGxpc3RlbmVyKSwgb3B0aW9ucyk7CisgICAgaWYgKGF1dG8qIGxpc3Rl
bmVycyA9IGZpbmQoZXZlbnRUeXBlKSkgeworICAgICAgICBpZiAoZmluZExpc3RlbmVyKCpsaXN0
ZW5lcnMsIGxpc3RlbmVyLCBvcHRpb25zLmNhcHR1cmUpICE9IG5vdEZvdW5kKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBEdXBsaWNhdGUgbGlzdGVuZXIuCisgICAgICAgIGxpc3RlbmVy
cy0+YXBwZW5kKFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOjpjcmVhdGUoV1RGTW92ZShsaXN0ZW5l
ciksIG9wdGlvbnMpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgbV9lbnRy
aWVzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihldmVudFR5cGUsIHN0ZDo6bWFrZV91bmlxdWU8RXZl
bnRMaXN0ZW5lclZlY3Rvcj4oKSkpOwotICAgIHJldHVybiBhZGRMaXN0ZW5lclRvVmVjdG9yKG1f
ZW50cmllcy5sYXN0KCkuc2Vjb25kLmdldCgpLCBXVEZNb3ZlKGxpc3RlbmVyKSwgb3B0aW9ucyk7
CisgICAgYXV0byBsaXN0ZW5lcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPEV2ZW50TGlzdGVuZXJWZWN0
b3I+KCk7CisgICAgbGlzdGVuZXJzLT51bmNoZWNrZWRBcHBlbmQoUmVnaXN0ZXJlZEV2ZW50TGlz
dGVuZXI6OmNyZWF0ZShXVEZNb3ZlKGxpc3RlbmVyKSwgb3B0aW9ucykpOworICAgIG1fZW50cmll
cy5hcHBlbmQoeyBldmVudFR5cGUsIFdURk1vdmUobGlzdGVuZXJzKSB9KTsKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgcmVtb3ZlTGlzdGVuZXJGcm9tVmVjdG9yKEV2ZW50TGlz
dGVuZXJWZWN0b3IqIGxpc3RlbmVyVmVjdG9yLCBFdmVudExpc3RlbmVyJiBsaXN0ZW5lciwgYm9v
bCB1c2VDYXB0dXJlLCBzaXplX3QmIGluZGV4T2ZSZW1vdmVkTGlzdGVuZXIpCitzdGF0aWMgYm9v
bCByZW1vdmVMaXN0ZW5lckZyb21WZWN0b3IoRXZlbnRMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJz
LCBFdmVudExpc3RlbmVyJiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQogewotICAgIFJlZ2lz
dGVyZWRFdmVudExpc3RlbmVyIHJlZ2lzdGVyZWRMaXN0ZW5lcihsaXN0ZW5lciwgdXNlQ2FwdHVy
ZSk7Ci0gICAgaW5kZXhPZlJlbW92ZWRMaXN0ZW5lciA9IGxpc3RlbmVyVmVjdG9yLT5maW5kKHJl
Z2lzdGVyZWRMaXN0ZW5lcik7Ci0gICAgaWYgKGluZGV4T2ZSZW1vdmVkTGlzdGVuZXIgPT0gbm90
Rm91bmQpCisgICAgc2l6ZV90IGluZGV4T2ZSZW1vdmVkTGlzdGVuZXIgPSBmaW5kTGlzdGVuZXIo
bGlzdGVuZXJzLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7CisgICAgaWYgKFVOTElLRUxZKGluZGV4
T2ZSZW1vdmVkTGlzdGVuZXIgPT0gbm90Rm91bmQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgbGlzdGVuZXJWZWN0b3ItPnJlbW92ZShpbmRleE9mUmVtb3ZlZExpc3RlbmVyKTsKKworICAg
IGxpc3RlbmVyc1tpbmRleE9mUmVtb3ZlZExpc3RlbmVyXS0+bWFya0FzUmVtb3ZlZCgpOworICAg
IGxpc3RlbmVycy5yZW1vdmUoaW5kZXhPZlJlbW92ZWRMaXN0ZW5lcik7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgRXZlbnRMaXN0ZW5lck1hcDo6cmVtb3ZlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyJiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlLCBz
aXplX3QmIGluZGV4T2ZSZW1vdmVkTGlzdGVuZXIpCitib29sIEV2ZW50TGlzdGVuZXJNYXA6OnJl
bW92ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYgbGlzdGVu
ZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsKICAgICBhc3NlcnROb0FjdGl2ZUl0ZXJhdG9ycygpOwog
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZW50cmllcy5zaXplKCk7ICsraSkgewog
ICAgICAgICBpZiAobV9lbnRyaWVzW2ldLmZpcnN0ID09IGV2ZW50VHlwZSkgewotICAgICAgICAg
ICAgYm9vbCB3YXNSZW1vdmVkID0gcmVtb3ZlTGlzdGVuZXJGcm9tVmVjdG9yKG1fZW50cmllc1tp
XS5zZWNvbmQuZ2V0KCksIGxpc3RlbmVyLCB1c2VDYXB0dXJlLCBpbmRleE9mUmVtb3ZlZExpc3Rl
bmVyKTsKKyAgICAgICAgICAgIGJvb2wgd2FzUmVtb3ZlZCA9IHJlbW92ZUxpc3RlbmVyRnJvbVZl
Y3RvcigqbV9lbnRyaWVzW2ldLnNlY29uZCwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpOwogICAgICAg
ICAgICAgaWYgKG1fZW50cmllc1tpXS5zZWNvbmQtPmlzRW1wdHkoKSkKICAgICAgICAgICAgICAg
ICBtX2VudHJpZXMucmVtb3ZlKGkpOwogICAgICAgICAgICAgcmV0dXJuIHdhc1JlbW92ZWQ7CkBA
IC0xNTgsNyArMTUzLDcgQEAgYm9vbCBFdmVudExpc3RlbmVyTWFwOjpyZW1vdmUoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImIGxpc3QKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLUV2ZW50TGlzdGVuZXJWZWN0b3IqIEV2ZW50TGlzdGVuZXJNYXA6OmZpbmQoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpCitFdmVudExpc3RlbmVyVmVjdG9yKiBFdmVudExp
c3RlbmVyTWFwOjpmaW5kKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKSBjb25zdAogewog
ICAgIGFzc2VydE5vQWN0aXZlSXRlcmF0b3JzKCk7CiAKQEAgLTE3Miw4ICsxNjcsMTIgQEAgRXZl
bnRMaXN0ZW5lclZlY3RvciogRXZlbnRMaXN0ZW5lck1hcDo6ZmluZChjb25zdCBBdG9taWNTdHJp
bmcmIGV2ZW50VHlwZSkKIAogc3RhdGljIHZvaWQgcmVtb3ZlRmlyc3RMaXN0ZW5lckNyZWF0ZWRG
cm9tTWFya3VwKEV2ZW50TGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVyVmVjdG9yKQogewotICAgIGJv
b2wgZm91bmRMaXN0ZW5lciA9IGxpc3RlbmVyVmVjdG9yLnJlbW92ZUZpcnN0TWF0Y2hpbmcoW10g
KGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiBsaXN0ZW5lcikgewotICAgICAgICByZXR1
cm4gbGlzdGVuZXIubGlzdGVuZXItPndhc0NyZWF0ZWRGcm9tTWFya3VwKCk7CisgICAgYm9vbCBm
b3VuZExpc3RlbmVyID0gbGlzdGVuZXJWZWN0b3IucmVtb3ZlRmlyc3RNYXRjaGluZyhbXSAoY29u
c3QgYXV0byYgcmVnaXN0ZXJlZExpc3RlbmVyKSB7CisgICAgICAgIGlmIChyZWdpc3RlcmVkTGlz
dGVuZXItPmxpc3RlbmVyKCkud2FzQ3JlYXRlZEZyb21NYXJrdXAoKSkgeworICAgICAgICAgICAg
cmVnaXN0ZXJlZExpc3RlbmVyLT5tYXJrQXNSZW1vdmVkKCk7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSk7CiAgICAgQVNT
RVJUX1VOVVNFRChmb3VuZExpc3RlbmVyLCBmb3VuZExpc3RlbmVyKTsKIH0KQEAgLTE5MiwxMyAr
MTkxLDEzIEBAIHZvaWQgRXZlbnRMaXN0ZW5lck1hcDo6cmVtb3ZlRmlyc3RFdmVudExpc3RlbmVy
Q3JlYXRlZEZyb21NYXJrdXAoY29uc3QgQXRvbWljU3RyCiAgICAgfQogfQogCi1zdGF0aWMgdm9p
ZCBjb3B5TGlzdGVuZXJzTm90Q3JlYXRlZEZyb21NYXJrdXBUb1RhcmdldChjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lclZlY3RvciogbGlzdGVuZXJWZWN0b3IsIEV2
ZW50VGFyZ2V0KiB0YXJnZXQpCitzdGF0aWMgdm9pZCBjb3B5TGlzdGVuZXJzTm90Q3JlYXRlZEZy
b21NYXJrdXBUb1RhcmdldChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0
ZW5lclZlY3RvciYgbGlzdGVuZXJWZWN0b3IsIEV2ZW50VGFyZ2V0KiB0YXJnZXQpCiB7Ci0gICAg
Zm9yIChhdXRvJiBsaXN0ZW5lciA6ICpsaXN0ZW5lclZlY3RvcikgeworICAgIGZvciAoYXV0byYg
cmVnaXN0ZXJlZExpc3RlbmVyIDogbGlzdGVuZXJWZWN0b3IpIHsKICAgICAgICAgLy8gRXZlbnQg
bGlzdGVuZXJzIGNyZWF0ZWQgZnJvbSBtYXJrdXAgaGF2ZSBhbHJlYWR5IGJlZW4gdHJhbnNmZXJl
ZCB0byB0aGUgc2hhZG93IHRyZWUgZHVyaW5nIGNsb25pbmcuCi0gICAgICAgIGlmIChsaXN0ZW5l
ci5saXN0ZW5lci0+d2FzQ3JlYXRlZEZyb21NYXJrdXAoKSkKKyAgICAgICAgaWYgKHJlZ2lzdGVy
ZWRMaXN0ZW5lci0+bGlzdGVuZXIoKS53YXNDcmVhdGVkRnJvbU1hcmt1cCgpKQogICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIHRhcmdldC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUs
ICpsaXN0ZW5lci5saXN0ZW5lciwgbGlzdGVuZXIudXNlQ2FwdHVyZSk7CisgICAgICAgIHRhcmdl
dC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIHJlZ2lzdGVyZWRMaXN0ZW5lci0+bGlzdGVu
ZXIoKSwgcmVnaXN0ZXJlZExpc3RlbmVyLT51c2VDYXB0dXJlKCkpOwogICAgIH0KIH0KIApAQCAt
MjA3LDcgKzIwNiw3IEBAIHZvaWQgRXZlbnRMaXN0ZW5lck1hcDo6Y29weUV2ZW50TGlzdGVuZXJz
Tm90Q3JlYXRlZEZyb21NYXJrdXBUb1RhcmdldChFdmVudFRhcmdlCiAgICAgYXNzZXJ0Tm9BY3Rp
dmVJdGVyYXRvcnMoKTsKIAogICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2VudHJpZXMpCi0gICAg
ICAgIGNvcHlMaXN0ZW5lcnNOb3RDcmVhdGVkRnJvbU1hcmt1cFRvVGFyZ2V0KGVudHJ5LmZpcnN0
LCBlbnRyeS5zZWNvbmQuZ2V0KCksIHRhcmdldCk7CisgICAgICAgIGNvcHlMaXN0ZW5lcnNOb3RD
cmVhdGVkRnJvbU1hcmt1cFRvVGFyZ2V0KGVudHJ5LmZpcnN0LCAqZW50cnkuc2Vjb25kLCB0YXJn
ZXQpOwogfQogCiBFdmVudExpc3RlbmVySXRlcmF0b3I6OkV2ZW50TGlzdGVuZXJJdGVyYXRvcihF
dmVudFRhcmdldCogdGFyZ2V0KQpAQCAtMjM2LDE2ICsyMzUsMTYgQEAgRXZlbnRMaXN0ZW5lckl0
ZXJhdG9yOjp+RXZlbnRMaXN0ZW5lckl0ZXJhdG9yKCkKIEV2ZW50TGlzdGVuZXIqIEV2ZW50TGlz
dGVuZXJJdGVyYXRvcjo6bmV4dExpc3RlbmVyKCkKIHsKICAgICBpZiAoIW1fbWFwKQotICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBmb3IgKDsgbV9lbnRy
eUluZGV4IDwgbV9tYXAtPm1fZW50cmllcy5zaXplKCk7ICsrbV9lbnRyeUluZGV4KSB7CiAgICAg
ICAgIEV2ZW50TGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9ICptX21hcC0+bV9lbnRyaWVzW21f
ZW50cnlJbmRleF0uc2Vjb25kOwogICAgICAgICBpZiAobV9pbmRleCA8IGxpc3RlbmVycy5zaXpl
KCkpCi0gICAgICAgICAgICByZXR1cm4gbGlzdGVuZXJzW21faW5kZXgrK10ubGlzdGVuZXIuZ2V0
KCk7CisgICAgICAgICAgICByZXR1cm4gJmxpc3RlbmVyc1ttX2luZGV4KytdLT5saXN0ZW5lcigp
OwogICAgICAgICBtX2luZGV4ID0gMDsKICAgICB9CiAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXJNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudExpc3RlbmVyTWFwLmgKaW5kZXggOWY1MzJhZDFlNjYzODVkNDJiMzUwNTdiNzhiNzM5MDQ0
NWY2ZmM1ZS4uMjQ5OWY3MjczNDU5OWI2ZDkzOGM3MDhlZjgxYWU5OTRiZGU2OGI0NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXJNYXAuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lck1hcC5oCkBAIC0zMCw4ICszMCw3IEBACiAgKgogICov
CiAKLSNpZm5kZWYgRXZlbnRMaXN0ZW5lck1hcF9oCi0jZGVmaW5lIEV2ZW50TGlzdGVuZXJNYXBf
aAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5oIgog
I2luY2x1ZGUgPGF0b21pYz4KQEAgLTQzLDIyICs0MiwyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEV2ZW50VGFyZ2V0OwogCi10eXBlZGVmIFZlY3RvcjxSZWdpc3RlcmVkRXZlbnRM
aXN0ZW5lciwgMT4gRXZlbnRMaXN0ZW5lclZlY3RvcjsKK3VzaW5nIEV2ZW50TGlzdGVuZXJWZWN0
b3IgPSBWZWN0b3I8UmVmUHRyPFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyPiwgMT47CiAKIGNsYXNz
IEV2ZW50TGlzdGVuZXJNYXAgewogcHVibGljOgogICAgIEV2ZW50TGlzdGVuZXJNYXAoKTsKIAog
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZW50cmllcy5pc0VtcHR5KCk7IH0K
LSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGNvbnRhaW5zKGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlKSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlKSBjb25zdCB7IHJldHVybiBmaW5kKGV2ZW50VHlwZSk7IH0KICAgICBib29sIGNvbnRh
aW5zQ2FwdHVyaW5nKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKSBjb25zdDsKICAgICBi
b29sIGNvbnRhaW5zQWN0aXZlKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKSBjb25zdDsK
IAogICAgIHZvaWQgY2xlYXIoKTsKIAogICAgIGJvb2wgYWRkKGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlLCBSZWY8RXZlbnRMaXN0ZW5lcj4mJiwgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlz
dGVuZXI6Ok9wdGlvbnMmKTsKLSAgICBib29sIHJlbW92ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYsIGJvb2wgdXNlQ2FwdHVyZSwgc2l6ZV90JiBpbmRleE9m
UmVtb3ZlZExpc3RlbmVyKTsKLSAgICBFdmVudExpc3RlbmVyVmVjdG9yKiBmaW5kKGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnRUeXBlKTsKKyAgICBib29sIHJlbW92ZShjb25zdCBBdG9taWNTdHJp
bmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYsIGJvb2wgdXNlQ2FwdHVyZSk7CisgICAgV0VC
Q09SRV9FWFBPUlQgRXZlbnRMaXN0ZW5lclZlY3RvciogZmluZChjb25zdCBBdG9taWNTdHJpbmcm
IGV2ZW50VHlwZSkgY29uc3Q7CiAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gZXZlbnRUeXBlcygp
IGNvbnN0OwogCiAgICAgdm9pZCByZW1vdmVGaXJzdEV2ZW50TGlzdGVuZXJDcmVhdGVkRnJvbU1h
cmt1cChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSk7CkBAIC02Nyw3ICs2Niw3IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEV2ZW50TGlzdGVuZXJJdGVyYXRvcjsK
IAotICAgIHZvaWQgYXNzZXJ0Tm9BY3RpdmVJdGVyYXRvcnMoKTsKKyAgICB2b2lkIGFzc2VydE5v
QWN0aXZlSXRlcmF0b3JzKCkgY29uc3Q7CiAKICAgICBWZWN0b3I8c3RkOjpwYWlyPEF0b21pY1N0
cmluZywgc3RkOjp1bmlxdWVfcHRyPEV2ZW50TGlzdGVuZXJWZWN0b3I+PiwgMj4gbV9lbnRyaWVz
OwogCkBAIC03OSw3ICs3OCw2IEBAIHByaXZhdGU6CiBjbGFzcyBFdmVudExpc3RlbmVySXRlcmF0
b3IgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEV2ZW50TGlzdGVuZXJJdGVyYXRvcik7CiBw
dWJsaWM6Ci0gICAgRXZlbnRMaXN0ZW5lckl0ZXJhdG9yKCk7CiAgICAgZXhwbGljaXQgRXZlbnRM
aXN0ZW5lckl0ZXJhdG9yKEV2ZW50VGFyZ2V0Kik7CiAjaWZuZGVmIE5ERUJVRwogICAgIH5FdmVu
dExpc3RlbmVySXRlcmF0b3IoKTsKQEAgLTk0LDkgKzkyLDcgQEAgcHJpdmF0ZToKIH07CiAKICNp
ZmRlZiBOREVCVUcKLWlubGluZSB2b2lkIEV2ZW50TGlzdGVuZXJNYXA6OmFzc2VydE5vQWN0aXZl
SXRlcmF0b3JzKCkgeyB9CitpbmxpbmUgdm9pZCBFdmVudExpc3RlbmVyTWFwOjphc3NlcnROb0Fj
dGl2ZUl0ZXJhdG9ycygpIGNvbnN0IHsgfQogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEV2ZW50TGlzdGVuZXJNYXBfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdl
dC5jcHAKaW5kZXggMGJkNWI4MGM3ZTczYWVlZGYzYmVlZWIzZWMzYTU4NTUyY2IzZjE4MS4uYjdh
MzJkNDFiMWNhZTdmMDg5ZjgyZTIyOWJlZjg4MDUyYjE3OGQzOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnRUYXJnZXQuY3BwCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KKyNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwpAQCAtMTAxLDI4ICsxMDIsNyBAQCBib29sIEV2
ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlLCBFdmVudExpc3RlbgogICAgIGlmICghZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgc2l6ZV90IGluZGV4T2ZSZW1vdmVkTGlzdGVuZXI7Ci0KLSAgICBpZiAoIWQtPmV2ZW50TGlz
dGVuZXJNYXAucmVtb3ZlKGV2ZW50VHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMuY2FwdHVyZSwgaW5k
ZXhPZlJlbW92ZWRMaXN0ZW5lcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIE5v
dGlmeSBmaXJpbmcgZXZlbnRzIHBsYW5uaW5nIHRvIGludm9rZSB0aGUgbGlzdGVuZXIgYXQgJ2lu
ZGV4JyB0aGF0Ci0gICAgLy8gdGhleSBoYXZlIG9uZSBsZXNzIGxpc3RlbmVyIHRvIGludm9rZS4K
LSAgICBpZiAoIWQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBmb3IgKGF1dG8mIGZpcmluZ0l0ZXJhdG9yIDogKmQtPmZpcmluZ0V2ZW50SXRlcmF0b3Jz
KSB7Ci0gICAgICAgIGlmIChldmVudFR5cGUgIT0gZmlyaW5nSXRlcmF0b3IuZXZlbnRUeXBlKQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKGluZGV4T2ZSZW1vdmVkTGlzdGVu
ZXIgPj0gZmlyaW5nSXRlcmF0b3Iuc2l6ZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgIC0tZmlyaW5nSXRlcmF0b3Iuc2l6ZTsKLSAgICAgICAgaWYgKGluZGV4T2ZSZW1vdmVkTGlz
dGVuZXIgPD0gZmlyaW5nSXRlcmF0b3IuaXRlcmF0b3IpCi0gICAgICAgICAgICAtLWZpcmluZ0l0
ZXJhdG9yLml0ZXJhdG9yOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBk
LT5ldmVudExpc3RlbmVyTWFwLnJlbW92ZShldmVudFR5cGUsIGxpc3RlbmVyLCBvcHRpb25zLmNh
cHR1cmUpOwogfQogCiBib29sIEV2ZW50VGFyZ2V0OjpzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVy
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4mJiBs
aXN0ZW5lcikKQEAgLTEzNiwxMCArMTE2LDEwIEBAIGJvb2wgRXZlbnRUYXJnZXQ6OnNldEF0dHJp
YnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFJlZlB0CiBF
dmVudExpc3RlbmVyKiBFdmVudFRhcmdldDo6Z2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKIHsKICAgICBmb3IgKGF1dG8mIGV2ZW50TGlzdGVu
ZXIgOiBnZXRFdmVudExpc3RlbmVycyhldmVudFR5cGUpKSB7Ci0gICAgICAgIGlmIChldmVudExp
c3RlbmVyLmxpc3RlbmVyLT5pc0F0dHJpYnV0ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGV2ZW50
TGlzdGVuZXIubGlzdGVuZXIuZ2V0KCk7CisgICAgICAgIGlmIChldmVudExpc3RlbmVyLT5saXN0
ZW5lcigpLmlzQXR0cmlidXRlKCkpCisgICAgICAgICAgICByZXR1cm4gJmV2ZW50TGlzdGVuZXIt
Pmxpc3RlbmVyKCk7CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwog
fQogCiBib29sIEV2ZW50VGFyZ2V0OjpoYXNBY3RpdmVFdmVudExpc3RlbmVycyhjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSkgY29uc3QKQEAgLTIxNSw1NyArMTk1LDUxIEBAIGJvb2wgRXZl
bnRUYXJnZXQ6OmZpcmVFdmVudExpc3RlbmVycyhFdmVudCYgZXZlbnQpCiAgICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIU5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6aXNFdmVu
dERpc3BhdGNoRm9yYmlkZGVuKCkpOwogICAgIEFTU0VSVChldmVudC5pc0luaXRpYWxpemVkKCkp
OwogCi0gICAgRXZlbnRUYXJnZXREYXRhKiBkID0gZXZlbnRUYXJnZXREYXRhKCk7Ci0gICAgaWYg
KCFkKQorICAgIEV2ZW50VGFyZ2V0RGF0YSogZGF0YSA9IGV2ZW50VGFyZ2V0RGF0YSgpOworICAg
IGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBFdmVudExpc3RlbmVyVmVj
dG9yKiBsZWdhY3lMaXN0ZW5lcnNWZWN0b3IgPSBudWxscHRyOwotICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgbGVnYWN5VHlwZU5hbWUgPSBsZWdhY3lUeXBlKGV2ZW50KTsKLSAgICBpZiAoIWxlZ2Fj
eVR5cGVOYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgbGVnYWN5TGlzdGVuZXJzVmVjdG9yID0gZC0+
ZXZlbnRMaXN0ZW5lck1hcC5maW5kKGxlZ2FjeVR5cGVOYW1lKTsKLQotICAgIEV2ZW50TGlzdGVu
ZXJWZWN0b3IqIGxpc3RlbmVyc1ZlY3RvciA9IGQtPmV2ZW50TGlzdGVuZXJNYXAuZmluZChldmVu
dC50eXBlKCkpOwotCi0gICAgaWYgKGxpc3RlbmVyc1ZlY3RvcikKLSAgICAgICAgZmlyZUV2ZW50
TGlzdGVuZXJzKGV2ZW50LCBkLCAqbGlzdGVuZXJzVmVjdG9yKTsKLSAgICBlbHNlIGlmIChsZWdh
Y3lMaXN0ZW5lcnNWZWN0b3IpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nIHR5cGVOYW1lID0gZXZl
bnQudHlwZSgpOwotICAgICAgICBldmVudC5zZXRUeXBlKGxlZ2FjeVR5cGVOYW1lKTsKLSAgICAg
ICAgZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50LCBkLCAqbGVnYWN5TGlzdGVuZXJzVmVjdG9yKTsK
LSAgICAgICAgZXZlbnQuc2V0VHlwZSh0eXBlTmFtZSk7CisgICAgVGVtcG9yYXJ5Q2hhbmdlPGJv
b2w+IGZpcmluZ0V2ZW50TGlzdGVuZXJzU2NvcGUoZGF0YS0+aXNGaXJpbmdFdmVudExpc3RlbmVy
cywgdHJ1ZSk7CisKKyAgICBpZiAoYXV0byogbGlzdGVuZXJzVmVjdG9yID0gZGF0YS0+ZXZlbnRM
aXN0ZW5lck1hcC5maW5kKGV2ZW50LnR5cGUoKSkpIHsKKyAgICAgICAgZmlyZUV2ZW50TGlzdGVu
ZXJzKGV2ZW50LCAqbGlzdGVuZXJzVmVjdG9yKTsKKyAgICAgICAgcmV0dXJuICFldmVudC5kZWZh
dWx0UHJldmVudGVkKCk7CiAgICAgfQogCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBsZWdhY3lU
eXBlTmFtZSA9IGxlZ2FjeVR5cGUoZXZlbnQpOworICAgIGlmICghbGVnYWN5VHlwZU5hbWUuaXNF
bXB0eSgpKSB7CisgICAgICAgIGlmIChhdXRvKiBsZWdhY3lMaXN0ZW5lcnNWZWN0b3IgPSBkYXRh
LT5ldmVudExpc3RlbmVyTWFwLmZpbmQobGVnYWN5VHlwZU5hbWUpKSB7CisgICAgICAgICAgICBB
dG9taWNTdHJpbmcgdHlwZU5hbWUgPSBldmVudC50eXBlKCk7CisgICAgICAgICAgICBldmVudC5z
ZXRUeXBlKGxlZ2FjeVR5cGVOYW1lKTsKKyAgICAgICAgICAgIGZpcmVFdmVudExpc3RlbmVycyhl
dmVudCwgKmxlZ2FjeUxpc3RlbmVyc1ZlY3Rvcik7CisgICAgICAgICAgICBldmVudC5zZXRUeXBl
KHR5cGVOYW1lKTsKKyAgICAgICAgfQorICAgIH0KICAgICByZXR1cm4gIWV2ZW50LmRlZmF1bHRQ
cmV2ZW50ZWQoKTsKIH0KIAotdm9pZCBFdmVudFRhcmdldDo6ZmlyZUV2ZW50TGlzdGVuZXJzKEV2
ZW50JiBldmVudCwgRXZlbnRUYXJnZXREYXRhKiBkLCBFdmVudExpc3RlbmVyVmVjdG9yJiBlbnRy
eSkKKy8vIEludGVudGlvbmFsbHkgY3JlYXRlcyBhIGNvcHkgb2YgdGhlIGxpc3RlbmVycyB2ZWN0
b3IgdG8gYXZvaWQgZXZlbnQgbGlzdGVuZXJzIGFkZGVkIGFmdGVyIHRoaXMgcG9pbnQgZnJvbSBi
ZWluZyBydW4uCisvLyBOb3RlIHRoYXQgcmVtb3ZhbCBzdGlsbCBoYXMgYW4gZWZmZWN0IGR1ZSB0
byB0aGUgcmVtb3ZlZCBmaWVsZCBpbiBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci4KK3ZvaWQgRXZl
bnRUYXJnZXQ6OmZpcmVFdmVudExpc3RlbmVycyhFdmVudCYgZXZlbnQsIEV2ZW50TGlzdGVuZXJW
ZWN0b3IgbGlzdGVuZXJzKQogewogICAgIFJlZjxFdmVudFRhcmdldD4gcHJvdGVjdGVkVGhpcygq
dGhpcyk7Ci0KLSAgICAvLyBGaXJlIGFsbCBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgdGhpcyBl
dmVudC4gRG9uJ3QgZmlyZSBsaXN0ZW5lcnMgcmVtb3ZlZCBkdXJpbmcgZXZlbnQgZGlzcGF0Y2gu
Ci0gICAgLy8gQWxzbywgZG9uJ3QgZmlyZSBldmVudCBsaXN0ZW5lcnMgYWRkZWQgZHVyaW5nIGV2
ZW50IGRpc3BhdGNoLiBDb252ZW5pZW50bHksIGFsbCBuZXcgZXZlbnQgbGlzdGVuZXJzIHdpbGwg
YmUgYWRkZWQKLSAgICAvLyBhZnRlciBvciBhdCBpbmRleCB8c2l6ZXwsIHNvIGl0ZXJhdGluZyB1
cCB0byAoYnV0IG5vdCBpbmNsdWRpbmcpIHxzaXplfCBuYXR1cmFsbHkgZXhjbHVkZXMgbmV3IGV2
ZW50IGxpc3RlbmVycy4KLQotICAgIHNpemVfdCBpID0gMDsKLSAgICBzaXplX3Qgc2l6ZSA9IGVu
dHJ5LnNpemUoKTsKLSAgICBpZiAoIWQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzKQotICAgICAgICBk
LT5maXJpbmdFdmVudEl0ZXJhdG9ycyA9IHN0ZDo6bWFrZV91bmlxdWU8RmlyaW5nRXZlbnRJdGVy
YXRvclZlY3Rvcj4oKTsKLSAgICBkLT5maXJpbmdFdmVudEl0ZXJhdG9ycy0+YXBwZW5kKEZpcmlu
Z0V2ZW50SXRlcmF0b3IoZXZlbnQudHlwZSgpLCBpLCBzaXplKSk7CisgICAgQVNTRVJUKCFsaXN0
ZW5lcnMuaXNFbXB0eSgpKTsKIAogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQg
PSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbnVs
bHB0cjsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbERpc3BhdGNoRXZl
bnRDb29raWU7CiAgICAgaWYgKGlzPERvY3VtZW50Pihjb250ZXh0KSkgewogICAgICAgICBkb2N1
bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KTsKLSAgICAgICAgd2lsbERpc3BhdGNo
RXZlbnRDb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50
KCpkb2N1bWVudCwgZXZlbnQsIHNpemUgPiAwKTsKKyAgICAgICAgd2lsbERpc3BhdGNoRXZlbnRD
b29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50KCpkb2N1
bWVudCwgZXZlbnQsIHRydWUpOwogICAgIH0KIAotICAgIGZvciAoOyBpIDwgc2l6ZTsgKytpKSB7
Ci0gICAgICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyIHJlZ2lzdGVyZWRMaXN0ZW5lciA9IGVu
dHJ5W2ldOworICAgIGZvciAoYXV0byYgcmVnaXN0ZXJlZExpc3RlbmVyIDogbGlzdGVuZXJzKSB7
CisgICAgICAgIGlmIChVTkxJS0VMWShyZWdpc3RlcmVkTGlzdGVuZXItPndhc1JlbW92ZWQoKSkp
CisgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoZXZlbnQuZXZlbnRQaGFzZSgp
ID09IEV2ZW50OjpDQVBUVVJJTkdfUEhBU0UgJiYgIXJlZ2lzdGVyZWRMaXN0ZW5lci51c2VDYXB0
dXJlKQorICAgICAgICBpZiAoZXZlbnQuZXZlbnRQaGFzZSgpID09IEV2ZW50OjpDQVBUVVJJTkdf
UEhBU0UgJiYgIXJlZ2lzdGVyZWRMaXN0ZW5lci0+dXNlQ2FwdHVyZSgpKQogICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGlmIChldmVudC5ldmVudFBoYXNlKCkgPT0gRXZlbnQ6OkJVQkJM
SU5HX1BIQVNFICYmIHJlZ2lzdGVyZWRMaXN0ZW5lci51c2VDYXB0dXJlKQorICAgICAgICBpZiAo
ZXZlbnQuZXZlbnRQaGFzZSgpID09IEV2ZW50OjpCVUJCTElOR19QSEFTRSAmJiByZWdpc3RlcmVk
TGlzdGVuZXItPnVzZUNhcHR1cmUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAg
IC8vIElmIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiBoYXMgYmVlbiBjYWxsZWQsIHdlIGp1c3Qg
YnJlYWsgb3V0IGltbWVkaWF0ZWx5LCB3aXRob3V0CkBAIC0yNzQsMjQgKzI0OCwyMiBAQCB2b2lk
IEV2ZW50VGFyZ2V0OjpmaXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQmIGV2ZW50LCBFdmVudFRhcmdl
dERhdGEqIGQsIEV2ZW50TGlzdAogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgLy8gRG8g
dGhpcyBiZWZvcmUgaW52b2NhdGlvbiB0byBhdm9pZCByZWVudHJhbmN5IGlzc3Vlcy4KLSAgICAg
ICAgaWYgKHJlZ2lzdGVyZWRMaXN0ZW5lci5pc09uY2UpCi0gICAgICAgICAgICByZW1vdmVFdmVu
dExpc3RlbmVyKGV2ZW50LnR5cGUoKSwgKnJlZ2lzdGVyZWRMaXN0ZW5lci5saXN0ZW5lciwgTGlz
dGVuZXJPcHRpb25zKHJlZ2lzdGVyZWRMaXN0ZW5lci51c2VDYXB0dXJlKSk7CisgICAgICAgIGlm
IChyZWdpc3RlcmVkTGlzdGVuZXItPmlzT25jZSgpKQorICAgICAgICAgICAgcmVtb3ZlRXZlbnRM
aXN0ZW5lcihldmVudC50eXBlKCksIHJlZ2lzdGVyZWRMaXN0ZW5lci0+bGlzdGVuZXIoKSwgTGlz
dGVuZXJPcHRpb25zKHJlZ2lzdGVyZWRMaXN0ZW5lci0+dXNlQ2FwdHVyZSgpKSk7CiAKLSAgICAg
ICAgaWYgKHJlZ2lzdGVyZWRMaXN0ZW5lci5pc1Bhc3NpdmUpCisgICAgICAgIGlmIChyZWdpc3Rl
cmVkTGlzdGVuZXItPmlzUGFzc2l2ZSgpKQogICAgICAgICAgICAgZXZlbnQuc2V0SW5QYXNzaXZl
TGlzdGVuZXIodHJ1ZSk7CiAKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2ll
IGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEhhbmRsZUV2ZW50KGNvbnRl
eHQsIGV2ZW50KTsKICAgICAgICAgLy8gVG8gbWF0Y2ggTW96aWxsYSwgdGhlIEFUX1RBUkdFVCBw
aGFzZSBmaXJlcyBib3RoIGNhcHR1cmluZyBhbmQgYnViYmxpbmcKICAgICAgICAgLy8gZXZlbnQg
bGlzdGVuZXJzLCBldmVuIHRob3VnaCB0aGF0IHZpb2xhdGVzIHNvbWUgdmVyc2lvbnMgb2YgdGhl
IERPTSBzcGVjLgotICAgICAgICByZWdpc3RlcmVkTGlzdGVuZXIubGlzdGVuZXItPmhhbmRsZUV2
ZW50KGNvbnRleHQsICZldmVudCk7CisgICAgICAgIHJlZ2lzdGVyZWRMaXN0ZW5lci0+bGlzdGVu
ZXIoKS5oYW5kbGVFdmVudChjb250ZXh0LCAmZXZlbnQpOwogICAgICAgICBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZEhhbmRsZUV2ZW50KGNvb2tpZSk7CiAKLSAgICAgICAgaWYgKHJlZ2lz
dGVyZWRMaXN0ZW5lci5pc1Bhc3NpdmUpCisgICAgICAgIGlmIChyZWdpc3RlcmVkTGlzdGVuZXIt
PmlzUGFzc2l2ZSgpKQogICAgICAgICAgICAgZXZlbnQuc2V0SW5QYXNzaXZlTGlzdGVuZXIoZmFs
c2UpOwogICAgIH0KIAotICAgIGQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzLT5yZW1vdmVMYXN0KCk7
Ci0KICAgICBpZiAoZG9jdW1lbnQpCiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkRGlzcGF0Y2hFdmVudCh3aWxsRGlzcGF0Y2hFdmVudENvb2tpZSk7CiB9CkBAIC0zMTAsMTUg
KzI4Miw2IEBAIHZvaWQgRXZlbnRUYXJnZXQ6OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCkKICAg
ICBpZiAoIWQpCiAgICAgICAgIHJldHVybjsKICAgICBkLT5ldmVudExpc3RlbmVyTWFwLmNsZWFy
KCk7Ci0KLSAgICAvLyBOb3RpZnkgZmlyaW5nIGV2ZW50cyBwbGFubmluZyB0byBpbnZva2UgdGhl
IGxpc3RlbmVyIGF0ICdpbmRleCcgdGhhdAotICAgIC8vIHRoZXkgaGF2ZSBvbmUgbGVzcyBsaXN0
ZW5lciB0byBpbnZva2UuCi0gICAgaWYgKGQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzKSB7Ci0gICAg
ICAgIGZvciAoYXV0byYgZmlyaW5nRXZlbnRJdGVyYXRvciA6ICpkLT5maXJpbmdFdmVudEl0ZXJh
dG9ycykgewotICAgICAgICAgICAgZmlyaW5nRXZlbnRJdGVyYXRvci5pdGVyYXRvciA9IDA7Ci0g
ICAgICAgICAgICBmaXJpbmdFdmVudEl0ZXJhdG9yLnNpemUgPSAwOwotICAgICAgICB9Ci0gICAg
fQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnRUYXJnZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCmlu
ZGV4IDQzOTgyYTY1MzhhYjkwNWJiZjg2Yzg4YTEyZTE0ZDU3YzEwM2NlZDYuLjhhM2IwMGE2NTlk
YWFmOGU1MWU2ODQwNWM3ZmVjMjNjYzFlOWYyY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudFRhcmdldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5o
CkBAIC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoKICAgICB+RXZlbnRUYXJnZXREYXRhKCk7CiAKICAg
ICBFdmVudExpc3RlbmVyTWFwIGV2ZW50TGlzdGVuZXJNYXA7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PEZpcmluZ0V2ZW50SXRlcmF0b3JWZWN0b3I+IGZpcmluZ0V2ZW50SXRlcmF0b3JzOworICAgIGJv
b2wgaXNGaXJpbmdFdmVudExpc3RlbmVycyB7IGZhbHNlIH07CiB9OwogCiBlbnVtIEV2ZW50VGFy
Z2V0SW50ZXJmYWNlIHsKQEAgLTE4Miw3ICsxODIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
dm9pZCByZWZFdmVudFRhcmdldCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRh
cmdldCgpID0gMDsKICAgICAKLSAgICB2b2lkIGZpcmVFdmVudExpc3RlbmVycyhFdmVudCYsIEV2
ZW50VGFyZ2V0RGF0YSosIEV2ZW50TGlzdGVuZXJWZWN0b3ImKTsKKyAgICB2b2lkIGZpcmVFdmVu
dExpc3RlbmVycyhFdmVudCYsIEV2ZW50TGlzdGVuZXJWZWN0b3IpOwogCiAgICAgZnJpZW5kIGNs
YXNzIEV2ZW50TGlzdGVuZXJJdGVyYXRvcjsKIH07CkBAIC0yMDcsNyArMjA3LDcgQEAgaW5saW5l
IGJvb2wgRXZlbnRUYXJnZXQ6OmlzRmlyaW5nRXZlbnRMaXN0ZW5lcnMoKQogICAgIEV2ZW50VGFy
Z2V0RGF0YSogZCA9IGV2ZW50VGFyZ2V0RGF0YSgpOwogICAgIGlmICghZCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiBkLT5maXJpbmdFdmVudEl0ZXJhdG9ycyAmJiAhZC0+Zmly
aW5nRXZlbnRJdGVyYXRvcnMtPmlzRW1wdHkoKTsKKyAgICByZXR1cm4gZC0+aXNGaXJpbmdFdmVu
dExpc3RlbmVyczsKIH0KIAogaW5saW5lIGJvb2wgRXZlbnRUYXJnZXQ6Omhhc0V2ZW50TGlzdGVu
ZXJzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SZWdpc3RlcmVkRXZl
bnRMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWRhY2EzNzg3NTFiMmE2MDU1
ZDY4M2Y3ZDdhYTI5MGQ1MTU4YjlmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgVG9i
aWFzIEFudG9uIChhbnRvbkBzdHVkLmZiaS5maC1kYXJtc3RhZHQuZGUpCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXIuaCIKLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmgKaW5kZXggZDU1
ZDllMmFjOWFhMjFjY2U2M2YzZDY4MTk4OTIwYzg0YjVlNDM4Yy4uYzJjZDRjZjhiOWYxOGJkMjU0
YmYzZjVlYWEyOTM0YzZkNTc2NzkxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Jl
Z2lzdGVyZWRFdmVudExpc3RlbmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JlZ2lzdGVy
ZWRFdmVudExpc3RlbmVyLmgKQEAgLTI5LDQ3ICsyOSw1MCBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLSAgICBjbGFzcyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciB7Ci0gICAgcHVibGljOgot
ICAgICAgICBzdHJ1Y3QgT3B0aW9ucyB7Ci0gICAgICAgICAgICBPcHRpb25zKGJvb2wgY2FwdHVy
ZSA9IGZhbHNlLCBib29sIHBhc3NpdmUgPSBmYWxzZSwgYm9vbCBvbmNlID0gZmFsc2UpCi0gICAg
ICAgICAgICAgICAgOiBjYXB0dXJlKGNhcHR1cmUpCi0gICAgICAgICAgICAgICAgLCBwYXNzaXZl
KHBhc3NpdmUpCi0gICAgICAgICAgICAgICAgLCBvbmNlKG9uY2UpCi0gICAgICAgICAgICB7IH0K
Ky8vIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ldmVudC1saXN0ZW5lcgor
Y2xhc3MgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxSZWdpc3Rl
cmVkRXZlbnRMaXN0ZW5lcj4geworcHVibGljOgorICAgIHN0cnVjdCBPcHRpb25zIHsKKyAgICAg
ICAgT3B0aW9ucyhib29sIGNhcHR1cmUgPSBmYWxzZSwgYm9vbCBwYXNzaXZlID0gZmFsc2UsIGJv
b2wgb25jZSA9IGZhbHNlKQorICAgICAgICAgICAgOiBjYXB0dXJlKGNhcHR1cmUpCisgICAgICAg
ICAgICAsIHBhc3NpdmUocGFzc2l2ZSkKKyAgICAgICAgICAgICwgb25jZShvbmNlKQorICAgICAg
ICB7IH0KIAotICAgICAgICAgICAgYm9vbCBjYXB0dXJlOwotICAgICAgICAgICAgYm9vbCBwYXNz
aXZlOwotICAgICAgICAgICAgYm9vbCBvbmNlOwotICAgICAgICB9OworICAgICAgICBib29sIGNh
cHR1cmU7CisgICAgICAgIGJvb2wgcGFzc2l2ZTsKKyAgICAgICAgYm9vbCBvbmNlOworICAgIH07
CisKKyAgICBzdGF0aWMgUmVmPFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyPiBjcmVhdGUoUmVmPEV2
ZW50TGlzdGVuZXI+JiYgbGlzdGVuZXIsIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcihXVEZN
b3ZlKGxpc3RlbmVyKSwgb3B0aW9ucykpOworICAgIH0KIAotICAgICAgICBSZWdpc3RlcmVkRXZl
bnRMaXN0ZW5lcihSZWY8RXZlbnRMaXN0ZW5lcj4mJiBsaXN0ZW5lciwgY29uc3QgT3B0aW9ucyYg
b3B0aW9ucykKLSAgICAgICAgICAgIDogbGlzdGVuZXIoV1RGTW92ZShsaXN0ZW5lcikpCi0gICAg
ICAgICAgICAsIHVzZUNhcHR1cmUob3B0aW9ucy5jYXB0dXJlKQotICAgICAgICAgICAgLCBpc1Bh
c3NpdmUob3B0aW9ucy5wYXNzaXZlKQotICAgICAgICAgICAgLCBpc09uY2Uob3B0aW9ucy5vbmNl
KQotICAgICAgICB7Ci0gICAgICAgIH0KKyAgICBFdmVudExpc3RlbmVyJiBsaXN0ZW5lcigpIGNv
bnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8RXZlbnRMaXN0ZW5lciY+KG1fbGlzdGVuZXIuZ2V0KCkp
OyB9CisgICAgYm9vbCB1c2VDYXB0dXJlKCkgY29uc3QgeyByZXR1cm4gbV91c2VDYXB0dXJlOyB9
CisgICAgYm9vbCBpc1Bhc3NpdmUoKSBjb25zdCB7IHJldHVybiBtX2lzUGFzc2l2ZTsgfQorICAg
IGJvb2wgaXNPbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pc09uY2U7IH0KKyAgICBib29sIHdhc1Jl
bW92ZWQoKSBjb25zdCB7IHJldHVybiBtX3dhc1JlbW92ZWQ7IH0KIAotICAgICAgICBSZWdpc3Rl
cmVkRXZlbnRMaXN0ZW5lcihSZWY8RXZlbnRMaXN0ZW5lcj4mJiBsaXN0ZW5lciwgYm9vbCB1c2VD
YXB0dXJlKQotICAgICAgICAgICAgOiBsaXN0ZW5lcihXVEZNb3ZlKGxpc3RlbmVyKSkKLSAgICAg
ICAgICAgICwgdXNlQ2FwdHVyZSh1c2VDYXB0dXJlKQotICAgICAgICB7Ci0gICAgICAgIH0KKyAg
ICB2b2lkIG1hcmtBc1JlbW92ZWQoKSB7IG1fd2FzUmVtb3ZlZCA9IHRydWU7IH0KIAotICAgICAg
ICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXI7Ci0gICAgICAgIGJvb2wgdXNlQ2FwdHVy
ZSB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wgaXNQYXNzaXZlIHsgZmFsc2UgfTsKLSAgICAgICAg
Ym9vbCBpc09uY2UgeyBmYWxzZSB9OwotICAgIH07Ci0gICAgCi0gICAgaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgYSwgY29uc3QgUmVnaXN0ZXJl
ZEV2ZW50TGlzdGVuZXImIGIpCitwcml2YXRlOgorICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
KFJlZjxFdmVudExpc3RlbmVyPiYmIGxpc3RlbmVyLCBjb25zdCBPcHRpb25zJiBvcHRpb25zKQor
ICAgICAgICA6IG1fbGlzdGVuZXIoV1RGTW92ZShsaXN0ZW5lcikpCisgICAgICAgICwgbV91c2VD
YXB0dXJlKG9wdGlvbnMuY2FwdHVyZSkKKyAgICAgICAgLCBtX2lzUGFzc2l2ZShvcHRpb25zLnBh
c3NpdmUpCisgICAgICAgICwgbV9pc09uY2Uob3B0aW9ucy5vbmNlKQogICAgIHsKLSAgICAgICAg
Ly8gT3RoZXIgZGF0YSBtZW1iZXJzIGFyZSBwdXJwb3NlZnVsbHkgbm90IGNoZWNrZWQuIFRoZSBE
T00gc3BlY2lmaWNhdGlvbiBzYXlzIHRoYXQgdXBvbiBhZGRpbmcgLyByZW1vdmluZwotICAgICAg
ICAvLyBFdmVudExpc3RlbmVycywgd2Ugc2hvdWxkIG9ubHkgY2hlY2sgdGhlIHR5cGUgYW5kIHRo
ZSBjYXB0dXJlIGZsYWcuCi0gICAgICAgIHJldHVybiAqYS5saXN0ZW5lciA9PSAqYi5saXN0ZW5l
ciAmJiBhLnVzZUNhcHR1cmUgPT0gYi51c2VDYXB0dXJlOwogICAgIH0KIAorICAgIFJlZjxFdmVu
dExpc3RlbmVyPiBtX2xpc3RlbmVyOworICAgIGJvb2wgbV91c2VDYXB0dXJlIHsgZmFsc2UgfTsK
KyAgICBib29sIG1faXNQYXNzaXZlIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNPbmNlIHsgZmFs
c2UgfTsKKyAgICBib29sIG1fd2FzUmVtb3ZlZCB7IGZhbHNlIH07Cit9OworCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCBkOTRk
ODRiY2U1OWM3NGZkYzA5ZTQ1NjMwN2M3YjJmMDkwODE0NGIwLi42NDQzYjY1NjllYjdiZmNmNDc3
OTMzYTdiZmQ4OGUwYTJlZjMyM2Y3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTgyMiw4ICs4MjIsOCBAQCB2b2lkIEluc3BlY3RvckRP
TUFnZW50OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBpbnQgbgogICAgIHNpemVfdCBldmVudEluZm9ybWF0aW9uTGVuZ3RoID0gZXZlbnRJbmZvcm1h
dGlvbi5zaXplKCk7CiAgICAgZm9yIChhdXRvJiBpbmZvIDogZXZlbnRJbmZvcm1hdGlvbikgewog
ICAgICAgICBmb3IgKGF1dG8mIGxpc3RlbmVyIDogaW5mby5ldmVudExpc3RlbmVyVmVjdG9yKSB7
Ci0gICAgICAgICAgICBpZiAobGlzdGVuZXIudXNlQ2FwdHVyZSkKLSAgICAgICAgICAgICAgICBs
aXN0ZW5lcnNBcnJheS0+YWRkSXRlbShidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIobGlzdGVu
ZXIsIGluZm8uZXZlbnRUeXBlLCBpbmZvLm5vZGUsIG9iamVjdEdyb3VwKSk7CisgICAgICAgICAg
ICBpZiAobGlzdGVuZXItPnVzZUNhcHR1cmUoKSkKKyAgICAgICAgICAgICAgICBsaXN0ZW5lcnNB
cnJheS0+YWRkSXRlbShidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIoKmxpc3RlbmVyLCBpbmZv
LmV2ZW50VHlwZSwgaW5mby5ub2RlLCBvYmplY3RHcm91cCkpOwogICAgICAgICB9CiAgICAgfQog
CkBAIC04MzEsOCArODMxLDggQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0
ZW5lcnNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG4KICAgICBmb3IgKHNp
emVfdCBpID0gZXZlbnRJbmZvcm1hdGlvbkxlbmd0aDsgaTsgLS1pKSB7CiAgICAgICAgIGNvbnN0
IEV2ZW50TGlzdGVuZXJJbmZvJiBpbmZvID0gZXZlbnRJbmZvcm1hdGlvbltpIC0gMV07CiAgICAg
ICAgIGZvciAoYXV0byYgbGlzdGVuZXIgOiBpbmZvLmV2ZW50TGlzdGVuZXJWZWN0b3IpIHsKLSAg
ICAgICAgICAgIGlmICghbGlzdGVuZXIudXNlQ2FwdHVyZSkKLSAgICAgICAgICAgICAgICBsaXN0
ZW5lcnNBcnJheS0+YWRkSXRlbShidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIobGlzdGVuZXIs
IGluZm8uZXZlbnRUeXBlLCBpbmZvLm5vZGUsIG9iamVjdEdyb3VwKSk7CisgICAgICAgICAgICBp
ZiAoIWxpc3RlbmVyLT51c2VDYXB0dXJlKCkpCisgICAgICAgICAgICAgICAgbGlzdGVuZXJzQXJy
YXktPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKCpsaXN0ZW5lciwgaW5mby5l
dmVudFR5cGUsIGluZm8ubm9kZSwgb2JqZWN0R3JvdXApKTsKICAgICAgICAgfQogICAgIH0KIH0K
QEAgLTg1OCwxMyArODU4LDEzIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50TGlz
dGVuZXJzKE5vZGUqIG5vZGUsIFZlY3RvcjxFdmVudExpc3RlbmVySW5mbz4mCiAgICAgICAgIGZv
ciAoYXV0byYgdHlwZSA6IGQtPmV2ZW50TGlzdGVuZXJNYXAuZXZlbnRUeXBlcygpKSB7CiAgICAg
ICAgICAgICBjb25zdCBFdmVudExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMgPSBhbmNlc3Rvci0+
Z2V0RXZlbnRMaXN0ZW5lcnModHlwZSk7CiAgICAgICAgICAgICBFdmVudExpc3RlbmVyVmVjdG9y
IGZpbHRlcmVkTGlzdGVuZXJzOwotICAgICAgICAgICAgZmlsdGVyZWRMaXN0ZW5lcnMucmVzZXJ2
ZUNhcGFjaXR5KGxpc3RlbmVycy5zaXplKCkpOworICAgICAgICAgICAgZmlsdGVyZWRMaXN0ZW5l
cnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsaXN0ZW5lcnMuc2l6ZSgpKTsKICAgICAgICAgICAg
IGZvciAoYXV0byYgbGlzdGVuZXIgOiBsaXN0ZW5lcnMpIHsKLSAgICAgICAgICAgICAgICBpZiAo
bGlzdGVuZXIubGlzdGVuZXItPnR5cGUoKSA9PSBFdmVudExpc3RlbmVyOjpKU0V2ZW50TGlzdGVu
ZXJUeXBlKQotICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZExpc3RlbmVycy5hcHBlbmQobGlz
dGVuZXIpOworICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lci0+bGlzdGVuZXIoKS50eXBlKCkg
PT0gRXZlbnRMaXN0ZW5lcjo6SlNFdmVudExpc3RlbmVyVHlwZSkKKyAgICAgICAgICAgICAgICAg
ICAgZmlsdGVyZWRMaXN0ZW5lcnMudW5jaGVja2VkQXBwZW5kKGxpc3RlbmVyKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmICghZmlsdGVyZWRMaXN0ZW5lcnMuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgICAgIGV2ZW50SW5mb3JtYXRpb24uYXBwZW5kKEV2ZW50TGlzdGVuZXJJbmZvKGFu
Y2VzdG9yLCB0eXBlLCBmaWx0ZXJlZExpc3RlbmVycykpOworICAgICAgICAgICAgICAgIGV2ZW50
SW5mb3JtYXRpb24uYXBwZW5kKEV2ZW50TGlzdGVuZXJJbmZvKGFuY2VzdG9yLCB0eXBlLCBXVEZN
b3ZlKGZpbHRlcmVkTGlzdGVuZXJzKSkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTQ3Nyw3
ICsxNDc3LDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IEluc3BlY3RvckRPTUEKIAogUmVmPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0
Rm9yRXZlbnRMaXN0ZW5lcihjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgcmVnaXN0ZXJl
ZEV2ZW50TGlzdGVuZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBOb2RlKiBub2Rl
LCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwSWQpCiB7Ci0gICAgUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGV2ZW50TGlzdGVuZXIgPSByZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5saXN0ZW5lcjsKKyAg
ICBSZWY8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lciA9IHJlZ2lzdGVyZWRFdmVudExpc3Rl
bmVyLmxpc3RlbmVyKCk7CiAKICAgICBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUgPSBudWxscHRyOwog
ICAgIEpTQzo6SlNPYmplY3QqIGhhbmRsZXIgPSBudWxscHRyOwpAQCAtMTQ4Niw3ICsxNDg2LDcg
QEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gSW5zcGVjdG9y
RE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRXYKICAgICBpbnQgY29sdW1uTnVtYmVyID0gMDsKICAg
ICBTdHJpbmcgc2NyaXB0SUQ7CiAgICAgU3RyaW5nIHNvdXJjZU5hbWU7Ci0gICAgaWYgKGF1dG8g
c2NyaXB0TGlzdGVuZXIgPSBKU0V2ZW50TGlzdGVuZXI6OmNhc3QoZXZlbnRMaXN0ZW5lci5nZXQo
KSkpIHsKKyAgICBpZiAoYXV0byBzY3JpcHRMaXN0ZW5lciA9IEpTRXZlbnRMaXN0ZW5lcjo6Y2Fz
dChldmVudExpc3RlbmVyLnB0cigpKSkgewogICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2Nr
KHNjcmlwdExpc3RlbmVyLT5pc29sYXRlZFdvcmxkKCkudm0oKSk7CiAgICAgICAgIHN0YXRlID0g
ZXhlY1N0YXRlRnJvbU5vZGUoc2NyaXB0TGlzdGVuZXItPmlzb2xhdGVkV29ybGQoKSwgJm5vZGUt
PmRvY3VtZW50KCkpOwogICAgICAgICBoYW5kbGVyID0gc2NyaXB0TGlzdGVuZXItPmpzRnVuY3Rp
b24oJm5vZGUtPmRvY3VtZW50KCkpOwpAQCAtMTUwNyw3ICsxNTA3LDcgQEAgUmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxk
T2JqZWN0Rm9yRXYKIAogICAgIGF1dG8gdmFsdWUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006
OkV2ZW50TGlzdGVuZXI6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRUeXBlKGV2ZW50VHlwZSkKLSAg
ICAgICAgLnNldFVzZUNhcHR1cmUocmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIudXNlQ2FwdHVyZSkK
KyAgICAgICAgLnNldFVzZUNhcHR1cmUocmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIudXNlQ2FwdHVy
ZSgpKQogICAgICAgICAuc2V0SXNBdHRyaWJ1dGUoZXZlbnRMaXN0ZW5lci0+aXNBdHRyaWJ1dGUo
KSkKICAgICAgICAgLnNldE5vZGVJZChwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG5vZGUpKQogICAg
ICAgICAuc2V0SGFuZGxlckJvZHkoYm9keSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTUFnZW50LmgKaW5kZXggMzc0NGNiMWFjYjQ1MGY3ZDBhM2MzYTU0MGIwMGIzNmQ5
ODZkNjEwYy4uY2M5NzE1YzM3YmJlNTEzZjVhNDA3ZmQ0OTY5NDJiN2ZlZGM4MWQ4OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKQEAgLTgwLDEwICs4
MCwxMCBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIHR5cGVkZWYgaW50IEJhY2tlbmRO
b2RlSWQ7CiAKIHN0cnVjdCBFdmVudExpc3RlbmVySW5mbyB7Ci0gICAgRXZlbnRMaXN0ZW5lcklu
Zm8oTm9kZSogbm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGNvbnN0IEV2ZW50
TGlzdGVuZXJWZWN0b3ImIGV2ZW50TGlzdGVuZXJWZWN0b3IpCisgICAgRXZlbnRMaXN0ZW5lcklu
Zm8oTm9kZSogbm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVu
ZXJWZWN0b3ImJiBldmVudExpc3RlbmVyVmVjdG9yKQogICAgICAgICA6IG5vZGUobm9kZSkKICAg
ICAgICAgLCBldmVudFR5cGUoZXZlbnRUeXBlKQotICAgICAgICAsIGV2ZW50TGlzdGVuZXJWZWN0
b3IoZXZlbnRMaXN0ZW5lclZlY3RvcikKKyAgICAgICAgLCBldmVudExpc3RlbmVyVmVjdG9yKFdU
Rk1vdmUoZXZlbnRMaXN0ZW5lclZlY3RvcikpCiAgICAgewogICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0VsZW1lbnQuY3BwCmluZGV4IGExZDc3ZTYzMzcyYTMwMzYzNjVjZTVkN2RmZGJmYmQyNjU3OTRm
N2YuLmZiNzliZDllMjRhYzVkZGE4MGJhYWIzZTBjODc5ZjA2MTJiYmUyNDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRWxlbWVudC5jcHAKQEAgLTU4NCwxMSArNTg0LDggQEAgc3RhdGljIGJvb2wgaGFzTG9h
ZExpc3RlbmVyKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAg
Zm9yIChlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVudCgpOyBlbGVt
ZW50OyBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVudCgpKSB7Ci0g
ICAgICAgIGNvbnN0IEV2ZW50TGlzdGVuZXJWZWN0b3ImIGVudHJ5ID0gZWxlbWVudC0+Z2V0RXZl
bnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLmxvYWRFdmVudCk7Ci0gICAgICAgIGZvciAoYXV0byYg
bGlzdGVuZXIgOiBlbnRyeSkgewotICAgICAgICAgICAgaWYgKGxpc3RlbmVyLnVzZUNhcHR1cmUp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGVs
ZW1lbnQtPmhhc0NhcHR1cmluZ0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>