<?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>204263</bug_id>
          
          <creation_ts>2019-11-15 16:54:58 -0800</creation_ts>
          <short_desc>Share more code between WindowEventLoop and WorkerEventLoop by introducing EventLoopTaskGroup</short_desc>
          <delta_ts>2019-11-19 14:00:47 -0800</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>204335</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>dbates</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kangil.han</cc>
    
    <cc>koivisto</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1590752</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-11-15 16:54:58 -0800</bug_when>
    <thetext>WindowEventLoop is currently aware of multiple Document owning a group of tasks.
This logic is useful for grouping a set of tasks and canceling or suspending them all at once.

Extract this grouping logic out of WindowEventLoop, and share most of event loop logic with WorkerEventLoop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1590771</commentid>
    <comment_count>1</comment_count>
      <attachid>383674</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-11-15 17:24:08 -0800</bug_when>
    <thetext>Created attachment 383674
Does refactoring</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1590801</commentid>
    <comment_count>2</comment_count>
      <attachid>383679</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-11-15 19:09:02 -0800</bug_when>
    <thetext>Created attachment 383679
Fixed worker tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1590844</commentid>
    <comment_count>3</comment_count>
      <attachid>383692</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-11-15 23:35:47 -0800</bug_when>
    <thetext>Created attachment 383692
Fixed the tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1590980</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-11-17 21:35:29 -0800</bug_when>
    <thetext>Ping reviewers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591016</commentid>
    <comment_count>5</comment_count>
      <attachid>383692</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-18 03:48:24 -0800</bug_when>
    <thetext>Comment on attachment 383692
Fixed the tests

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

&gt; Source/WebCore/ChangeLog:15
&gt; +        Each task is now represented as an instance of a concrete subclass of EventLoopTask, which has
&gt; +        a pure virtual execute() member function. Its primary purpose is to know EventLoopTaskGroup to which
&gt; +        each task belongs. One of subclasss, EventLoopFunctionDispatchTask, is used to store a callback function
&gt; +        and another subclass, ActiveDOMObjectEventDispatchTask, is used to dispatch an async event.

Why all this subclassing? Are there likely be many more subclasses in the future? What is wrong with &apos;if&apos;/&apos;switch&apos;/Variant&lt;&gt;?

&gt; Source/WebCore/dom/AbstractEventLoop.h:66
&gt; +class AbstractEventLoop : public RefCounted&lt;AbstractEventLoop&gt;, public CanMakeWeakPtr&lt;AbstractEventLoop&gt; {

AbstractEventLoop is not very abstract at all anymore. Could it be named into something more descriptive (like just EventLoop)? Or is this a spec name?

&gt; Source/WebCore/dom/AbstractEventLoop.h:73
&gt; +    void suspendGroup(EventLoopTaskGroup&amp;);

This appears to have no callers.

&gt; Source/WebCore/dom/AbstractEventLoop.h:88
&gt; +    // Use a global queue instead of multiple task queues since HTML5 spec allows UA to pick arbitrary queue.
&gt; +    Vector&lt;std::unique_ptr&lt;EventLoopTask&gt;&gt; m_tasks;

I don&apos;t understand how the comment relates to the line below. Are you describing some possible alternative implementation strategy?

&gt; Source/WebCore/dom/AbstractEventLoop.h:120
&gt; +        ASSERT(m_state != State::Stopped);
&gt; +        m_state = State::Suspended;
&gt; +        // EventLoop doesn&apos;t do anything upon suspension.

Might be better to describe what this does (suspends when trying to run) rather than what it (obviously) doesn&apos;t do.

&gt; Source/WebCore/dom/WindowEventLoop.cpp:81
&gt; +void AbstractEventLoop::resumeGroup(EventLoopTaskGroup&amp; group)
&gt;  {
&gt; -    ASSERT(isMainThread());
&gt; -    if (!m_documentIdentifiersForSuspendedTasks.contains(document.identifier()))
&gt; +    ASSERT(isContextThread());
&gt; +    if (!m_groupsWithSuspenedTasks.contains(group))
&gt;          return;
&gt;      scheduleToRunIfNeeded();
&gt;  }

I&apos;m wondering if m_groupsWithSuspenedTasks optimization is even needed. Would it really hurt to scheduleToRunIfNeeded() unconditionally? Would simplify the logic...

&gt; Source/WebCore/workers/WorkerGlobalScope.h:70
&gt; -    AbstractEventLoop&amp; eventLoop() final;
&gt; +    EventLoopTaskGroup&amp; eventLoop() final;

Bit weird that eventLoop() doesn&apos;t return an event loop, but ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591024</commentid>
    <comment_count>6</comment_count>
      <attachid>383692</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-18 04:10:48 -0800</bug_when>
    <thetext>Comment on attachment 383692
Fixed the tests

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

&gt; Source/WebCore/dom/AbstractEventLoop.h:141
&gt; +    void queueTask(std::unique_ptr&lt;EventLoopTask&gt;&amp;&amp; task)
&gt; +    {
&gt; +        if (m_state == State::Stopped || !m_eventLoop)
&gt; +            return;
&gt; +        ASSERT(!task-&gt;m_group);
&gt; +        task-&gt;m_group = makeWeakPtr(*this);
&gt; +        m_eventLoop-&gt;queueTask(WTFMove(task));
&gt; +    }

There is an alternative factoring where group would be provided to EventLoopTask as a constructor parameter instead of being set here. This might lead to cleaner separation of functionality between AbstractEventLoop and EventLoopTaskGroup. AbstractEventLoop would offer the queuing interface while suspend/resume would be in EventLoopTaskGroup.

Not sure if it would end up looking better but I find the approach taken in this patch slightly confusing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591198</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-11-18 13:09:56 -0800</bug_when>
    <thetext>Thanks for the review!

(In reply to Antti Koivisto from comment #5)
&gt; Comment on attachment 383692 [details]
&gt; Fixed the tests
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=383692&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:15
&gt; &gt; +        Each task is now represented as an instance of a concrete subclass of EventLoopTask, which has
&gt; &gt; +        a pure virtual execute() member function. Its primary purpose is to know EventLoopTaskGroup to which
&gt; &gt; +        each task belongs. One of subclasss, EventLoopFunctionDispatchTask, is used to store a callback function
&gt; &gt; +        and another subclass, ActiveDOMObjectEventDispatchTask, is used to dispatch an async event.
&gt; 
&gt; Why all this subclassing? Are there likely be many more subclasses in the
&gt; future? What is wrong with &apos;if&apos;/&apos;switch&apos;/Variant&lt;&gt;?

We want to make it possible for JSC to hook into this so we don&apos;t want AbstractEventLoop or EventLoopTaskGroup to depend on things like Event or ActiveDOMObjet, which are WebCore concepts.

&gt; 
&gt; &gt; Source/WebCore/dom/AbstractEventLoop.h:66
&gt; &gt; +class AbstractEventLoop : public RefCounted&lt;AbstractEventLoop&gt;, public CanMakeWeakPtr&lt;AbstractEventLoop&gt; {
&gt; 
&gt; AbstractEventLoop is not very abstract at all anymore. Could it be named
&gt; into something more descriptive (like just EventLoop)? Or is this a spec
&gt; name?

Yes, I&apos;m going to rename it to EventLoop in a follow up patch. I didn&apos;t want to make the patch unreadable by doing all the renames &amp; refactoring at once.

&gt; 
&gt; &gt; Source/WebCore/dom/AbstractEventLoop.h:73
&gt; &gt; +    void suspendGroup(EventLoopTaskGroup&amp;);
&gt; 
&gt; This appears to have no callers.

Removed.

&gt; &gt; Source/WebCore/dom/AbstractEventLoop.h:88
&gt; &gt; +    // Use a global queue instead of multiple task queues since HTML5 spec allows UA to pick arbitrary queue.
&gt; &gt; +    Vector&lt;std::unique_ptr&lt;EventLoopTask&gt;&gt; m_tasks;
&gt; 
&gt; I don&apos;t understand how the comment relates to the line below. Are you
&gt; describing some possible alternative implementation strategy?

Right, if you very faithfully implement what the spec says, we&apos;re going to have multiple queues (i.e. multiple vectors) from which we&apos;d pick in an arbitrary order.
&gt; &gt; Source/WebCore/dom/AbstractEventLoop.h:120
&gt; &gt; +        ASSERT(m_state != State::Stopped);
&gt; &gt; +        m_state = State::Suspended;
&gt; &gt; +        // EventLoop doesn&apos;t do anything upon suspension.
&gt; 
&gt; Might be better to describe what this does (suspends when trying to run)
&gt; rather than what it (obviously) doesn&apos;t do.

Good point. This is a useless &quot;what&quot; comment. Revised it to:
// We don&apos;t remove suspended tasks to preserve the ordering.
// AbstractEventLoop::run checks whether each task&apos;s group is suspended or not.

&gt; &gt; Source/WebCore/dom/WindowEventLoop.cpp:81
&gt; &gt; +void AbstractEventLoop::resumeGroup(EventLoopTaskGroup&amp; group)
&gt; &gt;  {
&gt; &gt; -    ASSERT(isMainThread());
&gt; &gt; -    if (!m_documentIdentifiersForSuspendedTasks.contains(document.identifier()))
&gt; &gt; +    ASSERT(isContextThread());
&gt; &gt; +    if (!m_groupsWithSuspenedTasks.contains(group))
&gt; &gt;          return;
&gt; &gt;      scheduleToRunIfNeeded();
&gt; &gt;  }
&gt; 
&gt; I&apos;m wondering if m_groupsWithSuspenedTasks optimization is even needed.
&gt; Would it really hurt to scheduleToRunIfNeeded() unconditionally? Would
&gt; simplify the logic...

Media elements, etc... are going to use this mechanism so I&apos;d like to keep this optimization.
One important optimization I really have to implement is to put the suspended tasks
that AbstractEventLoop::run had already processed to a different queue until they&apos;re resumed.

Otherwise, it could result in a very pathological scenario when there are multiple windows&apos; involved.
e.g. a.com in window 1 opens another page in a.com in window 2. Then window 1 navigates to b.com.
In this scenario, a.com in window 1 is suspended but a.com in window 2 is not suspended.
window 1 had hundreds of tasks suspended, then we&apos;d have to go through every one of them each time any task is scheduled.

This whole suspended task check in WindowEventLoop was added to implement that optimization
but I haven&apos;t had a chance to implement it since I couldn&apos;t come up with a way to test it well.
I think I have a decent testing strategy now so I&apos;d go write a patch after this.

&gt; &gt; Source/WebCore/workers/WorkerGlobalScope.h:70
&gt; &gt; -    AbstractEventLoop&amp; eventLoop() final;
&gt; &gt; +    EventLoopTaskGroup&amp; eventLoop() final;
&gt; 
&gt; Bit weird that eventLoop() doesn&apos;t return an event loop, but ok.

Yeah, I thought about renaming this to eventLoopTestGroup but I didn&apos;t want everyone using eventLoop() to think about EventLoopTestGroup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591203</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-11-18 13:20:25 -0800</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #6)
&gt; Comment on attachment 383692 [details]
&gt; Fixed the tests
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=383692&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/AbstractEventLoop.h:141
&gt; &gt; +    void queueTask(std::unique_ptr&lt;EventLoopTask&gt;&amp;&amp; task)
&gt; &gt; +    {
&gt; &gt; +        if (m_state == State::Stopped || !m_eventLoop)
&gt; &gt; +            return;
&gt; &gt; +        ASSERT(!task-&gt;m_group);
&gt; &gt; +        task-&gt;m_group = makeWeakPtr(*this);
&gt; &gt; +        m_eventLoop-&gt;queueTask(WTFMove(task));
&gt; &gt; +    }
&gt; 
&gt; There is an alternative factoring where group would be provided to
&gt; EventLoopTask as a constructor parameter instead of being set here. This
&gt; might lead to cleaner separation of functionality between AbstractEventLoop
&gt; and EventLoopTaskGroup. AbstractEventLoop would offer the queuing interface
&gt; while suspend/resume would be in EventLoopTaskGroup.

Oh, that&apos;s a good idea. EventLoopTaskGroup::queueTask which takes a function will end up using `*this` as an argument to EventLoopFunctionDispatchTask&apos;s constructor but this is still way cleaner. EventLoopTask no longer has to have EventLoopTaskGroup as a friend class. Not sure why I didn&apos;t think of this.

FYI, you can also see other variants on https://bugs.webkit.org/show_bug.cgi?id=203667 where I considered using EventTarget or more broadly void* as a grouping mechanism.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591228</commentid>
    <comment_count>9</comment_count>
      <attachid>383788</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-11-18 13:50:50 -0800</bug_when>
    <thetext>Created attachment 383788
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591229</commentid>
    <comment_count>10</comment_count>
      <attachid>383788</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-11-18 13:51:06 -0800</bug_when>
    <thetext>Comment on attachment 383788
Patch for landing

Wait for EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591326</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-11-18 16:54:59 -0800</bug_when>
    <thetext>Committed r252607: &lt;https://trac.webkit.org/changeset/252607&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591327</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-11-18 16:55:25 -0800</bug_when>
    <thetext>&lt;rdar://problem/57304899&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383674</attachid>
            <date>2019-11-15 17:24:08 -0800</date>
            <delta_ts>2019-11-15 18:51:31 -0800</delta_ts>
            <desc>Does refactoring</desc>
            <filename>bug-204263-20191115172408.patch</filename>
            <type>text/plain</type>
            <size>48953</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MjUxMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNSBAQAorMjAxOS0xMS0xNSAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBTaGFyZSBtb3JlIGNvZGUgYmV0
d2VlbiBXaW5kb3dFdmVudExvb3AgYW5kIFdvcmtlckV2ZW50TG9vcCBieSBpbnRyb2R1Y2luZyBF
dmVudExvb3BUYXNrR3JvdXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwNDI2MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggYWJzdHJhY3RzIHRoZSBsb2dpYyBpbiBXaW5kb3dFdmVudExv
b3AgdG8gZGVhbCB3aXRoIGEgc2V0IG9mIHRhc2tzIGFzc29jaWF0ZWQgd2l0aAorICAgICAgICBh
IHBhcnRpY3VsYXIgZG9jdW1lbnRzIGFsbCBzdXNwZW5kaW5nLCByZXN1bWluZywgb3Igc3RvcHBp
bmcgYXQgdGhlIHNhbWUgdGltZSB1c2luZyBhIG5ldyBhYnN0cmFjdGlvbgorICAgICAgICBjYWxs
ZWQgRXZlbnRMb29wVGFza0dyb3VwIGluIG9yZGVyIHRvIGdyb3VwIHRhc2tzIGZvciBtZWRpYSBj
b2RlIGFuZCBlbHNld2hlcmUuCisKKyAgICAgICAgRWFjaCB0YXNrIGlzIG5vdyByZXByZXNlbnRl
ZCBhcyBhbiBpbnN0YW5jZSBvZiBhIGNvbmNyZXRlIHN1YmNsYXNzIG9mIEV2ZW50TG9vcFRhc2ss
IHdoaWNoIGhhcworICAgICAgICBhIHB1cmUgdmlydHVhbCBleGVjdXRlKCkgbWVtYmVyIGZ1bmN0
aW9uLiBJdHMgcHJpbWFyeSBwdXJwb3NlIGlzIHRvIGtub3cgRXZlbnRMb29wVGFza0dyb3VwIHRv
IHdoaWNoCisgICAgICAgIGVhY2ggdGFzayBiZWxvbmdzLiBPbmUgb2Ygc3ViY2xhc3NzLCBFdmVu
dExvb3BGdW5jdGlvbkRpc3BhdGNoVGFzaywgaXMgdXNlZCB0byBzdG9yZSBhIGNhbGxiYWNrIGZ1
bmN0aW9uCisgICAgICAgIGFuZCBhbm90aGVyIHN1YmNsYXNzLCBBY3RpdmVET01PYmplY3RFdmVu
dERpc3BhdGNoVGFzaywgaXMgdXNlZCB0byBkaXNwYXRjaCBhbiBhc3luYyBldmVudC4KKworICAg
ICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0J3MgZXZlbnRMb29wKCkgbWV0aG9kIG5vdyByZXR1
cm5zIEV2ZW50TG9vcFRhc2tHcm91cC4gQmVjYXVzZSB0aGlzIGdyb3VwIGlzCisgICAgICAgIHNw
ZWNpZmljIHRvIGEgZ2l2ZW4gU2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgd2Ugbm8gbG9uZ2VyIGhh
dmUgdG8gcGFzcyB0aGUgU2NyaXB0RXhlY3V0aW9uQ29udGV4dAorICAgICAgICBpbiBlYWNoIGNh
bGwgdG8gcXVldWVUYXNrIGV2ZXJ5d2hlcmUgaW4gb3VyIGNvZGViYXNlLgorCisgICAgICAgIEZv
ciBub3csIEkga2VwdCBhbGwgdGhlIGNvZGUgaW4gV2luZG93RXZlbnRMb29wLmNwcCB0byBtYWtl
IHRoZSBwYXRjaCByZXZpZXdhYmxlLiBNeSBwbGFuIGlzIHRvIGNyZWF0ZQorICAgICAgICBhIG5l
dyBjcHAgZmlsZSAoZS5nLiBBYnN0cmFjdEV2ZW50TG9vcC5jcHApIGFuZCBtb3ZlIG1vc3Qgb2Yg
Y29kZSB0aGVyZSBpbnN0ZWFkIGFzIGEgZm9sbG93IHVwLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cyBzaW5jZSB0aGVyZSBzaG91bGQgYmUgbm8gb2JzZXJ2YWJsZSBiZWhhdmlvciBjaGFuZ2UuCisK
KyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5cy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYUtleXM6OnNldFNlcnZlckNlcnRpZmljYXRlKToKKyAgICAgICAgKiBN
b2R1bGVzL2VudHJpZXNhcGkvRmlsZVN5c3RlbURpcmVjdG9yeUVudHJ5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpbGVTeXN0ZW1EaXJlY3RvcnlFbnRyeTo6Z2V0RW50cnkpOgorICAgICAgICAq
IE1vZHVsZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRGlyZWN0b3J5UmVhZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbGVTeXN0ZW1EaXJlY3RvcnlSZWFkZXI6OnJlYWRFbnRyaWVzKToKKyAg
ICAgICAgKiBNb2R1bGVzL2VudHJpZXNhcGkvRmlsZVN5c3RlbUVudHJ5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpbGVTeXN0ZW1FbnRyeTo6Z2V0UGFyZW50KToKKyAgICAgICAgKiBNb2R1bGVz
L2VudHJpZXNhcGkvRmlsZVN5c3RlbUZpbGVFbnRyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
aWxlU3lzdGVtRmlsZUVudHJ5OjpmaWxlKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhcmVjb3Jk
ZXIvTWVkaWFSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVJlY29yZGVyOjpz
Y2hlZHVsZURlZmVycmVkVGFzayk6CisgICAgICAgICogTW9kdWxlcy9ub3RpZmljYXRpb25zL05v
dGlmaWNhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb246OnF1ZXVlVGFz
ayk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZTo6cnVuVHJhbnNhY3Rpb24pOgorICAgICAgICAqIE1vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlTWFuYWdlcjo6b3BlbkRhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNl
L1NRTFRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpj
YWxsRXJyb3JDYWxsYmFja0R1ZVRvSW50ZXJydXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNR
TFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyU3VjY2Vzc0NhbGxiYWNrKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTVByb21pc2VEZWZlcnJlZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEZWZlcnJlZFByb21pc2U6OmNhbGxGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpE
ZWZlcnJlZFByb21pc2U6OndoZW5TZXR0bGVkKToKKyAgICAgICAgKiBkb20vQWJzdHJhY3RFdmVu
dExvb3AuaDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TG9vcFRhc2spOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50TG9vcFRhc2s6OnRhc2tTb3VyY2UpOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50TG9vcFRhc2s6Omdyb3VwIGNvbnN0KTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpFdmVudExvb3BUYXNrOjpFdmVudExvb3BUYXNrKTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpFdmVudExvb3BUYXNrR3JvdXApOiBBZGRlZC4gVGhpcyBjbGFzcyByZXByZXNlbnRz
IGEgZ3JvdXAgb2YgdGFza3MuIEZvciBub3csIGVhY2ggZ3JvdXAgaXMKKyAgICAgICAgYSBkaXN0
aW5jdCBTY3JpcHRFeGVjdXRpb25Db250ZXh0LgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29w
VGFza0dyb3VwOjptYXRjaGVzVGFzayBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRMb29wVGFza0dyb3VwOjpzdGFydFJ1bm5pbmcpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50TG9vcFRhc2tHcm91cDo6c3RvcEFuZERpc2NhcmRBbGxUYXNrcyk6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29wVGFza0dyb3VwOjpzdXNwZW5kKTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpFdmVudExvb3BUYXNrR3JvdXA6OnJlc3VtZSk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRMb29wVGFza0dyb3VwOjppc1N0b3BwZWRQZXJtYW5lbnRseSk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29wVGFza0dyb3VwOjppc1N1c3BlbmRl
ZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29wVGFza0dyb3VwOjpoYXNTY2hl
ZHVsZWRUYXNrcyBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29wVGFz
a0dyb3VwOjpxdWV1ZVRhc2spOiBBZGRlZC4KKyAgICAgICAgKiBkb20vQWN0aXZlRE9NT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjdGl2ZURPTU9iamVjdDo6cXVldWVUYXNrSW5FdmVu
dExvb3ApOgorICAgICAgICAoV2ViQ29yZTo6QWN0aXZlRE9NT2JqZWN0RXZlbnREaXNwYXRjaFRh
c2spOiBBZGRlZDsgQSBzdWJjbGFzcyBvZiBFdmVudExvb3BUYXNrIHRvIGRpc3BhdGNoIGFuIGFz
eW5jIGV2ZW50LgorICAgICAgICAoV2ViQ29yZTo6QWN0aXZlRE9NT2JqZWN0RXZlbnREaXNwYXRj
aFRhc2s6OkFjdGl2ZURPTU9iamVjdEV2ZW50RGlzcGF0Y2hUYXNrKTogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpBY3RpdmVET01PYmplY3RFdmVudERpc3BhdGNoVGFzazo6fkFjdGl2ZURPTU9i
amVjdEV2ZW50RGlzcGF0Y2hUYXNrKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpBY3RpdmVE
T01PYmplY3Q6OnF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudCk6IEFkZGVkLgorICAgICAgICAqIGRv
bS9BY3RpdmVET01PYmplY3QuaDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzKToKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpyZXN1bWVBY3RpdmVET01PYmplY3RzKToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50OjpzdG9wQWN0aXZlRE9NT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudDo6ZXZlbnRMb29wKTogQ3JlYXRlcyBFdmVudExvb3BUYXNrR3JvdXAgZm9yIHRo
aXMgZG9jdW1lbnQuCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogZG9tL0lk
bGVDYWxsYmFja0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SWRsZUNhbGxiYWNr
Q29udHJvbGxlcjo6cXVldWVUYXNrVG9TdGFydElkbGVQZXJpb2QpOgorICAgICAgICAoV2ViQ29y
ZTo6SWRsZUNhbGxiYWNrQ29udHJvbGxlcjo6cXVldWVUYXNrVG9JbnZva2VJZGxlQ2FsbGJhY2tz
KToKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oOgorICAgICAgICAqIGRv
bS9XaW5kb3dFdmVudExvb3AuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3RFdmVudExv
b3A6OnF1ZXVlVGFzayk6IFRoZSBpbXBsZW1lbnRhdGlvbiBtb3ZlZCBmcm9tIFdpbmRvd0V2ZW50
TG9vcCB0byBBYnN0cmFjdEV2ZW50TG9vcC4KKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RXZl
bnRMb29wOjpzdXNwZW5kR3JvdXApOiBEaXR0by4gQWxzbyByZW5hbWVkIGZyb20gc3VzcGVuZC4K
KyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RXZlbnRMb29wOjpyZXN1bWVHcm91cCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3RFdmVudExvb3A6OnN0b3BHcm91cCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6V2luZG93RXZlbnRMb29wOjpzY2hlZHVsZVRvUnVuKTogUmVu
YW1lZCBmcm9tIFdpbmRvd0V2ZW50TG9vcDo6c2NoZWR1bGVUb1J1bklmTmVlZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6QWJzdHJhY3RFdmVudExvb3A6OnNjaGVkdWxlVG9SdW5JZk5lZWRlZCk6IEV4
dHJhY3RlZCBmcm9tIFdpbmRvd0V2ZW50TG9vcDo6c2NoZWR1bGVUb1J1bklmTmVlZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6QWJzdHJhY3RFdmVudExvb3A6OnJ1bik6IFRoZSBpbXBsZW1lbnRhdGlv
biBtb3ZlZCBmcm9tIFdpbmRvd0V2ZW50TG9vcCB0byBBYnN0cmFjdEV2ZW50TG9vcC4KKyAgICAg
ICAgKFdlYkNvcmU6OkFic3RyYWN0RXZlbnRMb29wOjpjbGVhckFsbFRhc2tzKTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpFdmVudExvb3BGdW5jdGlvbkRpc3BhdGNoVGFzayk6IEFkZGVkOyBB
IHN1YmNsYXNzIG9mIEV2ZW50TG9vcFRhc2sgdG8gY2FsbCBhIGZ1bmN0aW9uLgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRMb29wRnVuY3Rpb25EaXNwYXRjaFRhc2s6OkV2ZW50TG9vcEZ1bmN0aW9u
RGlzcGF0Y2hUYXNrKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFdmVudExvb3BUYXNrR3Jv
dXA6OnF1ZXVlVGFzayk6IEFkZGVkLgorICAgICAgICAqIGRvbS9XaW5kb3dFdmVudExvb3AuaDoK
KyAgICAgICAgKiBmaWxlYXBpL0ZpbGVSZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rmls
ZVJlYWRlcjo6ZW5xdWV1ZVRhc2spOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cXVldWVUYXNrKToKKyAgICAgICAgKiB3b3Jr
ZXJzL1dvcmtlckV2ZW50TG9vcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJFdmVudExv
b3A6OldvcmtlckV2ZW50TG9vcCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJFdmVudExvb3A6
OnF1ZXVlVGFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJFdmVudExvb3A6
OmFjdGl2ZURPTU9iamVjdE5hbWUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyRXZlbnRMb29wOjpzdXNwZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlckV2ZW50TG9vcDo6cmVzdW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
ckV2ZW50TG9vcDo6c3RvcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJFdmVu
dExvb3A6OnNjaGVkdWxlVG9SdW4pOiBFeHRyYWN0ZWQgZnJvbSBzY2hlZHVsZVRvUnVuSWZOZWVk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJFdmVudExvb3A6OnNjaGVkdWxlVG9SdW5JZk5l
ZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJFdmVudExvb3A6OnJ1bik6
IERlbGV0ZWQuCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJFdmVudExvb3AuaDoKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlckV2ZW50TG9vcCk6IFRoaXMgY2xhc3MgaXMgbm8gbG9uZ2VyIGFuIGFj
dGl2ZSBET00gb2JqZWN0LiBXb3JrZXJHbG9iYWxTY29wZSBhbmQgV29ya2VyR2xvYmFsU2NvcGUK
KyAgICAgICAgbWFudWFsbHkgc3RvcCB0aGUgdGFzayBncm91cCBhc3NvY2lhdGVkIHdpdGggaXQu
CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJHbG9iYWxTY29wZTo6ZXZlbnRMb29wKTogQ3JlYXRlIHRoZSBkZWZhdWx0IHRh
c2sgZ3JvdXAgZm9yIHRoaXMgc2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0LgorICAgICAgICAoV2Vi
Q29yZTo6V29ya2VyR2xvYmFsU2NvcGU6OnByZXBhcmVGb3JUZXJtaW5hdGlvbik6IFN0b3AgdGhl
IGRlZmF1bHQgdGFzayBncm91cC4KKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckdsb2JhbFNjb3Bl
Lmg6CisgICAgICAgICogd29ya2xldHMvV29ya2xldEdsb2JhbFNjb3BlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtsZXRHbG9iYWxTY29wZTo6cHJlcGFyZUZvckRlc3RydWN0aW9uKTogU2lt
aWxhciB0byBXb3JrZXJHbG9iYWxTY29wZTo6cHJlcGFyZUZvclRlcm1pbmF0aW9uLgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2xldEdsb2JhbFNjb3BlOjpldmVudExvb3ApOiBTaW1pbGFyIHRvIFdv
cmtlckdsb2JhbFNjb3BlOjpldmVudExvb3AuCisgICAgICAgICogd29ya2xldHMvV29ya2xldEds
b2JhbFNjb3BlLmg6CisKIDIwMTktMTEtMTUgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5j
b20+CiAKICAgICAgICAgQ1JBU0ggaW4gU291cmNlQnVmZmVyOjpyZW1vdmVDb2RlZEZyYW1lcygp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9N
ZWRpYUtleXMuY3BwCShyZXZpc2lvbiAyNTI1MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsx
MDYsNyBAQCB2b2lkIE1lZGlhS2V5czo6c2V0U2VydmVyQ2VydGlmaWNhdGUoU2NyCiAgICAgLy8g
NC4gTGV0IHByb21pc2UgYmUgYSBuZXcgcHJvbWlzZS4KICAgICAvLyA1LiBSdW4gdGhlIGZvbGxv
d2luZyBzdGVwcyBpbiBwYXJhbGxlbDoKIAotICAgIGNvbnRleHQuZXZlbnRMb29wKCkucXVldWVU
YXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIGNvbnRleHQsIFt0aGlzLCBjZXJ0aWZpY2F0ZSA9
IFdURk1vdmUoY2VydGlmaWNhdGUpLCBwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKV0gKCkgbXV0
YWJsZSB7CisgICAgY29udGV4dC5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0
d29ya2luZywgW3RoaXMsIGNlcnRpZmljYXRlID0gV1RGTW92ZShjZXJ0aWZpY2F0ZSksIHByb21p
c2UgPSBXVEZNb3ZlKHByb21pc2UpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgLy8gNS4xLiBVc2Ug
dGhpcyBvYmplY3QncyBjZG0gaW5zdGFuY2UgdG8gcHJvY2VzcyBjZXJ0aWZpY2F0ZS4KICAgICAg
ICAgaWYgKG1faW5zdGFuY2UtPnNldFNlcnZlckNlcnRpZmljYXRlKFdURk1vdmUoY2VydGlmaWNh
dGUpKSA9PSBDRE1JbnN0YW5jZTo6RmFpbGVkKSB7CiAgICAgICAgICAgICAvLyA1LjIuIElmIHRo
ZSBwcmVjZWRpbmcgc3RlcCBmYWlsZWQsIHJlc29sdmUgcHJvbWlzZSB3aXRoIGEgbmV3IERPTUV4
Y2VwdGlvbiB3aG9zZSBuYW1lIGlzIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBuYW1lLgpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0ZW1EaXJlY3RvcnlFbnRy
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0Zp
bGVTeXN0ZW1EaXJlY3RvcnlFbnRyeS5jcHAJKHJldmlzaW9uIDI1MjUwNikKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRGlyZWN0b3J5RW50cnkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgRmlsZVN5c3RlbURpcmVjdG9yeUVu
dHJ5OjpnZXRFbnRyeSgKICAgICAgICAgYXV0byogZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgp
OwogICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICBpZiAo
ZXJyb3JDYWxsYmFjayAmJiBkb2N1bWVudCkgewotICAgICAgICAgICAgICAgIGRvY3VtZW50LT5l
dmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgKmRvY3VtZW50LCBb
ZXJyb3JDYWxsYmFjayA9IFdURk1vdmUoZXJyb3JDYWxsYmFjayksIGV4Y2VwdGlvbiA9IHJlc3Vs
dC5yZWxlYXNlRXhjZXB0aW9uKCksIHBlbmRpbmdBY3Rpdml0eSA9IFdURk1vdmUocGVuZGluZ0Fj
dGl2aXR5KV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC0+ZXZlbnRMb29w
KCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIFtlcnJvckNhbGxiYWNrID0gV1RG
TW92ZShlcnJvckNhbGxiYWNrKSwgZXhjZXB0aW9uID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24o
KSwgcGVuZGluZ0FjdGl2aXR5ID0gV1RGTW92ZShwZW5kaW5nQWN0aXZpdHkpXSgpIG11dGFibGUg
ewogICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChET01FeGNl
cHRpb246OmNyZWF0ZShXVEZNb3ZlKGV4Y2VwdGlvbikpKTsKICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgIH0KQEAgLTY2LDE0ICs2NiwxNCBAQCB2b2lkIEZpbGVTeXN0ZW1EaXJlY3Rv
cnlFbnRyeTo6Z2V0RW50cnkoCiAgICAgICAgIGF1dG8gZW50cnkgPSByZXN1bHQucmVsZWFzZVJl
dHVyblZhbHVlKCk7CiAgICAgICAgIGlmICghbWF0Y2hlcyhlbnRyeSkpIHsKICAgICAgICAgICAg
IGlmIChlcnJvckNhbGxiYWNrICYmIGRvY3VtZW50KSB7Ci0gICAgICAgICAgICAgICAgZG9jdW1l
bnQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCAqZG9jdW1l
bnQsIFtlcnJvckNhbGxiYWNrID0gV1RGTW92ZShlcnJvckNhbGxiYWNrKSwgcGVuZGluZ0FjdGl2
aXR5ID0gV1RGTW92ZShwZW5kaW5nQWN0aXZpdHkpXSgpIG11dGFibGUgeworICAgICAgICAgICAg
ICAgIGRvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2lu
ZywgW2Vycm9yQ2FsbGJhY2sgPSBXVEZNb3ZlKGVycm9yQ2FsbGJhY2spLCBwZW5kaW5nQWN0aXZp
dHkgPSBXVEZNb3ZlKHBlbmRpbmdBY3Rpdml0eSldKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAg
ICAgICAgIGVycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KERPTUV4Y2VwdGlvbjo6Y3JlYXRlKEV4
Y2VwdGlvbiB7IFR5cGVNaXNtYXRjaEVycm9yLCAiRW50cnkgYXQgZ2l2ZW4gcGF0aCBkb2VzIG5v
dCBtYXRjaCBleHBlY3RlZCB0eXBlIl9zIH0pKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAoc3Vj
Y2Vzc0NhbGxiYWNrICYmIGRvY3VtZW50KSB7Ci0gICAgICAgICAgICBkb2N1bWVudC0+ZXZlbnRM
b29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsICpkb2N1bWVudCwgW3N1Y2Nl
c3NDYWxsYmFjayA9IFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgZW50cnkgPSBXVEZNb3ZlKGVu
dHJ5KSwgcGVuZGluZ0FjdGl2aXR5ID0gV1RGTW92ZShwZW5kaW5nQWN0aXZpdHkpXSgpIG11dGFi
bGUgeworICAgICAgICAgICAgZG9jdW1lbnQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291
cmNlOjpOZXR3b3JraW5nLCBbc3VjY2Vzc0NhbGxiYWNrID0gV1RGTW92ZShzdWNjZXNzQ2FsbGJh
Y2spLCBlbnRyeSA9IFdURk1vdmUoZW50cnkpLCBwZW5kaW5nQWN0aXZpdHkgPSBXVEZNb3ZlKHBl
bmRpbmdBY3Rpdml0eSldKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxi
YWNrLT5oYW5kbGVFdmVudChXVEZNb3ZlKGVudHJ5KSk7CiAgICAgICAgICAgICB9KTsKICAgICAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0ZW1E
aXJlY3RvcnlSZWFkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZW50cmllc2FwaS9GaWxlU3lzdGVtRGlyZWN0b3J5UmVhZGVyLmNwcAkocmV2aXNpb24gMjUyNTA2
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0ZW1EaXJlY3Rv
cnlSZWFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIHZvaWQgRmlsZVN5
c3RlbURpcmVjdG9yeVJlYWRlcjo6cmVhZEVudHIKICAgICAgICAgICAgIGlmIChyZXN1bHQuaGFz
RXhjZXB0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBtX2Vycm9yID0gcmVzdWx0LnJlbGVhc2VF
eGNlcHRpb24oKTsKICAgICAgICAgICAgICAgICBpZiAoZXJyb3JDYWxsYmFjayAmJiBkb2N1bWVu
dCkgewotICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNr
KFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsICpkb2N1bWVudCwgW3RoaXMsIGVycm9yQ2FsbGJhY2sg
PSBXVEZNb3ZlKGVycm9yQ2FsbGJhY2spLCBwZW5kaW5nQWN0aXZpdHkgPSBXVEZNb3ZlKHBlbmRp
bmdBY3Rpdml0eSldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LT5l
dmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgW3RoaXMsIGVycm9y
Q2FsbGJhY2sgPSBXVEZNb3ZlKGVycm9yQ2FsbGJhY2spLCBwZW5kaW5nQWN0aXZpdHkgPSBXVEZN
b3ZlKHBlbmRpbmdBY3Rpdml0eSldKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBlcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChET01FeGNlcHRpb246OmNyZWF0ZSgqbV9lcnJv
cikpOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB9CkBAIC05Nyw3
ICs5Nyw3IEBAIHZvaWQgRmlsZVN5c3RlbURpcmVjdG9yeVJlYWRlcjo6cmVhZEVudHIKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIG1faXNEb25lID0gdHJ1ZTsKICAgICAgICAgICAgIGlmIChk
b2N1bWVudCkgewotICAgICAgICAgICAgICAgIGRvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRh
c2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgKmRvY3VtZW50LCBbc3VjY2Vzc0NhbGxiYWNrID0g
V1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spLCBwZW5kaW5nQWN0aXZpdHkgPSBXVEZNb3ZlKHBlbmRp
bmdBY3Rpdml0eSksIHJlc3VsdCA9IHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKV0oKSBtdXRh
YmxlIHsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRh
c2tTb3VyY2U6Ok5ldHdvcmtpbmcsIFtzdWNjZXNzQ2FsbGJhY2sgPSBXVEZNb3ZlKHN1Y2Nlc3ND
YWxsYmFjayksIHBlbmRpbmdBY3Rpdml0eSA9IFdURk1vdmUocGVuZGluZ0FjdGl2aXR5KSwgcmVz
dWx0ID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpXSgpIG11dGFibGUgewogICAgICAgICAg
ICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2stPmhhbmRsZUV2ZW50KFdURk1vdmUocmVzdWx0KSk7
CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2VudHJpZXNhcGkvRmlsZVN5c3RlbUVudHJ5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VudHJpZXNhcGkvRmlsZVN5c3RlbUVudHJ5LmNwcAkocmV2
aXNpb24gMjUyNTA2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVT
eXN0ZW1FbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBGaWxl
U3lzdGVtRW50cnk6OmdldFBhcmVudChTY3JpcHRFeAogICAgICAgICBpZiAoIWRvY3VtZW50KQog
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGRvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1
ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgKmRvY3VtZW50LCBbc3VjY2Vzc0NhbGxiYWNr
ID0gV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spLCBlcnJvckNhbGxiYWNrID0gV1RGTW92ZShlcnJv
ckNhbGxiYWNrKSwgcmVzdWx0ID0gV1RGTW92ZShyZXN1bHQpLCBwZW5kaW5nQWN0aXZpdHkgPSBX
VEZNb3ZlKHBlbmRpbmdBY3Rpdml0eSldKCkgbXV0YWJsZSB7CisgICAgICAgIGRvY3VtZW50LT5l
dmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgW3N1Y2Nlc3NDYWxs
YmFjayA9IFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgZXJyb3JDYWxsYmFjayA9IFdURk1vdmUo
ZXJyb3JDYWxsYmFjayksIHJlc3VsdCA9IFdURk1vdmUocmVzdWx0KSwgcGVuZGluZ0FjdGl2aXR5
ID0gV1RGTW92ZShwZW5kaW5nQWN0aXZpdHkpXSgpIG11dGFibGUgewogICAgICAgICAgICAgaWYg
KHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewogICAgICAgICAgICAgICAgIGlmIChlcnJvckNhbGxi
YWNrKQogICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChET01F
eGNlcHRpb246OmNyZWF0ZShyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2VudHJpZXNhcGkvRmlsZVN5c3RlbUZpbGVFbnRyeS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0ZW1G
aWxlRW50cnkuY3BwCShyZXZpc2lvbiAyNTI1MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2VudHJpZXNhcGkvRmlsZVN5c3RlbUZpbGVFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDcgKzQ4LDcgQEAgdm9pZCBGaWxlU3lzdGVtRmlsZUVudHJ5OjpmaWxlKFJlZjxGaWxlQwogICAg
ICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGRvY3Vt
ZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgKmRvY3Vt
ZW50LCBbc3VjY2Vzc0NhbGxiYWNrID0gV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spLCBlcnJvckNh
bGxiYWNrID0gV1RGTW92ZShlcnJvckNhbGxiYWNrKSwgcmVzdWx0ID0gV1RGTW92ZShyZXN1bHQp
LCBwZW5kaW5nQWN0aXZpdHkgPSBXVEZNb3ZlKHBlbmRpbmdBY3Rpdml0eSldKCkgbXV0YWJsZSB7
CisgICAgICAgIGRvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0
d29ya2luZywgW3N1Y2Nlc3NDYWxsYmFjayA9IFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgZXJy
b3JDYWxsYmFjayA9IFdURk1vdmUoZXJyb3JDYWxsYmFjayksIHJlc3VsdCA9IFdURk1vdmUocmVz
dWx0KSwgcGVuZGluZ0FjdGl2aXR5ID0gV1RGTW92ZShwZW5kaW5nQWN0aXZpdHkpXSgpIG11dGFi
bGUgewogICAgICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewogICAgICAgICAg
ICAgICAgIGlmIChlcnJvckNhbGxiYWNrKQogICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxi
YWNrLT5oYW5kbGVFdmVudChET01FeGNlcHRpb246OmNyZWF0ZShyZXN1bHQucmVsZWFzZUV4Y2Vw
dGlvbigpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhcmVjb3JkZXIvTWVk
aWFSZWNvcmRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXJlY29yZGVyL01lZGlhUmVjb3JkZXIuY3BwCShyZXZpc2lvbiAyNTI1MDYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhcmVjb3JkZXIvTWVkaWFSZWNvcmRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxNiw3ICsyMTYsNyBAQCB2b2lkIE1lZGlhUmVjb3JkZXI6OnNjaGVkdWxlRGVm
ZXJyZWRUYXNrCiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZG9j
dW1lbnQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCAqZG9j
dW1lbnQsIFtwZW5kaW5nQWN0aXZpdHkgPSBtYWtlUGVuZGluZ0FjdGl2aXR5KCp0aGlzKSwgZnVu
Y3Rpb24gPSBXVEZNb3ZlKGZ1bmN0aW9uKV0geworICAgIGRvY3VtZW50LT5ldmVudExvb3AoKS5x
dWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgW3BlbmRpbmdBY3Rpdml0eSA9IG1ha2VQ
ZW5kaW5nQWN0aXZpdHkoKnRoaXMpLCBmdW5jdGlvbiA9IFdURk1vdmUoZnVuY3Rpb24pXSB7CiAg
ICAgICAgIGZ1bmN0aW9uKCk7CiAgICAgfSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmNwcAkocmV2aXNpb24g
MjUyNTA2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNh
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIE5vdGlmaWNh
dGlvbjo6cXVldWVUYXNrKEZ1bmN0aW9uPHZvCiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgZG9jdW1lbnQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNl
OjpVc2VySW50ZXJhY3Rpb24sICpkb2N1bWVudCwgV1RGTW92ZSh0YXNrKSk7CisgICAgZG9jdW1l
bnQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpVc2VySW50ZXJhY3Rpb24sIFdU
Rk1vdmUodGFzaykpOwogfQogCiB2b2lkIE5vdGlmaWNhdGlvbjo6ZGlzcGF0Y2hTaG93RXZlbnQo
KQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZS5jcHAJKHJldmlzaW9uIDI1MjUwNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODksNyArNjg5LDcgQEAgdm9p
ZCBEYXRhYmFzZTo6cnVuVHJhbnNhY3Rpb24oUmVmUHRyPFNRTAogICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fdHJhbnNhY3Rpb25JblByb2dyZXNzTXV0ZXgpOwogICAgIGlmICghbV9pc1RyYW5zYWN0
aW9uUXVldWVFbmFibGVkKSB7CiAgICAgICAgIGlmIChlcnJvckNhbGxiYWNrKSB7Ci0gICAgICAg
ICAgICBtX2RvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29y
a2luZywgbV9kb2N1bWVudCwgW2Vycm9yQ2FsbGJhY2sgPSBtYWtlUmVmKCplcnJvckNhbGxiYWNr
KV0oKSB7CisgICAgICAgICAgICBtX2RvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFz
a1NvdXJjZTo6TmV0d29ya2luZywgW2Vycm9yQ2FsbGJhY2sgPSBtYWtlUmVmKCplcnJvckNhbGxi
YWNrKV0oKSB7CiAgICAgICAgICAgICAgICAgZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQoU1FM
RXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VU5LTk9XTl9FUlIsICJkYXRhYmFzZSBoYXMgYmVlbiBj
bG9zZWQiKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcAko
cmV2aXNpb24gMjUyNTA2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNyArMjEwLDcgQEAgRXhj
ZXB0aW9uT3I8UmVmPERhdGFiYXNlPj4gRGF0YWJhc2VNYW5hZwogICAgIGlmIChkYXRhYmFzZS0+
aXNOZXcoKSAmJiBjcmVhdGlvbkNhbGxiYWNrLmdldCgpKSB7CiAgICAgICAgIExPRyhTdG9yYWdl
QVBJLCAiU2NoZWR1bGluZyBEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrIGZvciBkYXRhYmFz
ZSAlcFxuIiwgZGF0YWJhc2UuZ2V0KCkpOwogICAgICAgICBkYXRhYmFzZS0+c2V0SGFzUGVuZGlu
Z0NyZWF0aW9uRXZlbnQodHJ1ZSk7Ci0gICAgICAgIGRhdGFiYXNlLT5tX2RvY3VtZW50LT5ldmVu
dExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgZGF0YWJhc2UtPm1fZG9j
dW1lbnQsIFtjcmVhdGlvbkNhbGxiYWNrLCBkYXRhYmFzZV0oKSB7CisgICAgICAgIGRhdGFiYXNl
LT5tX2RvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2lu
ZywgW2NyZWF0aW9uQ2FsbGJhY2ssIGRhdGFiYXNlXSgpIHsKICAgICAgICAgICAgIGNyZWF0aW9u
Q2FsbGJhY2stPmhhbmRsZUV2ZW50KCpkYXRhYmFzZSk7CiAgICAgICAgICAgICBkYXRhYmFzZS0+
c2V0SGFzUGVuZGluZ0NyZWF0aW9uRXZlbnQoZmFsc2UpOwogICAgICAgICB9KTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rp
b24uY3BwCShyZXZpc2lvbiAyNTI1MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTFRyYW5zYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3
IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmNhbGxFcnJvckNhbGxiYWNrRHUKICAgICBpZiAoIWVy
cm9yQ2FsbGJhY2spCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YWJhc2UtPmRvY3VtZW50
KCkuZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIG1fZGF0YWJh
c2UtPmRvY3VtZW50KCksIFtlcnJvckNhbGxiYWNrID0gV1RGTW92ZShlcnJvckNhbGxiYWNrKV0o
KSBtdXRhYmxlIHsKKyAgICBtX2RhdGFiYXNlLT5kb2N1bWVudCgpLmV2ZW50TG9vcCgpLnF1ZXVl
VGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCBbZXJyb3JDYWxsYmFjayA9IFdURk1vdmUoZXJy
b3JDYWxsYmFjayldKCkgbXV0YWJsZSB7CiAgICAgICAgIGVycm9yQ2FsbGJhY2stPmhhbmRsZUV2
ZW50KFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgInRoZSBkYXRhYmFz
ZSB3YXMgY2xvc2VkIikpOwogICAgIH0pOwogfQpAQCAtNDE1LDcgKzQxNSw3IEBAIHZvaWQgU1FM
VHJhbnNhY3Rpb246OmRlbGl2ZXJUcmFuc2FjdGlvbkUKICAgICAvLyBlcnJvciB0byBoYXZlIG9j
Y3VycmVkIGluIHRoaXMgdHJhbnNhY3Rpb24uCiAgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayA9IG1fZXJyb3JDYWxsYmFja1dyYXBwZXIudW53cmFw
KCk7CiAgICAgaWYgKGVycm9yQ2FsbGJhY2spIHsKLSAgICAgICAgbV9kYXRhYmFzZS0+ZG9jdW1l
bnQoKS5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgbV9kYXRh
YmFzZS0+ZG9jdW1lbnQoKSwgW2Vycm9yQ2FsbGJhY2sgPSBXVEZNb3ZlKGVycm9yQ2FsbGJhY2sp
LCB0cmFuc2FjdGlvbkVycm9yID0gbV90cmFuc2FjdGlvbkVycm9yXSgpIG11dGFibGUgeworICAg
ICAgICBtX2RhdGFiYXNlLT5kb2N1bWVudCgpLmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291
cmNlOjpOZXR3b3JraW5nLCBbZXJyb3JDYWxsYmFjayA9IFdURk1vdmUoZXJyb3JDYWxsYmFjayks
IHRyYW5zYWN0aW9uRXJyb3IgPSBtX3RyYW5zYWN0aW9uRXJyb3JdKCkgbXV0YWJsZSB7CiAgICAg
ICAgICAgICBlcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudCgqdHJhbnNhY3Rpb25FcnJvcik7CiAg
ICAgICAgIH0pOwogICAgIH0KQEAgLTQ2Niw3ICs0NjYsNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9u
OjpkZWxpdmVyU3VjY2Vzc0NhbGxiCiAgICAgLy8gU3BlYyA0LjMuMi44OiBEZWxpdmVyIHN1Y2Nl
c3MgY2FsbGJhY2suCiAgICAgUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrID0g
bV9zdWNjZXNzQ2FsbGJhY2tXcmFwcGVyLnVud3JhcCgpOwogICAgIGlmIChzdWNjZXNzQ2FsbGJh
Y2spIHsKLSAgICAgICAgbV9kYXRhYmFzZS0+ZG9jdW1lbnQoKS5ldmVudExvb3AoKS5xdWV1ZVRh
c2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgbV9kYXRhYmFzZS0+ZG9jdW1lbnQoKSwgW3N1Y2Nl
c3NDYWxsYmFjayA9IFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICAg
ICAgbV9kYXRhYmFzZS0+ZG9jdW1lbnQoKS5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJj
ZTo6TmV0d29ya2luZywgW3N1Y2Nlc3NDYWxsYmFjayA9IFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNr
KV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIHN1Y2Nlc3NDYWxsYmFjay0+aGFuZGxlRXZlbnQo
KTsKICAgICAgICAgfSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01Qcm9taXNlRGVmZXJyZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NUHJvbWlzZURlZmVycmVkLmNwcAkocmV2aXNpb24gMjUyNTA2KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlRGVmZXJyZWQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHZvaWQgRGVmZXJyZWRQcm9taXNlOjpjYWxsRnVu
Y3Rpb24oSlNHbG8KIAogICAgIGlmIChhY3RpdmVET01PYmplY3RzQXJlU3VzcGVuZGVkKCkpIHsK
ICAgICAgICAgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duLCBTaG91bGRTdHJvbmdEZXN0cnVjdG9y
R3JhYkxvY2s6Olllcz4gc3Ryb25nUmVzb2x1dGlvbihsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCks
IHJlc29sdXRpb24pOwotICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50TG9v
cCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCAqc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBtb2RlLCBzdHJv
bmdSZXNvbHV0aW9uID0gV1RGTW92ZShzdHJvbmdSZXNvbHV0aW9uKV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFz
a1NvdXJjZTo6TmV0d29ya2luZywgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KSwgbW9kZSwgc3Ryb25nUmVzb2x1dGlvbiA9IFdURk1vdmUoc3Ryb25nUmVzb2x1dGlvbildKCkg
bXV0YWJsZSB7CiAgICAgICAgICAgICBpZiAoc2hvdWxkSWdub3JlUmVxdWVzdFRvRnVsZmlsbCgp
KQogICAgICAgICAgICAgICAgIHJldHVybjsKIApAQCAtODMsNyArODMsNyBAQCB2b2lkIERlZmVy
cmVkUHJvbWlzZTo6d2hlblNldHRsZWQoRnVuY3RpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
IChhY3RpdmVET01PYmplY3RzQXJlU3VzcGVuZGVkKCkpIHsKLSAgICAgICAgc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2lu
ZywgKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFz
a1NvdXJjZTo6TmV0d29ya2luZywgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAg
IHdoZW5TZXR0bGVkKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICAgICAgfSk7CiAgICAgICAgIHJl
dHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9BYnN0cmFjdEV2ZW50TG9vcC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9BYnN0cmFjdEV2ZW50TG9vcC5oCShyZXZpc2lv
biAyNTI1MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQWJzdHJhY3RFdmVudExvb3AuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsMjEgKzI4LDEyNCBAQAogI2luY2x1ZGUgIlRhc2tTb3VyY2UuaCIK
ICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha0hhc2hTZXQu
aD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2Ns
YXNzIEV2ZW50TG9vcFRhc2tHcm91cDsKK2NsYXNzIEV2ZW50VGFyZ2V0OwogY2xhc3MgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDsKIAorY2xhc3MgRXZlbnRMb29wVGFzayB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoRXZlbnRMb29wVGFzayk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CisKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5FdmVudExvb3BUYXNrKCkgPSBkZWZhdWx0OworCisg
ICAgVGFza1NvdXJjZSB0YXNrU291cmNlKCkgeyByZXR1cm4gbV90YXNrU291cmNlOyB9CisgICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGUoKSA9IDA7CisKKyAgICBFdmVudExvb3BUYXNrR3JvdXAqIGdy
b3VwKCkgY29uc3QgeyByZXR1cm4gbV9ncm91cC5nZXQoKTsgfQorCitwcm90ZWN0ZWQ6CisgICAg
RXZlbnRMb29wVGFzayhUYXNrU291cmNlIHNvdXJjZSkKKyAgICAgICAgOiBtX3Rhc2tTb3VyY2Uo
c291cmNlKQorICAgIHsgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFRhc2tTb3VyY2UgbV90YXNr
U291cmNlOworICAgIFdlYWtQdHI8RXZlbnRMb29wVGFza0dyb3VwPiBtX2dyb3VwOworCisgICAg
ZnJpZW5kIGNsYXNzIEV2ZW50TG9vcFRhc2tHcm91cDsKK307CisKIC8vIGh0dHBzOi8vaHRtbC5z
cGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCNldmVudC1sb29wCi1jbGFz
cyBBYnN0cmFjdEV2ZW50TG9vcCA6IHB1YmxpYyBSZWZDb3VudGVkPEFic3RyYWN0RXZlbnRMb29w
PiB7CitjbGFzcyBBYnN0cmFjdEV2ZW50TG9vcCA6IHB1YmxpYyBSZWZDb3VudGVkPEFic3RyYWN0
RXZlbnRMb29wPiwgcHVibGljIENhbk1ha2VXZWFrUHRyPEFic3RyYWN0RXZlbnRMb29wPiB7CiBw
dWJsaWM6CiAgICAgdmlydHVhbCB+QWJzdHJhY3RFdmVudExvb3AoKSA9IGRlZmF1bHQ7CiAKLSAg
ICB0eXBlZGVmIFdURjo6RnVuY3Rpb248dm9pZCAoKT4gVGFza0Z1bmN0aW9uOwotICAgIHZpcnR1
YWwgdm9pZCBxdWV1ZVRhc2soVGFza1NvdXJjZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFRh
c2tGdW5jdGlvbiYmKSA9IDA7CisgICAgdHlwZWRlZiBGdW5jdGlvbjx2b2lkICgpPiBUYXNrRnVu
Y3Rpb247CisgICAgdm9pZCBxdWV1ZVRhc2soc3RkOjp1bmlxdWVfcHRyPEV2ZW50TG9vcFRhc2s+
JiYpOworCisgICAgdm9pZCBzdXNwZW5kR3JvdXAoRXZlbnRMb29wVGFza0dyb3VwJik7CisgICAg
dm9pZCByZXN1bWVHcm91cChFdmVudExvb3BUYXNrR3JvdXAmKTsKKyAgICB2b2lkIHN0b3BHcm91
cChFdmVudExvb3BUYXNrR3JvdXAmKTsKIAogcHJvdGVjdGVkOgogICAgIEFic3RyYWN0RXZlbnRM
b29wKCkgPSBkZWZhdWx0OworICAgIHZvaWQgcnVuKCk7CisgICAgdm9pZCBjbGVhckFsbFRhc2tz
KCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBzY2hlZHVsZVRvUnVuSWZOZWVkZWQoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2NoZWR1bGVUb1J1bigpID0gMDsKKworICAgIC8vIFVzZSBhIGdsb2JhbCBx
dWV1ZSBpbnN0ZWFkIG9mIG11bHRpcGxlIHRhc2sgcXVldWVzIHNpbmNlIEhUTUw1IHNwZWMgYWxs
b3dzIFVBIHRvIHBpY2sgYXJiaXRyYXJ5IHF1ZXVlLgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8RXZlbnRMb29wVGFzaz4+IG1fdGFza3M7CisgICAgV2Vha0hhc2hTZXQ8RXZlbnRMb29wVGFz
a0dyb3VwPiBtX2dyb3Vwc1dpdGhTdXNwZW5lZFRhc2tzOworICAgIGJvb2wgbV9pc1NjaGVkdWxl
ZFRvUnVuIHsgZmFsc2UgfTsKK307CisKK2NsYXNzIEV2ZW50TG9vcFRhc2tHcm91cCA6IHB1Ymxp
YyBDYW5NYWtlV2Vha1B0cjxFdmVudExvb3BUYXNrR3JvdXA+IHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShFdmVudExvb3BUYXNrR3JvdXApOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworCitwdWJsaWM6CisgICAgRXZlbnRMb29wVGFza0dyb3VwKEFic3RyYWN0RXZlbnRMb29wJiBl
dmVudExvb3ApCisgICAgICAgIDogbV9ldmVudExvb3AobWFrZVdlYWtQdHIoZXZlbnRMb29wKSkK
KyAgICB7CisgICAgfQorCisgICAgYm9vbCBtYXRjaGVzVGFzayhFdmVudExvb3BUYXNrJiB0YXNr
KSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byogZ3JvdXAgPSB0YXNrLmdyb3VwKCk7CisgICAg
ICAgIHJldHVybiBncm91cCA9PSB0aGlzOworICAgIH0KKworICAgIHZvaWQgc3RvcEFuZERpc2Nh
cmRBbGxUYXNrcygpCisgICAgeworICAgICAgICBtX3N0YXRlID0gU3RhdGU6OlN0b3BwZWQ7Cisg
ICAgICAgIGlmIChhdXRvKiBldmVudExvb3AgPSBtX2V2ZW50TG9vcC5nZXQoKSkKKyAgICAgICAg
ICAgIGV2ZW50TG9vcC0+c3RvcEdyb3VwKCp0aGlzKTsKKyAgICB9CisKKyAgICB2b2lkIHN1c3Bl
bmQoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OlN0b3BwZWQpOwor
ICAgICAgICBtX3N0YXRlID0gU3RhdGU6OlN1c3BlbmRlZDsKKyAgICAgICAgLy8gRXZlbnRMb29w
IGRvZXNuJ3QgZG8gYW55dGhpbmcgdXBvbiBzdXNwZW5zaW9uLgorICAgIH0KKworICAgIHZvaWQg
cmVzdW1lKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3N0YXRlICE9IFN0YXRlOjpTdG9wcGVk
KTsKKyAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpSdW5uaW5nOworICAgICAgICBpZiAoYXV0byog
ZXZlbnRMb29wID0gbV9ldmVudExvb3AuZ2V0KCkpCisgICAgICAgICAgICBldmVudExvb3AtPnJl
c3VtZUdyb3VwKCp0aGlzKTsKKyAgICB9CisKKyAgICBib29sIGlzU3RvcHBlZFBlcm1hbmVudGx5
KCkgeyByZXR1cm4gbV9zdGF0ZSA9PSBTdGF0ZTo6U3RvcHBlZDsgfQorICAgIGJvb2wgaXNTdXNw
ZW5kZWQoKSB7IHJldHVybiBtX3N0YXRlID09IFN0YXRlOjpTdXNwZW5kZWQ7IH0KKworICAgIHZv
aWQgcXVldWVUYXNrKHN0ZDo6dW5pcXVlX3B0cjxFdmVudExvb3BUYXNrPiYmIHRhc2spCisgICAg
eworICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6U3RvcHBlZCB8fCAhbV9ldmVudExvb3Ap
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFTU0VSVCghdGFzay0+bV9ncm91cCk7Cisg
ICAgICAgIHRhc2stPm1fZ3JvdXAgPSBtYWtlV2Vha1B0cigqdGhpcyk7CisgICAgICAgIG1fZXZl
bnRMb29wLT5xdWV1ZVRhc2soV1RGTW92ZSh0YXNrKSk7CisgICAgfQorCisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBxdWV1ZVRhc2soVGFza1NvdXJjZSwgQWJzdHJhY3RFdmVudExvb3A6OlRhc2tG
dW5jdGlvbiYmKTsKKworcHJpdmF0ZToKKyAgICBlbnVtIGNsYXNzIFN0YXRlIDogdWludDhfdCB7
IFJ1bm5pbmcsIFN1c3BlbmRlZCwgU3RvcHBlZCB9OworCisgICAgV2Vha1B0cjxBYnN0cmFjdEV2
ZW50TG9vcD4gbV9ldmVudExvb3A7CisgICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpSdW5uaW5n
IH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vQWN0aXZlRE9NT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
QWN0aXZlRE9NT2JqZWN0LmNwcAkocmV2aXNpb24gMjUyNTA2KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0FjdGl2ZURPTU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwxMiArMTMxLDQ3
IEBAIGJvb2wgQWN0aXZlRE9NT2JqZWN0Ojppc0FsbG93ZWRUb1J1blNjcmkKICAgICByZXR1cm4g
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpICYmICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFj
dGl2ZURPTU9iamVjdHNBcmVTdG9wcGVkKCkgJiYgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+
YWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpOwogfQogCi12b2lkIEFjdGl2ZURPTU9iamVj
dDo6cXVldWVUYXNrSW5FdmVudExvb3AoVGFza1NvdXJjZSBzb3VyY2UsIEZ1bmN0aW9uPHZvaWQg
KCk+JiYgdGFzaykKK3ZvaWQgQWN0aXZlRE9NT2JqZWN0OjpxdWV1ZVRhc2tJbkV2ZW50TG9vcChU
YXNrU291cmNlIHNvdXJjZSwgRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKIHsKICAgICBh
dXRvKiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4
dCkKICAgICAgICAgcmV0dXJuOwotICAgIGNvbnRleHQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhz
b3VyY2UsICpjb250ZXh0LCBXVEZNb3ZlKHRhc2spKTsKKyAgICBjb250ZXh0LT5ldmVudExvb3Ao
KS5xdWV1ZVRhc2soc291cmNlLCBXVEZNb3ZlKGZ1bmN0aW9uKSk7Cit9CisKK2NsYXNzIEFjdGl2
ZURPTU9iamVjdEV2ZW50RGlzcGF0Y2hUYXNrIDogcHVibGljIEV2ZW50TG9vcFRhc2sgeworcHVi
bGljOgorICAgIEFjdGl2ZURPTU9iamVjdEV2ZW50RGlzcGF0Y2hUYXNrKFRhc2tTb3VyY2Ugc291
cmNlLCBBY3RpdmVET01PYmplY3QmIG9iamVjdCwgRXZlbnRUYXJnZXQmIHRhcmdldCwgUmVmPEV2
ZW50PiYmIGV2ZW50KQorICAgICAgICA6IEV2ZW50TG9vcFRhc2soc291cmNlKQorICAgICAgICAs
IG1fb2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX3RhcmdldCh0YXJnZXQpCisgICAgICAgICwg
bV9ldmVudChXVEZNb3ZlKGV2ZW50KSkKKyAgICB7CisgICAgICAgICsrbV9vYmplY3QubV9wZW5k
aW5nQWN0aXZpdHlDb3VudDsKKyAgICB9CisKKyAgICB+QWN0aXZlRE9NT2JqZWN0RXZlbnREaXNw
YXRjaFRhc2soKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb2JqZWN0Lm1fcGVuZGluZ0FjdGl2
aXR5Q291bnQpOworICAgICAgICAtLW1fb2JqZWN0Lm1fcGVuZGluZ0FjdGl2aXR5Q291bnQ7Cisg
ICAgfQorCisgICAgdm9pZCBleGVjdXRlKCkgZmluYWwgeyBtX3RhcmdldC0+ZGlzcGF0Y2hFdmVu
dChtX2V2ZW50LmdldCgpKTsgfQorCitwcml2YXRlOgorICAgIEFjdGl2ZURPTU9iamVjdCYgbV9v
YmplY3Q7CisgICAgUmVmPEV2ZW50VGFyZ2V0PiBtX3RhcmdldDsKKyAgICBSZWY8RXZlbnQ+IG1f
ZXZlbnQ7Cit9OworCit2b2lkIEFjdGl2ZURPTU9iamVjdDo6cXVldWVUYXNrVG9EaXNwYXRjaEV2
ZW50KEV2ZW50VGFyZ2V0JiB0YXJnZXQsIFRhc2tTb3VyY2Ugc291cmNlLCBSZWY8RXZlbnQ+JiYg
ZXZlbnQpCit7CisgICAgQVNTRVJUKCFldmVudC0+dGFyZ2V0KCkgfHwgJnRhcmdldCA9PSBldmVu
dC0+dGFyZ2V0KCkpOworICAgIGF1dG8qIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm47CisgICAgYXV0byB0YXNrID0g
bWFrZVVuaXF1ZTxBY3RpdmVET01PYmplY3RFdmVudERpc3BhdGNoVGFzaz4oc291cmNlLCAqdGhp
cywgdGFyZ2V0LCBXVEZNb3ZlKGV2ZW50KSk7CisgICAgY29udGV4dC0+ZXZlbnRMb29wKCkucXVl
dWVUYXNrKFdURk1vdmUodGFzaykpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTU9iamVjdC5oCShyZXZpc2lvbiAyNTI1MDYpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDYgKzM3LDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRG9jdW1lbnQ7CitjbGFz
cyBFdmVudDsKK2NsYXNzIEV2ZW50TG9vcFRhc2tHcm91cDsKK2NsYXNzIEV2ZW50VGFyZ2V0Owog
CiBlbnVtIGNsYXNzIFJlYXNvbkZvclN1c3BlbnNpb24gewogICAgIEphdmFTY3JpcHREZWJ1Z2dl
clBhdXNlZCwKQEAgLTExNiw3ICsxMTksNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KICAgICBzdGF0aWMgdm9pZCBxdWV1ZVRhc2tLZWVwaW5nT2JqZWN0QWxpdmUoVCYgb2Jq
ZWN0LCBUYXNrU291cmNlIHNvdXJjZSwgRnVuY3Rpb248dm9pZCAoKT4mJiB0YXNrKQogICAgIHsK
LSAgICAgICAgb2JqZWN0LnF1ZXVlVGFza0luRXZlbnRMb29wKHNvdXJjZSwgW3Byb3RlY3RlZE9i
amVjdCA9IG1ha2VSZWYob2JqZWN0KSwgYWN0aXZpdHkgPSBvYmplY3QubWFrZVBlbmRpbmdBY3Rp
dml0eShvYmplY3QpLCB0YXNrID0gV1RGTW92ZSh0YXNrKV0gKCkgeworICAgICAgICBvYmplY3Qu
cXVldWVUYXNrSW5FdmVudExvb3Aoc291cmNlLCBbcHJvdGVjdGVkT2JqZWN0ID0gbWFrZVJlZihv
YmplY3QpLCBhY3Rpdml0eSA9IG9iamVjdC5BY3RpdmVET01PYmplY3Q6Om1ha2VQZW5kaW5nQWN0
aXZpdHkob2JqZWN0KSwgdGFzayA9IFdURk1vdmUodGFzayldICgpIHsKICAgICAgICAgICAgIHRh
c2soKTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtMTI0LDEwICsxMjcsNyBAQCBwdWJsaWM6CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRXZlbnRUYXJnZXRUeXBlLCB0eXBlbmFtZSBFdmVudFR5cGU+
CiAgICAgc3RhdGljIHZvaWQgcXVldWVUYXNrVG9EaXNwYXRjaEV2ZW50KEV2ZW50VGFyZ2V0VHlw
ZSYgdGFyZ2V0LCBUYXNrU291cmNlIHNvdXJjZSwgUmVmPEV2ZW50VHlwZT4mJiBldmVudCkKICAg
ICB7Ci0gICAgICAgIEFTU0VSVCghZXZlbnQtPnRhcmdldCgpIHx8ICZ0YXJnZXQgPT0gZXZlbnQt
PnRhcmdldCgpKTsKLSAgICAgICAgcXVldWVUYXNrS2VlcGluZ09iamVjdEFsaXZlKHRhcmdldCwg
c291cmNlLCBbJnRhcmdldCwgZXZlbnQgPSBXVEZNb3ZlKGV2ZW50KV0gKCkgbXV0YWJsZSB7Ci0g
ICAgICAgICAgICB0YXJnZXQuZGlzcGF0Y2hFdmVudChldmVudC5nZXQoKSk7Ci0gICAgICAgIH0p
OworICAgICAgICB0YXJnZXQucXVldWVUYXNrVG9EaXNwYXRjaEV2ZW50KHRhcmdldCwgc291cmNl
LCBXVEZNb3ZlKGV2ZW50KSk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6CkBAIC0xNDEsMTIgKzE0MSwx
NSBAQCBwcml2YXRlOgogICAgIEFjdGl2ZURPTU9iamVjdChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgQ2hlY2tlZFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRUeXBlKTsKIAogICAgIHZvaWQgcXVldWVU
YXNrSW5FdmVudExvb3AoVGFza1NvdXJjZSwgRnVuY3Rpb248dm9pZCAoKT4mJik7CisgICAgdm9p
ZCBxdWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnQoRXZlbnRUYXJnZXQmLCBUYXNrU291cmNlLCBSZWY8
RXZlbnQ+JiYpOwogCiAgICAgdW5zaWduZWQgbV9wZW5kaW5nQWN0aXZpdHlDb3VudCB7IDAgfTsK
ICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgYm9vbCBtX3N1c3BlbmRJZk5lZWRlZFdhc0NhbGxl
ZCB7IGZhbHNlIH07CiAgICAgUmVmPFRocmVhZD4gbV9jcmVhdGlvblRocmVhZCB7IFRocmVhZDo6
Y3VycmVudCgpIH07CiAjZW5kaWYKKworICAgIGZyaWVuZCBjbGFzcyBBY3RpdmVET01PYmplY3RF
dmVudERpc3BhdGNoVGFzazsKIH07CiAKICNpZiBBU1NFUlRfRElTQUJMRUQKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjUyNTA2KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY0Niw4ICsyNjQ2LDggQEAgdm9pZCBE
b2N1bWVudDo6cGxhdGZvcm1TdXNwZW5kT3JTdG9wQWN0aQogCiB2b2lkIERvY3VtZW50OjpzdXNw
ZW5kQWN0aXZlRE9NT2JqZWN0cyhSZWFzb25Gb3JTdXNwZW5zaW9uIHdoeSkKIHsKLSAgICBpZiAo
bV9ldmVudExvb3ApCi0gICAgICAgIG1fZXZlbnRMb29wLT5zdXNwZW5kKCp0aGlzKTsKKyAgICBp
ZiAobV9kb2N1bWVudFRhc2tHcm91cCkKKyAgICAgICAgbV9kb2N1bWVudFRhc2tHcm91cC0+c3Vz
cGVuZCgpOwogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnN1c3BlbmRBY3RpdmVET01PYmpl
Y3RzKHdoeSk7CiAgICAgc3VzcGVuZERldmljZU1vdGlvbkFuZE9yaWVudGF0aW9uVXBkYXRlcygp
OwogICAgIHBsYXRmb3JtU3VzcGVuZE9yU3RvcEFjdGl2ZURPTU9iamVjdHMoKTsKQEAgLTI2NTUs
OCArMjY1NSw4IEBAIHZvaWQgRG9jdW1lbnQ6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzKFIKIAog
dm9pZCBEb2N1bWVudDo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0cyhSZWFzb25Gb3JTdXNwZW5zaW9u
IHdoeSkKIHsKLSAgICBpZiAobV9ldmVudExvb3ApCi0gICAgICAgIG1fZXZlbnRMb29wLT5yZXN1
bWUoKnRoaXMpOworICAgIGlmIChtX2RvY3VtZW50VGFza0dyb3VwKQorICAgICAgICBtX2RvY3Vt
ZW50VGFza0dyb3VwLT5yZXN1bWUoKTsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpyZXN1
bWVBY3RpdmVET01PYmplY3RzKHdoeSk7CiAgICAgcmVzdW1lRGV2aWNlTW90aW9uQW5kT3JpZW50
YXRpb25VcGRhdGVzKCk7CiAgICAgLy8gRklYTUU6IEZvciBpT1MsIGRvIHdlIG5lZWQgdG8gYWRk
IGNvbnRlbnQgY2hhbmdlIG9ic2VydmVycyB0aGF0IHdlcmUgcmVtb3ZlZCBpbiBEb2N1bWVudDo6
c3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoKT8KQEAgLTI2NjQsOCArMjY2NCw4IEBAIHZvaWQgRG9j
dW1lbnQ6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHMoUmUKIAogdm9pZCBEb2N1bWVudDo6c3RvcEFj
dGl2ZURPTU9iamVjdHMoKQogewotICAgIGlmIChtX2V2ZW50TG9vcCkKLSAgICAgICAgbV9ldmVu
dExvb3AtPnN0b3AoKnRoaXMpOworICAgIGlmIChtX2RvY3VtZW50VGFza0dyb3VwKQorICAgICAg
ICBtX2RvY3VtZW50VGFza0dyb3VwLT5zdG9wQW5kRGlzY2FyZEFsbFRhc2tzKCk7CiAgICAgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6c3RvcEFjdGl2ZURPTU9iamVjdHMoKTsKICAgICBwbGF0Zm9y
bVN1c3BlbmRPclN0b3BBY3RpdmVET01PYmplY3RzKCk7CiB9CkBAIC02MjQzLDEyICs2MjQzLDE0
IEBAIHZvaWQgRG9jdW1lbnQ6OnBlbmRpbmdUYXNrc1RpbWVyRmlyZWQoKQogICAgICAgICB0YXNr
LnBlcmZvcm1UYXNrKCp0aGlzKTsKIH0KIAotQWJzdHJhY3RFdmVudExvb3AmIERvY3VtZW50Ojpl
dmVudExvb3AoKQorRXZlbnRMb29wVGFza0dyb3VwJiBEb2N1bWVudDo6ZXZlbnRMb29wKCkKIHsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChVTkxJS0VMWSghbV9ldmVudExv
b3ApKQorICAgIGlmIChVTkxJS0VMWSghbV9kb2N1bWVudFRhc2tHcm91cCkpIHsKICAgICAgICAg
bV9ldmVudExvb3AgPSBXaW5kb3dFdmVudExvb3A6OmVuc3VyZUZvclJlZ2lzdHJhYmxlRG9tYWlu
KFJlZ2lzdHJhYmxlRG9tYWluIHsgc2VjdXJpdHlPcmlnaW4oKS5kYXRhKCkgfSk7Ci0gICAgcmV0
dXJuICptX2V2ZW50TG9vcDsKKyAgICAgICAgbV9kb2N1bWVudFRhc2tHcm91cCA9IG1ha2VVbmlx
dWU8RXZlbnRMb29wVGFza0dyb3VwPigqbV9ldmVudExvb3ApOworICAgIH0KKyAgICByZXR1cm4g
Km1fZG9jdW1lbnRUYXNrR3JvdXA7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnN1c3BlbmRTY2hlZHVs
ZWRUYXNrcyhSZWFzb25Gb3JTdXNwZW5zaW9uIHJlYXNvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oCShyZXZpc2lvbiAyNTI1MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMTIxLDYgKzEyMSw3IEBAIGNsYXNzIERvY3VtZW50U2hhcmVkT2Jq
ZWN0UG9vbDsKIGNsYXNzIERvY3VtZW50VGltZWxpbmU7CiBjbGFzcyBEb2N1bWVudFR5cGU7CiBj
bGFzcyBFZGl0aW5nQmVoYXZpb3I7CitjbGFzcyBFdmVudExvb3BUYXNrR3JvdXA7CiBjbGFzcyBF
eHRlbnNpb25TdHlsZVNoZWV0czsKIGNsYXNzIEZsb2F0UXVhZDsKIGNsYXNzIEZsb2F0UmVjdDsK
QEAgLTEwNjMsNyArMTA2NCw3IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
cG9zdFRhc2soVGFzayYmKSBmaW5hbDsgLy8gRXhlY3V0ZXMgdGhlIHRhc2sgb24gY29udGV4dCdz
IHRocmVhZCBhc3luY2hyb25vdXNseS4KIAotICAgIEFic3RyYWN0RXZlbnRMb29wJiBldmVudExv
b3AoKSBmaW5hbDsKKyAgICBFdmVudExvb3BUYXNrR3JvdXAmIGV2ZW50TG9vcCgpIGZpbmFsOwog
CiAgICAgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKiBzY3JpcHRlZEFuaW1hdGlvbkNvbnRy
b2xsZXIoKSB7IHJldHVybiBtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5nZXQoKTsgfQog
ICAgIHZvaWQgc3VzcGVuZFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlckNhbGxiYWNrcygpOwpA
QCAtMjA2NCw2ICsyMDY1LDcgQEAgcHJpdmF0ZToKICAgICBEb2N1bWVudElkZW50aWZpZXIgbV9p
ZGVudGlmaWVyOwogCiAgICAgUmVmUHRyPFdpbmRvd0V2ZW50TG9vcD4gbV9ldmVudExvb3A7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPEV2ZW50TG9vcFRhc2tHcm91cD4gbV9kb2N1bWVudFRhc2tHcm91
cDsKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBSZWZQdHI8U1dDbGllbnRDb25u
ZWN0aW9uPiBtX3NlcnZpY2VXb3JrZXJDb25uZWN0aW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0lkbGVDYWxsYmFja0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9JZGxlQ2FsbGJhY2tDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjUyNTA2KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0lkbGVDYWxsYmFja0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgSWRsZUNhbGxiYWNrQ29udHJvbGxlcjo6cmVtb3Zl
SWRsZUMKIAogdm9pZCBJZGxlQ2FsbGJhY2tDb250cm9sbGVyOjpxdWV1ZVRhc2tUb1N0YXJ0SWRs
ZVBlcmlvZCgpCiB7Ci0gICAgbV9kb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tT
b3VyY2U6OklkbGVUYXNrLCAqbV9kb2N1bWVudCwgW3Byb3RlY3RlZERvY3VtZW50ID0gbWFrZVJl
ZigqbV9kb2N1bWVudCksIHRoaXNdKCkgeworICAgIG1fZG9jdW1lbnQtPmV2ZW50TG9vcCgpLnF1
ZXVlVGFzayhUYXNrU291cmNlOjpJZGxlVGFzaywgW3Byb3RlY3RlZERvY3VtZW50ID0gbWFrZVJl
ZigqbV9kb2N1bWVudCksIHRoaXNdKCkgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChwcm90ZWN0
ZWREb2N1bWVudC0+aWRsZUNhbGxiYWNrQ29udHJvbGxlcigpID09IHRoaXMpOwogICAgICAgICBz
dGFydElkbGVQZXJpb2QoKTsKICAgICB9KTsKQEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIElkbGVD
YWxsYmFja0NvbnRyb2xsZXI6OnN0YXJ0SWRsZVBlCiAKIHZvaWQgSWRsZUNhbGxiYWNrQ29udHJv
bGxlcjo6cXVldWVUYXNrVG9JbnZva2VJZGxlQ2FsbGJhY2tzKE1vbm90b25pY1RpbWUgZGVhZGxp
bmUpCiB7Ci0gICAgbV9kb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6
OklkbGVUYXNrLCAqbV9kb2N1bWVudCwgW3Byb3RlY3RlZERvY3VtZW50ID0gbWFrZVJlZigqbV9k
b2N1bWVudCksIGRlYWRsaW5lLCB0aGlzXSgpIHsKKyAgICBtX2RvY3VtZW50LT5ldmVudExvb3Ao
KS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6SWRsZVRhc2ssIFtwcm90ZWN0ZWREb2N1bWVudCA9IG1h
a2VSZWYoKm1fZG9jdW1lbnQpLCBkZWFkbGluZSwgdGhpc10oKSB7CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHByb3RlY3RlZERvY3VtZW50LT5pZGxlQ2FsbGJhY2tDb250cm9sbGVyKCkgPT0gdGhp
cyk7CiAgICAgICAgIGludm9rZUlkbGVDYWxsYmFja3MoZGVhZGxpbmUpOwogICAgIH0pOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCShyZXZpc2lv
biAyNTI1MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBAIGNsYXNzIEFic3RyYWN0RXZlbnRMb29w
OwogY2xhc3MgQ2FjaGVkU2NyaXB0OwogY2xhc3MgRGF0YWJhc2VDb250ZXh0OwogY2xhc3MgRXZl
bnRRdWV1ZTsKK2NsYXNzIEV2ZW50TG9vcFRhc2tHcm91cDsKIGNsYXNzIEV2ZW50VGFyZ2V0Owog
Y2xhc3MgTWVzc2FnZVBvcnQ7CiBjbGFzcyBQdWJsaWNVUkxNYW5hZ2VyOwpAQCAtNjQsNiArNjUs
NyBAQCBjbGFzcyBSZWplY3RlZFByb21pc2VUcmFja2VyOwogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0
OwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBjbGFzcyBTb2NrZXRQcm92aWRlcjsKK2VudW0gY2xh
c3MgVGFza1NvdXJjZSA6IHVpbnQ4X3Q7CiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiBj
bGFzcyBTZXJ2aWNlV29ya2VyOwpAQCAtODksNyArOTEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBib29sIGlzQ29udGV4dFRocmVhZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0
dWFsIGJvb2wgaXNKU0V4ZWN1dGlvbkZvcmJpZGRlbigpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1
YWwgQWJzdHJhY3RFdmVudExvb3AmIGV2ZW50TG9vcCgpID0gMDsKKyAgICB2aXJ0dWFsIEV2ZW50
TG9vcFRhc2tHcm91cCYgZXZlbnRMb29wKCkgPSAwOwogCiAgICAgdmlydHVhbCBjb25zdCBVUkwm
IHVybCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFVSTCBjb21wbGV0ZVVSTChjb25zdCBTdHJp
bmcmIHVybCkgY29uc3QgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1dpbmRvd0V2ZW50
TG9vcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1dpbmRvd0V2ZW50TG9v
cC5jcHAJKHJldmlzaW9uIDI1MjUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9XaW5kb3dFdmVu
dExvb3AuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2OCArNTksOTkgQEAgV2luZG93RXZlbnRM
b29wOjp+V2luZG93RXZlbnRMb29wKCkKICAgICBSRUxFQVNFX0FTU0VSVChkaWRSZW1vdmUpOwog
fQogCi12b2lkIFdpbmRvd0V2ZW50TG9vcDo6cXVldWVUYXNrKFRhc2tTb3VyY2Ugc291cmNlLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBUYXNrRnVuY3Rpb24mJiB0YXNrKQordm9p
ZCBBYnN0cmFjdEV2ZW50TG9vcDo6cXVldWVUYXNrKHN0ZDo6dW5pcXVlX3B0cjxFdmVudExvb3BU
YXNrPiYmIHRhc2spCiB7CisgICAgQVNTRVJUKHRhc2stPmdyb3VwKCkpOwogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKGlzPERvY3VtZW50Pihjb250ZXh0KSk7CiAgICAg
c2NoZWR1bGVUb1J1bklmTmVlZGVkKCk7Ci0gICAgbV90YXNrcy5hcHBlbmQoVGFzayB7IHNvdXJj
ZSwgV1RGTW92ZSh0YXNrKSwgZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpLmlkZW50aWZpZXIo
KSB9KTsKKyAgICBtX3Rhc2tzLmFwcGVuZChXVEZNb3ZlKHRhc2spKTsKIH0KIAotdm9pZCBXaW5k
b3dFdmVudExvb3A6OnN1c3BlbmQoRG9jdW1lbnQmKQordm9pZCBBYnN0cmFjdEV2ZW50TG9vcDo6
c3VzcGVuZEdyb3VwKEV2ZW50TG9vcFRhc2tHcm91cCYpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKIH0KIAotdm9pZCBXaW5kb3dFdmVudExvb3A6OnJlc3VtZShEb2N1bWVudCYgZG9j
dW1lbnQpCit2b2lkIEFic3RyYWN0RXZlbnRMb29wOjpyZXN1bWVHcm91cChFdmVudExvb3BUYXNr
R3JvdXAmIGdyb3VwKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFt
X2RvY3VtZW50SWRlbnRpZmllcnNGb3JTdXNwZW5kZWRUYXNrcy5jb250YWlucyhkb2N1bWVudC5p
ZGVudGlmaWVyKCkpKQotICAgICAgICByZXR1cm47Ci0gICAgc2NoZWR1bGVUb1J1bklmTmVlZGVk
KCk7CisgICAgaWYgKG1fZ3JvdXBzV2l0aFN1c3BlbmVkVGFza3MuY29udGFpbnMoZ3JvdXApKQor
ICAgICAgICBzY2hlZHVsZVRvUnVuSWZOZWVkZWQoKTsKIH0KIAotdm9pZCBXaW5kb3dFdmVudExv
b3A6OnN0b3AoRG9jdW1lbnQmIGRvY3VtZW50KQordm9pZCBBYnN0cmFjdEV2ZW50TG9vcDo6c3Rv
cEdyb3VwKEV2ZW50TG9vcFRhc2tHcm91cCYgZ3JvdXApCiB7Ci0gICAgbV90YXNrcy5yZW1vdmVB
bGxNYXRjaGluZyhbaWRlbnRpZmllciA9IGRvY3VtZW50LmlkZW50aWZpZXIoKV0gKGF1dG8mIHRh
c2spIHsKLSAgICAgICAgcmV0dXJuIHRhc2suZG9jdW1lbnRJZGVudGlmaWVyID09IGlkZW50aWZp
ZXI7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX3Rhc2tzLnJlbW92ZUFsbE1h
dGNoaW5nKFsmZ3JvdXBdIChhdXRvJiB0YXNrKSB7CisgICAgICAgIHJldHVybiBncm91cC5tYXRj
aGVzVGFzaygqdGFzayk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2luZG93RXZlbnRMb29wOjpzY2hl
ZHVsZVRvUnVuSWZOZWVkZWQoKQordm9pZCBBYnN0cmFjdEV2ZW50TG9vcDo6c2NoZWR1bGVUb1J1
bklmTmVlZGVkKCkKIHsKICAgICBpZiAobV9pc1NjaGVkdWxlZFRvUnVuKQogICAgICAgICByZXR1
cm47Ci0KICAgICBtX2lzU2NoZWR1bGVkVG9SdW4gPSB0cnVlOworICAgIHNjaGVkdWxlVG9SdW4o
KTsKK30KKwordm9pZCBXaW5kb3dFdmVudExvb3A6OnNjaGVkdWxlVG9SdW4oKQorewogICAgIGNh
bGxPbk1haW5UaHJlYWQoW2V2ZW50TG9vcCA9IG1ha2VSZWYoKnRoaXMpXSAoKSB7Ci0gICAgICAg
IGV2ZW50TG9vcC0+bV9pc1NjaGVkdWxlZFRvUnVuID0gZmFsc2U7CiAgICAgICAgIGV2ZW50TG9v
cC0+cnVuKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2luZG93RXZlbnRMb29wOjpydW4oKQordm9p
ZCBBYnN0cmFjdEV2ZW50TG9vcDo6cnVuKCkKIHsKKyAgICBtX2lzU2NoZWR1bGVkVG9SdW4gPSBm
YWxzZTsKICAgICBpZiAobV90YXNrcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFZlY3RvcjxUYXNrPiB0YXNrcyA9IFdURk1vdmUobV90YXNrcyk7Ci0gICAgbV9kb2N1bWVudElk
ZW50aWZpZXJzRm9yU3VzcGVuZGVkVGFza3MuY2xlYXIoKTsKLSAgICBWZWN0b3I8VGFzaz4gcmVt
YWluaW5nVGFza3M7CisgICAgYXV0byB0YXNrcyA9IHN0ZDo6ZXhjaGFuZ2UobV90YXNrcywgeyB9
KTsKKyAgICBtX2dyb3Vwc1dpdGhTdXNwZW5lZFRhc2tzLmNsZWFyKCk7CisgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxFdmVudExvb3BUYXNrPj4gcmVtYWluaW5nVGFza3M7CiAgICAgZm9yIChh
dXRvJiB0YXNrIDogdGFza3MpIHsKLSAgICAgICAgYXV0byogZG9jdW1lbnQgPSBEb2N1bWVudDo6
YWxsRG9jdW1lbnRzTWFwKCkuZ2V0KHRhc2suZG9jdW1lbnRJZGVudGlmaWVyKTsKLSAgICAgICAg
aWYgKCFkb2N1bWVudCB8fCBkb2N1bWVudC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN0b3BwZWQoKSkK
KyAgICAgICAgYXV0byogZ3JvdXAgPSB0YXNrLT5ncm91cCgpOworICAgICAgICBpZiAoIWdyb3Vw
IHx8IGdyb3VwLT5pc1N0b3BwZWRQZXJtYW5lbnRseSgpKQogICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGlmIChkb2N1bWVudC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpKSB7
Ci0gICAgICAgICAgICBtX2RvY3VtZW50SWRlbnRpZmllcnNGb3JTdXNwZW5kZWRUYXNrcy5hZGQo
dGFzay5kb2N1bWVudElkZW50aWZpZXIpOworCisgICAgICAgIGlmIChncm91cC0+aXNTdXNwZW5k
ZWQoKSkgeworICAgICAgICAgICAgbV9ncm91cHNXaXRoU3VzcGVuZWRUYXNrcy5hZGQoZ3JvdXAp
OwogICAgICAgICAgICAgcmVtYWluaW5nVGFza3MuYXBwZW5kKFdURk1vdmUodGFzaykpOwogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgdGFzay50YXNrKCk7CisKKyAg
ICAgICAgdGFzay0+ZXhlY3V0ZSgpOwogICAgIH0KICAgICBmb3IgKGF1dG8mIHRhc2sgOiBtX3Rh
c2tzKQogICAgICAgICByZW1haW5pbmdUYXNrcy5hcHBlbmQoV1RGTW92ZSh0YXNrKSk7CiAgICAg
bV90YXNrcyA9IFdURk1vdmUocmVtYWluaW5nVGFza3MpOwogfQogCit2b2lkIEFic3RyYWN0RXZl
bnRMb29wOjpjbGVhckFsbFRhc2tzKCkKK3sKKyAgICBtX3Rhc2tzLmNsZWFyKCk7CisgICAgbV9n
cm91cHNXaXRoU3VzcGVuZWRUYXNrcy5jbGVhcigpOworfQorCitjbGFzcyBFdmVudExvb3BGdW5j
dGlvbkRpc3BhdGNoVGFzayA6IHB1YmxpYyBFdmVudExvb3BUYXNrIHsKK3B1YmxpYzoKKyAgICBF
dmVudExvb3BGdW5jdGlvbkRpc3BhdGNoVGFzayhUYXNrU291cmNlIHNvdXJjZSwgQWJzdHJhY3RF
dmVudExvb3A6OlRhc2tGdW5jdGlvbiYmIGZ1bmN0aW9uKQorICAgICAgICA6IEV2ZW50TG9vcFRh
c2soc291cmNlKQorICAgICAgICAsIG1fZnVuY3Rpb24oV1RGTW92ZShmdW5jdGlvbikpCisgICAg
eworICAgIH0KKworICAgIHZvaWQgZXhlY3V0ZSgpIGZpbmFsIHsgbV9mdW5jdGlvbigpOyB9CisK
K3ByaXZhdGU6CisgICAgQWJzdHJhY3RFdmVudExvb3A6OlRhc2tGdW5jdGlvbiBtX2Z1bmN0aW9u
OworfTsKKwordm9pZCBFdmVudExvb3BUYXNrR3JvdXA6OnF1ZXVlVGFzayhUYXNrU291cmNlIHNv
dXJjZSwgQWJzdHJhY3RFdmVudExvb3A6OlRhc2tGdW5jdGlvbiYmIGZ1bmN0aW9uKQoreworICAg
IHJldHVybiBxdWV1ZVRhc2sobWFrZVVuaXF1ZTxFdmVudExvb3BGdW5jdGlvbkRpc3BhdGNoVGFz
az4oc291cmNlLCBXVEZNb3ZlKGZ1bmN0aW9uKSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vV2luZG93RXZlbnRMb29wLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1dpbmRvd0V2ZW50TG9vcC5oCShyZXZpc2lvbiAyNTI1
MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vV2luZG93RXZlbnRMb29wLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDI5ICs0MSwxMiBAQCBwdWJsaWM6CiAKICAgICB+V2luZG93RXZlbnRMb29wKCk7
CiAKLSAgICB2b2lkIHF1ZXVlVGFzayhUYXNrU291cmNlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiwgVGFza0Z1bmN0aW9uJiYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzdXNwZW5kKERvY3VtZW50
Jik7Ci0gICAgdm9pZCByZXN1bWUoRG9jdW1lbnQmKTsKLSAgICB2b2lkIHN0b3AoRG9jdW1lbnQm
KTsKLQogcHJpdmF0ZToKICAgICBXaW5kb3dFdmVudExvb3AoY29uc3QgUmVnaXN0cmFibGVEb21h
aW4mKTsKIAotICAgIHZvaWQgc2NoZWR1bGVUb1J1bklmTmVlZGVkKCk7Ci0gICAgdm9pZCBydW4o
KTsKLQotICAgIHN0cnVjdCBUYXNrIHsKLSAgICAgICAgVGFza1NvdXJjZSBzb3VyY2U7Ci0gICAg
ICAgIFRhc2tGdW5jdGlvbiB0YXNrOwotICAgICAgICBEb2N1bWVudElkZW50aWZpZXIgZG9jdW1l
bnRJZGVudGlmaWVyOwotICAgIH07CisgICAgdm9pZCBzY2hlZHVsZVRvUnVuKCkgZmluYWw7CiAK
LSAgICAvLyBVc2UgYSBnbG9iYWwgcXVldWUgaW5zdGVhZCBvZiBtdWx0aXBsZSB0YXNrIHF1ZXVl
cyBzaW5jZSBIVE1MNSBzcGVjIGFsbG93cyBVQSB0byBwaWNrIGFyYml0cmFyeSBxdWV1ZS4KLSAg
ICBWZWN0b3I8VGFzaz4gbV90YXNrczsKLSAgICBIYXNoU2V0PERvY3VtZW50SWRlbnRpZmllcj4g
bV9kb2N1bWVudElkZW50aWZpZXJzRm9yU3VzcGVuZGVkVGFza3M7CiAgICAgUmVnaXN0cmFibGVE
b21haW4gbV9kb21haW47Ci0gICAgYm9vbCBtX2lzU2NoZWR1bGVkVG9SdW4geyBmYWxzZSB9Owog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9GaWxlUmVhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Zp
bGVSZWFkZXIuY3BwCShyZXZpc2lvbiAyNTI1MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0ZpbGVSZWFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsNyArMjU0LDcgQEAgdm9pZCBG
aWxlUmVhZGVyOjplbnF1ZXVlVGFzayhGdW5jdGlvbjx2bwogICAgIHN0YXRpYyB1aW50NjRfdCB0
YXNrSWRlbnRpZmllclNlZWQgPSAwOwogICAgIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyID0gKyt0
YXNrSWRlbnRpZmllclNlZWQ7CiAgICAgbV9wZW5kaW5nVGFza3MuYWRkKHRhc2tJZGVudGlmaWVy
LCBXVEZNb3ZlKHRhc2spKTsKLSAgICBjb250ZXh0LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFz
a1NvdXJjZTo6RmlsZVJlYWRpbmcsICpjb250ZXh0LCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpLCBwZW5kaW5nQWN0aXZpdHkgPSBtYWtlUGVuZGluZ0FjdGl2aXR5KCp0aGlz
KSwgdGFza0lkZW50aWZpZXJdIHsKKyAgICBjb250ZXh0LT5ldmVudExvb3AoKS5xdWV1ZVRhc2so
VGFza1NvdXJjZTo6RmlsZVJlYWRpbmcsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyksIHBlbmRpbmdBY3Rpdml0eSA9IG1ha2VQZW5kaW5nQWN0aXZpdHkoKnRoaXMpLCB0YXNr
SWRlbnRpZmllcl0gewogICAgICAgICBhdXRvIHRhc2sgPSBtX3BlbmRpbmdUYXNrcy50YWtlKHRh
c2tJZGVudGlmaWVyKTsKICAgICAgICAgaWYgKHRhc2spCiAgICAgICAgICAgICB0YXNrKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCShyZXZpc2lvbiAyNTI1MDYpCisr
KyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ2ODQsNyArNDY4NCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6cXVldWVUYXNr
KFMKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJv
ciB9OwogCi0gICAgY29udGV4dC5ldmVudExvb3AoKS5xdWV1ZVRhc2soc291cmNlLCBjb250ZXh0
LCBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSB7CisgICAgY29udGV4dC5ldmVudExv
b3AoKS5xdWV1ZVRhc2soc291cmNlLCBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSB7
CiAgICAgICAgIGNhbGxiYWNrLT5oYW5kbGVFdmVudCgpOwogICAgIH0pOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50TG9vcC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudExvb3AuY3BwCShyZXZpc2lvbiAyNTI1MDYp
CisrKyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50TG9vcC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDY0ICs0NCwxNyBAQCBSZWY8V29ya2VyRXZlbnRMb29wPiBXb3JrZXJFdmVu
dExvb3A6OmNyCiAjZW5kaWYKIAogV29ya2VyRXZlbnRMb29wOjpXb3JrZXJFdmVudExvb3AoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkKLSAgICA6IEFjdGl2ZURPTU9iamVjdCgmY29u
dGV4dCkKKyAgICA6IENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyKCZjb250ZXh0KQogewotICAg
IHN1c3BlbmRJZk5lZWRlZCgpOwogfQogCi12b2lkIFdvcmtlckV2ZW50TG9vcDo6cXVldWVUYXNr
KFRhc2tTb3VyY2Ugc291cmNlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBUYXNr
RnVuY3Rpb24mJiBmdW5jdGlvbikKK3ZvaWQgV29ya2VyRXZlbnRMb29wOjpzY2hlZHVsZVRvUnVu
KCkKIHsKLSAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgp
KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9
PSAmY29udGV4dCk7Ci0gICAgbV90YXNrcy5hcHBlbmQoeyBzb3VyY2UsIFdURk1vdmUoZnVuY3Rp
b24pIH0pOwotICAgIHNjaGVkdWxlVG9SdW5JZk5lZWRlZCgpOwotfQotCi1jb25zdCBjaGFyKiBX
b3JrZXJFdmVudExvb3A6OmFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdAotewotICAgIHJldHVy
biAiV29ya2VyRXZlbnRMb29wIjsKLX0KLQotdm9pZCBXb3JrZXJFdmVudExvb3A6OnN1c3BlbmQo
UmVhc29uRm9yU3VzcGVuc2lvbikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQot
dm9pZCBXb3JrZXJFdmVudExvb3A6OnJlc3VtZSgpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci19Ci0KLXZvaWQgV29ya2VyRXZlbnRMb29wOjpzdG9wKCkKLXsKLSAgICBtX3Rhc2tzLmNs
ZWFyKCk7Ci19Ci0KLXZvaWQgV29ya2VyRXZlbnRMb29wOjpzY2hlZHVsZVRvUnVuSWZOZWVkZWQo
KQotewotICAgIGF1dG8qIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAg
QVNTRVJUKGNvbnRleHQpOwotICAgIGlmIChtX2lzU2NoZWR1bGVkVG9SdW4gfHwgbV90YXNrcy5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXNTY2hlZHVsZWRUb1J1biA9IHRy
dWU7Ci0gICAgY29udGV4dC0+cG9zdFRhc2soW2V2ZW50TG9vcCA9IG1ha2VSZWYoKnRoaXMpXSAo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsKLSAgICAgICAgZXZlbnRMb29wLT5tX2lzU2NoZWR1
bGVkVG9SdW4gPSBmYWxzZTsKKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsK
KyAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnBvc3RUYXNrKFtldmVudExvb3AgPSBtYWtl
UmVmKCp0aGlzKV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7CiAgICAgICAgIGV2ZW50TG9v
cC0+cnVuKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV29ya2VyRXZlbnRMb29wOjpydW4oKQotewot
ICAgIGF1dG8qIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKCFj
b250ZXh0IHx8IGNvbnRleHQtPmFjdGl2ZURPTU9iamVjdHNBcmVTdG9wcGVkKCkgfHwgY29udGV4
dC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAg
YXV0byB0YXNrcyA9IHN0ZDo6ZXhjaGFuZ2UobV90YXNrcywgVmVjdG9yPFRhc2s+KCkpOwotICAg
IGZvciAoYXV0byYgdGFzayA6IHRhc2tzKQotICAgICAgICB0YXNrLnRhc2soKTsKLX0KLQogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtl
ckV2ZW50TG9vcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
RXZlbnRMb29wLmgJKHJldmlzaW9uIDI1MjUwNikKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyRXZlbnRMb29wLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgV29ya2VyR2xvYmFsU2NvcGU7CiBjbGFzcyBXb3JrbGV0R2xv
YmFsU2NvcGU7CiAKLWNsYXNzIFdvcmtlckV2ZW50TG9vcCBmaW5hbCA6IHB1YmxpYyBBYnN0cmFj
dEV2ZW50TG9vcCwgcHJpdmF0ZSBBY3RpdmVET01PYmplY3QgeworY2xhc3MgV29ya2VyRXZlbnRM
b29wIGZpbmFsIDogcHVibGljIEFic3RyYWN0RXZlbnRMb29wLCBwcml2YXRlIENvbnRleHREZXN0
cnVjdGlvbk9ic2VydmVyIHsKIHB1YmxpYzoKICAgICAvLyBFeHBsaWNpdGx5IHRha2UgV29ya2Vy
R2xvYmFsU2NvcGUgYW5kIFdvcmtsZXRHbG9iYWxTY29wZSBmb3IgZG9jdW1lbnRhdGlvbiBwdXJw
b3Nlcy4KICAgICBzdGF0aWMgUmVmPFdvcmtlckV2ZW50TG9vcD4gY3JlYXRlKFdvcmtlckdsb2Jh
bFNjb3BlJik7CkBAIC00MiwyNyArNDIsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZWY8V29y
a2VyRXZlbnRMb29wPiBjcmVhdGUoV29ya2xldEdsb2JhbFNjb3BlJik7CiAjZW5kaWYKIAotICAg
IHZvaWQgcXVldWVUYXNrKFRhc2tTb3VyY2UsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBUYXNr
RnVuY3Rpb24mJikgb3ZlcnJpZGU7Ci0KIHByaXZhdGU6CiAgICAgZXhwbGljaXQgV29ya2VyRXZl
bnRMb29wKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsKIAotICAgIHZvaWQgc2NoZWR1bGVUb1J1
bklmTmVlZGVkKCk7Ci0gICAgdm9pZCBydW4oKTsKLQotICAgIC8vIEFjdGl2ZURPTU9iamVjdDsK
LSAgICBjb25zdCBjaGFyKiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBzdXNwZW5kKFJlYXNvbkZvclN1c3BlbnNpb24pIG92ZXJyaWRlOwotICAgIHZvaWQg
cmVzdW1lKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7Ci0KLSAgICBzdHJ1
Y3QgVGFzayB7Ci0gICAgICAgIFRhc2tTb3VyY2Ugc291cmNlOwotICAgICAgICBUYXNrRnVuY3Rp
b24gdGFzazsKLSAgICB9OwotCi0gICAgVmVjdG9yPFRhc2s+IG1fdGFza3M7Ci0gICAgYm9vbCBt
X2lzU2NoZWR1bGVkVG9SdW4geyBmYWxzZSB9OworICAgIHZvaWQgc2NoZWR1bGVUb1J1bigpIGZp
bmFsOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDI1MjUwNikKKysrIFNv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDUsMTIgKzEwNSwxNCBAQCBXb3JrZXJHbG9iYWxTY29wZTo6fldvcmtlckdsb2JhbFNj
b3BlKCkKICAgICB0aHJlYWQoKS53b3JrZXJSZXBvcnRpbmdQcm94eSgpLndvcmtlckdsb2JhbFNj
b3BlRGVzdHJveWVkKCk7CiB9CiAKLUFic3RyYWN0RXZlbnRMb29wJiBXb3JrZXJHbG9iYWxTY29w
ZTo6ZXZlbnRMb29wKCkKK0V2ZW50TG9vcFRhc2tHcm91cCYgV29ya2VyR2xvYmFsU2NvcGU6OmV2
ZW50TG9vcCgpCiB7CiAgICAgQVNTRVJUKGlzQ29udGV4dFRocmVhZCgpKTsKLSAgICBpZiAoIW1f
ZXZlbnRMb29wKQorICAgIGlmIChVTkxJS0VMWSghbV9kZWZhdWx0VGFza0dyb3VwKSkgewogICAg
ICAgICBtX2V2ZW50TG9vcCA9IFdvcmtlckV2ZW50TG9vcDo6Y3JlYXRlKCp0aGlzKTsKLSAgICBy
ZXR1cm4gKm1fZXZlbnRMb29wOworICAgICAgICBtX2RlZmF1bHRUYXNrR3JvdXAgPSBtYWtlVW5p
cXVlPEV2ZW50TG9vcFRhc2tHcm91cD4oKm1fZXZlbnRMb29wKTsKKyAgICB9CisgICAgcmV0dXJu
ICptX2RlZmF1bHRUYXNrR3JvdXA7CiB9CiAKIFN0cmluZyBXb3JrZXJHbG9iYWxTY29wZTo6b3Jp
Z2luKCkgY29uc3QKQEAgLTEyNSw2ICsxMjcsOCBAQCB2b2lkIFdvcmtlckdsb2JhbFNjb3BlOjpw
cmVwYXJlRm9yVGVybWluCiAgICAgc3RvcEluZGV4ZWREYXRhYmFzZSgpOwogI2VuZGlmCiAKKyAg
ICBpZiAobV9kZWZhdWx0VGFza0dyb3VwKQorICAgICAgICBtX2RlZmF1bHRUYXNrR3JvdXAtPnN0
b3BBbmREaXNjYXJkQWxsVGFza3MoKTsKICAgICBzdG9wQWN0aXZlRE9NT2JqZWN0cygpOwogCiAg
ICAgaWYgKG1fY2FjaGVTdG9yYWdlQ29ubmVjdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgJKHJldmlzaW9uIDI1MjUwNikKKysrIFNvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDIs
OSArNDIsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEFic3RyYWN0RXZlbnRM
b29wOwogY2xhc3MgQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzOwogY2xhc3Mg
Q3J5cHRvOworY2xhc3MgRXZlbnRMb29wVGFza0dyb3VwOwogY2xhc3MgTWljcm90YXNrUXVldWU7
CiBjbGFzcyBQZXJmb3JtYW5jZTsKIGNsYXNzIFNjaGVkdWxlZEFjdGlvbjsKQEAgLTY3LDcgKzY3
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0RlZGljYXRlZFdvcmtlckdsb2JhbFNj
b3BlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTZXJ2aWNl
V29ya2VyR2xvYmFsU2NvcGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgQWJzdHJh
Y3RFdmVudExvb3AmIGV2ZW50TG9vcCgpIGZpbmFsOworICAgIEV2ZW50TG9vcFRhc2tHcm91cCYg
ZXZlbnRMb29wKCkgZmluYWw7CiAKICAgICBjb25zdCBVUkwmIHVybCgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fdXJsOyB9CiAgICAgU3RyaW5nIG9yaWdpbigpIGNvbnN0IGZpbmFsOwpAQCAtMTk4
LDYgKzE5OCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZEJ5cGFzc01haW5Xb3JsZENv
bnRlbnRTZWN1cml0eVBvbGljeTsKIAogICAgIFJlZlB0cjxXb3JrZXJFdmVudExvb3A+IG1fZXZl
bnRMb29wOworICAgIHN0ZDo6dW5pcXVlX3B0cjxFdmVudExvb3BUYXNrR3JvdXA+IG1fZGVmYXVs
dFRhc2tHcm91cDsKIAogICAgIG11dGFibGUgV29ya2VyRXZlbnRRdWV1ZSBtX2V2ZW50UXVldWU7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtsZXRzL1dvcmtsZXRHbG9iYWxTY29wZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2xldHMvV29ya2xldEdsb2JhbFNjb3Bl
LmNwcAkocmV2aXNpb24gMjUyNTA2KQorKysgU291cmNlL1dlYkNvcmUvd29ya2xldHMvV29ya2xl
dEdsb2JhbFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsOCBAQCB2b2lkIFdv
cmtsZXRHbG9iYWxTY29wZTo6cHJlcGFyZUZvckRlc3RyCiB7CiAgICAgaWYgKCFtX3NjcmlwdCkK
ICAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2RlZmF1bHRUYXNrR3JvdXApCisgICAgICAgIG1f
ZGVmYXVsdFRhc2tHcm91cC0+c3RvcEFuZERpc2NhcmRBbGxUYXNrcygpOwogICAgIHN0b3BBY3Rp
dmVET01PYmplY3RzKCk7CiAgICAgcmVtb3ZlUmVqZWN0ZWRQcm9taXNlVHJhY2tlcigpOwogICAg
IHJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCk7CkBAIC05MCwxMSArOTIsMTMgQEAgYXV0byBXb3Jr
bGV0R2xvYmFsU2NvcGU6OmFsbFdvcmtsZXRHbG9iYQogICAgIHJldHVybiBzY29wZXM7CiB9CiAK
LUFic3RyYWN0RXZlbnRMb29wJiBXb3JrbGV0R2xvYmFsU2NvcGU6OmV2ZW50TG9vcCgpCitFdmVu
dExvb3BUYXNrR3JvdXAmIFdvcmtsZXRHbG9iYWxTY29wZTo6ZXZlbnRMb29wKCkKIHsKLSAgICBp
ZiAoIW1fZXZlbnRMb29wKQorICAgIGlmIChVTkxJS0VMWSghbV9kZWZhdWx0VGFza0dyb3VwKSkg
ewogICAgICAgICBtX2V2ZW50TG9vcCA9IFdvcmtlckV2ZW50TG9vcDo6Y3JlYXRlKCp0aGlzKTsK
LSAgICByZXR1cm4gKm1fZXZlbnRMb29wOworICAgICAgICBtX2RlZmF1bHRUYXNrR3JvdXAgPSBt
YWtlVW5pcXVlPEV2ZW50TG9vcFRhc2tHcm91cD4oKm1fZXZlbnRMb29wKTsKKyAgICB9CisgICAg
cmV0dXJuICptX2RlZmF1bHRUYXNrR3JvdXA7CiB9CiAKIFN0cmluZyBXb3JrbGV0R2xvYmFsU2Nv
cGU6Om9yaWdpbigpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrbGV0cy9Xb3JrbGV0
R2xvYmFsU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrbGV0cy9Xb3Jr
bGV0R2xvYmFsU2NvcGUuaAkocmV2aXNpb24gMjUyNTA2KQorKysgU291cmNlL1dlYkNvcmUvd29y
a2xldHMvV29ya2xldEdsb2JhbFNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBBYnN0cmFjdEV2ZW50TG9vcDsKK2Ns
YXNzIEV2ZW50TG9vcFRhc2tHcm91cDsKIGNsYXNzIFdvcmtlckV2ZW50TG9vcDsKIGNsYXNzIFdv
cmtsZXRTY3JpcHRDb250cm9sbGVyOwogCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgYm9vbCBpc1BhaW50V29ya2xldEdsb2JhbFNjb3BlKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KIAotICAgIEFic3RyYWN0RXZlbnRMb29wJiBldmVudExvb3AoKSBmaW5hbDsKKyAg
ICBFdmVudExvb3BUYXNrR3JvdXAmIGV2ZW50TG9vcCgpIGZpbmFsOwogCiAgICAgY29uc3QgVVJM
JiB1cmwoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NvZGUudXJsKCk7IH0KICAgICBTdHJpbmcg
b3JpZ2luKCkgY29uc3QgZmluYWw7CkBAIC0xMzUsNiArMTM1LDcgQEAgcHJpdmF0ZToKICAgICBS
ZWY8U2VjdXJpdHlPcmlnaW4+IG1fdG9wT3JpZ2luOwogCiAgICAgUmVmUHRyPFdvcmtlckV2ZW50
TG9vcD4gbV9ldmVudExvb3A7CisgICAgc3RkOjp1bmlxdWVfcHRyPEV2ZW50TG9vcFRhc2tHcm91
cD4gbV9kZWZhdWx0VGFza0dyb3VwOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgbm90IGltcGxl
bWVudGVkIHByb3Blcmx5LCBpdCBqdXN0IHNhdGlzZmllcyB0aGUgY29tcGlsZXIuCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTEzNgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383679</attachid>
            <date>2019-11-15 19:09:02 -0800</date>
            <delta_ts>2019-11-15 23:35:45 -0800</delta_ts>
            <desc>Fixed worker tests</desc>
            <filename>bug-204263-20191115190902.patch</filename>
            <type>text/plain</type>
            <size>49527</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MjUxMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNyBAQAorMjAxOS0xMS0xNSAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBTaGFyZSBtb3JlIGNvZGUgYmV0
d2VlbiBXaW5kb3dFdmVudExvb3AgYW5kIFdvcmtlckV2ZW50TG9vcCBieSBpbnRyb2R1Y2luZyBF
dmVudExvb3BUYXNrR3JvdXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwNDI2MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggYWJzdHJhY3RzIHRoZSBsb2dpYyBpbiBXaW5kb3dFdmVudExv
b3AgdG8gZGVhbCB3aXRoIGEgc2V0IG9mIHRhc2tzIGFzc29jaWF0ZWQgd2l0aAorICAgICAgICBh
IHBhcnRpY3VsYXIgZG9jdW1lbnRzIGFsbCBzdXNwZW5kaW5nLCByZXN1bWluZywgb3Igc3RvcHBp
bmcgYXQgdGhlIHNhbWUgdGltZSB1c2luZyBhIG5ldyBhYnN0cmFjdGlvbgorICAgICAgICBjYWxs
ZWQgRXZlbnRMb29wVGFza0dyb3VwIGluIG9yZGVyIHRvIGdyb3VwIHRhc2tzIGZvciBtZWRpYSBj
b2RlIGFuZCBlbHNld2hlcmUuCisKKyAgICAgICAgRWFjaCB0YXNrIGlzIG5vdyByZXByZXNlbnRl
ZCBhcyBhbiBpbnN0YW5jZSBvZiBhIGNvbmNyZXRlIHN1YmNsYXNzIG9mIEV2ZW50TG9vcFRhc2ss
IHdoaWNoIGhhcworICAgICAgICBhIHB1cmUgdmlydHVhbCBleGVjdXRlKCkgbWVtYmVyIGZ1bmN0
aW9uLiBJdHMgcHJpbWFyeSBwdXJwb3NlIGlzIHRvIGtub3cgRXZlbnRMb29wVGFza0dyb3VwIHRv
IHdoaWNoCisgICAgICAgIGVhY2ggdGFzayBiZWxvbmdzLiBPbmUgb2Ygc3ViY2xhc3NzLCBFdmVu
dExvb3BGdW5jdGlvbkRpc3BhdGNoVGFzaywgaXMgdXNlZCB0byBzdG9yZSBhIGNhbGxiYWNrIGZ1
bmN0aW9uCisgICAgICAgIGFuZCBhbm90aGVyIHN1YmNsYXNzLCBBY3RpdmVET01PYmplY3RFdmVu
dERpc3BhdGNoVGFzaywgaXMgdXNlZCB0byBkaXNwYXRjaCBhbiBhc3luYyBldmVudC4KKworICAg
ICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0J3MgZXZlbnRMb29wKCkgbWV0aG9kIG5vdyByZXR1
cm5zIEV2ZW50TG9vcFRhc2tHcm91cC4gQmVjYXVzZSB0aGlzIGdyb3VwIGlzCisgICAgICAgIHNw
ZWNpZmljIHRvIGEgZ2l2ZW4gU2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgd2Ugbm8gbG9uZ2VyIGhh
dmUgdG8gcGFzcyB0aGUgU2NyaXB0RXhlY3V0aW9uQ29udGV4dAorICAgICAgICBpbiBlYWNoIGNh
bGwgdG8gcXVldWVUYXNrIGV2ZXJ5d2hlcmUgaW4gb3VyIGNvZGViYXNlLgorCisgICAgICAgIEZv
ciBub3csIEkga2VwdCBhbGwgdGhlIGNvZGUgaW4gV2luZG93RXZlbnRMb29wLmNwcCB0byBtYWtl
IHRoZSBwYXRjaCByZXZpZXdhYmxlLiBNeSBwbGFuIGlzIHRvIGNyZWF0ZQorICAgICAgICBhIG5l
dyBjcHAgZmlsZSAoZS5nLiBBYnN0cmFjdEV2ZW50TG9vcC5jcHApIGFuZCBtb3ZlIG1vc3Qgb2Yg
Y29kZSB0aGVyZSBpbnN0ZWFkIGFzIGEgZm9sbG93IHVwLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cyBzaW5jZSB0aGVyZSBzaG91bGQgYmUgbm8gb2JzZXJ2YWJsZSBiZWhhdmlvciBjaGFuZ2UuCisK
KyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5cy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYUtleXM6OnNldFNlcnZlckNlcnRpZmljYXRlKToKKyAgICAgICAgKiBN
b2R1bGVzL2VudHJpZXNhcGkvRmlsZVN5c3RlbURpcmVjdG9yeUVudHJ5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpbGVTeXN0ZW1EaXJlY3RvcnlFbnRyeTo6Z2V0RW50cnkpOgorICAgICAgICAq
IE1vZHVsZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRGlyZWN0b3J5UmVhZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbGVTeXN0ZW1EaXJlY3RvcnlSZWFkZXI6OnJlYWRFbnRyaWVzKToKKyAg
ICAgICAgKiBNb2R1bGVzL2VudHJpZXNhcGkvRmlsZVN5c3RlbUVudHJ5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpbGVTeXN0ZW1FbnRyeTo6Z2V0UGFyZW50KToKKyAgICAgICAgKiBNb2R1bGVz
L2VudHJpZXNhcGkvRmlsZVN5c3RlbUZpbGVFbnRyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
aWxlU3lzdGVtRmlsZUVudHJ5OjpmaWxlKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhcmVjb3Jk
ZXIvTWVkaWFSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVJlY29yZGVyOjpz
Y2hlZHVsZURlZmVycmVkVGFzayk6CisgICAgICAgICogTW9kdWxlcy9ub3RpZmljYXRpb25zL05v
dGlmaWNhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb246OnF1ZXVlVGFz
ayk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZTo6cnVuVHJhbnNhY3Rpb24pOgorICAgICAgICAqIE1vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlTWFuYWdlcjo6b3BlbkRhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNl
L1NRTFRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpj
YWxsRXJyb3JDYWxsYmFja0R1ZVRvSW50ZXJydXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNR
TFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyU3VjY2Vzc0NhbGxiYWNrKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTVByb21pc2VEZWZlcnJlZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEZWZlcnJlZFByb21pc2U6OmNhbGxGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpE
ZWZlcnJlZFByb21pc2U6OndoZW5TZXR0bGVkKToKKyAgICAgICAgKiBkb20vQWJzdHJhY3RFdmVu
dExvb3AuaDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TG9vcFRhc2spOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50TG9vcFRhc2s6OnRhc2tTb3VyY2UpOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50TG9vcFRhc2s6Omdyb3VwIGNvbnN0KTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpFdmVudExvb3BUYXNrOjpFdmVudExvb3BUYXNrKTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpFdmVudExvb3BUYXNrR3JvdXApOiBBZGRlZC4gVGhpcyBjbGFzcyByZXByZXNlbnRz
IGEgZ3JvdXAgb2YgdGFza3MuIEZvciBub3csIGVhY2ggZ3JvdXAgaXMKKyAgICAgICAgYSBkaXN0
aW5jdCBTY3JpcHRFeGVjdXRpb25Db250ZXh0LgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29w
VGFza0dyb3VwOjptYXRjaGVzVGFzayBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRMb29wVGFza0dyb3VwOjpzdGFydFJ1bm5pbmcpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50TG9vcFRhc2tHcm91cDo6c3RvcEFuZERpc2NhcmRBbGxUYXNrcyk6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29wVGFza0dyb3VwOjpzdXNwZW5kKTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpFdmVudExvb3BUYXNrR3JvdXA6OnJlc3VtZSk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRMb29wVGFza0dyb3VwOjppc1N0b3BwZWRQZXJtYW5lbnRseSk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29wVGFza0dyb3VwOjppc1N1c3BlbmRl
ZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29wVGFza0dyb3VwOjpoYXNTY2hl
ZHVsZWRUYXNrcyBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29wVGFz
a0dyb3VwOjpxdWV1ZVRhc2spOiBBZGRlZC4KKyAgICAgICAgKiBkb20vQWN0aXZlRE9NT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjdGl2ZURPTU9iamVjdDo6cXVldWVUYXNrSW5FdmVu
dExvb3ApOgorICAgICAgICAoV2ViQ29yZTo6QWN0aXZlRE9NT2JqZWN0RXZlbnREaXNwYXRjaFRh
c2spOiBBZGRlZDsgQSBzdWJjbGFzcyBvZiBFdmVudExvb3BUYXNrIHRvIGRpc3BhdGNoIGFuIGFz
eW5jIGV2ZW50LgorICAgICAgICAoV2ViQ29yZTo6QWN0aXZlRE9NT2JqZWN0RXZlbnREaXNwYXRj
aFRhc2s6OkFjdGl2ZURPTU9iamVjdEV2ZW50RGlzcGF0Y2hUYXNrKTogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpBY3RpdmVET01PYmplY3RFdmVudERpc3BhdGNoVGFzazo6fkFjdGl2ZURPTU9i
amVjdEV2ZW50RGlzcGF0Y2hUYXNrKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpBY3RpdmVE
T01PYmplY3Q6OnF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudEludGVybmFsKTogQWRkZWQuCisgICAg
ICAgICogZG9tL0FjdGl2ZURPTU9iamVjdC5oOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnN0b3BBY3RpdmVET01PYmplY3RzKToKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpldmVudExvb3ApOiBDcmVhdGVzIEV2ZW50TG9vcFRhc2tHcm91
cCBmb3IgdGhpcyBkb2N1bWVudC4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAg
KiBkb20vSWRsZUNhbGxiYWNrQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJZGxl
Q2FsbGJhY2tDb250cm9sbGVyOjpxdWV1ZVRhc2tUb1N0YXJ0SWRsZVBlcmlvZCk6CisgICAgICAg
IChXZWJDb3JlOjpJZGxlQ2FsbGJhY2tDb250cm9sbGVyOjpxdWV1ZVRhc2tUb0ludm9rZUlkbGVD
YWxsYmFja3MpOgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0Lmg6CisgICAg
ICAgICogZG9tL1dpbmRvd0V2ZW50TG9vcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFj
dEV2ZW50TG9vcDo6cXVldWVUYXNrKTogVGhlIGltcGxlbWVudGF0aW9uIG1vdmVkIGZyb20gV2lu
ZG93RXZlbnRMb29wIHRvIEFic3RyYWN0RXZlbnRMb29wLgorICAgICAgICAoV2ViQ29yZTo6QWJz
dHJhY3RFdmVudExvb3A6OnN1c3BlbmRHcm91cCk6IERpdHRvLiBBbHNvIHJlbmFtZWQgZnJvbSBz
dXNwZW5kLgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3RFdmVudExvb3A6OnJlc3VtZUdyb3Vw
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdEV2ZW50TG9vcDo6c3RvcEdyb3Vw
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dFdmVudExvb3A6OnNjaGVkdWxlVG9S
dW4pOiBSZW5hbWVkIGZyb20gV2luZG93RXZlbnRMb29wOjpzY2hlZHVsZVRvUnVuSWZOZWVkZWQu
CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdEV2ZW50TG9vcDo6c2NoZWR1bGVUb1J1bklmTmVl
ZGVkKTogRXh0cmFjdGVkIGZyb20gV2luZG93RXZlbnRMb29wOjpzY2hlZHVsZVRvUnVuSWZOZWVk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dFdmVudExvb3A6OmlzQ29udGV4dFRocmVhZCBj
b25zdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3RFdmVudExvb3A6OnJ1bik6
IFRoZSBpbXBsZW1lbnRhdGlvbiBtb3ZlZCBmcm9tIFdpbmRvd0V2ZW50TG9vcCB0byBBYnN0cmFj
dEV2ZW50TG9vcC4KKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RXZlbnRMb29wOjpjbGVhckFs
bFRhc2tzKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFdmVudExvb3BGdW5jdGlvbkRpc3Bh
dGNoVGFzayk6IEFkZGVkOyBBIHN1YmNsYXNzIG9mIEV2ZW50TG9vcFRhc2sgdG8gY2FsbCBhIGZ1
bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29wRnVuY3Rpb25EaXNwYXRjaFRhc2s6
OkV2ZW50TG9vcEZ1bmN0aW9uRGlzcGF0Y2hUYXNrKTogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpFdmVudExvb3BUYXNrR3JvdXA6OnF1ZXVlVGFzayk6IEFkZGVkLgorICAgICAgICAqIGRvbS9X
aW5kb3dFdmVudExvb3AuaDoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVSZWFkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6ZW5xdWV1ZVRhc2spOgorICAgICAgICAqIHRlc3Rp
bmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cXVldWVUYXNr
KToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckV2ZW50TG9vcC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJFdmVudExvb3A6OldvcmtlckV2ZW50TG9vcCk6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJFdmVudExvb3A6OnF1ZXVlVGFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJFdmVudExvb3A6OmFjdGl2ZURPTU9iamVjdE5hbWUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyRXZlbnRMb29wOjpzdXNwZW5kKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlckV2ZW50TG9vcDo6cmVzdW1lKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlckV2ZW50TG9vcDo6c3RvcCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpXb3JrZXJFdmVudExvb3A6OnNjaGVkdWxlVG9SdW4pOiBFeHRyYWN0ZWQgZnJvbSBz
Y2hlZHVsZVRvUnVuSWZOZWVkZWQuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJFdmVudExvb3A6
OnNjaGVkdWxlVG9SdW5JZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJFdmVudExvb3A6OnJ1bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJFdmVu
dExvb3A6OmlzQ29udGV4dFRocmVhZCBjb25zdCk6IEFkZGVkLgorICAgICAgICAqIHdvcmtlcnMv
V29ya2VyRXZlbnRMb29wLmg6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJFdmVudExvb3ApOiBU
aGlzIGNsYXNzIGlzIG5vIGxvbmdlciBhbiBhY3RpdmUgRE9NIG9iamVjdC4gV29ya2VyR2xvYmFs
U2NvcGUgYW5kIFdvcmtlckdsb2JhbFNjb3BlCisgICAgICAgIG1hbnVhbGx5IHN0b3AgdGhlIHRh
c2sgZ3JvdXAgYXNzb2NpYXRlZCB3aXRoIGl0LgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyR2xv
YmFsU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyR2xvYmFsU2NvcGU6OmV2ZW50
TG9vcCk6IENyZWF0ZSB0aGUgZGVmYXVsdCB0YXNrIGdyb3VwIGZvciB0aGlzIHNjcmlwdCBleGVj
dXRpb24gY29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlckdsb2JhbFNjb3BlOjpwcmVw
YXJlRm9yVGVybWluYXRpb24pOiBTdG9wIHRoZSBkZWZhdWx0IHRhc2sgZ3JvdXAuCisgICAgICAg
ICogd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5oOgorICAgICAgICAqIHdvcmtsZXRzL1dvcmts
ZXRHbG9iYWxTY29wZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrbGV0R2xvYmFsU2NvcGU6
OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6IFNpbWlsYXIgdG8gV29ya2VyR2xvYmFsU2NvcGU6OnBy
ZXBhcmVGb3JUZXJtaW5hdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OldvcmtsZXRHbG9iYWxTY29w
ZTo6ZXZlbnRMb29wKTogU2ltaWxhciB0byBXb3JrZXJHbG9iYWxTY29wZTo6ZXZlbnRMb29wLgor
ICAgICAgICAqIHdvcmtsZXRzL1dvcmtsZXRHbG9iYWxTY29wZS5oOgorCiAyMDE5LTExLTE1ICBK
ZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIENSQVNIIGluIFNvdXJj
ZUJ1ZmZlcjo6cmVtb3ZlQ29kZWRGcmFtZXMoKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlzLmNwcAkocmV2aXNpb24gMjUyNTA2
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBNZWRpYUtleXM6OnNldFNl
cnZlckNlcnRpZmljYXRlKFNjcgogICAgIC8vIDQuIExldCBwcm9taXNlIGJlIGEgbmV3IHByb21p
c2UuCiAgICAgLy8gNS4gUnVuIHRoZSBmb2xsb3dpbmcgc3RlcHMgaW4gcGFyYWxsZWw6CiAKLSAg
ICBjb250ZXh0LmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCBj
b250ZXh0LCBbdGhpcywgY2VydGlmaWNhdGUgPSBXVEZNb3ZlKGNlcnRpZmljYXRlKSwgcHJvbWlz
ZSA9IFdURk1vdmUocHJvbWlzZSldICgpIG11dGFibGUgeworICAgIGNvbnRleHQuZXZlbnRMb29w
KCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIFt0aGlzLCBjZXJ0aWZpY2F0ZSA9
IFdURk1vdmUoY2VydGlmaWNhdGUpLCBwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKV0gKCkgbXV0
YWJsZSB7CiAgICAgICAgIC8vIDUuMS4gVXNlIHRoaXMgb2JqZWN0J3MgY2RtIGluc3RhbmNlIHRv
IHByb2Nlc3MgY2VydGlmaWNhdGUuCiAgICAgICAgIGlmIChtX2luc3RhbmNlLT5zZXRTZXJ2ZXJD
ZXJ0aWZpY2F0ZShXVEZNb3ZlKGNlcnRpZmljYXRlKSkgPT0gQ0RNSW5zdGFuY2U6OkZhaWxlZCkg
ewogICAgICAgICAgICAgLy8gNS4yLiBJZiB0aGUgcHJlY2VkaW5nIHN0ZXAgZmFpbGVkLCByZXNv
bHZlIHByb21pc2Ugd2l0aCBhIG5ldyBET01FeGNlcHRpb24gd2hvc2UgbmFtZSBpcyB0aGUgYXBw
cm9wcmlhdGUgZXJyb3IgbmFtZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW50cmll
c2FwaS9GaWxlU3lzdGVtRGlyZWN0b3J5RW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRGlyZWN0b3J5RW50cnkuY3BwCShy
ZXZpc2lvbiAyNTI1MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VudHJpZXNhcGkvRmls
ZVN5c3RlbURpcmVjdG9yeUVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBA
QCB2b2lkIEZpbGVTeXN0ZW1EaXJlY3RvcnlFbnRyeTo6Z2V0RW50cnkoCiAgICAgICAgIGF1dG8q
IGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQoKTsKICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNl
cHRpb24oKSkgewogICAgICAgICAgICAgaWYgKGVycm9yQ2FsbGJhY2sgJiYgZG9jdW1lbnQpIHsK
LSAgICAgICAgICAgICAgICBkb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3Vy
Y2U6Ok5ldHdvcmtpbmcsICpkb2N1bWVudCwgW2Vycm9yQ2FsbGJhY2sgPSBXVEZNb3ZlKGVycm9y
Q2FsbGJhY2spLCBleGNlcHRpb24gPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLCBwZW5kaW5n
QWN0aXZpdHkgPSBXVEZNb3ZlKHBlbmRpbmdBY3Rpdml0eSldKCkgbXV0YWJsZSB7CisgICAgICAg
ICAgICAgICAgZG9jdW1lbnQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3
b3JraW5nLCBbZXJyb3JDYWxsYmFjayA9IFdURk1vdmUoZXJyb3JDYWxsYmFjayksIGV4Y2VwdGlv
biA9IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCksIHBlbmRpbmdBY3Rpdml0eSA9IFdURk1vdmUo
cGVuZGluZ0FjdGl2aXR5KV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICAgICAgZXJyb3JD
YWxsYmFjay0+aGFuZGxlRXZlbnQoRE9NRXhjZXB0aW9uOjpjcmVhdGUoV1RGTW92ZShleGNlcHRp
b24pKSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9CkBAIC02NiwxNCArNjYs
MTQgQEAgdm9pZCBGaWxlU3lzdGVtRGlyZWN0b3J5RW50cnk6OmdldEVudHJ5KAogICAgICAgICBh
dXRvIGVudHJ5ID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogICAgICAgICBpZiAoIW1h
dGNoZXMoZW50cnkpKSB7CiAgICAgICAgICAgICBpZiAoZXJyb3JDYWxsYmFjayAmJiBkb2N1bWVu
dCkgewotICAgICAgICAgICAgICAgIGRvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFz
a1NvdXJjZTo6TmV0d29ya2luZywgKmRvY3VtZW50LCBbZXJyb3JDYWxsYmFjayA9IFdURk1vdmUo
ZXJyb3JDYWxsYmFjayksIHBlbmRpbmdBY3Rpdml0eSA9IFdURk1vdmUocGVuZGluZ0FjdGl2aXR5
KV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC0+ZXZlbnRMb29wKCkucXVl
dWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIFtlcnJvckNhbGxiYWNrID0gV1RGTW92ZShl
cnJvckNhbGxiYWNrKSwgcGVuZGluZ0FjdGl2aXR5ID0gV1RGTW92ZShwZW5kaW5nQWN0aXZpdHkp
XSgpIG11dGFibGUgewogICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrLT5oYW5kbGVF
dmVudChET01FeGNlcHRpb246OmNyZWF0ZShFeGNlcHRpb24geyBUeXBlTWlzbWF0Y2hFcnJvciwg
IkVudHJ5IGF0IGdpdmVuIHBhdGggZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgdHlwZSJfcyB9KSk7
CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgaWYgKHN1Y2Nlc3NDYWxsYmFjayAmJiBkb2N1bWVudCkgewot
ICAgICAgICAgICAgZG9jdW1lbnQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpO
ZXR3b3JraW5nLCAqZG9jdW1lbnQsIFtzdWNjZXNzQ2FsbGJhY2sgPSBXVEZNb3ZlKHN1Y2Nlc3ND
YWxsYmFjayksIGVudHJ5ID0gV1RGTW92ZShlbnRyeSksIHBlbmRpbmdBY3Rpdml0eSA9IFdURk1v
dmUocGVuZGluZ0FjdGl2aXR5KV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGRvY3VtZW50LT5l
dmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgW3N1Y2Nlc3NDYWxs
YmFjayA9IFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgZW50cnkgPSBXVEZNb3ZlKGVudHJ5KSwg
cGVuZGluZ0FjdGl2aXR5ID0gV1RGTW92ZShwZW5kaW5nQWN0aXZpdHkpXSgpIG11dGFibGUgewog
ICAgICAgICAgICAgICAgIHN1Y2Nlc3NDYWxsYmFjay0+aGFuZGxlRXZlbnQoV1RGTW92ZShlbnRy
eSkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRGlyZWN0b3J5UmVhZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VudHJpZXNhcGkvRmlsZVN5c3RlbURpcmVjdG9y
eVJlYWRlci5jcHAJKHJldmlzaW9uIDI1MjUwNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZW50cmllc2FwaS9GaWxlU3lzdGVtRGlyZWN0b3J5UmVhZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODksNyArODksNyBAQCB2b2lkIEZpbGVTeXN0ZW1EaXJlY3RvcnlSZWFkZXI6OnJlYWRFbnRy
CiAgICAgICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICAg
ICAgbV9lcnJvciA9IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICAgICAg
aWYgKGVycm9yQ2FsbGJhY2sgJiYgZG9jdW1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgZG9j
dW1lbnQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCAqZG9j
dW1lbnQsIFt0aGlzLCBlcnJvckNhbGxiYWNrID0gV1RGTW92ZShlcnJvckNhbGxiYWNrKSwgcGVu
ZGluZ0FjdGl2aXR5ID0gV1RGTW92ZShwZW5kaW5nQWN0aXZpdHkpXSgpIG11dGFibGUgeworICAg
ICAgICAgICAgICAgICAgICBkb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3Vy
Y2U6Ok5ldHdvcmtpbmcsIFt0aGlzLCBlcnJvckNhbGxiYWNrID0gV1RGTW92ZShlcnJvckNhbGxi
YWNrKSwgcGVuZGluZ0FjdGl2aXR5ID0gV1RGTW92ZShwZW5kaW5nQWN0aXZpdHkpXSgpIG11dGFi
bGUgewogICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQo
RE9NRXhjZXB0aW9uOjpjcmVhdGUoKm1fZXJyb3IpKTsKICAgICAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICAgICAgfQpAQCAtOTcsNyArOTcsNyBAQCB2b2lkIEZpbGVTeXN0ZW1EaXJl
Y3RvcnlSZWFkZXI6OnJlYWRFbnRyCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2lzRG9u
ZSA9IHRydWU7CiAgICAgICAgICAgICBpZiAoZG9jdW1lbnQpIHsKLSAgICAgICAgICAgICAgICBk
b2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsICpk
b2N1bWVudCwgW3N1Y2Nlc3NDYWxsYmFjayA9IFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgcGVu
ZGluZ0FjdGl2aXR5ID0gV1RGTW92ZShwZW5kaW5nQWN0aXZpdHkpLCByZXN1bHQgPSByZXN1bHQu
cmVsZWFzZVJldHVyblZhbHVlKCldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgZG9jdW1l
bnQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCBbc3VjY2Vz
c0NhbGxiYWNrID0gV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spLCBwZW5kaW5nQWN0aXZpdHkgPSBX
VEZNb3ZlKHBlbmRpbmdBY3Rpdml0eSksIHJlc3VsdCA9IHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFs
dWUoKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrLT5o
YW5kbGVFdmVudChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0
ZW1FbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVz
YXBpL0ZpbGVTeXN0ZW1FbnRyeS5jcHAJKHJldmlzaW9uIDI1MjUwNikKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRW50cnkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03Nyw3ICs3Nyw3IEBAIHZvaWQgRmlsZVN5c3RlbUVudHJ5OjpnZXRQYXJlbnQoU2NyaXB0
RXgKICAgICAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAg
ICBkb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcs
ICpkb2N1bWVudCwgW3N1Y2Nlc3NDYWxsYmFjayA9IFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwg
ZXJyb3JDYWxsYmFjayA9IFdURk1vdmUoZXJyb3JDYWxsYmFjayksIHJlc3VsdCA9IFdURk1vdmUo
cmVzdWx0KSwgcGVuZGluZ0FjdGl2aXR5ID0gV1RGTW92ZShwZW5kaW5nQWN0aXZpdHkpXSgpIG11
dGFibGUgeworICAgICAgICBkb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3Vy
Y2U6Ok5ldHdvcmtpbmcsIFtzdWNjZXNzQ2FsbGJhY2sgPSBXVEZNb3ZlKHN1Y2Nlc3NDYWxsYmFj
ayksIGVycm9yQ2FsbGJhY2sgPSBXVEZNb3ZlKGVycm9yQ2FsbGJhY2spLCByZXN1bHQgPSBXVEZN
b3ZlKHJlc3VsdCksIHBlbmRpbmdBY3Rpdml0eSA9IFdURk1vdmUocGVuZGluZ0FjdGl2aXR5KV0o
KSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKICAg
ICAgICAgICAgICAgICBpZiAoZXJyb3JDYWxsYmFjaykKICAgICAgICAgICAgICAgICAgICAgZXJy
b3JDYWxsYmFjay0+aGFuZGxlRXZlbnQoRE9NRXhjZXB0aW9uOjpjcmVhdGUocmVzdWx0LnJlbGVh
c2VFeGNlcHRpb24oKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBp
L0ZpbGVTeXN0ZW1GaWxlRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRmlsZUVudHJ5LmNwcAkocmV2aXNpb24gMjUyNTA2
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0ZW1GaWxlRW50
cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHZvaWQgRmlsZVN5c3RlbUZp
bGVFbnRyeTo6ZmlsZShSZWY8RmlsZUMKICAgICAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICBkb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRh
c2tTb3VyY2U6Ok5ldHdvcmtpbmcsICpkb2N1bWVudCwgW3N1Y2Nlc3NDYWxsYmFjayA9IFdURk1v
dmUoc3VjY2Vzc0NhbGxiYWNrKSwgZXJyb3JDYWxsYmFjayA9IFdURk1vdmUoZXJyb3JDYWxsYmFj
ayksIHJlc3VsdCA9IFdURk1vdmUocmVzdWx0KSwgcGVuZGluZ0FjdGl2aXR5ID0gV1RGTW92ZShw
ZW5kaW5nQWN0aXZpdHkpXSgpIG11dGFibGUgeworICAgICAgICBkb2N1bWVudC0+ZXZlbnRMb29w
KCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIFtzdWNjZXNzQ2FsbGJhY2sgPSBX
VEZNb3ZlKHN1Y2Nlc3NDYWxsYmFjayksIGVycm9yQ2FsbGJhY2sgPSBXVEZNb3ZlKGVycm9yQ2Fs
bGJhY2spLCByZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCksIHBlbmRpbmdBY3Rpdml0eSA9IFdURk1v
dmUocGVuZGluZ0FjdGl2aXR5KV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChyZXN1bHQu
aGFzRXhjZXB0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoZXJyb3JDYWxsYmFjaykKICAg
ICAgICAgICAgICAgICAgICAgZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQoRE9NRXhjZXB0aW9u
OjpjcmVhdGUocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXJlY29yZGVyL01lZGlhUmVjb3JkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFyZWNvcmRlci9NZWRpYVJlY29yZGVyLmNwcAko
cmV2aXNpb24gMjUyNTA2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXJlY29yZGVy
L01lZGlhUmVjb3JkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsNyArMjE2LDcgQEAgdm9p
ZCBNZWRpYVJlY29yZGVyOjpzY2hlZHVsZURlZmVycmVkVGFzawogICAgIGlmICghZG9jdW1lbnQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGRvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2so
VGFza1NvdXJjZTo6TmV0d29ya2luZywgKmRvY3VtZW50LCBbcGVuZGluZ0FjdGl2aXR5ID0gbWFr
ZVBlbmRpbmdBY3Rpdml0eSgqdGhpcyksIGZ1bmN0aW9uID0gV1RGTW92ZShmdW5jdGlvbildIHsK
KyAgICBkb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtp
bmcsIFtwZW5kaW5nQWN0aXZpdHkgPSBtYWtlUGVuZGluZ0FjdGl2aXR5KCp0aGlzKSwgZnVuY3Rp
b24gPSBXVEZNb3ZlKGZ1bmN0aW9uKV0gewogICAgICAgICBmdW5jdGlvbigpOwogICAgIH0pOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25z
L05vdGlmaWNhdGlvbi5jcHAJKHJldmlzaW9uIDI1MjUwNikKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTIsNyArMTUyLDcgQEAgdm9pZCBOb3RpZmljYXRpb246OnF1ZXVlVGFzayhGdW5jdGlvbjx2bwog
ICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGRvY3VtZW50LT5ldmVu
dExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6VXNlckludGVyYWN0aW9uLCAqZG9jdW1lbnQs
IFdURk1vdmUodGFzaykpOworICAgIGRvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFz
a1NvdXJjZTo6VXNlckludGVyYWN0aW9uLCBXVEZNb3ZlKHRhc2spKTsKIH0KIAogdm9pZCBOb3Rp
ZmljYXRpb246OmRpc3BhdGNoU2hvd0V2ZW50KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAyNTI1MDYpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjg5LDcgKzY4OSw3IEBAIHZvaWQgRGF0YWJhc2U6OnJ1blRyYW5zYWN0aW9uKFJl
ZlB0cjxTUUwKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc011
dGV4KTsKICAgICBpZiAoIW1faXNUcmFuc2FjdGlvblF1ZXVlRW5hYmxlZCkgewogICAgICAgICBp
ZiAoZXJyb3JDYWxsYmFjaykgewotICAgICAgICAgICAgbV9kb2N1bWVudC0+ZXZlbnRMb29wKCku
cXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIG1fZG9jdW1lbnQsIFtlcnJvckNhbGxi
YWNrID0gbWFrZVJlZigqZXJyb3JDYWxsYmFjayldKCkgeworICAgICAgICAgICAgbV9kb2N1bWVu
dC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIFtlcnJvckNh
bGxiYWNrID0gbWFrZVJlZigqZXJyb3JDYWxsYmFjayldKCkgewogICAgICAgICAgICAgICAgIGVy
cm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlVOS05P
V05fRVJSLCAiZGF0YWJhc2UgaGFzIGJlZW4gY2xvc2VkIikpOwogICAgICAgICAgICAgfSk7CiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHAJKHJldmlzaW9uIDI1MjUwNikKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjEwLDcgKzIxMCw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxEYXRhYmFzZT4+IERhdGFi
YXNlTWFuYWcKICAgICBpZiAoZGF0YWJhc2UtPmlzTmV3KCkgJiYgY3JlYXRpb25DYWxsYmFjay5n
ZXQoKSkgewogICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgRGF0YWJhc2VDcmVh
dGlvbkNhbGxiYWNrVGFzayBmb3IgZGF0YWJhc2UgJXBcbiIsIGRhdGFiYXNlLmdldCgpKTsKICAg
ICAgICAgZGF0YWJhc2UtPnNldEhhc1BlbmRpbmdDcmVhdGlvbkV2ZW50KHRydWUpOwotICAgICAg
ICBkYXRhYmFzZS0+bV9kb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6
Ok5ldHdvcmtpbmcsIGRhdGFiYXNlLT5tX2RvY3VtZW50LCBbY3JlYXRpb25DYWxsYmFjaywgZGF0
YWJhc2VdKCkgeworICAgICAgICBkYXRhYmFzZS0+bV9kb2N1bWVudC0+ZXZlbnRMb29wKCkucXVl
dWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIFtjcmVhdGlvbkNhbGxiYWNrLCBkYXRhYmFz
ZV0oKSB7CiAgICAgICAgICAgICBjcmVhdGlvbkNhbGxiYWNrLT5oYW5kbGVFdmVudCgqZGF0YWJh
c2UpOwogICAgICAgICAgICAgZGF0YWJhc2UtPnNldEhhc1BlbmRpbmdDcmVhdGlvbkV2ZW50KGZh
bHNlKTsKICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL1NRTFRyYW5zYWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmNwcAkocmV2aXNpb24gMjUyNTA2KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpjYWxs
RXJyb3JDYWxsYmFja0R1CiAgICAgaWYgKCFlcnJvckNhbGxiYWNrKQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX2RhdGFiYXNlLT5kb2N1bWVudCgpLmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNr
U291cmNlOjpOZXR3b3JraW5nLCBtX2RhdGFiYXNlLT5kb2N1bWVudCgpLCBbZXJyb3JDYWxsYmFj
ayA9IFdURk1vdmUoZXJyb3JDYWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAgbV9kYXRhYmFzZS0+
ZG9jdW1lbnQoKS5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywg
W2Vycm9yQ2FsbGJhY2sgPSBXVEZNb3ZlKGVycm9yQ2FsbGJhY2spXSgpIG11dGFibGUgewogICAg
ICAgICBlcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9y
OjpEQVRBQkFTRV9FUlIsICJ0aGUgZGF0YWJhc2Ugd2FzIGNsb3NlZCIpKTsKICAgICB9KTsKIH0K
QEAgLTQxNSw3ICs0MTUsNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rp
b25FCiAgICAgLy8gZXJyb3IgdG8gaGF2ZSBvY2N1cnJlZCBpbiB0aGlzIHRyYW5zYWN0aW9uLgog
ICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2sgPSBt
X2Vycm9yQ2FsbGJhY2tXcmFwcGVyLnVud3JhcCgpOwogICAgIGlmIChlcnJvckNhbGxiYWNrKSB7
Ci0gICAgICAgIG1fZGF0YWJhc2UtPmRvY3VtZW50KCkuZXZlbnRMb29wKCkucXVldWVUYXNrKFRh
c2tTb3VyY2U6Ok5ldHdvcmtpbmcsIG1fZGF0YWJhc2UtPmRvY3VtZW50KCksIFtlcnJvckNhbGxi
YWNrID0gV1RGTW92ZShlcnJvckNhbGxiYWNrKSwgdHJhbnNhY3Rpb25FcnJvciA9IG1fdHJhbnNh
Y3Rpb25FcnJvcl0oKSBtdXRhYmxlIHsKKyAgICAgICAgbV9kYXRhYmFzZS0+ZG9jdW1lbnQoKS5l
dmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgW2Vycm9yQ2FsbGJh
Y2sgPSBXVEZNb3ZlKGVycm9yQ2FsbGJhY2spLCB0cmFuc2FjdGlvbkVycm9yID0gbV90cmFuc2Fj
dGlvbkVycm9yXSgpIG11dGFibGUgewogICAgICAgICAgICAgZXJyb3JDYWxsYmFjay0+aGFuZGxl
RXZlbnQoKnRyYW5zYWN0aW9uRXJyb3IpOwogICAgICAgICB9KTsKICAgICB9CkBAIC00NjYsNyAr
NDY2LDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN1Y2Nlc3NDYWxsYgogICAgIC8v
IFNwZWMgNC4zLjIuODogRGVsaXZlciBzdWNjZXNzIGNhbGxiYWNrLgogICAgIFJlZlB0cjxWb2lk
Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayA9IG1fc3VjY2Vzc0NhbGxiYWNrV3JhcHBlci51bndy
YXAoKTsKICAgICBpZiAoc3VjY2Vzc0NhbGxiYWNrKSB7Ci0gICAgICAgIG1fZGF0YWJhc2UtPmRv
Y3VtZW50KCkuZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIG1f
ZGF0YWJhc2UtPmRvY3VtZW50KCksIFtzdWNjZXNzQ2FsbGJhY2sgPSBXVEZNb3ZlKHN1Y2Nlc3ND
YWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAgICAgIG1fZGF0YWJhc2UtPmRvY3VtZW50KCkuZXZl
bnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIFtzdWNjZXNzQ2FsbGJh
Y2sgPSBXVEZNb3ZlKHN1Y2Nlc3NDYWxsYmFjayldKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBz
dWNjZXNzQ2FsbGJhY2stPmhhbmRsZUV2ZW50KCk7CiAgICAgICAgIH0pOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZURlZmVycmVkLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2VEZWZlcnJl
ZC5jcHAJKHJldmlzaW9uIDI1MjUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NUHJvbWlzZURlZmVycmVkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCB2
b2lkIERlZmVycmVkUHJvbWlzZTo6Y2FsbEZ1bmN0aW9uKEpTR2xvCiAKICAgICBpZiAoYWN0aXZl
RE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpKSB7CiAgICAgICAgIEpTQzo6U3Ryb25nPEpTQzo6VW5r
bm93biwgU2hvdWxkU3Ryb25nRGVzdHJ1Y3RvckdyYWJMb2NrOjpZZXM+IHN0cm9uZ1Jlc29sdXRp
b24obGV4aWNhbEdsb2JhbE9iamVjdC52bSgpLCByZXNvbHV0aW9uKTsKLSAgICAgICAgc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0
d29ya2luZywgKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKSwgbW9kZSwgc3Ryb25nUmVzb2x1dGlvbiA9IFdURk1vdmUoc3Ryb25n
UmVzb2x1dGlvbildKCkgbXV0YWJsZSB7CisgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIG1vZGUsIHN0cm9uZ1Jlc29sdXRpb24gPSBX
VEZNb3ZlKHN0cm9uZ1Jlc29sdXRpb24pXSgpIG11dGFibGUgewogICAgICAgICAgICAgaWYgKHNo
b3VsZElnbm9yZVJlcXVlc3RUb0Z1bGZpbGwoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAK
QEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBEZWZlcnJlZFByb21pc2U6OndoZW5TZXR0bGVkKEZ1bmN0
aQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRl
ZCgpKSB7Ci0gICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRMb29wKCkucXVl
dWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsICpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCks
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayldKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICB3aGVuU2V0dGxlZChXVEZNb3ZlKGNhbGxiYWNr
KSk7CiAgICAgICAgIH0pOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vQWJzdHJhY3RFdmVudExvb3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
QWJzdHJhY3RFdmVudExvb3AuaAkocmV2aXNpb24gMjUyNTA2KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0Fic3RyYWN0RXZlbnRMb29wLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDIxICsyOCwxMjUg
QEAKICNpbmNsdWRlICJUYXNrU291cmNlLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CisjaW5jbHVkZSA8d3RmL1dlYWtIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBFdmVudExvb3BUYXNrR3JvdXA7CitjbGFz
cyBFdmVudFRhcmdldDsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKK2NsYXNzIEV2
ZW50TG9vcFRhc2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEV2ZW50TG9vcFRhc2spOwor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgdmlydHVhbCB+RXZl
bnRMb29wVGFzaygpID0gZGVmYXVsdDsKKworICAgIFRhc2tTb3VyY2UgdGFza1NvdXJjZSgpIHsg
cmV0dXJuIG1fdGFza1NvdXJjZTsgfQorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKCkgPSAwOwor
CisgICAgRXZlbnRMb29wVGFza0dyb3VwKiBncm91cCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JvdXAu
Z2V0KCk7IH0KKworcHJvdGVjdGVkOgorICAgIEV2ZW50TG9vcFRhc2soVGFza1NvdXJjZSBzb3Vy
Y2UpCisgICAgICAgIDogbV90YXNrU291cmNlKHNvdXJjZSkKKyAgICB7IH0KKworcHJpdmF0ZToK
KyAgICBjb25zdCBUYXNrU291cmNlIG1fdGFza1NvdXJjZTsKKyAgICBXZWFrUHRyPEV2ZW50TG9v
cFRhc2tHcm91cD4gbV9ncm91cDsKKworICAgIGZyaWVuZCBjbGFzcyBFdmVudExvb3BUYXNrR3Jv
dXA7Cit9OworCiAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJh
cHBhcGlzLmh0bWwjZXZlbnQtbG9vcAotY2xhc3MgQWJzdHJhY3RFdmVudExvb3AgOiBwdWJsaWMg
UmVmQ291bnRlZDxBYnN0cmFjdEV2ZW50TG9vcD4geworY2xhc3MgQWJzdHJhY3RFdmVudExvb3Ag
OiBwdWJsaWMgUmVmQ291bnRlZDxBYnN0cmFjdEV2ZW50TG9vcD4sIHB1YmxpYyBDYW5NYWtlV2Vh
a1B0cjxBYnN0cmFjdEV2ZW50TG9vcD4gewogcHVibGljOgogICAgIHZpcnR1YWwgfkFic3RyYWN0
RXZlbnRMb29wKCkgPSBkZWZhdWx0OwogCi0gICAgdHlwZWRlZiBXVEY6OkZ1bmN0aW9uPHZvaWQg
KCk+IFRhc2tGdW5jdGlvbjsKLSAgICB2aXJ0dWFsIHZvaWQgcXVldWVUYXNrKFRhc2tTb3VyY2Us
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBUYXNrRnVuY3Rpb24mJikgPSAwOworICAgIHR5cGVk
ZWYgRnVuY3Rpb248dm9pZCAoKT4gVGFza0Z1bmN0aW9uOworICAgIHZvaWQgcXVldWVUYXNrKHN0
ZDo6dW5pcXVlX3B0cjxFdmVudExvb3BUYXNrPiYmKTsKKworICAgIHZvaWQgc3VzcGVuZEdyb3Vw
KEV2ZW50TG9vcFRhc2tHcm91cCYpOworICAgIHZvaWQgcmVzdW1lR3JvdXAoRXZlbnRMb29wVGFz
a0dyb3VwJik7CisgICAgdm9pZCBzdG9wR3JvdXAoRXZlbnRMb29wVGFza0dyb3VwJik7CiAKIHBy
b3RlY3RlZDoKICAgICBBYnN0cmFjdEV2ZW50TG9vcCgpID0gZGVmYXVsdDsKKyAgICB2b2lkIHJ1
bigpOworICAgIHZvaWQgY2xlYXJBbGxUYXNrcygpOworCitwcml2YXRlOgorICAgIHZvaWQgc2No
ZWR1bGVUb1J1bklmTmVlZGVkKCk7CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlVG9SdW4oKSA9
IDA7CisgICAgdmlydHVhbCBib29sIGlzQ29udGV4dFRocmVhZCgpIGNvbnN0ID0gMDsKKworICAg
IC8vIFVzZSBhIGdsb2JhbCBxdWV1ZSBpbnN0ZWFkIG9mIG11bHRpcGxlIHRhc2sgcXVldWVzIHNp
bmNlIEhUTUw1IHNwZWMgYWxsb3dzIFVBIHRvIHBpY2sgYXJiaXRyYXJ5IHF1ZXVlLgorICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RXZlbnRMb29wVGFzaz4+IG1fdGFza3M7CisgICAgV2Vha0hh
c2hTZXQ8RXZlbnRMb29wVGFza0dyb3VwPiBtX2dyb3Vwc1dpdGhTdXNwZW5lZFRhc2tzOworICAg
IGJvb2wgbV9pc1NjaGVkdWxlZFRvUnVuIHsgZmFsc2UgfTsKK307CisKK2NsYXNzIEV2ZW50TG9v
cFRhc2tHcm91cCA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxFdmVudExvb3BUYXNrR3JvdXA+IHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFdmVudExvb3BUYXNrR3JvdXApOworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgRXZlbnRMb29wVGFza0dyb3VwKEFi
c3RyYWN0RXZlbnRMb29wJiBldmVudExvb3ApCisgICAgICAgIDogbV9ldmVudExvb3AobWFrZVdl
YWtQdHIoZXZlbnRMb29wKSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBtYXRjaGVzVGFzayhF
dmVudExvb3BUYXNrJiB0YXNrKSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byogZ3JvdXAgPSB0
YXNrLmdyb3VwKCk7CisgICAgICAgIHJldHVybiBncm91cCA9PSB0aGlzOworICAgIH0KKworICAg
IHZvaWQgc3RvcEFuZERpc2NhcmRBbGxUYXNrcygpCisgICAgeworICAgICAgICBtX3N0YXRlID0g
U3RhdGU6OlN0b3BwZWQ7CisgICAgICAgIGlmIChhdXRvKiBldmVudExvb3AgPSBtX2V2ZW50TG9v
cC5nZXQoKSkKKyAgICAgICAgICAgIGV2ZW50TG9vcC0+c3RvcEdyb3VwKCp0aGlzKTsKKyAgICB9
CisKKyAgICB2b2lkIHN1c3BlbmQoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUgIT0g
U3RhdGU6OlN0b3BwZWQpOworICAgICAgICBtX3N0YXRlID0gU3RhdGU6OlN1c3BlbmRlZDsKKyAg
ICAgICAgLy8gRXZlbnRMb29wIGRvZXNuJ3QgZG8gYW55dGhpbmcgdXBvbiBzdXNwZW5zaW9uLgor
ICAgIH0KKworICAgIHZvaWQgcmVzdW1lKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3N0YXRl
ICE9IFN0YXRlOjpTdG9wcGVkKTsKKyAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpSdW5uaW5nOwor
ICAgICAgICBpZiAoYXV0byogZXZlbnRMb29wID0gbV9ldmVudExvb3AuZ2V0KCkpCisgICAgICAg
ICAgICBldmVudExvb3AtPnJlc3VtZUdyb3VwKCp0aGlzKTsKKyAgICB9CisKKyAgICBib29sIGlz
U3RvcHBlZFBlcm1hbmVudGx5KCkgeyByZXR1cm4gbV9zdGF0ZSA9PSBTdGF0ZTo6U3RvcHBlZDsg
fQorICAgIGJvb2wgaXNTdXNwZW5kZWQoKSB7IHJldHVybiBtX3N0YXRlID09IFN0YXRlOjpTdXNw
ZW5kZWQ7IH0KKworICAgIHZvaWQgcXVldWVUYXNrKHN0ZDo6dW5pcXVlX3B0cjxFdmVudExvb3BU
YXNrPiYmIHRhc2spCisgICAgeworICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6U3RvcHBl
ZCB8fCAhbV9ldmVudExvb3ApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFTU0VSVCgh
dGFzay0+bV9ncm91cCk7CisgICAgICAgIHRhc2stPm1fZ3JvdXAgPSBtYWtlV2Vha1B0cigqdGhp
cyk7CisgICAgICAgIG1fZXZlbnRMb29wLT5xdWV1ZVRhc2soV1RGTW92ZSh0YXNrKSk7CisgICAg
fQorCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBxdWV1ZVRhc2soVGFza1NvdXJjZSwgQWJzdHJh
Y3RFdmVudExvb3A6OlRhc2tGdW5jdGlvbiYmKTsKKworcHJpdmF0ZToKKyAgICBlbnVtIGNsYXNz
IFN0YXRlIDogdWludDhfdCB7IFJ1bm5pbmcsIFN1c3BlbmRlZCwgU3RvcHBlZCB9OworCisgICAg
V2Vha1B0cjxBYnN0cmFjdEV2ZW50TG9vcD4gbV9ldmVudExvb3A7CisgICAgU3RhdGUgbV9zdGF0
ZSB7IFN0YXRlOjpSdW5uaW5nIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmNwcAkocmV2aXNpb24gMjUyNTA2KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzMSwxMiArMTMxLDQ3IEBAIGJvb2wgQWN0aXZlRE9NT2JqZWN0Ojppc0FsbG93ZWRUb1J1
blNjcmkKICAgICByZXR1cm4gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpICYmICFzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPmFjdGl2ZURPTU9iamVjdHNBcmVTdG9wcGVkKCkgJiYgIXNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+YWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpOwogfQogCi12
b2lkIEFjdGl2ZURPTU9iamVjdDo6cXVldWVUYXNrSW5FdmVudExvb3AoVGFza1NvdXJjZSBzb3Vy
Y2UsIEZ1bmN0aW9uPHZvaWQgKCk+JiYgdGFzaykKK3ZvaWQgQWN0aXZlRE9NT2JqZWN0OjpxdWV1
ZVRhc2tJbkV2ZW50TG9vcChUYXNrU291cmNlIHNvdXJjZSwgRnVuY3Rpb248dm9pZCAoKT4mJiBm
dW5jdGlvbikKIHsKICAgICBhdXRvKiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OwogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuOwotICAgIGNvbnRleHQtPmV2ZW50
TG9vcCgpLnF1ZXVlVGFzayhzb3VyY2UsICpjb250ZXh0LCBXVEZNb3ZlKHRhc2spKTsKKyAgICBj
b250ZXh0LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soc291cmNlLCBXVEZNb3ZlKGZ1bmN0aW9uKSk7
Cit9CisKK2NsYXNzIEFjdGl2ZURPTU9iamVjdEV2ZW50RGlzcGF0Y2hUYXNrIDogcHVibGljIEV2
ZW50TG9vcFRhc2sgeworcHVibGljOgorICAgIEFjdGl2ZURPTU9iamVjdEV2ZW50RGlzcGF0Y2hU
YXNrKFRhc2tTb3VyY2Ugc291cmNlLCBBY3RpdmVET01PYmplY3QmIG9iamVjdCwgRXZlbnRUYXJn
ZXQmIHRhcmdldCwgUmVmPEV2ZW50PiYmIGV2ZW50KQorICAgICAgICA6IEV2ZW50TG9vcFRhc2so
c291cmNlKQorICAgICAgICAsIG1fb2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX3RhcmdldCh0
YXJnZXQpCisgICAgICAgICwgbV9ldmVudChXVEZNb3ZlKGV2ZW50KSkKKyAgICB7CisgICAgICAg
ICsrbV9vYmplY3QubV9wZW5kaW5nQWN0aXZpdHlDb3VudDsKKyAgICB9CisKKyAgICB+QWN0aXZl
RE9NT2JqZWN0RXZlbnREaXNwYXRjaFRhc2soKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb2Jq
ZWN0Lm1fcGVuZGluZ0FjdGl2aXR5Q291bnQpOworICAgICAgICAtLW1fb2JqZWN0Lm1fcGVuZGlu
Z0FjdGl2aXR5Q291bnQ7CisgICAgfQorCisgICAgdm9pZCBleGVjdXRlKCkgZmluYWwgeyBtX3Rh
cmdldC0+ZGlzcGF0Y2hFdmVudChtX2V2ZW50LmdldCgpKTsgfQorCitwcml2YXRlOgorICAgIEFj
dGl2ZURPTU9iamVjdCYgbV9vYmplY3Q7CisgICAgUmVmPEV2ZW50VGFyZ2V0PiBtX3RhcmdldDsK
KyAgICBSZWY8RXZlbnQ+IG1fZXZlbnQ7Cit9OworCit2b2lkIEFjdGl2ZURPTU9iamVjdDo6cXVl
dWVUYXNrVG9EaXNwYXRjaEV2ZW50SW50ZXJuYWwoRXZlbnRUYXJnZXQmIHRhcmdldCwgVGFza1Nv
dXJjZSBzb3VyY2UsIFJlZjxFdmVudD4mJiBldmVudCkKK3sKKyAgICBBU1NFUlQoIWV2ZW50LT50
YXJnZXQoKSB8fCAmdGFyZ2V0ID09IGV2ZW50LT50YXJnZXQoKSk7CisgICAgYXV0byogY29udGV4
dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAg
IHJldHVybjsKKyAgICBhdXRvIHRhc2sgPSBtYWtlVW5pcXVlPEFjdGl2ZURPTU9iamVjdEV2ZW50
RGlzcGF0Y2hUYXNrPihzb3VyY2UsICp0aGlzLCB0YXJnZXQsIFdURk1vdmUoZXZlbnQpKTsKKyAg
ICBjb250ZXh0LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soV1RGTW92ZSh0YXNrKSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01P
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0
LmgJKHJldmlzaW9uIDI1MjUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsOSBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEV2ZW50OworY2xhc3MgRXZlbnRMb29wVGFza0dy
b3VwOworY2xhc3MgRXZlbnRUYXJnZXQ7CiAKIGVudW0gY2xhc3MgUmVhc29uRm9yU3VzcGVuc2lv
biB7CiAgICAgSmF2YVNjcmlwdERlYnVnZ2VyUGF1c2VkLApAQCAtMTE2LDcgKzExOSw3IEBAIHB1
YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIHN0YXRpYyB2b2lkIHF1ZXVlVGFz
a0tlZXBpbmdPYmplY3RBbGl2ZShUJiBvYmplY3QsIFRhc2tTb3VyY2Ugc291cmNlLCBGdW5jdGlv
bjx2b2lkICgpPiYmIHRhc2spCiAgICAgewotICAgICAgICBvYmplY3QucXVldWVUYXNrSW5FdmVu
dExvb3Aoc291cmNlLCBbcHJvdGVjdGVkT2JqZWN0ID0gbWFrZVJlZihvYmplY3QpLCBhY3Rpdml0
eSA9IG9iamVjdC5tYWtlUGVuZGluZ0FjdGl2aXR5KG9iamVjdCksIHRhc2sgPSBXVEZNb3ZlKHRh
c2spXSAoKSB7CisgICAgICAgIG9iamVjdC5xdWV1ZVRhc2tJbkV2ZW50TG9vcChzb3VyY2UsIFtw
cm90ZWN0ZWRPYmplY3QgPSBtYWtlUmVmKG9iamVjdCksIGFjdGl2aXR5ID0gb2JqZWN0LkFjdGl2
ZURPTU9iamVjdDo6bWFrZVBlbmRpbmdBY3Rpdml0eShvYmplY3QpLCB0YXNrID0gV1RGTW92ZSh0
YXNrKV0gKCkgewogICAgICAgICAgICAgdGFzaygpOwogICAgICAgICB9KTsKICAgICB9CkBAIC0x
MjQsMTAgKzEyNyw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFdmVudFRhcmdl
dFR5cGUsIHR5cGVuYW1lIEV2ZW50VHlwZT4KICAgICBzdGF0aWMgdm9pZCBxdWV1ZVRhc2tUb0Rp
c3BhdGNoRXZlbnQoRXZlbnRUYXJnZXRUeXBlJiB0YXJnZXQsIFRhc2tTb3VyY2Ugc291cmNlLCBS
ZWY8RXZlbnRUeXBlPiYmIGV2ZW50KQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFldmVudC0+dGFy
Z2V0KCkgfHwgJnRhcmdldCA9PSBldmVudC0+dGFyZ2V0KCkpOwotICAgICAgICBxdWV1ZVRhc2tL
ZWVwaW5nT2JqZWN0QWxpdmUodGFyZ2V0LCBzb3VyY2UsIFsmdGFyZ2V0LCBldmVudCA9IFdURk1v
dmUoZXZlbnQpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIHRhcmdldC5kaXNwYXRjaEV2ZW50
KGV2ZW50LmdldCgpKTsKLSAgICAgICAgfSk7CisgICAgICAgIHRhcmdldC5xdWV1ZVRhc2tUb0Rp
c3BhdGNoRXZlbnRJbnRlcm5hbCh0YXJnZXQsIHNvdXJjZSwgV1RGTW92ZShldmVudCkpOwogICAg
IH0KIAogcHJvdGVjdGVkOgpAQCAtMTQxLDEyICsxNDEsMTUgQEAgcHJpdmF0ZToKICAgICBBY3Rp
dmVET01PYmplY3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIENoZWNrZWRTY3JpcHRFeGVjdXRp
b25Db250ZXh0VHlwZSk7CiAKICAgICB2b2lkIHF1ZXVlVGFza0luRXZlbnRMb29wKFRhc2tTb3Vy
Y2UsIEZ1bmN0aW9uPHZvaWQgKCk+JiYpOworICAgIHZvaWQgcXVldWVUYXNrVG9EaXNwYXRjaEV2
ZW50SW50ZXJuYWwoRXZlbnRUYXJnZXQmLCBUYXNrU291cmNlLCBSZWY8RXZlbnQ+JiYpOwogCiAg
ICAgdW5zaWduZWQgbV9wZW5kaW5nQWN0aXZpdHlDb3VudCB7IDAgfTsKICNpZiAhQVNTRVJUX0RJ
U0FCTEVECiAgICAgYm9vbCBtX3N1c3BlbmRJZk5lZWRlZFdhc0NhbGxlZCB7IGZhbHNlIH07CiAg
ICAgUmVmPFRocmVhZD4gbV9jcmVhdGlvblRocmVhZCB7IFRocmVhZDo6Y3VycmVudCgpIH07CiAj
ZW5kaWYKKworICAgIGZyaWVuZCBjbGFzcyBBY3RpdmVET01PYmplY3RFdmVudERpc3BhdGNoVGFz
azsKIH07CiAKICNpZiBBU1NFUlRfRElTQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAkocmV2aXNpb24gMjUyNTA2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjY0Niw4ICsyNjQ2LDggQEAgdm9pZCBEb2N1bWVudDo6cGxhdGZv
cm1TdXNwZW5kT3JTdG9wQWN0aQogCiB2b2lkIERvY3VtZW50OjpzdXNwZW5kQWN0aXZlRE9NT2Jq
ZWN0cyhSZWFzb25Gb3JTdXNwZW5zaW9uIHdoeSkKIHsKLSAgICBpZiAobV9ldmVudExvb3ApCi0g
ICAgICAgIG1fZXZlbnRMb29wLT5zdXNwZW5kKCp0aGlzKTsKKyAgICBpZiAobV9kb2N1bWVudFRh
c2tHcm91cCkKKyAgICAgICAgbV9kb2N1bWVudFRhc2tHcm91cC0+c3VzcGVuZCgpOwogICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzKHdoeSk7CiAgICAg
c3VzcGVuZERldmljZU1vdGlvbkFuZE9yaWVudGF0aW9uVXBkYXRlcygpOwogICAgIHBsYXRmb3Jt
U3VzcGVuZE9yU3RvcEFjdGl2ZURPTU9iamVjdHMoKTsKQEAgLTI2NTUsOCArMjY1NSw4IEBAIHZv
aWQgRG9jdW1lbnQ6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzKFIKIAogdm9pZCBEb2N1bWVudDo6
cmVzdW1lQWN0aXZlRE9NT2JqZWN0cyhSZWFzb25Gb3JTdXNwZW5zaW9uIHdoeSkKIHsKLSAgICBp
ZiAobV9ldmVudExvb3ApCi0gICAgICAgIG1fZXZlbnRMb29wLT5yZXN1bWUoKnRoaXMpOworICAg
IGlmIChtX2RvY3VtZW50VGFza0dyb3VwKQorICAgICAgICBtX2RvY3VtZW50VGFza0dyb3VwLT5y
ZXN1bWUoKTsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpyZXN1bWVBY3RpdmVET01PYmpl
Y3RzKHdoeSk7CiAgICAgcmVzdW1lRGV2aWNlTW90aW9uQW5kT3JpZW50YXRpb25VcGRhdGVzKCk7
CiAgICAgLy8gRklYTUU6IEZvciBpT1MsIGRvIHdlIG5lZWQgdG8gYWRkIGNvbnRlbnQgY2hhbmdl
IG9ic2VydmVycyB0aGF0IHdlcmUgcmVtb3ZlZCBpbiBEb2N1bWVudDo6c3VzcGVuZEFjdGl2ZURP
TU9iamVjdHMoKT8KQEAgLTI2NjQsOCArMjY2NCw4IEBAIHZvaWQgRG9jdW1lbnQ6OnJlc3VtZUFj
dGl2ZURPTU9iamVjdHMoUmUKIAogdm9pZCBEb2N1bWVudDo6c3RvcEFjdGl2ZURPTU9iamVjdHMo
KQogewotICAgIGlmIChtX2V2ZW50TG9vcCkKLSAgICAgICAgbV9ldmVudExvb3AtPnN0b3AoKnRo
aXMpOworICAgIGlmIChtX2RvY3VtZW50VGFza0dyb3VwKQorICAgICAgICBtX2RvY3VtZW50VGFz
a0dyb3VwLT5zdG9wQW5kRGlzY2FyZEFsbFRhc2tzKCk7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6c3RvcEFjdGl2ZURPTU9iamVjdHMoKTsKICAgICBwbGF0Zm9ybVN1c3BlbmRPclN0b3BB
Y3RpdmVET01PYmplY3RzKCk7CiB9CkBAIC02MjQzLDEyICs2MjQzLDE0IEBAIHZvaWQgRG9jdW1l
bnQ6OnBlbmRpbmdUYXNrc1RpbWVyRmlyZWQoKQogICAgICAgICB0YXNrLnBlcmZvcm1UYXNrKCp0
aGlzKTsKIH0KIAotQWJzdHJhY3RFdmVudExvb3AmIERvY3VtZW50OjpldmVudExvb3AoKQorRXZl
bnRMb29wVGFza0dyb3VwJiBEb2N1bWVudDo6ZXZlbnRMb29wKCkKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotICAgIGlmIChVTkxJS0VMWSghbV9ldmVudExvb3ApKQorICAgIGlmIChV
TkxJS0VMWSghbV9kb2N1bWVudFRhc2tHcm91cCkpIHsKICAgICAgICAgbV9ldmVudExvb3AgPSBX
aW5kb3dFdmVudExvb3A6OmVuc3VyZUZvclJlZ2lzdHJhYmxlRG9tYWluKFJlZ2lzdHJhYmxlRG9t
YWluIHsgc2VjdXJpdHlPcmlnaW4oKS5kYXRhKCkgfSk7Ci0gICAgcmV0dXJuICptX2V2ZW50TG9v
cDsKKyAgICAgICAgbV9kb2N1bWVudFRhc2tHcm91cCA9IG1ha2VVbmlxdWU8RXZlbnRMb29wVGFz
a0dyb3VwPigqbV9ldmVudExvb3ApOworICAgIH0KKyAgICByZXR1cm4gKm1fZG9jdW1lbnRUYXNr
R3JvdXA7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnN1c3BlbmRTY2hlZHVsZWRUYXNrcyhSZWFzb25G
b3JTdXNwZW5zaW9uIHJlYXNvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAy
NTI1MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMTIxLDYgKzEyMSw3IEBAIGNsYXNzIERvY3VtZW50U2hhcmVkT2JqZWN0UG9vbDsKIGNsYXNz
IERvY3VtZW50VGltZWxpbmU7CiBjbGFzcyBEb2N1bWVudFR5cGU7CiBjbGFzcyBFZGl0aW5nQmVo
YXZpb3I7CitjbGFzcyBFdmVudExvb3BUYXNrR3JvdXA7CiBjbGFzcyBFeHRlbnNpb25TdHlsZVNo
ZWV0czsKIGNsYXNzIEZsb2F0UXVhZDsKIGNsYXNzIEZsb2F0UmVjdDsKQEAgLTEwNjMsNyArMTA2
NCw3IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcG9zdFRhc2soVGFzayYm
KSBmaW5hbDsgLy8gRXhlY3V0ZXMgdGhlIHRhc2sgb24gY29udGV4dCdzIHRocmVhZCBhc3luY2hy
b25vdXNseS4KIAotICAgIEFic3RyYWN0RXZlbnRMb29wJiBldmVudExvb3AoKSBmaW5hbDsKKyAg
ICBFdmVudExvb3BUYXNrR3JvdXAmIGV2ZW50TG9vcCgpIGZpbmFsOwogCiAgICAgU2NyaXB0ZWRB
bmltYXRpb25Db250cm9sbGVyKiBzY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIoKSB7IHJldHVy
biBtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5nZXQoKTsgfQogICAgIHZvaWQgc3VzcGVu
ZFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlckNhbGxiYWNrcygpOwpAQCAtMjA2NCw2ICsyMDY1
LDcgQEAgcHJpdmF0ZToKICAgICBEb2N1bWVudElkZW50aWZpZXIgbV9pZGVudGlmaWVyOwogCiAg
ICAgUmVmUHRyPFdpbmRvd0V2ZW50TG9vcD4gbV9ldmVudExvb3A7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEV2ZW50TG9vcFRhc2tHcm91cD4gbV9kb2N1bWVudFRhc2tHcm91cDsKIAogI2lmIEVOQUJM
RShTRVJWSUNFX1dPUktFUikKICAgICBSZWZQdHI8U1dDbGllbnRDb25uZWN0aW9uPiBtX3NlcnZp
Y2VXb3JrZXJDb25uZWN0aW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0lkbGVDYWxsYmFj
a0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9JZGxlQ2Fs
bGJhY2tDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjUyNTA2KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0lkbGVDYWxsYmFja0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3
MSw3IEBAIHZvaWQgSWRsZUNhbGxiYWNrQ29udHJvbGxlcjo6cmVtb3ZlSWRsZUMKIAogdm9pZCBJ
ZGxlQ2FsbGJhY2tDb250cm9sbGVyOjpxdWV1ZVRhc2tUb1N0YXJ0SWRsZVBlcmlvZCgpCiB7Ci0g
ICAgbV9kb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6OklkbGVUYXNr
LCAqbV9kb2N1bWVudCwgW3Byb3RlY3RlZERvY3VtZW50ID0gbWFrZVJlZigqbV9kb2N1bWVudCks
IHRoaXNdKCkgeworICAgIG1fZG9jdW1lbnQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291
cmNlOjpJZGxlVGFzaywgW3Byb3RlY3RlZERvY3VtZW50ID0gbWFrZVJlZigqbV9kb2N1bWVudCks
IHRoaXNdKCkgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChwcm90ZWN0ZWREb2N1bWVudC0+aWRs
ZUNhbGxiYWNrQ29udHJvbGxlcigpID09IHRoaXMpOwogICAgICAgICBzdGFydElkbGVQZXJpb2Qo
KTsKICAgICB9KTsKQEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIElkbGVDYWxsYmFja0NvbnRyb2xs
ZXI6OnN0YXJ0SWRsZVBlCiAKIHZvaWQgSWRsZUNhbGxiYWNrQ29udHJvbGxlcjo6cXVldWVUYXNr
VG9JbnZva2VJZGxlQ2FsbGJhY2tzKE1vbm90b25pY1RpbWUgZGVhZGxpbmUpCiB7Ci0gICAgbV9k
b2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6OklkbGVUYXNrLCAqbV9k
b2N1bWVudCwgW3Byb3RlY3RlZERvY3VtZW50ID0gbWFrZVJlZigqbV9kb2N1bWVudCksIGRlYWRs
aW5lLCB0aGlzXSgpIHsKKyAgICBtX2RvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFz
a1NvdXJjZTo6SWRsZVRhc2ssIFtwcm90ZWN0ZWREb2N1bWVudCA9IG1ha2VSZWYoKm1fZG9jdW1l
bnQpLCBkZWFkbGluZSwgdGhpc10oKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHByb3RlY3Rl
ZERvY3VtZW50LT5pZGxlQ2FsbGJhY2tDb250cm9sbGVyKCkgPT0gdGhpcyk7CiAgICAgICAgIGlu
dm9rZUlkbGVDYWxsYmFja3MoZGVhZGxpbmUpOwogICAgIH0pOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCShyZXZpc2lvbiAyNTI1MDYpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Nyw2ICs1Nyw3IEBAIGNsYXNzIEFic3RyYWN0RXZlbnRMb29wOwogY2xhc3MgQ2FjaGVk
U2NyaXB0OwogY2xhc3MgRGF0YWJhc2VDb250ZXh0OwogY2xhc3MgRXZlbnRRdWV1ZTsKK2NsYXNz
IEV2ZW50TG9vcFRhc2tHcm91cDsKIGNsYXNzIEV2ZW50VGFyZ2V0OwogY2xhc3MgTWVzc2FnZVBv
cnQ7CiBjbGFzcyBQdWJsaWNVUkxNYW5hZ2VyOwpAQCAtNjQsNiArNjUsNyBAQCBjbGFzcyBSZWpl
Y3RlZFByb21pc2VUcmFja2VyOwogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogY2xhc3MgU2VjdXJp
dHlPcmlnaW47CiBjbGFzcyBTb2NrZXRQcm92aWRlcjsKK2VudW0gY2xhc3MgVGFza1NvdXJjZSA6
IHVpbnQ4X3Q7CiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiBjbGFzcyBTZXJ2aWNlV29y
a2VyOwpAQCAtODksNyArOTEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzQ29udGV4
dFRocmVhZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNKU0V4
ZWN1dGlvbkZvcmJpZGRlbigpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgQWJzdHJhY3RFdmVu
dExvb3AmIGV2ZW50TG9vcCgpID0gMDsKKyAgICB2aXJ0dWFsIEV2ZW50TG9vcFRhc2tHcm91cCYg
ZXZlbnRMb29wKCkgPSAwOwogCiAgICAgdmlydHVhbCBjb25zdCBVUkwmIHVybCgpIGNvbnN0ID0g
MDsKICAgICB2aXJ0dWFsIFVSTCBjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmIHVybCkgY29uc3Qg
PSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1dpbmRvd0V2ZW50TG9vcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1dpbmRvd0V2ZW50TG9vcC5jcHAJKHJldmlzaW9u
IDI1MjUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9XaW5kb3dFdmVudExvb3AuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OSw2OCArNTksMTA0IEBAIFdpbmRvd0V2ZW50TG9vcDo6fldpbmRvd0V2
ZW50TG9vcCgpCiAgICAgUkVMRUFTRV9BU1NFUlQoZGlkUmVtb3ZlKTsKIH0KIAotdm9pZCBXaW5k
b3dFdmVudExvb3A6OnF1ZXVlVGFzayhUYXNrU291cmNlIHNvdXJjZSwgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCwgVGFza0Z1bmN0aW9uJiYgdGFzaykKK3ZvaWQgQWJzdHJhY3RFdmVu
dExvb3A6OnF1ZXVlVGFzayhzdGQ6OnVuaXF1ZV9wdHI8RXZlbnRMb29wVGFzaz4mJiB0YXNrKQog
ewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKGlzPERvY3VtZW50Pihj
b250ZXh0KSk7CisgICAgQVNTRVJUKHRhc2stPmdyb3VwKCkpOworICAgIEFTU0VSVChpc0NvbnRl
eHRUaHJlYWQoKSk7CiAgICAgc2NoZWR1bGVUb1J1bklmTmVlZGVkKCk7Ci0gICAgbV90YXNrcy5h
cHBlbmQoVGFzayB7IHNvdXJjZSwgV1RGTW92ZSh0YXNrKSwgZG93bmNhc3Q8RG9jdW1lbnQ+KGNv
bnRleHQpLmlkZW50aWZpZXIoKSB9KTsKKyAgICBtX3Rhc2tzLmFwcGVuZChXVEZNb3ZlKHRhc2sp
KTsKIH0KIAotdm9pZCBXaW5kb3dFdmVudExvb3A6OnN1c3BlbmQoRG9jdW1lbnQmKQordm9pZCBB
YnN0cmFjdEV2ZW50TG9vcDo6c3VzcGVuZEdyb3VwKEV2ZW50TG9vcFRhc2tHcm91cCYpCiB7Ci0g
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoaXNDb250ZXh0VGhyZWFkKCkp
OwogfQogCi12b2lkIFdpbmRvd0V2ZW50TG9vcDo6cmVzdW1lKERvY3VtZW50JiBkb2N1bWVudCkK
K3ZvaWQgQWJzdHJhY3RFdmVudExvb3A6OnJlc3VtZUdyb3VwKEV2ZW50TG9vcFRhc2tHcm91cCYg
Z3JvdXApCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fZG9jdW1l
bnRJZGVudGlmaWVyc0ZvclN1c3BlbmRlZFRhc2tzLmNvbnRhaW5zKGRvY3VtZW50LmlkZW50aWZp
ZXIoKSkpCi0gICAgICAgIHJldHVybjsKLSAgICBzY2hlZHVsZVRvUnVuSWZOZWVkZWQoKTsKKyAg
ICBBU1NFUlQoaXNDb250ZXh0VGhyZWFkKCkpOworICAgIGlmIChtX2dyb3Vwc1dpdGhTdXNwZW5l
ZFRhc2tzLmNvbnRhaW5zKGdyb3VwKSkKKyAgICAgICAgc2NoZWR1bGVUb1J1bklmTmVlZGVkKCk7
CiB9CiAKLXZvaWQgV2luZG93RXZlbnRMb29wOjpzdG9wKERvY3VtZW50JiBkb2N1bWVudCkKK3Zv
aWQgQWJzdHJhY3RFdmVudExvb3A6OnN0b3BHcm91cChFdmVudExvb3BUYXNrR3JvdXAmIGdyb3Vw
KQogewotICAgIG1fdGFza3MucmVtb3ZlQWxsTWF0Y2hpbmcoW2lkZW50aWZpZXIgPSBkb2N1bWVu
dC5pZGVudGlmaWVyKCldIChhdXRvJiB0YXNrKSB7Ci0gICAgICAgIHJldHVybiB0YXNrLmRvY3Vt
ZW50SWRlbnRpZmllciA9PSBpZGVudGlmaWVyOworICAgIEFTU0VSVChpc0NvbnRleHRUaHJlYWQo
KSk7CisgICAgbV90YXNrcy5yZW1vdmVBbGxNYXRjaGluZyhbJmdyb3VwXSAoYXV0byYgdGFzaykg
eworICAgICAgICByZXR1cm4gZ3JvdXAubWF0Y2hlc1Rhc2soKnRhc2spOwogICAgIH0pOwogfQog
Ci12b2lkIFdpbmRvd0V2ZW50TG9vcDo6c2NoZWR1bGVUb1J1bklmTmVlZGVkKCkKK3ZvaWQgQWJz
dHJhY3RFdmVudExvb3A6OnNjaGVkdWxlVG9SdW5JZk5lZWRlZCgpCiB7CiAgICAgaWYgKG1faXNT
Y2hlZHVsZWRUb1J1bikKICAgICAgICAgcmV0dXJuOwotCiAgICAgbV9pc1NjaGVkdWxlZFRvUnVu
ID0gdHJ1ZTsKKyAgICBzY2hlZHVsZVRvUnVuKCk7Cit9CisKK3ZvaWQgV2luZG93RXZlbnRMb29w
OjpzY2hlZHVsZVRvUnVuKCkKK3sKICAgICBjYWxsT25NYWluVGhyZWFkKFtldmVudExvb3AgPSBt
YWtlUmVmKCp0aGlzKV0gKCkgewotICAgICAgICBldmVudExvb3AtPm1faXNTY2hlZHVsZWRUb1J1
biA9IGZhbHNlOwogICAgICAgICBldmVudExvb3AtPnJ1bigpOwogICAgIH0pOwogfQogCi12b2lk
IFdpbmRvd0V2ZW50TG9vcDo6cnVuKCkKK2Jvb2wgV2luZG93RXZlbnRMb29wOjppc0NvbnRleHRU
aHJlYWQoKSBjb25zdAogeworICAgIHJldHVybiBpc01haW5UaHJlYWQoKTsKK30KKwordm9pZCBB
YnN0cmFjdEV2ZW50TG9vcDo6cnVuKCkKK3sKKyAgICBtX2lzU2NoZWR1bGVkVG9SdW4gPSBmYWxz
ZTsKICAgICBpZiAobV90YXNrcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZl
Y3RvcjxUYXNrPiB0YXNrcyA9IFdURk1vdmUobV90YXNrcyk7Ci0gICAgbV9kb2N1bWVudElkZW50
aWZpZXJzRm9yU3VzcGVuZGVkVGFza3MuY2xlYXIoKTsKLSAgICBWZWN0b3I8VGFzaz4gcmVtYWlu
aW5nVGFza3M7CisgICAgYXV0byB0YXNrcyA9IHN0ZDo6ZXhjaGFuZ2UobV90YXNrcywgeyB9KTsK
KyAgICBtX2dyb3Vwc1dpdGhTdXNwZW5lZFRhc2tzLmNsZWFyKCk7CisgICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxFdmVudExvb3BUYXNrPj4gcmVtYWluaW5nVGFza3M7CiAgICAgZm9yIChhdXRv
JiB0YXNrIDogdGFza3MpIHsKLSAgICAgICAgYXV0byogZG9jdW1lbnQgPSBEb2N1bWVudDo6YWxs
RG9jdW1lbnRzTWFwKCkuZ2V0KHRhc2suZG9jdW1lbnRJZGVudGlmaWVyKTsKLSAgICAgICAgaWYg
KCFkb2N1bWVudCB8fCBkb2N1bWVudC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN0b3BwZWQoKSkKKyAg
ICAgICAgYXV0byogZ3JvdXAgPSB0YXNrLT5ncm91cCgpOworICAgICAgICBpZiAoIWdyb3VwIHx8
IGdyb3VwLT5pc1N0b3BwZWRQZXJtYW5lbnRseSgpKQogICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGlmIChkb2N1bWVudC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpKSB7Ci0g
ICAgICAgICAgICBtX2RvY3VtZW50SWRlbnRpZmllcnNGb3JTdXNwZW5kZWRUYXNrcy5hZGQodGFz
ay5kb2N1bWVudElkZW50aWZpZXIpOworCisgICAgICAgIGlmIChncm91cC0+aXNTdXNwZW5kZWQo
KSkgeworICAgICAgICAgICAgbV9ncm91cHNXaXRoU3VzcGVuZWRUYXNrcy5hZGQoZ3JvdXApOwog
ICAgICAgICAgICAgcmVtYWluaW5nVGFza3MuYXBwZW5kKFdURk1vdmUodGFzaykpOwogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgdGFzay50YXNrKCk7CisKKyAgICAg
ICAgdGFzay0+ZXhlY3V0ZSgpOwogICAgIH0KICAgICBmb3IgKGF1dG8mIHRhc2sgOiBtX3Rhc2tz
KQogICAgICAgICByZW1haW5pbmdUYXNrcy5hcHBlbmQoV1RGTW92ZSh0YXNrKSk7CiAgICAgbV90
YXNrcyA9IFdURk1vdmUocmVtYWluaW5nVGFza3MpOwogfQogCit2b2lkIEFic3RyYWN0RXZlbnRM
b29wOjpjbGVhckFsbFRhc2tzKCkKK3sKKyAgICBtX3Rhc2tzLmNsZWFyKCk7CisgICAgbV9ncm91
cHNXaXRoU3VzcGVuZWRUYXNrcy5jbGVhcigpOworfQorCitjbGFzcyBFdmVudExvb3BGdW5jdGlv
bkRpc3BhdGNoVGFzayA6IHB1YmxpYyBFdmVudExvb3BUYXNrIHsKK3B1YmxpYzoKKyAgICBFdmVu
dExvb3BGdW5jdGlvbkRpc3BhdGNoVGFzayhUYXNrU291cmNlIHNvdXJjZSwgQWJzdHJhY3RFdmVu
dExvb3A6OlRhc2tGdW5jdGlvbiYmIGZ1bmN0aW9uKQorICAgICAgICA6IEV2ZW50TG9vcFRhc2so
c291cmNlKQorICAgICAgICAsIG1fZnVuY3Rpb24oV1RGTW92ZShmdW5jdGlvbikpCisgICAgewor
ICAgIH0KKworICAgIHZvaWQgZXhlY3V0ZSgpIGZpbmFsIHsgbV9mdW5jdGlvbigpOyB9CisKK3By
aXZhdGU6CisgICAgQWJzdHJhY3RFdmVudExvb3A6OlRhc2tGdW5jdGlvbiBtX2Z1bmN0aW9uOwor
fTsKKwordm9pZCBFdmVudExvb3BUYXNrR3JvdXA6OnF1ZXVlVGFzayhUYXNrU291cmNlIHNvdXJj
ZSwgQWJzdHJhY3RFdmVudExvb3A6OlRhc2tGdW5jdGlvbiYmIGZ1bmN0aW9uKQoreworICAgIHJl
dHVybiBxdWV1ZVRhc2sobWFrZVVuaXF1ZTxFdmVudExvb3BGdW5jdGlvbkRpc3BhdGNoVGFzaz4o
c291cmNlLCBXVEZNb3ZlKGZ1bmN0aW9uKSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vV2luZG93RXZlbnRMb29wLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL1dpbmRvd0V2ZW50TG9vcC5oCShyZXZpc2lvbiAyNTI1MDYp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vV2luZG93RXZlbnRMb29wLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDI5ICs0MSwxMyBAQCBwdWJsaWM6CiAKICAgICB+V2luZG93RXZlbnRMb29wKCk7CiAK
LSAgICB2b2lkIHF1ZXVlVGFzayhUYXNrU291cmNlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Jiwg
VGFza0Z1bmN0aW9uJiYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzdXNwZW5kKERvY3VtZW50Jik7
Ci0gICAgdm9pZCByZXN1bWUoRG9jdW1lbnQmKTsKLSAgICB2b2lkIHN0b3AoRG9jdW1lbnQmKTsK
LQogcHJpdmF0ZToKICAgICBXaW5kb3dFdmVudExvb3AoY29uc3QgUmVnaXN0cmFibGVEb21haW4m
KTsKIAotICAgIHZvaWQgc2NoZWR1bGVUb1J1bklmTmVlZGVkKCk7Ci0gICAgdm9pZCBydW4oKTsK
LQotICAgIHN0cnVjdCBUYXNrIHsKLSAgICAgICAgVGFza1NvdXJjZSBzb3VyY2U7Ci0gICAgICAg
IFRhc2tGdW5jdGlvbiB0YXNrOwotICAgICAgICBEb2N1bWVudElkZW50aWZpZXIgZG9jdW1lbnRJ
ZGVudGlmaWVyOwotICAgIH07CisgICAgdm9pZCBzY2hlZHVsZVRvUnVuKCkgZmluYWw7CisgICAg
Ym9vbCBpc0NvbnRleHRUaHJlYWQoKSBjb25zdCBmaW5hbDsKIAotICAgIC8vIFVzZSBhIGdsb2Jh
bCBxdWV1ZSBpbnN0ZWFkIG9mIG11bHRpcGxlIHRhc2sgcXVldWVzIHNpbmNlIEhUTUw1IHNwZWMg
YWxsb3dzIFVBIHRvIHBpY2sgYXJiaXRyYXJ5IHF1ZXVlLgotICAgIFZlY3RvcjxUYXNrPiBtX3Rh
c2tzOwotICAgIEhhc2hTZXQ8RG9jdW1lbnRJZGVudGlmaWVyPiBtX2RvY3VtZW50SWRlbnRpZmll
cnNGb3JTdXNwZW5kZWRUYXNrczsKICAgICBSZWdpc3RyYWJsZURvbWFpbiBtX2RvbWFpbjsKLSAg
ICBib29sIG1faXNTY2hlZHVsZWRUb1J1biB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAJKHJldmlz
aW9uIDI1MjUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI1NCw3ICsyNTQsNyBAQCB2b2lkIEZpbGVSZWFkZXI6OmVucXVldWVU
YXNrKEZ1bmN0aW9uPHZvCiAgICAgc3RhdGljIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyU2VlZCA9
IDA7CiAgICAgdWludDY0X3QgdGFza0lkZW50aWZpZXIgPSArK3Rhc2tJZGVudGlmaWVyU2VlZDsK
ICAgICBtX3BlbmRpbmdUYXNrcy5hZGQodGFza0lkZW50aWZpZXIsIFdURk1vdmUodGFzaykpOwot
ICAgIGNvbnRleHQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpGaWxlUmVhZGlu
ZywgKmNvbnRleHQsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHBlbmRp
bmdBY3Rpdml0eSA9IG1ha2VQZW5kaW5nQWN0aXZpdHkoKnRoaXMpLCB0YXNrSWRlbnRpZmllcl0g
eworICAgIGNvbnRleHQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpGaWxlUmVh
ZGluZywgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcGVuZGluZ0FjdGl2
aXR5ID0gbWFrZVBlbmRpbmdBY3Rpdml0eSgqdGhpcyksIHRhc2tJZGVudGlmaWVyXSB7CiAgICAg
ICAgIGF1dG8gdGFzayA9IG1fcGVuZGluZ1Rhc2tzLnRha2UodGFza0lkZW50aWZpZXIpOwogICAg
ICAgICBpZiAodGFzaykKICAgICAgICAgICAgIHRhc2soKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5jcHAJKHJldmlzaW9uIDI1MjUwNikKKysrIFNvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY4NCw3ICs0Njg0LDcgQEAg
RXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpxdWV1ZVRhc2soUwogICAgIGVsc2UKICAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiAKLSAgICBjb250ZXh0
LmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhzb3VyY2UsIGNvbnRleHQsIFtjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spXSgpIHsKKyAgICBjb250ZXh0LmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhzb3Vy
Y2UsIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSgpIHsKICAgICAgICAgY2FsbGJhY2st
PmhhbmRsZUV2ZW50KCk7CiAgICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyRXZlbnRMb29wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJz
L1dvcmtlckV2ZW50TG9vcC5jcHAJKHJldmlzaW9uIDI1MjUwNikKKysrIFNvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyRXZlbnRMb29wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNjMgKzQ0
LDIxIEBAIFJlZjxXb3JrZXJFdmVudExvb3A+IFdvcmtlckV2ZW50TG9vcDo6Y3IKICNlbmRpZgog
CiBXb3JrZXJFdmVudExvb3A6OldvcmtlckV2ZW50TG9vcChTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBjb250ZXh0KQotICAgIDogQWN0aXZlRE9NT2JqZWN0KCZjb250ZXh0KQorICAgIDogQ29udGV4
dERlc3RydWN0aW9uT2JzZXJ2ZXIoJmNvbnRleHQpCiB7Ci0gICAgc3VzcGVuZElmTmVlZGVkKCk7
CiB9CiAKLXZvaWQgV29ya2VyRXZlbnRMb29wOjpxdWV1ZVRhc2soVGFza1NvdXJjZSBzb3VyY2Us
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFRhc2tGdW5jdGlvbiYmIGZ1bmN0aW9u
KQordm9pZCBXb3JrZXJFdmVudExvb3A6OnNjaGVkdWxlVG9SdW4oKQogewotICAgIGlmICghc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIEFTU0VSVF9VTlVT
RUQoY29udGV4dCwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpID09ICZjb250ZXh0KTsKLSAgICBt
X3Rhc2tzLmFwcGVuZCh7IHNvdXJjZSwgV1RGTW92ZShmdW5jdGlvbikgfSk7Ci0gICAgc2NoZWR1
bGVUb1J1bklmTmVlZGVkKCk7Ci19Ci0KLWNvbnN0IGNoYXIqIFdvcmtlckV2ZW50TG9vcDo6YWN0
aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICJXb3JrZXJFdmVudExvb3Ai
OwotfQotCi12b2lkIFdvcmtlckV2ZW50TG9vcDo6c3VzcGVuZChSZWFzb25Gb3JTdXNwZW5zaW9u
KQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIFdvcmtlckV2ZW50TG9v
cDo6cmVzdW1lKCkKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBXb3Jr
ZXJFdmVudExvb3A6OnN0b3AoKQotewotICAgIG1fdGFza3MuY2xlYXIoKTsKLX0KLQotdm9pZCBX
b3JrZXJFdmVudExvb3A6OnNjaGVkdWxlVG9SdW5JZk5lZWRlZCgpCi17Ci0gICAgYXV0byogY29u
dGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBBU1NFUlQoY29udGV4dCk7Ci0g
ICAgaWYgKG1faXNTY2hlZHVsZWRUb1J1biB8fCBtX3Rhc2tzLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9pc1NjaGVkdWxlZFRvUnVuID0gdHJ1ZTsKLSAgICBjb250ZXh0LT5w
b3N0VGFzayhbZXZlbnRMb29wID0gbWFrZVJlZigqdGhpcyldIChTY3JpcHRFeGVjdXRpb25Db250
ZXh0JikgewotICAgICAgICBldmVudExvb3AtPm1faXNTY2hlZHVsZWRUb1J1biA9IGZhbHNlOwor
ICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+cG9zdFRhc2soW2V2ZW50TG9vcCA9IG1ha2VSZWYoKnRoaXMpXSAoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYpIHsKICAgICAgICAgZXZlbnRMb29wLT5ydW4oKTsKICAgICB9KTsK
IH0KIAotdm9pZCBXb3JrZXJFdmVudExvb3A6OnJ1bigpCitib29sIFdvcmtlckV2ZW50TG9vcDo6
aXNDb250ZXh0VGhyZWFkKCkgY29uc3QKIHsKLSAgICBhdXRvKiBjb250ZXh0ID0gc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCB8fCBjb250ZXh0LT5hY3RpdmVET01P
YmplY3RzQXJlU3RvcHBlZCgpIHx8IGNvbnRleHQtPmFjdGl2ZURPTU9iamVjdHNBcmVTdXNwZW5k
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gdGFza3MgPSBzdGQ6OmV4Y2hhbmdlKG1f
dGFza3MsIFZlY3RvcjxUYXNrPigpKTsKLSAgICBmb3IgKGF1dG8mIHRhc2sgOiB0YXNrcykKLSAg
ICAgICAgdGFzay50YXNrKCk7CisgICAgcmV0dXJuIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+
aXNDb250ZXh0VGhyZWFkKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRMb29wLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudExvb3AuaAkocmV2aXNpb24gMjUyNTA2KQor
KysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudExvb3AuaAkod29ya2luZyBjb3B5
KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBXb3JrZXJHbG9i
YWxTY29wZTsKIGNsYXNzIFdvcmtsZXRHbG9iYWxTY29wZTsKIAotY2xhc3MgV29ya2VyRXZlbnRM
b29wIGZpbmFsIDogcHVibGljIEFic3RyYWN0RXZlbnRMb29wLCBwcml2YXRlIEFjdGl2ZURPTU9i
amVjdCB7CitjbGFzcyBXb3JrZXJFdmVudExvb3AgZmluYWwgOiBwdWJsaWMgQWJzdHJhY3RFdmVu
dExvb3AsIHByaXZhdGUgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIgewogcHVibGljOgogICAg
IC8vIEV4cGxpY2l0bHkgdGFrZSBXb3JrZXJHbG9iYWxTY29wZSBhbmQgV29ya2xldEdsb2JhbFNj
b3BlIGZvciBkb2N1bWVudGF0aW9uIHB1cnBvc2VzLgogICAgIHN0YXRpYyBSZWY8V29ya2VyRXZl
bnRMb29wPiBjcmVhdGUoV29ya2VyR2xvYmFsU2NvcGUmKTsKQEAgLTQyLDI3ICs0MiwxMSBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIFJlZjxXb3JrZXJFdmVudExvb3A+IGNyZWF0ZShXb3JrbGV0R2xv
YmFsU2NvcGUmKTsKICNlbmRpZgogCi0gICAgdm9pZCBxdWV1ZVRhc2soVGFza1NvdXJjZSwgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYsIFRhc2tGdW5jdGlvbiYmKSBvdmVycmlkZTsKLQogcHJpdmF0
ZToKICAgICBleHBsaWNpdCBXb3JrZXJFdmVudExvb3AoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYp
OwogCi0gICAgdm9pZCBzY2hlZHVsZVRvUnVuSWZOZWVkZWQoKTsKLSAgICB2b2lkIHJ1bigpOwot
Ci0gICAgLy8gQWN0aXZlRE9NT2JqZWN0OwotICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVj
dE5hbWUoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHN1c3BlbmQoUmVhc29uRm9yU3VzcGVu
c2lvbikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXN1bWUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0
b3AoKSBvdmVycmlkZTsKLQotICAgIHN0cnVjdCBUYXNrIHsKLSAgICAgICAgVGFza1NvdXJjZSBz
b3VyY2U7Ci0gICAgICAgIFRhc2tGdW5jdGlvbiB0YXNrOwotICAgIH07Ci0KLSAgICBWZWN0b3I8
VGFzaz4gbV90YXNrczsKLSAgICBib29sIG1faXNTY2hlZHVsZWRUb1J1biB7IGZhbHNlIH07Cisg
ICAgdm9pZCBzY2hlZHVsZVRvUnVuKCkgZmluYWw7CisgICAgYm9vbCBpc0NvbnRleHRUaHJlYWQo
KSBjb25zdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCShyZXZpc2lvbiAyNTI1MDYpCisr
KyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA1LDEyICsxMDUsMTQgQEAgV29ya2VyR2xvYmFsU2NvcGU6On5Xb3JrZXJHbG9i
YWxTY29wZSgpCiAgICAgdGhyZWFkKCkud29ya2VyUmVwb3J0aW5nUHJveHkoKS53b3JrZXJHbG9i
YWxTY29wZURlc3Ryb3llZCgpOwogfQogCi1BYnN0cmFjdEV2ZW50TG9vcCYgV29ya2VyR2xvYmFs
U2NvcGU6OmV2ZW50TG9vcCgpCitFdmVudExvb3BUYXNrR3JvdXAmIFdvcmtlckdsb2JhbFNjb3Bl
OjpldmVudExvb3AoKQogewogICAgIEFTU0VSVChpc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgaWYg
KCFtX2V2ZW50TG9vcCkKKyAgICBpZiAoVU5MSUtFTFkoIW1fZGVmYXVsdFRhc2tHcm91cCkpIHsK
ICAgICAgICAgbV9ldmVudExvb3AgPSBXb3JrZXJFdmVudExvb3A6OmNyZWF0ZSgqdGhpcyk7Ci0g
ICAgcmV0dXJuICptX2V2ZW50TG9vcDsKKyAgICAgICAgbV9kZWZhdWx0VGFza0dyb3VwID0gbWFr
ZVVuaXF1ZTxFdmVudExvb3BUYXNrR3JvdXA+KCptX2V2ZW50TG9vcCk7CisgICAgfQorICAgIHJl
dHVybiAqbV9kZWZhdWx0VGFza0dyb3VwOwogfQogCiBTdHJpbmcgV29ya2VyR2xvYmFsU2NvcGU6
Om9yaWdpbigpIGNvbnN0CkBAIC0xMjUsNiArMTI3LDggQEAgdm9pZCBXb3JrZXJHbG9iYWxTY29w
ZTo6cHJlcGFyZUZvclRlcm1pbgogICAgIHN0b3BJbmRleGVkRGF0YWJhc2UoKTsKICNlbmRpZgog
CisgICAgaWYgKG1fZGVmYXVsdFRhc2tHcm91cCkKKyAgICAgICAgbV9kZWZhdWx0VGFza0dyb3Vw
LT5zdG9wQW5kRGlzY2FyZEFsbFRhc2tzKCk7CiAgICAgc3RvcEFjdGl2ZURPTU9iamVjdHMoKTsK
IAogICAgIGlmIChtX2NhY2hlU3RvcmFnZUNvbm5lY3Rpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5oCShyZXZpc2lvbiAyNTI1MDYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDkgKzQyLDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBBYnN0cmFjdEV2
ZW50TG9vcDsKIGNsYXNzIENvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVyczsKIGNs
YXNzIENyeXB0bzsKK2NsYXNzIEV2ZW50TG9vcFRhc2tHcm91cDsKIGNsYXNzIE1pY3JvdGFza1F1
ZXVlOwogY2xhc3MgUGVyZm9ybWFuY2U7CiBjbGFzcyBTY2hlZHVsZWRBY3Rpb247CkBAIC02Nyw3
ICs2Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNEZWRpY2F0ZWRXb3JrZXJHbG9i
YWxTY29wZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU2Vy
dmljZVdvcmtlckdsb2JhbFNjb3BlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIEFi
c3RyYWN0RXZlbnRMb29wJiBldmVudExvb3AoKSBmaW5hbDsKKyAgICBFdmVudExvb3BUYXNrR3Jv
dXAmIGV2ZW50TG9vcCgpIGZpbmFsOwogCiAgICAgY29uc3QgVVJMJiB1cmwoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX3VybDsgfQogICAgIFN0cmluZyBvcmlnaW4oKSBjb25zdCBmaW5hbDsKQEAg
LTE5OCw2ICsxOTgsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zaG91bGRCeXBhc3NNYWluV29y
bGRDb250ZW50U2VjdXJpdHlQb2xpY3k7CiAKICAgICBSZWZQdHI8V29ya2VyRXZlbnRMb29wPiBt
X2V2ZW50TG9vcDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXZlbnRMb29wVGFza0dyb3VwPiBtX2Rl
ZmF1bHRUYXNrR3JvdXA7CiAKICAgICBtdXRhYmxlIFdvcmtlckV2ZW50UXVldWUgbV9ldmVudFF1
ZXVlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrbGV0cy9Xb3JrbGV0R2xvYmFsU2NvcGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtsZXRzL1dvcmtsZXRHbG9iYWxT
Y29wZS5jcHAJKHJldmlzaW9uIDI1MjUwNikKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtsZXRzL1dv
cmtsZXRHbG9iYWxTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDggQEAgdm9p
ZCBXb3JrbGV0R2xvYmFsU2NvcGU6OnByZXBhcmVGb3JEZXN0cgogewogICAgIGlmICghbV9zY3Jp
cHQpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9kZWZhdWx0VGFza0dyb3VwKQorICAgICAg
ICBtX2RlZmF1bHRUYXNrR3JvdXAtPnN0b3BBbmREaXNjYXJkQWxsVGFza3MoKTsKICAgICBzdG9w
QWN0aXZlRE9NT2JqZWN0cygpOwogICAgIHJlbW92ZVJlamVjdGVkUHJvbWlzZVRyYWNrZXIoKTsK
ICAgICByZW1vdmVBbGxFdmVudExpc3RlbmVycygpOwpAQCAtOTAsMTEgKzkyLDEzIEBAIGF1dG8g
V29ya2xldEdsb2JhbFNjb3BlOjphbGxXb3JrbGV0R2xvYmEKICAgICByZXR1cm4gc2NvcGVzOwog
fQogCi1BYnN0cmFjdEV2ZW50TG9vcCYgV29ya2xldEdsb2JhbFNjb3BlOjpldmVudExvb3AoKQor
RXZlbnRMb29wVGFza0dyb3VwJiBXb3JrbGV0R2xvYmFsU2NvcGU6OmV2ZW50TG9vcCgpCiB7Ci0g
ICAgaWYgKCFtX2V2ZW50TG9vcCkKKyAgICBpZiAoVU5MSUtFTFkoIW1fZGVmYXVsdFRhc2tHcm91
cCkpIHsKICAgICAgICAgbV9ldmVudExvb3AgPSBXb3JrZXJFdmVudExvb3A6OmNyZWF0ZSgqdGhp
cyk7Ci0gICAgcmV0dXJuICptX2V2ZW50TG9vcDsKKyAgICAgICAgbV9kZWZhdWx0VGFza0dyb3Vw
ID0gbWFrZVVuaXF1ZTxFdmVudExvb3BUYXNrR3JvdXA+KCptX2V2ZW50TG9vcCk7CisgICAgfQor
ICAgIHJldHVybiAqbV9kZWZhdWx0VGFza0dyb3VwOwogfQogCiBTdHJpbmcgV29ya2xldEdsb2Jh
bFNjb3BlOjpvcmlnaW4oKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2xldHMvV29y
a2xldEdsb2JhbFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2xldHMv
V29ya2xldEdsb2JhbFNjb3BlLmgJKHJldmlzaW9uIDI1MjUwNikKKysrIFNvdXJjZS9XZWJDb3Jl
L3dvcmtsZXRzL1dvcmtsZXRHbG9iYWxTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0
Myw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQWJzdHJhY3RFdmVudExvb3A7
CitjbGFzcyBFdmVudExvb3BUYXNrR3JvdXA7CiBjbGFzcyBXb3JrZXJFdmVudExvb3A7CiBjbGFz
cyBXb3JrbGV0U2NyaXB0Q29udHJvbGxlcjsKIApAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIGJvb2wgaXNQYWludFdvcmtsZXRHbG9iYWxTY29wZSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAKLSAgICBBYnN0cmFjdEV2ZW50TG9vcCYgZXZlbnRMb29wKCkgZmluYWw7
CisgICAgRXZlbnRMb29wVGFza0dyb3VwJiBldmVudExvb3AoKSBmaW5hbDsKIAogICAgIGNvbnN0
IFVSTCYgdXJsKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jb2RlLnVybCgpOyB9CiAgICAgU3Ry
aW5nIG9yaWdpbigpIGNvbnN0IGZpbmFsOwpAQCAtMTM1LDYgKzEzNSw3IEBAIHByaXZhdGU6CiAg
ICAgUmVmPFNlY3VyaXR5T3JpZ2luPiBtX3RvcE9yaWdpbjsKIAogICAgIFJlZlB0cjxXb3JrZXJF
dmVudExvb3A+IG1fZXZlbnRMb29wOworICAgIHN0ZDo6dW5pcXVlX3B0cjxFdmVudExvb3BUYXNr
R3JvdXA+IG1fZGVmYXVsdFRhc2tHcm91cDsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBp
bXBsZW1lbnRlZCBwcm9wZXJseSwgaXQganVzdCBzYXRpc2ZpZXMgdGhlIGNvbXBpbGVyLgogICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTExMzYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383692</attachid>
            <date>2019-11-15 23:35:47 -0800</date>
            <delta_ts>2019-11-18 13:50:47 -0800</delta_ts>
            <desc>Fixed the tests</desc>
            <filename>bug-204263-20191115233546.patch</filename>
            <type>text/plain</type>
            <size>49892</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MjUxMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNyBAQAorMjAxOS0xMS0xNSAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBTaGFyZSBtb3JlIGNvZGUgYmV0
d2VlbiBXaW5kb3dFdmVudExvb3AgYW5kIFdvcmtlckV2ZW50TG9vcCBieSBpbnRyb2R1Y2luZyBF
dmVudExvb3BUYXNrR3JvdXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwNDI2MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggYWJzdHJhY3RzIHRoZSBsb2dpYyBpbiBXaW5kb3dFdmVudExv
b3AgdG8gZGVhbCB3aXRoIGEgc2V0IG9mIHRhc2tzIGFzc29jaWF0ZWQgd2l0aAorICAgICAgICBh
IHBhcnRpY3VsYXIgZG9jdW1lbnRzIGFsbCBzdXNwZW5kaW5nLCByZXN1bWluZywgb3Igc3RvcHBp
bmcgYXQgdGhlIHNhbWUgdGltZSB1c2luZyBhIG5ldyBhYnN0cmFjdGlvbgorICAgICAgICBjYWxs
ZWQgRXZlbnRMb29wVGFza0dyb3VwIGluIG9yZGVyIHRvIGdyb3VwIHRhc2tzIGZvciBtZWRpYSBj
b2RlIGFuZCBlbHNld2hlcmUuCisKKyAgICAgICAgRWFjaCB0YXNrIGlzIG5vdyByZXByZXNlbnRl
ZCBhcyBhbiBpbnN0YW5jZSBvZiBhIGNvbmNyZXRlIHN1YmNsYXNzIG9mIEV2ZW50TG9vcFRhc2ss
IHdoaWNoIGhhcworICAgICAgICBhIHB1cmUgdmlydHVhbCBleGVjdXRlKCkgbWVtYmVyIGZ1bmN0
aW9uLiBJdHMgcHJpbWFyeSBwdXJwb3NlIGlzIHRvIGtub3cgRXZlbnRMb29wVGFza0dyb3VwIHRv
IHdoaWNoCisgICAgICAgIGVhY2ggdGFzayBiZWxvbmdzLiBPbmUgb2Ygc3ViY2xhc3NzLCBFdmVu
dExvb3BGdW5jdGlvbkRpc3BhdGNoVGFzaywgaXMgdXNlZCB0byBzdG9yZSBhIGNhbGxiYWNrIGZ1
bmN0aW9uCisgICAgICAgIGFuZCBhbm90aGVyIHN1YmNsYXNzLCBBY3RpdmVET01PYmplY3RFdmVu
dERpc3BhdGNoVGFzaywgaXMgdXNlZCB0byBkaXNwYXRjaCBhbiBhc3luYyBldmVudC4KKworICAg
ICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0J3MgZXZlbnRMb29wKCkgbWV0aG9kIG5vdyByZXR1
cm5zIEV2ZW50TG9vcFRhc2tHcm91cC4gQmVjYXVzZSB0aGlzIGdyb3VwIGlzCisgICAgICAgIHNw
ZWNpZmljIHRvIGEgZ2l2ZW4gU2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgd2Ugbm8gbG9uZ2VyIGhh
dmUgdG8gcGFzcyB0aGUgU2NyaXB0RXhlY3V0aW9uQ29udGV4dAorICAgICAgICBpbiBlYWNoIGNh
bGwgdG8gcXVldWVUYXNrIGV2ZXJ5d2hlcmUgaW4gb3VyIGNvZGViYXNlLgorCisgICAgICAgIEZv
ciBub3csIEkga2VwdCBhbGwgdGhlIGNvZGUgaW4gV2luZG93RXZlbnRMb29wLmNwcCB0byBtYWtl
IHRoZSBwYXRjaCByZXZpZXdhYmxlLiBNeSBwbGFuIGlzIHRvIGNyZWF0ZQorICAgICAgICBhIG5l
dyBjcHAgZmlsZSAoZS5nLiBBYnN0cmFjdEV2ZW50TG9vcC5jcHApIGFuZCBtb3ZlIG1vc3Qgb2Yg
Y29kZSB0aGVyZSBpbnN0ZWFkIGFzIGEgZm9sbG93IHVwLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cyBzaW5jZSB0aGVyZSBzaG91bGQgYmUgbm8gb2JzZXJ2YWJsZSBiZWhhdmlvciBjaGFuZ2UuCisK
KyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5cy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYUtleXM6OnNldFNlcnZlckNlcnRpZmljYXRlKToKKyAgICAgICAgKiBN
b2R1bGVzL2VudHJpZXNhcGkvRmlsZVN5c3RlbURpcmVjdG9yeUVudHJ5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpbGVTeXN0ZW1EaXJlY3RvcnlFbnRyeTo6Z2V0RW50cnkpOgorICAgICAgICAq
IE1vZHVsZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRGlyZWN0b3J5UmVhZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbGVTeXN0ZW1EaXJlY3RvcnlSZWFkZXI6OnJlYWRFbnRyaWVzKToKKyAg
ICAgICAgKiBNb2R1bGVzL2VudHJpZXNhcGkvRmlsZVN5c3RlbUVudHJ5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpbGVTeXN0ZW1FbnRyeTo6Z2V0UGFyZW50KToKKyAgICAgICAgKiBNb2R1bGVz
L2VudHJpZXNhcGkvRmlsZVN5c3RlbUZpbGVFbnRyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
aWxlU3lzdGVtRmlsZUVudHJ5OjpmaWxlKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhcmVjb3Jk
ZXIvTWVkaWFSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVJlY29yZGVyOjpz
Y2hlZHVsZURlZmVycmVkVGFzayk6CisgICAgICAgICogTW9kdWxlcy9ub3RpZmljYXRpb25zL05v
dGlmaWNhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb246OnF1ZXVlVGFz
ayk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZTo6cnVuVHJhbnNhY3Rpb24pOgorICAgICAgICAqIE1vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlTWFuYWdlcjo6b3BlbkRhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNl
L1NRTFRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpj
YWxsRXJyb3JDYWxsYmFja0R1ZVRvSW50ZXJydXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNR
TFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyU3VjY2Vzc0NhbGxiYWNrKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTVByb21pc2VEZWZlcnJlZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEZWZlcnJlZFByb21pc2U6OmNhbGxGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpE
ZWZlcnJlZFByb21pc2U6OndoZW5TZXR0bGVkKToKKyAgICAgICAgKiBkb20vQWJzdHJhY3RFdmVu
dExvb3AuaDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TG9vcFRhc2spOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50TG9vcFRhc2s6OnRhc2tTb3VyY2UpOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50TG9vcFRhc2s6Omdyb3VwIGNvbnN0KTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpFdmVudExvb3BUYXNrOjpFdmVudExvb3BUYXNrKTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpFdmVudExvb3BUYXNrR3JvdXApOiBBZGRlZC4gVGhpcyBjbGFzcyByZXByZXNlbnRz
IGEgZ3JvdXAgb2YgdGFza3MuIEZvciBub3csIGVhY2ggZ3JvdXAgaXMKKyAgICAgICAgYSBkaXN0
aW5jdCBTY3JpcHRFeGVjdXRpb25Db250ZXh0LgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29w
VGFza0dyb3VwOjptYXRjaGVzVGFzayBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRMb29wVGFza0dyb3VwOjpzdGFydFJ1bm5pbmcpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50TG9vcFRhc2tHcm91cDo6c3RvcEFuZERpc2NhcmRBbGxUYXNrcyk6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29wVGFza0dyb3VwOjpzdXNwZW5kKTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpFdmVudExvb3BUYXNrR3JvdXA6OnJlc3VtZSk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRMb29wVGFza0dyb3VwOjppc1N0b3BwZWRQZXJtYW5lbnRseSk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29wVGFza0dyb3VwOjppc1N1c3BlbmRl
ZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29wVGFza0dyb3VwOjpoYXNTY2hl
ZHVsZWRUYXNrcyBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29wVGFz
a0dyb3VwOjpxdWV1ZVRhc2spOiBBZGRlZC4KKyAgICAgICAgKiBkb20vQWN0aXZlRE9NT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjdGl2ZURPTU9iamVjdDo6cXVldWVUYXNrSW5FdmVu
dExvb3ApOgorICAgICAgICAoV2ViQ29yZTo6QWN0aXZlRE9NT2JqZWN0RXZlbnREaXNwYXRjaFRh
c2spOiBBZGRlZDsgQSBzdWJjbGFzcyBvZiBFdmVudExvb3BUYXNrIHRvIGRpc3BhdGNoIGFuIGFz
eW5jIGV2ZW50LgorICAgICAgICAoV2ViQ29yZTo6QWN0aXZlRE9NT2JqZWN0RXZlbnREaXNwYXRj
aFRhc2s6OkFjdGl2ZURPTU9iamVjdEV2ZW50RGlzcGF0Y2hUYXNrKTogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpBY3RpdmVET01PYmplY3RFdmVudERpc3BhdGNoVGFzazo6fkFjdGl2ZURPTU9i
amVjdEV2ZW50RGlzcGF0Y2hUYXNrKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpBY3RpdmVE
T01PYmplY3Q6OnF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudEludGVybmFsKTogQWRkZWQuCisgICAg
ICAgICogZG9tL0FjdGl2ZURPTU9iamVjdC5oOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnN0b3BBY3RpdmVET01PYmplY3RzKToKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpldmVudExvb3ApOiBDcmVhdGVzIEV2ZW50TG9vcFRhc2tHcm91
cCBmb3IgdGhpcyBkb2N1bWVudC4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAg
KiBkb20vSWRsZUNhbGxiYWNrQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJZGxl
Q2FsbGJhY2tDb250cm9sbGVyOjpxdWV1ZVRhc2tUb1N0YXJ0SWRsZVBlcmlvZCk6CisgICAgICAg
IChXZWJDb3JlOjpJZGxlQ2FsbGJhY2tDb250cm9sbGVyOjpxdWV1ZVRhc2tUb0ludm9rZUlkbGVD
YWxsYmFja3MpOgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0Lmg6CisgICAg
ICAgICogZG9tL1dpbmRvd0V2ZW50TG9vcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFj
dEV2ZW50TG9vcDo6cXVldWVUYXNrKTogVGhlIGltcGxlbWVudGF0aW9uIG1vdmVkIGZyb20gV2lu
ZG93RXZlbnRMb29wIHRvIEFic3RyYWN0RXZlbnRMb29wLgorICAgICAgICAoV2ViQ29yZTo6QWJz
dHJhY3RFdmVudExvb3A6OnN1c3BlbmRHcm91cCk6IERpdHRvLiBBbHNvIHJlbmFtZWQgZnJvbSBz
dXNwZW5kLgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3RFdmVudExvb3A6OnJlc3VtZUdyb3Vw
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdEV2ZW50TG9vcDo6c3RvcEdyb3Vw
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dFdmVudExvb3A6OnNjaGVkdWxlVG9S
dW4pOiBSZW5hbWVkIGZyb20gV2luZG93RXZlbnRMb29wOjpzY2hlZHVsZVRvUnVuSWZOZWVkZWQu
CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdEV2ZW50TG9vcDo6c2NoZWR1bGVUb1J1bklmTmVl
ZGVkKTogRXh0cmFjdGVkIGZyb20gV2luZG93RXZlbnRMb29wOjpzY2hlZHVsZVRvUnVuSWZOZWVk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dFdmVudExvb3A6OmlzQ29udGV4dFRocmVhZCBj
b25zdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3RFdmVudExvb3A6OnJ1bik6
IFRoZSBpbXBsZW1lbnRhdGlvbiBtb3ZlZCBmcm9tIFdpbmRvd0V2ZW50TG9vcCB0byBBYnN0cmFj
dEV2ZW50TG9vcC4KKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RXZlbnRMb29wOjpjbGVhckFs
bFRhc2tzKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFdmVudExvb3BGdW5jdGlvbkRpc3Bh
dGNoVGFzayk6IEFkZGVkOyBBIHN1YmNsYXNzIG9mIEV2ZW50TG9vcFRhc2sgdG8gY2FsbCBhIGZ1
bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29wRnVuY3Rpb25EaXNwYXRjaFRhc2s6
OkV2ZW50TG9vcEZ1bmN0aW9uRGlzcGF0Y2hUYXNrKTogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpFdmVudExvb3BUYXNrR3JvdXA6OnF1ZXVlVGFzayk6IEFkZGVkLgorICAgICAgICAqIGRvbS9X
aW5kb3dFdmVudExvb3AuaDoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVSZWFkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6ZW5xdWV1ZVRhc2spOgorICAgICAgICAqIHRlc3Rp
bmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cXVldWVUYXNr
KToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckV2ZW50TG9vcC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJFdmVudExvb3A6OldvcmtlckV2ZW50TG9vcCk6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJFdmVudExvb3A6OnF1ZXVlVGFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJFdmVudExvb3A6OmFjdGl2ZURPTU9iamVjdE5hbWUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyRXZlbnRMb29wOjpzdXNwZW5kKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlckV2ZW50TG9vcDo6cmVzdW1lKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlckV2ZW50TG9vcDo6c3RvcCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpXb3JrZXJFdmVudExvb3A6OnNjaGVkdWxlVG9SdW4pOiBFeHRyYWN0ZWQgZnJvbSBz
Y2hlZHVsZVRvUnVuSWZOZWVkZWQuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJFdmVudExvb3A6
OnNjaGVkdWxlVG9SdW5JZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJFdmVudExvb3A6OnJ1bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJFdmVu
dExvb3A6OmlzQ29udGV4dFRocmVhZCBjb25zdCk6IEFkZGVkLgorICAgICAgICAqIHdvcmtlcnMv
V29ya2VyRXZlbnRMb29wLmg6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJFdmVudExvb3ApOiBU
aGlzIGNsYXNzIGlzIG5vIGxvbmdlciBhbiBhY3RpdmUgRE9NIG9iamVjdC4gV29ya2VyR2xvYmFs
U2NvcGUgYW5kIFdvcmtlckdsb2JhbFNjb3BlCisgICAgICAgIG1hbnVhbGx5IHN0b3AgdGhlIHRh
c2sgZ3JvdXAgYXNzb2NpYXRlZCB3aXRoIGl0LgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyR2xv
YmFsU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyR2xvYmFsU2NvcGU6OmV2ZW50
TG9vcCk6IENyZWF0ZSB0aGUgZGVmYXVsdCB0YXNrIGdyb3VwIGZvciB0aGlzIHNjcmlwdCBleGVj
dXRpb24gY29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlckdsb2JhbFNjb3BlOjpwcmVw
YXJlRm9yVGVybWluYXRpb24pOiBTdG9wIHRoZSBkZWZhdWx0IHRhc2sgZ3JvdXAuCisgICAgICAg
ICogd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5oOgorICAgICAgICAqIHdvcmtsZXRzL1dvcmts
ZXRHbG9iYWxTY29wZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrbGV0R2xvYmFsU2NvcGU6
OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6IFNpbWlsYXIgdG8gV29ya2VyR2xvYmFsU2NvcGU6OnBy
ZXBhcmVGb3JUZXJtaW5hdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OldvcmtsZXRHbG9iYWxTY29w
ZTo6ZXZlbnRMb29wKTogU2ltaWxhciB0byBXb3JrZXJHbG9iYWxTY29wZTo6ZXZlbnRMb29wLgor
ICAgICAgICAqIHdvcmtsZXRzL1dvcmtsZXRHbG9iYWxTY29wZS5oOgorCiAyMDE5LTExLTE1ICBK
ZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIENSQVNIIGluIFNvdXJj
ZUJ1ZmZlcjo6cmVtb3ZlQ29kZWRGcmFtZXMoKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlzLmNwcAkocmV2aXNpb24gMjUyNTA2
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBNZWRpYUtleXM6OnNldFNl
cnZlckNlcnRpZmljYXRlKFNjcgogICAgIC8vIDQuIExldCBwcm9taXNlIGJlIGEgbmV3IHByb21p
c2UuCiAgICAgLy8gNS4gUnVuIHRoZSBmb2xsb3dpbmcgc3RlcHMgaW4gcGFyYWxsZWw6CiAKLSAg
ICBjb250ZXh0LmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCBj
b250ZXh0LCBbdGhpcywgY2VydGlmaWNhdGUgPSBXVEZNb3ZlKGNlcnRpZmljYXRlKSwgcHJvbWlz
ZSA9IFdURk1vdmUocHJvbWlzZSldICgpIG11dGFibGUgeworICAgIGNvbnRleHQuZXZlbnRMb29w
KCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIFt0aGlzLCBjZXJ0aWZpY2F0ZSA9
IFdURk1vdmUoY2VydGlmaWNhdGUpLCBwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKV0gKCkgbXV0
YWJsZSB7CiAgICAgICAgIC8vIDUuMS4gVXNlIHRoaXMgb2JqZWN0J3MgY2RtIGluc3RhbmNlIHRv
IHByb2Nlc3MgY2VydGlmaWNhdGUuCiAgICAgICAgIGlmIChtX2luc3RhbmNlLT5zZXRTZXJ2ZXJD
ZXJ0aWZpY2F0ZShXVEZNb3ZlKGNlcnRpZmljYXRlKSkgPT0gQ0RNSW5zdGFuY2U6OkZhaWxlZCkg
ewogICAgICAgICAgICAgLy8gNS4yLiBJZiB0aGUgcHJlY2VkaW5nIHN0ZXAgZmFpbGVkLCByZXNv
bHZlIHByb21pc2Ugd2l0aCBhIG5ldyBET01FeGNlcHRpb24gd2hvc2UgbmFtZSBpcyB0aGUgYXBw
cm9wcmlhdGUgZXJyb3IgbmFtZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW50cmll
c2FwaS9GaWxlU3lzdGVtRGlyZWN0b3J5RW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRGlyZWN0b3J5RW50cnkuY3BwCShy
ZXZpc2lvbiAyNTI1MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VudHJpZXNhcGkvRmls
ZVN5c3RlbURpcmVjdG9yeUVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBA
QCB2b2lkIEZpbGVTeXN0ZW1EaXJlY3RvcnlFbnRyeTo6Z2V0RW50cnkoCiAgICAgICAgIGF1dG8q
IGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQoKTsKICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNl
cHRpb24oKSkgewogICAgICAgICAgICAgaWYgKGVycm9yQ2FsbGJhY2sgJiYgZG9jdW1lbnQpIHsK
LSAgICAgICAgICAgICAgICBkb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3Vy
Y2U6Ok5ldHdvcmtpbmcsICpkb2N1bWVudCwgW2Vycm9yQ2FsbGJhY2sgPSBXVEZNb3ZlKGVycm9y
Q2FsbGJhY2spLCBleGNlcHRpb24gPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLCBwZW5kaW5n
QWN0aXZpdHkgPSBXVEZNb3ZlKHBlbmRpbmdBY3Rpdml0eSldKCkgbXV0YWJsZSB7CisgICAgICAg
ICAgICAgICAgZG9jdW1lbnQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3
b3JraW5nLCBbZXJyb3JDYWxsYmFjayA9IFdURk1vdmUoZXJyb3JDYWxsYmFjayksIGV4Y2VwdGlv
biA9IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCksIHBlbmRpbmdBY3Rpdml0eSA9IFdURk1vdmUo
cGVuZGluZ0FjdGl2aXR5KV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICAgICAgZXJyb3JD
YWxsYmFjay0+aGFuZGxlRXZlbnQoRE9NRXhjZXB0aW9uOjpjcmVhdGUoV1RGTW92ZShleGNlcHRp
b24pKSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9CkBAIC02NiwxNCArNjYs
MTQgQEAgdm9pZCBGaWxlU3lzdGVtRGlyZWN0b3J5RW50cnk6OmdldEVudHJ5KAogICAgICAgICBh
dXRvIGVudHJ5ID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogICAgICAgICBpZiAoIW1h
dGNoZXMoZW50cnkpKSB7CiAgICAgICAgICAgICBpZiAoZXJyb3JDYWxsYmFjayAmJiBkb2N1bWVu
dCkgewotICAgICAgICAgICAgICAgIGRvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFz
a1NvdXJjZTo6TmV0d29ya2luZywgKmRvY3VtZW50LCBbZXJyb3JDYWxsYmFjayA9IFdURk1vdmUo
ZXJyb3JDYWxsYmFjayksIHBlbmRpbmdBY3Rpdml0eSA9IFdURk1vdmUocGVuZGluZ0FjdGl2aXR5
KV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC0+ZXZlbnRMb29wKCkucXVl
dWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIFtlcnJvckNhbGxiYWNrID0gV1RGTW92ZShl
cnJvckNhbGxiYWNrKSwgcGVuZGluZ0FjdGl2aXR5ID0gV1RGTW92ZShwZW5kaW5nQWN0aXZpdHkp
XSgpIG11dGFibGUgewogICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrLT5oYW5kbGVF
dmVudChET01FeGNlcHRpb246OmNyZWF0ZShFeGNlcHRpb24geyBUeXBlTWlzbWF0Y2hFcnJvciwg
IkVudHJ5IGF0IGdpdmVuIHBhdGggZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgdHlwZSJfcyB9KSk7
CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgaWYgKHN1Y2Nlc3NDYWxsYmFjayAmJiBkb2N1bWVudCkgewot
ICAgICAgICAgICAgZG9jdW1lbnQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpO
ZXR3b3JraW5nLCAqZG9jdW1lbnQsIFtzdWNjZXNzQ2FsbGJhY2sgPSBXVEZNb3ZlKHN1Y2Nlc3ND
YWxsYmFjayksIGVudHJ5ID0gV1RGTW92ZShlbnRyeSksIHBlbmRpbmdBY3Rpdml0eSA9IFdURk1v
dmUocGVuZGluZ0FjdGl2aXR5KV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGRvY3VtZW50LT5l
dmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgW3N1Y2Nlc3NDYWxs
YmFjayA9IFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgZW50cnkgPSBXVEZNb3ZlKGVudHJ5KSwg
cGVuZGluZ0FjdGl2aXR5ID0gV1RGTW92ZShwZW5kaW5nQWN0aXZpdHkpXSgpIG11dGFibGUgewog
ICAgICAgICAgICAgICAgIHN1Y2Nlc3NDYWxsYmFjay0+aGFuZGxlRXZlbnQoV1RGTW92ZShlbnRy
eSkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRGlyZWN0b3J5UmVhZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VudHJpZXNhcGkvRmlsZVN5c3RlbURpcmVjdG9y
eVJlYWRlci5jcHAJKHJldmlzaW9uIDI1MjUwNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZW50cmllc2FwaS9GaWxlU3lzdGVtRGlyZWN0b3J5UmVhZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODksNyArODksNyBAQCB2b2lkIEZpbGVTeXN0ZW1EaXJlY3RvcnlSZWFkZXI6OnJlYWRFbnRy
CiAgICAgICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICAg
ICAgbV9lcnJvciA9IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICAgICAg
aWYgKGVycm9yQ2FsbGJhY2sgJiYgZG9jdW1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgZG9j
dW1lbnQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCAqZG9j
dW1lbnQsIFt0aGlzLCBlcnJvckNhbGxiYWNrID0gV1RGTW92ZShlcnJvckNhbGxiYWNrKSwgcGVu
ZGluZ0FjdGl2aXR5ID0gV1RGTW92ZShwZW5kaW5nQWN0aXZpdHkpXSgpIG11dGFibGUgeworICAg
ICAgICAgICAgICAgICAgICBkb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3Vy
Y2U6Ok5ldHdvcmtpbmcsIFt0aGlzLCBlcnJvckNhbGxiYWNrID0gV1RGTW92ZShlcnJvckNhbGxi
YWNrKSwgcGVuZGluZ0FjdGl2aXR5ID0gV1RGTW92ZShwZW5kaW5nQWN0aXZpdHkpXSgpIG11dGFi
bGUgewogICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQo
RE9NRXhjZXB0aW9uOjpjcmVhdGUoKm1fZXJyb3IpKTsKICAgICAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICAgICAgfQpAQCAtOTcsNyArOTcsNyBAQCB2b2lkIEZpbGVTeXN0ZW1EaXJl
Y3RvcnlSZWFkZXI6OnJlYWRFbnRyCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2lzRG9u
ZSA9IHRydWU7CiAgICAgICAgICAgICBpZiAoZG9jdW1lbnQpIHsKLSAgICAgICAgICAgICAgICBk
b2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsICpk
b2N1bWVudCwgW3N1Y2Nlc3NDYWxsYmFjayA9IFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgcGVu
ZGluZ0FjdGl2aXR5ID0gV1RGTW92ZShwZW5kaW5nQWN0aXZpdHkpLCByZXN1bHQgPSByZXN1bHQu
cmVsZWFzZVJldHVyblZhbHVlKCldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgZG9jdW1l
bnQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCBbc3VjY2Vz
c0NhbGxiYWNrID0gV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spLCBwZW5kaW5nQWN0aXZpdHkgPSBX
VEZNb3ZlKHBlbmRpbmdBY3Rpdml0eSksIHJlc3VsdCA9IHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFs
dWUoKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrLT5o
YW5kbGVFdmVudChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0
ZW1FbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVz
YXBpL0ZpbGVTeXN0ZW1FbnRyeS5jcHAJKHJldmlzaW9uIDI1MjUwNikKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRW50cnkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03Nyw3ICs3Nyw3IEBAIHZvaWQgRmlsZVN5c3RlbUVudHJ5OjpnZXRQYXJlbnQoU2NyaXB0
RXgKICAgICAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAg
ICBkb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcs
ICpkb2N1bWVudCwgW3N1Y2Nlc3NDYWxsYmFjayA9IFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwg
ZXJyb3JDYWxsYmFjayA9IFdURk1vdmUoZXJyb3JDYWxsYmFjayksIHJlc3VsdCA9IFdURk1vdmUo
cmVzdWx0KSwgcGVuZGluZ0FjdGl2aXR5ID0gV1RGTW92ZShwZW5kaW5nQWN0aXZpdHkpXSgpIG11
dGFibGUgeworICAgICAgICBkb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3Vy
Y2U6Ok5ldHdvcmtpbmcsIFtzdWNjZXNzQ2FsbGJhY2sgPSBXVEZNb3ZlKHN1Y2Nlc3NDYWxsYmFj
ayksIGVycm9yQ2FsbGJhY2sgPSBXVEZNb3ZlKGVycm9yQ2FsbGJhY2spLCByZXN1bHQgPSBXVEZN
b3ZlKHJlc3VsdCksIHBlbmRpbmdBY3Rpdml0eSA9IFdURk1vdmUocGVuZGluZ0FjdGl2aXR5KV0o
KSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKICAg
ICAgICAgICAgICAgICBpZiAoZXJyb3JDYWxsYmFjaykKICAgICAgICAgICAgICAgICAgICAgZXJy
b3JDYWxsYmFjay0+aGFuZGxlRXZlbnQoRE9NRXhjZXB0aW9uOjpjcmVhdGUocmVzdWx0LnJlbGVh
c2VFeGNlcHRpb24oKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBp
L0ZpbGVTeXN0ZW1GaWxlRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRmlsZUVudHJ5LmNwcAkocmV2aXNpb24gMjUyNTA2
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0ZW1GaWxlRW50
cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHZvaWQgRmlsZVN5c3RlbUZp
bGVFbnRyeTo6ZmlsZShSZWY8RmlsZUMKICAgICAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICBkb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRh
c2tTb3VyY2U6Ok5ldHdvcmtpbmcsICpkb2N1bWVudCwgW3N1Y2Nlc3NDYWxsYmFjayA9IFdURk1v
dmUoc3VjY2Vzc0NhbGxiYWNrKSwgZXJyb3JDYWxsYmFjayA9IFdURk1vdmUoZXJyb3JDYWxsYmFj
ayksIHJlc3VsdCA9IFdURk1vdmUocmVzdWx0KSwgcGVuZGluZ0FjdGl2aXR5ID0gV1RGTW92ZShw
ZW5kaW5nQWN0aXZpdHkpXSgpIG11dGFibGUgeworICAgICAgICBkb2N1bWVudC0+ZXZlbnRMb29w
KCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIFtzdWNjZXNzQ2FsbGJhY2sgPSBX
VEZNb3ZlKHN1Y2Nlc3NDYWxsYmFjayksIGVycm9yQ2FsbGJhY2sgPSBXVEZNb3ZlKGVycm9yQ2Fs
bGJhY2spLCByZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCksIHBlbmRpbmdBY3Rpdml0eSA9IFdURk1v
dmUocGVuZGluZ0FjdGl2aXR5KV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChyZXN1bHQu
aGFzRXhjZXB0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoZXJyb3JDYWxsYmFjaykKICAg
ICAgICAgICAgICAgICAgICAgZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQoRE9NRXhjZXB0aW9u
OjpjcmVhdGUocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXJlY29yZGVyL01lZGlhUmVjb3JkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFyZWNvcmRlci9NZWRpYVJlY29yZGVyLmNwcAko
cmV2aXNpb24gMjUyNTA2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXJlY29yZGVy
L01lZGlhUmVjb3JkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsNyArMjE2LDcgQEAgdm9p
ZCBNZWRpYVJlY29yZGVyOjpzY2hlZHVsZURlZmVycmVkVGFzawogICAgIGlmICghZG9jdW1lbnQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGRvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2so
VGFza1NvdXJjZTo6TmV0d29ya2luZywgKmRvY3VtZW50LCBbcGVuZGluZ0FjdGl2aXR5ID0gbWFr
ZVBlbmRpbmdBY3Rpdml0eSgqdGhpcyksIGZ1bmN0aW9uID0gV1RGTW92ZShmdW5jdGlvbildIHsK
KyAgICBkb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtp
bmcsIFtwZW5kaW5nQWN0aXZpdHkgPSBtYWtlUGVuZGluZ0FjdGl2aXR5KCp0aGlzKSwgZnVuY3Rp
b24gPSBXVEZNb3ZlKGZ1bmN0aW9uKV0gewogICAgICAgICBmdW5jdGlvbigpOwogICAgIH0pOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25z
L05vdGlmaWNhdGlvbi5jcHAJKHJldmlzaW9uIDI1MjUwNikKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTIsNyArMTUyLDcgQEAgdm9pZCBOb3RpZmljYXRpb246OnF1ZXVlVGFzayhGdW5jdGlvbjx2bwog
ICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGRvY3VtZW50LT5ldmVu
dExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6VXNlckludGVyYWN0aW9uLCAqZG9jdW1lbnQs
IFdURk1vdmUodGFzaykpOworICAgIGRvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFz
a1NvdXJjZTo6VXNlckludGVyYWN0aW9uLCBXVEZNb3ZlKHRhc2spKTsKIH0KIAogdm9pZCBOb3Rp
ZmljYXRpb246OmRpc3BhdGNoU2hvd0V2ZW50KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAyNTI1MDYpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjg5LDcgKzY4OSw3IEBAIHZvaWQgRGF0YWJhc2U6OnJ1blRyYW5zYWN0aW9uKFJl
ZlB0cjxTUUwKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc011
dGV4KTsKICAgICBpZiAoIW1faXNUcmFuc2FjdGlvblF1ZXVlRW5hYmxlZCkgewogICAgICAgICBp
ZiAoZXJyb3JDYWxsYmFjaykgewotICAgICAgICAgICAgbV9kb2N1bWVudC0+ZXZlbnRMb29wKCku
cXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIG1fZG9jdW1lbnQsIFtlcnJvckNhbGxi
YWNrID0gbWFrZVJlZigqZXJyb3JDYWxsYmFjayldKCkgeworICAgICAgICAgICAgbV9kb2N1bWVu
dC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIFtlcnJvckNh
bGxiYWNrID0gbWFrZVJlZigqZXJyb3JDYWxsYmFjayldKCkgewogICAgICAgICAgICAgICAgIGVy
cm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlVOS05P
V05fRVJSLCAiZGF0YWJhc2UgaGFzIGJlZW4gY2xvc2VkIikpOwogICAgICAgICAgICAgfSk7CiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHAJKHJldmlzaW9uIDI1MjUwNikKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjEwLDcgKzIxMCw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxEYXRhYmFzZT4+IERhdGFi
YXNlTWFuYWcKICAgICBpZiAoZGF0YWJhc2UtPmlzTmV3KCkgJiYgY3JlYXRpb25DYWxsYmFjay5n
ZXQoKSkgewogICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgRGF0YWJhc2VDcmVh
dGlvbkNhbGxiYWNrVGFzayBmb3IgZGF0YWJhc2UgJXBcbiIsIGRhdGFiYXNlLmdldCgpKTsKICAg
ICAgICAgZGF0YWJhc2UtPnNldEhhc1BlbmRpbmdDcmVhdGlvbkV2ZW50KHRydWUpOwotICAgICAg
ICBkYXRhYmFzZS0+bV9kb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6
Ok5ldHdvcmtpbmcsIGRhdGFiYXNlLT5tX2RvY3VtZW50LCBbY3JlYXRpb25DYWxsYmFjaywgZGF0
YWJhc2VdKCkgeworICAgICAgICBkYXRhYmFzZS0+bV9kb2N1bWVudC0+ZXZlbnRMb29wKCkucXVl
dWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIFtjcmVhdGlvbkNhbGxiYWNrLCBkYXRhYmFz
ZV0oKSB7CiAgICAgICAgICAgICBjcmVhdGlvbkNhbGxiYWNrLT5oYW5kbGVFdmVudCgqZGF0YWJh
c2UpOwogICAgICAgICAgICAgZGF0YWJhc2UtPnNldEhhc1BlbmRpbmdDcmVhdGlvbkV2ZW50KGZh
bHNlKTsKICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL1NRTFRyYW5zYWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmNwcAkocmV2aXNpb24gMjUyNTA2KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpjYWxs
RXJyb3JDYWxsYmFja0R1CiAgICAgaWYgKCFlcnJvckNhbGxiYWNrKQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX2RhdGFiYXNlLT5kb2N1bWVudCgpLmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNr
U291cmNlOjpOZXR3b3JraW5nLCBtX2RhdGFiYXNlLT5kb2N1bWVudCgpLCBbZXJyb3JDYWxsYmFj
ayA9IFdURk1vdmUoZXJyb3JDYWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAgbV9kYXRhYmFzZS0+
ZG9jdW1lbnQoKS5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywg
W2Vycm9yQ2FsbGJhY2sgPSBXVEZNb3ZlKGVycm9yQ2FsbGJhY2spXSgpIG11dGFibGUgewogICAg
ICAgICBlcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9y
OjpEQVRBQkFTRV9FUlIsICJ0aGUgZGF0YWJhc2Ugd2FzIGNsb3NlZCIpKTsKICAgICB9KTsKIH0K
QEAgLTQxNSw3ICs0MTUsNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rp
b25FCiAgICAgLy8gZXJyb3IgdG8gaGF2ZSBvY2N1cnJlZCBpbiB0aGlzIHRyYW5zYWN0aW9uLgog
ICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2sgPSBt
X2Vycm9yQ2FsbGJhY2tXcmFwcGVyLnVud3JhcCgpOwogICAgIGlmIChlcnJvckNhbGxiYWNrKSB7
Ci0gICAgICAgIG1fZGF0YWJhc2UtPmRvY3VtZW50KCkuZXZlbnRMb29wKCkucXVldWVUYXNrKFRh
c2tTb3VyY2U6Ok5ldHdvcmtpbmcsIG1fZGF0YWJhc2UtPmRvY3VtZW50KCksIFtlcnJvckNhbGxi
YWNrID0gV1RGTW92ZShlcnJvckNhbGxiYWNrKSwgdHJhbnNhY3Rpb25FcnJvciA9IG1fdHJhbnNh
Y3Rpb25FcnJvcl0oKSBtdXRhYmxlIHsKKyAgICAgICAgbV9kYXRhYmFzZS0+ZG9jdW1lbnQoKS5l
dmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgW2Vycm9yQ2FsbGJh
Y2sgPSBXVEZNb3ZlKGVycm9yQ2FsbGJhY2spLCB0cmFuc2FjdGlvbkVycm9yID0gbV90cmFuc2Fj
dGlvbkVycm9yXSgpIG11dGFibGUgewogICAgICAgICAgICAgZXJyb3JDYWxsYmFjay0+aGFuZGxl
RXZlbnQoKnRyYW5zYWN0aW9uRXJyb3IpOwogICAgICAgICB9KTsKICAgICB9CkBAIC00NjYsNyAr
NDY2LDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN1Y2Nlc3NDYWxsYgogICAgIC8v
IFNwZWMgNC4zLjIuODogRGVsaXZlciBzdWNjZXNzIGNhbGxiYWNrLgogICAgIFJlZlB0cjxWb2lk
Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayA9IG1fc3VjY2Vzc0NhbGxiYWNrV3JhcHBlci51bndy
YXAoKTsKICAgICBpZiAoc3VjY2Vzc0NhbGxiYWNrKSB7Ci0gICAgICAgIG1fZGF0YWJhc2UtPmRv
Y3VtZW50KCkuZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIG1f
ZGF0YWJhc2UtPmRvY3VtZW50KCksIFtzdWNjZXNzQ2FsbGJhY2sgPSBXVEZNb3ZlKHN1Y2Nlc3ND
YWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAgICAgIG1fZGF0YWJhc2UtPmRvY3VtZW50KCkuZXZl
bnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIFtzdWNjZXNzQ2FsbGJh
Y2sgPSBXVEZNb3ZlKHN1Y2Nlc3NDYWxsYmFjayldKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBz
dWNjZXNzQ2FsbGJhY2stPmhhbmRsZUV2ZW50KCk7CiAgICAgICAgIH0pOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZURlZmVycmVkLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2VEZWZlcnJl
ZC5jcHAJKHJldmlzaW9uIDI1MjUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NUHJvbWlzZURlZmVycmVkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCB2
b2lkIERlZmVycmVkUHJvbWlzZTo6Y2FsbEZ1bmN0aW9uKEpTR2xvCiAKICAgICBpZiAoYWN0aXZl
RE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpKSB7CiAgICAgICAgIEpTQzo6U3Ryb25nPEpTQzo6VW5r
bm93biwgU2hvdWxkU3Ryb25nRGVzdHJ1Y3RvckdyYWJMb2NrOjpZZXM+IHN0cm9uZ1Jlc29sdXRp
b24obGV4aWNhbEdsb2JhbE9iamVjdC52bSgpLCByZXNvbHV0aW9uKTsKLSAgICAgICAgc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0
d29ya2luZywgKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKSwgbW9kZSwgc3Ryb25nUmVzb2x1dGlvbiA9IFdURk1vdmUoc3Ryb25n
UmVzb2x1dGlvbildKCkgbXV0YWJsZSB7CisgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIG1vZGUsIHN0cm9uZ1Jlc29sdXRpb24gPSBX
VEZNb3ZlKHN0cm9uZ1Jlc29sdXRpb24pXSgpIG11dGFibGUgewogICAgICAgICAgICAgaWYgKHNo
b3VsZElnbm9yZVJlcXVlc3RUb0Z1bGZpbGwoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAK
QEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBEZWZlcnJlZFByb21pc2U6OndoZW5TZXR0bGVkKEZ1bmN0
aQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRl
ZCgpKSB7Ci0gICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRMb29wKCkucXVl
dWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsICpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCks
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayldKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICB3aGVuU2V0dGxlZChXVEZNb3ZlKGNhbGxiYWNr
KSk7CiAgICAgICAgIH0pOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vQWJzdHJhY3RFdmVudExvb3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
QWJzdHJhY3RFdmVudExvb3AuaAkocmV2aXNpb24gMjUyNTA2KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0Fic3RyYWN0RXZlbnRMb29wLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDIxICsyOCwxMjUg
QEAKICNpbmNsdWRlICJUYXNrU291cmNlLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CisjaW5jbHVkZSA8d3RmL1dlYWtIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBFdmVudExvb3BUYXNrR3JvdXA7CitjbGFz
cyBFdmVudFRhcmdldDsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKK2NsYXNzIEV2
ZW50TG9vcFRhc2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEV2ZW50TG9vcFRhc2spOwor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgdmlydHVhbCB+RXZl
bnRMb29wVGFzaygpID0gZGVmYXVsdDsKKworICAgIFRhc2tTb3VyY2UgdGFza1NvdXJjZSgpIHsg
cmV0dXJuIG1fdGFza1NvdXJjZTsgfQorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKCkgPSAwOwor
CisgICAgRXZlbnRMb29wVGFza0dyb3VwKiBncm91cCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JvdXAu
Z2V0KCk7IH0KKworcHJvdGVjdGVkOgorICAgIEV2ZW50TG9vcFRhc2soVGFza1NvdXJjZSBzb3Vy
Y2UpCisgICAgICAgIDogbV90YXNrU291cmNlKHNvdXJjZSkKKyAgICB7IH0KKworcHJpdmF0ZToK
KyAgICBjb25zdCBUYXNrU291cmNlIG1fdGFza1NvdXJjZTsKKyAgICBXZWFrUHRyPEV2ZW50TG9v
cFRhc2tHcm91cD4gbV9ncm91cDsKKworICAgIGZyaWVuZCBjbGFzcyBFdmVudExvb3BUYXNrR3Jv
dXA7Cit9OworCiAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJh
cHBhcGlzLmh0bWwjZXZlbnQtbG9vcAotY2xhc3MgQWJzdHJhY3RFdmVudExvb3AgOiBwdWJsaWMg
UmVmQ291bnRlZDxBYnN0cmFjdEV2ZW50TG9vcD4geworY2xhc3MgQWJzdHJhY3RFdmVudExvb3Ag
OiBwdWJsaWMgUmVmQ291bnRlZDxBYnN0cmFjdEV2ZW50TG9vcD4sIHB1YmxpYyBDYW5NYWtlV2Vh
a1B0cjxBYnN0cmFjdEV2ZW50TG9vcD4gewogcHVibGljOgogICAgIHZpcnR1YWwgfkFic3RyYWN0
RXZlbnRMb29wKCkgPSBkZWZhdWx0OwogCi0gICAgdHlwZWRlZiBXVEY6OkZ1bmN0aW9uPHZvaWQg
KCk+IFRhc2tGdW5jdGlvbjsKLSAgICB2aXJ0dWFsIHZvaWQgcXVldWVUYXNrKFRhc2tTb3VyY2Us
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBUYXNrRnVuY3Rpb24mJikgPSAwOworICAgIHR5cGVk
ZWYgRnVuY3Rpb248dm9pZCAoKT4gVGFza0Z1bmN0aW9uOworICAgIHZvaWQgcXVldWVUYXNrKHN0
ZDo6dW5pcXVlX3B0cjxFdmVudExvb3BUYXNrPiYmKTsKKworICAgIHZvaWQgc3VzcGVuZEdyb3Vw
KEV2ZW50TG9vcFRhc2tHcm91cCYpOworICAgIHZvaWQgcmVzdW1lR3JvdXAoRXZlbnRMb29wVGFz
a0dyb3VwJik7CisgICAgdm9pZCBzdG9wR3JvdXAoRXZlbnRMb29wVGFza0dyb3VwJik7CiAKIHBy
b3RlY3RlZDoKICAgICBBYnN0cmFjdEV2ZW50TG9vcCgpID0gZGVmYXVsdDsKKyAgICB2b2lkIHJ1
bigpOworICAgIHZvaWQgY2xlYXJBbGxUYXNrcygpOworCitwcml2YXRlOgorICAgIHZvaWQgc2No
ZWR1bGVUb1J1bklmTmVlZGVkKCk7CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlVG9SdW4oKSA9
IDA7CisgICAgdmlydHVhbCBib29sIGlzQ29udGV4dFRocmVhZCgpIGNvbnN0ID0gMDsKKworICAg
IC8vIFVzZSBhIGdsb2JhbCBxdWV1ZSBpbnN0ZWFkIG9mIG11bHRpcGxlIHRhc2sgcXVldWVzIHNp
bmNlIEhUTUw1IHNwZWMgYWxsb3dzIFVBIHRvIHBpY2sgYXJiaXRyYXJ5IHF1ZXVlLgorICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RXZlbnRMb29wVGFzaz4+IG1fdGFza3M7CisgICAgV2Vha0hh
c2hTZXQ8RXZlbnRMb29wVGFza0dyb3VwPiBtX2dyb3Vwc1dpdGhTdXNwZW5lZFRhc2tzOworICAg
IGJvb2wgbV9pc1NjaGVkdWxlZFRvUnVuIHsgZmFsc2UgfTsKK307CisKK2NsYXNzIEV2ZW50TG9v
cFRhc2tHcm91cCA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxFdmVudExvb3BUYXNrR3JvdXA+IHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFdmVudExvb3BUYXNrR3JvdXApOworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgRXZlbnRMb29wVGFza0dyb3VwKEFi
c3RyYWN0RXZlbnRMb29wJiBldmVudExvb3ApCisgICAgICAgIDogbV9ldmVudExvb3AobWFrZVdl
YWtQdHIoZXZlbnRMb29wKSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBtYXRjaGVzVGFzayhF
dmVudExvb3BUYXNrJiB0YXNrKSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byogZ3JvdXAgPSB0
YXNrLmdyb3VwKCk7CisgICAgICAgIHJldHVybiBncm91cCA9PSB0aGlzOworICAgIH0KKworICAg
IHZvaWQgc3RvcEFuZERpc2NhcmRBbGxUYXNrcygpCisgICAgeworICAgICAgICBtX3N0YXRlID0g
U3RhdGU6OlN0b3BwZWQ7CisgICAgICAgIGlmIChhdXRvKiBldmVudExvb3AgPSBtX2V2ZW50TG9v
cC5nZXQoKSkKKyAgICAgICAgICAgIGV2ZW50TG9vcC0+c3RvcEdyb3VwKCp0aGlzKTsKKyAgICB9
CisKKyAgICB2b2lkIHN1c3BlbmQoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUgIT0g
U3RhdGU6OlN0b3BwZWQpOworICAgICAgICBtX3N0YXRlID0gU3RhdGU6OlN1c3BlbmRlZDsKKyAg
ICAgICAgLy8gRXZlbnRMb29wIGRvZXNuJ3QgZG8gYW55dGhpbmcgdXBvbiBzdXNwZW5zaW9uLgor
ICAgIH0KKworICAgIHZvaWQgcmVzdW1lKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3N0YXRl
ICE9IFN0YXRlOjpTdG9wcGVkKTsKKyAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpSdW5uaW5nOwor
ICAgICAgICBpZiAoYXV0byogZXZlbnRMb29wID0gbV9ldmVudExvb3AuZ2V0KCkpCisgICAgICAg
ICAgICBldmVudExvb3AtPnJlc3VtZUdyb3VwKCp0aGlzKTsKKyAgICB9CisKKyAgICBib29sIGlz
U3RvcHBlZFBlcm1hbmVudGx5KCkgeyByZXR1cm4gbV9zdGF0ZSA9PSBTdGF0ZTo6U3RvcHBlZDsg
fQorICAgIGJvb2wgaXNTdXNwZW5kZWQoKSB7IHJldHVybiBtX3N0YXRlID09IFN0YXRlOjpTdXNw
ZW5kZWQ7IH0KKworICAgIHZvaWQgcXVldWVUYXNrKHN0ZDo6dW5pcXVlX3B0cjxFdmVudExvb3BU
YXNrPiYmIHRhc2spCisgICAgeworICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6U3RvcHBl
ZCB8fCAhbV9ldmVudExvb3ApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFTU0VSVCgh
dGFzay0+bV9ncm91cCk7CisgICAgICAgIHRhc2stPm1fZ3JvdXAgPSBtYWtlV2Vha1B0cigqdGhp
cyk7CisgICAgICAgIG1fZXZlbnRMb29wLT5xdWV1ZVRhc2soV1RGTW92ZSh0YXNrKSk7CisgICAg
fQorCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBxdWV1ZVRhc2soVGFza1NvdXJjZSwgQWJzdHJh
Y3RFdmVudExvb3A6OlRhc2tGdW5jdGlvbiYmKTsKKworcHJpdmF0ZToKKyAgICBlbnVtIGNsYXNz
IFN0YXRlIDogdWludDhfdCB7IFJ1bm5pbmcsIFN1c3BlbmRlZCwgU3RvcHBlZCB9OworCisgICAg
V2Vha1B0cjxBYnN0cmFjdEV2ZW50TG9vcD4gbV9ldmVudExvb3A7CisgICAgU3RhdGUgbV9zdGF0
ZSB7IFN0YXRlOjpSdW5uaW5nIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmNwcAkocmV2aXNpb24gMjUyNTA2KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzMSwxMiArMTMxLDQ3IEBAIGJvb2wgQWN0aXZlRE9NT2JqZWN0Ojppc0FsbG93ZWRUb1J1
blNjcmkKICAgICByZXR1cm4gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpICYmICFzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPmFjdGl2ZURPTU9iamVjdHNBcmVTdG9wcGVkKCkgJiYgIXNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+YWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpOwogfQogCi12
b2lkIEFjdGl2ZURPTU9iamVjdDo6cXVldWVUYXNrSW5FdmVudExvb3AoVGFza1NvdXJjZSBzb3Vy
Y2UsIEZ1bmN0aW9uPHZvaWQgKCk+JiYgdGFzaykKK3ZvaWQgQWN0aXZlRE9NT2JqZWN0OjpxdWV1
ZVRhc2tJbkV2ZW50TG9vcChUYXNrU291cmNlIHNvdXJjZSwgRnVuY3Rpb248dm9pZCAoKT4mJiBm
dW5jdGlvbikKIHsKICAgICBhdXRvKiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OwogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuOwotICAgIGNvbnRleHQtPmV2ZW50
TG9vcCgpLnF1ZXVlVGFzayhzb3VyY2UsICpjb250ZXh0LCBXVEZNb3ZlKHRhc2spKTsKKyAgICBj
b250ZXh0LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soc291cmNlLCBXVEZNb3ZlKGZ1bmN0aW9uKSk7
Cit9CisKK2NsYXNzIEFjdGl2ZURPTU9iamVjdEV2ZW50RGlzcGF0Y2hUYXNrIDogcHVibGljIEV2
ZW50TG9vcFRhc2sgeworcHVibGljOgorICAgIEFjdGl2ZURPTU9iamVjdEV2ZW50RGlzcGF0Y2hU
YXNrKFRhc2tTb3VyY2Ugc291cmNlLCBBY3RpdmVET01PYmplY3QmIG9iamVjdCwgRXZlbnRUYXJn
ZXQmIHRhcmdldCwgUmVmPEV2ZW50PiYmIGV2ZW50KQorICAgICAgICA6IEV2ZW50TG9vcFRhc2so
c291cmNlKQorICAgICAgICAsIG1fb2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX3RhcmdldCh0
YXJnZXQpCisgICAgICAgICwgbV9ldmVudChXVEZNb3ZlKGV2ZW50KSkKKyAgICB7CisgICAgICAg
ICsrbV9vYmplY3QubV9wZW5kaW5nQWN0aXZpdHlDb3VudDsKKyAgICB9CisKKyAgICB+QWN0aXZl
RE9NT2JqZWN0RXZlbnREaXNwYXRjaFRhc2soKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb2Jq
ZWN0Lm1fcGVuZGluZ0FjdGl2aXR5Q291bnQpOworICAgICAgICAtLW1fb2JqZWN0Lm1fcGVuZGlu
Z0FjdGl2aXR5Q291bnQ7CisgICAgfQorCisgICAgdm9pZCBleGVjdXRlKCkgZmluYWwgeyBtX3Rh
cmdldC0+ZGlzcGF0Y2hFdmVudChtX2V2ZW50LmdldCgpKTsgfQorCitwcml2YXRlOgorICAgIEFj
dGl2ZURPTU9iamVjdCYgbV9vYmplY3Q7CisgICAgUmVmPEV2ZW50VGFyZ2V0PiBtX3RhcmdldDsK
KyAgICBSZWY8RXZlbnQ+IG1fZXZlbnQ7Cit9OworCit2b2lkIEFjdGl2ZURPTU9iamVjdDo6cXVl
dWVUYXNrVG9EaXNwYXRjaEV2ZW50SW50ZXJuYWwoRXZlbnRUYXJnZXQmIHRhcmdldCwgVGFza1Nv
dXJjZSBzb3VyY2UsIFJlZjxFdmVudD4mJiBldmVudCkKK3sKKyAgICBBU1NFUlQoIWV2ZW50LT50
YXJnZXQoKSB8fCAmdGFyZ2V0ID09IGV2ZW50LT50YXJnZXQoKSk7CisgICAgYXV0byogY29udGV4
dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAg
IHJldHVybjsKKyAgICBhdXRvIHRhc2sgPSBtYWtlVW5pcXVlPEFjdGl2ZURPTU9iamVjdEV2ZW50
RGlzcGF0Y2hUYXNrPihzb3VyY2UsICp0aGlzLCB0YXJnZXQsIFdURk1vdmUoZXZlbnQpKTsKKyAg
ICBjb250ZXh0LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soV1RGTW92ZSh0YXNrKSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01P
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0
LmgJKHJldmlzaW9uIDI1MjUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsOSBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEV2ZW50OworY2xhc3MgRXZlbnRMb29wVGFza0dy
b3VwOworY2xhc3MgRXZlbnRUYXJnZXQ7CiAKIGVudW0gY2xhc3MgUmVhc29uRm9yU3VzcGVuc2lv
biB7CiAgICAgSmF2YVNjcmlwdERlYnVnZ2VyUGF1c2VkLApAQCAtMTE2LDcgKzExOSw3IEBAIHB1
YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIHN0YXRpYyB2b2lkIHF1ZXVlVGFz
a0tlZXBpbmdPYmplY3RBbGl2ZShUJiBvYmplY3QsIFRhc2tTb3VyY2Ugc291cmNlLCBGdW5jdGlv
bjx2b2lkICgpPiYmIHRhc2spCiAgICAgewotICAgICAgICBvYmplY3QucXVldWVUYXNrSW5FdmVu
dExvb3Aoc291cmNlLCBbcHJvdGVjdGVkT2JqZWN0ID0gbWFrZVJlZihvYmplY3QpLCBhY3Rpdml0
eSA9IG9iamVjdC5tYWtlUGVuZGluZ0FjdGl2aXR5KG9iamVjdCksIHRhc2sgPSBXVEZNb3ZlKHRh
c2spXSAoKSB7CisgICAgICAgIG9iamVjdC5xdWV1ZVRhc2tJbkV2ZW50TG9vcChzb3VyY2UsIFtw
cm90ZWN0ZWRPYmplY3QgPSBtYWtlUmVmKG9iamVjdCksIGFjdGl2aXR5ID0gb2JqZWN0LkFjdGl2
ZURPTU9iamVjdDo6bWFrZVBlbmRpbmdBY3Rpdml0eShvYmplY3QpLCB0YXNrID0gV1RGTW92ZSh0
YXNrKV0gKCkgewogICAgICAgICAgICAgdGFzaygpOwogICAgICAgICB9KTsKICAgICB9CkBAIC0x
MjQsMTAgKzEyNyw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFdmVudFRhcmdl
dFR5cGUsIHR5cGVuYW1lIEV2ZW50VHlwZT4KICAgICBzdGF0aWMgdm9pZCBxdWV1ZVRhc2tUb0Rp
c3BhdGNoRXZlbnQoRXZlbnRUYXJnZXRUeXBlJiB0YXJnZXQsIFRhc2tTb3VyY2Ugc291cmNlLCBS
ZWY8RXZlbnRUeXBlPiYmIGV2ZW50KQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFldmVudC0+dGFy
Z2V0KCkgfHwgJnRhcmdldCA9PSBldmVudC0+dGFyZ2V0KCkpOwotICAgICAgICBxdWV1ZVRhc2tL
ZWVwaW5nT2JqZWN0QWxpdmUodGFyZ2V0LCBzb3VyY2UsIFsmdGFyZ2V0LCBldmVudCA9IFdURk1v
dmUoZXZlbnQpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIHRhcmdldC5kaXNwYXRjaEV2ZW50
KGV2ZW50LmdldCgpKTsKLSAgICAgICAgfSk7CisgICAgICAgIHRhcmdldC5xdWV1ZVRhc2tUb0Rp
c3BhdGNoRXZlbnRJbnRlcm5hbCh0YXJnZXQsIHNvdXJjZSwgV1RGTW92ZShldmVudCkpOwogICAg
IH0KIAogcHJvdGVjdGVkOgpAQCAtMTQxLDEyICsxNDEsMTUgQEAgcHJpdmF0ZToKICAgICBBY3Rp
dmVET01PYmplY3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIENoZWNrZWRTY3JpcHRFeGVjdXRp
b25Db250ZXh0VHlwZSk7CiAKICAgICB2b2lkIHF1ZXVlVGFza0luRXZlbnRMb29wKFRhc2tTb3Vy
Y2UsIEZ1bmN0aW9uPHZvaWQgKCk+JiYpOworICAgIHZvaWQgcXVldWVUYXNrVG9EaXNwYXRjaEV2
ZW50SW50ZXJuYWwoRXZlbnRUYXJnZXQmLCBUYXNrU291cmNlLCBSZWY8RXZlbnQ+JiYpOwogCiAg
ICAgdW5zaWduZWQgbV9wZW5kaW5nQWN0aXZpdHlDb3VudCB7IDAgfTsKICNpZiAhQVNTRVJUX0RJ
U0FCTEVECiAgICAgYm9vbCBtX3N1c3BlbmRJZk5lZWRlZFdhc0NhbGxlZCB7IGZhbHNlIH07CiAg
ICAgUmVmPFRocmVhZD4gbV9jcmVhdGlvblRocmVhZCB7IFRocmVhZDo6Y3VycmVudCgpIH07CiAj
ZW5kaWYKKworICAgIGZyaWVuZCBjbGFzcyBBY3RpdmVET01PYmplY3RFdmVudERpc3BhdGNoVGFz
azsKIH07CiAKICNpZiBBU1NFUlRfRElTQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAkocmV2aXNpb24gMjUyNTA2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjY0Niw4ICsyNjQ2LDggQEAgdm9pZCBEb2N1bWVudDo6cGxhdGZv
cm1TdXNwZW5kT3JTdG9wQWN0aQogCiB2b2lkIERvY3VtZW50OjpzdXNwZW5kQWN0aXZlRE9NT2Jq
ZWN0cyhSZWFzb25Gb3JTdXNwZW5zaW9uIHdoeSkKIHsKLSAgICBpZiAobV9ldmVudExvb3ApCi0g
ICAgICAgIG1fZXZlbnRMb29wLT5zdXNwZW5kKCp0aGlzKTsKKyAgICBpZiAobV9kb2N1bWVudFRh
c2tHcm91cCkKKyAgICAgICAgbV9kb2N1bWVudFRhc2tHcm91cC0+c3VzcGVuZCgpOwogICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzKHdoeSk7CiAgICAg
c3VzcGVuZERldmljZU1vdGlvbkFuZE9yaWVudGF0aW9uVXBkYXRlcygpOwogICAgIHBsYXRmb3Jt
U3VzcGVuZE9yU3RvcEFjdGl2ZURPTU9iamVjdHMoKTsKQEAgLTI2NTUsOCArMjY1NSw4IEBAIHZv
aWQgRG9jdW1lbnQ6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzKFIKIAogdm9pZCBEb2N1bWVudDo6
cmVzdW1lQWN0aXZlRE9NT2JqZWN0cyhSZWFzb25Gb3JTdXNwZW5zaW9uIHdoeSkKIHsKLSAgICBp
ZiAobV9ldmVudExvb3ApCi0gICAgICAgIG1fZXZlbnRMb29wLT5yZXN1bWUoKnRoaXMpOworICAg
IGlmIChtX2RvY3VtZW50VGFza0dyb3VwKQorICAgICAgICBtX2RvY3VtZW50VGFza0dyb3VwLT5y
ZXN1bWUoKTsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpyZXN1bWVBY3RpdmVET01PYmpl
Y3RzKHdoeSk7CiAgICAgcmVzdW1lRGV2aWNlTW90aW9uQW5kT3JpZW50YXRpb25VcGRhdGVzKCk7
CiAgICAgLy8gRklYTUU6IEZvciBpT1MsIGRvIHdlIG5lZWQgdG8gYWRkIGNvbnRlbnQgY2hhbmdl
IG9ic2VydmVycyB0aGF0IHdlcmUgcmVtb3ZlZCBpbiBEb2N1bWVudDo6c3VzcGVuZEFjdGl2ZURP
TU9iamVjdHMoKT8KQEAgLTI2NjQsOCArMjY2NCw4IEBAIHZvaWQgRG9jdW1lbnQ6OnJlc3VtZUFj
dGl2ZURPTU9iamVjdHMoUmUKIAogdm9pZCBEb2N1bWVudDo6c3RvcEFjdGl2ZURPTU9iamVjdHMo
KQogewotICAgIGlmIChtX2V2ZW50TG9vcCkKLSAgICAgICAgbV9ldmVudExvb3AtPnN0b3AoKnRo
aXMpOworICAgIGlmIChtX2RvY3VtZW50VGFza0dyb3VwKQorICAgICAgICBtX2RvY3VtZW50VGFz
a0dyb3VwLT5zdG9wQW5kRGlzY2FyZEFsbFRhc2tzKCk7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6c3RvcEFjdGl2ZURPTU9iamVjdHMoKTsKICAgICBwbGF0Zm9ybVN1c3BlbmRPclN0b3BB
Y3RpdmVET01PYmplY3RzKCk7CiB9CkBAIC02MjQzLDEyICs2MjQzLDE4IEBAIHZvaWQgRG9jdW1l
bnQ6OnBlbmRpbmdUYXNrc1RpbWVyRmlyZWQoKQogICAgICAgICB0YXNrLnBlcmZvcm1UYXNrKCp0
aGlzKTsKIH0KIAotQWJzdHJhY3RFdmVudExvb3AmIERvY3VtZW50OjpldmVudExvb3AoKQorRXZl
bnRMb29wVGFza0dyb3VwJiBEb2N1bWVudDo6ZXZlbnRMb29wKCkKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotICAgIGlmIChVTkxJS0VMWSghbV9ldmVudExvb3ApKQorICAgIGlmIChV
TkxJS0VMWSghbV9kb2N1bWVudFRhc2tHcm91cCkpIHsKICAgICAgICAgbV9ldmVudExvb3AgPSBX
aW5kb3dFdmVudExvb3A6OmVuc3VyZUZvclJlZ2lzdHJhYmxlRG9tYWluKFJlZ2lzdHJhYmxlRG9t
YWluIHsgc2VjdXJpdHlPcmlnaW4oKS5kYXRhKCkgfSk7Ci0gICAgcmV0dXJuICptX2V2ZW50TG9v
cDsKKyAgICAgICAgbV9kb2N1bWVudFRhc2tHcm91cCA9IG1ha2VVbmlxdWU8RXZlbnRMb29wVGFz
a0dyb3VwPigqbV9ldmVudExvb3ApOworICAgICAgICBpZiAoYWN0aXZlRE9NT2JqZWN0c0FyZVN0
b3BwZWQoKSkKKyAgICAgICAgICAgIG1fZG9jdW1lbnRUYXNrR3JvdXAtPnN0b3BBbmREaXNjYXJk
QWxsVGFza3MoKTsKKyAgICAgICAgZWxzZSBpZiAoYWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRl
ZCgpKQorICAgICAgICAgICAgbV9kb2N1bWVudFRhc2tHcm91cC0+c3VzcGVuZCgpOworICAgIH0K
KyAgICByZXR1cm4gKm1fZG9jdW1lbnRUYXNrR3JvdXA7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnN1
c3BlbmRTY2hlZHVsZWRUYXNrcyhSZWFzb25Gb3JTdXNwZW5zaW9uIHJlYXNvbikKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAyNTI1MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDYgKzEyMSw3IEBAIGNsYXNzIERvY3Vt
ZW50U2hhcmVkT2JqZWN0UG9vbDsKIGNsYXNzIERvY3VtZW50VGltZWxpbmU7CiBjbGFzcyBEb2N1
bWVudFR5cGU7CiBjbGFzcyBFZGl0aW5nQmVoYXZpb3I7CitjbGFzcyBFdmVudExvb3BUYXNrR3Jv
dXA7CiBjbGFzcyBFeHRlbnNpb25TdHlsZVNoZWV0czsKIGNsYXNzIEZsb2F0UXVhZDsKIGNsYXNz
IEZsb2F0UmVjdDsKQEAgLTEwNjMsNyArMTA2NCw3IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcG9zdFRhc2soVGFzayYmKSBmaW5hbDsgLy8gRXhlY3V0ZXMgdGhlIHRhc2sg
b24gY29udGV4dCdzIHRocmVhZCBhc3luY2hyb25vdXNseS4KIAotICAgIEFic3RyYWN0RXZlbnRM
b29wJiBldmVudExvb3AoKSBmaW5hbDsKKyAgICBFdmVudExvb3BUYXNrR3JvdXAmIGV2ZW50TG9v
cCgpIGZpbmFsOwogCiAgICAgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKiBzY3JpcHRlZEFu
aW1hdGlvbkNvbnRyb2xsZXIoKSB7IHJldHVybiBtX3NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxl
ci5nZXQoKTsgfQogICAgIHZvaWQgc3VzcGVuZFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlckNh
bGxiYWNrcygpOwpAQCAtMjA2NCw2ICsyMDY1LDcgQEAgcHJpdmF0ZToKICAgICBEb2N1bWVudElk
ZW50aWZpZXIgbV9pZGVudGlmaWVyOwogCiAgICAgUmVmUHRyPFdpbmRvd0V2ZW50TG9vcD4gbV9l
dmVudExvb3A7CisgICAgc3RkOjp1bmlxdWVfcHRyPEV2ZW50TG9vcFRhc2tHcm91cD4gbV9kb2N1
bWVudFRhc2tHcm91cDsKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBSZWZQdHI8
U1dDbGllbnRDb25uZWN0aW9uPiBtX3NlcnZpY2VXb3JrZXJDb25uZWN0aW9uOwpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0lkbGVDYWxsYmFja0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9JZGxlQ2FsbGJhY2tDb250cm9sbGVyLmNwcAkocmV2aXNpb24g
MjUyNTA2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0lkbGVDYWxsYmFja0NvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgSWRsZUNhbGxiYWNrQ29udHJv
bGxlcjo6cmVtb3ZlSWRsZUMKIAogdm9pZCBJZGxlQ2FsbGJhY2tDb250cm9sbGVyOjpxdWV1ZVRh
c2tUb1N0YXJ0SWRsZVBlcmlvZCgpCiB7Ci0gICAgbV9kb2N1bWVudC0+ZXZlbnRMb29wKCkucXVl
dWVUYXNrKFRhc2tTb3VyY2U6OklkbGVUYXNrLCAqbV9kb2N1bWVudCwgW3Byb3RlY3RlZERvY3Vt
ZW50ID0gbWFrZVJlZigqbV9kb2N1bWVudCksIHRoaXNdKCkgeworICAgIG1fZG9jdW1lbnQtPmV2
ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpJZGxlVGFzaywgW3Byb3RlY3RlZERvY3Vt
ZW50ID0gbWFrZVJlZigqbV9kb2N1bWVudCksIHRoaXNdIHsKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQocHJvdGVjdGVkRG9jdW1lbnQtPmlkbGVDYWxsYmFja0NvbnRyb2xsZXIoKSA9PSB0aGlzKTsK
ICAgICAgICAgc3RhcnRJZGxlUGVyaW9kKCk7CiAgICAgfSk7CkBAIC0xMDAsNyArMTAwLDcgQEAg
dm9pZCBJZGxlQ2FsbGJhY2tDb250cm9sbGVyOjpzdGFydElkbGVQZQogCiB2b2lkIElkbGVDYWxs
YmFja0NvbnRyb2xsZXI6OnF1ZXVlVGFza1RvSW52b2tlSWRsZUNhbGxiYWNrcyhNb25vdG9uaWNU
aW1lIGRlYWRsaW5lKQogewotICAgIG1fZG9jdW1lbnQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhU
YXNrU291cmNlOjpJZGxlVGFzaywgKm1fZG9jdW1lbnQsIFtwcm90ZWN0ZWREb2N1bWVudCA9IG1h
a2VSZWYoKm1fZG9jdW1lbnQpLCBkZWFkbGluZSwgdGhpc10oKSB7CisgICAgbV9kb2N1bWVudC0+
ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6OklkbGVUYXNrLCBbcHJvdGVjdGVkRG9j
dW1lbnQgPSBtYWtlUmVmKCptX2RvY3VtZW50KSwgZGVhZGxpbmUsIHRoaXNdIHsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocHJvdGVjdGVkRG9jdW1lbnQtPmlkbGVDYWxsYmFja0NvbnRyb2xsZXIo
KSA9PSB0aGlzKTsKICAgICAgICAgaW52b2tlSWRsZUNhbGxiYWNrcyhkZWFkbGluZSk7CiAgICAg
fSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgJ
KHJldmlzaW9uIDI1MjUwNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDcgQEAgY2xhc3MgQWJzdHJhY3RF
dmVudExvb3A7CiBjbGFzcyBDYWNoZWRTY3JpcHQ7CiBjbGFzcyBEYXRhYmFzZUNvbnRleHQ7CiBj
bGFzcyBFdmVudFF1ZXVlOworY2xhc3MgRXZlbnRMb29wVGFza0dyb3VwOwogY2xhc3MgRXZlbnRU
YXJnZXQ7CiBjbGFzcyBNZXNzYWdlUG9ydDsKIGNsYXNzIFB1YmxpY1VSTE1hbmFnZXI7CkBAIC02
NCw2ICs2NSw3IEBAIGNsYXNzIFJlamVjdGVkUHJvbWlzZVRyYWNrZXI7CiBjbGFzcyBSZXNvdXJj
ZVJlcXVlc3Q7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIGNsYXNzIFNvY2tldFByb3ZpZGVyOwor
ZW51bSBjbGFzcyBUYXNrU291cmNlIDogdWludDhfdDsKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKIGNsYXNzIFNlcnZpY2VXb3JrZXI7CkBAIC04OSw3ICs5MSw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgaXNDb250ZXh0VGhyZWFkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpc0pTRXhlY3V0aW9uRm9yYmlkZGVuKCkgY29uc3QgPSAwOwogCi0g
ICAgdmlydHVhbCBBYnN0cmFjdEV2ZW50TG9vcCYgZXZlbnRMb29wKCkgPSAwOworICAgIHZpcnR1
YWwgRXZlbnRMb29wVGFza0dyb3VwJiBldmVudExvb3AoKSA9IDA7CiAKICAgICB2aXJ0dWFsIGNv
bnN0IFVSTCYgdXJsKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgVVJMIGNvbXBsZXRlVVJMKGNv
bnN0IFN0cmluZyYgdXJsKSBjb25zdCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vV2lu
ZG93RXZlbnRMb29wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vV2luZG93
RXZlbnRMb29wLmNwcAkocmV2aXNpb24gMjUyNTA2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1dp
bmRvd0V2ZW50TG9vcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDY4ICs1OSwxMDUgQEAgV2lu
ZG93RXZlbnRMb29wOjp+V2luZG93RXZlbnRMb29wKCkKICAgICBSRUxFQVNFX0FTU0VSVChkaWRS
ZW1vdmUpOwogfQogCi12b2lkIFdpbmRvd0V2ZW50TG9vcDo6cXVldWVUYXNrKFRhc2tTb3VyY2Ug
c291cmNlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBUYXNrRnVuY3Rpb24mJiB0
YXNrKQordm9pZCBBYnN0cmFjdEV2ZW50TG9vcDo6cXVldWVUYXNrKHN0ZDo6dW5pcXVlX3B0cjxF
dmVudExvb3BUYXNrPiYmIHRhc2spCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAg
ICBBU1NFUlQoaXM8RG9jdW1lbnQ+KGNvbnRleHQpKTsKKyAgICBBU1NFUlQodGFzay0+Z3JvdXAo
KSk7CisgICAgQVNTRVJUKGlzQ29udGV4dFRocmVhZCgpKTsKICAgICBzY2hlZHVsZVRvUnVuSWZO
ZWVkZWQoKTsKLSAgICBtX3Rhc2tzLmFwcGVuZChUYXNrIHsgc291cmNlLCBXVEZNb3ZlKHRhc2sp
LCBkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCkuaWRlbnRpZmllcigpIH0pOworICAgIG1fdGFz
a3MuYXBwZW5kKFdURk1vdmUodGFzaykpOwogfQogCi12b2lkIFdpbmRvd0V2ZW50TG9vcDo6c3Vz
cGVuZChEb2N1bWVudCYpCit2b2lkIEFic3RyYWN0RXZlbnRMb29wOjpzdXNwZW5kR3JvdXAoRXZl
bnRMb29wVGFza0dyb3VwJikKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFT
U0VSVChpc0NvbnRleHRUaHJlYWQoKSk7CiB9CiAKLXZvaWQgV2luZG93RXZlbnRMb29wOjpyZXN1
bWUoRG9jdW1lbnQmIGRvY3VtZW50KQordm9pZCBBYnN0cmFjdEV2ZW50TG9vcDo6cmVzdW1lR3Jv
dXAoRXZlbnRMb29wVGFza0dyb3VwJiBncm91cCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwotICAgIGlmICghbV9kb2N1bWVudElkZW50aWZpZXJzRm9yU3VzcGVuZGVkVGFza3MuY29u
dGFpbnMoZG9jdW1lbnQuaWRlbnRpZmllcigpKSkKKyAgICBBU1NFUlQoaXNDb250ZXh0VGhyZWFk
KCkpOworICAgIGlmICghbV9ncm91cHNXaXRoU3VzcGVuZWRUYXNrcy5jb250YWlucyhncm91cCkp
CiAgICAgICAgIHJldHVybjsKICAgICBzY2hlZHVsZVRvUnVuSWZOZWVkZWQoKTsKIH0KIAotdm9p
ZCBXaW5kb3dFdmVudExvb3A6OnN0b3AoRG9jdW1lbnQmIGRvY3VtZW50KQordm9pZCBBYnN0cmFj
dEV2ZW50TG9vcDo6c3RvcEdyb3VwKEV2ZW50TG9vcFRhc2tHcm91cCYgZ3JvdXApCiB7Ci0gICAg
bV90YXNrcy5yZW1vdmVBbGxNYXRjaGluZyhbaWRlbnRpZmllciA9IGRvY3VtZW50LmlkZW50aWZp
ZXIoKV0gKGF1dG8mIHRhc2spIHsKLSAgICAgICAgcmV0dXJuIHRhc2suZG9jdW1lbnRJZGVudGlm
aWVyID09IGlkZW50aWZpZXI7CisgICAgQVNTRVJUKGlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBt
X3Rhc2tzLnJlbW92ZUFsbE1hdGNoaW5nKFsmZ3JvdXBdIChhdXRvJiB0YXNrKSB7CisgICAgICAg
IHJldHVybiBncm91cC5tYXRjaGVzVGFzaygqdGFzayk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2lu
ZG93RXZlbnRMb29wOjpzY2hlZHVsZVRvUnVuSWZOZWVkZWQoKQordm9pZCBBYnN0cmFjdEV2ZW50
TG9vcDo6c2NoZWR1bGVUb1J1bklmTmVlZGVkKCkKIHsKICAgICBpZiAobV9pc1NjaGVkdWxlZFRv
UnVuKQogICAgICAgICByZXR1cm47Ci0KICAgICBtX2lzU2NoZWR1bGVkVG9SdW4gPSB0cnVlOwor
ICAgIHNjaGVkdWxlVG9SdW4oKTsKK30KKwordm9pZCBXaW5kb3dFdmVudExvb3A6OnNjaGVkdWxl
VG9SdW4oKQorewogICAgIGNhbGxPbk1haW5UaHJlYWQoW2V2ZW50TG9vcCA9IG1ha2VSZWYoKnRo
aXMpXSAoKSB7Ci0gICAgICAgIGV2ZW50TG9vcC0+bV9pc1NjaGVkdWxlZFRvUnVuID0gZmFsc2U7
CiAgICAgICAgIGV2ZW50TG9vcC0+cnVuKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2luZG93RXZl
bnRMb29wOjpydW4oKQorYm9vbCBXaW5kb3dFdmVudExvb3A6OmlzQ29udGV4dFRocmVhZCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGlzTWFpblRocmVhZCgpOworfQorCit2b2lkIEFic3RyYWN0RXZl
bnRMb29wOjpydW4oKQogeworICAgIG1faXNTY2hlZHVsZWRUb1J1biA9IGZhbHNlOwogICAgIGlm
IChtX3Rhc2tzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPFRhc2s+
IHRhc2tzID0gV1RGTW92ZShtX3Rhc2tzKTsKLSAgICBtX2RvY3VtZW50SWRlbnRpZmllcnNGb3JT
dXNwZW5kZWRUYXNrcy5jbGVhcigpOwotICAgIFZlY3RvcjxUYXNrPiByZW1haW5pbmdUYXNrczsK
KyAgICBhdXRvIHRhc2tzID0gc3RkOjpleGNoYW5nZShtX3Rhc2tzLCB7IH0pOworICAgIG1fZ3Jv
dXBzV2l0aFN1c3BlbmVkVGFza3MuY2xlYXIoKTsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PEV2ZW50TG9vcFRhc2s+PiByZW1haW5pbmdUYXNrczsKICAgICBmb3IgKGF1dG8mIHRhc2sgOiB0
YXNrcykgewotICAgICAgICBhdXRvKiBkb2N1bWVudCA9IERvY3VtZW50OjphbGxEb2N1bWVudHNN
YXAoKS5nZXQodGFzay5kb2N1bWVudElkZW50aWZpZXIpOwotICAgICAgICBpZiAoIWRvY3VtZW50
IHx8IGRvY3VtZW50LT5hY3RpdmVET01PYmplY3RzQXJlU3RvcHBlZCgpKQorICAgICAgICBhdXRv
KiBncm91cCA9IHRhc2stPmdyb3VwKCk7CisgICAgICAgIGlmICghZ3JvdXAgfHwgZ3JvdXAtPmlz
U3RvcHBlZFBlcm1hbmVudGx5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYg
KGRvY3VtZW50LT5hY3RpdmVET01PYmplY3RzQXJlU3VzcGVuZGVkKCkpIHsKLSAgICAgICAgICAg
IG1fZG9jdW1lbnRJZGVudGlmaWVyc0ZvclN1c3BlbmRlZFRhc2tzLmFkZCh0YXNrLmRvY3VtZW50
SWRlbnRpZmllcik7CisKKyAgICAgICAgaWYgKGdyb3VwLT5pc1N1c3BlbmRlZCgpKSB7CisgICAg
ICAgICAgICBtX2dyb3Vwc1dpdGhTdXNwZW5lZFRhc2tzLmFkZChncm91cCk7CiAgICAgICAgICAg
ICByZW1haW5pbmdUYXNrcy5hcHBlbmQoV1RGTW92ZSh0YXNrKSk7CiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgfQotICAgICAgICB0YXNrLnRhc2soKTsKKworICAgICAgICB0YXNrLT5l
eGVjdXRlKCk7CiAgICAgfQogICAgIGZvciAoYXV0byYgdGFzayA6IG1fdGFza3MpCiAgICAgICAg
IHJlbWFpbmluZ1Rhc2tzLmFwcGVuZChXVEZNb3ZlKHRhc2spKTsKICAgICBtX3Rhc2tzID0gV1RG
TW92ZShyZW1haW5pbmdUYXNrcyk7CiB9CiAKK3ZvaWQgQWJzdHJhY3RFdmVudExvb3A6OmNsZWFy
QWxsVGFza3MoKQoreworICAgIG1fdGFza3MuY2xlYXIoKTsKKyAgICBtX2dyb3Vwc1dpdGhTdXNw
ZW5lZFRhc2tzLmNsZWFyKCk7Cit9CisKK2NsYXNzIEV2ZW50TG9vcEZ1bmN0aW9uRGlzcGF0Y2hU
YXNrIDogcHVibGljIEV2ZW50TG9vcFRhc2sgeworcHVibGljOgorICAgIEV2ZW50TG9vcEZ1bmN0
aW9uRGlzcGF0Y2hUYXNrKFRhc2tTb3VyY2Ugc291cmNlLCBBYnN0cmFjdEV2ZW50TG9vcDo6VGFz
a0Z1bmN0aW9uJiYgZnVuY3Rpb24pCisgICAgICAgIDogRXZlbnRMb29wVGFzayhzb3VyY2UpCisg
ICAgICAgICwgbV9mdW5jdGlvbihXVEZNb3ZlKGZ1bmN0aW9uKSkKKyAgICB7CisgICAgfQorCisg
ICAgdm9pZCBleGVjdXRlKCkgZmluYWwgeyBtX2Z1bmN0aW9uKCk7IH0KKworcHJpdmF0ZToKKyAg
ICBBYnN0cmFjdEV2ZW50TG9vcDo6VGFza0Z1bmN0aW9uIG1fZnVuY3Rpb247Cit9OworCit2b2lk
IEV2ZW50TG9vcFRhc2tHcm91cDo6cXVldWVUYXNrKFRhc2tTb3VyY2Ugc291cmNlLCBBYnN0cmFj
dEV2ZW50TG9vcDo6VGFza0Z1bmN0aW9uJiYgZnVuY3Rpb24pCit7CisgICAgcmV0dXJuIHF1ZXVl
VGFzayhtYWtlVW5pcXVlPEV2ZW50TG9vcEZ1bmN0aW9uRGlzcGF0Y2hUYXNrPihzb3VyY2UsIFdU
Rk1vdmUoZnVuY3Rpb24pKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9XaW5kb3dFdmVudExvb3AuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vV2luZG93RXZlbnRMb29wLmgJKHJldmlzaW9uIDI1MjUwNikKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9XaW5kb3dFdmVudExvb3AuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMjkg
KzQxLDEzIEBAIHB1YmxpYzoKIAogICAgIH5XaW5kb3dFdmVudExvb3AoKTsKIAotICAgIHZvaWQg
cXVldWVUYXNrKFRhc2tTb3VyY2UsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBUYXNrRnVuY3Rp
b24mJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHN1c3BlbmQoRG9jdW1lbnQmKTsKLSAgICB2b2lk
IHJlc3VtZShEb2N1bWVudCYpOwotICAgIHZvaWQgc3RvcChEb2N1bWVudCYpOwotCiBwcml2YXRl
OgogICAgIFdpbmRvd0V2ZW50TG9vcChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOwogCi0gICAg
dm9pZCBzY2hlZHVsZVRvUnVuSWZOZWVkZWQoKTsKLSAgICB2b2lkIHJ1bigpOwotCi0gICAgc3Ry
dWN0IFRhc2sgewotICAgICAgICBUYXNrU291cmNlIHNvdXJjZTsKLSAgICAgICAgVGFza0Z1bmN0
aW9uIHRhc2s7Ci0gICAgICAgIERvY3VtZW50SWRlbnRpZmllciBkb2N1bWVudElkZW50aWZpZXI7
Ci0gICAgfTsKKyAgICB2b2lkIHNjaGVkdWxlVG9SdW4oKSBmaW5hbDsKKyAgICBib29sIGlzQ29u
dGV4dFRocmVhZCgpIGNvbnN0IGZpbmFsOwogCi0gICAgLy8gVXNlIGEgZ2xvYmFsIHF1ZXVlIGlu
c3RlYWQgb2YgbXVsdGlwbGUgdGFzayBxdWV1ZXMgc2luY2UgSFRNTDUgc3BlYyBhbGxvd3MgVUEg
dG8gcGljayBhcmJpdHJhcnkgcXVldWUuCi0gICAgVmVjdG9yPFRhc2s+IG1fdGFza3M7Ci0gICAg
SGFzaFNldDxEb2N1bWVudElkZW50aWZpZXI+IG1fZG9jdW1lbnRJZGVudGlmaWVyc0ZvclN1c3Bl
bmRlZFRhc2tzOwogICAgIFJlZ2lzdHJhYmxlRG9tYWluIG1fZG9tYWluOwotICAgIGJvb2wgbV9p
c1NjaGVkdWxlZFRvUnVuIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAkocmV2aXNpb24gMjUyNTA2
KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjU0LDcgKzI1NCw3IEBAIHZvaWQgRmlsZVJlYWRlcjo6ZW5xdWV1ZVRhc2soRnVuY3Rp
b248dm8KICAgICBzdGF0aWMgdWludDY0X3QgdGFza0lkZW50aWZpZXJTZWVkID0gMDsKICAgICB1
aW50NjRfdCB0YXNrSWRlbnRpZmllciA9ICsrdGFza0lkZW50aWZpZXJTZWVkOwogICAgIG1fcGVu
ZGluZ1Rhc2tzLmFkZCh0YXNrSWRlbnRpZmllciwgV1RGTW92ZSh0YXNrKSk7Ci0gICAgY29udGV4
dC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6OkZpbGVSZWFkaW5nLCAqY29udGV4
dCwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcGVuZGluZ0FjdGl2aXR5
ID0gbWFrZVBlbmRpbmdBY3Rpdml0eSgqdGhpcyksIHRhc2tJZGVudGlmaWVyXSB7CisgICAgY29u
dGV4dC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6OkZpbGVSZWFkaW5nLCBbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBwZW5kaW5nQWN0aXZpdHkgPSBtYWtl
UGVuZGluZ0FjdGl2aXR5KCp0aGlzKSwgdGFza0lkZW50aWZpZXJdIHsKICAgICAgICAgYXV0byB0
YXNrID0gbV9wZW5kaW5nVGFza3MudGFrZSh0YXNrSWRlbnRpZmllcik7CiAgICAgICAgIGlmICh0
YXNrKQogICAgICAgICAgICAgdGFzaygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcAkocmV2aXNpb24gMjUyNTA2KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Njg0LDcgKzQ2ODQsNyBAQCBFeGNlcHRpb25P
cjx2b2lkPiBJbnRlcm5hbHM6OnF1ZXVlVGFzayhTCiAgICAgZWxzZQogICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIAotICAgIGNvbnRleHQuZXZlbnRMb29w
KCkucXVldWVUYXNrKHNvdXJjZSwgY29udGV4dCwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayldKCkgeworICAgIGNvbnRleHQuZXZlbnRMb29wKCkucXVldWVUYXNrKHNvdXJjZSwgW2NhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgewogICAgICAgICBjYWxsYmFjay0+aGFuZGxlRXZl
bnQoKTsKICAgICB9KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVu
dExvb3AuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZl
bnRMb29wLmNwcAkocmV2aXNpb24gMjUyNTA2KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJFdmVudExvb3AuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2MyArNDQsMjEgQEAgUmVm
PFdvcmtlckV2ZW50TG9vcD4gV29ya2VyRXZlbnRMb29wOjpjcgogI2VuZGlmCiAKIFdvcmtlckV2
ZW50TG9vcDo6V29ya2VyRXZlbnRMb29wKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQp
Ci0gICAgOiBBY3RpdmVET01PYmplY3QoJmNvbnRleHQpCisgICAgOiBDb250ZXh0RGVzdHJ1Y3Rp
b25PYnNlcnZlcigmY29udGV4dCkKIHsKLSAgICBzdXNwZW5kSWZOZWVkZWQoKTsKIH0KIAotdm9p
ZCBXb3JrZXJFdmVudExvb3A6OnF1ZXVlVGFzayhUYXNrU291cmNlIHNvdXJjZSwgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCwgVGFza0Z1bmN0aW9uJiYgZnVuY3Rpb24pCit2b2lkIFdv
cmtlckV2ZW50TG9vcDo6c2NoZWR1bGVUb1J1bigpCiB7Ci0gICAgaWYgKCFzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChjb250ZXh0
LCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPT0gJmNvbnRleHQpOwotICAgIG1fdGFza3MuYXBw
ZW5kKHsgc291cmNlLCBXVEZNb3ZlKGZ1bmN0aW9uKSB9KTsKLSAgICBzY2hlZHVsZVRvUnVuSWZO
ZWVkZWQoKTsKLX0KLQotY29uc3QgY2hhciogV29ya2VyRXZlbnRMb29wOjphY3RpdmVET01PYmpl
Y3ROYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIldvcmtlckV2ZW50TG9vcCI7Ci19Ci0KLXZv
aWQgV29ya2VyRXZlbnRMb29wOjpzdXNwZW5kKFJlYXNvbkZvclN1c3BlbnNpb24pCi17Ci0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgV29ya2VyRXZlbnRMb29wOjpyZXN1bWUo
KQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIFdvcmtlckV2ZW50TG9v
cDo6c3RvcCgpCi17Ci0gICAgbV90YXNrcy5jbGVhcigpOwotfQotCi12b2lkIFdvcmtlckV2ZW50
TG9vcDo6c2NoZWR1bGVUb1J1bklmTmVlZGVkKCkKLXsKLSAgICBhdXRvKiBjb250ZXh0ID0gc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIEFTU0VSVChjb250ZXh0KTsKLSAgICBpZiAobV9p
c1NjaGVkdWxlZFRvUnVuIHx8IG1fdGFza3MuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX2lzU2NoZWR1bGVkVG9SdW4gPSB0cnVlOwotICAgIGNvbnRleHQtPnBvc3RUYXNrKFtl
dmVudExvb3AgPSBtYWtlUmVmKCp0aGlzKV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7Ci0g
ICAgICAgIGV2ZW50TG9vcC0+bV9pc1NjaGVkdWxlZFRvUnVuID0gZmFsc2U7CisgICAgQVNTRVJU
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5wb3N0VGFzayhbZXZlbnRMb29wID0gbWFrZVJlZigqdGhpcyldIChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JikgewogICAgICAgICBldmVudExvb3AtPnJ1bigpOwogICAgIH0pOwogfQogCi12b2lk
IFdvcmtlckV2ZW50TG9vcDo6cnVuKCkKK2Jvb2wgV29ya2VyRXZlbnRMb29wOjppc0NvbnRleHRU
aHJlYWQoKSBjb25zdAogewotICAgIGF1dG8qIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0IHx8IGNvbnRleHQtPmFjdGl2ZURPTU9iamVjdHNBcmVT
dG9wcGVkKCkgfHwgY29udGV4dC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgYXV0byB0YXNrcyA9IHN0ZDo6ZXhjaGFuZ2UobV90YXNrcywgVmVj
dG9yPFRhc2s+KCkpOwotICAgIGZvciAoYXV0byYgdGFzayA6IHRhc2tzKQotICAgICAgICB0YXNr
LnRhc2soKTsKKyAgICByZXR1cm4gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRU
aHJlYWQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJFdmVudExvb3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckV2ZW50TG9vcC5oCShyZXZpc2lvbiAyNTI1MDYpCisrKyBTb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50TG9vcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3
ICszMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFdvcmtlckdsb2JhbFNjb3BlOwog
Y2xhc3MgV29ya2xldEdsb2JhbFNjb3BlOwogCi1jbGFzcyBXb3JrZXJFdmVudExvb3AgZmluYWwg
OiBwdWJsaWMgQWJzdHJhY3RFdmVudExvb3AsIHByaXZhdGUgQWN0aXZlRE9NT2JqZWN0IHsKK2Ns
YXNzIFdvcmtlckV2ZW50TG9vcCBmaW5hbCA6IHB1YmxpYyBBYnN0cmFjdEV2ZW50TG9vcCwgcHJp
dmF0ZSBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlciB7CiBwdWJsaWM6CiAgICAgLy8gRXhwbGlj
aXRseSB0YWtlIFdvcmtlckdsb2JhbFNjb3BlIGFuZCBXb3JrbGV0R2xvYmFsU2NvcGUgZm9yIGRv
Y3VtZW50YXRpb24gcHVycG9zZXMuCiAgICAgc3RhdGljIFJlZjxXb3JrZXJFdmVudExvb3A+IGNy
ZWF0ZShXb3JrZXJHbG9iYWxTY29wZSYpOwpAQCAtNDIsMjcgKzQyLDExIEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgUmVmPFdvcmtlckV2ZW50TG9vcD4gY3JlYXRlKFdvcmtsZXRHbG9iYWxTY29wZSYp
OwogI2VuZGlmCiAKLSAgICB2b2lkIHF1ZXVlVGFzayhUYXNrU291cmNlLCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiwgVGFza0Z1bmN0aW9uJiYpIG92ZXJyaWRlOwotCiBwcml2YXRlOgogICAgIGV4
cGxpY2l0IFdvcmtlckV2ZW50TG9vcChTY3JpcHRFeGVjdXRpb25Db250ZXh0Jik7CiAKLSAgICB2
b2lkIHNjaGVkdWxlVG9SdW5JZk5lZWRlZCgpOwotICAgIHZvaWQgcnVuKCk7Ci0KLSAgICAvLyBB
Y3RpdmVET01PYmplY3Q7Ci0gICAgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNv
bnN0IG92ZXJyaWRlOwotICAgIHZvaWQgc3VzcGVuZChSZWFzb25Gb3JTdXNwZW5zaW9uKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHJlc3VtZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RvcCgpIG92ZXJy
aWRlOwotCi0gICAgc3RydWN0IFRhc2sgewotICAgICAgICBUYXNrU291cmNlIHNvdXJjZTsKLSAg
ICAgICAgVGFza0Z1bmN0aW9uIHRhc2s7Ci0gICAgfTsKLQotICAgIFZlY3RvcjxUYXNrPiBtX3Rh
c2tzOwotICAgIGJvb2wgbV9pc1NjaGVkdWxlZFRvUnVuIHsgZmFsc2UgfTsKKyAgICB2b2lkIHNj
aGVkdWxlVG9SdW4oKSBmaW5hbDsKKyAgICBib29sIGlzQ29udGV4dFRocmVhZCgpIGNvbnN0Owog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDI1MjUwNikKKysrIFNvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDUsMTIgKzEwNSwxNiBAQCBXb3JrZXJHbG9iYWxTY29wZTo6fldvcmtlckdsb2JhbFNjb3BlKCkK
ICAgICB0aHJlYWQoKS53b3JrZXJSZXBvcnRpbmdQcm94eSgpLndvcmtlckdsb2JhbFNjb3BlRGVz
dHJveWVkKCk7CiB9CiAKLUFic3RyYWN0RXZlbnRMb29wJiBXb3JrZXJHbG9iYWxTY29wZTo6ZXZl
bnRMb29wKCkKK0V2ZW50TG9vcFRhc2tHcm91cCYgV29ya2VyR2xvYmFsU2NvcGU6OmV2ZW50TG9v
cCgpCiB7CiAgICAgQVNTRVJUKGlzQ29udGV4dFRocmVhZCgpKTsKLSAgICBpZiAoIW1fZXZlbnRM
b29wKQorICAgIGlmIChVTkxJS0VMWSghbV9kZWZhdWx0VGFza0dyb3VwKSkgewogICAgICAgICBt
X2V2ZW50TG9vcCA9IFdvcmtlckV2ZW50TG9vcDo6Y3JlYXRlKCp0aGlzKTsKLSAgICByZXR1cm4g
Km1fZXZlbnRMb29wOworICAgICAgICBtX2RlZmF1bHRUYXNrR3JvdXAgPSBtYWtlVW5pcXVlPEV2
ZW50TG9vcFRhc2tHcm91cD4oKm1fZXZlbnRMb29wKTsKKyAgICAgICAgaWYgKGFjdGl2ZURPTU9i
amVjdHNBcmVTdG9wcGVkKCkpCisgICAgICAgICAgICBtX2RlZmF1bHRUYXNrR3JvdXAtPnN0b3BB
bmREaXNjYXJkQWxsVGFza3MoKTsKKyAgICB9CisgICAgcmV0dXJuICptX2RlZmF1bHRUYXNrR3Jv
dXA7CiB9CiAKIFN0cmluZyBXb3JrZXJHbG9iYWxTY29wZTo6b3JpZ2luKCkgY29uc3QKQEAgLTEy
NSw2ICsxMjksOCBAQCB2b2lkIFdvcmtlckdsb2JhbFNjb3BlOjpwcmVwYXJlRm9yVGVybWluCiAg
ICAgc3RvcEluZGV4ZWREYXRhYmFzZSgpOwogI2VuZGlmCiAKKyAgICBpZiAobV9kZWZhdWx0VGFz
a0dyb3VwKQorICAgICAgICBtX2RlZmF1bHRUYXNrR3JvdXAtPnN0b3BBbmREaXNjYXJkQWxsVGFz
a3MoKTsKICAgICBzdG9wQWN0aXZlRE9NT2JqZWN0cygpOwogCiAgICAgaWYgKG1fY2FjaGVTdG9y
YWdlQ29ubmVjdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFs
U2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2Jh
bFNjb3BlLmgJKHJldmlzaW9uIDI1MjUwNikKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyR2xvYmFsU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsOSArNDIsOSBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEFic3RyYWN0RXZlbnRMb29wOwogY2xhc3MgQ29udGVu
dFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzOwogY2xhc3MgQ3J5cHRvOworY2xhc3MgRXZl
bnRMb29wVGFza0dyb3VwOwogY2xhc3MgTWljcm90YXNrUXVldWU7CiBjbGFzcyBQZXJmb3JtYW5j
ZTsKIGNsYXNzIFNjaGVkdWxlZEFjdGlvbjsKQEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgYm9vbCBpc0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgQWJzdHJhY3RFdmVudExvb3AmIGV2ZW50
TG9vcCgpIGZpbmFsOworICAgIEV2ZW50TG9vcFRhc2tHcm91cCYgZXZlbnRMb29wKCkgZmluYWw7
CiAKICAgICBjb25zdCBVUkwmIHVybCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fdXJsOyB9CiAg
ICAgU3RyaW5nIG9yaWdpbigpIGNvbnN0IGZpbmFsOwpAQCAtMTk4LDYgKzE5OCw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX3Nob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGlj
eTsKIAogICAgIFJlZlB0cjxXb3JrZXJFdmVudExvb3A+IG1fZXZlbnRMb29wOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxFdmVudExvb3BUYXNrR3JvdXA+IG1fZGVmYXVsdFRhc2tHcm91cDsKIAogICAg
IG11dGFibGUgV29ya2VyRXZlbnRRdWV1ZSBtX2V2ZW50UXVldWU7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3dvcmtsZXRzL1dvcmtsZXRHbG9iYWxTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvd29ya2xldHMvV29ya2xldEdsb2JhbFNjb3BlLmNwcAkocmV2aXNpb24gMjUy
NTA2KQorKysgU291cmNlL1dlYkNvcmUvd29ya2xldHMvV29ya2xldEdsb2JhbFNjb3BlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsOCBAQCB2b2lkIFdvcmtsZXRHbG9iYWxTY29wZTo6
cHJlcGFyZUZvckRlc3RyCiB7CiAgICAgaWYgKCFtX3NjcmlwdCkKICAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChtX2RlZmF1bHRUYXNrR3JvdXApCisgICAgICAgIG1fZGVmYXVsdFRhc2tHcm91cC0+
c3RvcEFuZERpc2NhcmRBbGxUYXNrcygpOwogICAgIHN0b3BBY3RpdmVET01PYmplY3RzKCk7CiAg
ICAgcmVtb3ZlUmVqZWN0ZWRQcm9taXNlVHJhY2tlcigpOwogICAgIHJlbW92ZUFsbEV2ZW50TGlz
dGVuZXJzKCk7CkBAIC05MCwxMSArOTIsMTUgQEAgYXV0byBXb3JrbGV0R2xvYmFsU2NvcGU6OmFs
bFdvcmtsZXRHbG9iYQogICAgIHJldHVybiBzY29wZXM7CiB9CiAKLUFic3RyYWN0RXZlbnRMb29w
JiBXb3JrbGV0R2xvYmFsU2NvcGU6OmV2ZW50TG9vcCgpCitFdmVudExvb3BUYXNrR3JvdXAmIFdv
cmtsZXRHbG9iYWxTY29wZTo6ZXZlbnRMb29wKCkKIHsKLSAgICBpZiAoIW1fZXZlbnRMb29wKQor
ICAgIGlmIChVTkxJS0VMWSghbV9kZWZhdWx0VGFza0dyb3VwKSkgewogICAgICAgICBtX2V2ZW50
TG9vcCA9IFdvcmtlckV2ZW50TG9vcDo6Y3JlYXRlKCp0aGlzKTsKLSAgICByZXR1cm4gKm1fZXZl
bnRMb29wOworICAgICAgICBtX2RlZmF1bHRUYXNrR3JvdXAgPSBtYWtlVW5pcXVlPEV2ZW50TG9v
cFRhc2tHcm91cD4oKm1fZXZlbnRMb29wKTsKKyAgICAgICAgaWYgKGFjdGl2ZURPTU9iamVjdHNB
cmVTdG9wcGVkKCkpCisgICAgICAgICAgICBtX2RlZmF1bHRUYXNrR3JvdXAtPnN0b3BBbmREaXNj
YXJkQWxsVGFza3MoKTsKKyAgICB9CisgICAgcmV0dXJuICptX2RlZmF1bHRUYXNrR3JvdXA7CiB9
CiAKIFN0cmluZyBXb3JrbGV0R2xvYmFsU2NvcGU6Om9yaWdpbigpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS93b3JrbGV0cy9Xb3JrbGV0R2xvYmFsU2NvcGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS93b3JrbGV0cy9Xb3JrbGV0R2xvYmFsU2NvcGUuaAkocmV2aXNpb24gMjUy
NTA2KQorKysgU291cmNlL1dlYkNvcmUvd29ya2xldHMvV29ya2xldEdsb2JhbFNjb3BlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBBYnN0cmFjdEV2ZW50TG9vcDsKK2NsYXNzIEV2ZW50TG9vcFRhc2tHcm91cDsKIGNsYXNz
IFdvcmtlckV2ZW50TG9vcDsKIGNsYXNzIFdvcmtsZXRTY3JpcHRDb250cm9sbGVyOwogCkBAIC02
MCw3ICs2MCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpc1BhaW50V29ya2xldEds
b2JhbFNjb3BlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIEFic3RyYWN0RXZlbnRM
b29wJiBldmVudExvb3AoKSBmaW5hbDsKKyAgICBFdmVudExvb3BUYXNrR3JvdXAmIGV2ZW50TG9v
cCgpIGZpbmFsOwogCiAgICAgY29uc3QgVVJMJiB1cmwoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X2NvZGUudXJsKCk7IH0KICAgICBTdHJpbmcgb3JpZ2luKCkgY29uc3QgZmluYWw7CkBAIC0xMzUs
NiArMTM1LDcgQEAgcHJpdmF0ZToKICAgICBSZWY8U2VjdXJpdHlPcmlnaW4+IG1fdG9wT3JpZ2lu
OwogCiAgICAgUmVmUHRyPFdvcmtlckV2ZW50TG9vcD4gbV9ldmVudExvb3A7CisgICAgc3RkOjp1
bmlxdWVfcHRyPEV2ZW50TG9vcFRhc2tHcm91cD4gbV9kZWZhdWx0VGFza0dyb3VwOwogCiAgICAg
Ly8gRklYTUU6IFRoaXMgaXMgbm90IGltcGxlbWVudGVkIHByb3Blcmx5LCBpdCBqdXN0IHNhdGlz
ZmllcyB0aGUgY29tcGlsZXIuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5MTEzNgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383788</attachid>
            <date>2019-11-18 13:50:50 -0800</date>
            <delta_ts>2019-11-18 13:51:06 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-204263-20191118135050.patch</filename>
            <type>text/plain</type>
            <size>50057</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MjU2MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNyBAQAorMjAxOS0xMS0xNSAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBTaGFyZSBtb3JlIGNvZGUgYmV0
d2VlbiBXaW5kb3dFdmVudExvb3AgYW5kIFdvcmtlckV2ZW50TG9vcCBieSBpbnRyb2R1Y2luZyBF
dmVudExvb3BUYXNrR3JvdXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwNDI2MworCisgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggYWJzdHJhY3RzIHRoZSBsb2dpYyBpbiBXaW5kb3dFdmVudExv
b3AgdG8gZGVhbCB3aXRoIGEgc2V0IG9mIHRhc2tzIGFzc29jaWF0ZWQgd2l0aAorICAgICAgICBh
IHBhcnRpY3VsYXIgZG9jdW1lbnRzIGFsbCBzdXNwZW5kaW5nLCByZXN1bWluZywgb3Igc3RvcHBp
bmcgYXQgdGhlIHNhbWUgdGltZSB1c2luZyBhIG5ldyBhYnN0cmFjdGlvbgorICAgICAgICBjYWxs
ZWQgRXZlbnRMb29wVGFza0dyb3VwIGluIG9yZGVyIHRvIGdyb3VwIHRhc2tzIGZvciBtZWRpYSBj
b2RlIGFuZCBlbHNld2hlcmUuCisKKyAgICAgICAgRWFjaCB0YXNrIGlzIG5vdyByZXByZXNlbnRl
ZCBhcyBhbiBpbnN0YW5jZSBvZiBhIGNvbmNyZXRlIHN1YmNsYXNzIG9mIEV2ZW50TG9vcFRhc2ss
IHdoaWNoIGhhcworICAgICAgICBhIHB1cmUgdmlydHVhbCBleGVjdXRlKCkgbWVtYmVyIGZ1bmN0
aW9uLiBJdHMgcHJpbWFyeSBwdXJwb3NlIGlzIHRvIGtub3cgRXZlbnRMb29wVGFza0dyb3VwIHRv
IHdoaWNoCisgICAgICAgIGVhY2ggdGFzayBiZWxvbmdzLiBPbmUgb2Ygc3ViY2xhc3NzLCBFdmVu
dExvb3BGdW5jdGlvbkRpc3BhdGNoVGFzaywgaXMgdXNlZCB0byBzdG9yZSBhIGNhbGxiYWNrIGZ1
bmN0aW9uCisgICAgICAgIGFuZCBhbm90aGVyIHN1YmNsYXNzLCBBY3RpdmVET01PYmplY3RFdmVu
dERpc3BhdGNoVGFzaywgaXMgdXNlZCB0byBkaXNwYXRjaCBhbiBhc3luYyBldmVudC4KKworICAg
ICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0J3MgZXZlbnRMb29wKCkgbWV0aG9kIG5vdyByZXR1
cm5zIEV2ZW50TG9vcFRhc2tHcm91cC4gQmVjYXVzZSB0aGlzIGdyb3VwIGlzCisgICAgICAgIHNw
ZWNpZmljIHRvIGEgZ2l2ZW4gU2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgd2Ugbm8gbG9uZ2VyIGhh
dmUgdG8gcGFzcyB0aGUgU2NyaXB0RXhlY3V0aW9uQ29udGV4dAorICAgICAgICBpbiBlYWNoIGNh
bGwgdG8gcXVldWVUYXNrIGV2ZXJ5d2hlcmUgaW4gb3VyIGNvZGViYXNlLgorCisgICAgICAgIEZv
ciBub3csIEkga2VwdCBhbGwgdGhlIGNvZGUgaW4gV2luZG93RXZlbnRMb29wLmNwcCB0byBtYWtl
IHRoZSBwYXRjaCByZXZpZXdhYmxlLiBNeSBwbGFuIGlzIHRvIGNyZWF0ZQorICAgICAgICBhIG5l
dyBjcHAgZmlsZSAoZS5nLiBBYnN0cmFjdEV2ZW50TG9vcC5jcHApIGFuZCBtb3ZlIG1vc3Qgb2Yg
Y29kZSB0aGVyZSBpbnN0ZWFkIGFzIGEgZm9sbG93IHVwLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cyBzaW5jZSB0aGVyZSBzaG91bGQgYmUgbm8gb2JzZXJ2YWJsZSBiZWhhdmlvciBjaGFuZ2UuCisK
KyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5cy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYUtleXM6OnNldFNlcnZlckNlcnRpZmljYXRlKToKKyAgICAgICAgKiBN
b2R1bGVzL2VudHJpZXNhcGkvRmlsZVN5c3RlbURpcmVjdG9yeUVudHJ5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpbGVTeXN0ZW1EaXJlY3RvcnlFbnRyeTo6Z2V0RW50cnkpOgorICAgICAgICAq
IE1vZHVsZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRGlyZWN0b3J5UmVhZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbGVTeXN0ZW1EaXJlY3RvcnlSZWFkZXI6OnJlYWRFbnRyaWVzKToKKyAg
ICAgICAgKiBNb2R1bGVzL2VudHJpZXNhcGkvRmlsZVN5c3RlbUVudHJ5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpbGVTeXN0ZW1FbnRyeTo6Z2V0UGFyZW50KToKKyAgICAgICAgKiBNb2R1bGVz
L2VudHJpZXNhcGkvRmlsZVN5c3RlbUZpbGVFbnRyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
aWxlU3lzdGVtRmlsZUVudHJ5OjpmaWxlKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhcmVjb3Jk
ZXIvTWVkaWFSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVJlY29yZGVyOjpz
Y2hlZHVsZURlZmVycmVkVGFzayk6CisgICAgICAgICogTW9kdWxlcy9ub3RpZmljYXRpb25zL05v
dGlmaWNhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb246OnF1ZXVlVGFz
ayk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZTo6cnVuVHJhbnNhY3Rpb24pOgorICAgICAgICAqIE1vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlTWFuYWdlcjo6b3BlbkRhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNl
L1NRTFRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpj
YWxsRXJyb3JDYWxsYmFja0R1ZVRvSW50ZXJydXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNR
TFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyU3VjY2Vzc0NhbGxiYWNrKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTVByb21pc2VEZWZlcnJlZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEZWZlcnJlZFByb21pc2U6OmNhbGxGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpE
ZWZlcnJlZFByb21pc2U6OndoZW5TZXR0bGVkKToKKyAgICAgICAgKiBkb20vQWJzdHJhY3RFdmVu
dExvb3AuaDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TG9vcFRhc2spOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50TG9vcFRhc2s6OnRhc2tTb3VyY2UpOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50TG9vcFRhc2s6Omdyb3VwIGNvbnN0KTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpFdmVudExvb3BUYXNrOjpFdmVudExvb3BUYXNrKTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpFdmVudExvb3BUYXNrR3JvdXApOiBBZGRlZC4gVGhpcyBjbGFzcyByZXByZXNlbnRz
IGEgZ3JvdXAgb2YgdGFza3MuIEZvciBub3csIGVhY2ggZ3JvdXAgaXMKKyAgICAgICAgYSBkaXN0
aW5jdCBTY3JpcHRFeGVjdXRpb25Db250ZXh0LgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29w
VGFza0dyb3VwOjptYXRjaGVzVGFzayBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRMb29wVGFza0dyb3VwOjpzdGFydFJ1bm5pbmcpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50TG9vcFRhc2tHcm91cDo6c3RvcEFuZERpc2NhcmRBbGxUYXNrcyk6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29wVGFza0dyb3VwOjpzdXNwZW5kKTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpFdmVudExvb3BUYXNrR3JvdXA6OnJlc3VtZSk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRMb29wVGFza0dyb3VwOjppc1N0b3BwZWRQZXJtYW5lbnRseSk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29wVGFza0dyb3VwOjppc1N1c3BlbmRl
ZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29wVGFza0dyb3VwOjpoYXNTY2hl
ZHVsZWRUYXNrcyBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29wVGFz
a0dyb3VwOjpxdWV1ZVRhc2spOiBBZGRlZC4KKyAgICAgICAgKiBkb20vQWN0aXZlRE9NT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjdGl2ZURPTU9iamVjdDo6cXVldWVUYXNrSW5FdmVu
dExvb3ApOgorICAgICAgICAoV2ViQ29yZTo6QWN0aXZlRE9NT2JqZWN0RXZlbnREaXNwYXRjaFRh
c2spOiBBZGRlZDsgQSBzdWJjbGFzcyBvZiBFdmVudExvb3BUYXNrIHRvIGRpc3BhdGNoIGFuIGFz
eW5jIGV2ZW50LgorICAgICAgICAoV2ViQ29yZTo6QWN0aXZlRE9NT2JqZWN0RXZlbnREaXNwYXRj
aFRhc2s6OkFjdGl2ZURPTU9iamVjdEV2ZW50RGlzcGF0Y2hUYXNrKTogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpBY3RpdmVET01PYmplY3RFdmVudERpc3BhdGNoVGFzazo6fkFjdGl2ZURPTU9i
amVjdEV2ZW50RGlzcGF0Y2hUYXNrKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpBY3RpdmVE
T01PYmplY3Q6OnF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudEludGVybmFsKTogQWRkZWQuCisgICAg
ICAgICogZG9tL0FjdGl2ZURPTU9iamVjdC5oOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnN0b3BBY3RpdmVET01PYmplY3RzKToKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpldmVudExvb3ApOiBDcmVhdGVzIEV2ZW50TG9vcFRhc2tHcm91
cCBmb3IgdGhpcyBkb2N1bWVudC4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAg
KiBkb20vSWRsZUNhbGxiYWNrQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJZGxl
Q2FsbGJhY2tDb250cm9sbGVyOjpxdWV1ZVRhc2tUb1N0YXJ0SWRsZVBlcmlvZCk6CisgICAgICAg
IChXZWJDb3JlOjpJZGxlQ2FsbGJhY2tDb250cm9sbGVyOjpxdWV1ZVRhc2tUb0ludm9rZUlkbGVD
YWxsYmFja3MpOgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0Lmg6CisgICAg
ICAgICogZG9tL1dpbmRvd0V2ZW50TG9vcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFj
dEV2ZW50TG9vcDo6cXVldWVUYXNrKTogVGhlIGltcGxlbWVudGF0aW9uIG1vdmVkIGZyb20gV2lu
ZG93RXZlbnRMb29wIHRvIEFic3RyYWN0RXZlbnRMb29wLgorICAgICAgICAoV2ViQ29yZTo6QWJz
dHJhY3RFdmVudExvb3A6OnN1c3BlbmQpOiBSZW1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6QWJz
dHJhY3RFdmVudExvb3A6OnJlc3VtZUdyb3VwKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpB
YnN0cmFjdEV2ZW50TG9vcDo6c3RvcEdyb3VwKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpX
aW5kb3dFdmVudExvb3A6OnNjaGVkdWxlVG9SdW4pOiBSZW5hbWVkIGZyb20gV2luZG93RXZlbnRM
b29wOjpzY2hlZHVsZVRvUnVuSWZOZWVkZWQuCisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdEV2
ZW50TG9vcDo6c2NoZWR1bGVUb1J1bklmTmVlZGVkKTogRXh0cmFjdGVkIGZyb20gV2luZG93RXZl
bnRMb29wOjpzY2hlZHVsZVRvUnVuSWZOZWVkZWQuCisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dF
dmVudExvb3A6OmlzQ29udGV4dFRocmVhZCBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6QWJzdHJhY3RFdmVudExvb3A6OnJ1bik6IFRoZSBpbXBsZW1lbnRhdGlvbiBtb3ZlZCBmcm9t
IFdpbmRvd0V2ZW50TG9vcCB0byBBYnN0cmFjdEV2ZW50TG9vcC4KKyAgICAgICAgKFdlYkNvcmU6
OkFic3RyYWN0RXZlbnRMb29wOjpjbGVhckFsbFRhc2tzKTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpFdmVudExvb3BGdW5jdGlvbkRpc3BhdGNoVGFzayk6IEFkZGVkOyBBIHN1YmNsYXNzIG9m
IEV2ZW50TG9vcFRhc2sgdG8gY2FsbCBhIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRMb29wRnVuY3Rpb25EaXNwYXRjaFRhc2s6OkV2ZW50TG9vcEZ1bmN0aW9uRGlzcGF0Y2hUYXNr
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFdmVudExvb3BUYXNrR3JvdXA6OnF1ZXVlVGFz
ayk6IEFkZGVkLgorICAgICAgICAqIGRvbS9XaW5kb3dFdmVudExvb3AuaDoKKyAgICAgICAgKiBm
aWxlYXBpL0ZpbGVSZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6ZW5x
dWV1ZVRhc2spOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkludGVybmFsczo6cXVldWVUYXNrKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckV2
ZW50TG9vcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJFdmVudExvb3A6OldvcmtlckV2
ZW50TG9vcCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJFdmVudExvb3A6OnF1ZXVlVGFzayk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJFdmVudExvb3A6OmFjdGl2ZURPTU9i
amVjdE5hbWUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyRXZlbnRM
b29wOjpzdXNwZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckV2ZW50TG9v
cDo6cmVzdW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckV2ZW50TG9vcDo6
c3RvcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJFdmVudExvb3A6OnNjaGVk
dWxlVG9SdW4pOiBFeHRyYWN0ZWQgZnJvbSBzY2hlZHVsZVRvUnVuSWZOZWVkZWQuCisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJFdmVudExvb3A6OnNjaGVkdWxlVG9SdW5JZk5lZWRlZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJFdmVudExvb3A6OnJ1bik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJFdmVudExvb3A6OmlzQ29udGV4dFRocmVhZCBjb25zdCk6
IEFkZGVkLgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyRXZlbnRMb29wLmg6CisgICAgICAgIChX
ZWJDb3JlOjpXb3JrZXJFdmVudExvb3ApOiBUaGlzIGNsYXNzIGlzIG5vIGxvbmdlciBhbiBhY3Rp
dmUgRE9NIG9iamVjdC4gV29ya2VyR2xvYmFsU2NvcGUgYW5kIFdvcmtlckdsb2JhbFNjb3BlCisg
ICAgICAgIG1hbnVhbGx5IHN0b3AgdGhlIHRhc2sgZ3JvdXAgYXNzb2NpYXRlZCB3aXRoIGl0Lgor
ICAgICAgICAqIHdvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V29ya2VyR2xvYmFsU2NvcGU6OmV2ZW50TG9vcCk6IENyZWF0ZSB0aGUgZGVmYXVsdCB0YXNr
IGdyb3VwIGZvciB0aGlzIHNjcmlwdCBleGVjdXRpb24gY29udGV4dC4KKyAgICAgICAgKFdlYkNv
cmU6Oldvcmtlckdsb2JhbFNjb3BlOjpwcmVwYXJlRm9yVGVybWluYXRpb24pOiBTdG9wIHRoZSBk
ZWZhdWx0IHRhc2sgZ3JvdXAuCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5o
OgorICAgICAgICAqIHdvcmtsZXRzL1dvcmtsZXRHbG9iYWxTY29wZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXb3JrbGV0R2xvYmFsU2NvcGU6OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6IFNpbWls
YXIgdG8gV29ya2VyR2xvYmFsU2NvcGU6OnByZXBhcmVGb3JUZXJtaW5hdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OldvcmtsZXRHbG9iYWxTY29wZTo6ZXZlbnRMb29wKTogU2ltaWxhciB0byBXb3Jr
ZXJHbG9iYWxTY29wZTo6ZXZlbnRMb29wLgorICAgICAgICAqIHdvcmtsZXRzL1dvcmtsZXRHbG9i
YWxTY29wZS5oOgorCiAyMDE5LTExLTE4ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5j
b20+CiAKICAgICAgICAgUmV0dXJuIHZhbHVlIG9mIENTU1Byb3BlcnR5QW5pbWF0aW9uOjpibGVu
ZFByb3BlcnRpZXMoKSBpc24ndCB1c2VkIGFueXdoZXJlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5cy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleXMuY3BwCShyZXZpc2lvbiAy
NTI1NjApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIE1lZGlhS2V5czo6
c2V0U2VydmVyQ2VydGlmaWNhdGUoU2NyCiAgICAgLy8gNC4gTGV0IHByb21pc2UgYmUgYSBuZXcg
cHJvbWlzZS4KICAgICAvLyA1LiBSdW4gdGhlIGZvbGxvd2luZyBzdGVwcyBpbiBwYXJhbGxlbDoK
IAotICAgIGNvbnRleHQuZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtp
bmcsIGNvbnRleHQsIFt0aGlzLCBjZXJ0aWZpY2F0ZSA9IFdURk1vdmUoY2VydGlmaWNhdGUpLCBw
cm9taXNlID0gV1RGTW92ZShwcm9taXNlKV0gKCkgbXV0YWJsZSB7CisgICAgY29udGV4dC5ldmVu
dExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgW3RoaXMsIGNlcnRpZmlj
YXRlID0gV1RGTW92ZShjZXJ0aWZpY2F0ZSksIHByb21pc2UgPSBXVEZNb3ZlKHByb21pc2UpXSAo
KSBtdXRhYmxlIHsKICAgICAgICAgLy8gNS4xLiBVc2UgdGhpcyBvYmplY3QncyBjZG0gaW5zdGFu
Y2UgdG8gcHJvY2VzcyBjZXJ0aWZpY2F0ZS4KICAgICAgICAgaWYgKG1faW5zdGFuY2UtPnNldFNl
cnZlckNlcnRpZmljYXRlKFdURk1vdmUoY2VydGlmaWNhdGUpKSA9PSBDRE1JbnN0YW5jZTo6RmFp
bGVkKSB7CiAgICAgICAgICAgICAvLyA1LjIuIElmIHRoZSBwcmVjZWRpbmcgc3RlcCBmYWlsZWQs
IHJlc29sdmUgcHJvbWlzZSB3aXRoIGEgbmV3IERPTUV4Y2VwdGlvbiB3aG9zZSBuYW1lIGlzIHRo
ZSBhcHByb3ByaWF0ZSBlcnJvciBuYW1lLgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9l
bnRyaWVzYXBpL0ZpbGVTeXN0ZW1EaXJlY3RvcnlFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0ZW1EaXJlY3RvcnlFbnRyeS5j
cHAJKHJldmlzaW9uIDI1MjU2MCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW50cmllc2Fw
aS9GaWxlU3lzdGVtRGlyZWN0b3J5RW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1
Nyw3IEBAIHZvaWQgRmlsZVN5c3RlbURpcmVjdG9yeUVudHJ5OjpnZXRFbnRyeSgKICAgICAgICAg
YXV0byogZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpOwogICAgICAgICBpZiAocmVzdWx0Lmhh
c0V4Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICBpZiAoZXJyb3JDYWxsYmFjayAmJiBkb2N1bWVu
dCkgewotICAgICAgICAgICAgICAgIGRvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFz
a1NvdXJjZTo6TmV0d29ya2luZywgKmRvY3VtZW50LCBbZXJyb3JDYWxsYmFjayA9IFdURk1vdmUo
ZXJyb3JDYWxsYmFjayksIGV4Y2VwdGlvbiA9IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCksIHBl
bmRpbmdBY3Rpdml0eSA9IFdURk1vdmUocGVuZGluZ0FjdGl2aXR5KV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgICAgICBkb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6
Ok5ldHdvcmtpbmcsIFtlcnJvckNhbGxiYWNrID0gV1RGTW92ZShlcnJvckNhbGxiYWNrKSwgZXhj
ZXB0aW9uID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSwgcGVuZGluZ0FjdGl2aXR5ID0gV1RG
TW92ZShwZW5kaW5nQWN0aXZpdHkpXSgpIG11dGFibGUgewogICAgICAgICAgICAgICAgICAgICBl
cnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChET01FeGNlcHRpb246OmNyZWF0ZShXVEZNb3ZlKGV4
Y2VwdGlvbikpKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KQEAgLTY2LDE0
ICs2NiwxNCBAQCB2b2lkIEZpbGVTeXN0ZW1EaXJlY3RvcnlFbnRyeTo6Z2V0RW50cnkoCiAgICAg
ICAgIGF1dG8gZW50cnkgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7CiAgICAgICAgIGlm
ICghbWF0Y2hlcyhlbnRyeSkpIHsKICAgICAgICAgICAgIGlmIChlcnJvckNhbGxiYWNrICYmIGRv
Y3VtZW50KSB7Ci0gICAgICAgICAgICAgICAgZG9jdW1lbnQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFz
ayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCAqZG9jdW1lbnQsIFtlcnJvckNhbGxiYWNrID0gV1RG
TW92ZShlcnJvckNhbGxiYWNrKSwgcGVuZGluZ0FjdGl2aXR5ID0gV1RGTW92ZShwZW5kaW5nQWN0
aXZpdHkpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGRvY3VtZW50LT5ldmVudExvb3Ao
KS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgW2Vycm9yQ2FsbGJhY2sgPSBXVEZN
b3ZlKGVycm9yQ2FsbGJhY2spLCBwZW5kaW5nQWN0aXZpdHkgPSBXVEZNb3ZlKHBlbmRpbmdBY3Rp
dml0eSldKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2stPmhh
bmRsZUV2ZW50KERPTUV4Y2VwdGlvbjo6Y3JlYXRlKEV4Y2VwdGlvbiB7IFR5cGVNaXNtYXRjaEVy
cm9yLCAiRW50cnkgYXQgZ2l2ZW4gcGF0aCBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCB0eXBlIl9z
IH0pKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAoc3VjY2Vzc0NhbGxiYWNrICYmIGRvY3VtZW50
KSB7Ci0gICAgICAgICAgICBkb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3Vy
Y2U6Ok5ldHdvcmtpbmcsICpkb2N1bWVudCwgW3N1Y2Nlc3NDYWxsYmFjayA9IFdURk1vdmUoc3Vj
Y2Vzc0NhbGxiYWNrKSwgZW50cnkgPSBXVEZNb3ZlKGVudHJ5KSwgcGVuZGluZ0FjdGl2aXR5ID0g
V1RGTW92ZShwZW5kaW5nQWN0aXZpdHkpXSgpIG11dGFibGUgeworICAgICAgICAgICAgZG9jdW1l
bnQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCBbc3VjY2Vz
c0NhbGxiYWNrID0gV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spLCBlbnRyeSA9IFdURk1vdmUoZW50
cnkpLCBwZW5kaW5nQWN0aXZpdHkgPSBXVEZNb3ZlKHBlbmRpbmdBY3Rpdml0eSldKCkgbXV0YWJs
ZSB7CiAgICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrLT5oYW5kbGVFdmVudChXVEZNb3Zl
KGVudHJ5KSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0ZW1EaXJlY3RvcnlSZWFkZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRGly
ZWN0b3J5UmVhZGVyLmNwcAkocmV2aXNpb24gMjUyNTYwKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0ZW1EaXJlY3RvcnlSZWFkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04OSw3ICs4OSw3IEBAIHZvaWQgRmlsZVN5c3RlbURpcmVjdG9yeVJlYWRlcjo6cmVh
ZEVudHIKICAgICAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKICAgICAgICAg
ICAgICAgICBtX2Vycm9yID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKICAgICAgICAgICAg
ICAgICBpZiAoZXJyb3JDYWxsYmFjayAmJiBkb2N1bWVudCkgewotICAgICAgICAgICAgICAgICAg
ICBkb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcs
ICpkb2N1bWVudCwgW3RoaXMsIGVycm9yQ2FsbGJhY2sgPSBXVEZNb3ZlKGVycm9yQ2FsbGJhY2sp
LCBwZW5kaW5nQWN0aXZpdHkgPSBXVEZNb3ZlKHBlbmRpbmdBY3Rpdml0eSldKCkgbXV0YWJsZSB7
CisgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFz
a1NvdXJjZTo6TmV0d29ya2luZywgW3RoaXMsIGVycm9yQ2FsbGJhY2sgPSBXVEZNb3ZlKGVycm9y
Q2FsbGJhY2spLCBwZW5kaW5nQWN0aXZpdHkgPSBXVEZNb3ZlKHBlbmRpbmdBY3Rpdml0eSldKCkg
bXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrLT5oYW5kbGVF
dmVudChET01FeGNlcHRpb246OmNyZWF0ZSgqbV9lcnJvcikpOwogICAgICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgICAgICB9CkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgRmlsZVN5c3Rl
bURpcmVjdG9yeVJlYWRlcjo6cmVhZEVudHIKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1f
aXNEb25lID0gdHJ1ZTsKICAgICAgICAgICAgIGlmIChkb2N1bWVudCkgewotICAgICAgICAgICAg
ICAgIGRvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2lu
ZywgKmRvY3VtZW50LCBbc3VjY2Vzc0NhbGxiYWNrID0gV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2sp
LCBwZW5kaW5nQWN0aXZpdHkgPSBXVEZNb3ZlKHBlbmRpbmdBY3Rpdml0eSksIHJlc3VsdCA9IHJl
c3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBk
b2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIFtz
dWNjZXNzQ2FsbGJhY2sgPSBXVEZNb3ZlKHN1Y2Nlc3NDYWxsYmFjayksIHBlbmRpbmdBY3Rpdml0
eSA9IFdURk1vdmUocGVuZGluZ0FjdGl2aXR5KSwgcmVzdWx0ID0gcmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpXSgpIG11dGFibGUgewogICAgICAgICAgICAgICAgICAgICBzdWNjZXNzQ2FsbGJh
Y2stPmhhbmRsZUV2ZW50KFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VudHJpZXNhcGkvRmls
ZVN5c3RlbUVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Vu
dHJpZXNhcGkvRmlsZVN5c3RlbUVudHJ5LmNwcAkocmV2aXNpb24gMjUyNTYwKQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0ZW1FbnRyeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBGaWxlU3lzdGVtRW50cnk6OmdldFBhcmVudChT
Y3JpcHRFeAogICAgICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgIGRvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29y
a2luZywgKmRvY3VtZW50LCBbc3VjY2Vzc0NhbGxiYWNrID0gV1RGTW92ZShzdWNjZXNzQ2FsbGJh
Y2spLCBlcnJvckNhbGxiYWNrID0gV1RGTW92ZShlcnJvckNhbGxiYWNrKSwgcmVzdWx0ID0gV1RG
TW92ZShyZXN1bHQpLCBwZW5kaW5nQWN0aXZpdHkgPSBXVEZNb3ZlKHBlbmRpbmdBY3Rpdml0eSld
KCkgbXV0YWJsZSB7CisgICAgICAgIGRvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFz
a1NvdXJjZTo6TmV0d29ya2luZywgW3N1Y2Nlc3NDYWxsYmFjayA9IFdURk1vdmUoc3VjY2Vzc0Nh
bGxiYWNrKSwgZXJyb3JDYWxsYmFjayA9IFdURk1vdmUoZXJyb3JDYWxsYmFjayksIHJlc3VsdCA9
IFdURk1vdmUocmVzdWx0KSwgcGVuZGluZ0FjdGl2aXR5ID0gV1RGTW92ZShwZW5kaW5nQWN0aXZp
dHkpXSgpIG11dGFibGUgewogICAgICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkg
ewogICAgICAgICAgICAgICAgIGlmIChlcnJvckNhbGxiYWNrKQogICAgICAgICAgICAgICAgICAg
ICBlcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChET01FeGNlcHRpb246OmNyZWF0ZShyZXN1bHQu
cmVsZWFzZUV4Y2VwdGlvbigpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VudHJp
ZXNhcGkvRmlsZVN5c3RlbUZpbGVFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0ZW1GaWxlRW50cnkuY3BwCShyZXZpc2lvbiAy
NTI1NjApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VudHJpZXNhcGkvRmlsZVN5c3RlbUZp
bGVFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgdm9pZCBGaWxlU3lz
dGVtRmlsZUVudHJ5OjpmaWxlKFJlZjxGaWxlQwogICAgICAgICBpZiAoIWRvY3VtZW50KQogICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGRvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRh
c2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgKmRvY3VtZW50LCBbc3VjY2Vzc0NhbGxiYWNrID0g
V1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spLCBlcnJvckNhbGxiYWNrID0gV1RGTW92ZShlcnJvckNh
bGxiYWNrKSwgcmVzdWx0ID0gV1RGTW92ZShyZXN1bHQpLCBwZW5kaW5nQWN0aXZpdHkgPSBXVEZN
b3ZlKHBlbmRpbmdBY3Rpdml0eSldKCkgbXV0YWJsZSB7CisgICAgICAgIGRvY3VtZW50LT5ldmVu
dExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgW3N1Y2Nlc3NDYWxsYmFj
ayA9IFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgZXJyb3JDYWxsYmFjayA9IFdURk1vdmUoZXJy
b3JDYWxsYmFjayksIHJlc3VsdCA9IFdURk1vdmUocmVzdWx0KSwgcGVuZGluZ0FjdGl2aXR5ID0g
V1RGTW92ZShwZW5kaW5nQWN0aXZpdHkpXSgpIG11dGFibGUgewogICAgICAgICAgICAgaWYgKHJl
c3VsdC5oYXNFeGNlcHRpb24oKSkgewogICAgICAgICAgICAgICAgIGlmIChlcnJvckNhbGxiYWNr
KQogICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChET01FeGNl
cHRpb246OmNyZWF0ZShyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhcmVjb3JkZXIvTWVkaWFSZWNvcmRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXJlY29yZGVyL01lZGlhUmVjb3JkZXIu
Y3BwCShyZXZpc2lvbiAyNTI1NjApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhcmVj
b3JkZXIvTWVkaWFSZWNvcmRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNiw3ICsyMTYsNyBA
QCB2b2lkIE1lZGlhUmVjb3JkZXI6OnNjaGVkdWxlRGVmZXJyZWRUYXNrCiAgICAgaWYgKCFkb2N1
bWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZG9jdW1lbnQtPmV2ZW50TG9vcCgpLnF1ZXVl
VGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCAqZG9jdW1lbnQsIFtwZW5kaW5nQWN0aXZpdHkg
PSBtYWtlUGVuZGluZ0FjdGl2aXR5KCp0aGlzKSwgZnVuY3Rpb24gPSBXVEZNb3ZlKGZ1bmN0aW9u
KV0geworICAgIGRvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0
d29ya2luZywgW3BlbmRpbmdBY3Rpdml0eSA9IG1ha2VQZW5kaW5nQWN0aXZpdHkoKnRoaXMpLCBm
dW5jdGlvbiA9IFdURk1vdmUoZnVuY3Rpb24pXSB7CiAgICAgICAgIGZ1bmN0aW9uKCk7CiAgICAg
fSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZp
Y2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNh
dGlvbnMvTm90aWZpY2F0aW9uLmNwcAkocmV2aXNpb24gMjUyNTYwKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIE5vdGlmaWNhdGlvbjo6cXVldWVUYXNrKEZ1bmN0aW9u
PHZvCiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZG9jdW1lbnQt
PmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpVc2VySW50ZXJhY3Rpb24sICpkb2N1
bWVudCwgV1RGTW92ZSh0YXNrKSk7CisgICAgZG9jdW1lbnQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFz
ayhUYXNrU291cmNlOjpVc2VySW50ZXJhY3Rpb24sIFdURk1vdmUodGFzaykpOwogfQogCiB2b2lk
IE5vdGlmaWNhdGlvbjo6ZGlzcGF0Y2hTaG93RXZlbnQoKQpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDI1MjU2MCkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02ODksNyArNjg5LDcgQEAgdm9pZCBEYXRhYmFzZTo6cnVuVHJhbnNhY3Rp
b24oUmVmUHRyPFNRTAogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fdHJhbnNhY3Rpb25JblByb2dy
ZXNzTXV0ZXgpOwogICAgIGlmICghbV9pc1RyYW5zYWN0aW9uUXVldWVFbmFibGVkKSB7CiAgICAg
ICAgIGlmIChlcnJvckNhbGxiYWNrKSB7Ci0gICAgICAgICAgICBtX2RvY3VtZW50LT5ldmVudExv
b3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgbV9kb2N1bWVudCwgW2Vycm9y
Q2FsbGJhY2sgPSBtYWtlUmVmKCplcnJvckNhbGxiYWNrKV0oKSB7CisgICAgICAgICAgICBtX2Rv
Y3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgW2Vy
cm9yQ2FsbGJhY2sgPSBtYWtlUmVmKCplcnJvckNhbGxiYWNrKV0oKSB7CiAgICAgICAgICAgICAg
ICAgZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQoU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6
VU5LTk9XTl9FUlIsICJkYXRhYmFzZSBoYXMgYmVlbiBjbG9zZWQiKSk7CiAgICAgICAgICAgICB9
KTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcAkocmV2aXNpb24gMjUyNTYwKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMTAsNyArMjEwLDcgQEAgRXhjZXB0aW9uT3I8UmVmPERhdGFiYXNlPj4g
RGF0YWJhc2VNYW5hZwogICAgIGlmIChkYXRhYmFzZS0+aXNOZXcoKSAmJiBjcmVhdGlvbkNhbGxi
YWNrLmdldCgpKSB7CiAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBEYXRhYmFz
ZUNyZWF0aW9uQ2FsbGJhY2tUYXNrIGZvciBkYXRhYmFzZSAlcFxuIiwgZGF0YWJhc2UuZ2V0KCkp
OwogICAgICAgICBkYXRhYmFzZS0+c2V0SGFzUGVuZGluZ0NyZWF0aW9uRXZlbnQodHJ1ZSk7Ci0g
ICAgICAgIGRhdGFiYXNlLT5tX2RvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1Nv
dXJjZTo6TmV0d29ya2luZywgZGF0YWJhc2UtPm1fZG9jdW1lbnQsIFtjcmVhdGlvbkNhbGxiYWNr
LCBkYXRhYmFzZV0oKSB7CisgICAgICAgIGRhdGFiYXNlLT5tX2RvY3VtZW50LT5ldmVudExvb3Ao
KS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgW2NyZWF0aW9uQ2FsbGJhY2ssIGRh
dGFiYXNlXSgpIHsKICAgICAgICAgICAgIGNyZWF0aW9uQ2FsbGJhY2stPmhhbmRsZUV2ZW50KCpk
YXRhYmFzZSk7CiAgICAgICAgICAgICBkYXRhYmFzZS0+c2V0SGFzUGVuZGluZ0NyZWF0aW9uRXZl
bnQoZmFsc2UpOwogICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uY3BwCShyZXZpc2lvbiAyNTI1NjAp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246
OmNhbGxFcnJvckNhbGxiYWNrRHUKICAgICBpZiAoIWVycm9yQ2FsbGJhY2spCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fZGF0YWJhc2UtPmRvY3VtZW50KCkuZXZlbnRMb29wKCkucXVldWVUYXNr
KFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIG1fZGF0YWJhc2UtPmRvY3VtZW50KCksIFtlcnJvckNh
bGxiYWNrID0gV1RGTW92ZShlcnJvckNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICBtX2RhdGFi
YXNlLT5kb2N1bWVudCgpLmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3Jr
aW5nLCBbZXJyb3JDYWxsYmFjayA9IFdURk1vdmUoZXJyb3JDYWxsYmFjayldKCkgbXV0YWJsZSB7
CiAgICAgICAgIGVycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KFNRTEVycm9yOjpjcmVhdGUoU1FM
RXJyb3I6OkRBVEFCQVNFX0VSUiwgInRoZSBkYXRhYmFzZSB3YXMgY2xvc2VkIikpOwogICAgIH0p
OwogfQpAQCAtNDE1LDcgKzQxNSw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJUcmFu
c2FjdGlvbkUKICAgICAvLyBlcnJvciB0byBoYXZlIG9jY3VycmVkIGluIHRoaXMgdHJhbnNhY3Rp
b24uCiAgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFj
ayA9IG1fZXJyb3JDYWxsYmFja1dyYXBwZXIudW53cmFwKCk7CiAgICAgaWYgKGVycm9yQ2FsbGJh
Y2spIHsKLSAgICAgICAgbV9kYXRhYmFzZS0+ZG9jdW1lbnQoKS5ldmVudExvb3AoKS5xdWV1ZVRh
c2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgbV9kYXRhYmFzZS0+ZG9jdW1lbnQoKSwgW2Vycm9y
Q2FsbGJhY2sgPSBXVEZNb3ZlKGVycm9yQ2FsbGJhY2spLCB0cmFuc2FjdGlvbkVycm9yID0gbV90
cmFuc2FjdGlvbkVycm9yXSgpIG11dGFibGUgeworICAgICAgICBtX2RhdGFiYXNlLT5kb2N1bWVu
dCgpLmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCBbZXJyb3JD
YWxsYmFjayA9IFdURk1vdmUoZXJyb3JDYWxsYmFjayksIHRyYW5zYWN0aW9uRXJyb3IgPSBtX3Ry
YW5zYWN0aW9uRXJyb3JdKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBlcnJvckNhbGxiYWNrLT5o
YW5kbGVFdmVudCgqdHJhbnNhY3Rpb25FcnJvcik7CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTQ2
Niw3ICs0NjYsNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyU3VjY2Vzc0NhbGxiCiAg
ICAgLy8gU3BlYyA0LjMuMi44OiBEZWxpdmVyIHN1Y2Nlc3MgY2FsbGJhY2suCiAgICAgUmVmUHRy
PFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrID0gbV9zdWNjZXNzQ2FsbGJhY2tXcmFwcGVy
LnVud3JhcCgpOwogICAgIGlmIChzdWNjZXNzQ2FsbGJhY2spIHsKLSAgICAgICAgbV9kYXRhYmFz
ZS0+ZG9jdW1lbnQoKS5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2lu
ZywgbV9kYXRhYmFzZS0+ZG9jdW1lbnQoKSwgW3N1Y2Nlc3NDYWxsYmFjayA9IFdURk1vdmUoc3Vj
Y2Vzc0NhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgbV9kYXRhYmFzZS0+ZG9jdW1lbnQo
KS5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgW3N1Y2Nlc3ND
YWxsYmFjayA9IFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKV0oKSBtdXRhYmxlIHsKICAgICAgICAg
ICAgIHN1Y2Nlc3NDYWxsYmFjay0+aGFuZGxlRXZlbnQoKTsKICAgICAgICAgfSk7CiAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlRGVmZXJyZWQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZURl
ZmVycmVkLmNwcAkocmV2aXNpb24gMjUyNTYwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Qcm9taXNlRGVmZXJyZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3
IEBAIHZvaWQgRGVmZXJyZWRQcm9taXNlOjpjYWxsRnVuY3Rpb24oSlNHbG8KIAogICAgIGlmIChh
Y3RpdmVET01PYmplY3RzQXJlU3VzcGVuZGVkKCkpIHsKICAgICAgICAgSlNDOjpTdHJvbmc8SlND
OjpVbmtub3duLCBTaG91bGRTdHJvbmdEZXN0cnVjdG9yR3JhYkxvY2s6Olllcz4gc3Ryb25nUmVz
b2x1dGlvbihsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCksIHJlc29sdXRpb24pOwotICAgICAgICBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNl
OjpOZXR3b3JraW5nLCAqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBtb2RlLCBzdHJvbmdSZXNvbHV0aW9uID0gV1RGTW92ZShz
dHJvbmdSZXNvbHV0aW9uKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgW3Ro
aXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgbW9kZSwgc3Ryb25nUmVzb2x1dGlv
biA9IFdURk1vdmUoc3Ryb25nUmVzb2x1dGlvbildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBp
ZiAoc2hvdWxkSWdub3JlUmVxdWVzdFRvRnVsZmlsbCgpKQogICAgICAgICAgICAgICAgIHJldHVy
bjsKIApAQCAtODMsNyArODMsNyBAQCB2b2lkIERlZmVycmVkUHJvbWlzZTo6d2hlblNldHRsZWQo
RnVuY3RpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChhY3RpdmVET01PYmplY3RzQXJlU3Vz
cGVuZGVkKCkpIHsKLSAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudExvb3Ao
KS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgKnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6TmV0d29ya2luZywgW3Ro
aXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIHdoZW5TZXR0bGVkKFdURk1vdmUoY2Fs
bGJhY2spKTsKICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9BYnN0cmFjdEV2ZW50TG9vcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9BYnN0cmFjdEV2ZW50TG9vcC5oCShyZXZpc2lvbiAyNTI1NjApCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vQWJzdHJhY3RFdmVudExvb3AuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMjEgKzI4
LDEyNSBAQAogI2luY2x1ZGUgIlRhc2tTb3VyY2UuaCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24u
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEV2ZW50TG9vcFRhc2tHcm91cDsK
K2NsYXNzIEV2ZW50VGFyZ2V0OwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAorY2xh
c3MgRXZlbnRMb29wVGFzayB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRXZlbnRMb29wVGFz
ayk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IH5FdmVudExvb3BUYXNrKCkgPSBkZWZhdWx0OworCisgICAgVGFza1NvdXJjZSB0YXNrU291cmNl
KCkgeyByZXR1cm4gbV90YXNrU291cmNlOyB9CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoKSA9
IDA7CisKKyAgICBFdmVudExvb3BUYXNrR3JvdXAqIGdyb3VwKCkgY29uc3QgeyByZXR1cm4gbV9n
cm91cC5nZXQoKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgRXZlbnRMb29wVGFzayhUYXNrU291cmNl
LCBFdmVudExvb3BUYXNrR3JvdXAmKTsKKworcHJpdmF0ZToKKyAgICBjb25zdCBUYXNrU291cmNl
IG1fdGFza1NvdXJjZTsKKyAgICBXZWFrUHRyPEV2ZW50TG9vcFRhc2tHcm91cD4gbV9ncm91cDsK
K307CisKIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFw
aXMuaHRtbCNldmVudC1sb29wCi1jbGFzcyBBYnN0cmFjdEV2ZW50TG9vcCA6IHB1YmxpYyBSZWZD
b3VudGVkPEFic3RyYWN0RXZlbnRMb29wPiB7CitjbGFzcyBBYnN0cmFjdEV2ZW50TG9vcCA6IHB1
YmxpYyBSZWZDb3VudGVkPEFic3RyYWN0RXZlbnRMb29wPiwgcHVibGljIENhbk1ha2VXZWFrUHRy
PEFic3RyYWN0RXZlbnRMb29wPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWJzdHJhY3RFdmVu
dExvb3AoKSA9IGRlZmF1bHQ7CiAKLSAgICB0eXBlZGVmIFdURjo6RnVuY3Rpb248dm9pZCAoKT4g
VGFza0Z1bmN0aW9uOwotICAgIHZpcnR1YWwgdm9pZCBxdWV1ZVRhc2soVGFza1NvdXJjZSwgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYsIFRhc2tGdW5jdGlvbiYmKSA9IDA7CisgICAgdHlwZWRlZiBG
dW5jdGlvbjx2b2lkICgpPiBUYXNrRnVuY3Rpb247CisgICAgdm9pZCBxdWV1ZVRhc2soc3RkOjp1
bmlxdWVfcHRyPEV2ZW50TG9vcFRhc2s+JiYpOworCisgICAgdm9pZCByZXN1bWVHcm91cChFdmVu
dExvb3BUYXNrR3JvdXAmKTsKKyAgICB2b2lkIHN0b3BHcm91cChFdmVudExvb3BUYXNrR3JvdXAm
KTsKIAogcHJvdGVjdGVkOgogICAgIEFic3RyYWN0RXZlbnRMb29wKCkgPSBkZWZhdWx0OworICAg
IHZvaWQgcnVuKCk7CisgICAgdm9pZCBjbGVhckFsbFRhc2tzKCk7CisKK3ByaXZhdGU6CisgICAg
dm9pZCBzY2hlZHVsZVRvUnVuSWZOZWVkZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVU
b1J1bigpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZXh0VGhyZWFkKCkgY29uc3QgPSAw
OworCisgICAgLy8gVXNlIGEgZ2xvYmFsIHF1ZXVlIGluc3RlYWQgb2YgbXVsdGlwbGUgdGFzayBx
dWV1ZXMgc2luY2UgSFRNTDUgc3BlYyBhbGxvd3MgVUEgdG8gcGljayBhcmJpdHJhcnkgcXVldWUu
CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxFdmVudExvb3BUYXNrPj4gbV90YXNrczsKKyAg
ICBXZWFrSGFzaFNldDxFdmVudExvb3BUYXNrR3JvdXA+IG1fZ3JvdXBzV2l0aFN1c3BlbmVkVGFz
a3M7CisgICAgYm9vbCBtX2lzU2NoZWR1bGVkVG9SdW4geyBmYWxzZSB9OwogfTsKIAorY2xhc3Mg
RXZlbnRMb29wVGFza0dyb3VwIDogcHVibGljIENhbk1ha2VXZWFrUHRyPEV2ZW50TG9vcFRhc2tH
cm91cD4geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEV2ZW50TG9vcFRhc2tHcm91cCk7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBFdmVudExvb3BUYXNr
R3JvdXAoQWJzdHJhY3RFdmVudExvb3AmIGV2ZW50TG9vcCkKKyAgICAgICAgOiBtX2V2ZW50TG9v
cChtYWtlV2Vha1B0cihldmVudExvb3ApKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIG1hdGNo
ZXNUYXNrKEV2ZW50TG9vcFRhc2smIHRhc2spIGNvbnN0CisgICAgeworICAgICAgICBhdXRvKiBn
cm91cCA9IHRhc2suZ3JvdXAoKTsKKyAgICAgICAgcmV0dXJuIGdyb3VwID09IHRoaXM7CisgICAg
fQorCisgICAgdm9pZCBzdG9wQW5kRGlzY2FyZEFsbFRhc2tzKCkKKyAgICB7CisgICAgICAgIG1f
c3RhdGUgPSBTdGF0ZTo6U3RvcHBlZDsKKyAgICAgICAgaWYgKGF1dG8qIGV2ZW50TG9vcCA9IG1f
ZXZlbnRMb29wLmdldCgpKQorICAgICAgICAgICAgZXZlbnRMb29wLT5zdG9wR3JvdXAoKnRoaXMp
OworICAgIH0KKworICAgIHZvaWQgc3VzcGVuZCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9z
dGF0ZSAhPSBTdGF0ZTo6U3RvcHBlZCk7CisgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6U3VzcGVu
ZGVkOworICAgICAgICAvLyBXZSBkb24ndCByZW1vdmUgc3VzcGVuZGVkIHRhc2tzIHRvIHByZXNl
cnZlIHRoZSBvcmRlcmluZy4KKyAgICAgICAgLy8gQWJzdHJhY3RFdmVudExvb3A6OnJ1biBjaGVj
a3Mgd2hldGhlciBlYWNoIHRhc2sncyBncm91cCBpcyBzdXNwZW5kZWQgb3Igbm90LgorICAgIH0K
KworICAgIHZvaWQgcmVzdW1lKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3N0YXRlICE9IFN0
YXRlOjpTdG9wcGVkKTsKKyAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpSdW5uaW5nOworICAgICAg
ICBpZiAoYXV0byogZXZlbnRMb29wID0gbV9ldmVudExvb3AuZ2V0KCkpCisgICAgICAgICAgICBl
dmVudExvb3AtPnJlc3VtZUdyb3VwKCp0aGlzKTsKKyAgICB9CisKKyAgICBib29sIGlzU3RvcHBl
ZFBlcm1hbmVudGx5KCkgeyByZXR1cm4gbV9zdGF0ZSA9PSBTdGF0ZTo6U3RvcHBlZDsgfQorICAg
IGJvb2wgaXNTdXNwZW5kZWQoKSB7IHJldHVybiBtX3N0YXRlID09IFN0YXRlOjpTdXNwZW5kZWQ7
IH0KKworICAgIHZvaWQgcXVldWVUYXNrKHN0ZDo6dW5pcXVlX3B0cjxFdmVudExvb3BUYXNrPiYm
IHRhc2spCisgICAgeworICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6U3RvcHBlZCB8fCAh
bV9ldmVudExvb3ApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFTU0VSVCh0YXNrLT5n
cm91cCgpID09IHRoaXMpOworICAgICAgICBtX2V2ZW50TG9vcC0+cXVldWVUYXNrKFdURk1vdmUo
dGFzaykpOworICAgIH0KKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcXVldWVUYXNrKFRhc2tT
b3VyY2UsIEFic3RyYWN0RXZlbnRMb29wOjpUYXNrRnVuY3Rpb24mJik7CisKK3ByaXZhdGU6Cisg
ICAgZW51bSBjbGFzcyBTdGF0ZSA6IHVpbnQ4X3QgeyBSdW5uaW5nLCBTdXNwZW5kZWQsIFN0b3Bw
ZWQgfTsKKworICAgIFdlYWtQdHI8QWJzdHJhY3RFdmVudExvb3A+IG1fZXZlbnRMb29wOworICAg
IFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6UnVubmluZyB9OworfTsKKworaW5saW5lIEV2ZW50TG9v
cFRhc2s6OkV2ZW50TG9vcFRhc2soVGFza1NvdXJjZSBzb3VyY2UsIEV2ZW50TG9vcFRhc2tHcm91
cCYgZ3JvdXApCisgICAgOiBtX3Rhc2tTb3VyY2Uoc291cmNlKQorICAgICwgbV9ncm91cChtYWtl
V2Vha1B0cihncm91cCkpCit7IH0KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0FjdGl2ZURPTU9iamVjdC5jcHAJKHJldmlzaW9uIDI1MjU2MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzUsMTIgKzEzNSw0OCBAQCBib29sIEFjdGl2ZURPTU9iamVjdDo6aXNBbGxvd2VkVG9SdW5TY3Jp
CiAgICAgcmV0dXJuIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSAmJiAhc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT5hY3RpdmVET01PYmplY3RzQXJlU3RvcHBlZCgpICYmICFzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPmFjdGl2ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQoKTsKIH0KIAotdm9pZCBB
Y3RpdmVET01PYmplY3Q6OnF1ZXVlVGFza0luRXZlbnRMb29wKFRhc2tTb3VyY2Ugc291cmNlLCBG
dW5jdGlvbjx2b2lkICgpPiYmIHRhc2spCit2b2lkIEFjdGl2ZURPTU9iamVjdDo6cXVldWVUYXNr
SW5FdmVudExvb3AoVGFza1NvdXJjZSBzb3VyY2UsIEZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rp
b24pCiB7CiAgICAgYXV0byogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAg
ICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybjsKLSAgICBjb250ZXh0LT5ldmVudExvb3Ao
KS5xdWV1ZVRhc2soc291cmNlLCAqY29udGV4dCwgV1RGTW92ZSh0YXNrKSk7CisgICAgY29udGV4
dC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKHNvdXJjZSwgV1RGTW92ZShmdW5jdGlvbikpOworfQor
CitjbGFzcyBBY3RpdmVET01PYmplY3RFdmVudERpc3BhdGNoVGFzayA6IHB1YmxpYyBFdmVudExv
b3BUYXNrIHsKK3B1YmxpYzoKKyAgICBBY3RpdmVET01PYmplY3RFdmVudERpc3BhdGNoVGFzayhU
YXNrU291cmNlIHNvdXJjZSwgRXZlbnRMb29wVGFza0dyb3VwJiBncm91cCwgQWN0aXZlRE9NT2Jq
ZWN0JiBvYmplY3QsIEV2ZW50VGFyZ2V0JiB0YXJnZXQsIFJlZjxFdmVudD4mJiBldmVudCkKKyAg
ICAgICAgOiBFdmVudExvb3BUYXNrKHNvdXJjZSwgZ3JvdXApCisgICAgICAgICwgbV9vYmplY3Qo
b2JqZWN0KQorICAgICAgICAsIG1fdGFyZ2V0KHRhcmdldCkKKyAgICAgICAgLCBtX2V2ZW50KFdU
Rk1vdmUoZXZlbnQpKQorICAgIHsKKyAgICAgICAgKyttX29iamVjdC5tX3BlbmRpbmdBY3Rpdml0
eUNvdW50OworICAgIH0KKworICAgIH5BY3RpdmVET01PYmplY3RFdmVudERpc3BhdGNoVGFzaygp
CisgICAgeworICAgICAgICBBU1NFUlQobV9vYmplY3QubV9wZW5kaW5nQWN0aXZpdHlDb3VudCk7
CisgICAgICAgIC0tbV9vYmplY3QubV9wZW5kaW5nQWN0aXZpdHlDb3VudDsKKyAgICB9CisKKyAg
ICB2b2lkIGV4ZWN1dGUoKSBmaW5hbCB7IG1fdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KG1fZXZlbnQu
Z2V0KCkpOyB9CisKK3ByaXZhdGU6CisgICAgQWN0aXZlRE9NT2JqZWN0JiBtX29iamVjdDsKKyAg
ICBSZWY8RXZlbnRUYXJnZXQ+IG1fdGFyZ2V0OworICAgIFJlZjxFdmVudD4gbV9ldmVudDsKK307
CisKK3ZvaWQgQWN0aXZlRE9NT2JqZWN0OjpxdWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnRJbnRlcm5h
bChFdmVudFRhcmdldCYgdGFyZ2V0LCBUYXNrU291cmNlIHNvdXJjZSwgUmVmPEV2ZW50PiYmIGV2
ZW50KQoreworICAgIEFTU0VSVCghZXZlbnQtPnRhcmdldCgpIHx8ICZ0YXJnZXQgPT0gZXZlbnQt
PnRhcmdldCgpKTsKKyAgICBhdXRvKiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8mIGV2ZW50TG9v
cFRhc2tHcm91cCA9IGNvbnRleHQtPmV2ZW50TG9vcCgpOworICAgIGF1dG8gdGFzayA9IG1ha2VV
bmlxdWU8QWN0aXZlRE9NT2JqZWN0RXZlbnREaXNwYXRjaFRhc2s+KHNvdXJjZSwgZXZlbnRMb29w
VGFza0dyb3VwLCAqdGhpcywgdGFyZ2V0LCBXVEZNb3ZlKGV2ZW50KSk7CisgICAgZXZlbnRMb29w
VGFza0dyb3VwLnF1ZXVlVGFzayhXVEZNb3ZlKHRhc2spKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTU9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuaAkocmV2aXNpb24g
MjUyNTYwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTU9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNyw2ICszNyw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERv
Y3VtZW50OworY2xhc3MgRXZlbnQ7CitjbGFzcyBFdmVudExvb3BUYXNrR3JvdXA7CitjbGFzcyBF
dmVudFRhcmdldDsKIAogZW51bSBjbGFzcyBSZWFzb25Gb3JTdXNwZW5zaW9uIHsKICAgICBKYXZh
U2NyaXB0RGVidWdnZXJQYXVzZWQsCkBAIC0xMTYsNyArMTE5LDcgQEAgcHVibGljOgogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgc3RhdGljIHZvaWQgcXVldWVUYXNrS2VlcGluZ09iamVj
dEFsaXZlKFQmIG9iamVjdCwgVGFza1NvdXJjZSBzb3VyY2UsIEZ1bmN0aW9uPHZvaWQgKCk+JiYg
dGFzaykKICAgICB7Ci0gICAgICAgIG9iamVjdC5xdWV1ZVRhc2tJbkV2ZW50TG9vcChzb3VyY2Us
IFtwcm90ZWN0ZWRPYmplY3QgPSBtYWtlUmVmKG9iamVjdCksIGFjdGl2aXR5ID0gb2JqZWN0Lm1h
a2VQZW5kaW5nQWN0aXZpdHkob2JqZWN0KSwgdGFzayA9IFdURk1vdmUodGFzayldICgpIHsKKyAg
ICAgICAgb2JqZWN0LnF1ZXVlVGFza0luRXZlbnRMb29wKHNvdXJjZSwgW3Byb3RlY3RlZE9iamVj
dCA9IG1ha2VSZWYob2JqZWN0KSwgYWN0aXZpdHkgPSBvYmplY3QuQWN0aXZlRE9NT2JqZWN0Ojpt
YWtlUGVuZGluZ0FjdGl2aXR5KG9iamVjdCksIHRhc2sgPSBXVEZNb3ZlKHRhc2spXSAoKSB7CiAg
ICAgICAgICAgICB0YXNrKCk7CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTEyNCwxMCArMTI3LDcg
QEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV2ZW50VGFyZ2V0VHlwZSwgdHlwZW5h
bWUgRXZlbnRUeXBlPgogICAgIHN0YXRpYyB2b2lkIHF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudChF
dmVudFRhcmdldFR5cGUmIHRhcmdldCwgVGFza1NvdXJjZSBzb3VyY2UsIFJlZjxFdmVudFR5cGU+
JiYgZXZlbnQpCiAgICAgewotICAgICAgICBBU1NFUlQoIWV2ZW50LT50YXJnZXQoKSB8fCAmdGFy
Z2V0ID09IGV2ZW50LT50YXJnZXQoKSk7Ci0gICAgICAgIHF1ZXVlVGFza0tlZXBpbmdPYmplY3RB
bGl2ZSh0YXJnZXQsIHNvdXJjZSwgWyZ0YXJnZXQsIGV2ZW50ID0gV1RGTW92ZShldmVudCldICgp
IG11dGFibGUgewotICAgICAgICAgICAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQoZXZlbnQuZ2V0KCkp
OwotICAgICAgICB9KTsKKyAgICAgICAgdGFyZ2V0LnF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudElu
dGVybmFsKHRhcmdldCwgc291cmNlLCBXVEZNb3ZlKGV2ZW50KSk7CiAgICAgfQogCiBwcm90ZWN0
ZWQ6CkBAIC0xNDEsMTIgKzE0MSwxNSBAQCBwcml2YXRlOgogICAgIEFjdGl2ZURPTU9iamVjdChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQ2hlY2tlZFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRUeXBl
KTsKIAogICAgIHZvaWQgcXVldWVUYXNrSW5FdmVudExvb3AoVGFza1NvdXJjZSwgRnVuY3Rpb248
dm9pZCAoKT4mJik7CisgICAgdm9pZCBxdWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnRJbnRlcm5hbChF
dmVudFRhcmdldCYsIFRhc2tTb3VyY2UsIFJlZjxFdmVudD4mJik7CiAKICAgICB1bnNpZ25lZCBt
X3BlbmRpbmdBY3Rpdml0eUNvdW50IHsgMCB9OwogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBi
b29sIG1fc3VzcGVuZElmTmVlZGVkV2FzQ2FsbGVkIHsgZmFsc2UgfTsKICAgICBSZWY8VGhyZWFk
PiBtX2NyZWF0aW9uVGhyZWFkIHsgVGhyZWFkOjpjdXJyZW50KCkgfTsKICNlbmRpZgorCisgICAg
ZnJpZW5kIGNsYXNzIEFjdGl2ZURPTU9iamVjdEV2ZW50RGlzcGF0Y2hUYXNrOwogfTsKIAogI2lm
IEFTU0VSVF9ESVNBQkxFRApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAy
NTI1NjApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNjQ2LDggKzI2NDYsOCBAQCB2b2lkIERvY3VtZW50OjpwbGF0Zm9ybVN1c3BlbmRPclN0
b3BBY3RpCiAKIHZvaWQgRG9jdW1lbnQ6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzKFJlYXNvbkZv
clN1c3BlbnNpb24gd2h5KQogewotICAgIGlmIChtX2V2ZW50TG9vcCkKLSAgICAgICAgbV9ldmVu
dExvb3AtPnN1c3BlbmQoKnRoaXMpOworICAgIGlmIChtX2RvY3VtZW50VGFza0dyb3VwKQorICAg
ICAgICBtX2RvY3VtZW50VGFza0dyb3VwLT5zdXNwZW5kKCk7CiAgICAgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHMod2h5KTsKICAgICBzdXNwZW5kRGV2aWNl
TW90aW9uQW5kT3JpZW50YXRpb25VcGRhdGVzKCk7CiAgICAgcGxhdGZvcm1TdXNwZW5kT3JTdG9w
QWN0aXZlRE9NT2JqZWN0cygpOwpAQCAtMjY1NSw4ICsyNjU1LDggQEAgdm9pZCBEb2N1bWVudDo6
c3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoUgogCiB2b2lkIERvY3VtZW50OjpyZXN1bWVBY3RpdmVE
T01PYmplY3RzKFJlYXNvbkZvclN1c3BlbnNpb24gd2h5KQogewotICAgIGlmIChtX2V2ZW50TG9v
cCkKLSAgICAgICAgbV9ldmVudExvb3AtPnJlc3VtZSgqdGhpcyk7CisgICAgaWYgKG1fZG9jdW1l
bnRUYXNrR3JvdXApCisgICAgICAgIG1fZG9jdW1lbnRUYXNrR3JvdXAtPnJlc3VtZSgpOwogICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHMod2h5KTsKICAg
ICByZXN1bWVEZXZpY2VNb3Rpb25BbmRPcmllbnRhdGlvblVwZGF0ZXMoKTsKICAgICAvLyBGSVhN
RTogRm9yIGlPUywgZG8gd2UgbmVlZCB0byBhZGQgY29udGVudCBjaGFuZ2Ugb2JzZXJ2ZXJzIHRo
YXQgd2VyZSByZW1vdmVkIGluIERvY3VtZW50OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cygpPwpA
QCAtMjY2NCw4ICsyNjY0LDggQEAgdm9pZCBEb2N1bWVudDo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0
cyhSZQogCiB2b2lkIERvY3VtZW50OjpzdG9wQWN0aXZlRE9NT2JqZWN0cygpCiB7Ci0gICAgaWYg
KG1fZXZlbnRMb29wKQotICAgICAgICBtX2V2ZW50TG9vcC0+c3RvcCgqdGhpcyk7CisgICAgaWYg
KG1fZG9jdW1lbnRUYXNrR3JvdXApCisgICAgICAgIG1fZG9jdW1lbnRUYXNrR3JvdXAtPnN0b3BB
bmREaXNjYXJkQWxsVGFza3MoKTsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpzdG9wQWN0
aXZlRE9NT2JqZWN0cygpOwogICAgIHBsYXRmb3JtU3VzcGVuZE9yU3RvcEFjdGl2ZURPTU9iamVj
dHMoKTsKIH0KQEAgLTYyNDMsMTIgKzYyNDMsMTggQEAgdm9pZCBEb2N1bWVudDo6cGVuZGluZ1Rh
c2tzVGltZXJGaXJlZCgpCiAgICAgICAgIHRhc2sucGVyZm9ybVRhc2soKnRoaXMpOwogfQogCi1B
YnN0cmFjdEV2ZW50TG9vcCYgRG9jdW1lbnQ6OmV2ZW50TG9vcCgpCitFdmVudExvb3BUYXNrR3Jv
dXAmIERvY3VtZW50OjpldmVudExvb3AoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
Ci0gICAgaWYgKFVOTElLRUxZKCFtX2V2ZW50TG9vcCkpCisgICAgaWYgKFVOTElLRUxZKCFtX2Rv
Y3VtZW50VGFza0dyb3VwKSkgewogICAgICAgICBtX2V2ZW50TG9vcCA9IFdpbmRvd0V2ZW50TG9v
cDo6ZW5zdXJlRm9yUmVnaXN0cmFibGVEb21haW4oUmVnaXN0cmFibGVEb21haW4geyBzZWN1cml0
eU9yaWdpbigpLmRhdGEoKSB9KTsKLSAgICByZXR1cm4gKm1fZXZlbnRMb29wOworICAgICAgICBt
X2RvY3VtZW50VGFza0dyb3VwID0gbWFrZVVuaXF1ZTxFdmVudExvb3BUYXNrR3JvdXA+KCptX2V2
ZW50TG9vcCk7CisgICAgICAgIGlmIChhY3RpdmVET01PYmplY3RzQXJlU3RvcHBlZCgpKQorICAg
ICAgICAgICAgbV9kb2N1bWVudFRhc2tHcm91cC0+c3RvcEFuZERpc2NhcmRBbGxUYXNrcygpOwor
ICAgICAgICBlbHNlIGlmIChhY3RpdmVET01PYmplY3RzQXJlU3VzcGVuZGVkKCkpCisgICAgICAg
ICAgICBtX2RvY3VtZW50VGFza0dyb3VwLT5zdXNwZW5kKCk7CisgICAgfQorICAgIHJldHVybiAq
bV9kb2N1bWVudFRhc2tHcm91cDsKIH0KIAogdm9pZCBEb2N1bWVudDo6c3VzcGVuZFNjaGVkdWxl
ZFRhc2tzKFJlYXNvbkZvclN1c3BlbnNpb24gcmVhc29uKQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmgJKHJldmlzaW9uIDI1MjU2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDcgQEAgY2xhc3MgRG9jdW1lbnRTaGFyZWRPYmpl
Y3RQb29sOwogY2xhc3MgRG9jdW1lbnRUaW1lbGluZTsKIGNsYXNzIERvY3VtZW50VHlwZTsKIGNs
YXNzIEVkaXRpbmdCZWhhdmlvcjsKK2NsYXNzIEV2ZW50TG9vcFRhc2tHcm91cDsKIGNsYXNzIEV4
dGVuc2lvblN0eWxlU2hlZXRzOwogY2xhc3MgRmxvYXRRdWFkOwogY2xhc3MgRmxvYXRSZWN0OwpA
QCAtMTA2Myw3ICsxMDY0LDcgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBw
b3N0VGFzayhUYXNrJiYpIGZpbmFsOyAvLyBFeGVjdXRlcyB0aGUgdGFzayBvbiBjb250ZXh0J3Mg
dGhyZWFkIGFzeW5jaHJvbm91c2x5LgogCi0gICAgQWJzdHJhY3RFdmVudExvb3AmIGV2ZW50TG9v
cCgpIGZpbmFsOworICAgIEV2ZW50TG9vcFRhc2tHcm91cCYgZXZlbnRMb29wKCkgZmluYWw7CiAK
ICAgICBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIqIHNjcmlwdGVkQW5pbWF0aW9uQ29udHJv
bGxlcigpIHsgcmV0dXJuIG1fc2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyLmdldCgpOyB9CiAg
ICAgdm9pZCBzdXNwZW5kU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyQ2FsbGJhY2tzKCk7CkBA
IC0yMDY0LDYgKzIwNjUsNyBAQCBwcml2YXRlOgogICAgIERvY3VtZW50SWRlbnRpZmllciBtX2lk
ZW50aWZpZXI7CiAKICAgICBSZWZQdHI8V2luZG93RXZlbnRMb29wPiBtX2V2ZW50TG9vcDsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8RXZlbnRMb29wVGFza0dyb3VwPiBtX2RvY3VtZW50VGFza0dyb3Vw
OwogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIFJlZlB0cjxTV0NsaWVudENvbm5l
Y3Rpb24+IG1fc2VydmljZVdvcmtlckNvbm5lY3Rpb247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vSWRsZUNhbGxiYWNrQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL0lkbGVDYWxsYmFja0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyNTI1NjApCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vSWRsZUNhbGxiYWNrQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBJZGxlQ2FsbGJhY2tDb250cm9sbGVyOjpyZW1vdmVJ
ZGxlQwogCiB2b2lkIElkbGVDYWxsYmFja0NvbnRyb2xsZXI6OnF1ZXVlVGFza1RvU3RhcnRJZGxl
UGVyaW9kKCkKIHsKLSAgICBtX2RvY3VtZW50LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1Nv
dXJjZTo6SWRsZVRhc2ssICptX2RvY3VtZW50LCBbcHJvdGVjdGVkRG9jdW1lbnQgPSBtYWtlUmVm
KCptX2RvY3VtZW50KSwgdGhpc10oKSB7CisgICAgbV9kb2N1bWVudC0+ZXZlbnRMb29wKCkucXVl
dWVUYXNrKFRhc2tTb3VyY2U6OklkbGVUYXNrLCBbcHJvdGVjdGVkRG9jdW1lbnQgPSBtYWtlUmVm
KCptX2RvY3VtZW50KSwgdGhpc10gewogICAgICAgICBSRUxFQVNFX0FTU0VSVChwcm90ZWN0ZWRE
b2N1bWVudC0+aWRsZUNhbGxiYWNrQ29udHJvbGxlcigpID09IHRoaXMpOwogICAgICAgICBzdGFy
dElkbGVQZXJpb2QoKTsKICAgICB9KTsKQEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIElkbGVDYWxs
YmFja0NvbnRyb2xsZXI6OnN0YXJ0SWRsZVBlCiAKIHZvaWQgSWRsZUNhbGxiYWNrQ29udHJvbGxl
cjo6cXVldWVUYXNrVG9JbnZva2VJZGxlQ2FsbGJhY2tzKE1vbm90b25pY1RpbWUgZGVhZGxpbmUp
CiB7Ci0gICAgbV9kb2N1bWVudC0+ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Oklk
bGVUYXNrLCAqbV9kb2N1bWVudCwgW3Byb3RlY3RlZERvY3VtZW50ID0gbWFrZVJlZigqbV9kb2N1
bWVudCksIGRlYWRsaW5lLCB0aGlzXSgpIHsKKyAgICBtX2RvY3VtZW50LT5ldmVudExvb3AoKS5x
dWV1ZVRhc2soVGFza1NvdXJjZTo6SWRsZVRhc2ssIFtwcm90ZWN0ZWREb2N1bWVudCA9IG1ha2VS
ZWYoKm1fZG9jdW1lbnQpLCBkZWFkbGluZSwgdGhpc10gewogICAgICAgICBSRUxFQVNFX0FTU0VS
VChwcm90ZWN0ZWREb2N1bWVudC0+aWRsZUNhbGxiYWNrQ29udHJvbGxlcigpID09IHRoaXMpOwog
ICAgICAgICBpbnZva2VJZGxlQ2FsbGJhY2tzKGRlYWRsaW5lKTsKICAgICB9KTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAkocmV2aXNpb24gMjUy
NTYwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtNTcsNiArNTcsNyBAQCBjbGFzcyBBYnN0cmFjdEV2ZW50TG9vcDsKIGNs
YXNzIENhY2hlZFNjcmlwdDsKIGNsYXNzIERhdGFiYXNlQ29udGV4dDsKIGNsYXNzIEV2ZW50UXVl
dWU7CitjbGFzcyBFdmVudExvb3BUYXNrR3JvdXA7CiBjbGFzcyBFdmVudFRhcmdldDsKIGNsYXNz
IE1lc3NhZ2VQb3J0OwogY2xhc3MgUHVibGljVVJMTWFuYWdlcjsKQEAgLTY0LDYgKzY1LDcgQEAg
Y2xhc3MgUmVqZWN0ZWRQcm9taXNlVHJhY2tlcjsKIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKIGNs
YXNzIFNlY3VyaXR5T3JpZ2luOwogY2xhc3MgU29ja2V0UHJvdmlkZXI7CitlbnVtIGNsYXNzIFRh
c2tTb3VyY2UgOiB1aW50OF90OwogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogY2xhc3Mg
U2VydmljZVdvcmtlcjsKQEAgLTg5LDcgKzkxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBpc0NvbnRleHRUaHJlYWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBi
b29sIGlzSlNFeGVjdXRpb25Gb3JiaWRkZW4oKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIEFi
c3RyYWN0RXZlbnRMb29wJiBldmVudExvb3AoKSA9IDA7CisgICAgdmlydHVhbCBFdmVudExvb3BU
YXNrR3JvdXAmIGV2ZW50TG9vcCgpID0gMDsKIAogICAgIHZpcnR1YWwgY29uc3QgVVJMJiB1cmwo
KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBVUkwgY29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1
cmwpIGNvbnN0ID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9XaW5kb3dFdmVudExvb3Au
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9XaW5kb3dFdmVudExvb3AuY3Bw
CShyZXZpc2lvbiAyNTI1NjApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vV2luZG93RXZlbnRMb29w
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNjggKzU5LDEwMCBAQCBXaW5kb3dFdmVudExvb3A6
On5XaW5kb3dFdmVudExvb3AoKQogICAgIFJFTEVBU0VfQVNTRVJUKGRpZFJlbW92ZSk7CiB9CiAK
LXZvaWQgV2luZG93RXZlbnRMb29wOjpxdWV1ZVRhc2soVGFza1NvdXJjZSBzb3VyY2UsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFRhc2tGdW5jdGlvbiYmIHRhc2spCit2b2lkIEFi
c3RyYWN0RXZlbnRMb29wOjpxdWV1ZVRhc2soc3RkOjp1bmlxdWVfcHRyPEV2ZW50TG9vcFRhc2s+
JiYgdGFzaykKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVChpczxE
b2N1bWVudD4oY29udGV4dCkpOworICAgIEFTU0VSVCh0YXNrLT5ncm91cCgpKTsKKyAgICBBU1NF
UlQoaXNDb250ZXh0VGhyZWFkKCkpOwogICAgIHNjaGVkdWxlVG9SdW5JZk5lZWRlZCgpOwotICAg
IG1fdGFza3MuYXBwZW5kKFRhc2sgeyBzb3VyY2UsIFdURk1vdmUodGFzayksIGRvd25jYXN0PERv
Y3VtZW50Pihjb250ZXh0KS5pZGVudGlmaWVyKCkgfSk7CisgICAgbV90YXNrcy5hcHBlbmQoV1RG
TW92ZSh0YXNrKSk7CiB9CiAKLXZvaWQgV2luZG93RXZlbnRMb29wOjpzdXNwZW5kKERvY3VtZW50
JikKK3ZvaWQgQWJzdHJhY3RFdmVudExvb3A6OnJlc3VtZUdyb3VwKEV2ZW50TG9vcFRhc2tHcm91
cCYgZ3JvdXApCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLX0KLQotdm9pZCBXaW5k
b3dFdmVudExvb3A6OnJlc3VtZShEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fZG9jdW1lbnRJZGVudGlmaWVyc0ZvclN1c3BlbmRl
ZFRhc2tzLmNvbnRhaW5zKGRvY3VtZW50LmlkZW50aWZpZXIoKSkpCisgICAgQVNTRVJUKGlzQ29u
dGV4dFRocmVhZCgpKTsKKyAgICBpZiAoIW1fZ3JvdXBzV2l0aFN1c3BlbmVkVGFza3MuY29udGFp
bnMoZ3JvdXApKQogICAgICAgICByZXR1cm47CiAgICAgc2NoZWR1bGVUb1J1bklmTmVlZGVkKCk7
CiB9CiAKLXZvaWQgV2luZG93RXZlbnRMb29wOjpzdG9wKERvY3VtZW50JiBkb2N1bWVudCkKK3Zv
aWQgQWJzdHJhY3RFdmVudExvb3A6OnN0b3BHcm91cChFdmVudExvb3BUYXNrR3JvdXAmIGdyb3Vw
KQogewotICAgIG1fdGFza3MucmVtb3ZlQWxsTWF0Y2hpbmcoW2lkZW50aWZpZXIgPSBkb2N1bWVu
dC5pZGVudGlmaWVyKCldIChhdXRvJiB0YXNrKSB7Ci0gICAgICAgIHJldHVybiB0YXNrLmRvY3Vt
ZW50SWRlbnRpZmllciA9PSBpZGVudGlmaWVyOworICAgIEFTU0VSVChpc0NvbnRleHRUaHJlYWQo
KSk7CisgICAgbV90YXNrcy5yZW1vdmVBbGxNYXRjaGluZyhbJmdyb3VwXSAoYXV0byYgdGFzaykg
eworICAgICAgICByZXR1cm4gZ3JvdXAubWF0Y2hlc1Rhc2soKnRhc2spOwogICAgIH0pOwogfQog
Ci12b2lkIFdpbmRvd0V2ZW50TG9vcDo6c2NoZWR1bGVUb1J1bklmTmVlZGVkKCkKK3ZvaWQgQWJz
dHJhY3RFdmVudExvb3A6OnNjaGVkdWxlVG9SdW5JZk5lZWRlZCgpCiB7CiAgICAgaWYgKG1faXNT
Y2hlZHVsZWRUb1J1bikKICAgICAgICAgcmV0dXJuOwotCiAgICAgbV9pc1NjaGVkdWxlZFRvUnVu
ID0gdHJ1ZTsKKyAgICBzY2hlZHVsZVRvUnVuKCk7Cit9CisKK3ZvaWQgV2luZG93RXZlbnRMb29w
OjpzY2hlZHVsZVRvUnVuKCkKK3sKICAgICBjYWxsT25NYWluVGhyZWFkKFtldmVudExvb3AgPSBt
YWtlUmVmKCp0aGlzKV0gKCkgewotICAgICAgICBldmVudExvb3AtPm1faXNTY2hlZHVsZWRUb1J1
biA9IGZhbHNlOwogICAgICAgICBldmVudExvb3AtPnJ1bigpOwogICAgIH0pOwogfQogCi12b2lk
IFdpbmRvd0V2ZW50TG9vcDo6cnVuKCkKK2Jvb2wgV2luZG93RXZlbnRMb29wOjppc0NvbnRleHRU
aHJlYWQoKSBjb25zdAogeworICAgIHJldHVybiBpc01haW5UaHJlYWQoKTsKK30KKwordm9pZCBB
YnN0cmFjdEV2ZW50TG9vcDo6cnVuKCkKK3sKKyAgICBtX2lzU2NoZWR1bGVkVG9SdW4gPSBmYWxz
ZTsKICAgICBpZiAobV90YXNrcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZl
Y3RvcjxUYXNrPiB0YXNrcyA9IFdURk1vdmUobV90YXNrcyk7Ci0gICAgbV9kb2N1bWVudElkZW50
aWZpZXJzRm9yU3VzcGVuZGVkVGFza3MuY2xlYXIoKTsKLSAgICBWZWN0b3I8VGFzaz4gcmVtYWlu
aW5nVGFza3M7CisgICAgYXV0byB0YXNrcyA9IHN0ZDo6ZXhjaGFuZ2UobV90YXNrcywgeyB9KTsK
KyAgICBtX2dyb3Vwc1dpdGhTdXNwZW5lZFRhc2tzLmNsZWFyKCk7CisgICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxFdmVudExvb3BUYXNrPj4gcmVtYWluaW5nVGFza3M7CiAgICAgZm9yIChhdXRv
JiB0YXNrIDogdGFza3MpIHsKLSAgICAgICAgYXV0byogZG9jdW1lbnQgPSBEb2N1bWVudDo6YWxs
RG9jdW1lbnRzTWFwKCkuZ2V0KHRhc2suZG9jdW1lbnRJZGVudGlmaWVyKTsKLSAgICAgICAgaWYg
KCFkb2N1bWVudCB8fCBkb2N1bWVudC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN0b3BwZWQoKSkKKyAg
ICAgICAgYXV0byogZ3JvdXAgPSB0YXNrLT5ncm91cCgpOworICAgICAgICBpZiAoIWdyb3VwIHx8
IGdyb3VwLT5pc1N0b3BwZWRQZXJtYW5lbnRseSgpKQogICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGlmIChkb2N1bWVudC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpKSB7Ci0g
ICAgICAgICAgICBtX2RvY3VtZW50SWRlbnRpZmllcnNGb3JTdXNwZW5kZWRUYXNrcy5hZGQodGFz
ay5kb2N1bWVudElkZW50aWZpZXIpOworCisgICAgICAgIGlmIChncm91cC0+aXNTdXNwZW5kZWQo
KSkgeworICAgICAgICAgICAgbV9ncm91cHNXaXRoU3VzcGVuZWRUYXNrcy5hZGQoZ3JvdXApOwog
ICAgICAgICAgICAgcmVtYWluaW5nVGFza3MuYXBwZW5kKFdURk1vdmUodGFzaykpOwogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgdGFzay50YXNrKCk7CisKKyAgICAg
ICAgdGFzay0+ZXhlY3V0ZSgpOwogICAgIH0KICAgICBmb3IgKGF1dG8mIHRhc2sgOiBtX3Rhc2tz
KQogICAgICAgICByZW1haW5pbmdUYXNrcy5hcHBlbmQoV1RGTW92ZSh0YXNrKSk7CiAgICAgbV90
YXNrcyA9IFdURk1vdmUocmVtYWluaW5nVGFza3MpOwogfQogCit2b2lkIEFic3RyYWN0RXZlbnRM
b29wOjpjbGVhckFsbFRhc2tzKCkKK3sKKyAgICBtX3Rhc2tzLmNsZWFyKCk7CisgICAgbV9ncm91
cHNXaXRoU3VzcGVuZWRUYXNrcy5jbGVhcigpOworfQorCitjbGFzcyBFdmVudExvb3BGdW5jdGlv
bkRpc3BhdGNoVGFzayA6IHB1YmxpYyBFdmVudExvb3BUYXNrIHsKK3B1YmxpYzoKKyAgICBFdmVu
dExvb3BGdW5jdGlvbkRpc3BhdGNoVGFzayhUYXNrU291cmNlIHNvdXJjZSwgRXZlbnRMb29wVGFz
a0dyb3VwJiBncm91cCwgQWJzdHJhY3RFdmVudExvb3A6OlRhc2tGdW5jdGlvbiYmIGZ1bmN0aW9u
KQorICAgICAgICA6IEV2ZW50TG9vcFRhc2soc291cmNlLCBncm91cCkKKyAgICAgICAgLCBtX2Z1
bmN0aW9uKFdURk1vdmUoZnVuY3Rpb24pKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGV4ZWN1
dGUoKSBmaW5hbCB7IG1fZnVuY3Rpb24oKTsgfQorCitwcml2YXRlOgorICAgIEFic3RyYWN0RXZl
bnRMb29wOjpUYXNrRnVuY3Rpb24gbV9mdW5jdGlvbjsKK307CisKK3ZvaWQgRXZlbnRMb29wVGFz
a0dyb3VwOjpxdWV1ZVRhc2soVGFza1NvdXJjZSBzb3VyY2UsIEFic3RyYWN0RXZlbnRMb29wOjpU
YXNrRnVuY3Rpb24mJiBmdW5jdGlvbikKK3sKKyAgICByZXR1cm4gcXVldWVUYXNrKG1ha2VVbmlx
dWU8RXZlbnRMb29wRnVuY3Rpb25EaXNwYXRjaFRhc2s+KHNvdXJjZSwgKnRoaXMsIFdURk1vdmUo
ZnVuY3Rpb24pKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9XaW5kb3dFdmVudExvb3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vV2luZG93RXZlbnRMb29wLmgJKHJldmlzaW9uIDI1MjU2MCkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9XaW5kb3dFdmVudExvb3AuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMjkgKzQxLDEz
IEBAIHB1YmxpYzoKIAogICAgIH5XaW5kb3dFdmVudExvb3AoKTsKIAotICAgIHZvaWQgcXVldWVU
YXNrKFRhc2tTb3VyY2UsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBUYXNrRnVuY3Rpb24mJikg
b3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHN1c3BlbmQoRG9jdW1lbnQmKTsKLSAgICB2b2lkIHJlc3Vt
ZShEb2N1bWVudCYpOwotICAgIHZvaWQgc3RvcChEb2N1bWVudCYpOwotCiBwcml2YXRlOgogICAg
IFdpbmRvd0V2ZW50TG9vcChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOwogCi0gICAgdm9pZCBz
Y2hlZHVsZVRvUnVuSWZOZWVkZWQoKTsKLSAgICB2b2lkIHJ1bigpOwotCi0gICAgc3RydWN0IFRh
c2sgewotICAgICAgICBUYXNrU291cmNlIHNvdXJjZTsKLSAgICAgICAgVGFza0Z1bmN0aW9uIHRh
c2s7Ci0gICAgICAgIERvY3VtZW50SWRlbnRpZmllciBkb2N1bWVudElkZW50aWZpZXI7Ci0gICAg
fTsKKyAgICB2b2lkIHNjaGVkdWxlVG9SdW4oKSBmaW5hbDsKKyAgICBib29sIGlzQ29udGV4dFRo
cmVhZCgpIGNvbnN0IGZpbmFsOwogCi0gICAgLy8gVXNlIGEgZ2xvYmFsIHF1ZXVlIGluc3RlYWQg
b2YgbXVsdGlwbGUgdGFzayBxdWV1ZXMgc2luY2UgSFRNTDUgc3BlYyBhbGxvd3MgVUEgdG8gcGlj
ayBhcmJpdHJhcnkgcXVldWUuCi0gICAgVmVjdG9yPFRhc2s+IG1fdGFza3M7Ci0gICAgSGFzaFNl
dDxEb2N1bWVudElkZW50aWZpZXI+IG1fZG9jdW1lbnRJZGVudGlmaWVyc0ZvclN1c3BlbmRlZFRh
c2tzOwogICAgIFJlZ2lzdHJhYmxlRG9tYWluIG1fZG9tYWluOwotICAgIGJvb2wgbV9pc1NjaGVk
dWxlZFRvUnVuIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAkocmV2aXNpb24gMjUyNTYwKQorKysg
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjU0LDcgKzI1NCw3IEBAIHZvaWQgRmlsZVJlYWRlcjo6ZW5xdWV1ZVRhc2soRnVuY3Rpb248dm8K
ICAgICBzdGF0aWMgdWludDY0X3QgdGFza0lkZW50aWZpZXJTZWVkID0gMDsKICAgICB1aW50NjRf
dCB0YXNrSWRlbnRpZmllciA9ICsrdGFza0lkZW50aWZpZXJTZWVkOwogICAgIG1fcGVuZGluZ1Rh
c2tzLmFkZCh0YXNrSWRlbnRpZmllciwgV1RGTW92ZSh0YXNrKSk7Ci0gICAgY29udGV4dC0+ZXZl
bnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6OkZpbGVSZWFkaW5nLCAqY29udGV4dCwgW3Ro
aXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcGVuZGluZ0FjdGl2aXR5ID0gbWFr
ZVBlbmRpbmdBY3Rpdml0eSgqdGhpcyksIHRhc2tJZGVudGlmaWVyXSB7CisgICAgY29udGV4dC0+
ZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6OkZpbGVSZWFkaW5nLCBbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBwZW5kaW5nQWN0aXZpdHkgPSBtYWtlUGVuZGlu
Z0FjdGl2aXR5KCp0aGlzKSwgdGFza0lkZW50aWZpZXJdIHsKICAgICAgICAgYXV0byB0YXNrID0g
bV9wZW5kaW5nVGFza3MudGFrZSh0YXNrSWRlbnRpZmllcik7CiAgICAgICAgIGlmICh0YXNrKQog
ICAgICAgICAgICAgdGFzaygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cAkocmV2aXNpb24gMjUyNTYwKQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Njg0LDcgKzQ2ODQsNyBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBJbnRlcm5hbHM6OnF1ZXVlVGFzayhTCiAgICAgZWxzZQogICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIAotICAgIGNvbnRleHQuZXZlbnRMb29wKCkucXVl
dWVUYXNrKHNvdXJjZSwgY29udGV4dCwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkg
eworICAgIGNvbnRleHQuZXZlbnRMb29wKCkucXVldWVUYXNrKHNvdXJjZSwgW2NhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayldKCkgewogICAgICAgICBjYWxsYmFjay0+aGFuZGxlRXZlbnQoKTsK
ICAgICB9KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudExvb3Au
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRMb29w
LmNwcAkocmV2aXNpb24gMjUyNTYwKQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJF
dmVudExvb3AuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2MyArNDQsMjEgQEAgUmVmPFdvcmtl
ckV2ZW50TG9vcD4gV29ya2VyRXZlbnRMb29wOjpjcgogI2VuZGlmCiAKIFdvcmtlckV2ZW50TG9v
cDo6V29ya2VyRXZlbnRMb29wKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCi0gICAg
OiBBY3RpdmVET01PYmplY3QoJmNvbnRleHQpCisgICAgOiBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNl
cnZlcigmY29udGV4dCkKIHsKLSAgICBzdXNwZW5kSWZOZWVkZWQoKTsKIH0KIAotdm9pZCBXb3Jr
ZXJFdmVudExvb3A6OnF1ZXVlVGFzayhUYXNrU291cmNlIHNvdXJjZSwgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCwgVGFza0Z1bmN0aW9uJiYgZnVuY3Rpb24pCit2b2lkIFdvcmtlckV2
ZW50TG9vcDo6c2NoZWR1bGVUb1J1bigpCiB7Ci0gICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkgPT0gJmNvbnRleHQpOwotICAgIG1fdGFza3MuYXBwZW5kKHsg
c291cmNlLCBXVEZNb3ZlKGZ1bmN0aW9uKSB9KTsKLSAgICBzY2hlZHVsZVRvUnVuSWZOZWVkZWQo
KTsKLX0KLQotY29uc3QgY2hhciogV29ya2VyRXZlbnRMb29wOjphY3RpdmVET01PYmplY3ROYW1l
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gIldvcmtlckV2ZW50TG9vcCI7Ci19Ci0KLXZvaWQgV29y
a2VyRXZlbnRMb29wOjpzdXNwZW5kKFJlYXNvbkZvclN1c3BlbnNpb24pCi17Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgV29ya2VyRXZlbnRMb29wOjpyZXN1bWUoKQotewot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIFdvcmtlckV2ZW50TG9vcDo6c3Rv
cCgpCi17Ci0gICAgbV90YXNrcy5jbGVhcigpOwotfQotCi12b2lkIFdvcmtlckV2ZW50TG9vcDo6
c2NoZWR1bGVUb1J1bklmTmVlZGVkKCkKLXsKLSAgICBhdXRvKiBjb250ZXh0ID0gc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOwotICAgIEFTU0VSVChjb250ZXh0KTsKLSAgICBpZiAobV9pc1NjaGVk
dWxlZFRvUnVuIHx8IG1fdGFza3MuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X2lzU2NoZWR1bGVkVG9SdW4gPSB0cnVlOwotICAgIGNvbnRleHQtPnBvc3RUYXNrKFtldmVudExv
b3AgPSBtYWtlUmVmKCp0aGlzKV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7Ci0gICAgICAg
IGV2ZW50TG9vcC0+bV9pc1NjaGVkdWxlZFRvUnVuID0gZmFsc2U7CisgICAgQVNTRVJUKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0
VGFzayhbZXZlbnRMb29wID0gbWFrZVJlZigqdGhpcyldIChTY3JpcHRFeGVjdXRpb25Db250ZXh0
JikgewogICAgICAgICBldmVudExvb3AtPnJ1bigpOwogICAgIH0pOwogfQogCi12b2lkIFdvcmtl
ckV2ZW50TG9vcDo6cnVuKCkKK2Jvb2wgV29ya2VyRXZlbnRMb29wOjppc0NvbnRleHRUaHJlYWQo
KSBjb25zdAogewotICAgIGF1dG8qIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
Ci0gICAgaWYgKCFjb250ZXh0IHx8IGNvbnRleHQtPmFjdGl2ZURPTU9iamVjdHNBcmVTdG9wcGVk
KCkgfHwgY29udGV4dC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgYXV0byB0YXNrcyA9IHN0ZDo6ZXhjaGFuZ2UobV90YXNrcywgVmVjdG9yPFRh
c2s+KCkpOwotICAgIGZvciAoYXV0byYgdGFzayA6IHRhc2tzKQotICAgICAgICB0YXNrLnRhc2so
KTsKKyAgICByZXR1cm4gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQo
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJFdmVudExvb3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckV2ZW50TG9vcC5oCShyZXZpc2lvbiAyNTI1NjApCisrKyBTb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckV2ZW50TG9vcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFdvcmtlckdsb2JhbFNjb3BlOwogY2xhc3Mg
V29ya2xldEdsb2JhbFNjb3BlOwogCi1jbGFzcyBXb3JrZXJFdmVudExvb3AgZmluYWwgOiBwdWJs
aWMgQWJzdHJhY3RFdmVudExvb3AsIHByaXZhdGUgQWN0aXZlRE9NT2JqZWN0IHsKK2NsYXNzIFdv
cmtlckV2ZW50TG9vcCBmaW5hbCA6IHB1YmxpYyBBYnN0cmFjdEV2ZW50TG9vcCwgcHJpdmF0ZSBD
b250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlciB7CiBwdWJsaWM6CiAgICAgLy8gRXhwbGljaXRseSB0
YWtlIFdvcmtlckdsb2JhbFNjb3BlIGFuZCBXb3JrbGV0R2xvYmFsU2NvcGUgZm9yIGRvY3VtZW50
YXRpb24gcHVycG9zZXMuCiAgICAgc3RhdGljIFJlZjxXb3JrZXJFdmVudExvb3A+IGNyZWF0ZShX
b3JrZXJHbG9iYWxTY29wZSYpOwpAQCAtNDIsMjcgKzQyLDExIEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgUmVmPFdvcmtlckV2ZW50TG9vcD4gY3JlYXRlKFdvcmtsZXRHbG9iYWxTY29wZSYpOwogI2Vu
ZGlmCiAKLSAgICB2b2lkIHF1ZXVlVGFzayhUYXNrU291cmNlLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgVGFza0Z1bmN0aW9uJiYpIG92ZXJyaWRlOwotCiBwcml2YXRlOgogICAgIGV4cGxpY2l0
IFdvcmtlckV2ZW50TG9vcChTY3JpcHRFeGVjdXRpb25Db250ZXh0Jik7CiAKLSAgICB2b2lkIHNj
aGVkdWxlVG9SdW5JZk5lZWRlZCgpOwotICAgIHZvaWQgcnVuKCk7Ci0KLSAgICAvLyBBY3RpdmVE
T01PYmplY3Q7Ci0gICAgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0IG92
ZXJyaWRlOwotICAgIHZvaWQgc3VzcGVuZChSZWFzb25Gb3JTdXNwZW5zaW9uKSBvdmVycmlkZTsK
LSAgICB2b2lkIHJlc3VtZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RvcCgpIG92ZXJyaWRlOwot
Ci0gICAgc3RydWN0IFRhc2sgewotICAgICAgICBUYXNrU291cmNlIHNvdXJjZTsKLSAgICAgICAg
VGFza0Z1bmN0aW9uIHRhc2s7Ci0gICAgfTsKLQotICAgIFZlY3RvcjxUYXNrPiBtX3Rhc2tzOwot
ICAgIGJvb2wgbV9pc1NjaGVkdWxlZFRvUnVuIHsgZmFsc2UgfTsKKyAgICB2b2lkIHNjaGVkdWxl
VG9SdW4oKSBmaW5hbDsKKyAgICBib29sIGlzQ29udGV4dFRocmVhZCgpIGNvbnN0OwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJHbG9iYWxTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJHbG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDI1MjU2MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsMTIg
KzEwNSwxNiBAQCBXb3JrZXJHbG9iYWxTY29wZTo6fldvcmtlckdsb2JhbFNjb3BlKCkKICAgICB0
aHJlYWQoKS53b3JrZXJSZXBvcnRpbmdQcm94eSgpLndvcmtlckdsb2JhbFNjb3BlRGVzdHJveWVk
KCk7CiB9CiAKLUFic3RyYWN0RXZlbnRMb29wJiBXb3JrZXJHbG9iYWxTY29wZTo6ZXZlbnRMb29w
KCkKK0V2ZW50TG9vcFRhc2tHcm91cCYgV29ya2VyR2xvYmFsU2NvcGU6OmV2ZW50TG9vcCgpCiB7
CiAgICAgQVNTRVJUKGlzQ29udGV4dFRocmVhZCgpKTsKLSAgICBpZiAoIW1fZXZlbnRMb29wKQor
ICAgIGlmIChVTkxJS0VMWSghbV9kZWZhdWx0VGFza0dyb3VwKSkgewogICAgICAgICBtX2V2ZW50
TG9vcCA9IFdvcmtlckV2ZW50TG9vcDo6Y3JlYXRlKCp0aGlzKTsKLSAgICByZXR1cm4gKm1fZXZl
bnRMb29wOworICAgICAgICBtX2RlZmF1bHRUYXNrR3JvdXAgPSBtYWtlVW5pcXVlPEV2ZW50TG9v
cFRhc2tHcm91cD4oKm1fZXZlbnRMb29wKTsKKyAgICAgICAgaWYgKGFjdGl2ZURPTU9iamVjdHNB
cmVTdG9wcGVkKCkpCisgICAgICAgICAgICBtX2RlZmF1bHRUYXNrR3JvdXAtPnN0b3BBbmREaXNj
YXJkQWxsVGFza3MoKTsKKyAgICB9CisgICAgcmV0dXJuICptX2RlZmF1bHRUYXNrR3JvdXA7CiB9
CiAKIFN0cmluZyBXb3JrZXJHbG9iYWxTY29wZTo6b3JpZ2luKCkgY29uc3QKQEAgLTEyNSw2ICsx
MjksOCBAQCB2b2lkIFdvcmtlckdsb2JhbFNjb3BlOjpwcmVwYXJlRm9yVGVybWluCiAgICAgc3Rv
cEluZGV4ZWREYXRhYmFzZSgpOwogI2VuZGlmCiAKKyAgICBpZiAobV9kZWZhdWx0VGFza0dyb3Vw
KQorICAgICAgICBtX2RlZmF1bHRUYXNrR3JvdXAtPnN0b3BBbmREaXNjYXJkQWxsVGFza3MoKTsK
ICAgICBzdG9wQWN0aXZlRE9NT2JqZWN0cygpOwogCiAgICAgaWYgKG1fY2FjaGVTdG9yYWdlQ29u
bmVjdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3Bl
LmgJKHJldmlzaW9uIDI1MjU2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xv
YmFsU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsOSArNDIsOSBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIEFic3RyYWN0RXZlbnRMb29wOwogY2xhc3MgQ29udGVudFNlY3Vy
aXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzOwogY2xhc3MgQ3J5cHRvOworY2xhc3MgRXZlbnRMb29w
VGFza0dyb3VwOwogY2xhc3MgTWljcm90YXNrUXVldWU7CiBjbGFzcyBQZXJmb3JtYW5jZTsKIGNs
YXNzIFNjaGVkdWxlZEFjdGlvbjsKQEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBpc0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgQWJzdHJhY3RFdmVudExvb3AmIGV2ZW50TG9vcCgp
IGZpbmFsOworICAgIEV2ZW50TG9vcFRhc2tHcm91cCYgZXZlbnRMb29wKCkgZmluYWw7CiAKICAg
ICBjb25zdCBVUkwmIHVybCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fdXJsOyB9CiAgICAgU3Ry
aW5nIG9yaWdpbigpIGNvbnN0IGZpbmFsOwpAQCAtMTk4LDYgKzE5OCw3IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX3Nob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeTsKIAog
ICAgIFJlZlB0cjxXb3JrZXJFdmVudExvb3A+IG1fZXZlbnRMb29wOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxFdmVudExvb3BUYXNrR3JvdXA+IG1fZGVmYXVsdFRhc2tHcm91cDsKIAogICAgIG11dGFi
bGUgV29ya2VyRXZlbnRRdWV1ZSBtX2V2ZW50UXVldWU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3dvcmtsZXRzL1dvcmtsZXRHbG9iYWxTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvd29ya2xldHMvV29ya2xldEdsb2JhbFNjb3BlLmNwcAkocmV2aXNpb24gMjUyNTYwKQor
KysgU291cmNlL1dlYkNvcmUvd29ya2xldHMvV29ya2xldEdsb2JhbFNjb3BlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzcsNiArNzcsOCBAQCB2b2lkIFdvcmtsZXRHbG9iYWxTY29wZTo6cHJlcGFy
ZUZvckRlc3RyCiB7CiAgICAgaWYgKCFtX3NjcmlwdCkKICAgICAgICAgcmV0dXJuOworICAgIGlm
IChtX2RlZmF1bHRUYXNrR3JvdXApCisgICAgICAgIG1fZGVmYXVsdFRhc2tHcm91cC0+c3RvcEFu
ZERpc2NhcmRBbGxUYXNrcygpOwogICAgIHN0b3BBY3RpdmVET01PYmplY3RzKCk7CiAgICAgcmVt
b3ZlUmVqZWN0ZWRQcm9taXNlVHJhY2tlcigpOwogICAgIHJlbW92ZUFsbEV2ZW50TGlzdGVuZXJz
KCk7CkBAIC05MCwxMSArOTIsMTUgQEAgYXV0byBXb3JrbGV0R2xvYmFsU2NvcGU6OmFsbFdvcmts
ZXRHbG9iYQogICAgIHJldHVybiBzY29wZXM7CiB9CiAKLUFic3RyYWN0RXZlbnRMb29wJiBXb3Jr
bGV0R2xvYmFsU2NvcGU6OmV2ZW50TG9vcCgpCitFdmVudExvb3BUYXNrR3JvdXAmIFdvcmtsZXRH
bG9iYWxTY29wZTo6ZXZlbnRMb29wKCkKIHsKLSAgICBpZiAoIW1fZXZlbnRMb29wKQorICAgIGlm
IChVTkxJS0VMWSghbV9kZWZhdWx0VGFza0dyb3VwKSkgewogICAgICAgICBtX2V2ZW50TG9vcCA9
IFdvcmtlckV2ZW50TG9vcDo6Y3JlYXRlKCp0aGlzKTsKLSAgICByZXR1cm4gKm1fZXZlbnRMb29w
OworICAgICAgICBtX2RlZmF1bHRUYXNrR3JvdXAgPSBtYWtlVW5pcXVlPEV2ZW50TG9vcFRhc2tH
cm91cD4oKm1fZXZlbnRMb29wKTsKKyAgICAgICAgaWYgKGFjdGl2ZURPTU9iamVjdHNBcmVTdG9w
cGVkKCkpCisgICAgICAgICAgICBtX2RlZmF1bHRUYXNrR3JvdXAtPnN0b3BBbmREaXNjYXJkQWxs
VGFza3MoKTsKKyAgICB9CisgICAgcmV0dXJuICptX2RlZmF1bHRUYXNrR3JvdXA7CiB9CiAKIFN0
cmluZyBXb3JrbGV0R2xvYmFsU2NvcGU6Om9yaWdpbigpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS93b3JrbGV0cy9Xb3JrbGV0R2xvYmFsU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS93b3JrbGV0cy9Xb3JrbGV0R2xvYmFsU2NvcGUuaAkocmV2aXNpb24gMjUyNTYwKQor
KysgU291cmNlL1dlYkNvcmUvd29ya2xldHMvV29ya2xldEdsb2JhbFNjb3BlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDcgKzQzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBB
YnN0cmFjdEV2ZW50TG9vcDsKK2NsYXNzIEV2ZW50TG9vcFRhc2tHcm91cDsKIGNsYXNzIFdvcmtl
ckV2ZW50TG9vcDsKIGNsYXNzIFdvcmtsZXRTY3JpcHRDb250cm9sbGVyOwogCkBAIC02MCw3ICs2
MCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpc1BhaW50V29ya2xldEdsb2JhbFNj
b3BlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIEFic3RyYWN0RXZlbnRMb29wJiBl
dmVudExvb3AoKSBmaW5hbDsKKyAgICBFdmVudExvb3BUYXNrR3JvdXAmIGV2ZW50TG9vcCgpIGZp
bmFsOwogCiAgICAgY29uc3QgVVJMJiB1cmwoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NvZGUu
dXJsKCk7IH0KICAgICBTdHJpbmcgb3JpZ2luKCkgY29uc3QgZmluYWw7CkBAIC0xMzUsNiArMTM1
LDcgQEAgcHJpdmF0ZToKICAgICBSZWY8U2VjdXJpdHlPcmlnaW4+IG1fdG9wT3JpZ2luOwogCiAg
ICAgUmVmUHRyPFdvcmtlckV2ZW50TG9vcD4gbV9ldmVudExvb3A7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEV2ZW50TG9vcFRhc2tHcm91cD4gbV9kZWZhdWx0VGFza0dyb3VwOwogCiAgICAgLy8gRklY
TUU6IFRoaXMgaXMgbm90IGltcGxlbWVudGVkIHByb3Blcmx5LCBpdCBqdXN0IHNhdGlzZmllcyB0
aGUgY29tcGlsZXIuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5MTEzNgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>