<?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>90880</bug_id>
          
          <creation_ts>2012-07-10 06:34:45 -0700</creation_ts>
          <short_desc>Web Inspector: adding pause icon for JavaScript debugging</short_desc>
          <delta_ts>2012-08-03 07:54:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>93124</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Sergey Rogulenko">rogulenko</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>caseq</cc>
    
    <cc>dglazkov</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>philn</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rakuco</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>665722</commentid>
    <comment_count>0</comment_count>
    <who name="Sergey Rogulenko">rogulenko</who>
    <bug_when>2012-07-10 06:34:45 -0700</bug_when>
    <thetext>Adding pause icon for JavaScript debugging</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665725</commentid>
    <comment_count>1</comment_count>
      <attachid>151453</attachid>
    <who name="Sergey Rogulenko">rogulenko</who>
    <bug_when>2012-07-10 06:39:23 -0700</bug_when>
    <thetext>Created attachment 151453
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665774</commentid>
    <comment_count>2</comment_count>
      <attachid>151453</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-07-10 08:37:56 -0700</bug_when>
    <thetext>Comment on attachment 151453
Patch

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

&gt; Source/WebKit/chromium/ChangeLog:16
&gt; +        (DashBoard):

Is this going to be implemented for ports other than Chromium?

&gt; Source/WebCore/inspector/InspectorDebuggerAgent.cpp:649
&gt; +        pageAgent-&gt;showPauseWarning();

My guess is that exposing InspectorClient in InspectorPageAgent would be a more flexible approach than adding a one-off method to the cross-agents API (as opposed to the other similar methods).

Also, having such calls AFTER the internal state change seems a bit cleaner.

&gt; Source/WebCore/inspector/InspectorDebuggerAgent.cpp:674
&gt; +        pageAgent-&gt;hidePauseWarning();

Ditto

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:970
&gt; +void InspectorPageAgent::showPauseWarning()

Order of methods in a CPP file must correspond to that in the respective header file.

&gt; Source/WebCore/inspector/InspectorPageAgent.h:131
&gt; +    void showPauseWarning();

These can be replaced by a single
InspectorClient* client();
as discussed above.

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:81
&gt; +static const int pauseWarning = 100;

The name is not intuitive enough. Something like &quot;jsPausedSign&quot; (or even &quot;dashBoard&quot; if it is going to be used for something else) would be a bit more clear.

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:387
&gt; +        FrameView* frameView = this-&gt;frameView();

Seems like no methods are called on the frameView?

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:394
&gt; +        FloatSize fs = FloatSize(m_webView-&gt;size());

Acronyms are not used as names in WebKit. You might as well static_cast m_webView-&gt;size()&apos;s components to float rather than create a new FloatSize instance.

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:399
&gt; +    WebCore::FrameView* frameView()

This can be removed with its only call site.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665788</commentid>
    <comment_count>3</comment_count>
      <attachid>151453</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-07-10 09:04:28 -0700</bug_when>
    <thetext>Comment on attachment 151453
Patch

As discussed, approach generally looks good, but it needs a bit more polish on both UI and implementation. Removing r? for the time being.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665873</commentid>
    <comment_count>4</comment_count>
      <attachid>151484</attachid>
    <who name="Sergey Rogulenko">rogulenko</who>
    <bug_when>2012-07-10 10:46:36 -0700</bug_when>
    <thetext>Created attachment 151484
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665889</commentid>
    <comment_count>5</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2012-07-10 11:08:25 -0700</bug_when>
    <thetext>It is not clear what this is about. Please add a description and/or mock up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666517</commentid>
    <comment_count>6</comment_count>
      <attachid>151645</attachid>
    <who name="Sergey Rogulenko">rogulenko</who>
    <bug_when>2012-07-11 01:44:14 -0700</bug_when>
    <thetext>Created attachment 151645
The screen on the left is the original page, the screen on the right is how it looks, when you are standing paused on a break point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666674</commentid>
    <comment_count>7</comment_count>
      <attachid>151685</attachid>
    <who name="Sergey Rogulenko">rogulenko</who>
    <bug_when>2012-07-11 05:00:03 -0700</bug_when>
    <thetext>Created attachment 151685
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666746</commentid>
    <comment_count>8</comment_count>
      <attachid>151706</attachid>
    <who name="Sergey Rogulenko">rogulenko</who>
    <bug_when>2012-07-11 07:40:33 -0700</bug_when>
    <thetext>Created attachment 151706
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667558</commentid>
    <comment_count>9</comment_count>
      <attachid>151894</attachid>
    <who name="Sergey Rogulenko">rogulenko</who>
    <bug_when>2012-07-12 02:38:18 -0700</bug_when>
    <thetext>Created attachment 151894
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667661</commentid>
    <comment_count>10</comment_count>
      <attachid>151920</attachid>
    <who name="Sergey Rogulenko">rogulenko</who>
    <bug_when>2012-07-12 05:29:21 -0700</bug_when>
    <thetext>Created attachment 151920
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667675</commentid>
    <comment_count>11</comment_count>
      <attachid>151920</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-07-12 05:44:22 -0700</bug_when>
    <thetext>Comment on attachment 151920
Patch

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

Can we disable dashboard when &quot;inspect element&quot; mode is on?

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:372
&gt; +class DevToolsDashBoard : public WebPageOverlay {

Can you please move it to a file of its own?

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:443
&gt; +            DEFINE_STATIC_LOCAL(RefPtr&lt;Image&gt;, buttonImageDefault, (Image::loadPlatformResource(&quot;mediaplayerPlayDisabled&quot;)));
&gt; +            DEFINE_STATIC_LOCAL(RefPtr&lt;Image&gt;, buttonImage, (Image::loadPlatformResource(&quot;mediaplayerPlay&quot;)));
&gt; +            DEFINE_STATIC_LOCAL(RefPtr&lt;Image&gt;, buttonImageDown, (Image::loadPlatformResource(&quot;mediaplayerPlayDown&quot;)));
&gt; +            DEFINE_STATIC_LOCAL(RefPtr&lt;Image&gt;, buttonImageHover, (Image::loadPlatformResource(&quot;mediaplayerPlayHover&quot;)));

I think we could pass resource ids from the outside, so we can reuse the class for other buttons. I think you can just pass the root name (e.g. &quot;mediaplayerPlay&quot;) and derive the rest by adding specific states (Disabled/Play/Down/etc)

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:459
&gt; +        void getState(bool&amp; isFocused, bool&amp; isPressed)

does this have to be public?

&gt; Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp:465
&gt; +        void updateState(bool isFocused, bool isPressed)

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667707</commentid>
    <comment_count>12</comment_count>
      <attachid>151920</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-07-12 06:24:06 -0700</bug_when>
    <thetext>Comment on attachment 151920
Patch

r- as per our discussion offline - lets reuse existing DOM highlight plumbing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669139</commentid>
    <comment_count>13</comment_count>
      <attachid>152280</attachid>
    <who name="Sergey Rogulenko">rogulenko</who>
    <bug_when>2012-07-13 09:48:20 -0700</bug_when>
    <thetext>Created attachment 152280
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669141</commentid>
    <comment_count>14</comment_count>
      <attachid>152280</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2012-07-13 09:52:18 -0700</bug_when>
    <thetext>Comment on attachment 152280
Patch

I preferred the approach where the client was repsosible for showing/drawing this. Can you make this be PLATFORM(CHROMUM) or !PLATFORM(MAC)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669148</commentid>
    <comment_count>15</comment_count>
      <attachid>152280</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2012-07-13 09:54:47 -0700</bug_when>
    <thetext>Comment on attachment 152280
Patch

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

&gt; Source/WebCore/inspector/DOMNodeHighlighter.cpp:490
&gt; +InspectorDashBoard::InspectorDashBoard(InstrumentingAgents* instrumentingAgents, InspectorClient* client, InspectorPageAgent* pageAgent)

DashBoard is one word. So this should be InspectorDashboard. Though, I&apos;m not sure this should even be a separate class. Also classes in WebCore get their own file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669149</commentid>
    <comment_count>16</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2012-07-13 09:55:48 -0700</bug_when>
    <thetext>Ugh, sorry for all the typos earlier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669156</commentid>
    <comment_count>17</comment_count>
      <attachid>152280</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-07-13 10:00:19 -0700</bug_when>
    <thetext>Comment on attachment 152280
Patch

r- as per Timothy&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669177</commentid>
    <comment_count>18</comment_count>
      <attachid>152280</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-07-13 10:21:06 -0700</bug_when>
    <thetext>Comment on attachment 152280
Patch

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

As we agreed offline, lets do the following:
1) Convert DOMNodeHighlighter into the InspectorOverlay class
2) Put its instance into the InspectorPageAgent and configure it from within InspectorDOMAgent and PageDebuggerAgent
3) Make sure that getHighlight is still available on this new overlay so that Timothy could access it and paint highlight on the embedder level.

Timothy, this should not change the way things work for you.

&gt;&gt; Source/WebCore/inspector/DOMNodeHighlighter.cpp:490
&gt;&gt; +InspectorDashBoard::InspectorDashBoard(InstrumentingAgents* instrumentingAgents, InspectorClient* client, InspectorPageAgent* pageAgent)
&gt; 
&gt; DashBoard is one word. So this should be InspectorDashboard. Though, I&apos;m not sure this should even be a separate class. Also classes in WebCore get their own file.

You don&apos;t need instrumentingAgents here.

&gt; Source/WebCore/inspector/InspectorDOMAgent.cpp:206
&gt; +    , m_dashBoard(InspectorDashBoard::create(instrumentingAgents, client, pageAgent))

Dashboard should not belong to DOMAgent.

&gt; Source/WebCore/inspector/InspectorDOMAgent.cpp:1091
&gt; +    if (InspectorInstrumentation::isDebuggerPaused(m_instrumentingAgents))

DOM agent should not be debugger-aware.

&gt; Source/WebCore/inspector/InspectorInstrumentation.h:101
&gt; +    static bool isDebuggerPaused(InstrumentingAgents*);

Why do you need this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670210</commentid>
    <comment_count>19</comment_count>
      <attachid>152504</attachid>
    <who name="Sergey Rogulenko">rogulenko</who>
    <bug_when>2012-07-16 03:12:07 -0700</bug_when>
    <thetext>Created attachment 152504
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670227</commentid>
    <comment_count>20</comment_count>
      <attachid>152506</attachid>
    <who name="Sergey Rogulenko">rogulenko</who>
    <bug_when>2012-07-16 03:47:27 -0700</bug_when>
    <thetext>Created attachment 152506
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670253</commentid>
    <comment_count>21</comment_count>
      <attachid>152506</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-07-16 05:08:23 -0700</bug_when>
    <thetext>Comment on attachment 152506
Patch

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

&gt; Source/WebCore/inspector/DOMNodeHighlighter.cpp:495
&gt; +    , m_highlightData(0) { }

style: { } each on its own line.

&gt; Source/WebCore/inspector/DOMNodeHighlighter.cpp:502
&gt; +    else
&gt; +    if (m_shouldShowPauseWarning)

style: merge to &quot;else if&quot;

&gt; Source/WebCore/inspector/DOMNodeHighlighter.cpp:549
&gt; +    if (m_client) {

nit:
if (!m_client)
    return;

&gt; Source/WebCore/inspector/DOMNodeHighlighter.cpp:576
&gt; +    Frame* frame = m_pageAgent-&gt;mainFrame();

This seems to be the only place we use page agent. Please consider storing page instead, so we avoid circular dependencies.

&gt; Source/WebCore/inspector/DOMNodeHighlighter.h:83
&gt; +class InspectorOverlay {

You&apos;ll need to rename the file.

&gt; Source/WebCore/inspector/InspectorDOMAgent.cpp:1601
&gt;  void InspectorDOMAgent::getHighlight(Highlight* highlight) const

Does DOM agent need this still?

&gt; Source/WebCore/inspector/InspectorDebuggerAgent.h:138
&gt; +    virtual bool isPageDebuggerAgent() = 0;

Having BaseClass::isSomeDerivedClass() is very unfortunate. Making it pure virtual -- doubly so. Can we avoid this by just checking for a non-null InspectorOverlay?

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:319
&gt; +    , m_overlay(InspectorOverlay::create(this, client))

I&apos;d put overlay ownership to InspectorController, so that it&apos;s life-time is explicit and we avoid another reasons for agents to depend on each other. Pavel, WDYT?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670296</commentid>
    <comment_count>22</comment_count>
      <attachid>152523</attachid>
    <who name="Sergey Rogulenko">rogulenko</who>
    <bug_when>2012-07-16 06:49:36 -0700</bug_when>
    <thetext>Created attachment 152523
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670301</commentid>
    <comment_count>23</comment_count>
      <attachid>152523</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-16 07:01:40 -0700</bug_when>
    <thetext>Comment on attachment 152523
Patch

Attachment 152523 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13239949</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670303</commentid>
    <comment_count>24</comment_count>
      <attachid>152523</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-16 07:02:57 -0700</bug_when>
    <thetext>Comment on attachment 152523
Patch

Attachment 152523 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13243967</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670304</commentid>
    <comment_count>25</comment_count>
      <attachid>152523</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-16 07:03:08 -0700</bug_when>
    <thetext>Comment on attachment 152523
Patch

Attachment 152523 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13254249</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670311</commentid>
    <comment_count>26</comment_count>
      <attachid>152526</attachid>
    <who name="Sergey Rogulenko">rogulenko</who>
    <bug_when>2012-07-16 07:11:14 -0700</bug_when>
    <thetext>Created attachment 152526
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670317</commentid>
    <comment_count>27</comment_count>
      <attachid>152526</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-07-16 07:23:04 -0700</bug_when>
    <thetext>Comment on attachment 152526
Patch

Attachment 152526 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13239956</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670320</commentid>
    <comment_count>28</comment_count>
      <attachid>152526</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-16 07:27:13 -0700</bug_when>
    <thetext>Comment on attachment 152526
Patch

Attachment 152526 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13254253</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670321</commentid>
    <comment_count>29</comment_count>
      <attachid>152526</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-16 07:28:43 -0700</bug_when>
    <thetext>Comment on attachment 152526
Patch

Attachment 152526 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13248544</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670322</commentid>
    <comment_count>30</comment_count>
      <attachid>152526</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-16 07:29:22 -0700</bug_when>
    <thetext>Comment on attachment 152526
Patch

Attachment 152526 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13239957</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670325</commentid>
    <comment_count>31</comment_count>
      <attachid>152526</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-16 07:37:12 -0700</bug_when>
    <thetext>Comment on attachment 152526
Patch

Attachment 152526 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13245901</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670329</commentid>
    <comment_count>32</comment_count>
      <attachid>152526</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-16 07:42:58 -0700</bug_when>
    <thetext>Comment on attachment 152526
Patch

Attachment 152526 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13238941</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670331</commentid>
    <comment_count>33</comment_count>
      <attachid>152534</attachid>
    <who name="Sergey Rogulenko">rogulenko</who>
    <bug_when>2012-07-16 07:48:54 -0700</bug_when>
    <thetext>Created attachment 152534
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670376</commentid>
    <comment_count>34</comment_count>
      <attachid>152545</attachid>
    <who name="Sergey Rogulenko">rogulenko</who>
    <bug_when>2012-07-16 08:55:46 -0700</bug_when>
    <thetext>Created attachment 152545
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670380</commentid>
    <comment_count>35</comment_count>
      <attachid>152545</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-16 09:02:59 -0700</bug_when>
    <thetext>Comment on attachment 152545
Patch

Attachment 152545 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13233984</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670415</commentid>
    <comment_count>36</comment_count>
      <attachid>152553</attachid>
    <who name="Sergey Rogulenko">rogulenko</who>
    <bug_when>2012-07-16 09:52:52 -0700</bug_when>
    <thetext>Created attachment 152553
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670433</commentid>
    <comment_count>37</comment_count>
      <attachid>152558</attachid>
    <who name="Sergey Rogulenko">rogulenko</who>
    <bug_when>2012-07-16 10:25:55 -0700</bug_when>
    <thetext>Created attachment 152558
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670452</commentid>
    <comment_count>38</comment_count>
      <attachid>152558</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-07-16 10:44:06 -0700</bug_when>
    <thetext>Comment on attachment 152558
Patch

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

&gt; Source/WebCore/inspector/DOMNodeHighlighter.cpp:547
&gt; +void InspectorOverlay::update()

InspectorOverlay should be in a file of its own.

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:851
&gt; +void InspectorPageAgent::drawInspectorOverlay(GraphicsContext&amp; context)
&gt; +{
&gt; +    m_overlay-&gt;draw(context);
&gt; +}

Why do we need this method on InspectorPageAgent?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670489</commentid>
    <comment_count>39</comment_count>
      <attachid>152567</attachid>
    <who name="Sergey Rogulenko">rogulenko</who>
    <bug_when>2012-07-16 11:16:09 -0700</bug_when>
    <thetext>Created attachment 152567
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670520</commentid>
    <comment_count>40</comment_count>
      <attachid>152567</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-07-16 11:43:42 -0700</bug_when>
    <thetext>Comment on attachment 152567
Patch

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

&gt; Source/WebCore/inspector/DOMNodeHighlighter.cpp:492
&gt; +    , m_shouldShowPauseWarning(false)

This is not a warning, simply &quot;m_pausedInDebugger&quot;

&gt; Source/WebCore/inspector/DOMNodeHighlighter.cpp:502
&gt; +    else if (m_shouldShowPauseWarning)

I would not make these mutually exclusive - nuke the &quot;else&quot;!

&gt; Source/WebCore/inspector/DOMNodeHighlighter.cpp:503
&gt; +        drawPauseWarning(context);

drawIsPausedInDebugger.

&gt; Source/WebCore/inspector/DOMNodeHighlighter.cpp:569
&gt; +void InspectorOverlay::drawPauseWarning(GraphicsContext&amp; context)

drawIsPausedInDebugger

&gt; Source/WebCore/inspector/DOMNodeHighlighter.cpp:589
&gt; +    String text = &quot;Paused in debugger.&quot;;

Ok, we need to figure out how we localize it now.

&gt; Source/WebCore/inspector/DOMNodeHighlighter.h:95
&gt; +    void setShouldShowPauseWarning(bool);

setIsPausedInDebugger

&gt; Source/WebCore/inspector/InspectorController.cpp:299
&gt; +    m_overlay-&gt;draw(context);

Nit: We need to rename &quot;draw&quot; to &quot;paint&quot; everywhere in overlay at some point.

&gt; Source/WebCore/inspector/InspectorDOMAgent.cpp:1036
&gt;      // This method requires m_highlightData to have been filled in by its client.

Now that highlightData lives in the InspectorOverlay, there is no need to mirror it here.

&gt; Source/WebCore/inspector/InspectorDebuggerAgent.cpp:109
&gt; +        m_overlay-&gt;setShouldShowPauseWarning(false);

You should sniff for these from within PageDebuggerAgent.

&gt; Source/WebCore/inspector/InspectorDebuggerAgent.h:128
&gt; +    InspectorDebuggerAgent(InstrumentingAgents*, InspectorState*, InjectedScriptManager*, InspectorOverlay*);

InspectorDebuggerAgent should not be affected. Only PageDebuggerAgent should be.

&gt; Source/WebCore/inspector/InspectorPageAgent.h:51
&gt; +class GraphicsContext;

Remove this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671200</commentid>
    <comment_count>41</comment_count>
      <attachid>152744</attachid>
    <who name="Sergey Rogulenko">rogulenko</who>
    <bug_when>2012-07-17 05:29:29 -0700</bug_when>
    <thetext>Created attachment 152744
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671206</commentid>
    <comment_count>42</comment_count>
      <attachid>152744</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-07-17 05:49:09 -0700</bug_when>
    <thetext>Comment on attachment 152744
Patch

LGTM, though I liked the previous approach where highlight was mutually exclusive with pause screen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671248</commentid>
    <comment_count>43</comment_count>
      <attachid>152744</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-07-17 06:57:20 -0700</bug_when>
    <thetext>Comment on attachment 152744
Patch

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

&gt; Source/WebCore/inspector/DOMNodeHighlighter.cpp:492
&gt; +    , m_isPausedInDebugger(false)

Nit: we rarely use &quot;is&quot; prefix.

&gt; Source/WebCore/inspector/DOMNodeHighlighter.cpp:501
&gt; +        drawHighlight(context);

Nit: You could simply call drawHighlight here and bail out from there in case of no highlightData.

&gt; Source/WebCore/inspector/DOMNodeHighlighter.cpp:541
&gt; +void InspectorOverlay::setIsPausedInDebugger(bool flag)

setPausedInDebugger, sorry about that.

&gt; Source/WebCore/inspector/InspectorDOMAgent.cpp:1038
&gt; +    m_overlay-&gt;setHighlight(m_document.get(), m_highlightData.get());

m_document will expire upon reset.

&gt; Source/WebCore/inspector/InspectorDOMAgent.cpp:1606
&gt; +    m_overlay-&gt;getHighlight(m_highlightData-&gt;node ? m_highlightData-&gt;node-&gt;document() : m_document.get(), m_highlightData.get(), highlight);

I was hoping m_highlightData could go away from the DOMAgent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671380</commentid>
    <comment_count>44</comment_count>
      <attachid>152783</attachid>
    <who name="Sergey Rogulenko">rogulenko</who>
    <bug_when>2012-07-17 10:47:04 -0700</bug_when>
    <thetext>Created attachment 152783
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671390</commentid>
    <comment_count>45</comment_count>
      <attachid>152783</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-17 10:53:33 -0700</bug_when>
    <thetext>Comment on attachment 152783
Patch

Attachment 152783 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13281215</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671391</commentid>
    <comment_count>46</comment_count>
      <attachid>152783</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-17 10:53:56 -0700</bug_when>
    <thetext>Comment on attachment 152783
Patch

Attachment 152783 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13274185</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671392</commentid>
    <comment_count>47</comment_count>
      <attachid>152783</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-07-17 10:55:16 -0700</bug_when>
    <thetext>Comment on attachment 152783
Patch

Attachment 152783 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13274186</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671393</commentid>
    <comment_count>48</comment_count>
      <attachid>152783</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-17 10:55:39 -0700</bug_when>
    <thetext>Comment on attachment 152783
Patch

Attachment 152783 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13272192</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671395</commentid>
    <comment_count>49</comment_count>
      <attachid>152787</attachid>
    <who name="Sergey Rogulenko">rogulenko</who>
    <bug_when>2012-07-17 10:56:32 -0700</bug_when>
    <thetext>Created attachment 152787
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671422</commentid>
    <comment_count>50</comment_count>
      <attachid>152787</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-07-17 11:16:51 -0700</bug_when>
    <thetext>Comment on attachment 152787
Patch

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

&gt; Source/WebCore/inspector/DOMNodeHighlighter.cpp:73
&gt; +static Color parseColor(const RefPtr&lt;InspectorObject&gt;* colorObject)

Overlay is a utility class, it should not depend on the inspector transport objects.

&gt; Source/WebCore/inspector/DOMNodeHighlighter.cpp:585
&gt; +    m_highlightData = adoptPtr(new HighlightData());

I think this method should receive PassRefPtr&lt;HighlightData&gt; instead.

&gt; Source/WebCore/inspector/DOMNodeHighlighter.cpp:594
&gt; +    m_highlightData = adoptPtr(new HighlightData());

ditto

&gt; Source/WebCore/inspector/DOMNodeHighlighter.cpp:611
&gt; +    highlightConfig-&gt;getBoolean(&quot;showInfo&quot;, &amp;showInfo);

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672186</commentid>
    <comment_count>51</comment_count>
      <attachid>152976</attachid>
    <who name="Sergey Rogulenko">rogulenko</who>
    <bug_when>2012-07-18 03:11:21 -0700</bug_when>
    <thetext>Created attachment 152976
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672262</commentid>
    <comment_count>52</comment_count>
      <attachid>152976</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-07-18 05:15:09 -0700</bug_when>
    <thetext>Comment on attachment 152976
Patch

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

&gt; Source/WebCore/inspector/DOMNodeHighlighter.cpp:567
&gt; +    if (!m_client)
&gt; +        return;

Do we need this check?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672274</commentid>
    <comment_count>53</comment_count>
      <attachid>152994</attachid>
    <who name="Sergey Rogulenko">rogulenko</who>
    <bug_when>2012-07-18 05:24:01 -0700</bug_when>
    <thetext>Created attachment 152994
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672310</commentid>
    <comment_count>54</comment_count>
      <attachid>152994</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-07-18 06:18:01 -0700</bug_when>
    <thetext>Comment on attachment 152994
Patch

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

Please fix OwnPtr nits prior to landing.

&gt; Source/WebCore/inspector/DOMNodeHighlighter.cpp:533
&gt; +    if (m_highlightData) {

// FIXME: Clear entire highlight data here, store config upon setInspectModeEnabled

&gt; Source/WebCore/inspector/DOMNodeHighlighter.h:96
&gt; +    void setHighlightData(PassOwnPtr&lt;HighlightData&gt;);

I.e. highlightNode will merge with the setHighlightData.

&gt; Source/WebCore/inspector/InspectorDOMAgent.cpp:985
&gt; +        m_overlay-&gt;highlightNode(node);

You should pass m_inspectModeHighlightData here (in the subsequent change).

&gt; Source/WebCore/inspector/InspectorDOMAgent.cpp:1009
&gt; +    HighlightData* highlightData = new HighlightData();

You should always adoptPtr upon creation.

&gt; Source/WebCore/inspector/InspectorDOMAgent.cpp:1029
&gt; +    HighlightData* highlightData = new HighlightData();

ditto

&gt; Source/WebCore/inspector/InspectorDOMAgent.cpp:1054
&gt; +        HighlightData* highlightData = new HighlightData();

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672316</commentid>
    <comment_count>55</comment_count>
      <attachid>153003</attachid>
    <who name="Sergey Rogulenko">rogulenko</who>
    <bug_when>2012-07-18 06:31:22 -0700</bug_when>
    <thetext>Created attachment 153003
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672340</commentid>
    <comment_count>56</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-07-18 07:05:22 -0700</bug_when>
    <thetext>Committed r122966: &lt;http://trac.webkit.org/changeset/122966&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672431</commentid>
    <comment_count>57</comment_count>
      <attachid>153003</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-07-18 09:26:48 -0700</bug_when>
    <thetext>Comment on attachment 153003
Patch

Clearing r?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151453</attachid>
            <date>2012-07-10 06:39:23 -0700</date>
            <delta_ts>2012-07-10 10:46:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90880-20120710173921.patch</filename>
            <type>text/plain</type>
            <size>10374</size>
            <attacher name="Sergey Rogulenko">rogulenko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMjA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGE1YjhjYTI3MGVhYzJh
NmVlNThlNDljODkzMzg3YTc1MGJlMTlmMS4uOTRkNWNkYWY2OTc2ZDAyZmU4YTQxNWIxYzVhMmU5
MGZhYmExY2NiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA3LTEwICBTZXJn
ZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogYWRkaW5nIHBhdXNlIGljb24gZm9yIEphdmFTY3JpcHQgZGVidWdnaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg4MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50OjpzaG93UGF1
c2VXYXJuaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNsaWVudDo6aGlkZVBhdXNl
V2FybmluZyk6CisgICAgICAgIChJbnNwZWN0b3JDbGllbnQpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmRpZENvbnRpbnVlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
UGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6c2hv
d1BhdXNlV2FybmluZyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclBhZ2VBZ2VudDo6aGlkZVBhdXNlV2FybmluZyk6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvclBhZ2VBZ2VudC5oOgorCiAyMDEyLTA3LTEwICBTaGVyaWZmIEJvdCAgPHdlYmtp
dC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91
dCByMTIyMTc4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA3NTk2NzNlNDU4YzBmNzgz
YmQ2MGRiYjIxMjU3NzEyNzIxNTkxMzZlLi45MDcyZDMzYWM0ZTYxNjRiMzg3ODllYzc1YWE0MDE3
ZDBkYzJjNWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisy
MDEyLTA3LTEwICBTZXJnZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CisKKyAg
ICAgICAgV2ViIEluc3BlY3RvcjogYWRkaW5nIHBhdXNlIGljb24gZm9yIEphdmFTY3JpcHQgZGVi
dWdnaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
MDg4MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
c3JjL0luc3BlY3RvckNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JD
bGllbnRJbXBsOjpzaG93UGF1c2VXYXJuaW5nKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChXZWJLaXQ6Okluc3BlY3RvckNsaWVudEltcGw6OmhpZGVQYXVzZVdhcm5pbmcpOgorICAgICAg
ICAqIHNyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmg6CisgICAgICAgIChJbnNwZWN0b3JDbGllbnRJ
bXBsKToKKyAgICAgICAgKiBzcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwOgorICAgICAgICAo
T3ZlcmxheVpPcmRlcnMpOgorICAgICAgICAoRGFzaEJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6
RGFzaEJvYXJkOjpEYXNoQm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpEYXNoQm9hcmQ6On5EYXNo
Qm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpEYXNoQm9hcmQ6OnBhaW50UGFnZU92ZXJsYXkpOgor
ICAgICAgICAoV2ViS2l0OjpEYXNoQm9hcmQ6OmZyYW1lVmlldyk6CisgICAgICAgIChXZWJLaXQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6c2hvd1BhdXNlV2Fybmlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpoaWRlUGF1c2VXYXJu
aW5nKToKKyAgICAgICAgKiBzcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaDoKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJEZXZUb29sc0FnZW50SW1wbCk6CisKIDIwMTItMDctMDkgIE1h
dHQgRmFsa2VuaGFnZW4gIDxmYWxrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBFTkFC
TEVfRElBTE9HX0VMRU1FTlQgYW5kIHNrZWxldG9uIGZpbGVzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmgKaW5kZXggNzY3MWIwMDE4YmMxZjdiOTA3NDVjMThhNWU4
MDg5OThhOWZhZmFmMy4uZTc1MjExMDIxNTc1Y2VlZmU1ZmVhMzFjOTQyNTIyZTljNGQzYTNmOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNsaWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaApAQCAtNTEsNiAr
NTEsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodCgpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgpID0gMDsKIAorICAgIHZpcnR1YWwgdm9pZCBzaG93
UGF1c2VXYXJuaW5nKCkgeyB9OworICAgIHZpcnR1YWwgdm9pZCBoaWRlUGF1c2VXYXJuaW5nKCkg
eyB9OworICAgIAogICAgIHZpcnR1YWwgYm9vbCBjYW5DbGVhckJyb3dzZXJDYWNoZSgpIHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyQnJvd3NlckNhY2hlKCkgeyB9CiAg
ICAgdmlydHVhbCBib29sIGNhbkNsZWFyQnJvd3NlckNvb2tpZXMoKSB7IHJldHVybiBmYWxzZTsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuY3BwCmluZGV4IDExODA3YTNmOWU4Nzk4NDBkZWE2MDNiMzY2M2UyMDlhZmNlZDcyYzguLmZk
MmY1YzAxMGI2Y2NkNzYxMTg4MmE3NDEyMjY4ZjA2NTBjZWNmZDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKQEAgLTY0NSw2
ICs2NDUsOCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmZhaWxlZFRvUGFyc2VTb3Vy
Y2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZwogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpkaWRQYXVzZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IFNjcmlwdFZh
bHVlJiBjYWxsRnJhbWVzLCBjb25zdCBTY3JpcHRWYWx1ZSYgZXhjZXB0aW9uKQogewogICAgIEFT
U0VSVChzY3JpcHRTdGF0ZSAmJiAhbV9wYXVzZWRTY3JpcHRTdGF0ZSk7CisgICAgaWYgKEluc3Bl
Y3RvclBhZ2VBZ2VudCogcGFnZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0
b3JQYWdlQWdlbnQoKSkKKyAgICAgICAgcGFnZUFnZW50LT5zaG93UGF1c2VXYXJuaW5nKCk7CiAg
ICAgbV9wYXVzZWRTY3JpcHRTdGF0ZSA9IHNjcmlwdFN0YXRlOwogICAgIG1fY3VycmVudENhbGxT
dGFjayA9IGNhbGxGcmFtZXM7CiAKQEAgLTY2OCw2ICs2NzAsOCBAQCB2b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgU2Ny
aXB0VmFsdQogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZENvbnRpbnVlKCkKIHsK
KyAgICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQgPSBtX2luc3RydW1lbnRpbmdB
Z2VudHMtPmluc3BlY3RvclBhZ2VBZ2VudCgpKQorICAgICAgICBwYWdlQWdlbnQtPmhpZGVQYXVz
ZVdhcm5pbmcoKTsKICAgICBtX3BhdXNlZFNjcmlwdFN0YXRlID0gMDsKICAgICBtX2N1cnJlbnRD
YWxsU3RhY2sgPSBTY3JpcHRWYWx1ZSgpOwogICAgIGNsZWFyQnJlYWtEZXRhaWxzKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4IDRl
MDZhNDM2YjVjNjcxNGJhMGEzMjg2OTI2YTM2ZjljNWFmM2EyYTguLjEzZWE1YzNiYWUxYzA2Yjhj
NGViMTBhMzg2ZGJlMjU0NDdlN2MzNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCkBAIC05NjcsNiArOTY3LDE2IEBAIHZvaWQgSW5zcGVj
dG9yUGFnZUFnZW50Ojp1cGRhdGVWaWV3TWV0cmljcyhpbnQgd2lkdGgsIGludCBoZWlnaHQsIGRv
dWJsZSBmb250U2NhCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjptZWRpYVF1ZXJ5UmVz
dWx0Q2hhbmdlZChkb2N1bWVudCk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzaG93
UGF1c2VXYXJuaW5nKCkKK3sKKyAgICBtX2NsaWVudC0+c2hvd1BhdXNlV2FybmluZygpOworfQor
Cit2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6aGlkZVBhdXNlV2FybmluZygpCit7CisgICAgbV9j
bGllbnQtPmhpZGVQYXVzZVdhcm5pbmcoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JQYWdlQWdlbnQuaAppbmRleCA5NjRiYzg1ZmM2MzY0OGFmMzhmMmRjMTJmYzgz
Zjc5NzFiOTNhNjYzLi4xMDAwMmNmOTY0YzNmYzE4NGM1NjQ5ZWI3NTE4YWVlOTFlMGVmNzg4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCkBAIC0x
MjgsNiArMTI4LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlKCk7CiAKICAg
ICAvLyBDcm9zcy1hZ2VudHMgQVBJCisgICAgdm9pZCBzaG93UGF1c2VXYXJuaW5nKCk7CisgICAg
dm9pZCBoaWRlUGF1c2VXYXJuaW5nKCk7CiAgICAgRnJhbWUqIG1haW5GcmFtZSgpOwogICAgIFN0
cmluZyBjcmVhdGVJZGVudGlmaWVyKCk7CiAgICAgRnJhbWUqIGZyYW1lRm9ySWQoY29uc3QgU3Ry
aW5nJiBmcmFtZUlkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lu
c3BlY3RvckNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVj
dG9yQ2xpZW50SW1wbC5jcHAKaW5kZXggMDI1ODc2NDQ2YTM1MWFlZTJkY2YyOThlZWUxMWQ5ZDNk
ZTJiZGI1NS4uZjQxNGExNzMwMDk5MTZiNTgyYWFjYjQ5YWZiZjdlMTQ3NWVkZmI0MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5jcHAK
QEAgLTk1LDYgKzk1LDE4IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6aGlkZUhpZ2hsaWdo
dCgpCiAgICAgICAgIGFnZW50LT5oaWRlSGlnaGxpZ2h0KCk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9y
Q2xpZW50SW1wbDo6c2hvd1BhdXNlV2FybmluZygpCit7CisgICAgaWYgKFdlYkRldlRvb2xzQWdl
bnRJbXBsKiBhZ2VudCA9IGRldlRvb2xzQWdlbnQoKSkKKyAgICAgICAgYWdlbnQtPnNob3dQYXVz
ZVdhcm5pbmcoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpoaWRlUGF1c2VXYXJu
aW5nKCkKK3sKKyAgICBpZiAoV2ViRGV2VG9vbHNBZ2VudEltcGwqIGFnZW50ID0gZGV2VG9vbHNB
Z2VudCgpKQorICAgICAgICBhZ2VudC0+aGlkZVBhdXNlV2FybmluZygpOworfQorCiBib29sIElu
c3BlY3RvckNsaWVudEltcGw6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBXVEY6OlN0cmlu
ZyYgbWVzc2FnZSkKIHsKICAgICBpZiAoV2ViRGV2VG9vbHNBZ2VudEltcGwqIGFnZW50ID0gZGV2
VG9vbHNBZ2VudCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5z
cGVjdG9yQ2xpZW50SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9y
Q2xpZW50SW1wbC5oCmluZGV4IDVlYTZiYWViM2QwMDkwMDk2ODUyNDU5MWE0YjM5YzQwOTRmNWE3
YWIuLjA4NWQ4MWM4ZDUwOTQ5MDIxMDU5MWUwNzk4NmQ4ZGE3Nzg1Y2FlNTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmgKQEAgLTU3LDYg
KzU3LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHQoKTsKICAgICB2aXJ0
dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgpOwogCisgICAgdmlydHVhbCB2b2lkIHNob3dQYXVzZVdh
cm5pbmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGlkZVBhdXNlV2FybmluZygpOworCiAgICAgdmly
dHVhbCBib29sIHNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBXVEY6OlN0cmluZyYpOwogCiAg
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzSW5zcGVjdG9yU3RhdGVVcGRhdGVzKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RGV2VG9vbHNBZ2VudEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2
VG9vbHNBZ2VudEltcGwuY3BwCmluZGV4IDFiZDE1OTViNmQzYjY4OTQ5MWVjNDkzN2UyODQ3YzVk
ZTFhYjBjNzIuLjc3MjQyMTVjMDJkZWQ1NmVlYTZjOGUyNDMyM2RmNzdmYmI1OGZkZDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5j
cHAKQEAgLTc3LDYgKzc3LDggQEAgc3RhdGljIGNvbnN0IGludCB2aWV3cG9ydEd1dHRlciA9IDk3
OwogCiAvLyBVc2UgOTkgYXMgYSBiaWcgei1vcmRlciBudW1iZXIgc28gdGhhdCBoaWdobGlnaHQg
aXMgYWJvdmUgb3RoZXIgb3ZlcmxheXMuCiBzdGF0aWMgY29uc3QgaW50IGhpZ2hsaWdodCA9IDk5
OworCitzdGF0aWMgY29uc3QgaW50IHBhdXNlV2FybmluZyA9IDEwMDsKIH0KIAogbmFtZXNwYWNl
IFdlYktpdCB7CkBAIC0zNjYsNiArMzY4LDQyIEBAIHByaXZhdGU6CiAgICAgZG91YmxlIG1fb3Jp
Z2luYWxab29tRmFjdG9yOwogfTsKIAorY2xhc3MgRGFzaEJvYXJkIDogcHVibGljIFdlYlBhZ2VP
dmVybGF5IHsKK3B1YmxpYzoKKyAgICBEYXNoQm9hcmQoV2ViVmlld0ltcGwqIHdlYlZpZXcpCisg
ICAgICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCisgICAgeworICAgICAgICBtX3dlYlZpZXctPmFk
ZFBhZ2VPdmVybGF5KHRoaXMsIE92ZXJsYXlaT3JkZXJzOjpwYXVzZVdhcm5pbmcpOworICAgIH0K
KyAgICAKKyAgICB+RGFzaEJvYXJkKCkgCisgICAgeworICAgICAgICBtX3dlYlZpZXctPnJlbW92
ZVBhZ2VPdmVybGF5KHRoaXMpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRQYWdlT3ZlcmxheShXZWJDYW52YXMqIGNhbnZhcykKKyAgICB7CisgICAgICAgIEZyYW1l
VmlldyogZnJhbWVWaWV3ID0gdGhpcy0+ZnJhbWVWaWV3KCk7CisgICAgICAgIGlmICghZnJhbWVW
aWV3KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0QnVpbGRlciBidWlsZGVyKGNhbnZhcyk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dCYgZ2Mg
PSBidWlsZGVyLmNvbnRleHQoKTsKKyAgICAgICAgZ2Muc2V0RmlsbENvbG9yKHN0YXRpY19jYXN0
PFJHQkEzMj4oMHg3RjAwMDAwMCksIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAgICBGbG9h
dFNpemUgZnMgPSBGbG9hdFNpemUobV93ZWJWaWV3LT5zaXplKCkpOworICAgICAgICBnYy5maWxs
UmVjdChGbG9hdFJlY3QoZnMud2lkdGgoKSAvIDIgLSA0MCwgZnMuaGVpZ2h0KCkgLyAyIC0gNDAs
IDMwLCA4MCkpOworICAgICAgICBnYy5maWxsUmVjdChGbG9hdFJlY3QoZnMud2lkdGgoKSAvIDIg
KyAxMCwgZnMuaGVpZ2h0KCkgLyAyIC0gNDAsIDMwLCA4MCkpOworICAgIH0KKyAgICAKKyAgICBX
ZWJDb3JlOjpGcmFtZVZpZXcqIGZyYW1lVmlldygpCisgICAgeworICAgICAgICByZXR1cm4gbV93
ZWJWaWV3LT5tYWluRnJhbWVJbXBsKCkgPyBtX3dlYlZpZXctPm1haW5GcmFtZUltcGwoKS0+ZnJh
bWVWaWV3KCkgOiAwOworICAgIH0KKworICAgIFdlYlZpZXdJbXBsKiBtX3dlYlZpZXc7Cit9Owor
CiAKIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpXZWJEZXZUb29sc0FnZW50SW1wbCgKICAgICBXZWJW
aWV3SW1wbCogd2ViVmlld0ltcGwsCkBAIC00NDQsNiArNDgyLDE4IEBAIHZvaWQgV2ViRGV2VG9v
bHNBZ2VudEltcGw6OndlYlZpZXdSZXNpemVkKCkKICAgICAgICAgbV9tZXRyaWNzU3VwcG9ydC0+
d2ViVmlld1Jlc2l6ZWQoKTsKIH0KIAordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6c2hvd1Bh
dXNlV2FybmluZygpIAoreworICAgIGlmICghbV9kYXNoQm9hcmQpCisgICAgICAgIG1fZGFzaEJv
YXJkID0gYWRvcHRQdHIobmV3IERhc2hCb2FyZChtX3dlYlZpZXdJbXBsKSk7Cit9CisKK3ZvaWQg
V2ViRGV2VG9vbHNBZ2VudEltcGw6OmhpZGVQYXVzZVdhcm5pbmcoKQoreworICAgIGlmIChtX2Rh
c2hCb2FyZCkKKyAgICAgICAgbV9kYXNoQm9hcmQuY2xlYXIoKTsKK30KKwogdm9pZCBXZWJEZXZU
b29sc0FnZW50SW1wbDo6b3ZlcnJpZGVEZXZpY2VNZXRyaWNzKGludCB3aWR0aCwgaW50IGhlaWdo
dCwgZmxvYXQgZm9udFNjYWxlRmFjdG9yLCBib29sIGZpdFdpbmRvdykKIHsKICAgICBpZiAoIXdp
ZHRoICYmICFoZWlnaHQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkRldlRvb2xzQWdlbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJE
ZXZUb29sc0FnZW50SW1wbC5oCmluZGV4IDZiNTI0NzYxNzAxODY1YTMwZTc0Mjg2MDNlYzFlOGQ0
MmM1MTU0YWIuLmIzNDFmZTBkMGE3YTg5OGQwOTNhNjdiMzQyMDk2MTJiYzY2ODUzMmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmgK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaApA
QCAtNTIsNiArNTIsNyBAQCBjbGFzcyBOb2RlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xh
c3MgRGFzaEJvYXJkOwogY2xhc3MgRGV2aWNlTWV0cmljc1N1cHBvcnQ7CiBjbGFzcyBXZWJEZXZU
b29sc0FnZW50Q2xpZW50OwogY2xhc3MgV2ViRnJhbWU7CkBAIC0xMDEsNiArMTAyLDggQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBjbGVhckJyb3dzZXJDYWNoZSgpOwogICAgIHZpcnR1YWwg
dm9pZCBjbGVhckJyb3dzZXJDb29raWVzKCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd1BhdXNl
V2FybmluZygpOworICAgIHZpcnR1YWwgdm9pZCBoaWRlUGF1c2VXYXJuaW5nKCk7CiAgICAgdmly
dHVhbCB2b2lkIG92ZXJyaWRlRGV2aWNlTWV0cmljcyhpbnQgd2lkdGgsIGludCBoZWlnaHQsIGZs
b2F0IGZvbnRTY2FsZUZhY3RvciwgYm9vbCBmaXRXaW5kb3cpOwogICAgIHZpcnR1YWwgdm9pZCBh
dXRvWm9vbVBhZ2VUb0ZpdFdpZHRoKCk7CiAKQEAgLTExOCw2ICsxMjEsNyBAQCBwcml2YXRlOgog
ICAgIFdlYlZpZXdJbXBsKiBtX3dlYlZpZXdJbXBsOwogICAgIGJvb2wgbV9hdHRhY2hlZDsKICAg
ICBPd25QdHI8RGV2aWNlTWV0cmljc1N1cHBvcnQ+IG1fbWV0cmljc1N1cHBvcnQ7CisgICAgT3du
UHRyPERhc2hCb2FyZD4gbV9kYXNoQm9hcmQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151484</attachid>
            <date>2012-07-10 10:46:36 -0700</date>
            <delta_ts>2012-07-11 04:59:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90880-20120710214634.patch</filename>
            <type>text/plain</type>
            <size>18899</size>
            <attacher name="Sergey Rogulenko">rogulenko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMjM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDczYTE3Yjk3OWRjNzIy
ZDZmYjk2YzlhMzYwNWEzZWU0N2Y5YTNmYy4uN2QwMGRlMWU5NDkyYzA3ZWRjMmRhOGM4MDk2YTZl
NmE4YTA3MTE1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEyLTA3LTEwICBTZXJn
ZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogYWRkaW5nIHBhdXNlIGljb24gZm9yIEphdmFTY3JpcHQgZGVidWdnaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg4MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50OjpzaG93UGF1
c2VXYXJuaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNsaWVudDo6aGlkZVBhdXNl
V2FybmluZyk6CisgICAgICAgIChJbnNwZWN0b3JDbGllbnQpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW5zcGVjdG9y
RGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpzaG93UGF1c2VXYXJuaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmhpZGVQYXVzZVdhcm5pbmcpOgorICAgICAgICAqIGluc3BlY3Rvci9QYWdlRGVidWdn
ZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlRGVidWdnZXJBZ2VudDo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50OjpQYWdlRGVidWdnZXJBZ2Vu
dCk6CisgICAgICAgICogaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgIChQ
YWdlRGVidWdnZXJBZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL1dvcmtlckRlYnVnZ2VyQWdl
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyRGVidWdnZXJBZ2VudDo6V29ya2VyRGVi
dWdnZXJBZ2VudCk6CisKIDIwMTItMDctMTAgIFN1ZGFyc2FuYSBOYWdpbmVuaSAgPHN1ZGFyc2Fu
YS5uYWdpbmVuaUBsaW51eC5pbnRlbC5jb20+CiAKICAgICAgICAgW0dUS10gRml4IG1lbW9yeSBs
ZWFrcyBieSBhZG9wdGluZyBhbGxvY2F0aW9uIG9mIEdka1BpeGJ1ZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCA3NmFhMWVhZWZlNTE2YTY0ZTkyODFlZTQyMTRkMTRhYmEzOWUxM2ZjLi45
MTE0MWVhZDBhMTc1NjRlMzVkZDZlMTA1YzIxMDQ0NTAzYzFkZmE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTA3LTEwICBTZXJnZXkgUm9ndWxlbmtv
ICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogYWRkaW5n
IHBhdXNlIGljb24gZm9yIEphdmFTY3JpcHQgZGVidWdnaW5nCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg4MAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3JjL0luc3BlY3RvckNsaWVudEltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnRJbXBsOjpzaG93UGF1c2VXYXJuaW5n
KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudElt
cGw6OmhpZGVQYXVzZVdhcm5pbmcpOgorICAgICAgICAqIHNyYy9JbnNwZWN0b3JDbGllbnRJbXBs
Lmg6CisgICAgICAgIChJbnNwZWN0b3JDbGllbnRJbXBsKToKKyAgICAgICAgKiBzcmMvV2ViRGV2
VG9vbHNBZ2VudEltcGwuY3BwOgorICAgICAgICAoT3ZlcmxheVpPcmRlcnMpOgorICAgICAgICAo
RGV2VG9vbHNEYXNoQm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpEZXZUb29sc0Rhc2hCb2FyZDo6
RGV2VG9vbHNEYXNoQm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpEZXZUb29sc0Rhc2hCb2FyZDo6
fkRldlRvb2xzRGFzaEJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6RGV2VG9vbHNEYXNoQm9hcmQ6
OnNldFVwRm9udERlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYktpdDo6RGV2VG9vbHNEYXNoQm9h
cmQ6OmRyYXdUZXh0KToKKyAgICAgICAgKFdlYktpdDo6RGV2VG9vbHNEYXNoQm9hcmQ6OnBhaW50
UGFnZU92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2
VG9vbHNBZ2VudEltcGw6OnNob3dQYXVzZVdhcm5pbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJE
ZXZUb29sc0FnZW50SW1wbDo6aGlkZVBhdXNlV2FybmluZyk6CisgICAgICAgICogc3JjL1dlYkRl
dlRvb2xzQWdlbnRJbXBsLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViRGV2VG9v
bHNBZ2VudEltcGwpOgorCiAyMDEyLTA3LTEwICBMZWFuZHJvIEdyYWNpYSBHaWwgIDxsZWFuZHJv
Z3JhY2lhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIENocm9taXVtIGJ1aWxk
IGZpeCBmb3IgbWFjLXJlbGVhc2UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q2xpZW50LmgKaW5kZXggNzY3MWIwMDE4YmMxZjdiOTA3NDVjMThhNWU4MDg5OThhOWZhZmFmMy4u
ZTc1MjExMDIxNTc1Y2VlZmU1ZmVhMzFjOTQyNTIyZTljNGQzYTNmOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaApAQCAtNTEsNiArNTEsOSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgaGlk
ZUhpZ2hsaWdodCgpID0gMDsKIAorICAgIHZpcnR1YWwgdm9pZCBzaG93UGF1c2VXYXJuaW5nKCkg
eyB9OworICAgIHZpcnR1YWwgdm9pZCBoaWRlUGF1c2VXYXJuaW5nKCkgeyB9OworICAgIAogICAg
IHZpcnR1YWwgYm9vbCBjYW5DbGVhckJyb3dzZXJDYWNoZSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCB2b2lkIGNsZWFyQnJvd3NlckNhY2hlKCkgeyB9CiAgICAgdmlydHVhbCBib29s
IGNhbkNsZWFyQnJvd3NlckNvb2tpZXMoKSB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDA5NWUxY2M1
MWIzNTRhOGY4ZTA4MTQ2YTc5ZWY3MDhkYjdjZDQ5Y2UuLmRmMjMwMDAwNTJkMDk5NmMzYmE0MzQ2
Yjg1ZjdmZGVjNjFkNGE4MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTEzMCw3ICsxMzAsNyBAQCBJbnNwZWN0b3JDb250cm9s
bGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogaW5z
cGVjdG9yQwogICAgIG1fYWdlbnRzLmFwcGVuZChjb25zb2xlQWdlbnRQdHIucmVsZWFzZSgpKTsK
IAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIE93blB0cjxJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50PiBkZWJ1Z2dlckFnZW50UHRyKFBhZ2VEZWJ1Z2dlckFnZW50OjpjcmVhdGUo
bV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBtX3N0YXRlLmdldCgpLCBwYWdlLCBtX2luamVj
dGVkU2NyaXB0TWFuYWdlci5nZXQoKSkpOworICAgIE93blB0cjxJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50PiBkZWJ1Z2dlckFnZW50UHRyKFBhZ2VEZWJ1Z2dlckFnZW50OjpjcmVhdGUobV9pbnN0cnVt
ZW50aW5nQWdlbnRzLmdldCgpLCBtX3N0YXRlLmdldCgpLCBwYWdlLCBtX2luamVjdGVkU2NyaXB0
TWFuYWdlci5nZXQoKSwgaW5zcGVjdG9yQ2xpZW50KSk7CiAgICAgbV9kZWJ1Z2dlckFnZW50ID0g
ZGVidWdnZXJBZ2VudFB0ci5nZXQoKTsKICAgICBtX2FnZW50cy5hcHBlbmQoZGVidWdnZXJBZ2Vu
dFB0ci5yZWxlYXNlKCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggMTE4MDdhM2Y5ZTg3OTg0MGRlYTYwM2IzNjYz
ZTIwOWFmY2VkNzJjOC4uYTZiODRlZjM2MzQxZWEzMjVjNTU4ODYyMTRlNGQ4NzEzYTEwNGI0YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50LmNwcApAQCAtNjAsOSArNjAsMTAgQEAgc3RhdGljIGNvbnN0IGNoYXIgcGF1c2VPbkV4Y2Vw
dGlvbnNTdGF0ZVtdID0gInBhdXNlT25FeGNlcHRpb25zU3RhdGUiOwogCiBjb25zdCBjaGFyKiBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpiYWNrdHJhY2VPYmplY3RHcm91cCA9ICJiYWNrdHJhY2Ut
b2JqZWN0LWdyb3VwIjsKIAotSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yRGVidWdn
ZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0
b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyKQorSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yRGVidWdnZXJB
Z2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JT
dGF0ZSogaW5zcGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKICAgICA6IEluc3BlY3RvckJhc2VB
Z2VudDxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50PigiRGVidWdnZXIiLCBpbnN0cnVtZW50aW5nQWdl
bnRzLCBpbnNwZWN0b3JTdGF0ZSkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKGluamVj
dGVkU2NyaXB0TWFuYWdlcikKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fZnJvbnRl
bmQoMCkKICAgICAsIG1fcGF1c2VkU2NyaXB0U3RhdGUoMCkKICAgICAsIG1famF2YVNjcmlwdFBh
dXNlU2NoZWR1bGVkKGZhbHNlKQpAQCAtMTAzLDYgKzEwNCw3IEBAIHZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6ZGlzYWJsZSgpCiAKICAgICBpZiAobV9saXN0ZW5lcikKICAgICAgICAgbV9s
aXN0ZW5lci0+ZGVidWdnZXJXYXNEaXNhYmxlZCgpOworICAgIGhpZGVQYXVzZVdhcm5pbmcoKTsK
IH0KIAogYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjplbmFibGVkKCkKQEAgLTY1Nyw2ICs2
NTksNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKFNjcmlwdFN0YXRl
KiBzY3JpcHRTdGF0ZSwgY29uc3QgU2NyaXB0VmFsdQogICAgICAgICB9CiAgICAgfQogCisgICAg
c2hvd1BhdXNlV2FybmluZygpOwogICAgIG1fZnJvbnRlbmQtPnBhdXNlZChjdXJyZW50Q2FsbEZy
YW1lcygpLCBtX2JyZWFrUmVhc29uLCBtX2JyZWFrQXV4RGF0YSk7CiAgICAgbV9qYXZhU2NyaXB0
UGF1c2VTY2hlZHVsZWQgPSBmYWxzZTsKIApAQCAtNjcxLDYgKzY3NCw3IEBAIHZvaWQgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6ZGlkQ29udGludWUoKQogICAgIG1fcGF1c2VkU2NyaXB0U3RhdGUg
PSAwOwogICAgIG1fY3VycmVudENhbGxTdGFjayA9IFNjcmlwdFZhbHVlKCk7CiAgICAgY2xlYXJC
cmVha0RldGFpbHMoKTsKKyAgICBoaWRlUGF1c2VXYXJuaW5nKCk7CiAgICAgbV9mcm9udGVuZC0+
cmVzdW1lZCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuaAppbmRleCAwOWM5N2QxOTUzZTRiOWIwMDE2MWY4NzRmNDUzMWZiZGVj
N2RiNmNkLi5iY2ZhN2QzNmViZThjODJkODZhMzE1OTRjY2M2NThkMGExMTljODJiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAg
LTMzLDYgKzMzLDcgQEAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgRU5BQkxF
KElOU1BFQ1RPUikKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkluc3Bl
Y3RvckJhc2VBZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgogI2luY2x1ZGUg
Ikluc3BlY3RvckZyb250ZW5kLmgiCiAjaW5jbHVkZSAiU2NyaXB0QnJlYWtwb2ludC5oIgogI2lu
Y2x1ZGUgIlNjcmlwdERlYnVnTGlzdGVuZXIuaCIKQEAgLTQ3LDYgKzQ4LDcgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOworY2xhc3MgSW5zcGVj
dG9yQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CiBjbGFzcyBJbnNwZWN0b3JBcnJh
eTsKIGNsYXNzIEluc3BlY3Rvck9iamVjdDsKQEAgLTEyNCw3ICsxMjYsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBTY3JpcHREZWJ1Z1NlcnZlciYgc2NyaXB0RGVidWdTZXJ2ZXIoKSA9IDA7CiAK
IHByb3RlY3RlZDoKLSAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KEluc3RydW1lbnRpbmdBZ2Vu
dHMqLCBJbnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciopOworICAgIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclN0YXRlKiwg
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9yQ2xpZW50Kik7CiAKICAgICB2aXJ0dWFs
IHZvaWQgc3RhcnRMaXN0ZW5pbmdTY3JpcHREZWJ1Z1NlcnZlcigpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgc3RvcExpc3RlbmluZ1NjcmlwdERlYnVnU2VydmVyKCkgPSAwOwpAQCAtMTU0LDEwICsx
NTYsMTQgQEAgcHJpdmF0ZToKIAogICAgIFN0cmluZyBzb3VyY2VNYXBVUkxGb3JTY3JpcHQoY29u
c3QgU2NyaXB0Jik7CiAKKyAgICB2b2lkIHNob3dQYXVzZVdhcm5pbmcoKTsKKyAgICB2b2lkIGhp
ZGVQYXVzZVdhcm5pbmcoKTsKKwogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFNjcmlwdD4g
U2NyaXB0c01hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPiA+
IEJyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzTWFwOwogCiAgICAgSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKKyAgICBJbnNwZWN0b3JD
bGllbnQqIG1fY2xpZW50OwogICAgIEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlciogbV9mcm9u
dGVuZDsKICAgICBTY3JpcHRTdGF0ZSogbV9wYXVzZWRTY3JpcHRTdGF0ZTsKICAgICBTY3JpcHRW
YWx1ZSBtX2N1cnJlbnRDYWxsU3RhY2s7CkBAIC0xNzAsNiArMTc2LDE4IEBAIHByaXZhdGU6CiAg
ICAgTGlzdGVuZXIqIG1fbGlzdGVuZXI7CiB9OwogCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpzaG93UGF1c2VXYXJuaW5nKCkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAg
ICAgIG1fY2xpZW50LT5zaG93UGF1c2VXYXJuaW5nKCk7Cit9CisKK2lubGluZSB2b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OmhpZGVQYXVzZVdhcm5pbmcoKQoreworICAgIGlmIChtX2NsaWVu
dCkKKyAgICAgICAgbV9jbGllbnQtPmhpZGVQYXVzZVdhcm5pbmcoKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYm
IEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
UGFnZURlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1
Z2dlckFnZW50LmNwcAppbmRleCBhNTg2ZWRmM2ZkNDEwOGM5ZDA3OTJjMGJkZmViZTFlODNmYWZm
ODZhLi5iM2MzZmMyMjdiZmJlZjRhNmRkM2E2MDIxZjdiYTVjMjc4ZDFkYWVlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAKQEAgLTQwLDEzICs0
MCwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8UGFnZURlYnVnZ2Vy
QWdlbnQ+IFBhZ2VEZWJ1Z2dlckFnZW50OjpjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5z
dHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBQYWdlKiBp
bnNwZWN0ZWRQYWdlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdl
cikKK1Bhc3NPd25QdHI8UGFnZURlYnVnZ2VyQWdlbnQ+IFBhZ2VEZWJ1Z2dlckFnZW50OjpjcmVh
dGUoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yU3Rh
dGUqIGluc3BlY3RvclN0YXRlLCBQYWdlKiBpbnNwZWN0ZWRQYWdlLCBJbmplY3RlZFNjcmlwdE1h
bmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQYWdlRGVidWdnZXJBZ2VudChpbnN0cnVtZW50aW5n
QWdlbnRzLCBpbnNwZWN0b3JTdGF0ZSwgaW5zcGVjdGVkUGFnZSwgaW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQYWdlRGVidWdnZXJBZ2VudChpbnN0cnVt
ZW50aW5nQWdlbnRzLCBpbnNwZWN0b3JTdGF0ZSwgaW5zcGVjdGVkUGFnZSwgaW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyLCBjbGllbnQpKTsKIH0KIAotUGFnZURlYnVnZ2VyQWdlbnQ6OlBhZ2VEZWJ1Z2dl
ckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3Rv
clN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgUGFnZSogaW5zcGVjdGVkUGFnZSwgSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCi0gICAgOiBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlLCBpbmplY3RlZFNjcmlw
dE1hbmFnZXIpCitQYWdlRGVidWdnZXJBZ2VudDo6UGFnZURlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVu
dGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3Rv
clN0YXRlLCBQYWdlKiBpbnNwZWN0ZWRQYWdlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVj
dGVkU2NyaXB0TWFuYWdlciwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCisgICAgOiBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlLCBpbmpl
Y3RlZFNjcmlwdE1hbmFnZXIsIGNsaWVudCkKICAgICAsIG1faW5zcGVjdGVkUGFnZShpbnNwZWN0
ZWRQYWdlKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VE
ZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdl
bnQuaAppbmRleCA5ZGJkNTEzZjlmMWEyOGJiOTg0MjQ5MTM1NzgxNDg2YzczYzMyNjE4Li4wNzM0
MDg5YmZiOGI0M2MxODhmMzg3ZWI2MGE3NDE2MDI3ZDNlM2M5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuaApAQCAtNDQsNyArNDQsNyBAQCBjbGFzcyBQ
YWdlRGVidWdnZXJBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShQYWdlRGVidWdnZXJBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8UGFnZURlYnVnZ2Vy
QWdlbnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yU3RhdGUqLCBQYWdl
KiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8UGFnZURl
YnVnZ2VyQWdlbnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yU3RhdGUq
LCBQYWdlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9yQ2xpZW50Kik7CiAgICAg
dmlydHVhbCB+UGFnZURlYnVnZ2VyQWdlbnQoKTsKIAogcHJpdmF0ZToKQEAgLTU2LDcgKzU2LDcg
QEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRG
b3JFdmFsKEVycm9yU3RyaW5nKiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpOwogCi0g
ICAgUGFnZURlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclN0YXRl
KiwgUGFnZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciopOworICAgIFBhZ2VEZWJ1Z2dlckFnZW50
KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0ZSosIFBhZ2UqLCBJbmplY3RlZFNj
cmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JDbGllbnQqKTsKICAgICBQYWdlKiBjb25zdCBtX2luc3Bl
Y3RlZFBhZ2U7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29y
a2VyRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyRGVi
dWdnZXJBZ2VudC5jcHAKaW5kZXggYzc1YWY0YTZlNGMwZjRlOTk2ZjM1ZDhhM2E3ODkxNjE1MzE3
MTYyZi4uMTU4OWZjMzBmNDU2NGQ5M2UyN2JmMjdlYWI1NTc1ZDRiNjA2YTUxNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcApAQCAtODYs
NyArODYsNyBAQCBQYXNzT3duUHRyPFdvcmtlckRlYnVnZ2VyQWdlbnQ+IFdvcmtlckRlYnVnZ2Vy
QWdlbnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKgogfQogCiBXb3JrZXJEZWJ1Z2dlckFn
ZW50OjpXb3JrZXJEZWJ1Z2dlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRp
bmdBZ2VudHMsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgV29ya2VyQ29udGV4dCog
aW5zcGVjdGVkV29ya2VyQ29udGV4dCwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNj
cmlwdE1hbmFnZXIpCi0gICAgOiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KGluc3RydW1lbnRpbmdB
Z2VudHMsIGluc3BlY3RvclN0YXRlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCisgICAgOiBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlLCBp
bmplY3RlZFNjcmlwdE1hbmFnZXIsIDApCiAgICAgLCBtX3NjcmlwdERlYnVnU2VydmVyKGluc3Bl
Y3RlZFdvcmtlckNvbnRleHQpCiAgICAgLCBtX2luc3BlY3RlZFdvcmtlckNvbnRleHQoaW5zcGVj
dGVkV29ya2VyQ29udGV4dCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0luc3BlY3RvckNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
SW5zcGVjdG9yQ2xpZW50SW1wbC5jcHAKaW5kZXggMDI1ODc2NDQ2YTM1MWFlZTJkY2YyOThlZWUx
MWQ5ZDNkZTJiZGI1NS4uZjQxNGExNzMwMDk5MTZiNTgyYWFjYjQ5YWZiZjdlMTQ3NWVkZmI0MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1w
bC5jcHAKQEAgLTk1LDYgKzk1LDE4IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6aGlkZUhp
Z2hsaWdodCgpCiAgICAgICAgIGFnZW50LT5oaWRlSGlnaGxpZ2h0KCk7CiB9CiAKK3ZvaWQgSW5z
cGVjdG9yQ2xpZW50SW1wbDo6c2hvd1BhdXNlV2FybmluZygpCit7CisgICAgaWYgKFdlYkRldlRv
b2xzQWdlbnRJbXBsKiBhZ2VudCA9IGRldlRvb2xzQWdlbnQoKSkKKyAgICAgICAgYWdlbnQtPnNo
b3dQYXVzZVdhcm5pbmcoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpoaWRlUGF1
c2VXYXJuaW5nKCkKK3sKKyAgICBpZiAoV2ViRGV2VG9vbHNBZ2VudEltcGwqIGFnZW50ID0gZGV2
VG9vbHNBZ2VudCgpKQorICAgICAgICBhZ2VudC0+aGlkZVBhdXNlV2FybmluZygpOworfQorCiBi
b29sIEluc3BlY3RvckNsaWVudEltcGw6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBXVEY6
OlN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBpZiAoV2ViRGV2VG9vbHNBZ2VudEltcGwqIGFnZW50
ID0gZGV2VG9vbHNBZ2VudCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5z
cGVjdG9yQ2xpZW50SW1wbC5oCmluZGV4IDVlYTZiYWViM2QwMDkwMDk2ODUyNDU5MWE0YjM5YzQw
OTRmNWE3YWIuLjA4NWQ4MWM4ZDUwOTQ5MDIxMDU5MWUwNzk4NmQ4ZGE3Nzg1Y2FlNTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmgKQEAg
LTU3LDYgKzU3LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHQoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgpOwogCisgICAgdmlydHVhbCB2b2lkIHNob3dQ
YXVzZVdhcm5pbmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGlkZVBhdXNlV2FybmluZygpOworCiAg
ICAgdmlydHVhbCBib29sIHNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBXVEY6OlN0cmluZyYp
OwogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSW5zcGVjdG9yU3RhdGVVcGRhdGVzKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCmluZGV4IDFiZDE1OTViNmQzYjY4OTQ5MWVjNDkzN2Uy
ODQ3YzVkZTFhYjBjNzIuLjc4ZWQ3ZWVlNTM2OTJjZDdlYTYwMTBkYTc2OTZiOWE4ODJiN2UzZmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50
SW1wbC5jcHAKQEAgLTc3LDYgKzc3LDggQEAgc3RhdGljIGNvbnN0IGludCB2aWV3cG9ydEd1dHRl
ciA9IDk3OwogCiAvLyBVc2UgOTkgYXMgYSBiaWcgei1vcmRlciBudW1iZXIgc28gdGhhdCBoaWdo
bGlnaHQgaXMgYWJvdmUgb3RoZXIgb3ZlcmxheXMuCiBzdGF0aWMgY29uc3QgaW50IGhpZ2hsaWdo
dCA9IDk5OworCitzdGF0aWMgY29uc3QgaW50IGRldlRvb2xzRGFzaEJvYXJkID0gMTAwOwogfQog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTM2Niw2ICszNjgsNzQgQEAgcHJpdmF0ZToKICAgICBk
b3VibGUgbV9vcmlnaW5hbFpvb21GYWN0b3I7CiB9OwogCitjbGFzcyBEZXZUb29sc0Rhc2hCb2Fy
ZCA6IHB1YmxpYyBXZWJQYWdlT3ZlcmxheSB7CitwdWJsaWM6CisgICAgRGV2VG9vbHNEYXNoQm9h
cmQoV2ViVmlld0ltcGwqIHdlYlZpZXcpCisgICAgICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCisg
ICAgeworICAgICAgICBtX3dlYlZpZXctPmFkZFBhZ2VPdmVybGF5KHRoaXMsIE92ZXJsYXlaT3Jk
ZXJzOjpkZXZUb29sc0Rhc2hCb2FyZCk7CisgICAgfQorCisgICAgfkRldlRvb2xzRGFzaEJvYXJk
KCkKKyAgICB7CisgICAgICAgIG1fd2ViVmlldy0+cmVtb3ZlUGFnZU92ZXJsYXkodGhpcyk7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgc2V0VXBGb250RGVzY3JpcHRpb24oRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFdlYkNvcmU6OlNldHRpbmdzKiBzZXR0aW5ncykKKyAg
ICB7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdzLT5m
b250UmVuZGVyaW5nTW9kZSgpKTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVk
U2l6ZSgzMCk7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZml4ZWRGb250RmFtaWx5ID0g
c2V0dGluZ3MtPmZpeGVkRm9udEZhbWlseSgpOworICAgICAgICBpZiAoIWZpeGVkRm9udEZhbWls
eS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFt
aWx5KEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5KTsKKyAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNldEZhbWlseShmaXhlZEZvbnRGYW1pbHkpOworICAg
ICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuYXBwZW5kRmFtaWx5KDApOwor
ICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBkcmF3VGV4dChHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIFN0cmluZyB0ZXh0LCBGbG9hdFBvaW50IHBvaW50KQorICAgIHsKKyAgICAgICAgRnJh
bWUqIGZyYW1lID0gbV93ZWJWaWV3LT5wYWdlKCkgPyBtX3dlYlZpZXctPnBhZ2UoKS0+bWFpbkZy
YW1lKCkgOiAwOworICAgICAgICBpZiAoIWZyYW1lKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsKKyAgICAgICAgRm9u
dERlc2NyaXB0aW9uIGRlc2M7CisgICAgICAgIHNldFVwRm9udERlc2NyaXB0aW9uKGRlc2MsIHNl
dHRpbmdzKTsKKyAgICAgICAgRm9udCBmb250ID0gRm9udChkZXNjLCAwLCAwKTsKKyAgICAgICAg
Zm9udC51cGRhdGUoMCk7CisgICAgICAgIGNvbnRleHQuZHJhd1RleHQoZm9udCwgdGV4dCwgcG9p
bnQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwYWludFBhZ2VPdmVybGF5KFdlYkNhbnZh
cyogY2FudmFzKQorICAgIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0QnVpbGRlciBidWlsZGVy
KGNhbnZhcyk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IGJ1aWxkZXIuY29u
dGV4dCgpOworICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihzdGF0aWNfY2FzdDxSR0JBMzI+
KDB4MUYwMDAwMDApLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAgY29udGV4dC5kcmF3
UmVjdChJbnRSZWN0KEludFBvaW50KCksIG1fd2ViVmlldy0+c2l6ZSgpKSk7CisgICAgICAgIAor
ICAgICAgICBGbG9hdFNpemUgZmxvYXRTaXplID0gc3RhdGljX2Nhc3Q8RmxvYXRTaXplPihtX3dl
YlZpZXctPnNpemUoKSk7CisgICAgICAgIEZsb2F0UG9pbnQgZmxvYXRQb2ludCA9IEZsb2F0UG9p
bnQoZmxvYXRTaXplLndpZHRoKCkgLSAxOTAsIDI1KTsKKyAgICAgICAgY29udGV4dC5zZXRGaWxs
Q29sb3Ioc3RhdGljX2Nhc3Q8UkdCQTMyPigweEZGRkZGRkZGKSwgQ29sb3JTcGFjZURldmljZVJH
Qik7CisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3Ioc3RhdGljX2Nhc3Q8UkdCQTMyPigw
eEZGRkYwMDAwKSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgIGNvbnRleHQuZmlsbFJl
Y3QoRmxvYXRSZWN0KGZsb2F0UG9pbnQsIEZsb2F0U2l6ZSg0MCwgNDApKSk7CisgICAgICAgIGNv
bnRleHQuc3Ryb2tlUmVjdChGbG9hdFJlY3QoZmxvYXRQb2ludCwgRmxvYXRTaXplKDQwLCA0MCkp
LCAyKTsKKyAgICAgICAgCisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnRzWzNdOworICAgICAgICBj
b250ZXh0LnNldEZpbGxDb2xvcihzdGF0aWNfY2FzdDxSR0JBMzI+KDB4RkZGRjAwMDApLCBDb2xv
clNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAgCisgICAgICAgIHBvaW50c1swXSA9IEZsb2F0UG9p
bnQoZmxvYXRTaXplLndpZHRoKCkgLSAxODAsIDMwKTsKKyAgICAgICAgcG9pbnRzWzFdID0gRmxv
YXRQb2ludChmbG9hdFNpemUud2lkdGgoKSAtIDE4MCwgNjApOworICAgICAgICBwb2ludHNbMl0g
PSBGbG9hdFBvaW50KGZsb2F0U2l6ZS53aWR0aCgpIC0gMTYwLCA0NSk7CisgICAgICAgIGNvbnRl
eHQuZHJhd0NvbnZleFBvbHlnb24oMywgcG9pbnRzLCB0cnVlKTsKKyAgICAgICAgCisgICAgICAg
IGNvbnRleHQuc2V0RmlsbENvbG9yKHN0YXRpY19jYXN0PFJHQkEzMj4oMHhGRkZGMDAwMCksIENv
bG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAgICBkcmF3VGV4dChjb250ZXh0LCAiUGF1c2VkIiwg
RmxvYXRQb2ludChmbG9hdFNpemUud2lkdGgoKS0xNDUsIDUyKSk7CisgICAgfQorCisgICAgV2Vi
Vmlld0ltcGwqIG1fd2ViVmlldzsKK307CisKIAogV2ViRGV2VG9vbHNBZ2VudEltcGw6OldlYkRl
dlRvb2xzQWdlbnRJbXBsKAogICAgIFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCwKQEAgLTQ0NCw2
ICs1MTQsMTggQEAgdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6d2ViVmlld1Jlc2l6ZWQoKQog
ICAgICAgICBtX21ldHJpY3NTdXBwb3J0LT53ZWJWaWV3UmVzaXplZCgpOwogfQogCit2b2lkIFdl
YkRldlRvb2xzQWdlbnRJbXBsOjpzaG93UGF1c2VXYXJuaW5nKCkKK3sKKyAgICBpZiAoIW1fZGV2
VG9vbHNEYXNoQm9hcmQpCisgICAgICAgIG1fZGV2VG9vbHNEYXNoQm9hcmQgPSBhZG9wdFB0cihu
ZXcgRGV2VG9vbHNEYXNoQm9hcmQobV93ZWJWaWV3SW1wbCkpOworfQorCit2b2lkIFdlYkRldlRv
b2xzQWdlbnRJbXBsOjpoaWRlUGF1c2VXYXJuaW5nKCkKK3sKKyAgICBpZiAobV9kZXZUb29sc0Rh
c2hCb2FyZCkKKyAgICAgICAgbV9kZXZUb29sc0Rhc2hCb2FyZC5jbGVhcigpOworfQorCiB2b2lk
IFdlYkRldlRvb2xzQWdlbnRJbXBsOjpvdmVycmlkZURldmljZU1ldHJpY3MoaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LCBmbG9hdCBmb250U2NhbGVGYWN0b3IsIGJvb2wgZml0V2luZG93KQogewogICAg
IGlmICghd2lkdGggJiYgIWhlaWdodCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmgKaW5kZXggNmI1MjQ3NjE3MDE4NjVhMzBlNzQyODYw
M2VjMWU4ZDQyYzUxNTRhYi4uMjg0NTI3NmJmMDRkZjlmN2JmZDk4NzIzZGJmN2Q0NWYzYmRkZmY0
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2Vu
dEltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50
SW1wbC5oCkBAIC01Miw2ICs1Miw3IEBAIGNsYXNzIE5vZGU7CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCitjbGFzcyBEZXZUb29sc0Rhc2hCb2FyZDsKIGNsYXNzIERldmljZU1ldHJpY3NTdXBwb3J0
OwogY2xhc3MgV2ViRGV2VG9vbHNBZ2VudENsaWVudDsKIGNsYXNzIFdlYkZyYW1lOwpAQCAtMTAx
LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJCcm93c2VyQ2FjaGUo
KTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJCcm93c2VyQ29va2llcygpOwogCisgICAgdmlydHVh
bCB2b2lkIHNob3dQYXVzZVdhcm5pbmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGlkZVBhdXNlV2Fy
bmluZygpOwogICAgIHZpcnR1YWwgdm9pZCBvdmVycmlkZURldmljZU1ldHJpY3MoaW50IHdpZHRo
LCBpbnQgaGVpZ2h0LCBmbG9hdCBmb250U2NhbGVGYWN0b3IsIGJvb2wgZml0V2luZG93KTsKICAg
ICB2aXJ0dWFsIHZvaWQgYXV0b1pvb21QYWdlVG9GaXRXaWR0aCgpOwogCkBAIC0xMTgsNiArMTIx
LDcgQEAgcHJpdmF0ZToKICAgICBXZWJWaWV3SW1wbCogbV93ZWJWaWV3SW1wbDsKICAgICBib29s
IG1fYXR0YWNoZWQ7CiAgICAgT3duUHRyPERldmljZU1ldHJpY3NTdXBwb3J0PiBtX21ldHJpY3NT
dXBwb3J0OworICAgIE93blB0cjxEZXZUb29sc0Rhc2hCb2FyZD4gbV9kZXZUb29sc0Rhc2hCb2Fy
ZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>151645</attachid>
            <date>2012-07-11 01:44:14 -0700</date>
            <delta_ts>2012-07-11 01:44:14 -0700</delta_ts>
            <desc>The screen on the left is the original page, the screen on the right is how it looks, when you are standing paused on a break point.</desc>
            <filename>Screenshot.png</filename>
            <type>image/png</type>
            <size>58661</size>
            <attacher name="Sergey Rogulenko">rogulenko</attacher>
            
              <data encoding="base64">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
ABoAAAAAAAAAAAAASBkC0AAAAAAAAAAAAABAyhCABgAAAAAAAAAAAABShgA0AAAAAAAAAAAAAJAy
BKABAAAAAAAAAAAAgJQhAA0AAAAAAAAAAAAApAwBaAAAAAAAAAAAAAAgZQhAAwAAAAAAAAAAAAAp
QwAaAAAAAAAAAAAAAEgZAtAAAAAAAAAAAAAAQMoQgAYAAAAAAAAAAAAAUoYANAAAAAAAAAAAAACQ
MgSgAQAAAAAAAAAAAICUIQANAAAAAAAAAAAAAKQMAWgAAAAAAAAAAAAAIGUIQAMAAAAAAAAAAAAA
KUMAGgAAAAAAAAAAAABIGQLQAAAAAAAAAAAAAEDKEIAGAAAAAAAAAAAAAFKGADQAAAAAAAAAAAAA
kDIEoAEAAAAAAAAAAACAlCEADQAAAAAAAAAAAACkDAFoAAAAAAAAAAAAACBlCEADAAAAAAAAAAAA
AClDABoAAAAAAAAAAAAASBkC0AAAAAAAAAAAAABAyhCABgAAAAAAAAAAAABShgA0AAAAAAAAAAAA
AJAyBKABAAAAAAAAAAAAgJQhAA0AAAAAAAAAAAAApAwBaAAAAAAAAAAAAAAgZQhAAwAAAAAAAAAA
AAApQwAaAAAAAAAAAAAAAEgZAtAAAAAAAAAAAAAAQMoQgAYAAAAAAAAAAAAAUoYANAAAAAAAAAAA
AACQMgSgAQAAAAAAAAAAAICUIQANAAAAAAAAAAAAAKQMAWgAAAAAAAAAAAAAIGUIQAMAAAAAAAAA
AAAAKUMAGgAAAAAAAAAAAABIGQLQAAAAAAAAAAAAAEDKEIAGAAAAAAAAAAAAAFKGADQAAAAAAAAA
AAAAkDIEoAEAAAAAAAAAAACAlCEADQAAAAAAAAAAAACkDAFoAAAAAAAAAAAAACBlCEADAAAAAAAA
AAAAAClDABoAAAAAAAAAAAAASBkC0AAAAAAAAAAAAABAyhCABgAAAAAAAAAAAABShgA0AAAAAAAA
AAAAAJAyBKABAAAAAAAAAAAAgJQhAA0AAAAAAAAAAAAApAwBaAAAAAAAAAAAAAAgZQhAAwAAAAAA
AAAAAAApQwAaAAAAAAAAAAAAAEgZAtAAAAAAAAAAAAAAQMoQgAYAAAAAAAAAAAAAUoYANAAAAAAA
AAAAAACQMgSgAQAAAAAAAAAAAICUIQANAAAAAAAAAAAAAKQMAWgAAAAAAAAAAAAAIGUIQAMAAAAA
AAAAAAAAKUMAGgAAAAAAAAAAAABIGQLQAAAAAAAAAAAAAEDKEIAGAAAAAAAAAAAAAFKGADQAAAAA
AAAAAAAAkDIEoAEAAAAAAAAAAACAlCEADQAAAAAAAAAAAACkDAFoAAAAAAAAAAAAACBlCEADAAAA
AAAAAAAAAClDABoAAAAAAAAAAAAASBkC0AAAAAAAAAAAAABAyhCABgAAAAAAAAAAAABShgA0AAAA
AAAAAAAAAJAyBKABAAAAAAAAAAAAgJQhAA0AAAAAAAAAAAAApAwBaAAAAAAAAAAAAAAgZQhAAwAA
AAAAAAAAAAApQwAaAAAAAAAAAAAAAEgZAtAAAAAAAAAAAAAAQMoQgAYAAAAAAAAAAAAAUoYANAAA
AAAAAAAAAACQMgSgAQAAAAAAAAAAAICUIQANAAAAAAAAAAAAAKQMAWgAAAAAAAAAAAAAIGUIQAMA
AAAAAAAAAAAAKUMAGgAAAAAAAAAAAABIGQLQAAAAAAAAAAAAAEDKEIAGAAAAAAAAAAAAAFKGADQA
AAAAAAAAAAAAkDIEoAEAAAAAAAAAAACAlCEADQAAAAAAAAAAAACkDAFoAAAAAAAAAAD+H3v3FmPX
leeHea1dJOtCFotVrCLFO4uUREkldYtSt2am1d2enhk4sIMAgWHDAwSxgcR+suEHA34z4EGCBHkw
nGAwsRPHgQfjjGeMGHbS44w9cWdm7Fa3Wk2KlCjeL0UWySJZrCIpXupeZ6887HMrXsQqijylrfo+
HJza57bP2ueBDz/8+F8AAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
AACUhgI0AAAAAAAAAAAAAFAaCtAAAAAAAAAAAAAAQGkoQAMAAAAAAAAAAAAApaEADQAAAAAAAAAA
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
v6fwjL9wUNnmjtbQu+rXexfqX3/f5tC0tHlSMzqaO9qzgw/et2liF29evKS2sOYnP719U+3iJQ0h
hJBtPW1+WPOTn96+LrSevrhxYmuue2Ddnu/61z+wOTSfOIFN1zU314XB3sEQQnbfAneY5KOY5C0D
AAAARwUFaICJqD/jqqvPzN//V2+74Au3/OzhNWvWrnno7luuufy8t1+7apKN3PpXXPymaRuvveLa
O9Zs3br+/huv/KsHwpILz503yUXec+GC7psu/svv/mzt1q6uresfvuPbX/jb2/evZ4/LLTjjpGz3
Hd9bUVh81rxSu7h+wbnzuu/43orCtOUnTZvgmt23feoLt63c2rV15c2f+tgd/YvffdaBm+77+Ufe
/f4v3Hj7/SvXbNiwZuXd//Cpj/1rf3b5mxbkQgjT500LG+5asbWrr69vZLKPYnK3DAAAAABQLvLL
3vvBU2tXfOn9V3ztx/evfOKJdU/86oEf/69PXnTZN9dMspGbX/qnr23Y/I1Pf/OeJ3bs2LTiti9+
aUVY/JbXtE5ykbf/SXvvbVd+7vv3r9vR07Nj08p7bv7aN+7ev549Ljt/2QnZ3ntvWTW68LS2Urs4
3/6a1t57b1k12rCko2GCa/b+5Lqv/WT1jp4dq3903TX3Dix862kHbrr/4c995K+/dtvdK1Y/sXnz
E6sf+D9fuebfB7JLXtueDSE0tDaEzQ+s2tHT399fmOyjmNwtAwAAAEeFyiO9AYAyMf1Vn/iH7y2/
4Ss33nDVrd2FEEJ+7tLT3/Kx9yzNPW2sxHPLdXzoG5/JfuLaT739pkII0xacc8U3Lv3D6ZPcTW7B
O776rWnXXHvDVX9+fSGEkJ/Vsewtlx1sIEZu8dkLwl2rQsdZC/ZMV57ecebcsGpjfskZ83ITWzO7
7CPvyH7/L8//RHfIzjr9kq9ddW7LgVeqn3fWkvpbb7nmh9d2F0IIIT932Vs//qVLzpheWv/yc1Z9
9gPnfz+EsOyae65ZPqlHMblbBgAAAAAoG43LL//yl5bc9J3bbvzi7b2jIYS61o7ff8P7396RnWT+
nF108ec/lP3yN6+77LZCCA3tr7ro8+96TeMkd5Odf96nvthwwzdv/OIHvzcaQqhrWnjiGy6sOtjZ
C05rDw+sCYtObd+T1zYuOrU1rNlcu/jktuzE1swuec+bq/7t8xd/uTdUNZ38zk+/98zmA6+Ubz11
cd3tP77h89/oLYQQQm3rkjdc9rF3LmssrX/hq9Zef/XF/xZCOPGj//TRJZN6FJO7ZQAAAOBokMQY
j/QeAAAAAAB4AUqSZN26dUd6FwAAAAAAvKDMnz8/c6T3AAAAAAAAAAAAAAAwUQrQAAAAAAAAAAAA
AEDZUIAGAAAAAAAAAAAAAMqGAjQAAAAAAAAAAAAAUDYUoAEAAAAAAAAAAACAsqEADQAAAAAAAAAA
AACUDQVoAAAAAAAAAAAAAKBsKEADAAAAAAAAAAAAAGVDARoAAAAAAAAAAAAAKBsK0AAAAAAAAAAA
AABA2VCABgAAAAAAAAAAAADKhgI0AAAAAAAAAAAAAFA2FKABAAAAAAAAAAAAgLKhAA0AAAAAAAAA
AAAAlA0FaAAAAAAAAAAAAACgbChAAwAAAAAAAAAAAABlQwEaAAAAAAAAAAAAACgbCtAAAAAAAAAA
AAAAQNlQgAYAAAAAAAAAAAAAyoYCNAAAAAAAAAAAAABQNhSgAQAAAAAAAAAAAICyoQANAAAAAAAA
AAAAAJQNBWgAAAAAAAAAAAAAoGwoQAMAAAAAAAAAAAAAZUMBGgAAAAAAAAAAAAAoGwrQAAAAAAAA
AAAAAEDZUIAGAAAAAAAAAAAAAMqGAjQAAAAAAAAAAAAAUDYUoAEAAAAAAAAAAACAsqEADQAAAAAA
AAAAAACUDQVoAAAAAAAAAAAAAKBsKEADAAAAAAAAAAAAAGVDARoAAAAAAAAAAAAAKBsK0AAAAAAA
AAAAAABA2VCABgAAAAAAAAAAAADKhgI0AAAAAAAAAAAAAFA2FKABAAAAAAAAAAAAgLKhAA0AAAAA
AAAAAAAAlA0FaAAAAAAAAAAAAACgbChAAwAAAAAAAAAAAABlQwEaAAAAAAAAAAAAACgbCtAAAAAA
AAAAAAAAQNlQgAYAAAAAAAAAAAAAyoYCNAAAAAAAAAAAAABQNhSgAQAAAAAAAAAAAICyoQANAAAA
AAAAAAAAAJQNBWgAAAAAAAAAAAAAoGwoQAMAAAAAAAAAAAAAZUMBGgAAAAAAAAAAAAAoGwrQAAAA
AAAAAAAAAEDZUIAGAAAAAAAAAAAAAMqGAjQAAAAAAAAAAAAAUDYUoAEAAAAAAAAAAACAsqEADQAA
AAAAAAAAAACUDQVoAAAAAAAAAAAAAKBsKEADAAAAAAAAAAAAAGVDARoAAAAAAAAAAAAAKBsK0AAA
AAAAAAAAAABA2VCABgAAAAAAAAAAAADKhgI0AAAAAAAAAAAAAFA2FKABAAAAAAAAAAAAgLKhAA0A
AAAAAAAAAAAAlA0FaAAAAAAAAAAAAACgbChAAwAAAAAAAAAAAABlQwEaAAAAAAAAAAAAACgbCtAA
AAAAAAAAAAAAQNlQgAYAAAAAAAAAAAAAyoYCNAAAAAAAAAAAAABQNhSgAQAAAAAAAAAAAICyoQAN
AAAAAAAAAAAAAJQNBWgAAAAAAAAAAAAAoGwoQAMAAAAAAAAAAAAAZUMBGgAAAAAAAAAAAAAoGwrQ
AAAAAAAAAAAAAEDZUIAGAAAAAAAAAAAAAMqGAjQAAAAAAAAAAAAAUDYUoAEAAAAAAAAAAACAsqEA
DQAAAAAAAAAAAACUDQVoAAAAAAAAAAAAAKBsKEADAAAAAAAAAAAAAGVDARoAAAAAAAAAAAAAKBsK
0AAAAAAAAAAAAABA2VCABgAAAAAAAAAAAADKhgI0AAAAAAAAAAAAAFA2FKABAAAAAAAAAAAAgLKh
AA0AAAAAAAAAAAAAlA0FaAAAAAAAAAAAAACgbChAAwAAAAAAAAAAAABlQwEaAAAAAAAAAAAAACgb
CtAAAAAAAAAAAAAAQNlQgAYAAAAAAAAAAAAAyoYCNAAAAAAAAAAAAABQNhSgAQAAAAAAAAAAAICy
oQANAAAAAAAAAAAAAJQNBWgAAAAAAAAAAAAAoGwoQAMAAAAAAAAAAAAAZUMBGgAAAAAAAAAAAAAo
GwrQAAAAAAAAAAAAAEDZUIAGAAAAAAAAAAAAAMqGAjQAAAAAAAAAAAAAUDYUoAEAAAAAAAAAAACA
sqEADQAAAAAAAAAAAACUDQVoAAAAAAAAAAAAAKBsKEADAAAAAAAAAAAAAGVDARoAAAAAAAAAAAAA
KBsK0AAAAAAAAAAAAABA2VCABgAAAAAAAAAAAADKhgI0AAAAAAAAAAAAAFA2FKABAAAAAAAAAAAA
gLKhAA0AAAAAAAAAAAAAlA0FaAAAAAAAAAAAAACgbChAAwAAAAAAAAAAAABlQwEaAAAAAAAAAAAA
ACgbCtAAAAAAAAAAAAAAQNlQgAYAAAAAAAAAAAAAyoYCNAAAAAAAAAAAAABQNhSgAQAAAAAAAAAA
AICyoQANAAAAAAAAAAAAAJQNBWgAAAAAAAAAAAAAoGwoQAMAAAAAAAAAAAAAZUMBGgAAAAAAAAAA
AAAoGwrQAAAAAAAAAAAAAEDZUIAGAAAAAAD4v+zaAQkAAACAoP+v2xHoDgEAAACADQEaAAAAAAAA
AAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAA
ANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQ
oAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEA
AAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAA
AAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAA
AACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACA
DQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEa
AAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAA
AAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAA
AAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAA
ANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQ
oAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEA
AAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAA
AAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAA
AACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACA
DQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEa
AAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAA
AAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAA
AAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAA
ANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQ
oAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEA
AAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAA
AAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAA
AACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACA
DQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEa
AAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAA
AAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAA
AAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAA
ANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQ
oAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEA
AAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAA
AAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAA
AACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACA
DQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEa
AAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAA
AAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAA
AAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAA
ANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQ
oAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEA
AAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAA
AAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAA
AACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACA
DQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEa
AAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAA
AAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAA
AAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAA
ANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQ
oAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEA
AAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAA
AAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAA
AACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACA
DQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEa
AAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAA
AAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAA
AAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAA
ANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQ
oAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEA
AAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAA
AAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAA
AACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACA
DQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEa
AAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAA
AAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAA
AAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAA
ANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQ
oAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEA
AAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAA
AAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAA
AACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACA
DQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEa
AAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAA
AAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAA
AAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAA
ANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQ
oAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEA
AAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAA
AAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAA
AACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACA
DQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEa
AAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAA
AAAAADmVPJcAACAASURBVAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAA
AACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACA
DQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEa
AAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAA
AAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAA
AAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAAANgQoAEAAAAAAAAAAACADQEaAAAAAAAAAAAA
ANgQoAEAAAAAAIDYu9fgqs4zX/DvvmhvCaEbCMTFXMRFgMFgE8DxBTvxJXHS7k53upPuc3KSTvfM
1JyaM5Pqqqmp+TIfzvepmek501NzZmpOX9JJn5ru3OPEiRPfAg42YGxkMDIYhCQkkBAgJCTtLe29
1nzYsizL2CACwSv+/T447L3e/a5nL+OqVU/++1kAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
AAAAAJAYAtAAAAAAAAAAAAAAQGIIQAMAAAAAAAAAAAAAiSEADQAAAAAAAAAAAAAkhgA0AAAAAAAA
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
+M8vvr2ocV5IhXKULkyWL1+ZOH52tL2v8Kc7m6ur0tc8xTUVS9HJwVIum163rvXAwdcrc6Cnj27f
sPRrj2/NZnOlKIQQMulQnUt3D45fGn23/5wKU/3nzLX6z68fbj916tTg4IXKy+XLl7W2tt65aeOH
rNm2beu2bVur8/nKy0Kx+M1vfqu5eeEX/+gPB86fP3DgYG9vXwhh166dlT72wPnz7e1vnDrVWVnf
3LxwzZo1729xHz7c/vnPP1FXV3fgwMHpxRs3bti1a2d1Pn95ePjw4faOjrem69y5c8fiRYtm7bBt
29ZKZ3vg/Pkf/OBH+Xzuz7/21Vlf+eSpzmeffW7NmtbHHn3kZp0dAAAAAOCaKsOTU6m4uiqzamH1
qt2tf7a79aU3evccOXvm/JXCaKbn7OWfvHJ6QX1NCKEcpYuT5eHRyc6B8Y7+4pPbmvLZa/efrz0B
+lj/RCqEkAr1dbUrVyx/++TpqqpMJpsJITy+Y+3Xn9ixt+PiwOWL2Ww6lQqlcrSoLnffhsZ0OnV+
eCIVQlUmVZVJZTOpdCoVQohDGJ1M1VVFs84yXih85zvfq8SaW1oWNzQ0HD9+oquru61t/fTUjerq
/DPP/PL48RONjQ27du0IIezff3D//oPHj5/4ylf+VSUDXVlZLBaPdbz11FM/nd6/vr4+juNX9h/Y
s+elEEJjY0Nb2/qhocvHj5/o7x/o6ur+0p98cVZJXV3d7e1vFArFXbt2FAqF9vYj7e1Hurt7Hnzw
gV/+8tlCodjWtr6xsaG9/Y2uru7+/v6vfOVfNTU2ztpk1uV9/9WuvPP+ySI35ewAAAAAwByVzv3y
b7/TMdHy6F98aVNtuPTqP3x730hofvQv/mz6VeN9X/k3n2i6ykeHj3zrmy8M1d33lT+/6uF3Vp16
/tk9Hb0j5RAyubrmNbs//9ia2hCGT7165Fxo3vKJtjlMV/7NpFPpVCoVUlPjk0/3j/zTr07uWLvw
f/yz7dl0es/hnqOdF944df706Uvza2uy2UxtTfW2DUt2bljS0liTSY9d57DkD1/29uBkpf88f37N
sqUtXd1nstlMJpMJITy4deWfPLz1wMmhCyOXs5lUKhVKUbygtmr7mvpUKly8MpkKIZtOZTOpbDqV
ToUQQhzCeClVm53dfy4Ui08//bNKrLm5eWFdXX1nZ2dvb19ra+t0bzafz+3Z81JnZ2d9fd22bVtD
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
SUVORK5CYII=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151685</attachid>
            <date>2012-07-11 05:00:03 -0700</date>
            <delta_ts>2012-07-11 07:40:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90880-20120711160002.patch</filename>
            <type>text/plain</type>
            <size>23883</size>
            <attacher name="Sergey Rogulenko">rogulenko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWZkNjQ0NzdiMzAwMDk1
NjZiYzliZDY5NmIyNDkwNzgwMmZlYTQ4ZS4uNjllZDUwNDAxMGI5Yzc0N2M3NDc1NzdlZjAwNzdi
NWJjNTdkNGFlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEyLTA3LTExICBTZXJn
ZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogYWRkaW5nIHBhdXNlIGljb24gZm9yIEphdmFTY3JpcHQgZGVidWdnaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg4MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50OjpzaG93UGF1
c2VXYXJuaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNsaWVudDo6aGlkZVBhdXNl
V2FybmluZyk6CisgICAgICAgIChJbnNwZWN0b3JDbGllbnQpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW5zcGVjdG9y
RGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpzaG93UGF1c2VXYXJuaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmhpZGVQYXVzZVdhcm5pbmcpOgorICAgICAgICAqIGluc3BlY3Rvci9QYWdlRGVidWdn
ZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlRGVidWdnZXJBZ2VudDo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50OjpQYWdlRGVidWdnZXJBZ2Vu
dCk6CisgICAgICAgICogaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgIChQ
YWdlRGVidWdnZXJBZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL1dvcmtlckRlYnVnZ2VyQWdl
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyRGVidWdnZXJBZ2VudDo6V29ya2VyRGVi
dWdnZXJBZ2VudCk6CisKIDIwMTItMDctMTEgIEtlbmljaGkgSXNoaWJhc2hpICA8YmFzaGlAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gQWRkaW5nIEhhcmZCdXp6LW5nIGZvciBM
aW51eApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBjZDkwNGQzYzFjMzUwNzlmNThiN2I5
NDNmOTM3ZWFkZThhMGE1NzQ4Li41YTZmZTQwMmZhZGRjZmUzZjIzYjEyNTJjZWI2N2Y1YWI2MDU4
ZjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEyLTA3
LTExICBTZXJnZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CisKKyAgICAgICAg
V2ViIEluc3BlY3RvcjogYWRkaW5nIHBhdXNlIGljb24gZm9yIEphdmFTY3JpcHQgZGVidWdnaW5n
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg4MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3JjL0lu
c3BlY3RvckNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnRJ
bXBsOjpzaG93UGF1c2VXYXJuaW5nKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJL
aXQ6Okluc3BlY3RvckNsaWVudEltcGw6OmhpZGVQYXVzZVdhcm5pbmcpOgorICAgICAgICAqIHNy
Yy9JbnNwZWN0b3JDbGllbnRJbXBsLmg6CisgICAgICAgIChJbnNwZWN0b3JDbGllbnRJbXBsKToK
KyAgICAgICAgKiBzcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwOgorICAgICAgICAoT3Zlcmxh
eVpPcmRlcnMpOgorICAgICAgICAoRGV2VG9vbHNEYXNoQm9hcmQpOgorICAgICAgICAoV2ViS2l0
OjpEZXZUb29sc0Rhc2hCb2FyZDo6RGV2VG9vbHNEYXNoQm9hcmQpOgorICAgICAgICAoV2ViS2l0
OjpEZXZUb29sc0Rhc2hCb2FyZDo6fkRldlRvb2xzRGFzaEJvYXJkKToKKyAgICAgICAgKFdlYktp
dDo6RGV2VG9vbHNEYXNoQm9hcmQ6OmJ1dHRvblN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6RGV2
VG9vbHNEYXNoQm9hcmQ6OmhhbmRsZUlucHV0RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpEZXZU
b29sc0Rhc2hCb2FyZDo6dXBkYXRlQnV0dG9uU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpEZXZU
b29sc0Rhc2hCb2FyZDo6c2V0VXBGb250RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViS2l0OjpE
ZXZUb29sc0Rhc2hCb2FyZDo6ZHJhd1RleHQpOgorICAgICAgICAoV2ViS2l0OjpEZXZUb29sc0Rh
c2hCb2FyZDo6cGFpbnRQYWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6aGFuZGxlSW5wdXRFdmVudCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpzaG93UGF1c2VXYXJuaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OmhpZGVQYXVzZVdhcm5pbmcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6cmVzdW1lRGVidWdnZXIpOgorICAg
ICAgICAqIHNyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oOgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKFdlYkRldlRvb2xzQWdlbnRJbXBsKToKKyAgICAgICAgKiBzcmMvV2ViRGV2VG9vbHNB
Z2VudFByaXZhdGUuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJEZXZUb29sc0Fn
ZW50UHJpdmF0ZSk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OmhhbmRsZUlucHV0RXZlbnQpOgorCiAyMDEyLTA3LTExICBLZW5p
Y2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1d
IEFkZGluZyBIYXJmQnV6ei1uZyBmb3IgTGludXgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDbGllbnQuaAppbmRleCA3NjcxYjAwMThiYzFmN2I5MDc0NWMxOGE1ZTgwODk5OGE5
ZmFmYWYzLi5hNTM2NWI3NTE1YWNkNzU2ZjRlODRhMDYwNTIzYjM3MzNkNTM4MDcwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNsaWVudC5oCkBAIC02MCw2ICs2MCw5IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBjYW5PdmVycmlkZURldmljZU1ldHJpY3MoKSB7
IHJldHVybiBmYWxzZTsgfQogCisgICAgdmlydHVhbCB2b2lkIHNob3dQYXVzZVdhcm5pbmcoKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgaGlkZVBhdXNlV2FybmluZygpIHsgfQorCiAgICAgdmlydHVh
bCB2b2lkIG92ZXJyaWRlRGV2aWNlTWV0cmljcyhpbnQgLyp3aWR0aCovLCBpbnQgLypoZWlnaHQq
LywgZmxvYXQgLypmb250U2NhbGVGYWN0b3IqLywgYm9vbCAvKmZpdFdpbmRvdyovKQogICAgIHsK
ICAgICAgICAgLy8gRklYTUU6IFBsYXRmb3JtcyBtYXkgd2FudCB0byBpbXBsZW1lbnQgdGhpcyAo
c2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjg4NikuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXgg
MDk1ZTFjYzUxYjM1NGE4ZjhlMDgxNDZhNzllZjcwOGRiN2NkNDljZS4uZGYyMzAwMDA1MmQwOTk2
YzNiYTQzNDZiODVmN2ZkZWM2MWQ0YTgxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMTMwLDcgKzEzMCw3IEBAIEluc3BlY3Rv
ckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xp
ZW50KiBpbnNwZWN0b3JDCiAgICAgbV9hZ2VudHMuYXBwZW5kKGNvbnNvbGVBZ2VudFB0ci5yZWxl
YXNlKCkpOwogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgT3duUHRyPElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ+IGRlYnVnZ2VyQWdlbnRQdHIoUGFnZURlYnVnZ2VyQWdlbnQ6
OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1fc3RhdGUuZ2V0KCksIHBhZ2Us
IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpKSk7CisgICAgT3duUHRyPEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ+IGRlYnVnZ2VyQWdlbnRQdHIoUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZSht
X2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1fc3RhdGUuZ2V0KCksIHBhZ2UsIG1faW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyLmdldCgpLCBpbnNwZWN0b3JDbGllbnQpKTsKICAgICBtX2RlYnVnZ2Vy
QWdlbnQgPSBkZWJ1Z2dlckFnZW50UHRyLmdldCgpOwogICAgIG1fYWdlbnRzLmFwcGVuZChkZWJ1
Z2dlckFnZW50UHRyLnJlbGVhc2UoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCAxMTgwN2EzZjllODc5ODQwZGVh
NjAzYjM2NjNlMjA5YWZjZWQ3MmM4Li5hNmI4NGVmMzYzNDFlYTMyNWM1NTg4NjIxNGU0ZDg3MTNh
MTA0YjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRl
YnVnZ2VyQWdlbnQuY3BwCkBAIC02MCw5ICs2MCwxMCBAQCBzdGF0aWMgY29uc3QgY2hhciBwYXVz
ZU9uRXhjZXB0aW9uc1N0YXRlW10gPSAicGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSI7CiAKIGNvbnN0
IGNoYXIqIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJhY2t0cmFjZU9iamVjdEdyb3VwID0gImJh
Y2t0cmFjZS1vYmplY3QtZ3JvdXAiOwogCi1JbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMs
IEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBp
bmplY3RlZFNjcmlwdE1hbmFnZXIpCitJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIElu
c3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmpl
Y3RlZFNjcmlwdE1hbmFnZXIsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQogICAgIDogSW5zcGVj
dG9yQmFzZUFnZW50PEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+KCJEZWJ1Z2dlciIsIGluc3RydW1l
bnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlKQogICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFn
ZXIoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQorICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwg
bV9mcm9udGVuZCgwKQogICAgICwgbV9wYXVzZWRTY3JpcHRTdGF0ZSgwKQogICAgICwgbV9qYXZh
U2NyaXB0UGF1c2VTY2hlZHVsZWQoZmFsc2UpCkBAIC0xMDMsNiArMTA0LDcgQEAgdm9pZCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKCkKIAogICAgIGlmIChtX2xpc3RlbmVyKQogICAg
ICAgICBtX2xpc3RlbmVyLT5kZWJ1Z2dlcldhc0Rpc2FibGVkKCk7CisgICAgaGlkZVBhdXNlV2Fy
bmluZygpOwogfQogCiBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVuYWJsZWQoKQpAQCAt
NjU3LDYgKzY1OSw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGF1c2UoU2Ny
aXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBTY3JpcHRWYWx1CiAgICAgICAgIH0KICAgICB9
CiAKKyAgICBzaG93UGF1c2VXYXJuaW5nKCk7CiAgICAgbV9mcm9udGVuZC0+cGF1c2VkKGN1cnJl
bnRDYWxsRnJhbWVzKCksIG1fYnJlYWtSZWFzb24sIG1fYnJlYWtBdXhEYXRhKTsKICAgICBtX2ph
dmFTY3JpcHRQYXVzZVNjaGVkdWxlZCA9IGZhbHNlOwogCkBAIC02NzEsNiArNjc0LDcgQEAgdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSgpCiAgICAgbV9wYXVzZWRTY3Jp
cHRTdGF0ZSA9IDA7CiAgICAgbV9jdXJyZW50Q2FsbFN0YWNrID0gU2NyaXB0VmFsdWUoKTsKICAg
ICBjbGVhckJyZWFrRGV0YWlscygpOworICAgIGhpZGVQYXVzZVdhcm5pbmcoKTsKICAgICBtX2Zy
b250ZW5kLT5yZXN1bWVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCmluZGV4IDA5Yzk3ZDE5NTNlNGI5YjAwMTYxZjg3NGY0
NTMxZmJkZWM3ZGI2Y2QuLmJjZmE3ZDM2ZWJlOGM4MmQ4NmEzMTU5NGNjYzY1OGQwYTExOWM4MmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuaApAQCAtMzMsNiArMzMsNyBAQAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAm
JiBFTkFCTEUoSU5TUEVDVE9SKQogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yQmFzZUFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKICNpbmNsdWRlICJTY3JpcHRCcmVha3BvaW50
LmgiCiAjaW5jbHVkZSAiU2NyaXB0RGVidWdMaXN0ZW5lci5oIgpAQCAtNDcsNiArNDgsNyBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbmplY3RlZFNjcmlwdE1hbmFnZXI7CitjbGFz
cyBJbnNwZWN0b3JDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKIGNsYXNzIEluc3Bl
Y3RvckFycmF5OwogY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwpAQCAtMTI0LDcgKzEyNiw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIFNjcmlwdERlYnVnU2VydmVyJiBzY3JpcHREZWJ1Z1NlcnZlcigp
ID0gMDsKIAogcHJvdGVjdGVkOgotICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVu
dGluZ0FnZW50cyosIEluc3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKik7Cisg
ICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9y
U3RhdGUqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JDbGllbnQqKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBzdGFydExpc3RlbmluZ1NjcmlwdERlYnVnU2VydmVyKCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBzdG9wTGlzdGVuaW5nU2NyaXB0RGVidWdTZXJ2ZXIoKSA9IDA7CkBAIC0x
NTQsMTAgKzE1NiwxNCBAQCBwcml2YXRlOgogCiAgICAgU3RyaW5nIHNvdXJjZU1hcFVSTEZvclNj
cmlwdChjb25zdCBTY3JpcHQmKTsKIAorICAgIHZvaWQgc2hvd1BhdXNlV2FybmluZygpOworICAg
IHZvaWQgaGlkZVBhdXNlV2FybmluZygpOworCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
U2NyaXB0PiBTY3JpcHRzTWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxT
dHJpbmc+ID4gQnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNNYXA7CiAKICAg
ICBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOworICAgIElu
c3BlY3RvckNsaWVudCogbV9jbGllbnQ7CiAgICAgSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2Vy
KiBtX2Zyb250ZW5kOwogICAgIFNjcmlwdFN0YXRlKiBtX3BhdXNlZFNjcmlwdFN0YXRlOwogICAg
IFNjcmlwdFZhbHVlIG1fY3VycmVudENhbGxTdGFjazsKQEAgLTE3MCw2ICsxNzYsMTggQEAgcHJp
dmF0ZToKICAgICBMaXN0ZW5lciogbV9saXN0ZW5lcjsKIH07CiAKK2lubGluZSB2b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnNob3dQYXVzZVdhcm5pbmcoKQoreworICAgIGlmIChtX2NsaWVu
dCkKKyAgICAgICAgbV9jbGllbnQtPnNob3dQYXVzZVdhcm5pbmcoKTsKK30KKworaW5saW5lIHZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aGlkZVBhdXNlV2FybmluZygpCit7CisgICAgaWYg
KG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+aGlkZVBhdXNlV2FybmluZygpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikgJiYgRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
UGFnZURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGE1ODZlZGYzZmQ0MTA4YzlkMDc5MmMwYmRmZWJl
MWU4M2ZhZmY4NmEuLmIzYzNmYzIyN2JmYmVmNGE2ZGQzYTYwMjFmN2JhNWMyNzhkMWRhZWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcApAQCAt
NDAsMTMgKzQwLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxQYWdl
RGVidWdnZXJBZ2VudD4gUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUs
IFBhZ2UqIGluc3BlY3RlZFBhZ2UsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKQorUGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2VudD4gUGFnZURlYnVnZ2VyQWdl
bnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNw
ZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIEluamVjdGVk
U2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JDbGllbnQqIGNs
aWVudCkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBhZ2VEZWJ1Z2dlckFnZW50KGluc3Ry
dW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlLCBpbnNwZWN0ZWRQYWdlLCBpbmplY3RlZFNj
cmlwdE1hbmFnZXIpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBhZ2VEZWJ1Z2dlckFnZW50
KGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlLCBpbnNwZWN0ZWRQYWdlLCBpbmpl
Y3RlZFNjcmlwdE1hbmFnZXIsIGNsaWVudCkpOwogfQogCi1QYWdlRGVidWdnZXJBZ2VudDo6UGFn
ZURlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywg
SW5zcGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBQYWdlKiBpbnNwZWN0ZWRQYWdlLCBJbmpl
Y3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlcikKLSAgICA6IEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUsIGluamVj
dGVkU2NyaXB0TWFuYWdlcikKK1BhZ2VEZWJ1Z2dlckFnZW50OjpQYWdlRGVidWdnZXJBZ2VudChJ
bnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSog
aW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIEluamVjdGVkU2NyaXB0TWFuYWdl
ciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKKyAgICA6
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3Rh
dGUsIGluamVjdGVkU2NyaXB0TWFuYWdlciwgY2xpZW50KQogICAgICwgbV9pbnNwZWN0ZWRQYWdl
KGluc3BlY3RlZFBhZ2UpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvUGFnZURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVi
dWdnZXJBZ2VudC5oCmluZGV4IDlkYmQ1MTNmOWYxYTI4YmI5ODQyNDkxMzU3ODE0ODZjNzNjMzI2
MTguLjA3MzQwODliZmI4YjQzYzE4OGYzODdlYjYwYTc0MTYwMjdkM2UzYzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oCkBAIC00NCw3ICs0NCw3IEBA
IGNsYXNzIFBhZ2VEZWJ1Z2dlckFnZW50IDogcHVibGljIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VEZWJ1Z2dlckFnZW50KTsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxQYWdl
RGVidWdnZXJBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0
ZSosIFBhZ2UqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKKyAgICBzdGF0aWMgUGFzc093blB0
cjxQYWdlRGVidWdnZXJBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0
b3JTdGF0ZSosIFBhZ2UqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JDbGllbnQq
KTsKICAgICB2aXJ0dWFsIH5QYWdlRGVidWdnZXJBZ2VudCgpOwogCiBwcml2YXRlOgpAQCAtNTYs
NyArNTYsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBJbmplY3RlZFNjcmlwdCBpbmplY3Rl
ZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcqLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJ
ZCk7CiAKLSAgICBQYWdlRGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVj
dG9yU3RhdGUqLCBQYWdlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKik7CisgICAgUGFnZURlYnVn
Z2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclN0YXRlKiwgUGFnZSosIElu
amVjdGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3RvckNsaWVudCopOwogICAgIFBhZ2UqIGNvbnN0
IG1faW5zcGVjdGVkUGFnZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9X
b3JrZXJEZWJ1Z2dlckFnZW50LmNwcAppbmRleCBjNzVhZjRhNmU0YzBmNGU5OTZmMzVkOGEzYTc4
OTE2MTUzMTcxNjJmLi4xNTg5ZmMzMGY0NTY0ZDkzZTI3YmYyN2VhYjU1NzVkNGI2MDZhNTE3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyRGVidWdnZXJBZ2VudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckRlYnVnZ2VyQWdlbnQuY3Bw
CkBAIC04Niw3ICs4Niw3IEBAIFBhc3NPd25QdHI8V29ya2VyRGVidWdnZXJBZ2VudD4gV29ya2Vy
RGVidWdnZXJBZ2VudDo6Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqCiB9CiAKIFdvcmtlckRl
YnVnZ2VyQWdlbnQ6OldvcmtlckRlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5z
dHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBXb3JrZXJD
b250ZXh0KiBpbnNwZWN0ZWRXb3JrZXJDb250ZXh0LCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGlu
amVjdGVkU2NyaXB0TWFuYWdlcikKLSAgICA6IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoaW5zdHJ1
bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdlcikKKyAg
ICA6IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9y
U3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdlciwgMCkKICAgICAsIG1fc2NyaXB0RGVidWdTZXJ2
ZXIoaW5zcGVjdGVkV29ya2VyQ29udGV4dCkKICAgICAsIG1faW5zcGVjdGVkV29ya2VyQ29udGV4
dChpbnNwZWN0ZWRXb3JrZXJDb250ZXh0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmNwcAppbmRleCAwMjU4NzY0NDZhMzUxYWVlMmRj
ZjI5OGVlZTExZDlkM2RlMmJkYjU1Li5mNDE0YTE3MzAwOTkxNmI1ODJhYWNiNDlhZmJmN2UxNDc1
ZWRmYjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JD
bGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JD
bGllbnRJbXBsLmNwcApAQCAtOTUsNiArOTUsMTggQEAgdm9pZCBJbnNwZWN0b3JDbGllbnRJbXBs
OjpoaWRlSGlnaGxpZ2h0KCkKICAgICAgICAgYWdlbnQtPmhpZGVIaWdobGlnaHQoKTsKIH0KIAor
dm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpzaG93UGF1c2VXYXJuaW5nKCkKK3sKKyAgICBpZiAo
V2ViRGV2VG9vbHNBZ2VudEltcGwqIGFnZW50ID0gZGV2VG9vbHNBZ2VudCgpKQorICAgICAgICBh
Z2VudC0+c2hvd1BhdXNlV2FybmluZygpOworfQorCit2b2lkIEluc3BlY3RvckNsaWVudEltcGw6
OmhpZGVQYXVzZVdhcm5pbmcoKQoreworICAgIGlmIChXZWJEZXZUb29sc0FnZW50SW1wbCogYWdl
bnQgPSBkZXZUb29sc0FnZW50KCkpCisgICAgICAgIGFnZW50LT5oaWRlUGF1c2VXYXJuaW5nKCk7
Cit9CisKIGJvb2wgSW5zcGVjdG9yQ2xpZW50SW1wbDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNv
bnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlKQogewogICAgIGlmIChXZWJEZXZUb29sc0FnZW50SW1w
bCogYWdlbnQgPSBkZXZUb29sc0FnZW50KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmgKaW5kZXggNWVhNmJhZWIzZDAwOTAwOTY4NTI0NTkx
YTRiMzljNDA5NGY1YTdhYi4uMDg1ZDgxYzhkNTA5NDkwMjEwNTkxZTA3OTg2ZDhkYTc3ODVjYWU1
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudElt
cGwuaApAQCAtNTcsNiArNTcsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdo
dCgpOwogICAgIHZpcnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KCk7CiAKKyAgICB2aXJ0dWFsIHZv
aWQgc2hvd1BhdXNlV2FybmluZygpOworICAgIHZpcnR1YWwgdm9pZCBoaWRlUGF1c2VXYXJuaW5n
KCk7CisKICAgICB2aXJ0dWFsIGJvb2wgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFdURjo6
U3RyaW5nJik7CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbnNwZWN0b3JTdGF0ZVVwZGF0
ZXMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAKaW5kZXggMWJkMTU5NWI2ZDNiNjg5NDkx
ZWM0OTM3ZTI4NDdjNWRlMWFiMGM3Mi4uNDZiMDhhYmVmZDJhZTBjMDg1ZGRhMjE2MTU5MDBlYTk1
ZmNmZjNjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9v
bHNBZ2VudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRv
b2xzQWdlbnRJbXBsLmNwcApAQCAtNTYsNiArNTYsNyBAQAogI2luY2x1ZGUgIldlYkRhdGFTb3Vy
Y2UuaCIKICNpbmNsdWRlICJXZWJEZXZUb29sc0FnZW50Q2xpZW50LmgiCiAjaW5jbHVkZSAiV2Vi
RnJhbWVJbXBsLmgiCisjaW5jbHVkZSAiV2ViSW5wdXRFdmVudC5oIgogI2luY2x1ZGUgInBsYXRm
b3JtL1dlYlJlY3QuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTdHJpbmcuaCIKICNpbmNsdWRl
ICJwbGF0Zm9ybS9XZWJVUkwuaCIKQEAgLTc3LDYgKzc4LDggQEAgc3RhdGljIGNvbnN0IGludCB2
aWV3cG9ydEd1dHRlciA9IDk3OwogCiAvLyBVc2UgOTkgYXMgYSBiaWcgei1vcmRlciBudW1iZXIg
c28gdGhhdCBoaWdobGlnaHQgaXMgYWJvdmUgb3RoZXIgb3ZlcmxheXMuCiBzdGF0aWMgY29uc3Qg
aW50IGhpZ2hsaWdodCA9IDk5OworCitzdGF0aWMgY29uc3QgaW50IGRldlRvb2xzRGFzaEJvYXJk
ID0gMTAwOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTM2Niw2ICszNjksMTI0IEBAIHBy
aXZhdGU6CiAgICAgZG91YmxlIG1fb3JpZ2luYWxab29tRmFjdG9yOwogfTsKIAorY2xhc3MgRGV2
VG9vbHNEYXNoQm9hcmQgOiBwdWJsaWMgV2ViUGFnZU92ZXJsYXkgeworcHVibGljOgorICAgIERl
dlRvb2xzRGFzaEJvYXJkKFdlYlZpZXdJbXBsKiB3ZWJWaWV3LCBXZWJEZXZUb29sc0FnZW50SW1w
bCogd2ViRGV2VG9vbHNBZ2VudEltcGwpCisgICAgICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCisg
ICAgICAgICwgbV93ZWJEZXZUb29sc0FnZW50KHdlYkRldlRvb2xzQWdlbnRJbXBsKQorICAgICAg
ICAsIG1fYnV0dG9uU3RhdGUoMCkKKyAgICB7CisgICAgICAgIG1fd2ViVmlldy0+YWRkUGFnZU92
ZXJsYXkodGhpcywgT3ZlcmxheVpPcmRlcnM6OmRldlRvb2xzRGFzaEJvYXJkKTsKKyAgICB9CisK
KyAgICB+RGV2VG9vbHNEYXNoQm9hcmQoKQorICAgIHsKKyAgICAgICAgbV93ZWJWaWV3LT5yZW1v
dmVQYWdlT3ZlcmxheSh0aGlzKTsKKyAgICB9CisKKyAgICBpbnQgYnV0dG9uU3RhdGUoKSAKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2J1dHRvblN0YXRlOworICAgIH0KKworICAgIHZvaWQgaGFu
ZGxlSW5wdXRFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50KiBtb3VzZUV2ZW50KQorICAgIHsKKyAg
ICAgICAgSW50UG9pbnQgcG9pbnQobV93ZWJWaWV3LT5zaXplKCkud2lkdGgtMTkwLCAyNSk7Cisg
ICAgICAgIGlmIChtb3VzZUV2ZW50LT50eXBlID09IFdlYklucHV0RXZlbnQ6Ok1vdXNlVXApCisg
ICAgICAgICAgICB1cGRhdGVCdXR0b25TdGF0ZShidXR0b25TdGF0ZSgpICYgKH4yKSk7CisgICAg
ICAgIGlmIChwb2ludC54KCkgPD0gbW91c2VFdmVudC0+eCAmJiBtb3VzZUV2ZW50LT54IDw9IHBv
aW50LngoKSArIDQwICYmIHBvaW50LnkoKSA8PSBtb3VzZUV2ZW50LT55ICYmIG1vdXNlRXZlbnQt
PnkgPD0gcG9pbnQueSgpICsgNDApIHsKKyAgICAgICAgICAgIHByaW50ZigiJWQgJWRcbiIsIG1v
dXNlRXZlbnQtPngsIG1vdXNlRXZlbnQtPnkpOworICAgICAgICAgICAgdXBkYXRlQnV0dG9uU3Rh
dGUoYnV0dG9uU3RhdGUoKSB8IDEpOworICAgICAgICAgICAgaWYgKG1vdXNlRXZlbnQtPnR5cGUg
PT0gV2ViSW5wdXRFdmVudDo6TW91c2VEb3duKQorICAgICAgICAgICAgICAgIHVwZGF0ZUJ1dHRv
blN0YXRlKGJ1dHRvblN0YXRlKCkgfCAyKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGlmIChtb3VzZUV2ZW50LT50eXBlID09IFdlYklucHV0RXZlbnQ6Ok1vdXNlVXApIAorICAgICAg
ICAgICAgICAgIG1fd2ViRGV2VG9vbHNBZ2VudC0+cmVzdW1lRGVidWdnZXIoKTsgICAgICAKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICB1cGRhdGVCdXR0b25TdGF0ZShidXR0b25TdGF0ZSgp
ICYgKH4xKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgdXBkYXRlQnV0dG9uU3RhdGUo
aW50IG5ld0J1dHRvblN0YXRlKSAKKyAgICB7CisgICAgICAgIGlmIChtX2J1dHRvblN0YXRlICE9
IG5ld0J1dHRvblN0YXRlKSB7CisgICAgICAgICAgICBtX2J1dHRvblN0YXRlID0gbmV3QnV0dG9u
U3RhdGU7CisgICAgICAgICAgICBtX3dlYlZpZXctPnBhZ2VPdmVybGF5cygpLT51cGRhdGUoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgc2V0VXBGb250RGVzY3JpcHRpb24oRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFdlYkNvcmU6OlNldHRpbmdzKiBzZXR0aW5ncykK
KyAgICB7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdz
LT5mb250UmVuZGVyaW5nTW9kZSgpKTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1
dGVkU2l6ZSgzMCk7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZml4ZWRGb250RmFtaWx5
ID0gc2V0dGluZ3MtPmZpeGVkRm9udEZhbWlseSgpOworICAgICAgICBpZiAoIWZpeGVkRm9udEZh
bWlseS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmlj
RmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5KTsKKyAgICAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNldEZhbWlseShmaXhlZEZvbnRGYW1pbHkpOwor
ICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuYXBwZW5kRmFtaWx5KDAp
OworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBkcmF3VGV4dChHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIFN0cmluZyB0ZXh0LCBGbG9hdFBvaW50IHBvaW50KQorICAgIHsKKyAgICAgICAg
RnJhbWUqIGZyYW1lID0gbV93ZWJWaWV3LT5wYWdlKCkgPyBtX3dlYlZpZXctPnBhZ2UoKS0+bWFp
bkZyYW1lKCkgOiAwOworICAgICAgICBpZiAoIWZyYW1lKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsKKyAgICAgICAg
Rm9udERlc2NyaXB0aW9uIGRlc2M7CisgICAgICAgIHNldFVwRm9udERlc2NyaXB0aW9uKGRlc2Ms
IHNldHRpbmdzKTsKKyAgICAgICAgRm9udCBmb250ID0gRm9udChkZXNjLCAwLCAwKTsKKyAgICAg
ICAgZm9udC51cGRhdGUoMCk7CisgICAgICAgIGNvbnRleHQuZHJhd1RleHQoZm9udCwgdGV4dCwg
cG9pbnQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwYWludFBhZ2VPdmVybGF5KFdlYkNh
bnZhcyogY2FudmFzKQorICAgIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0QnVpbGRlciBidWls
ZGVyKGNhbnZhcyk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IGJ1aWxkZXIu
Y29udGV4dCgpOworICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihzdGF0aWNfY2FzdDxSR0JB
MzI+KDB4MUYwMDAwMDApLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAgY29udGV4dC5k
cmF3UmVjdChJbnRSZWN0KEludFBvaW50KCksIG1fd2ViVmlldy0+c2l6ZSgpKSk7CisgICAgICAg
CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnRzWzNdOworICAgICAgICB1bnNpZ25lZCBjb2xvciA9
IDA7CisgICAgICAgIHN3aXRjaCAobV9idXR0b25TdGF0ZSkgeworICAgICAgICBjYXNlIDA6Cisg
ICAgICAgICAgICBjb2xvciA9IDB4RkZGRjAwMDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSAxOgorICAgICAgICAgICAgY29sb3IgPSAweEZGMDBGRjAwOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIGNvbG9yID0gMHhGRjAwMDBGRjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBjb2xvciA9
IDB4RkYwMEZGRkY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIEZsb2F0U2l6
ZSBmbG9hdFNpemUgPSBzdGF0aWNfY2FzdDxGbG9hdFNpemU+KG1fd2ViVmlldy0+c2l6ZSgpKTsK
KyAgICAgICAgRmxvYXRQb2ludCBmbG9hdFBvaW50ID0gRmxvYXRQb2ludChmbG9hdFNpemUud2lk
dGgoKSAtIDE5MCwgMjUpOworICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihzdGF0aWNfY2Fz
dDxSR0JBMzI+KDB4RkZGRkZGRkYpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAgY29u
dGV4dC5zZXRTdHJva2VDb2xvcihzdGF0aWNfY2FzdDxSR0JBMzI+KGNvbG9yKSwgQ29sb3JTcGFj
ZURldmljZVJHQik7CisgICAgICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KGZsb2F0UG9p
bnQsIEZsb2F0U2l6ZSg0MCwgNDApKSk7CisgICAgICAgIGNvbnRleHQuc3Ryb2tlUmVjdChGbG9h
dFJlY3QoZmxvYXRQb2ludCwgRmxvYXRTaXplKDQwLCA0MCkpLCAyKTsKKyAgICAgICAgY29udGV4
dC5zZXRGaWxsQ29sb3Ioc3RhdGljX2Nhc3Q8UkdCQTMyPihjb2xvciksIENvbG9yU3BhY2VEZXZp
Y2VSR0IpOworICAgICAgICAKKyAgICAgICAgcG9pbnRzWzBdID0gRmxvYXRQb2ludChmbG9hdFNp
emUud2lkdGgoKSAtIDE4MCwgMzApOworICAgICAgICBwb2ludHNbMV0gPSBGbG9hdFBvaW50KGZs
b2F0U2l6ZS53aWR0aCgpIC0gMTgwLCA2MCk7CisgICAgICAgIHBvaW50c1syXSA9IEZsb2F0UG9p
bnQoZmxvYXRTaXplLndpZHRoKCkgLSAxNjAsIDQ1KTsKKyAgICAgICAgY29udGV4dC5kcmF3Q29u
dmV4UG9seWdvbigzLCBwb2ludHMsIHRydWUpOworICAgICAgICAKKyAgICAgICAgY29udGV4dC5z
ZXRGaWxsQ29sb3Ioc3RhdGljX2Nhc3Q8UkdCQTMyPigweEZGRkYwMDAwKSwgQ29sb3JTcGFjZURl
dmljZVJHQik7CisgICAgICAgIGRyYXdUZXh0KGNvbnRleHQsICJQYXVzZWQiLCBGbG9hdFBvaW50
KG1fd2ViVmlldy0+c2l6ZSgpLndpZHRoIC0gMTQ1LCA1MikpOworICAgIH0KKworICAgIFdlYlZp
ZXdJbXBsKiBtX3dlYlZpZXc7CisgICAgV2ViRGV2VG9vbHNBZ2VudEltcGwqIG1fd2ViRGV2VG9v
bHNBZ2VudDsKKyAgICBpbnQgbV9idXR0b25TdGF0ZTsKK307CisKIAogV2ViRGV2VG9vbHNBZ2Vu
dEltcGw6OldlYkRldlRvb2xzQWdlbnRJbXBsKAogICAgIFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1w
bCwKQEAgLTQ0NCw2ICs1NjUsMjQgQEAgdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6d2ViVmll
d1Jlc2l6ZWQoKQogICAgICAgICBtX21ldHJpY3NTdXBwb3J0LT53ZWJWaWV3UmVzaXplZCgpOwog
fQogCit2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdl
YklucHV0RXZlbnQqIGlucHV0RXZlbnQpCit7CisgICAgaWYgKG1fZGV2VG9vbHNEYXNoQm9hcmQg
JiYgV2ViSW5wdXRFdmVudDo6aXNNb3VzZUV2ZW50VHlwZShpbnB1dEV2ZW50LT50eXBlKSkKKyAg
ICAgICAgbV9kZXZUb29sc0Rhc2hCb2FyZC0+aGFuZGxlSW5wdXRFdmVudChzdGF0aWNfY2FzdDxj
b25zdCBXZWJNb3VzZUV2ZW50Kj4oaW5wdXRFdmVudCkpOworfQorCit2b2lkIFdlYkRldlRvb2xz
QWdlbnRJbXBsOjpzaG93UGF1c2VXYXJuaW5nKCkKK3sKKyAgICBpZiAoIW1fZGV2VG9vbHNEYXNo
Qm9hcmQpCisgICAgICAgIG1fZGV2VG9vbHNEYXNoQm9hcmQgPSBhZG9wdFB0cihuZXcgRGV2VG9v
bHNEYXNoQm9hcmQobV93ZWJWaWV3SW1wbCwgdGhpcykpOworfQorCit2b2lkIFdlYkRldlRvb2xz
QWdlbnRJbXBsOjpoaWRlUGF1c2VXYXJuaW5nKCkKK3sKKyAgICBpZiAobV9kZXZUb29sc0Rhc2hC
b2FyZCkKKyAgICAgICAgbV9kZXZUb29sc0Rhc2hCb2FyZC5jbGVhcigpOworfQorCiB2b2lkIFdl
YkRldlRvb2xzQWdlbnRJbXBsOjpvdmVycmlkZURldmljZU1ldHJpY3MoaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LCBmbG9hdCBmb250U2NhbGVGYWN0b3IsIGJvb2wgZml0V2luZG93KQogewogICAgIGlm
ICghd2lkdGggJiYgIWhlaWdodCkgewpAQCAtNjE0LDQgKzc1MywxMCBAQCBXZWJTdHJpbmcgV2Vi
RGV2VG9vbHNBZ2VudDo6ZGlzY29ubmVjdEV2ZW50QXNUZXh0KCkKICAgICByZXR1cm4gY2hhbm5l
bC5tX21lc3NhZ2U7CiB9CiAKK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OnJlc3VtZURlYnVn
Z2VyKCkKK3sKKyAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogY29udHJvbGxlciA9IGluc3Bl
Y3RvckNvbnRyb2xsZXIoKSkKKyAgICAgICAgY29udHJvbGxlci0+cmVzdW1lKCk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkRldlRvb2xzQWdlbnRJbXBsLmgKaW5kZXggNmI1MjQ3NjE3MDE4NjVhMzBlNzQyODYwM2VjMWU4
ZDQyYzUxNTRhYi4uNTRiNjRiOGQxOTdhMTNjZjUyNGUwYzg3MGY4Y2NiODE3ZmU3YjhhMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5o
CkBAIC01Miw2ICs1Miw3IEBAIGNsYXNzIE5vZGU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitj
bGFzcyBEZXZUb29sc0Rhc2hCb2FyZDsKIGNsYXNzIERldmljZU1ldHJpY3NTdXBwb3J0OwogY2xh
c3MgV2ViRGV2VG9vbHNBZ2VudENsaWVudDsKIGNsYXNzIFdlYkZyYW1lOwpAQCAtNzUsNiArNzYs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG1haW5GcmFtZVZpZXdDcmVhdGVkKFdlYkZy
YW1lSW1wbCopOwogICAgIHZpcnR1YWwgYm9vbCBtZXRyaWNzT3ZlcnJpZGRlbigpOwogICAgIHZp
cnR1YWwgdm9pZCB3ZWJWaWV3UmVzaXplZCgpOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVJbnB1
dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQqKTsKIAogICAgIC8vIFdlYkRldlRvb2xzQWdlbnQg
aW1wbGVtZW50YXRpb24uCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwpAQCAtMTAxLDYgKzEw
Myw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJCcm93c2VyQ2FjaGUoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXJCcm93c2VyQ29va2llcygpOwogCisgICAgdmlydHVhbCB2b2lk
IHNob3dQYXVzZVdhcm5pbmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGlkZVBhdXNlV2FybmluZygp
OwogICAgIHZpcnR1YWwgdm9pZCBvdmVycmlkZURldmljZU1ldHJpY3MoaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LCBmbG9hdCBmb250U2NhbGVGYWN0b3IsIGJvb2wgZml0V2luZG93KTsKICAgICB2aXJ0
dWFsIHZvaWQgYXV0b1pvb21QYWdlVG9GaXRXaWR0aCgpOwogCkBAIC0xMDksNiArMTEzLDggQEAg
cHVibGljOgogICAgIC8vIFdlYlBhZ2VPdmVybGF5CiAgICAgdmlydHVhbCB2b2lkIHBhaW50UGFn
ZU92ZXJsYXkoV2ViQ2FudmFzKik7CiAKKyAgICB2b2lkIHJlc3VtZURlYnVnZ2VyKCk7CisKIHBy
aXZhdGU6CiAgICAgV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJv
bGxlcigpOwogICAgIFdlYkNvcmU6OkZyYW1lKiBtYWluRnJhbWUoKTsKQEAgLTExOCw2ICsxMjQs
NyBAQCBwcml2YXRlOgogICAgIFdlYlZpZXdJbXBsKiBtX3dlYlZpZXdJbXBsOwogICAgIGJvb2wg
bV9hdHRhY2hlZDsKICAgICBPd25QdHI8RGV2aWNlTWV0cmljc1N1cHBvcnQ+IG1fbWV0cmljc1N1
cHBvcnQ7CisgICAgT3duUHRyPERldlRvb2xzRGFzaEJvYXJkPiBtX2RldlRvb2xzRGFzaEJvYXJk
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUuaAppbmRleCAwNmY1ZjE4MTVhOTli
MzAwNjI5ODJhYjcwNjg0ZjAxYTNhMDE4OWM3Li40MzdlYmVjMDgyNjU4MDMxYjYyOWQ2ZDU2ZmFk
ODIyOGJhZmU3MmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJE
ZXZUb29sc0FnZW50UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkRldlRvb2xzQWdlbnRQcml2YXRlLmgKQEAgLTM1LDYgKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdl
YktpdCB7CiBjbGFzcyBXZWJGcmFtZUltcGw7CitjbGFzcyBXZWJJbnB1dEV2ZW50Owogc3RydWN0
IFdlYlNpemU7CiAKIGNsYXNzIFdlYkRldlRvb2xzQWdlbnRQcml2YXRlIDogcHVibGljIFdlYkRl
dlRvb2xzQWdlbnQgewpAQCAtNTUsNiArNTYsOCBAQCBwdWJsaWM6CiAKICAgICAvLyBXZWJWaWV3
SW1wbCBoYXMgYmVlbiByZXNpemVkLgogICAgIHZpcnR1YWwgdm9pZCB3ZWJWaWV3UmVzaXplZCgp
ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0
RXZlbnQqKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCBkZDMzMTVmZjkwYTBkNGIzYzM1NzNh
NzVlOWQzYTQwMTYxZjAxODIxLi5mZjM4MWUzMjEyYWRiNjdmY2U4N2UzZDc2YjAwYjVhMTJhMjZi
ZDFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0x
NzU4LDggKzE3NTgsMTEgQEAgYm9vbCBXZWJWaWV3SW1wbDo6aGFuZGxlSW5wdXRFdmVudChjb25z
dCBXZWJJbnB1dEV2ZW50JiBpbnB1dEV2ZW50KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAg
IC8vIFJlcG9ydCB0aGUgZXZlbnQgdG8gYmUgTk9UIHByb2Nlc3NlZCBieSBXZWJLaXQsIHNvIHRo
YXQgdGhlIGJyb3dzZXIgY2FuIGhhbmRsZSBpdCBhcHByb3ByaWF0ZWx5LgotICAgIGlmIChtX2ln
bm9yZUlucHV0RXZlbnRzKQorICAgIGlmIChtX2lnbm9yZUlucHV0RXZlbnRzKSB7CisgICAgICAg
IGlmIChkZXZUb29sc0FnZW50UHJpdmF0ZSgpKQorICAgICAgICAgICAgZGV2VG9vbHNBZ2VudFBy
aXZhdGUoKS0+aGFuZGxlSW5wdXRFdmVudCgmaW5wdXRFdmVudCk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CiAKICAgICBUZW1wb3JhcnlDaGFuZ2U8Y29uc3QgV2ViSW5wdXRFdmVudCo+
IGN1cnJlbnRFdmVudENoYW5nZShtX2N1cnJlbnRJbnB1dEV2ZW50LCAmaW5wdXRFdmVudCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151706</attachid>
            <date>2012-07-11 07:40:33 -0700</date>
            <delta_ts>2012-07-12 02:38:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90880-20120711184031.patch</filename>
            <type>text/plain</type>
            <size>24637</size>
            <attacher name="Sergey Rogulenko">rogulenko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWZkNjQ0NzdiMzAwMDk1
NjZiYzliZDY5NmIyNDkwNzgwMmZlYTQ4ZS4uNjllZDUwNDAxMGI5Yzc0N2M3NDc1NzdlZjAwNzdi
NWJjNTdkNGFlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEyLTA3LTExICBTZXJn
ZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogYWRkaW5nIHBhdXNlIGljb24gZm9yIEphdmFTY3JpcHQgZGVidWdnaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg4MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50OjpzaG93UGF1
c2VXYXJuaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNsaWVudDo6aGlkZVBhdXNl
V2FybmluZyk6CisgICAgICAgIChJbnNwZWN0b3JDbGllbnQpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW5zcGVjdG9y
RGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpzaG93UGF1c2VXYXJuaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmhpZGVQYXVzZVdhcm5pbmcpOgorICAgICAgICAqIGluc3BlY3Rvci9QYWdlRGVidWdn
ZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlRGVidWdnZXJBZ2VudDo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50OjpQYWdlRGVidWdnZXJBZ2Vu
dCk6CisgICAgICAgICogaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgIChQ
YWdlRGVidWdnZXJBZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL1dvcmtlckRlYnVnZ2VyQWdl
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyRGVidWdnZXJBZ2VudDo6V29ya2VyRGVi
dWdnZXJBZ2VudCk6CisKIDIwMTItMDctMTEgIEtlbmljaGkgSXNoaWJhc2hpICA8YmFzaGlAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gQWRkaW5nIEhhcmZCdXp6LW5nIGZvciBM
aW51eApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBjZDkwNGQzYzFjMzUwNzlmNThiN2I5
NDNmOTM3ZWFkZThhMGE1NzQ4Li41YTZmZTQwMmZhZGRjZmUzZjIzYjEyNTJjZWI2N2Y1YWI2MDU4
ZjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEyLTA3
LTExICBTZXJnZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CisKKyAgICAgICAg
V2ViIEluc3BlY3RvcjogYWRkaW5nIHBhdXNlIGljb24gZm9yIEphdmFTY3JpcHQgZGVidWdnaW5n
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg4MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3JjL0lu
c3BlY3RvckNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnRJ
bXBsOjpzaG93UGF1c2VXYXJuaW5nKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJL
aXQ6Okluc3BlY3RvckNsaWVudEltcGw6OmhpZGVQYXVzZVdhcm5pbmcpOgorICAgICAgICAqIHNy
Yy9JbnNwZWN0b3JDbGllbnRJbXBsLmg6CisgICAgICAgIChJbnNwZWN0b3JDbGllbnRJbXBsKToK
KyAgICAgICAgKiBzcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwOgorICAgICAgICAoT3Zlcmxh
eVpPcmRlcnMpOgorICAgICAgICAoRGV2VG9vbHNEYXNoQm9hcmQpOgorICAgICAgICAoV2ViS2l0
OjpEZXZUb29sc0Rhc2hCb2FyZDo6RGV2VG9vbHNEYXNoQm9hcmQpOgorICAgICAgICAoV2ViS2l0
OjpEZXZUb29sc0Rhc2hCb2FyZDo6fkRldlRvb2xzRGFzaEJvYXJkKToKKyAgICAgICAgKFdlYktp
dDo6RGV2VG9vbHNEYXNoQm9hcmQ6OmJ1dHRvblN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6RGV2
VG9vbHNEYXNoQm9hcmQ6OmhhbmRsZUlucHV0RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpEZXZU
b29sc0Rhc2hCb2FyZDo6dXBkYXRlQnV0dG9uU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpEZXZU
b29sc0Rhc2hCb2FyZDo6c2V0VXBGb250RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViS2l0OjpE
ZXZUb29sc0Rhc2hCb2FyZDo6ZHJhd1RleHQpOgorICAgICAgICAoV2ViS2l0OjpEZXZUb29sc0Rh
c2hCb2FyZDo6cGFpbnRQYWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6aGFuZGxlSW5wdXRFdmVudCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpzaG93UGF1c2VXYXJuaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OmhpZGVQYXVzZVdhcm5pbmcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6cmVzdW1lRGVidWdnZXIpOgorICAg
ICAgICAqIHNyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oOgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKFdlYkRldlRvb2xzQWdlbnRJbXBsKToKKyAgICAgICAgKiBzcmMvV2ViRGV2VG9vbHNB
Z2VudFByaXZhdGUuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJEZXZUb29sc0Fn
ZW50UHJpdmF0ZSk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OmhhbmRsZUlucHV0RXZlbnQpOgorCiAyMDEyLTA3LTExICBLZW5p
Y2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1d
IEFkZGluZyBIYXJmQnV6ei1uZyBmb3IgTGludXgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDbGllbnQuaAppbmRleCA3NjcxYjAwMThiYzFmN2I5MDc0NWMxOGE1ZTgwODk5OGE5
ZmFmYWYzLi5hNTM2NWI3NTE1YWNkNzU2ZjRlODRhMDYwNTIzYjM3MzNkNTM4MDcwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNsaWVudC5oCkBAIC02MCw2ICs2MCw5IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBjYW5PdmVycmlkZURldmljZU1ldHJpY3MoKSB7
IHJldHVybiBmYWxzZTsgfQogCisgICAgdmlydHVhbCB2b2lkIHNob3dQYXVzZVdhcm5pbmcoKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgaGlkZVBhdXNlV2FybmluZygpIHsgfQorCiAgICAgdmlydHVh
bCB2b2lkIG92ZXJyaWRlRGV2aWNlTWV0cmljcyhpbnQgLyp3aWR0aCovLCBpbnQgLypoZWlnaHQq
LywgZmxvYXQgLypmb250U2NhbGVGYWN0b3IqLywgYm9vbCAvKmZpdFdpbmRvdyovKQogICAgIHsK
ICAgICAgICAgLy8gRklYTUU6IFBsYXRmb3JtcyBtYXkgd2FudCB0byBpbXBsZW1lbnQgdGhpcyAo
c2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjg4NikuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXgg
MDk1ZTFjYzUxYjM1NGE4ZjhlMDgxNDZhNzllZjcwOGRiN2NkNDljZS4uZGYyMzAwMDA1MmQwOTk2
YzNiYTQzNDZiODVmN2ZkZWM2MWQ0YTgxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMTMwLDcgKzEzMCw3IEBAIEluc3BlY3Rv
ckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xp
ZW50KiBpbnNwZWN0b3JDCiAgICAgbV9hZ2VudHMuYXBwZW5kKGNvbnNvbGVBZ2VudFB0ci5yZWxl
YXNlKCkpOwogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgT3duUHRyPElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ+IGRlYnVnZ2VyQWdlbnRQdHIoUGFnZURlYnVnZ2VyQWdlbnQ6
OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1fc3RhdGUuZ2V0KCksIHBhZ2Us
IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpKSk7CisgICAgT3duUHRyPEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ+IGRlYnVnZ2VyQWdlbnRQdHIoUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZSht
X2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1fc3RhdGUuZ2V0KCksIHBhZ2UsIG1faW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyLmdldCgpLCBpbnNwZWN0b3JDbGllbnQpKTsKICAgICBtX2RlYnVnZ2Vy
QWdlbnQgPSBkZWJ1Z2dlckFnZW50UHRyLmdldCgpOwogICAgIG1fYWdlbnRzLmFwcGVuZChkZWJ1
Z2dlckFnZW50UHRyLnJlbGVhc2UoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCAxMTgwN2EzZjllODc5ODQwZGVh
NjAzYjM2NjNlMjA5YWZjZWQ3MmM4Li5hNmI4NGVmMzYzNDFlYTMyNWM1NTg4NjIxNGU0ZDg3MTNh
MTA0YjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRl
YnVnZ2VyQWdlbnQuY3BwCkBAIC02MCw5ICs2MCwxMCBAQCBzdGF0aWMgY29uc3QgY2hhciBwYXVz
ZU9uRXhjZXB0aW9uc1N0YXRlW10gPSAicGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSI7CiAKIGNvbnN0
IGNoYXIqIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJhY2t0cmFjZU9iamVjdEdyb3VwID0gImJh
Y2t0cmFjZS1vYmplY3QtZ3JvdXAiOwogCi1JbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMs
IEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBp
bmplY3RlZFNjcmlwdE1hbmFnZXIpCitJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIElu
c3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmpl
Y3RlZFNjcmlwdE1hbmFnZXIsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQogICAgIDogSW5zcGVj
dG9yQmFzZUFnZW50PEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+KCJEZWJ1Z2dlciIsIGluc3RydW1l
bnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlKQogICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFn
ZXIoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQorICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwg
bV9mcm9udGVuZCgwKQogICAgICwgbV9wYXVzZWRTY3JpcHRTdGF0ZSgwKQogICAgICwgbV9qYXZh
U2NyaXB0UGF1c2VTY2hlZHVsZWQoZmFsc2UpCkBAIC0xMDMsNiArMTA0LDcgQEAgdm9pZCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKCkKIAogICAgIGlmIChtX2xpc3RlbmVyKQogICAg
ICAgICBtX2xpc3RlbmVyLT5kZWJ1Z2dlcldhc0Rpc2FibGVkKCk7CisgICAgaGlkZVBhdXNlV2Fy
bmluZygpOwogfQogCiBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVuYWJsZWQoKQpAQCAt
NjU3LDYgKzY1OSw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGF1c2UoU2Ny
aXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBTY3JpcHRWYWx1CiAgICAgICAgIH0KICAgICB9
CiAKKyAgICBzaG93UGF1c2VXYXJuaW5nKCk7CiAgICAgbV9mcm9udGVuZC0+cGF1c2VkKGN1cnJl
bnRDYWxsRnJhbWVzKCksIG1fYnJlYWtSZWFzb24sIG1fYnJlYWtBdXhEYXRhKTsKICAgICBtX2ph
dmFTY3JpcHRQYXVzZVNjaGVkdWxlZCA9IGZhbHNlOwogCkBAIC02NzEsNiArNjc0LDcgQEAgdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSgpCiAgICAgbV9wYXVzZWRTY3Jp
cHRTdGF0ZSA9IDA7CiAgICAgbV9jdXJyZW50Q2FsbFN0YWNrID0gU2NyaXB0VmFsdWUoKTsKICAg
ICBjbGVhckJyZWFrRGV0YWlscygpOworICAgIGhpZGVQYXVzZVdhcm5pbmcoKTsKICAgICBtX2Zy
b250ZW5kLT5yZXN1bWVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCmluZGV4IDA5Yzk3ZDE5NTNlNGI5YjAwMTYxZjg3NGY0
NTMxZmJkZWM3ZGI2Y2QuLmJjZmE3ZDM2ZWJlOGM4MmQ4NmEzMTU5NGNjYzY1OGQwYTExOWM4MmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuaApAQCAtMzMsNiArMzMsNyBAQAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAm
JiBFTkFCTEUoSU5TUEVDVE9SKQogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yQmFzZUFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKICNpbmNsdWRlICJTY3JpcHRCcmVha3BvaW50
LmgiCiAjaW5jbHVkZSAiU2NyaXB0RGVidWdMaXN0ZW5lci5oIgpAQCAtNDcsNiArNDgsNyBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbmplY3RlZFNjcmlwdE1hbmFnZXI7CitjbGFz
cyBJbnNwZWN0b3JDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKIGNsYXNzIEluc3Bl
Y3RvckFycmF5OwogY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwpAQCAtMTI0LDcgKzEyNiw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIFNjcmlwdERlYnVnU2VydmVyJiBzY3JpcHREZWJ1Z1NlcnZlcigp
ID0gMDsKIAogcHJvdGVjdGVkOgotICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVu
dGluZ0FnZW50cyosIEluc3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKik7Cisg
ICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9y
U3RhdGUqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JDbGllbnQqKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBzdGFydExpc3RlbmluZ1NjcmlwdERlYnVnU2VydmVyKCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBzdG9wTGlzdGVuaW5nU2NyaXB0RGVidWdTZXJ2ZXIoKSA9IDA7CkBAIC0x
NTQsMTAgKzE1NiwxNCBAQCBwcml2YXRlOgogCiAgICAgU3RyaW5nIHNvdXJjZU1hcFVSTEZvclNj
cmlwdChjb25zdCBTY3JpcHQmKTsKIAorICAgIHZvaWQgc2hvd1BhdXNlV2FybmluZygpOworICAg
IHZvaWQgaGlkZVBhdXNlV2FybmluZygpOworCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
U2NyaXB0PiBTY3JpcHRzTWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxT
dHJpbmc+ID4gQnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNNYXA7CiAKICAg
ICBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOworICAgIElu
c3BlY3RvckNsaWVudCogbV9jbGllbnQ7CiAgICAgSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2Vy
KiBtX2Zyb250ZW5kOwogICAgIFNjcmlwdFN0YXRlKiBtX3BhdXNlZFNjcmlwdFN0YXRlOwogICAg
IFNjcmlwdFZhbHVlIG1fY3VycmVudENhbGxTdGFjazsKQEAgLTE3MCw2ICsxNzYsMTggQEAgcHJp
dmF0ZToKICAgICBMaXN0ZW5lciogbV9saXN0ZW5lcjsKIH07CiAKK2lubGluZSB2b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnNob3dQYXVzZVdhcm5pbmcoKQoreworICAgIGlmIChtX2NsaWVu
dCkKKyAgICAgICAgbV9jbGllbnQtPnNob3dQYXVzZVdhcm5pbmcoKTsKK30KKworaW5saW5lIHZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aGlkZVBhdXNlV2FybmluZygpCit7CisgICAgaWYg
KG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+aGlkZVBhdXNlV2FybmluZygpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikgJiYgRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
UGFnZURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGE1ODZlZGYzZmQ0MTA4YzlkMDc5MmMwYmRmZWJl
MWU4M2ZhZmY4NmEuLmIzYzNmYzIyN2JmYmVmNGE2ZGQzYTYwMjFmN2JhNWMyNzhkMWRhZWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcApAQCAt
NDAsMTMgKzQwLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxQYWdl
RGVidWdnZXJBZ2VudD4gUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUs
IFBhZ2UqIGluc3BlY3RlZFBhZ2UsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKQorUGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2VudD4gUGFnZURlYnVnZ2VyQWdl
bnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNw
ZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIEluamVjdGVk
U2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JDbGllbnQqIGNs
aWVudCkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBhZ2VEZWJ1Z2dlckFnZW50KGluc3Ry
dW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlLCBpbnNwZWN0ZWRQYWdlLCBpbmplY3RlZFNj
cmlwdE1hbmFnZXIpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBhZ2VEZWJ1Z2dlckFnZW50
KGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlLCBpbnNwZWN0ZWRQYWdlLCBpbmpl
Y3RlZFNjcmlwdE1hbmFnZXIsIGNsaWVudCkpOwogfQogCi1QYWdlRGVidWdnZXJBZ2VudDo6UGFn
ZURlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywg
SW5zcGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBQYWdlKiBpbnNwZWN0ZWRQYWdlLCBJbmpl
Y3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlcikKLSAgICA6IEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUsIGluamVj
dGVkU2NyaXB0TWFuYWdlcikKK1BhZ2VEZWJ1Z2dlckFnZW50OjpQYWdlRGVidWdnZXJBZ2VudChJ
bnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSog
aW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIEluamVjdGVkU2NyaXB0TWFuYWdl
ciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKKyAgICA6
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3Rh
dGUsIGluamVjdGVkU2NyaXB0TWFuYWdlciwgY2xpZW50KQogICAgICwgbV9pbnNwZWN0ZWRQYWdl
KGluc3BlY3RlZFBhZ2UpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvUGFnZURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVi
dWdnZXJBZ2VudC5oCmluZGV4IDlkYmQ1MTNmOWYxYTI4YmI5ODQyNDkxMzU3ODE0ODZjNzNjMzI2
MTguLjA3MzQwODliZmI4YjQzYzE4OGYzODdlYjYwYTc0MTYwMjdkM2UzYzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oCkBAIC00NCw3ICs0NCw3IEBA
IGNsYXNzIFBhZ2VEZWJ1Z2dlckFnZW50IDogcHVibGljIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VEZWJ1Z2dlckFnZW50KTsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxQYWdl
RGVidWdnZXJBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0
ZSosIFBhZ2UqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKKyAgICBzdGF0aWMgUGFzc093blB0
cjxQYWdlRGVidWdnZXJBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0
b3JTdGF0ZSosIFBhZ2UqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JDbGllbnQq
KTsKICAgICB2aXJ0dWFsIH5QYWdlRGVidWdnZXJBZ2VudCgpOwogCiBwcml2YXRlOgpAQCAtNTYs
NyArNTYsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBJbmplY3RlZFNjcmlwdCBpbmplY3Rl
ZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcqLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJ
ZCk7CiAKLSAgICBQYWdlRGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVj
dG9yU3RhdGUqLCBQYWdlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKik7CisgICAgUGFnZURlYnVn
Z2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclN0YXRlKiwgUGFnZSosIElu
amVjdGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3RvckNsaWVudCopOwogICAgIFBhZ2UqIGNvbnN0
IG1faW5zcGVjdGVkUGFnZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9X
b3JrZXJEZWJ1Z2dlckFnZW50LmNwcAppbmRleCBjNzVhZjRhNmU0YzBmNGU5OTZmMzVkOGEzYTc4
OTE2MTUzMTcxNjJmLi4xNTg5ZmMzMGY0NTY0ZDkzZTI3YmYyN2VhYjU1NzVkNGI2MDZhNTE3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyRGVidWdnZXJBZ2VudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckRlYnVnZ2VyQWdlbnQuY3Bw
CkBAIC04Niw3ICs4Niw3IEBAIFBhc3NPd25QdHI8V29ya2VyRGVidWdnZXJBZ2VudD4gV29ya2Vy
RGVidWdnZXJBZ2VudDo6Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqCiB9CiAKIFdvcmtlckRl
YnVnZ2VyQWdlbnQ6OldvcmtlckRlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5z
dHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBXb3JrZXJD
b250ZXh0KiBpbnNwZWN0ZWRXb3JrZXJDb250ZXh0LCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGlu
amVjdGVkU2NyaXB0TWFuYWdlcikKLSAgICA6IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoaW5zdHJ1
bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdlcikKKyAg
ICA6IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9y
U3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdlciwgMCkKICAgICAsIG1fc2NyaXB0RGVidWdTZXJ2
ZXIoaW5zcGVjdGVkV29ya2VyQ29udGV4dCkKICAgICAsIG1faW5zcGVjdGVkV29ya2VyQ29udGV4
dChpbnNwZWN0ZWRXb3JrZXJDb250ZXh0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmNwcAppbmRleCAwMjU4NzY0NDZhMzUxYWVlMmRj
ZjI5OGVlZTExZDlkM2RlMmJkYjU1Li5mNDE0YTE3MzAwOTkxNmI1ODJhYWNiNDlhZmJmN2UxNDc1
ZWRmYjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JD
bGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JD
bGllbnRJbXBsLmNwcApAQCAtOTUsNiArOTUsMTggQEAgdm9pZCBJbnNwZWN0b3JDbGllbnRJbXBs
OjpoaWRlSGlnaGxpZ2h0KCkKICAgICAgICAgYWdlbnQtPmhpZGVIaWdobGlnaHQoKTsKIH0KIAor
dm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpzaG93UGF1c2VXYXJuaW5nKCkKK3sKKyAgICBpZiAo
V2ViRGV2VG9vbHNBZ2VudEltcGwqIGFnZW50ID0gZGV2VG9vbHNBZ2VudCgpKQorICAgICAgICBh
Z2VudC0+c2hvd1BhdXNlV2FybmluZygpOworfQorCit2b2lkIEluc3BlY3RvckNsaWVudEltcGw6
OmhpZGVQYXVzZVdhcm5pbmcoKQoreworICAgIGlmIChXZWJEZXZUb29sc0FnZW50SW1wbCogYWdl
bnQgPSBkZXZUb29sc0FnZW50KCkpCisgICAgICAgIGFnZW50LT5oaWRlUGF1c2VXYXJuaW5nKCk7
Cit9CisKIGJvb2wgSW5zcGVjdG9yQ2xpZW50SW1wbDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNv
bnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlKQogewogICAgIGlmIChXZWJEZXZUb29sc0FnZW50SW1w
bCogYWdlbnQgPSBkZXZUb29sc0FnZW50KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmgKaW5kZXggNWVhNmJhZWIzZDAwOTAwOTY4NTI0NTkx
YTRiMzljNDA5NGY1YTdhYi4uMDg1ZDgxYzhkNTA5NDkwMjEwNTkxZTA3OTg2ZDhkYTc3ODVjYWU1
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudElt
cGwuaApAQCAtNTcsNiArNTcsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdo
dCgpOwogICAgIHZpcnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KCk7CiAKKyAgICB2aXJ0dWFsIHZv
aWQgc2hvd1BhdXNlV2FybmluZygpOworICAgIHZpcnR1YWwgdm9pZCBoaWRlUGF1c2VXYXJuaW5n
KCk7CisKICAgICB2aXJ0dWFsIGJvb2wgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFdURjo6
U3RyaW5nJik7CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbnNwZWN0b3JTdGF0ZVVwZGF0
ZXMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAKaW5kZXggMWJkMTU5NWI2ZDNiNjg5NDkx
ZWM0OTM3ZTI4NDdjNWRlMWFiMGM3Mi4uNDcyMjJkOGI0OGY1ODEyNTIwNDNhZWNjZjZkNzE1MGVl
ZTQzMWY2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9v
bHNBZ2VudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRv
b2xzQWdlbnRJbXBsLmNwcApAQCAtNTYsNiArNTYsNyBAQAogI2luY2x1ZGUgIldlYkRhdGFTb3Vy
Y2UuaCIKICNpbmNsdWRlICJXZWJEZXZUb29sc0FnZW50Q2xpZW50LmgiCiAjaW5jbHVkZSAiV2Vi
RnJhbWVJbXBsLmgiCisjaW5jbHVkZSAiV2ViSW5wdXRFdmVudC5oIgogI2luY2x1ZGUgInBsYXRm
b3JtL1dlYlJlY3QuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTdHJpbmcuaCIKICNpbmNsdWRl
ICJwbGF0Zm9ybS9XZWJVUkwuaCIKQEAgLTc3LDYgKzc4LDggQEAgc3RhdGljIGNvbnN0IGludCB2
aWV3cG9ydEd1dHRlciA9IDk3OwogCiAvLyBVc2UgOTkgYXMgYSBiaWcgei1vcmRlciBudW1iZXIg
c28gdGhhdCBoaWdobGlnaHQgaXMgYWJvdmUgb3RoZXIgb3ZlcmxheXMuCiBzdGF0aWMgY29uc3Qg
aW50IGhpZ2hsaWdodCA9IDk5OworCitzdGF0aWMgY29uc3QgaW50IGRldlRvb2xzRGFzaEJvYXJk
ID0gMTAwOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTM2Niw2ICszNjksMTM3IEBAIHBy
aXZhdGU6CiAgICAgZG91YmxlIG1fb3JpZ2luYWxab29tRmFjdG9yOwogfTsKIAorY2xhc3MgRGV2
VG9vbHNEYXNoQm9hcmQgOiBwdWJsaWMgV2ViUGFnZU92ZXJsYXkgeworcHVibGljOgorICAgIERl
dlRvb2xzRGFzaEJvYXJkKFdlYlZpZXdJbXBsKiB3ZWJWaWV3LCBXZWJEZXZUb29sc0FnZW50SW1w
bCogd2ViRGV2VG9vbHNBZ2VudEltcGwpCisgICAgICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCisg
ICAgICAgICwgbV93ZWJEZXZUb29sc0FnZW50KHdlYkRldlRvb2xzQWdlbnRJbXBsKQorICAgICAg
ICAsIG1fYnV0dG9uU3RhdGUoMCkKKyAgICB7CisgICAgICAgIG1fd2ViVmlldy0+YWRkUGFnZU92
ZXJsYXkodGhpcywgT3ZlcmxheVpPcmRlcnM6OmRldlRvb2xzRGFzaEJvYXJkKTsKKyAgICB9CisK
KyAgICB+RGV2VG9vbHNEYXNoQm9hcmQoKQorICAgIHsKKyAgICAgICAgbV93ZWJWaWV3LT5yZW1v
dmVQYWdlT3ZlcmxheSh0aGlzKTsKKyAgICB9CisKKyAgICBpbnQgYnV0dG9uU3RhdGUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fYnV0dG9uU3RhdGU7CisgICAgfQorCisgICAgdm9pZCBoYW5k
bGVJbnB1dEV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQqIG1vdXNlRXZlbnQpCisgICAgeworICAg
ICAgICBJbnRQb2ludCBwb2ludChtX3dlYlZpZXctPnNpemUoKS53aWR0aC0xOTAsIDI1KTsKKyAg
ICAgICAgaWYgKG1vdXNlRXZlbnQtPnR5cGUgPT0gV2ViSW5wdXRFdmVudDo6TW91c2VVcCkKKyAg
ICAgICAgICAgIHVwZGF0ZUJ1dHRvblN0YXRlKGJ1dHRvblN0YXRlKCkgJiAofjIpKTsKKyAgICAg
ICAgaWYgKHBvaW50LngoKSA8PSBtb3VzZUV2ZW50LT54ICYmIG1vdXNlRXZlbnQtPnggPD0gcG9p
bnQueCgpICsgNDAgJiYgcG9pbnQueSgpIDw9IG1vdXNlRXZlbnQtPnkgJiYgbW91c2VFdmVudC0+
eSA8PSBwb2ludC55KCkgKyA0MCkgeworICAgICAgICAgICAgdXBkYXRlQnV0dG9uU3RhdGUoYnV0
dG9uU3RhdGUoKSB8IDEpOworICAgICAgICAgICAgaWYgKG1vdXNlRXZlbnQtPnR5cGUgPT0gV2Vi
SW5wdXRFdmVudDo6TW91c2VEb3duKQorICAgICAgICAgICAgICAgIHVwZGF0ZUJ1dHRvblN0YXRl
KGJ1dHRvblN0YXRlKCkgfCAyKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmICht
b3VzZUV2ZW50LT50eXBlID09IFdlYklucHV0RXZlbnQ6Ok1vdXNlVXApCisgICAgICAgICAgICAg
ICAgbV93ZWJEZXZUb29sc0FnZW50LT5yZXN1bWVEZWJ1Z2dlcigpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIHVwZGF0ZUJ1dHRvblN0YXRlKGJ1dHRvblN0YXRlKCkgJiAofjEpKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCB1cGRhdGVCdXR0b25TdGF0ZShpbnQgbmV3QnV0dG9u
U3RhdGUpCisgICAgeworICAgICAgICBpZiAobV9idXR0b25TdGF0ZSAhPSBuZXdCdXR0b25TdGF0
ZSkgeworICAgICAgICAgICAgbV9idXR0b25TdGF0ZSA9IG5ld0J1dHRvblN0YXRlOworICAgICAg
ICAgICAgbV93ZWJWaWV3LT5wYWdlT3ZlcmxheXMoKS0+dXBkYXRlKCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB2b2lkIHNldFVwRm9udERlc2NyaXB0aW9uKEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBXZWJDb3JlOjpTZXR0aW5ncyogc2V0dGluZ3MpCisgICAgeworICAgICAg
ICBmb250RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9kZShzZXR0aW5ncy0+Zm9udFJlbmRlcmlu
Z01vZGUoKSk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoMzApOwor
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZpeGVkRm9udEZhbWlseSA9IHNldHRpbmdzLT5m
aXhlZEZvbnRGYW1pbHkoKTsKKyAgICAgICAgaWYgKCFmaXhlZEZvbnRGYW1pbHkuaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVz
Y3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseSk7CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24u
Zmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoZml4ZWRGb250RmFtaWx5KTsKKyAgICAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLmFwcGVuZEZhbWlseSgwKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHZvaWQgZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBTdHJp
bmcgdGV4dCwgRmxvYXRQb2ludCBwb2ludCkKKyAgICB7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9
IG1fd2ViVmlldy0+cGFnZSgpID8gbV93ZWJWaWV3LT5wYWdlKCktPm1haW5GcmFtZSgpIDogMDsK
KyAgICAgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgU2V0dGlu
Z3MqIHNldHRpbmdzID0gZnJhbWUtPnNldHRpbmdzKCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlv
biBkZXNjOworICAgICAgICBzZXRVcEZvbnREZXNjcmlwdGlvbihkZXNjLCBzZXR0aW5ncyk7Cisg
ICAgICAgIEZvbnQgZm9udCA9IEZvbnQoZGVzYywgMCwgMCk7CisgICAgICAgIGZvbnQudXBkYXRl
KDApOworICAgICAgICBjb250ZXh0LmRyYXdUZXh0KGZvbnQsIHRleHQsIHBvaW50KTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRQYWdlT3ZlcmxheShXZWJDYW52YXMqIGNhbnZhcykK
KyAgICB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dEJ1aWxkZXIgYnVpbGRlcihjYW52YXMpOwor
ICAgICAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQgPSBidWlsZGVyLmNvbnRleHQoKTsKKyAg
ICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3Ioc3RhdGljX2Nhc3Q8UkdCQTMyPigweDFGMDAwMDAw
KSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgIGNvbnRleHQuZHJhd1JlY3QoSW50UmVj
dChJbnRQb2ludCgpLCBtX3dlYlZpZXctPnNpemUoKSkpOworCisgICAgICAgIERFRklORV9TVEFU
SUNfTE9DQUwoUmVmUHRyPEltYWdlPiwgYnV0dG9uSW1hZ2VEaXNhYmxlZCwgKEltYWdlOjpsb2Fk
UGxhdGZvcm1SZXNvdXJjZSgibWVkaWFwbGF5ZXJQbGF5RGlzYWJsZWQiKSkpOworICAgICAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKFJlZlB0cjxJbWFnZT4sIGJ1dHRvbkltYWdlLCAoSW1hZ2U6Omxv
YWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYXBsYXllclBsYXkiKSkpOworICAgICAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFJlZlB0cjxJbWFnZT4sIGJ1dHRvbkltYWdlRG93biwgKEltYWdlOjpsb2Fk
UGxhdGZvcm1SZXNvdXJjZSgibWVkaWFwbGF5ZXJQbGF5RG93biIpKSk7CisgICAgICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoUmVmUHRyPEltYWdlPiwgYnV0dG9uSW1hZ2VIb3ZlciwgKEltYWdlOjps
b2FkUGxhdGZvcm1SZXNvdXJjZSgibWVkaWFwbGF5ZXJQbGF5SG92ZXIiKSkpOworICAgICAgICBJ
bWFnZSogaW1hZ2U7CisKKyAgICAgICAgdW5zaWduZWQgY29sb3IgPSAwOworICAgICAgICBzd2l0
Y2ggKG1fYnV0dG9uU3RhdGUpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgY29sb3Ig
PSAweEZGRkYwMDAwOworICAgICAgICAgICAgaW1hZ2UgPSBidXR0b25JbWFnZURpc2FibGVkLmdl
dCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGNv
bG9yID0gMHhGRjAwRkYwMDsKKyAgICAgICAgICAgIGltYWdlID0gYnV0dG9uSW1hZ2UuZ2V0KCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgY29sb3Ig
PSAweEZGMDAwMEZGOworICAgICAgICAgICAgaW1hZ2UgPSBidXR0b25JbWFnZUhvdmVyLmdldCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIGNvbG9y
ID0gMHhGRjAwRkZGRjsKKyAgICAgICAgICAgIGltYWdlID0gYnV0dG9uSW1hZ2VEb3duLmdldCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGltYWdlID0gMDsKKyAgICAgICAgfQorICAg
ICAgICBJbnRQb2ludCBpbnRQb2ludChtX3dlYlZpZXctPnNpemUoKS53aWR0aCAtIDE5MCwgMjUp
OworICAgICAgICBJbnRTaXplIGludFNpemUoNDAsIDQwKTsKKyAgICAgICAgY29udGV4dC5kcmF3
SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFJlY3QoaW50UG9pbnQsIGludFNp
emUpKTsKKy8qCisgICAgICAgIEZsb2F0U2l6ZSBmbG9hdFNpemUgPSBzdGF0aWNfY2FzdDxGbG9h
dFNpemU+KG1fd2ViVmlldy0+c2l6ZSgpKTsKKyAgICAgICAgRmxvYXRQb2ludCBmbG9hdFBvaW50
ID0gRmxvYXRQb2ludChmbG9hdFNpemUud2lkdGgoKSAtIDE5MCwgMjUpOworICAgICAgICBjb250
ZXh0LnNldEZpbGxDb2xvcihzdGF0aWNfY2FzdDxSR0JBMzI+KDB4RkZGRkZGRkYpLCBDb2xvclNw
YWNlRGV2aWNlUkdCKTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihzdGF0aWNfY2Fz
dDxSR0JBMzI+KGNvbG9yKSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgIGNvbnRleHQu
ZmlsbFJlY3QoRmxvYXRSZWN0KGZsb2F0UG9pbnQsIEZsb2F0U2l6ZSg0MCwgNDApKSk7CisgICAg
ICAgIGNvbnRleHQuc3Ryb2tlUmVjdChGbG9hdFJlY3QoZmxvYXRQb2ludCwgRmxvYXRTaXplKDQw
LCA0MCkpLCAyKTsKKyAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3Ioc3RhdGljX2Nhc3Q8UkdC
QTMyPihjb2xvciksIENvbG9yU3BhY2VEZXZpY2VSR0IpOworCisgICAgICAgIHBvaW50c1swXSA9
IEZsb2F0UG9pbnQoZmxvYXRTaXplLndpZHRoKCkgLSAxODAsIDMwKTsKKyAgICAgICAgcG9pbnRz
WzFdID0gRmxvYXRQb2ludChmbG9hdFNpemUud2lkdGgoKSAtIDE4MCwgNjApOworICAgICAgICBw
b2ludHNbMl0gPSBGbG9hdFBvaW50KGZsb2F0U2l6ZS53aWR0aCgpIC0gMTYwLCA0NSk7CisgICAg
ICAgIGNvbnRleHQuZHJhd0NvbnZleFBvbHlnb24oMywgcG9pbnRzLCB0cnVlKTsKKyovCisgICAg
ICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHN0YXRpY19jYXN0PFJHQkEzMj4oMHhGRkZGMDAwMCks
IENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAgICBkcmF3VGV4dChjb250ZXh0LCAiUGF1c2Vk
IiwgRmxvYXRQb2ludChtX3dlYlZpZXctPnNpemUoKS53aWR0aCAtIDE0NSwgNTIpKTsKKyAgICB9
CisKKyAgICBXZWJWaWV3SW1wbCogbV93ZWJWaWV3OworICAgIFdlYkRldlRvb2xzQWdlbnRJbXBs
KiBtX3dlYkRldlRvb2xzQWdlbnQ7CisgICAgaW50IG1fYnV0dG9uU3RhdGU7Cit9OworCiAKIFdl
YkRldlRvb2xzQWdlbnRJbXBsOjpXZWJEZXZUb29sc0FnZW50SW1wbCgKICAgICBXZWJWaWV3SW1w
bCogd2ViVmlld0ltcGwsCkBAIC00NDQsNiArNTc4LDI0IEBAIHZvaWQgV2ViRGV2VG9vbHNBZ2Vu
dEltcGw6OndlYlZpZXdSZXNpemVkKCkKICAgICAgICAgbV9tZXRyaWNzU3VwcG9ydC0+d2ViVmll
d1Jlc2l6ZWQoKTsKIH0KIAordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6aGFuZGxlSW5wdXRF
dmVudChjb25zdCBXZWJJbnB1dEV2ZW50KiBpbnB1dEV2ZW50KQoreworICAgIGlmIChtX2RldlRv
b2xzRGFzaEJvYXJkICYmIFdlYklucHV0RXZlbnQ6OmlzTW91c2VFdmVudFR5cGUoaW5wdXRFdmVu
dC0+dHlwZSkpCisgICAgICAgIG1fZGV2VG9vbHNEYXNoQm9hcmQtPmhhbmRsZUlucHV0RXZlbnQo
c3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VFdmVudCo+KGlucHV0RXZlbnQpKTsKK30KKwordm9p
ZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6c2hvd1BhdXNlV2FybmluZygpCit7CisgICAgaWYgKCFt
X2RldlRvb2xzRGFzaEJvYXJkKQorICAgICAgICBtX2RldlRvb2xzRGFzaEJvYXJkID0gYWRvcHRQ
dHIobmV3IERldlRvb2xzRGFzaEJvYXJkKG1fd2ViVmlld0ltcGwsIHRoaXMpKTsKK30KKwordm9p
ZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6aGlkZVBhdXNlV2FybmluZygpCit7CisgICAgaWYgKG1f
ZGV2VG9vbHNEYXNoQm9hcmQpCisgICAgICAgIG1fZGV2VG9vbHNEYXNoQm9hcmQuY2xlYXIoKTsK
K30KKwogdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6b3ZlcnJpZGVEZXZpY2VNZXRyaWNzKGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgZmxvYXQgZm9udFNjYWxlRmFjdG9yLCBib29sIGZpdFdpbmRv
dykKIHsKICAgICBpZiAoIXdpZHRoICYmICFoZWlnaHQpIHsKQEAgLTYxNCw0ICs3NjYsMTAgQEAg
V2ViU3RyaW5nIFdlYkRldlRvb2xzQWdlbnQ6OmRpc2Nvbm5lY3RFdmVudEFzVGV4dCgpCiAgICAg
cmV0dXJuIGNoYW5uZWwubV9tZXNzYWdlOwogfQogCit2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBs
OjpyZXN1bWVEZWJ1Z2dlcigpCit7CisgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGNvbnRy
b2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVyKCkpCisgICAgICAgIGNvbnRyb2xsZXItPnJlc3Vt
ZSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oCmluZGV4IDZiNTI0NzYxNzAxODY1YTMw
ZTc0Mjg2MDNlYzFlOGQ0MmM1MTU0YWIuLjU0YjY0YjhkMTk3YTEzY2Y1MjRlMGM4NzBmOGNjYjgx
N2ZlN2I4YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRv
b2xzQWdlbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9v
bHNBZ2VudEltcGwuaApAQCAtNTIsNiArNTIsNyBAQCBjbGFzcyBOb2RlOwogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAorY2xhc3MgRGV2VG9vbHNEYXNoQm9hcmQ7CiBjbGFzcyBEZXZpY2VNZXRyaWNz
U3VwcG9ydDsKIGNsYXNzIFdlYkRldlRvb2xzQWdlbnRDbGllbnQ7CiBjbGFzcyBXZWJGcmFtZTsK
QEAgLTc1LDYgKzc2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBtYWluRnJhbWVWaWV3
Q3JlYXRlZChXZWJGcmFtZUltcGwqKTsKICAgICB2aXJ0dWFsIGJvb2wgbWV0cmljc092ZXJyaWRk
ZW4oKTsKICAgICB2aXJ0dWFsIHZvaWQgd2ViVmlld1Jlc2l6ZWQoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50Kik7CiAKICAgICAvLyBXZWJE
ZXZUb29sc0FnZW50IGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsK
QEAgLTEwMSw2ICsxMDMsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyQnJvd3Nl
ckNhY2hlKCk7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyQnJvd3NlckNvb2tpZXMoKTsKIAorICAg
IHZpcnR1YWwgdm9pZCBzaG93UGF1c2VXYXJuaW5nKCk7CisgICAgdmlydHVhbCB2b2lkIGhpZGVQ
YXVzZVdhcm5pbmcoKTsKICAgICB2aXJ0dWFsIHZvaWQgb3ZlcnJpZGVEZXZpY2VNZXRyaWNzKGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgZmxvYXQgZm9udFNjYWxlRmFjdG9yLCBib29sIGZpdFdpbmRv
dyk7CiAgICAgdmlydHVhbCB2b2lkIGF1dG9ab29tUGFnZVRvRml0V2lkdGgoKTsKIApAQCAtMTA5
LDYgKzExMyw4IEBAIHB1YmxpYzoKICAgICAvLyBXZWJQYWdlT3ZlcmxheQogICAgIHZpcnR1YWwg
dm9pZCBwYWludFBhZ2VPdmVybGF5KFdlYkNhbnZhcyopOwogCisgICAgdm9pZCByZXN1bWVEZWJ1
Z2dlcigpOworCiBwcml2YXRlOgogICAgIFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqIGlu
c3BlY3RvckNvbnRyb2xsZXIoKTsKICAgICBXZWJDb3JlOjpGcmFtZSogbWFpbkZyYW1lKCk7CkBA
IC0xMTgsNiArMTI0LDcgQEAgcHJpdmF0ZToKICAgICBXZWJWaWV3SW1wbCogbV93ZWJWaWV3SW1w
bDsKICAgICBib29sIG1fYXR0YWNoZWQ7CiAgICAgT3duUHRyPERldmljZU1ldHJpY3NTdXBwb3J0
PiBtX21ldHJpY3NTdXBwb3J0OworICAgIE93blB0cjxEZXZUb29sc0Rhc2hCb2FyZD4gbV9kZXZU
b29sc0Rhc2hCb2FyZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRQcml2YXRlLmgKaW5kZXgg
MDZmNWYxODE1YTk5YjMwMDYyOTgyYWI3MDY4NGYwMWEzYTAxODljNy4uNDM3ZWJlYzA4MjY1ODAz
MWI2MjlkNmQ1NmZhZDgyMjhiYWZlNzJjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50UHJpdmF0ZS5oCkBAIC0zNSw2ICszNSw3IEBACiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgV2ViRnJhbWVJbXBsOworY2xhc3MgV2ViSW5wdXRF
dmVudDsKIHN0cnVjdCBXZWJTaXplOwogCiBjbGFzcyBXZWJEZXZUb29sc0FnZW50UHJpdmF0ZSA6
IHB1YmxpYyBXZWJEZXZUb29sc0FnZW50IHsKQEAgLTU1LDYgKzU2LDggQEAgcHVibGljOgogCiAg
ICAgLy8gV2ViVmlld0ltcGwgaGFzIGJlZW4gcmVzaXplZC4KICAgICB2aXJ0dWFsIHZvaWQgd2Vi
Vmlld1Jlc2l6ZWQoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlSW5wdXRFdmVudChj
b25zdCBXZWJJbnB1dEV2ZW50KikgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggZGQzMzE1ZmY5
MGEwZDRiM2MzNTczYTc1ZTlkM2E0MDE2MWYwMTgyMS4uZmYzODFlMzIxMmFkYjY3ZmNlODdlM2Q3
NmIwMGI1YTEyYTI2YmQxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmNwcApAQCAtMTc1OCw4ICsxNzU4LDExIEBAIGJvb2wgV2ViVmlld0ltcGw6OmhhbmRsZUlu
cHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYgaW5wdXRFdmVudCkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICAvLyBSZXBvcnQgdGhlIGV2ZW50IHRvIGJlIE5PVCBwcm9jZXNzZWQgYnkg
V2ViS2l0LCBzbyB0aGF0IHRoZSBicm93c2VyIGNhbiBoYW5kbGUgaXQgYXBwcm9wcmlhdGVseS4K
LSAgICBpZiAobV9pZ25vcmVJbnB1dEV2ZW50cykKKyAgICBpZiAobV9pZ25vcmVJbnB1dEV2ZW50
cykgeworICAgICAgICBpZiAoZGV2VG9vbHNBZ2VudFByaXZhdGUoKSkKKyAgICAgICAgICAgIGRl
dlRvb2xzQWdlbnRQcml2YXRlKCktPmhhbmRsZUlucHV0RXZlbnQoJmlucHV0RXZlbnQpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgVGVtcG9yYXJ5Q2hhbmdlPGNvbnN0IFdl
YklucHV0RXZlbnQqPiBjdXJyZW50RXZlbnRDaGFuZ2UobV9jdXJyZW50SW5wdXRFdmVudCwgJmlu
cHV0RXZlbnQpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151894</attachid>
            <date>2012-07-12 02:38:18 -0700</date>
            <delta_ts>2012-07-12 05:29:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90880-20120712133816.patch</filename>
            <type>text/plain</type>
            <size>25529</size>
            <attacher name="Sergey Rogulenko">rogulenko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWZkNjQ0NzdiMzAwMDk1
NjZiYzliZDY5NmIyNDkwNzgwMmZlYTQ4ZS4uYzRmMzdiY2NmMDIxZjc5OTNkYTlmZDljY2YxZWI4
ZjRlNzBhOTAzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEyLTA3LTEyICBTZXJn
ZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogYWRkaW5nIHBhdXNlIGljb24gZm9yIEphdmFTY3JpcHQgZGVidWdnaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg4MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50OjpzaG93UGF1
c2VXYXJuaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNsaWVudDo6aGlkZVBhdXNl
V2FybmluZyk6CisgICAgICAgIChJbnNwZWN0b3JDbGllbnQpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW5zcGVjdG9y
RGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpzaG93UGF1c2VXYXJuaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmhpZGVQYXVzZVdhcm5pbmcpOgorICAgICAgICAqIGluc3BlY3Rvci9QYWdlRGVidWdn
ZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlRGVidWdnZXJBZ2VudDo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50OjpQYWdlRGVidWdnZXJBZ2Vu
dCk6CisgICAgICAgICogaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgIChQ
YWdlRGVidWdnZXJBZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL1dvcmtlckRlYnVnZ2VyQWdl
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyRGVidWdnZXJBZ2VudDo6V29ya2VyRGVi
dWdnZXJBZ2VudCk6CisKIDIwMTItMDctMTEgIEtlbmljaGkgSXNoaWJhc2hpICA8YmFzaGlAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gQWRkaW5nIEhhcmZCdXp6LW5nIGZvciBM
aW51eApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBjZDkwNGQzYzFjMzUwNzlmNThiN2I5
NDNmOTM3ZWFkZThhMGE1NzQ4Li5kNDcyOTE1NWUzMWUwNDc0NTAzNGMxZmZjODZkZDhmODgxOTNm
ZmNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTA3
LTEyICBTZXJnZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CisKKyAgICAgICAg
V2ViIEluc3BlY3RvcjogYWRkaW5nIHBhdXNlIGljb24gZm9yIEphdmFTY3JpcHQgZGVidWdnaW5n
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg4MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3JjL0lu
c3BlY3RvckNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnRJ
bXBsOjpzaG93UGF1c2VXYXJuaW5nKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJL
aXQ6Okluc3BlY3RvckNsaWVudEltcGw6OmhpZGVQYXVzZVdhcm5pbmcpOgorICAgICAgICAqIHNy
Yy9JbnNwZWN0b3JDbGllbnRJbXBsLmg6CisgICAgICAgIChJbnNwZWN0b3JDbGllbnRJbXBsKToK
KyAgICAgICAgKiBzcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwOgorICAgICAgICAoT3Zlcmxh
eVpPcmRlcnMpOgorICAgICAgICAoRGV2VG9vbHNEYXNoQm9hcmQpOgorICAgICAgICAoV2ViS2l0
OjpEZXZUb29sc0Rhc2hCb2FyZDo6RGV2VG9vbHNEYXNoQm9hcmQpOgorICAgICAgICAoV2ViS2l0
OjpEZXZUb29sc0Rhc2hCb2FyZDo6fkRldlRvb2xzRGFzaEJvYXJkKToKKyAgICAgICAgKFdlYktp
dDo6RGV2VG9vbHNEYXNoQm9hcmQ6OmhhbmRsZUlucHV0RXZlbnQpOgorICAgICAgICAoQnV0dG9u
KToKKyAgICAgICAgKFdlYktpdDo6RGV2VG9vbHNEYXNoQm9hcmQ6OkJ1dHRvbjo6QnV0dG9uKToK
KyAgICAgICAgKFdlYktpdDo6RGV2VG9vbHNEYXNoQm9hcmQ6OkJ1dHRvbjo6ZHJhdyk6CisgICAg
ICAgIChXZWJLaXQ6OkRldlRvb2xzRGFzaEJvYXJkOjpCdXR0b246OmdldFN0YXRlKToKKyAgICAg
ICAgKFdlYktpdDo6RGV2VG9vbHNEYXNoQm9hcmQ6OkJ1dHRvbjo6dXBkYXRlU3RhdGUpOgorICAg
ICAgICAoV2ViS2l0OjpEZXZUb29sc0Rhc2hCb2FyZDo6QnV0dG9uOjpkcmF3UmVjdENvbnRhaW5z
KToKKyAgICAgICAgKFdlYktpdDo6RGV2VG9vbHNEYXNoQm9hcmQ6OkJ1dHRvbjo6c2V0TG9jYXRp
b24pOgorICAgICAgICAoV2ViS2l0OjpEZXZUb29sc0Rhc2hCb2FyZDo6RGFzaEJvYXJkSW50UG9p
bnQpOgorICAgICAgICAoV2ViS2l0OjpEZXZUb29sc0Rhc2hCb2FyZDo6c2V0VXBGb250RGVzY3Jp
cHRpb24pOgorICAgICAgICAoV2ViS2l0OjpEZXZUb29sc0Rhc2hCb2FyZDo6ZHJhd1RleHQpOgor
ICAgICAgICAoV2ViS2l0OjpEZXZUb29sc0Rhc2hCb2FyZDo6cGFpbnRQYWdlT3ZlcmxheSk6Cisg
ICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6
aGFuZGxlSW5wdXRFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBs
OjpzaG93UGF1c2VXYXJuaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudElt
cGw6OmhpZGVQYXVzZVdhcm5pbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50
SW1wbDo6cmVzdW1lRGVidWdnZXIpOgorICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0FnZW50SW1w
bC5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYkRldlRvb2xzQWdlbnRJbXBsKToK
KyAgICAgICAgKiBzcmMvV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUuaDoKKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgIChXZWJEZXZUb29sc0FnZW50UHJpdmF0ZSk6CisgICAgICAgICogc3JjL1dl
YlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmhhbmRsZUlucHV0
RXZlbnQpOgorCiAyMDEyLTA3LTExICBLZW5pY2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIEFkZGluZyBIYXJmQnV6ei1uZyBmb3IgTGludXgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaAppbmRleCA3NjcxYjAw
MThiYzFmN2I5MDc0NWMxOGE1ZTgwODk5OGE5ZmFmYWYzLi5hNTM2NWI3NTE1YWNkNzU2ZjRlODRh
MDYwNTIzYjM3MzNkNTM4MDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNsaWVudC5oCkBAIC02MCw2ICs2MCw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBj
YW5PdmVycmlkZURldmljZU1ldHJpY3MoKSB7IHJldHVybiBmYWxzZTsgfQogCisgICAgdmlydHVh
bCB2b2lkIHNob3dQYXVzZVdhcm5pbmcoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaGlkZVBhdXNl
V2FybmluZygpIHsgfQorCiAgICAgdmlydHVhbCB2b2lkIG92ZXJyaWRlRGV2aWNlTWV0cmljcyhp
bnQgLyp3aWR0aCovLCBpbnQgLypoZWlnaHQqLywgZmxvYXQgLypmb250U2NhbGVGYWN0b3IqLywg
Ym9vbCAvKmZpdFdpbmRvdyovKQogICAgIHsKICAgICAgICAgLy8gRklYTUU6IFBsYXRmb3JtcyBt
YXkgd2FudCB0byBpbXBsZW1lbnQgdGhpcyAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04Mjg4NikuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggMDk1ZTFjYzUxYjM1NGE4ZjhlMDgxNDZhNzllZjcw
OGRiN2NkNDljZS4uZGYyMzAwMDA1MmQwOTk2YzNiYTQzNDZiODVmN2ZkZWM2MWQ0YTgxOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApA
QCAtMTMwLDcgKzEzMCw3IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xs
ZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDCiAgICAgbV9hZ2VudHMu
YXBwZW5kKGNvbnNvbGVBZ2VudFB0ci5yZWxlYXNlKCkpOwogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCi0gICAgT3duUHRyPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+IGRlYnVnZ2Vy
QWdlbnRQdHIoUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMu
Z2V0KCksIG1fc3RhdGUuZ2V0KCksIHBhZ2UsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgp
KSk7CisgICAgT3duUHRyPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+IGRlYnVnZ2VyQWdlbnRQdHIo
UGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1f
c3RhdGUuZ2V0KCksIHBhZ2UsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpLCBpbnNwZWN0
b3JDbGllbnQpKTsKICAgICBtX2RlYnVnZ2VyQWdlbnQgPSBkZWJ1Z2dlckFnZW50UHRyLmdldCgp
OwogICAgIG1fYWdlbnRzLmFwcGVuZChkZWJ1Z2dlckFnZW50UHRyLnJlbGVhc2UoKSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNw
cAppbmRleCAxMTgwN2EzZjllODc5ODQwZGVhNjAzYjM2NjNlMjA5YWZjZWQ3MmM4Li5hNmI4NGVm
MzYzNDFlYTMyNWM1NTg4NjIxNGU0ZDg3MTNhMTA0YjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC02MCw5ICs2MCwx
MCBAQCBzdGF0aWMgY29uc3QgY2hhciBwYXVzZU9uRXhjZXB0aW9uc1N0YXRlW10gPSAicGF1c2VP
bkV4Y2VwdGlvbnNTdGF0ZSI7CiAKIGNvbnN0IGNoYXIqIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmJhY2t0cmFjZU9iamVjdEdyb3VwID0gImJhY2t0cmFjZS1vYmplY3QtZ3JvdXAiOwogCi1JbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KEluc3RydW1lbnRpbmdB
Z2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0
ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCitJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KEluc3RydW1lbnRpbmdBZ2Vu
dHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwg
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIEluc3BlY3RvckNs
aWVudCogY2xpZW50KQogICAgIDogSW5zcGVjdG9yQmFzZUFnZW50PEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ+KCJEZWJ1Z2dlciIsIGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlKQog
ICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQorICAg
ICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9mcm9udGVuZCgwKQogICAgICwgbV9wYXVzZWRT
Y3JpcHRTdGF0ZSgwKQogICAgICwgbV9qYXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQoZmFsc2UpCkBA
IC0xMDMsNiArMTA0LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKCkK
IAogICAgIGlmIChtX2xpc3RlbmVyKQogICAgICAgICBtX2xpc3RlbmVyLT5kZWJ1Z2dlcldhc0Rp
c2FibGVkKCk7CisgICAgaGlkZVBhdXNlV2FybmluZygpOwogfQogCiBib29sIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmVuYWJsZWQoKQpAQCAtNjU3LDYgKzY1OSw3IEBAIHZvaWQgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6ZGlkUGF1c2UoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBT
Y3JpcHRWYWx1CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBzaG93UGF1c2VXYXJuaW5nKCk7CiAg
ICAgbV9mcm9udGVuZC0+cGF1c2VkKGN1cnJlbnRDYWxsRnJhbWVzKCksIG1fYnJlYWtSZWFzb24s
IG1fYnJlYWtBdXhEYXRhKTsKICAgICBtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZCA9IGZhbHNl
OwogCkBAIC02NzEsNiArNjc0LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRD
b250aW51ZSgpCiAgICAgbV9wYXVzZWRTY3JpcHRTdGF0ZSA9IDA7CiAgICAgbV9jdXJyZW50Q2Fs
bFN0YWNrID0gU2NyaXB0VmFsdWUoKTsKICAgICBjbGVhckJyZWFrRGV0YWlscygpOworICAgIGhp
ZGVQYXVzZVdhcm5pbmcoKTsKICAgICBtX2Zyb250ZW5kLT5yZXN1bWVkKCk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCmluZGV4
IDA5Yzk3ZDE5NTNlNGI5YjAwMTYxZjg3NGY0NTMxZmJkZWM3ZGI2Y2QuLmJjZmE3ZDM2ZWJlOGM4
MmQ4NmEzMTU5NGNjYzY1OGQwYTExOWM4MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaApAQCAtMzMsNiArMzMsNyBAQAogI2lmIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBFTkFCTEUoSU5TUEVDVE9SKQogI2luY2x1ZGUg
IkluamVjdGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQmFzZUFnZW50LmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIK
ICNpbmNsdWRlICJTY3JpcHRCcmVha3BvaW50LmgiCiAjaW5jbHVkZSAiU2NyaXB0RGVidWdMaXN0
ZW5lci5oIgpAQCAtNDcsNiArNDgsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJ
bmplY3RlZFNjcmlwdE1hbmFnZXI7CitjbGFzcyBJbnNwZWN0b3JDbGllbnQ7CiBjbGFzcyBJbnNw
ZWN0b3JGcm9udGVuZDsKIGNsYXNzIEluc3BlY3RvckFycmF5OwogY2xhc3MgSW5zcGVjdG9yT2Jq
ZWN0OwpAQCAtMTI0LDcgKzEyNiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFNjcmlwdERlYnVn
U2VydmVyJiBzY3JpcHREZWJ1Z1NlcnZlcigpID0gMDsKIAogcHJvdGVjdGVkOgotICAgIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclN0YXRlKiwg
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKik7CisgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudChJbnN0
cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yU3RhdGUqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIq
LCBJbnNwZWN0b3JDbGllbnQqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzdGFydExpc3RlbmluZ1Nj
cmlwdERlYnVnU2VydmVyKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzdG9wTGlzdGVuaW5nU2Ny
aXB0RGVidWdTZXJ2ZXIoKSA9IDA7CkBAIC0xNTQsMTAgKzE1NiwxNCBAQCBwcml2YXRlOgogCiAg
ICAgU3RyaW5nIHNvdXJjZU1hcFVSTEZvclNjcmlwdChjb25zdCBTY3JpcHQmKTsKIAorICAgIHZv
aWQgc2hvd1BhdXNlV2FybmluZygpOworICAgIHZvaWQgaGlkZVBhdXNlV2FybmluZygpOworCiAg
ICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU2NyaXB0PiBTY3JpcHRzTWFwOwogICAgIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+ID4gQnJlYWtwb2ludElkVG9EZWJ1Z1Nl
cnZlckJyZWFrcG9pbnRJZHNNYXA7CiAKICAgICBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIG1faW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyOworICAgIEluc3BlY3RvckNsaWVudCogbV9jbGllbnQ7CiAgICAg
SW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyKiBtX2Zyb250ZW5kOwogICAgIFNjcmlwdFN0YXRl
KiBtX3BhdXNlZFNjcmlwdFN0YXRlOwogICAgIFNjcmlwdFZhbHVlIG1fY3VycmVudENhbGxTdGFj
azsKQEAgLTE3MCw2ICsxNzYsMTggQEAgcHJpdmF0ZToKICAgICBMaXN0ZW5lciogbV9saXN0ZW5l
cjsKIH07CiAKK2lubGluZSB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNob3dQYXVzZVdh
cm5pbmcoKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPnNob3dQYXVz
ZVdhcm5pbmcoKTsKK30KKworaW5saW5lIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aGlk
ZVBhdXNlV2FybmluZygpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+
aGlkZVBhdXNlV2FybmluZygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgRU5BQkxFKElOU1BFQ1RPUikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGE1
ODZlZGYzZmQ0MTA4YzlkMDc5MmMwYmRmZWJlMWU4M2ZhZmY4NmEuLmIzYzNmYzIyN2JmYmVmNGE2
ZGQzYTYwMjFmN2JhNWMyNzhkMWRhZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L1BhZ2VEZWJ1Z2dlckFnZW50LmNwcApAQCAtNDAsMTMgKzQwLDEzIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotUGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2VudD4gUGFnZURlYnVnZ2VyQWdl
bnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNw
ZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIEluamVjdGVk
U2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQorUGFzc093blB0cjxQYWdlRGVi
dWdnZXJBZ2VudD4gUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIFBh
Z2UqIGluc3BlY3RlZFBhZ2UsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IFBhZ2VEZWJ1Z2dlckFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRl
LCBpbnNwZWN0ZWRQYWdlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIpKTsKKyAgICByZXR1cm4gYWRv
cHRQdHIobmV3IFBhZ2VEZWJ1Z2dlckFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3Rv
clN0YXRlLCBpbnNwZWN0ZWRQYWdlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIGNsaWVudCkpOwog
fQogCi1QYWdlRGVidWdnZXJBZ2VudDo6UGFnZURlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRl
LCBQYWdlKiBpbnNwZWN0ZWRQYWdlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2Ny
aXB0TWFuYWdlcikKLSAgICA6IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0Fn
ZW50cywgaW5zcGVjdG9yU3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdlcikKK1BhZ2VEZWJ1Z2dl
ckFnZW50OjpQYWdlRGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50
aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGluc3BlY3Rl
ZFBhZ2UsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNw
ZWN0b3JDbGllbnQqIGNsaWVudCkKKyAgICA6IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoaW5zdHJ1
bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdlciwgY2xp
ZW50KQogICAgICwgbV9pbnNwZWN0ZWRQYWdlKGluc3BlY3RlZFBhZ2UpCiB7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oCmluZGV4IDlkYmQ1MTNmOWYx
YTI4YmI5ODQyNDkxMzU3ODE0ODZjNzNjMzI2MTguLjA3MzQwODliZmI4YjQzYzE4OGYzODdlYjYw
YTc0MTYwMjdkM2UzYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdl
RGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdn
ZXJBZ2VudC5oCkBAIC00NCw3ICs0NCw3IEBAIGNsYXNzIFBhZ2VEZWJ1Z2dlckFnZW50IDogcHVi
bGljIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBh
Z2VEZWJ1Z2dlckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2VudD4gY3JlYXRlKEluc3RydW1l
bnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0ZSosIFBhZ2UqLCBJbmplY3RlZFNjcmlwdE1hbmFn
ZXIqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2VudD4gY3JlYXRlKElu
c3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0ZSosIFBhZ2UqLCBJbmplY3RlZFNjcmlw
dE1hbmFnZXIqLCBJbnNwZWN0b3JDbGllbnQqKTsKICAgICB2aXJ0dWFsIH5QYWdlRGVidWdnZXJB
Z2VudCgpOwogCiBwcml2YXRlOgpAQCAtNTYsNyArNTYsNyBAQCBwcml2YXRlOgogCiAgICAgdmly
dHVhbCBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcqLCBj
b25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCk7CiAKLSAgICBQYWdlRGVidWdnZXJBZ2VudChJ
bnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yU3RhdGUqLCBQYWdlKiwgSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKik7CisgICAgUGFnZURlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyos
IEluc3BlY3RvclN0YXRlKiwgUGFnZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3Rv
ckNsaWVudCopOwogICAgIFBhZ2UqIGNvbnN0IG1faW5zcGVjdGVkUGFnZTsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcAppbmRleCBj
NzVhZjRhNmU0YzBmNGU5OTZmMzVkOGEzYTc4OTE2MTUzMTcxNjJmLi4xNTg5ZmMzMGY0NTY0ZDkz
ZTI3YmYyN2VhYjU1NzVkNGI2MDZhNTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvV29ya2VyRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL1dvcmtlckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC04Niw3ICs4Niw3IEBAIFBhc3NPd25QdHI8
V29ya2VyRGVidWdnZXJBZ2VudD4gV29ya2VyRGVidWdnZXJBZ2VudDo6Y3JlYXRlKEluc3RydW1l
bnRpbmdBZ2VudHMqCiB9CiAKIFdvcmtlckRlYnVnZ2VyQWdlbnQ6OldvcmtlckRlYnVnZ2VyQWdl
bnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yU3Rh
dGUqIGluc3BlY3RvclN0YXRlLCBXb3JrZXJDb250ZXh0KiBpbnNwZWN0ZWRXb3JrZXJDb250ZXh0
LCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlcikKLSAgICA6IElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUs
IGluamVjdGVkU2NyaXB0TWFuYWdlcikKKyAgICA6IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoaW5z
dHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdlciwg
MCkKICAgICAsIG1fc2NyaXB0RGVidWdTZXJ2ZXIoaW5zcGVjdGVkV29ya2VyQ29udGV4dCkKICAg
ICAsIG1faW5zcGVjdGVkV29ya2VyQ29udGV4dChpbnNwZWN0ZWRXb3JrZXJDb250ZXh0KQogewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1w
bC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmNw
cAppbmRleCAwMjU4NzY0NDZhMzUxYWVlMmRjZjI5OGVlZTExZDlkM2RlMmJkYjU1Li5mNDE0YTE3
MzAwOTkxNmI1ODJhYWNiNDlhZmJmN2UxNDc1ZWRmYjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmNwcApAQCAtOTUsNiArOTUsMTgg
QEAgdm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpoaWRlSGlnaGxpZ2h0KCkKICAgICAgICAgYWdl
bnQtPmhpZGVIaWdobGlnaHQoKTsKIH0KIAordm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpzaG93
UGF1c2VXYXJuaW5nKCkKK3sKKyAgICBpZiAoV2ViRGV2VG9vbHNBZ2VudEltcGwqIGFnZW50ID0g
ZGV2VG9vbHNBZ2VudCgpKQorICAgICAgICBhZ2VudC0+c2hvd1BhdXNlV2FybmluZygpOworfQor
Cit2b2lkIEluc3BlY3RvckNsaWVudEltcGw6OmhpZGVQYXVzZVdhcm5pbmcoKQoreworICAgIGlm
IChXZWJEZXZUb29sc0FnZW50SW1wbCogYWdlbnQgPSBkZXZUb29sc0FnZW50KCkpCisgICAgICAg
IGFnZW50LT5oaWRlUGF1c2VXYXJuaW5nKCk7Cit9CisKIGJvb2wgSW5zcGVjdG9yQ2xpZW50SW1w
bDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlKQogewog
ICAgIGlmIChXZWJEZXZUb29sc0FnZW50SW1wbCogYWdlbnQgPSBkZXZUb29sc0FnZW50KCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBs
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmgKaW5k
ZXggNWVhNmJhZWIzZDAwOTAwOTY4NTI0NTkxYTRiMzljNDA5NGY1YTdhYi4uMDg1ZDgxYzhkNTA5
NDkwMjEwNTkxZTA3OTg2ZDhkYTc3ODVjYWU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwuaApAQCAtNTcsNiArNTcsOSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodCgpOwogICAgIHZpcnR1YWwgdm9pZCBoaWRlSGln
aGxpZ2h0KCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd1BhdXNlV2FybmluZygpOworICAgIHZp
cnR1YWwgdm9pZCBoaWRlUGF1c2VXYXJuaW5nKCk7CisKICAgICB2aXJ0dWFsIGJvb2wgc2VuZE1l
c3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFdURjo6U3RyaW5nJik7CiAKICAgICB2aXJ0dWFsIGJvb2wg
c3VwcG9ydHNJbnNwZWN0b3JTdGF0ZVVwZGF0ZXMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1w
bC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5j
cHAKaW5kZXggMWJkMTU5NWI2ZDNiNjg5NDkxZWM0OTM3ZTI4NDdjNWRlMWFiMGM3Mi4uOGQwYzVj
OTRkMTEzNmE2OGZkMjljODQ3NTBiZjE2NjBlNDkzNjllNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcApAQCAtNTYsNiArNTYs
NyBAQAogI2luY2x1ZGUgIldlYkRhdGFTb3VyY2UuaCIKICNpbmNsdWRlICJXZWJEZXZUb29sc0Fn
ZW50Q2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCisjaW5jbHVkZSAiV2ViSW5w
dXRFdmVudC5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlJlY3QuaCIKICNpbmNsdWRlICJwbGF0
Zm9ybS9XZWJTdHJpbmcuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJVUkwuaCIKQEAgLTc3LDYg
Kzc4LDggQEAgc3RhdGljIGNvbnN0IGludCB2aWV3cG9ydEd1dHRlciA9IDk3OwogCiAvLyBVc2Ug
OTkgYXMgYSBiaWcgei1vcmRlciBudW1iZXIgc28gdGhhdCBoaWdobGlnaHQgaXMgYWJvdmUgb3Ro
ZXIgb3ZlcmxheXMuCiBzdGF0aWMgY29uc3QgaW50IGhpZ2hsaWdodCA9IDk5OworCitzdGF0aWMg
Y29uc3QgaW50IGRldlRvb2xzRGFzaEJvYXJkID0gMTAwOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKQEAgLTM2Niw2ICszNjksMTczIEBAIHByaXZhdGU6CiAgICAgZG91YmxlIG1fb3JpZ2luYWxa
b29tRmFjdG9yOwogfTsKIAorY2xhc3MgRGV2VG9vbHNEYXNoQm9hcmQgOiBwdWJsaWMgV2ViUGFn
ZU92ZXJsYXkgeworcHVibGljOgorICAgIERldlRvb2xzRGFzaEJvYXJkKFdlYlZpZXdJbXBsKiB3
ZWJWaWV3LCBXZWJEZXZUb29sc0FnZW50SW1wbCogd2ViRGV2VG9vbHNBZ2VudEltcGwpCisgICAg
ICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCisgICAgICAgICwgbV93ZWJEZXZUb29sc0FnZW50KHdl
YkRldlRvb2xzQWdlbnRJbXBsKQorICAgICAgICAsIG1fYnV0dG9uKHRoaXMpCisgICAgeworICAg
ICAgICBtX3dlYlZpZXctPmFkZFBhZ2VPdmVybGF5KHRoaXMsIE92ZXJsYXlaT3JkZXJzOjpkZXZU
b29sc0Rhc2hCb2FyZCk7CisgICAgfQorCisgICAgfkRldlRvb2xzRGFzaEJvYXJkKCkKKyAgICB7
CisgICAgICAgIG1fd2ViVmlldy0+cmVtb3ZlUGFnZU92ZXJsYXkodGhpcyk7CisgICAgfQorCisg
ICAgdm9pZCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQqIG1vdXNlRXZlbnQp
CisgICAgeworICAgICAgICBib29sIGlzRm9jdXNlZCwgaXNQcmVzc2VkOworICAgICAgICBtX2J1
dHRvbi5nZXRTdGF0ZShpc0ZvY3VzZWQsIGlzUHJlc3NlZCk7CisgICAgICAgIGlzRm9jdXNlZCA9
IG1fYnV0dG9uLmRyYXdSZWN0Q29udGFpbnMobW91c2VFdmVudC0+eCwgbW91c2VFdmVudC0+eSk7
CisgICAgICAgIHN3aXRjaCAobW91c2VFdmVudC0+dHlwZSkgeworICAgICAgICBjYXNlIFdlYklu
cHV0RXZlbnQ6Ok1vdXNlVXA6CisgICAgICAgICAgICBpZiAoaXNGb2N1c2VkICYmIGlzUHJlc3Nl
ZCkKKyAgICAgICAgICAgICAgICBtX3dlYkRldlRvb2xzQWdlbnQtPnJlc3VtZURlYnVnZ2VyKCk7
CisgICAgICAgICAgICBpc1ByZXNzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFdlYklucHV0RXZlbnQ6Ok1vdXNlRG93bjoKKyAgICAgICAgICAgIGlmIChpc0Zv
Y3VzZWQpCisgICAgICAgICAgICAgICAgaXNQcmVzc2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgbV9idXR0b24udXBkYXRlU3RhdGUoaXNGb2N1c2VkLCBpc1ByZXNzZWQpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgaW50IGZvbnRTaXplID0gMzA7CisgICAgc3Rh
dGljIGNvbnN0IGludCBidXR0b25XaWR0aCA9IDQwOworICAgIHN0YXRpYyBjb25zdCBpbnQgYnV0
dG9uSGVpZ2h0ID0gNDA7CisgICAgLy8gTmVnYXRpdmUgdmF1bGUgbWVhbnMgY291bnRpbmcgZnJv
bSB0aGUgcmlnaHQvYm90dG9tCisgICAgc3RhdGljIGNvbnN0IGludCBidXR0b25YID0gLTE5MDsK
KyAgICBzdGF0aWMgY29uc3QgaW50IGJ1dHRvblkgPSAyNTsKKyAgICBzdGF0aWMgY29uc3QgaW50
IHRleHRYID0gLTE0NTsKKyAgICBzdGF0aWMgY29uc3QgaW50IHRleHRZID0gNTI7CisgICAgc3Rh
dGljIGNvbnN0IFJHQkEzMiB0ZXh0Q29sb3IgPSAweEZGRkYwMDAwOworICAgIHN0YXRpYyBjb25z
dCBSR0JBMzIgYmFja2dyb3VuZENvbG9yID0gMHgxRjAwMDAwMDsKKworICAgIGNsYXNzIEJ1dHRv
biB7CisgICAgcHVibGljOgorICAgICAgICBCdXR0b24oRGV2VG9vbHNEYXNoQm9hcmQqIGRldlRv
b2xzRGFzaEJvYXJkKQorICAgICAgICAgICAgOiBtX2Rhc2hCb2FyZChkZXZUb29sc0Rhc2hCb2Fy
ZCkKKyAgICAgICAgICAgICwgbV9kcmF3UmVjdCgpCisgICAgICAgICAgICAsIG1faXNGb2N1c2Vk
KGZhbHNlKQorICAgICAgICAgICAgLCBtX2lzUHJlc3NlZChmYWxzZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgbV9kcmF3UmVjdC5zZXRTaXplKEludFNpemUoYnV0dG9uV2lkdGgsIGJ1dHRvbkhl
aWdodCkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZWZQ
dHI8SW1hZ2U+LCBidXR0b25JbWFnZURlZmF1bHQsIChJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3Vy
Y2UoIm1lZGlhcGxheWVyUGxheURpc2FibGVkIikpKTsKKyAgICAgICAgICAgIERFRklORV9TVEFU
SUNfTE9DQUwoUmVmUHRyPEltYWdlPiwgYnV0dG9uSW1hZ2UsIChJbWFnZTo6bG9hZFBsYXRmb3Jt
UmVzb3VyY2UoIm1lZGlhcGxheWVyUGxheSIpKSk7CisgICAgICAgICAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKFJlZlB0cjxJbWFnZT4sIGJ1dHRvbkltYWdlRG93biwgKEltYWdlOjpsb2FkUGxhdGZv
cm1SZXNvdXJjZSgibWVkaWFwbGF5ZXJQbGF5RG93biIpKSk7CisgICAgICAgICAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFJlZlB0cjxJbWFnZT4sIGJ1dHRvbkltYWdlSG92ZXIsIChJbWFnZTo6bG9h
ZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhcGxheWVyUGxheUhvdmVyIikpKTsKKyAgICAgICAgICAg
IEltYWdlKiBpbWFnZSA9IDA7CisgICAgICAgICAgICBpZiAobV9pc0ZvY3VzZWQpIHsKKyAgICAg
ICAgICAgICAgICBpZiAobV9pc1ByZXNzZWQpCisgICAgICAgICAgICAgICAgICAgIGltYWdlID0g
YnV0dG9uSW1hZ2VEb3duLmdldCgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgaW1hZ2UgPSBidXR0b25JbWFnZS5nZXQoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgaWYgKG1faXNQcmVzc2VkKQorICAgICAgICAgICAgICAgICAgICBp
bWFnZSA9IGJ1dHRvbkltYWdlSG92ZXIuZ2V0KCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICBpbWFnZSA9IGJ1dHRvbkltYWdlRGVmYXVsdC5nZXQoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgbV9kcmF3UmVjdCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGdldFN0
YXRlKGJvb2wmIGlzRm9jdXNlZCwgYm9vbCYgaXNQcmVzc2VkKQorICAgICAgICB7CisgICAgICAg
ICAgICBpc0ZvY3VzZWQgPSBtX2lzRm9jdXNlZDsKKyAgICAgICAgICAgIGlzUHJlc3NlZCA9IG1f
aXNQcmVzc2VkOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCB1cGRhdGVTdGF0ZShib29sIGlz
Rm9jdXNlZCwgYm9vbCBpc1ByZXNzZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX2lz
Rm9jdXNlZCAhPSBpc0ZvY3VzZWQgfHwgbV9pc1ByZXNzZWQgIT0gaXNQcmVzc2VkKSB7CisgICAg
ICAgICAgICAgICAgbV9pc0ZvY3VzZWQgPSBpc0ZvY3VzZWQ7CisgICAgICAgICAgICAgICAgbV9p
c1ByZXNzZWQgPSBpc1ByZXNzZWQ7CisgICAgICAgICAgICAgICAgbV9kYXNoQm9hcmQtPm1fd2Vi
Vmlldy0+cGFnZU92ZXJsYXlzKCktPnVwZGF0ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBkcmF3UmVjdENvbnRhaW5zKGludCB4LCBpbnQgeSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG1fZHJhd1JlY3QuY29udGFpbnMoeCwgeSk7CisgICAgICAg
IH0KKworICAgICAgICB2b2lkIHNldExvY2F0aW9uKGNvbnN0IEludFBvaW50JiBsb2NhdGlvbikK
KyAgICAgICAgeworICAgICAgICAgICAgbV9kcmF3UmVjdC5zZXRMb2NhdGlvbihsb2NhdGlvbik7
CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIERldlRvb2xzRGFzaEJvYXJkKiBt
X2Rhc2hCb2FyZDsKKyAgICAgICAgSW50UmVjdCBtX2RyYXdSZWN0OworICAgICAgICBib29sIG1f
aXNGb2N1c2VkOworICAgICAgICBib29sIG1faXNQcmVzc2VkOworICAgIH07CisKKyAgICBJbnRQ
b2ludCBEYXNoQm9hcmRJbnRQb2ludChpbnQgeCwgaW50IHksIGNvbnN0IEludFNpemUmIHZpZXdT
aXplKQorICAgIHsKKyAgICAgICAgaWYgKHggPCAwKQorICAgICAgICAgICAgeCArPSB2aWV3U2l6
ZS53aWR0aCgpOworICAgICAgICBpZiAoeSA8IDApCisgICAgICAgICAgICB5ICs9IHZpZXdTaXpl
LmhlaWdodCgpOworICAgICAgICByZXR1cm4gSW50UG9pbnQoeCwgeSk7CisgICAgfQorCisgICAg
dm9pZCBzZXRVcEZvbnREZXNjcmlwdGlvbihGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgV2ViQ29yZTo6U2V0dGluZ3MqIHNldHRpbmdzKQorICAgIHsKKyAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldFJlbmRlcmluZ01vZGUoc2V0dGluZ3MtPmZvbnRSZW5kZXJpbmdNb2RlKCkpOwor
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGZvbnRTaXplKTsKKyAgICAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBmaXhlZEZvbnRGYW1pbHkgPSBzZXR0aW5ncy0+Zml4ZWRG
b250RmFtaWx5KCk7CisgICAgICAgIGlmICghZml4ZWRGb250RmFtaWx5LmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0
aW9uOjpNb25vc3BhY2VGYW1pbHkpOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0
RmFtaWx5KCkuc2V0RmFtaWx5KGZpeGVkRm9udEZhbWlseSk7CisgICAgICAgICAgICBmb250RGVz
Y3JpcHRpb24uZmlyc3RGYW1pbHkoKS5hcHBlbmRGYW1pbHkoMCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB2b2lkIGRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgU3RyaW5nIHRl
eHQsIEZsb2F0UG9pbnQgcG9pbnQpCisgICAgeworICAgICAgICBGcmFtZSogZnJhbWUgPSBtX3dl
YlZpZXctPnBhZ2UoKSA/IG1fd2ViVmlldy0+cGFnZSgpLT5tYWluRnJhbWUoKSA6IDA7CisgICAg
ICAgIGlmICghZnJhbWUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIFNldHRpbmdzKiBz
ZXR0aW5ncyA9IGZyYW1lLT5zZXR0aW5ncygpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZGVz
YzsKKyAgICAgICAgc2V0VXBGb250RGVzY3JpcHRpb24oZGVzYywgc2V0dGluZ3MpOworICAgICAg
ICBGb250IGZvbnQgPSBGb250KGRlc2MsIDAsIDApOworICAgICAgICBmb250LnVwZGF0ZSgwKTsK
KyAgICAgICAgY29udGV4dC5kcmF3VGV4dChmb250LCB0ZXh0LCBwb2ludCk7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIHBhaW50UGFnZU92ZXJsYXkoV2ViQ2FudmFzKiBjYW52YXMpCisgICAg
eworICAgICAgICBHcmFwaGljc0NvbnRleHRCdWlsZGVyIGJ1aWxkZXIoY2FudmFzKTsKKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0ID0gYnVpbGRlci5jb250ZXh0KCk7CisKKyAgICAg
ICAgY29udGV4dC5zZXRGaWxsQ29sb3IoYmFja2dyb3VuZENvbG9yLCBDb2xvclNwYWNlRGV2aWNl
UkdCKTsKKyAgICAgICAgY29udGV4dC5kcmF3UmVjdChJbnRSZWN0KEludFBvaW50KCksIG1fd2Vi
Vmlldy0+c2l6ZSgpKSk7CisKKyAgICAgICAgbV9idXR0b24uc2V0TG9jYXRpb24oRGFzaEJvYXJk
SW50UG9pbnQoYnV0dG9uWCwgYnV0dG9uWSwgbV93ZWJWaWV3LT5zaXplKCkpKTsKKyAgICAgICAg
bV9idXR0b24uZHJhdygmY29udGV4dCk7CisKKyAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3Io
dGV4dENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAgZHJhd1RleHQoY29udGV4
dCwgIlBhdXNlZCIsIERhc2hCb2FyZEludFBvaW50KHRleHRYLCB0ZXh0WSwgbV93ZWJWaWV3LT5z
aXplKCkpKTsKKyAgICB9CisKKyAgICBXZWJWaWV3SW1wbCogbV93ZWJWaWV3OworICAgIFdlYkRl
dlRvb2xzQWdlbnRJbXBsKiBtX3dlYkRldlRvb2xzQWdlbnQ7CisgICAgaW50IG1fYnV0dG9uU3Rh
dGU7CisgICAgQnV0dG9uIG1fYnV0dG9uOworfTsKKwogCiBXZWJEZXZUb29sc0FnZW50SW1wbDo6
V2ViRGV2VG9vbHNBZ2VudEltcGwoCiAgICAgV2ViVmlld0ltcGwqIHdlYlZpZXdJbXBsLApAQCAt
NDQ0LDYgKzYxNCwyNCBAQCB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjp3ZWJWaWV3UmVzaXpl
ZCgpCiAgICAgICAgIG1fbWV0cmljc1N1cHBvcnQtPndlYlZpZXdSZXNpemVkKCk7CiB9CiAKK3Zv
aWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRF
dmVudCogaW5wdXRFdmVudCkKK3sKKyAgICBpZiAobV9kZXZUb29sc0Rhc2hCb2FyZCAmJiBXZWJJ
bnB1dEV2ZW50Ojppc01vdXNlRXZlbnRUeXBlKGlucHV0RXZlbnQtPnR5cGUpKQorICAgICAgICBt
X2RldlRvb2xzRGFzaEJvYXJkLT5oYW5kbGVJbnB1dEV2ZW50KHN0YXRpY19jYXN0PGNvbnN0IFdl
Yk1vdXNlRXZlbnQqPihpbnB1dEV2ZW50KSk7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudElt
cGw6OnNob3dQYXVzZVdhcm5pbmcoKQoreworICAgIGlmICghbV9kZXZUb29sc0Rhc2hCb2FyZCkK
KyAgICAgICAgbV9kZXZUb29sc0Rhc2hCb2FyZCA9IGFkb3B0UHRyKG5ldyBEZXZUb29sc0Rhc2hC
b2FyZChtX3dlYlZpZXdJbXBsLCB0aGlzKSk7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudElt
cGw6OmhpZGVQYXVzZVdhcm5pbmcoKQoreworICAgIGlmIChtX2RldlRvb2xzRGFzaEJvYXJkKQor
ICAgICAgICBtX2RldlRvb2xzRGFzaEJvYXJkLmNsZWFyKCk7Cit9CisKIHZvaWQgV2ViRGV2VG9v
bHNBZ2VudEltcGw6Om92ZXJyaWRlRGV2aWNlTWV0cmljcyhpbnQgd2lkdGgsIGludCBoZWlnaHQs
IGZsb2F0IGZvbnRTY2FsZUZhY3RvciwgYm9vbCBmaXRXaW5kb3cpCiB7CiAgICAgaWYgKCF3aWR0
aCAmJiAhaGVpZ2h0KSB7CkBAIC02MTQsNCArODAyLDEwIEBAIFdlYlN0cmluZyBXZWJEZXZUb29s
c0FnZW50OjpkaXNjb25uZWN0RXZlbnRBc1RleHQoKQogICAgIHJldHVybiBjaGFubmVsLm1fbWVz
c2FnZTsKIH0KIAordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6cmVzdW1lRGVidWdnZXIoKQor
eworICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBjb250cm9sbGVyID0gaW5zcGVjdG9yQ29u
dHJvbGxlcigpKQorICAgICAgICBjb250cm9sbGVyLT5yZXN1bWUoKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJE
ZXZUb29sc0FnZW50SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9v
bHNBZ2VudEltcGwuaAppbmRleCA2YjUyNDc2MTcwMTg2NWEzMGU3NDI4NjAzZWMxZThkNDJjNTE1
NGFiLi41NGI2NGI4ZDE5N2ExM2NmNTI0ZTBjODcwZjhjY2I4MTdmZTdiOGExIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmgKQEAgLTUy
LDYgKzUyLDcgQEAgY2xhc3MgTm9kZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIERl
dlRvb2xzRGFzaEJvYXJkOwogY2xhc3MgRGV2aWNlTWV0cmljc1N1cHBvcnQ7CiBjbGFzcyBXZWJE
ZXZUb29sc0FnZW50Q2xpZW50OwogY2xhc3MgV2ViRnJhbWU7CkBAIC03NSw2ICs3Niw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbWFpbkZyYW1lVmlld0NyZWF0ZWQoV2ViRnJhbWVJbXBs
Kik7CiAgICAgdmlydHVhbCBib29sIG1ldHJpY3NPdmVycmlkZGVuKCk7CiAgICAgdmlydHVhbCB2
b2lkIHdlYlZpZXdSZXNpemVkKCk7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUlucHV0RXZlbnQo
Y29uc3QgV2ViSW5wdXRFdmVudCopOwogCiAgICAgLy8gV2ViRGV2VG9vbHNBZ2VudCBpbXBsZW1l
bnRhdGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CkBAIC0xMDEsNiArMTAzLDggQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjbGVhckJyb3dzZXJDYWNoZSgpOwogICAgIHZpcnR1
YWwgdm9pZCBjbGVhckJyb3dzZXJDb29raWVzKCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd1Bh
dXNlV2FybmluZygpOworICAgIHZpcnR1YWwgdm9pZCBoaWRlUGF1c2VXYXJuaW5nKCk7CiAgICAg
dmlydHVhbCB2b2lkIG92ZXJyaWRlRGV2aWNlTWV0cmljcyhpbnQgd2lkdGgsIGludCBoZWlnaHQs
IGZsb2F0IGZvbnRTY2FsZUZhY3RvciwgYm9vbCBmaXRXaW5kb3cpOwogICAgIHZpcnR1YWwgdm9p
ZCBhdXRvWm9vbVBhZ2VUb0ZpdFdpZHRoKCk7CiAKQEAgLTEwOSw2ICsxMTMsOCBAQCBwdWJsaWM6
CiAgICAgLy8gV2ViUGFnZU92ZXJsYXkKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRQYWdlT3Zlcmxh
eShXZWJDYW52YXMqKTsKIAorICAgIHZvaWQgcmVzdW1lRGVidWdnZXIoKTsKKwogcHJpdmF0ZToK
ICAgICBXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyKCk7
CiAgICAgV2ViQ29yZTo6RnJhbWUqIG1haW5GcmFtZSgpOwpAQCAtMTE4LDYgKzEyNCw3IEBAIHBy
aXZhdGU6CiAgICAgV2ViVmlld0ltcGwqIG1fd2ViVmlld0ltcGw7CiAgICAgYm9vbCBtX2F0dGFj
aGVkOwogICAgIE93blB0cjxEZXZpY2VNZXRyaWNzU3VwcG9ydD4gbV9tZXRyaWNzU3VwcG9ydDsK
KyAgICBPd25QdHI8RGV2VG9vbHNEYXNoQm9hcmQ+IG1fZGV2VG9vbHNEYXNoQm9hcmQ7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkRldlRvb2xzQWdlbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJEZXZUb29sc0FnZW50UHJpdmF0ZS5oCmluZGV4IDA2ZjVmMTgxNWE5OWIzMDA2Mjk4
MmFiNzA2ODRmMDFhM2EwMTg5YzcuLjQzN2ViZWMwODI2NTgwMzFiNjI5ZDZkNTZmYWQ4MjI4YmFm
ZTcyYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xz
QWdlbnRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9v
bHNBZ2VudFByaXZhdGUuaApAQCAtMzUsNiArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IGNsYXNzIFdlYkZyYW1lSW1wbDsKK2NsYXNzIFdlYklucHV0RXZlbnQ7CiBzdHJ1Y3QgV2ViU2l6
ZTsKIAogY2xhc3MgV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUgOiBwdWJsaWMgV2ViRGV2VG9vbHNB
Z2VudCB7CkBAIC01NSw2ICs1Niw4IEBAIHB1YmxpYzoKIAogICAgIC8vIFdlYlZpZXdJbXBsIGhh
cyBiZWVuIHJlc2l6ZWQuCiAgICAgdmlydHVhbCB2b2lkIHdlYlZpZXdSZXNpemVkKCkgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCop
ID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IGRkMzMxNWZmOTBhMGQ0YjNjMzU3M2E3NWU5ZDNh
NDAxNjFmMDE4MjEuLmZmMzgxZTMyMTJhZGI2N2ZjZTg3ZTNkNzZiMDBiNWExMmEyNmJkMWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTE3NTgsOCAr
MTc1OCwxMSBAQCBib29sIFdlYlZpZXdJbXBsOjpoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklu
cHV0RXZlbnQmIGlucHV0RXZlbnQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gUmVw
b3J0IHRoZSBldmVudCB0byBiZSBOT1QgcHJvY2Vzc2VkIGJ5IFdlYktpdCwgc28gdGhhdCB0aGUg
YnJvd3NlciBjYW4gaGFuZGxlIGl0IGFwcHJvcHJpYXRlbHkuCi0gICAgaWYgKG1faWdub3JlSW5w
dXRFdmVudHMpCisgICAgaWYgKG1faWdub3JlSW5wdXRFdmVudHMpIHsKKyAgICAgICAgaWYgKGRl
dlRvb2xzQWdlbnRQcml2YXRlKCkpCisgICAgICAgICAgICBkZXZUb29sc0FnZW50UHJpdmF0ZSgp
LT5oYW5kbGVJbnB1dEV2ZW50KCZpbnB1dEV2ZW50KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KIAogICAgIFRlbXBvcmFyeUNoYW5nZTxjb25zdCBXZWJJbnB1dEV2ZW50Kj4gY3VycmVu
dEV2ZW50Q2hhbmdlKG1fY3VycmVudElucHV0RXZlbnQsICZpbnB1dEV2ZW50KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151920</attachid>
            <date>2012-07-12 05:29:21 -0700</date>
            <delta_ts>2012-07-13 09:48:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90880-20120712162919.patch</filename>
            <type>text/plain</type>
            <size>25917</size>
            <attacher name="Sergey Rogulenko">rogulenko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzIwZGY2YjQwZTAzOTYw
Zjk5ZTEwMGI0MDhmZDBlYTIwMDI1M2FhNi4uNDE4NDcyMTQzODJiYWU3NWI5YzFhZDZkOTg3Njg1
NDNiOTU2NTZlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEyLTA3LTEyICBTZXJn
ZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogYWRkaW5nIHBhdXNlIGljb24gZm9yIEphdmFTY3JpcHQgZGVidWdnaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg4MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50OjpzaG93UGF1
c2VXYXJuaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNsaWVudDo6aGlkZVBhdXNl
V2FybmluZyk6CisgICAgICAgIChJbnNwZWN0b3JDbGllbnQpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW5zcGVjdG9y
RGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpzaG93UGF1c2VXYXJuaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmhpZGVQYXVzZVdhcm5pbmcpOgorICAgICAgICAqIGluc3BlY3Rvci9QYWdlRGVidWdn
ZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlRGVidWdnZXJBZ2VudDo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50OjpQYWdlRGVidWdnZXJBZ2Vu
dCk6CisgICAgICAgICogaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgIChQ
YWdlRGVidWdnZXJBZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL1dvcmtlckRlYnVnZ2VyQWdl
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyRGVidWdnZXJBZ2VudDo6V29ya2VyRGVi
dWdnZXJBZ2VudCk6CisKIDIwMTItMDctMTIgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2ds
ZS5jb20+CiAKICAgICAgICAgW1NoYWRvdyBET01dIDx2aWRlbz4gd2l0aCA8c2hhZG93PiBjcmFz
aGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGU3M2VjOTU0YmMxOWM1ZWE0NTA2MmRk
YmM1ZGQ1NDkwNjRjZDhlNDAuLjNmY2I2MzkwZTZkMjkwNDAyODEwYjdjMjc4NDRiMWQyNzM4ZWRk
ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDggQEAKKzIwMTItMDct
MTIgIFNlcmdleSBSb2d1bGVua28gIDxyb2d1bGVua29AZ29vZ2xlLmNvbT4KKworICAgICAgICBX
ZWIgSW5zcGVjdG9yOiBhZGRpbmcgcGF1c2UgaWNvbiBmb3IgSmF2YVNjcmlwdCBkZWJ1Z2dpbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwODgwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzcmMvSW5z
cGVjdG9yQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudElt
cGw6OnNob3dQYXVzZVdhcm5pbmcpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktp
dDo6SW5zcGVjdG9yQ2xpZW50SW1wbDo6aGlkZVBhdXNlV2FybmluZyk6CisgICAgICAgICogc3Jj
L0luc3BlY3RvckNsaWVudEltcGwuaDoKKyAgICAgICAgKEluc3BlY3RvckNsaWVudEltcGwpOgor
ICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHA6CisgICAgICAgIChPdmVybGF5
Wk9yZGVycyk6CisgICAgICAgIChEZXZUb29sc0Rhc2hCb2FyZCk6CisgICAgICAgIChXZWJLaXQ6
OkRldlRvb2xzRGFzaEJvYXJkOjpEZXZUb29sc0Rhc2hCb2FyZCk6CisgICAgICAgIChXZWJLaXQ6
OkRldlRvb2xzRGFzaEJvYXJkOjp+RGV2VG9vbHNEYXNoQm9hcmQpOgorICAgICAgICAoV2ViS2l0
OjpEZXZUb29sc0Rhc2hCb2FyZDo6aGFuZGxlSW5wdXRFdmVudCk6CisgICAgICAgIChCdXR0b24p
OgorICAgICAgICAoV2ViS2l0OjpEZXZUb29sc0Rhc2hCb2FyZDo6QnV0dG9uOjpCdXR0b24pOgor
ICAgICAgICAoV2ViS2l0OjpEZXZUb29sc0Rhc2hCb2FyZDo6QnV0dG9uOjppc0NsaWNrZWRBZnRl
ckV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6RGV2VG9vbHNEYXNoQm9hcmQ6OkJ1dHRvbjo6ZHJh
dyk6CisgICAgICAgIChXZWJLaXQ6OkRldlRvb2xzRGFzaEJvYXJkOjpCdXR0b246OmdldFN0YXRl
KToKKyAgICAgICAgKFdlYktpdDo6RGV2VG9vbHNEYXNoQm9hcmQ6OkJ1dHRvbjo6dXBkYXRlU3Rh
dGUpOgorICAgICAgICAoV2ViS2l0OjpEZXZUb29sc0Rhc2hCb2FyZDo6QnV0dG9uOjpkcmF3UmVj
dENvbnRhaW5zKToKKyAgICAgICAgKFdlYktpdDo6RGV2VG9vbHNEYXNoQm9hcmQ6OkJ1dHRvbjo6
c2V0TG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpEZXZUb29sc0Rhc2hCb2FyZDo6RGFzaEJv
YXJkSW50UG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpEZXZUb29sc0Rhc2hCb2FyZDo6c2V0VXBG
b250RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViS2l0OjpEZXZUb29sc0Rhc2hCb2FyZDo6ZHJh
d1RleHQpOgorICAgICAgICAoV2ViS2l0OjpEZXZUb29sc0Rhc2hCb2FyZDo6cGFpbnRQYWdlT3Zl
cmxheSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0Fn
ZW50SW1wbDo6aGFuZGxlSW5wdXRFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xz
QWdlbnRJbXBsOjpzaG93UGF1c2VXYXJuaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9v
bHNBZ2VudEltcGw6OmhpZGVQYXVzZVdhcm5pbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZU
b29sc0FnZW50SW1wbDo6cmVzdW1lRGVidWdnZXIpOgorICAgICAgICAqIHNyYy9XZWJEZXZUb29s
c0FnZW50SW1wbC5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYkRldlRvb2xzQWdl
bnRJbXBsKToKKyAgICAgICAgKiBzcmMvV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUuaDoKKyAgICAg
ICAgKFdlYktpdCk6CisgICAgICAgIChXZWJEZXZUb29sc0FnZW50UHJpdmF0ZSk6CisgICAgICAg
ICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6Omhh
bmRsZUlucHV0RXZlbnQpOgorCiAyMDEyLTA3LTExICBNYXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5j
b20+CiAKICAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2IvOTEwMTU+IFJlbW92ZSBCVUlMRElO
R19PTiAvIFRBUkdFVElORyBtYWNyb3MgaW4gZmF2b3Igb2Ygc3lzdGVtIGF2YWlsYWJpbGl0eSBt
YWNyb3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDbGll
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaAppbmRleCA3
NjcxYjAwMThiYzFmN2I5MDc0NWMxOGE1ZTgwODk5OGE5ZmFmYWYzLi5hNTM2NWI3NTE1YWNkNzU2
ZjRlODRhMDYwNTIzYjM3MzNkNTM4MDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNsaWVudC5oCkBAIC02MCw2ICs2MCw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
Ym9vbCBjYW5PdmVycmlkZURldmljZU1ldHJpY3MoKSB7IHJldHVybiBmYWxzZTsgfQogCisgICAg
dmlydHVhbCB2b2lkIHNob3dQYXVzZVdhcm5pbmcoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaGlk
ZVBhdXNlV2FybmluZygpIHsgfQorCiAgICAgdmlydHVhbCB2b2lkIG92ZXJyaWRlRGV2aWNlTWV0
cmljcyhpbnQgLyp3aWR0aCovLCBpbnQgLypoZWlnaHQqLywgZmxvYXQgLypmb250U2NhbGVGYWN0
b3IqLywgYm9vbCAvKmZpdFdpbmRvdyovKQogICAgIHsKICAgICAgICAgLy8gRklYTUU6IFBsYXRm
b3JtcyBtYXkgd2FudCB0byBpbXBsZW1lbnQgdGhpcyAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD04Mjg4NikuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggMDk1ZTFjYzUxYjM1NGE4ZjhlMDgxNDZh
NzllZjcwOGRiN2NkNDljZS4uZGYyMzAwMDA1MmQwOTk2YzNiYTQzNDZiODVmN2ZkZWM2MWQ0YTgx
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcApAQCAtMTMwLDcgKzEzMCw3IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNv
bnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDCiAgICAgbV9h
Z2VudHMuYXBwZW5kKGNvbnNvbGVBZ2VudFB0ci5yZWxlYXNlKCkpOwogCiAjaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgT3duUHRyPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+IGRl
YnVnZ2VyQWdlbnRQdHIoUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdB
Z2VudHMuZ2V0KCksIG1fc3RhdGUuZ2V0KCksIHBhZ2UsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LmdldCgpKSk7CisgICAgT3duUHRyPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+IGRlYnVnZ2VyQWdl
bnRQdHIoUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0
KCksIG1fc3RhdGUuZ2V0KCksIHBhZ2UsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpLCBp
bnNwZWN0b3JDbGllbnQpKTsKICAgICBtX2RlYnVnZ2VyQWdlbnQgPSBkZWJ1Z2dlckFnZW50UHRy
LmdldCgpOwogICAgIG1fYWdlbnRzLmFwcGVuZChkZWJ1Z2dlckFnZW50UHRyLnJlbGVhc2UoKSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50LmNwcAppbmRleCAxMTgwN2EzZjllODc5ODQwZGVhNjAzYjM2NjNlMjA5YWZjZWQ3MmM4Li5h
NmI4NGVmMzYzNDFlYTMyNWM1NTg4NjIxNGU0ZDg3MTNhMTA0YjRjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC02MCw5
ICs2MCwxMCBAQCBzdGF0aWMgY29uc3QgY2hhciBwYXVzZU9uRXhjZXB0aW9uc1N0YXRlW10gPSAi
cGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSI7CiAKIGNvbnN0IGNoYXIqIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmJhY2t0cmFjZU9iamVjdEdyb3VwID0gImJhY2t0cmFjZS1vYmplY3QtZ3JvdXAiOwog
Ci1JbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KEluc3RydW1l
bnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0
b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCitJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KEluc3RydW1lbnRp
bmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JT
dGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIEluc3Bl
Y3RvckNsaWVudCogY2xpZW50KQogICAgIDogSW5zcGVjdG9yQmFzZUFnZW50PEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ+KCJEZWJ1Z2dlciIsIGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0
YXRlKQogICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoaW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
KQorICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9mcm9udGVuZCgwKQogICAgICwgbV9w
YXVzZWRTY3JpcHRTdGF0ZSgwKQogICAgICwgbV9qYXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQoZmFs
c2UpCkBAIC0xMDMsNiArMTA0LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaXNh
YmxlKCkKIAogICAgIGlmIChtX2xpc3RlbmVyKQogICAgICAgICBtX2xpc3RlbmVyLT5kZWJ1Z2dl
cldhc0Rpc2FibGVkKCk7CisgICAgaGlkZVBhdXNlV2FybmluZygpOwogfQogCiBib29sIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OmVuYWJsZWQoKQpAQCAtNjU3LDYgKzY1OSw3IEBAIHZvaWQgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGF1c2UoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBj
b25zdCBTY3JpcHRWYWx1CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBzaG93UGF1c2VXYXJuaW5n
KCk7CiAgICAgbV9mcm9udGVuZC0+cGF1c2VkKGN1cnJlbnRDYWxsRnJhbWVzKCksIG1fYnJlYWtS
ZWFzb24sIG1fYnJlYWtBdXhEYXRhKTsKICAgICBtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZCA9
IGZhbHNlOwogCkBAIC02NzEsNiArNjc0LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpkaWRDb250aW51ZSgpCiAgICAgbV9wYXVzZWRTY3JpcHRTdGF0ZSA9IDA7CiAgICAgbV9jdXJy
ZW50Q2FsbFN0YWNrID0gU2NyaXB0VmFsdWUoKTsKICAgICBjbGVhckJyZWFrRGV0YWlscygpOwor
ICAgIGhpZGVQYXVzZVdhcm5pbmcoKTsKICAgICBtX2Zyb250ZW5kLT5yZXN1bWVkKCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5o
CmluZGV4IDA5Yzk3ZDE5NTNlNGI5YjAwMTYxZjg3NGY0NTMxZmJkZWM3ZGI2Y2QuLmJjZmE3ZDM2
ZWJlOGM4MmQ4NmEzMTU5NGNjYzY1OGQwYTExOWM4MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaApAQCAtMzMsNiArMzMsNyBAQAog
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBFTkFCTEUoSU5TUEVDVE9SKQogI2lu
Y2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQmFzZUFnZW50Lmgi
CisjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRl
bmQuaCIKICNpbmNsdWRlICJTY3JpcHRCcmVha3BvaW50LmgiCiAjaW5jbHVkZSAiU2NyaXB0RGVi
dWdMaXN0ZW5lci5oIgpAQCAtNDcsNiArNDgsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBJbmplY3RlZFNjcmlwdE1hbmFnZXI7CitjbGFzcyBJbnNwZWN0b3JDbGllbnQ7CiBjbGFz
cyBJbnNwZWN0b3JGcm9udGVuZDsKIGNsYXNzIEluc3BlY3RvckFycmF5OwogY2xhc3MgSW5zcGVj
dG9yT2JqZWN0OwpAQCAtMTI0LDcgKzEyNiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFNjcmlw
dERlYnVnU2VydmVyJiBzY3JpcHREZWJ1Z1NlcnZlcigpID0gMDsKIAogcHJvdGVjdGVkOgotICAg
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclN0
YXRlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKik7CisgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yU3RhdGUqLCBJbmplY3RlZFNjcmlwdE1h
bmFnZXIqLCBJbnNwZWN0b3JDbGllbnQqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzdGFydExpc3Rl
bmluZ1NjcmlwdERlYnVnU2VydmVyKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzdG9wTGlzdGVu
aW5nU2NyaXB0RGVidWdTZXJ2ZXIoKSA9IDA7CkBAIC0xNTQsMTAgKzE1NiwxNCBAQCBwcml2YXRl
OgogCiAgICAgU3RyaW5nIHNvdXJjZU1hcFVSTEZvclNjcmlwdChjb25zdCBTY3JpcHQmKTsKIAor
ICAgIHZvaWQgc2hvd1BhdXNlV2FybmluZygpOworICAgIHZvaWQgaGlkZVBhdXNlV2FybmluZygp
OworCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU2NyaXB0PiBTY3JpcHRzTWFwOwogICAg
IHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+ID4gQnJlYWtwb2ludElkVG9E
ZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNNYXA7CiAKICAgICBJbmplY3RlZFNjcmlwdE1hbmFnZXIq
IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOworICAgIEluc3BlY3RvckNsaWVudCogbV9jbGllbnQ7
CiAgICAgSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyKiBtX2Zyb250ZW5kOwogICAgIFNjcmlw
dFN0YXRlKiBtX3BhdXNlZFNjcmlwdFN0YXRlOwogICAgIFNjcmlwdFZhbHVlIG1fY3VycmVudENh
bGxTdGFjazsKQEAgLTE3MCw2ICsxNzYsMTggQEAgcHJpdmF0ZToKICAgICBMaXN0ZW5lciogbV9s
aXN0ZW5lcjsKIH07CiAKK2lubGluZSB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNob3dQ
YXVzZVdhcm5pbmcoKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPnNo
b3dQYXVzZVdhcm5pbmcoKTsKK30KKworaW5saW5lIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6aGlkZVBhdXNlV2FybmluZygpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2Ns
aWVudC0+aGlkZVBhdXNlV2FybmluZygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgRU5BQkxFKElOU1BFQ1RP
UikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCmlu
ZGV4IGE1ODZlZGYzZmQ0MTA4YzlkMDc5MmMwYmRmZWJlMWU4M2ZhZmY4NmEuLmIzYzNmYzIyN2Jm
YmVmNGE2ZGQzYTYwMjFmN2JhNWMyNzhkMWRhZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcApAQCAtNDAsMTMgKzQwLDEzIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2VudD4gUGFnZURlYnVn
Z2VyQWdlbnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
LCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIElu
amVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQorUGFzc093blB0cjxQ
YWdlRGVidWdnZXJBZ2VudD4gUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5n
QWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3Rh
dGUsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKIHsKLSAgICByZXR1cm4gYWRv
cHRQdHIobmV3IFBhZ2VEZWJ1Z2dlckFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3Rv
clN0YXRlLCBpbnNwZWN0ZWRQYWdlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIpKTsKKyAgICByZXR1
cm4gYWRvcHRQdHIobmV3IFBhZ2VEZWJ1Z2dlckFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIGlu
c3BlY3RvclN0YXRlLCBpbnNwZWN0ZWRQYWdlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIGNsaWVu
dCkpOwogfQogCi1QYWdlRGVidWdnZXJBZ2VudDo6UGFnZURlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVu
dGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3Rv
clN0YXRlLCBQYWdlKiBpbnNwZWN0ZWRQYWdlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVj
dGVkU2NyaXB0TWFuYWdlcikKLSAgICA6IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVu
dGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdlcikKK1BhZ2VE
ZWJ1Z2dlckFnZW50OjpQYWdlRGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGlu
c3BlY3RlZFBhZ2UsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKKyAgICA6IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQo
aW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdl
ciwgY2xpZW50KQogICAgICwgbV9pbnNwZWN0ZWRQYWdlKGluc3BlY3RlZFBhZ2UpCiB7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oCmluZGV4IDlkYmQ1
MTNmOWYxYTI4YmI5ODQyNDkxMzU3ODE0ODZjNzNjMzI2MTguLjA3MzQwODliZmI4YjQzYzE4OGYz
ODdlYjYwYTc0MTYwMjdkM2UzYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9QYWdlRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdl
RGVidWdnZXJBZ2VudC5oCkBAIC00NCw3ICs0NCw3IEBAIGNsYXNzIFBhZ2VEZWJ1Z2dlckFnZW50
IDogcHVibGljIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFBhZ2VEZWJ1Z2dlckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2VudD4gY3JlYXRlKElu
c3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0ZSosIFBhZ2UqLCBJbmplY3RlZFNjcmlw
dE1hbmFnZXIqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2VudD4gY3Jl
YXRlKEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0ZSosIFBhZ2UqLCBJbmplY3Rl
ZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JDbGllbnQqKTsKICAgICB2aXJ0dWFsIH5QYWdlRGVi
dWdnZXJBZ2VudCgpOwogCiBwcml2YXRlOgpAQCAtNTYsNyArNTYsNyBAQCBwcml2YXRlOgogCiAg
ICAgdmlydHVhbCBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJp
bmcqLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCk7CiAKLSAgICBQYWdlRGVidWdnZXJB
Z2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yU3RhdGUqLCBQYWdlKiwgSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKik7CisgICAgUGFnZURlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0Fn
ZW50cyosIEluc3BlY3RvclN0YXRlKiwgUGFnZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciosIElu
c3BlY3RvckNsaWVudCopOwogICAgIFBhZ2UqIGNvbnN0IG1faW5zcGVjdGVkUGFnZTsKIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlckFnZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcApp
bmRleCBjNzVhZjRhNmU0YzBmNGU5OTZmMzVkOGEzYTc4OTE2MTUzMTcxNjJmLi4xNTg5ZmMzMGY0
NTY0ZDkzZTI3YmYyN2VhYjU1NzVkNGI2MDZhNTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvV29ya2VyRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL1dvcmtlckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC04Niw3ICs4Niw3IEBAIFBhc3NP
d25QdHI8V29ya2VyRGVidWdnZXJBZ2VudD4gV29ya2VyRGVidWdnZXJBZ2VudDo6Y3JlYXRlKElu
c3RydW1lbnRpbmdBZ2VudHMqCiB9CiAKIFdvcmtlckRlYnVnZ2VyQWdlbnQ6OldvcmtlckRlYnVn
Z2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVj
dG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBXb3JrZXJDb250ZXh0KiBpbnNwZWN0ZWRXb3JrZXJD
b250ZXh0LCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlcikKLSAg
ICA6IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9y
U3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdlcikKKyAgICA6IEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQoaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUsIGluamVjdGVkU2NyaXB0TWFu
YWdlciwgMCkKICAgICAsIG1fc2NyaXB0RGVidWdTZXJ2ZXIoaW5zcGVjdGVkV29ya2VyQ29udGV4
dCkKICAgICAsIG1faW5zcGVjdGVkV29ya2VyQ29udGV4dChpbnNwZWN0ZWRXb3JrZXJDb250ZXh0
KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xp
ZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJ
bXBsLmNwcAppbmRleCAwMjU4NzY0NDZhMzUxYWVlMmRjZjI5OGVlZTExZDlkM2RlMmJkYjU1Li5m
NDE0YTE3MzAwOTkxNmI1ODJhYWNiNDlhZmJmN2UxNDc1ZWRmYjQzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmNwcApAQCAtOTUsNiAr
OTUsMTggQEAgdm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpoaWRlSGlnaGxpZ2h0KCkKICAgICAg
ICAgYWdlbnQtPmhpZGVIaWdobGlnaHQoKTsKIH0KIAordm9pZCBJbnNwZWN0b3JDbGllbnRJbXBs
OjpzaG93UGF1c2VXYXJuaW5nKCkKK3sKKyAgICBpZiAoV2ViRGV2VG9vbHNBZ2VudEltcGwqIGFn
ZW50ID0gZGV2VG9vbHNBZ2VudCgpKQorICAgICAgICBhZ2VudC0+c2hvd1BhdXNlV2FybmluZygp
OworfQorCit2b2lkIEluc3BlY3RvckNsaWVudEltcGw6OmhpZGVQYXVzZVdhcm5pbmcoKQorewor
ICAgIGlmIChXZWJEZXZUb29sc0FnZW50SW1wbCogYWdlbnQgPSBkZXZUb29sc0FnZW50KCkpCisg
ICAgICAgIGFnZW50LT5oaWRlUGF1c2VXYXJuaW5nKCk7Cit9CisKIGJvb2wgSW5zcGVjdG9yQ2xp
ZW50SW1wbDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFdURjo6U3RyaW5nJiBtZXNzYWdl
KQogewogICAgIGlmIChXZWJEZXZUb29sc0FnZW50SW1wbCogYWdlbnQgPSBkZXZUb29sc0FnZW50
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGll
bnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBs
LmgKaW5kZXggNWVhNmJhZWIzZDAwOTAwOTY4NTI0NTkxYTRiMzljNDA5NGY1YTdhYi4uMDg1ZDgx
YzhkNTA5NDkwMjEwNTkxZTA3OTg2ZDhkYTc3ODVjYWU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwuaApAQCAtNTcsNiArNTcsOSBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodCgpOwogICAgIHZpcnR1YWwgdm9pZCBo
aWRlSGlnaGxpZ2h0KCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd1BhdXNlV2FybmluZygpOwor
ICAgIHZpcnR1YWwgdm9pZCBoaWRlUGF1c2VXYXJuaW5nKCk7CisKICAgICB2aXJ0dWFsIGJvb2wg
c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFdURjo6U3RyaW5nJik7CiAKICAgICB2aXJ0dWFs
IGJvb2wgc3VwcG9ydHNJbnNwZWN0b3JTdGF0ZVVwZGF0ZXMoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Fn
ZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50
SW1wbC5jcHAKaW5kZXggMWJkMTU5NWI2ZDNiNjg5NDkxZWM0OTM3ZTI4NDdjNWRlMWFiMGM3Mi4u
OGViOGJkMTJiYzlhZTVmNmZjZmVkMWQzY2ZlODk4NmU3OTdmNzAzMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcApAQCAtNTYs
NiArNTYsNyBAQAogI2luY2x1ZGUgIldlYkRhdGFTb3VyY2UuaCIKICNpbmNsdWRlICJXZWJEZXZU
b29sc0FnZW50Q2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCisjaW5jbHVkZSAi
V2ViSW5wdXRFdmVudC5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlJlY3QuaCIKICNpbmNsdWRl
ICJwbGF0Zm9ybS9XZWJTdHJpbmcuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJVUkwuaCIKQEAg
LTc3LDYgKzc4LDggQEAgc3RhdGljIGNvbnN0IGludCB2aWV3cG9ydEd1dHRlciA9IDk3OwogCiAv
LyBVc2UgOTkgYXMgYSBiaWcgei1vcmRlciBudW1iZXIgc28gdGhhdCBoaWdobGlnaHQgaXMgYWJv
dmUgb3RoZXIgb3ZlcmxheXMuCiBzdGF0aWMgY29uc3QgaW50IGhpZ2hsaWdodCA9IDk5OworCitz
dGF0aWMgY29uc3QgaW50IGRldlRvb2xzRGFzaEJvYXJkID0gMTAwOwogfQogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKQEAgLTM2Niw2ICszNjksMTgwIEBAIHByaXZhdGU6CiAgICAgZG91YmxlIG1fb3Jp
Z2luYWxab29tRmFjdG9yOwogfTsKIAorY2xhc3MgRGV2VG9vbHNEYXNoQm9hcmQgOiBwdWJsaWMg
V2ViUGFnZU92ZXJsYXkgeworcHVibGljOgorICAgIERldlRvb2xzRGFzaEJvYXJkKFdlYlZpZXdJ
bXBsKiB3ZWJWaWV3LCBXZWJEZXZUb29sc0FnZW50SW1wbCogd2ViRGV2VG9vbHNBZ2VudEltcGwp
CisgICAgICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCisgICAgICAgICwgbV93ZWJEZXZUb29sc0Fn
ZW50KHdlYkRldlRvb2xzQWdlbnRJbXBsKQorICAgICAgICAsIG1fYnV0dG9uKHRoaXMpCisgICAg
eworICAgICAgICBtX3dlYlZpZXctPmFkZFBhZ2VPdmVybGF5KHRoaXMsIE92ZXJsYXlaT3JkZXJz
OjpkZXZUb29sc0Rhc2hCb2FyZCk7CisgICAgfQorCisgICAgfkRldlRvb2xzRGFzaEJvYXJkKCkK
KyAgICB7CisgICAgICAgIG1fd2ViVmlldy0+cmVtb3ZlUGFnZU92ZXJsYXkodGhpcyk7CisgICAg
fQorCisgICAgdm9pZCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQqIG1vdXNl
RXZlbnQpCisgICAgeworICAgICAgICBpZiAobV9idXR0b24uaXNDbGlja2VkQWZ0ZXJFdmVudCht
b3VzZUV2ZW50KSkKKyAgICAgICAgICAgIG1fd2ViRGV2VG9vbHNBZ2VudC0+cmVzdW1lRGVidWdn
ZXIoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IGludCBmb250U2l6ZSA9
IDMwOworICAgIHN0YXRpYyBjb25zdCBpbnQgYnV0dG9uV2lkdGggPSA0MDsKKyAgICBzdGF0aWMg
Y29uc3QgaW50IGJ1dHRvbkhlaWdodCA9IDQwOworICAgIC8vIE5lZ2F0aXZlIHZhdWxlIG1lYW5z
IGNvdW50aW5nIGZyb20gdGhlIHJpZ2h0L2JvdHRvbQorICAgIHN0YXRpYyBjb25zdCBpbnQgYnV0
dG9uWCA9IC0xOTA7CisgICAgc3RhdGljIGNvbnN0IGludCBidXR0b25ZID0gMjU7CisgICAgc3Rh
dGljIGNvbnN0IGludCB0ZXh0WCA9IC0xNDU7CisgICAgc3RhdGljIGNvbnN0IGludCB0ZXh0WSA9
IDUyOworICAgIHN0YXRpYyBjb25zdCBSR0JBMzIgdGV4dENvbG9yID0gMHhGRkZGMDAwMDsKKyAg
ICBzdGF0aWMgY29uc3QgUkdCQTMyIGJhY2tncm91bmRDb2xvciA9IDB4MUYwMDAwMDA7CisKKyAg
ICBjbGFzcyBCdXR0b24geworICAgIHB1YmxpYzoKKyAgICAgICAgQnV0dG9uKERldlRvb2xzRGFz
aEJvYXJkKiBkZXZUb29sc0Rhc2hCb2FyZCkKKyAgICAgICAgICAgIDogbV9kYXNoQm9hcmQoZGV2
VG9vbHNEYXNoQm9hcmQpCisgICAgICAgICAgICAsIG1fZHJhd1JlY3QoKQorICAgICAgICAgICAg
LCBtX2lzRm9jdXNlZChmYWxzZSkKKyAgICAgICAgICAgICwgbV9pc1ByZXNzZWQoZmFsc2UpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1fZHJhd1JlY3Quc2V0U2l6ZShJbnRTaXplKGJ1dHRvbldp
ZHRoLCBidXR0b25IZWlnaHQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaXNDbGlja2Vk
QWZ0ZXJFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50KiBtb3VzZUV2ZW50KQorICAgICAgICB7Cisg
ICAgICAgICAgICBib29sIGlzRm9jdXNlZCwgaXNQcmVzc2VkLCBpc0NsaWNrZWQgPSBmYWxzZTsK
KyAgICAgICAgICAgIGdldFN0YXRlKGlzRm9jdXNlZCwgaXNQcmVzc2VkKTsKKyAgICAgICAgICAg
IGlzRm9jdXNlZCA9IGRyYXdSZWN0Q29udGFpbnMobW91c2VFdmVudC0+eCwgbW91c2VFdmVudC0+
eSk7CisgICAgICAgICAgICBzd2l0Y2ggKG1vdXNlRXZlbnQtPnR5cGUpIHsKKyAgICAgICAgICAg
IGNhc2UgV2ViSW5wdXRFdmVudDo6TW91c2VVcDoKKyAgICAgICAgICAgICAgICBpZiAoaXNGb2N1
c2VkICYmIGlzUHJlc3NlZCkKKyAgICAgICAgICAgICAgICAgICAgaXNDbGlja2VkID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBpc1ByZXNzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6TW91c2VEb3duOgorICAgICAgICAg
ICAgICAgIGlmIChpc0ZvY3VzZWQpCisgICAgICAgICAgICAgICAgICAgIGlzUHJlc3NlZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdXBkYXRlU3RhdGUo
aXNGb2N1c2VkLCBpc1ByZXNzZWQpOworICAgICAgICAgICAgcmV0dXJuIGlzQ2xpY2tlZDsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRyPEltYWdlPiwg
YnV0dG9uSW1hZ2VEZWZhdWx0LCAoSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYXBs
YXllclBsYXlEaXNhYmxlZCIpKSk7CisgICAgICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJl
ZlB0cjxJbWFnZT4sIGJ1dHRvbkltYWdlLCAoSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJt
ZWRpYXBsYXllclBsYXkiKSkpOworICAgICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZWZQ
dHI8SW1hZ2U+LCBidXR0b25JbWFnZURvd24sIChJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2Uo
Im1lZGlhcGxheWVyUGxheURvd24iKSkpOworICAgICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChSZWZQdHI8SW1hZ2U+LCBidXR0b25JbWFnZUhvdmVyLCAoSW1hZ2U6OmxvYWRQbGF0Zm9ybVJl
c291cmNlKCJtZWRpYXBsYXllclBsYXlIb3ZlciIpKSk7CisgICAgICAgICAgICBJbWFnZSogaW1h
Z2UgPSAwOworICAgICAgICAgICAgaWYgKG1faXNGb2N1c2VkKSB7CisgICAgICAgICAgICAgICAg
aWYgKG1faXNQcmVzc2VkKQorICAgICAgICAgICAgICAgICAgICBpbWFnZSA9IGJ1dHRvbkltYWdl
RG93bi5nZXQoKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGlt
YWdlID0gYnV0dG9uSW1hZ2UuZ2V0KCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIGlmIChtX2lzUHJlc3NlZCkKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UgPSBidXR0
b25JbWFnZUhvdmVyLmdldCgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgaW1hZ2UgPSBidXR0b25JbWFnZURlZmF1bHQuZ2V0KCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0Is
IG1fZHJhd1JlY3QpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBnZXRTdGF0ZShib29sJiBp
c0ZvY3VzZWQsIGJvb2wmIGlzUHJlc3NlZCkKKyAgICAgICAgeworICAgICAgICAgICAgaXNGb2N1
c2VkID0gbV9pc0ZvY3VzZWQ7CisgICAgICAgICAgICBpc1ByZXNzZWQgPSBtX2lzUHJlc3NlZDsK
KyAgICAgICAgfQorCisgICAgICAgIHZvaWQgdXBkYXRlU3RhdGUoYm9vbCBpc0ZvY3VzZWQsIGJv
b2wgaXNQcmVzc2VkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9pc0ZvY3VzZWQgIT0g
aXNGb2N1c2VkIHx8IG1faXNQcmVzc2VkICE9IGlzUHJlc3NlZCkgeworICAgICAgICAgICAgICAg
IG1faXNGb2N1c2VkID0gaXNGb2N1c2VkOworICAgICAgICAgICAgICAgIG1faXNQcmVzc2VkID0g
aXNQcmVzc2VkOworICAgICAgICAgICAgICAgIG1fZGFzaEJvYXJkLT5tX3dlYlZpZXctPnBhZ2VP
dmVybGF5cygpLT51cGRhdGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgZHJhd1JlY3RDb250YWlucyhpbnQgeCwgaW50IHkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBtX2RyYXdSZWN0LmNvbnRhaW5zKHgsIHkpOworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBzZXRMb2NhdGlvbihjb25zdCBJbnRQb2ludCYgbG9jYXRpb24pCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1fZHJhd1JlY3Quc2V0TG9jYXRpb24obG9jYXRpb24pOworICAgICAgICB9
CisKKyAgICBwcml2YXRlOgorICAgICAgICBEZXZUb29sc0Rhc2hCb2FyZCogbV9kYXNoQm9hcmQ7
CisgICAgICAgIEludFJlY3QgbV9kcmF3UmVjdDsKKyAgICAgICAgYm9vbCBtX2lzRm9jdXNlZDsK
KyAgICAgICAgYm9vbCBtX2lzUHJlc3NlZDsKKyAgICB9OworCisgICAgSW50UG9pbnQgRGFzaEJv
YXJkSW50UG9pbnQoaW50IHgsIGludCB5LCBjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSkKKyAgICB7
CisgICAgICAgIGlmICh4IDwgMCkKKyAgICAgICAgICAgIHggKz0gdmlld1NpemUud2lkdGgoKTsK
KyAgICAgICAgaWYgKHkgPCAwKQorICAgICAgICAgICAgeSArPSB2aWV3U2l6ZS5oZWlnaHQoKTsK
KyAgICAgICAgcmV0dXJuIEludFBvaW50KHgsIHkpOworICAgIH0KKworICAgIHZvaWQgc2V0VXBG
b250RGVzY3JpcHRpb24oRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFdlYkNvcmU6
OlNldHRpbmdzKiBzZXR0aW5ncykKKyAgICB7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRS
ZW5kZXJpbmdNb2RlKHNldHRpbmdzLT5mb250UmVuZGVyaW5nTW9kZSgpKTsKKyAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShmb250U2l6ZSk7CisgICAgICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgZml4ZWRGb250RmFtaWx5ID0gc2V0dGluZ3MtPmZpeGVkRm9udEZhbWlseSgp
OworICAgICAgICBpZiAoIWZpeGVkRm9udEZhbWlseS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6TW9ub3Nw
YWNlRmFtaWx5KTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNl
dEZhbWlseShmaXhlZEZvbnRGYW1pbHkpOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZp
cnN0RmFtaWx5KCkuYXBwZW5kRmFtaWx5KDApOworICAgICAgICB9CisgICAgfQorCisgICAgdm9p
ZCBkcmF3VGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFN0cmluZyB0ZXh0LCBGbG9hdFBv
aW50IHBvaW50KQorICAgIHsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gbV93ZWJWaWV3LT5wYWdl
KCkgPyBtX3dlYlZpZXctPnBhZ2UoKS0+bWFpbkZyYW1lKCkgOiAwOworICAgICAgICBpZiAoIWZy
YW1lKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBm
cmFtZS0+c2V0dGluZ3MoKTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGRlc2M7CisgICAgICAg
IHNldFVwRm9udERlc2NyaXB0aW9uKGRlc2MsIHNldHRpbmdzKTsKKyAgICAgICAgRm9udCBmb250
ID0gRm9udChkZXNjLCAwLCAwKTsKKyAgICAgICAgZm9udC51cGRhdGUoMCk7CisgICAgICAgIGNv
bnRleHQuZHJhd1RleHQoZm9udCwgdGV4dCwgcG9pbnQpOworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBwYWludFBhZ2VPdmVybGF5KFdlYkNhbnZhcyogY2FudmFzKQorICAgIHsKKyAgICAgICAg
R3JhcGhpY3NDb250ZXh0QnVpbGRlciBidWlsZGVyKGNhbnZhcyk7CisgICAgICAgIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCA9IGJ1aWxkZXIuY29udGV4dCgpOworCisgICAgICAgIGNvbnRleHQu
c2V0RmlsbENvbG9yKGJhY2tncm91bmRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAg
ICAgIGNvbnRleHQuZHJhd1JlY3QoSW50UmVjdChJbnRQb2ludCgpLCBtX3dlYlZpZXctPnNpemUo
KSkpOworCisgICAgICAgIG1fYnV0dG9uLnNldExvY2F0aW9uKERhc2hCb2FyZEludFBvaW50KGJ1
dHRvblgsIGJ1dHRvblksIG1fd2ViVmlldy0+c2l6ZSgpKSk7CisgICAgICAgIG1fYnV0dG9uLmRy
YXcoJmNvbnRleHQpOworCisgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRleHRDb2xvciwg
Q29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgIGRyYXdUZXh0KGNvbnRleHQsICJQYXVzZWQi
LCBEYXNoQm9hcmRJbnRQb2ludCh0ZXh0WCwgdGV4dFksIG1fd2ViVmlldy0+c2l6ZSgpKSk7Cisg
ICAgfQorCisgICAgV2ViVmlld0ltcGwqIG1fd2ViVmlldzsKKyAgICBXZWJEZXZUb29sc0FnZW50
SW1wbCogbV93ZWJEZXZUb29sc0FnZW50OworICAgIGludCBtX2J1dHRvblN0YXRlOworICAgIEJ1
dHRvbiBtX2J1dHRvbjsKK307CisKIAogV2ViRGV2VG9vbHNBZ2VudEltcGw6OldlYkRldlRvb2xz
QWdlbnRJbXBsKAogICAgIFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCwKQEAgLTQ0NCw2ICs2MjEs
MjQgQEAgdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6d2ViVmlld1Jlc2l6ZWQoKQogICAgICAg
ICBtX21ldHJpY3NTdXBwb3J0LT53ZWJWaWV3UmVzaXplZCgpOwogfQogCit2b2lkIFdlYkRldlRv
b2xzQWdlbnRJbXBsOjpoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQqIGlucHV0
RXZlbnQpCit7CisgICAgaWYgKG1fZGV2VG9vbHNEYXNoQm9hcmQgJiYgV2ViSW5wdXRFdmVudDo6
aXNNb3VzZUV2ZW50VHlwZShpbnB1dEV2ZW50LT50eXBlKSkKKyAgICAgICAgbV9kZXZUb29sc0Rh
c2hCb2FyZC0+aGFuZGxlSW5wdXRFdmVudChzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZUV2ZW50
Kj4oaW5wdXRFdmVudCkpOworfQorCit2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpzaG93UGF1
c2VXYXJuaW5nKCkKK3sKKyAgICBpZiAoIW1fZGV2VG9vbHNEYXNoQm9hcmQpCisgICAgICAgIG1f
ZGV2VG9vbHNEYXNoQm9hcmQgPSBhZG9wdFB0cihuZXcgRGV2VG9vbHNEYXNoQm9hcmQobV93ZWJW
aWV3SW1wbCwgdGhpcykpOworfQorCit2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpoaWRlUGF1
c2VXYXJuaW5nKCkKK3sKKyAgICBpZiAobV9kZXZUb29sc0Rhc2hCb2FyZCkKKyAgICAgICAgbV9k
ZXZUb29sc0Rhc2hCb2FyZC5jbGVhcigpOworfQorCiB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBs
OjpvdmVycmlkZURldmljZU1ldHJpY3MoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBmbG9hdCBmb250
U2NhbGVGYWN0b3IsIGJvb2wgZml0V2luZG93KQogewogICAgIGlmICghd2lkdGggJiYgIWhlaWdo
dCkgewpAQCAtNjE0LDQgKzgwOSwxMCBAQCBXZWJTdHJpbmcgV2ViRGV2VG9vbHNBZ2VudDo6ZGlz
Y29ubmVjdEV2ZW50QXNUZXh0KCkKICAgICByZXR1cm4gY2hhbm5lbC5tX21lc3NhZ2U7CiB9CiAK
K3ZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OnJlc3VtZURlYnVnZ2VyKCkKK3sKKyAgICBpZiAo
SW5zcGVjdG9yQ29udHJvbGxlciogY29udHJvbGxlciA9IGluc3BlY3RvckNvbnRyb2xsZXIoKSkK
KyAgICAgICAgY29udHJvbGxlci0+cmVzdW1lKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2Vu
dEltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBs
LmgKaW5kZXggNmI1MjQ3NjE3MDE4NjVhMzBlNzQyODYwM2VjMWU4ZDQyYzUxNTRhYi4uNTRiNjRi
OGQxOTdhMTNjZjUyNGUwYzg3MGY4Y2NiODE3ZmU3YjhhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oCkBAIC01Miw2ICs1Miw3IEBA
IGNsYXNzIE5vZGU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBEZXZUb29sc0Rhc2hC
b2FyZDsKIGNsYXNzIERldmljZU1ldHJpY3NTdXBwb3J0OwogY2xhc3MgV2ViRGV2VG9vbHNBZ2Vu
dENsaWVudDsKIGNsYXNzIFdlYkZyYW1lOwpAQCAtNzUsNiArNzYsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIG1haW5GcmFtZVZpZXdDcmVhdGVkKFdlYkZyYW1lSW1wbCopOwogICAgIHZp
cnR1YWwgYm9vbCBtZXRyaWNzT3ZlcnJpZGRlbigpOwogICAgIHZpcnR1YWwgdm9pZCB3ZWJWaWV3
UmVzaXplZCgpOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklu
cHV0RXZlbnQqKTsKIAogICAgIC8vIFdlYkRldlRvb2xzQWdlbnQgaW1wbGVtZW50YXRpb24uCiAg
ICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwpAQCAtMTAxLDYgKzEwMyw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXJCcm93c2VyQ2FjaGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJCcm93c2VyQ29va2llcygpOwogCisgICAgdmlydHVhbCB2b2lkIHNob3dQYXVzZVdhcm5pbmco
KTsKKyAgICB2aXJ0dWFsIHZvaWQgaGlkZVBhdXNlV2FybmluZygpOwogICAgIHZpcnR1YWwgdm9p
ZCBvdmVycmlkZURldmljZU1ldHJpY3MoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBmbG9hdCBmb250
U2NhbGVGYWN0b3IsIGJvb2wgZml0V2luZG93KTsKICAgICB2aXJ0dWFsIHZvaWQgYXV0b1pvb21Q
YWdlVG9GaXRXaWR0aCgpOwogCkBAIC0xMDksNiArMTEzLDggQEAgcHVibGljOgogICAgIC8vIFdl
YlBhZ2VPdmVybGF5CiAgICAgdmlydHVhbCB2b2lkIHBhaW50UGFnZU92ZXJsYXkoV2ViQ2FudmFz
Kik7CiAKKyAgICB2b2lkIHJlc3VtZURlYnVnZ2VyKCk7CisKIHByaXZhdGU6CiAgICAgV2ViQ29y
ZTo6SW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlcigpOwogICAgIFdlYkNv
cmU6OkZyYW1lKiBtYWluRnJhbWUoKTsKQEAgLTExOCw2ICsxMjQsNyBAQCBwcml2YXRlOgogICAg
IFdlYlZpZXdJbXBsKiBtX3dlYlZpZXdJbXBsOwogICAgIGJvb2wgbV9hdHRhY2hlZDsKICAgICBP
d25QdHI8RGV2aWNlTWV0cmljc1N1cHBvcnQ+IG1fbWV0cmljc1N1cHBvcnQ7CisgICAgT3duUHRy
PERldlRvb2xzRGFzaEJvYXJkPiBtX2RldlRvb2xzRGFzaEJvYXJkOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJE
ZXZUb29sc0FnZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2
VG9vbHNBZ2VudFByaXZhdGUuaAppbmRleCAwNmY1ZjE4MTVhOTliMzAwNjI5ODJhYjcwNjg0ZjAx
YTNhMDE4OWM3Li40MzdlYmVjMDgyNjU4MDMxYjYyOWQ2ZDU2ZmFkODIyOGJhZmU3MmM0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50UHJpdmF0
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRQcml2
YXRlLmgKQEAgLTM1LDYgKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJG
cmFtZUltcGw7CitjbGFzcyBXZWJJbnB1dEV2ZW50Owogc3RydWN0IFdlYlNpemU7CiAKIGNsYXNz
IFdlYkRldlRvb2xzQWdlbnRQcml2YXRlIDogcHVibGljIFdlYkRldlRvb2xzQWdlbnQgewpAQCAt
NTUsNiArNTYsOCBAQCBwdWJsaWM6CiAKICAgICAvLyBXZWJWaWV3SW1wbCBoYXMgYmVlbiByZXNp
emVkLgogICAgIHZpcnR1YWwgdm9pZCB3ZWJWaWV3UmVzaXplZCgpID0gMDsKKworICAgIHZpcnR1
YWwgdm9pZCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQqKSA9IDA7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmNwcAppbmRleCBkZDMzMTVmZjkwYTBkNGIzYzM1NzNhNzVlOWQzYTQwMTYxZjAxODIx
Li5mZjM4MWUzMjEyYWRiNjdmY2U4N2UzZDc2YjAwYjVhMTJhMjZiZDFmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0xNzU4LDggKzE3NTgsMTEgQEAg
Ym9vbCBXZWJWaWV3SW1wbDo6aGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50JiBp
bnB1dEV2ZW50KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIFJlcG9ydCB0aGUgZXZl
bnQgdG8gYmUgTk9UIHByb2Nlc3NlZCBieSBXZWJLaXQsIHNvIHRoYXQgdGhlIGJyb3dzZXIgY2Fu
IGhhbmRsZSBpdCBhcHByb3ByaWF0ZWx5LgotICAgIGlmIChtX2lnbm9yZUlucHV0RXZlbnRzKQor
ICAgIGlmIChtX2lnbm9yZUlucHV0RXZlbnRzKSB7CisgICAgICAgIGlmIChkZXZUb29sc0FnZW50
UHJpdmF0ZSgpKQorICAgICAgICAgICAgZGV2VG9vbHNBZ2VudFByaXZhdGUoKS0+aGFuZGxlSW5w
dXRFdmVudCgmaW5wdXRFdmVudCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAg
ICBUZW1wb3JhcnlDaGFuZ2U8Y29uc3QgV2ViSW5wdXRFdmVudCo+IGN1cnJlbnRFdmVudENoYW5n
ZShtX2N1cnJlbnRJbnB1dEV2ZW50LCAmaW5wdXRFdmVudCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152280</attachid>
            <date>2012-07-13 09:48:20 -0700</date>
            <delta_ts>2012-07-16 03:11:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90880-20120713204819.patch</filename>
            <type>text/plain</type>
            <size>19712</size>
            <attacher name="Sergey Rogulenko">rogulenko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNTU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjQzOTVhZWI5MjA3ZmNh
MjI5NmNiMjRkMWQ2NjI3N2Y1MTllYjdkYS4uYzNmMDBkMDQ3OWYyMTZmYTZjMTU0NDI1ZTk5ZTI2
ZjM3ZmNkNzBmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDEyLTA3LTEzICBTZXJn
ZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogYWRkaW5nIHBhdXNlIGljb24gZm9yIEphdmFTY3JpcHQgZGVidWdnaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg4MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBh
IGZlYXR1cmUgb2YgZGFya2VuaW5nIG1haW4gZnJhbWUgdmlldyBhbmQgZHJhd2luZyBhIHRleHQg
Ym94IHdpdGggYSB3YXJuaW5nIG1lc3NhZ2UgY2VudGVyZWQgb24gdGhlIHRvcCBvZiBtYWluIGZy
YW1lIHZpZXcuCisgICAgICAgIEhlcmUgd2UgdXNlIHRoZSBzdHlsZSBhbmQgcGx1bWJpbmcgb2Yg
RE9NTm9kZUhpZ2hsaWdoZXIuIEluc3BlY3RvckRhc2hCb2FyZCBjbGFzcyBpcyBpbnRlZ3JhdGVk
IHdpdGggSW5zcGVjdG9yRE9NQWdlbnQgdG8gYXZvaWQgc2NyZWVuIGRhcmtlbmluZworICAgICAg
ICBhbmQgbm9kZSBoaWdobGlnaHRpbmcgYXQgdGhlIHNhbWUgdGltZS4KKworICAgICAgICAqIGlu
c3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRGFzaEJvYXJkOjpJbnNwZWN0b3JEYXNoQm9hcmQpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEYXNoQm9hcmQ6OmRyYXcpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yRGFzaEJvYXJkOjp1cGRhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9E
T01Ob2RlSGlnaGxpZ2h0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW5zcGVj
dG9yRGFzaEJvYXJkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRhc2hCb2FyZDo6Y3Jl
YXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6Okluc3BlY3RvckRPTUFnZW50KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpzZXRTZWFyY2hpbmdGb3JOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpoaWRlSGlnaGxpZ2h0KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpkcmF3SGlnaGxpZ2h0KToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
SW5zcGVjdG9yRE9NQWdlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Oklu
c3BlY3RvckRlYnVnZ2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpkaWRQYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpkaWRDb250aW51ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzaG93UGF1c2VX
YXJuaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmhpZGVQ
YXVzZVdhcm5pbmcpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24uaDoKKyAgICAgICAgKEluc3BlY3Rvckluc3RydW1lbnRhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmlzRGVidWdnZXJQYXVzZWQpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgICogaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50OjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZURlYnVnZ2VyQWdlbnQ6OlBhZ2VEZWJ1Z2dlckFnZW50KToKKyAgICAgICAg
KiBpbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKFBhZ2VEZWJ1Z2dlckFn
ZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvV29ya2VyRGVidWdnZXJBZ2VudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJEZWJ1Z2dlckFnZW50OjpXb3JrZXJEZWJ1Z2dlckFnZW50KToK
KwogMjAxMi0wNy0xMyAgQW5kcmVpIEJ1Y3VyICA8YWJ1Y3VyQGFkb2JlLmNvbT4KIAogICAgICAg
ICBbQ1NTIFJlZ2lvbnNdIEZpeCB0aGUgbGlmZWN5Y2xlIGZvciB0aGUgZmxvdyBvYmplY3RzIGFu
ZCB0aGVpciByZW5kZXJlcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9E
T01Ob2RlSGlnaGxpZ2h0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVI
aWdobGlnaHRlci5jcHAKaW5kZXggZTRjNzEwMGQ2MWM1MjA4M2YzODI3MWYyYTcyNzU0NzU0Njhl
ZGIyYy4uMzk3YTI4ZGYzM2UyYmNkYjgzMjVhNWJmZjU3NmIwNWI4OGVlYWE4NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAKQEAgLTM5LDYg
KzM5LDggQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ2xp
ZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yUGFnZUFnZW50LmgiCiAjaW5jbHVkZSAiTm9kZS5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSYW5nZS5oIgpAQCAtNDg1LDYgKzQ4Nyw1
MCBAQCBzdGF0aWMgdm9pZCBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgRG9jdW1lbnQqIGRvY3VtZW50LAogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UK
IAorSW5zcGVjdG9yRGFzaEJvYXJkOjpJbnNwZWN0b3JEYXNoQm9hcmQoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQsIEluc3Bl
Y3RvclBhZ2VBZ2VudCogcGFnZUFnZW50KQorICAgIDogbV9pbnN0cnVtZW50aW5nQWdlbnRzKGlu
c3RydW1lbnRpbmdBZ2VudHMpCisgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX3BhZ2VB
Z2VudChwYWdlQWdlbnQpIHsgfQorCit2b2lkIEluc3BlY3RvckRhc2hCb2FyZDo6ZHJhdyhHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwg
YmFja2dyb3VuZENvbG9yLCAoMCwgMCwgMCwgMzEpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KENvbG9yLCB0ZXh0QmFja2dyb3VuZENvbG9yLCAoMjU1LCAyNTUsIDE5NCkpOworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoQ29sb3IsIGJvcmRlckNvbG9yLCAoMTI4LCAxMjgsIDEyOCkpOworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoaW50LCBmb250SGVpZ2h0LCAoMjQpKTsKKworICAgIEZyYW1l
KiBmcmFtZSA9IG1fcGFnZUFnZW50LT5tYWluRnJhbWUoKTsgICAgCisgICAgU2V0dGluZ3MqIHNl
dHRpbmdzID0gZnJhbWUtPnNldHRpbmdzKCk7CisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IGZy
YW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpOworCisgICAgY29udGV4dC5zZXRGaWxs
Q29sb3IoYmFja2dyb3VuZENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0
LmRyYXdSZWN0KHZpc2libGVSZWN0KTsKKyAgICAKKyAgICBGb250RGVzY3JpcHRpb24gZGVzYzsK
KyAgICBzZXRVcEZvbnREZXNjcmlwdGlvbihkZXNjLCBzZXR0aW5ncyk7CisgICAgZGVzYy5zZXRD
b21wdXRlZFNpemUoZm9udEhlaWdodCk7CisgICAgRm9udCBmb250ID0gRm9udChkZXNjLCAwLCAw
KTsKKyAgICBmb250LnVwZGF0ZSgwKTsKKworICAgIFN0cmluZyB0ZXh0ID0gIlRoZSBkZWJ1Z2dl
ciBpcyBwYXVzZWQuIjsKKyAgICBUZXh0UnVuIHRleHRSdW4odGV4dCk7CisgICAgSW50UmVjdCB0
aXRsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQodGV4
dFJ1biwgSW50UG9pbnQoKSwgZm9udEhlaWdodCkpOworICAgIHRpdGxlUmVjdC5pbmZsYXRlKHJl
Y3RJbmZsYXRlUHgpOworICAgIHRpdGxlUmVjdC5zZXRMb2NhdGlvbihJbnRQb2ludCh2aXNpYmxl
UmVjdC53aWR0aCgpIC8gMiAtIHRpdGxlUmVjdC53aWR0aCgpIC8gMiwgMCkpOworICAgIAorICAg
IGNvbnRleHQuc2V0RmlsbENvbG9yKHRleHRCYWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2VEZXZp
Y2VSR0IpOworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoYm9yZGVyQ29sb3IsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJhd1JlY3QodGl0bGVSZWN0KTsKKyAgICBjb250
ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAg
IGNvbnRleHQuZHJhd1RleHQoZm9udCwgdGV4dFJ1biwgSW50UG9pbnQodGl0bGVSZWN0LngoKSAr
IHJlY3RJbmZsYXRlUHgsIHRpdGxlUmVjdC55KCkgKyBmb250SGVpZ2h0KSk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yRGFzaEJvYXJkOjp1cGRhdGUoKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAg
ICAgbV9jbGllbnQtPmhpZ2hsaWdodCgpOworfQorCiBuYW1lc3BhY2UgRE9NTm9kZUhpZ2hsaWdo
dGVyIHsKIAogdm9pZCBkcmF3SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgRG9j
dW1lbnQqIGRvY3VtZW50LCBIaWdobGlnaHREYXRhKiBoaWdobGlnaHREYXRhKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5oCmluZGV4IGY3YjZmMDBmNGZm
ZTAyNTkxMzU1MjU0ZGZlMTkzZDAzMDYyY2UzZDkuLjg3ZDk5ZDIzNTJjY2JkOWQ2NDZmOGQyNDY4
ZTIzYTE3MzYzMzdjMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01O
b2RlSGlnaGxpZ2h0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhp
Z2hsaWdodGVyLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgog
CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNDMs
NiArNDQsMTIgQEAgY2xhc3MgQ29sb3I7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEZyYW1lVmll
dzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEluc3BlY3RvckNsaWVudDsKK2NsYXNz
IEluc3BlY3RvckRhc2hCb2FyZDsKK2NsYXNzIEluc3BlY3RvclBhZ2VBZ2VudDsKK2NsYXNzIElu
c3RydW1lbnRpbmdBZ2VudHM7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgSW50U2l6ZTsKIGNsYXNz
IE5vZGU7CiAKIHN0cnVjdCBIaWdobGlnaHREYXRhIHsKQEAgLTc1LDYgKzgyLDI2IEBAIHN0cnVj
dCBIaWdobGlnaHQgewogICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwogfTsKIAorY2xhc3Mg
SW5zcGVjdG9yRGFzaEJvYXJkIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbnNw
ZWN0b3JEYXNoQm9hcmQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCwgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdl
QWdlbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEluc3BlY3RvckRhc2hC
b2FyZChpbnN0cnVtZW50aW5nQWdlbnRzLCBjbGllbnQsIHBhZ2VBZ2VudCkpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0Jik7CisgICAgdm9pZCB1cGRhdGUoKTsK
KworcHJpdmF0ZToKKyAgICBJbnNwZWN0b3JEYXNoQm9hcmQoSW5zdHJ1bWVudGluZ0FnZW50cyos
IEluc3BlY3RvckNsaWVudCosIEluc3BlY3RvclBhZ2VBZ2VudCopOworCisgICAgdm9pZCBkcmF3
VGV4dChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBTdHJpbmcmLCBpbnQgdGV4dFNpemUsIGNvbnN0
IEludFBvaW50Jik7CisKKyAgICBJbnN0cnVtZW50aW5nQWdlbnRzKiBtX2luc3RydW1lbnRpbmdB
Z2VudHM7CisgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKKyAgICBJbnNwZWN0b3JQYWdl
QWdlbnQqIG1fcGFnZUFnZW50OworfTsKKwogbmFtZXNwYWNlIERPTU5vZGVIaWdobGlnaHRlciB7
CiAKIHZvaWQgZHJhd0hpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmLCBEb2N1bWVudCosIEhpZ2hs
aWdodERhdGEqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmNwcAppbmRleCAwOTVlMWNjNTFiMzU0YThmOGUwODE0NmE3OWVmNzA4ZGI3Y2Q0OWNl
Li5kZjIzMDAwMDUyZDA5OTZjM2JhNDM0NmI4NWY3ZmRlYzYxZDRhODE4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0xMzAsNyAr
MTMwLDcgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBw
YWdlLCBJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckMKICAgICBtX2FnZW50cy5hcHBlbmQoY29u
c29sZUFnZW50UHRyLnJlbGVhc2UoKSk7CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKLSAgICBPd25QdHI8SW5zcGVjdG9yRGVidWdnZXJBZ2VudD4gZGVidWdnZXJBZ2VudFB0cihQ
YWdlRGVidWdnZXJBZ2VudDo6Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgbV9z
dGF0ZS5nZXQoKSwgcGFnZSwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuZ2V0KCkpKTsKKyAgICBP
d25QdHI8SW5zcGVjdG9yRGVidWdnZXJBZ2VudD4gZGVidWdnZXJBZ2VudFB0cihQYWdlRGVidWdn
ZXJBZ2VudDo6Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgbV9zdGF0ZS5nZXQo
KSwgcGFnZSwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuZ2V0KCksIGluc3BlY3RvckNsaWVudCkp
OwogICAgIG1fZGVidWdnZXJBZ2VudCA9IGRlYnVnZ2VyQWdlbnRQdHIuZ2V0KCk7CiAgICAgbV9h
Z2VudHMuYXBwZW5kKGRlYnVnZ2VyQWdlbnRQdHIucmVsZWFzZSgpKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggOTA3OTU4OWU1MWNl
OGYwOGU1MGUyMDZlNDlhMTMyNmJlOTVjMzAxMi4uYzg5YmU2YjUxNDlkMTVlNTQxY2FiYTJiMzlh
MzA2Nzg3NzI2YzE4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwCkBAIC0yMDMsOCArMjAzLDEwIEBAIEluc3BlY3RvckRPTUFnZW50OjpJbnNw
ZWN0b3JET01BZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJ
CiAgICAgLCBtX2RvbUxpc3RlbmVyKDApCiAgICAgLCBtX2xhc3ROb2RlSWQoMSkKICAgICAsIG1f
c2VhcmNoaW5nRm9yTm9kZShmYWxzZSkKKyAgICAsIG1fZGFzaEJvYXJkKEluc3BlY3RvckRhc2hC
b2FyZDo6Y3JlYXRlKGluc3RydW1lbnRpbmdBZ2VudHMsIGNsaWVudCwgcGFnZUFnZW50KSkKICAg
ICAsIG1fc3VwcHJlc3NBdHRyaWJ1dGVNb2RpZmllZEV2ZW50KGZhbHNlKQogeworICAgIGhpZ2hs
aWdodCgpOwogfQogCiBJbnNwZWN0b3JET01BZ2VudDo6fkluc3BlY3RvckRPTUFnZW50KCkKQEAg
LTk5OSw4ICsxMDAxLDEwIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFNlYXJjaGluZ0Zv
ck5vZGUoYm9vbCBlbmFibGVkLCBJbnNwZWN0b3JPYmplY3QqIGhpZ2hsCiAgICAgaWYgKG1fc2Vh
cmNoaW5nRm9yTm9kZSA9PSBlbmFibGVkKQogICAgICAgICByZXR1cm47CiAgICAgbV9zZWFyY2hp
bmdGb3JOb2RlID0gZW5hYmxlZDsKLSAgICBpZiAoZW5hYmxlZCkKKyAgICBpZiAoZW5hYmxlZCkg
ewogICAgICAgICBzZXRIaWdobGlnaHREYXRhRnJvbUNvbmZpZyhoaWdobGlnaHRDb25maWcpOwor
ICAgICAgICBoaWdobGlnaHQoKTsKKyAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIEVycm9yU3Ry
aW5nIGVycm9yOwogICAgICAgICBoaWRlSGlnaGxpZ2h0KCZlcnJvcik7CkBAIC0xMDg0LDcgKzEw
ODgsMTAgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlkZUhpZ2hsaWdodChFcnJvclN0cmlu
ZyopCiAgICAgICAgIG1faGlnaGxpZ2h0RGF0YS0+bm9kZS5jbGVhcigpOwogICAgICAgICBtX2hp
Z2hsaWdodERhdGEtPnJlY3QuY2xlYXIoKTsKICAgICB9Ci0gICAgbV9jbGllbnQtPmhpZGVIaWdo
bGlnaHQoKTsKKyAgICBpZiAoSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppc0RlYnVnZ2VyUGF1
c2VkKG1faW5zdHJ1bWVudGluZ0FnZW50cykpCisgICAgICAgIG1fY2xpZW50LT5oaWdobGlnaHQo
KTsKKyAgICBlbHNlCisgICAgICAgIG1fY2xpZW50LT5oaWRlSGlnaGxpZ2h0KCk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6Om1vdmVUbyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGlu
dCBub2RlSWQsIGludCB0YXJnZXRFbGVtZW50SWQsIGNvbnN0IGludCogY29uc3QgYW5jaG9yTm9k
ZUlkLCBpbnQqIG5ld05vZGVJZCkKQEAgLTE2MDEsMTAgKzE2MDgsMTEgQEAgUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbnNwZWN0b3JET01BZ2VudDo6cmVz
b2x2ZU5vZGUoTm8KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZHJhd0hpZ2hsaWdodChHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2hpZ2hsaWdodERhdGEp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIERPTU5vZGVIaWdobGlnaHRlcjo6ZHJhd0hpZ2hsaWdo
dChjb250ZXh0LCBtX2hpZ2hsaWdodERhdGEtPm5vZGUgPyBtX2hpZ2hsaWdodERhdGEtPm5vZGUt
PmRvY3VtZW50KCkgOiBtX2RvY3VtZW50LmdldCgpLCBtX2hpZ2hsaWdodERhdGEuZ2V0KCkpOwor
ICAgIGlmIChtX2hpZ2hsaWdodERhdGEgJiYgKG1faGlnaGxpZ2h0RGF0YS0+bm9kZSB8fCBtX2hp
Z2hsaWdodERhdGEtPnJlY3QpKQorICAgICAgICBET01Ob2RlSGlnaGxpZ2h0ZXI6OmRyYXdIaWdo
bGlnaHQoY29udGV4dCwgbV9oaWdobGlnaHREYXRhLT5ub2RlID8gbV9oaWdobGlnaHREYXRhLT5u
b2RlLT5kb2N1bWVudCgpIDogbV9kb2N1bWVudC5nZXQoKSwgbV9oaWdobGlnaHREYXRhLmdldCgp
KTsKKyAgICBlbHNlIAorICAgIGlmICghbV9zZWFyY2hpbmdGb3JOb2RlICYmIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6aXNEZWJ1Z2dlclBhdXNlZChtX2luc3RydW1lbnRpbmdBZ2VudHMpKQor
ICAgICAgICBtX2Rhc2hCb2FyZC0+ZHJhdyhjb250ZXh0KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6Z2V0SGlnaGxpZ2h0KEhpZ2hsaWdodCogaGlnaGxpZ2h0KSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCBiMDVhYjU3MGQ5
ZmQxYjA0ODcwNmEzOTNhMjQ2NjU5N2I0OTYzOWJmLi5iYTFiZTQ4ZWZjMjU5N2EzYmY5MTZiYmQx
MGYzMmQzOTQ3YjRmMjAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuaApAQCAtNTcsNiArNTcsNyBAQCBjbGFzcyBFbGVtZW50OwogY2xhc3MgRXZlbnQ7
CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBJbnNwZWN0b3JDbGllbnQ7CitjbGFzcyBJ
bnNwZWN0b3JEYXNoQm9hcmQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKIGNsYXNzIEluc3Bl
Y3Rvckhpc3Rvcnk7CiBjbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7CkBAIC0yNjAsNiArMjYxLDcg
QEAgcHJpdmF0ZToKICAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlVG9Gb2N1czsKICAgICBib29sIG1f
c2VhcmNoaW5nRm9yTm9kZTsKICAgICBPd25QdHI8SW5zcGVjdG9ySGlzdG9yeT4gbV9oaXN0b3J5
OworICAgIE93blB0cjxJbnNwZWN0b3JEYXNoQm9hcmQ+IG1fZGFzaEJvYXJkOwogICAgIE93blB0
cjxET01FZGl0b3I+IG1fZG9tRWRpdG9yOwogICAgIGJvb2wgbV9zdXBwcmVzc0F0dHJpYnV0ZU1v
ZGlmaWVkRXZlbnQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDExODA3YTNmOWU4Nzk4NDBkZWE2MDNiMzY2M2Uy
MDlhZmNlZDcyYzguLmE2Yjg0ZWYzNjM0MWVhMzI1YzU1ODg2MjE0ZTRkODcxM2ExMDRiNGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dC5jcHAKQEAgLTYwLDkgKzYwLDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyIHBhdXNlT25FeGNlcHRp
b25zU3RhdGVbXSA9ICJwYXVzZU9uRXhjZXB0aW9uc1N0YXRlIjsKIAogY29uc3QgY2hhciogSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6YmFja3RyYWNlT2JqZWN0R3JvdXAgPSAiYmFja3RyYWNlLW9i
amVjdC1ncm91cCI7CiAKLUluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9y
U3RhdGUqIGluc3BlY3RvclN0YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2Ny
aXB0TWFuYWdlcikKK0luc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3RvckRlYnVnZ2VyQWdl
bnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yU3Rh
dGUqIGluc3BlY3RvclN0YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0
TWFuYWdlciwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCiAgICAgOiBJbnNwZWN0b3JCYXNlQWdl
bnQ8SW5zcGVjdG9yRGVidWdnZXJBZ2VudD4oIkRlYnVnZ2VyIiwgaW5zdHJ1bWVudGluZ0FnZW50
cywgaW5zcGVjdG9yU3RhdGUpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlcihpbmplY3Rl
ZFNjcmlwdE1hbmFnZXIpCisgICAgLCBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX2Zyb250ZW5k
KDApCiAgICAgLCBtX3BhdXNlZFNjcmlwdFN0YXRlKDApCiAgICAgLCBtX2phdmFTY3JpcHRQYXVz
ZVNjaGVkdWxlZChmYWxzZSkKQEAgLTEwMyw2ICsxMDQsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmRpc2FibGUoKQogCiAgICAgaWYgKG1fbGlzdGVuZXIpCiAgICAgICAgIG1fbGlz
dGVuZXItPmRlYnVnZ2VyV2FzRGlzYWJsZWQoKTsKKyAgICBoaWRlUGF1c2VXYXJuaW5nKCk7CiB9
CiAKIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZW5hYmxlZCgpCkBAIC02NTcsNiArNjU5
LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZShTY3JpcHRTdGF0ZSog
c2NyaXB0U3RhdGUsIGNvbnN0IFNjcmlwdFZhbHUKICAgICAgICAgfQogICAgIH0KIAorICAgIHNo
b3dQYXVzZVdhcm5pbmcoKTsKICAgICBtX2Zyb250ZW5kLT5wYXVzZWQoY3VycmVudENhbGxGcmFt
ZXMoKSwgbV9icmVha1JlYXNvbiwgbV9icmVha0F1eERhdGEpOwogICAgIG1famF2YVNjcmlwdFBh
dXNlU2NoZWR1bGVkID0gZmFsc2U7CiAKQEAgLTY3MSw2ICs2NzQsNyBAQCB2b2lkIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OmRpZENvbnRpbnVlKCkKICAgICBtX3BhdXNlZFNjcmlwdFN0YXRlID0g
MDsKICAgICBtX2N1cnJlbnRDYWxsU3RhY2sgPSBTY3JpcHRWYWx1ZSgpOwogICAgIGNsZWFyQnJl
YWtEZXRhaWxzKCk7CisgICAgaGlkZVBhdXNlV2FybmluZygpOwogICAgIG1fZnJvbnRlbmQtPnJl
c3VtZWQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50LmgKaW5kZXggMDljOTdkMTk1M2U0YjliMDAxNjFmODc0ZjQ1MzFmYmRlYzdk
YjZjZC4uMjhiNGRiMTIyZjg3ZmYzMjMzYmQ2NGM5ZDZmOTJlOWI4ZjNiOGRiYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCkBAIC0z
Myw2ICszMyw3IEBACiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIEVOQUJMRShJ
TlNQRUNUT1IpCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHQuaCIKICNpbmNsdWRlICJJbnNwZWN0
b3JCYXNlQWdlbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JGcm9udGVuZC5oIgogI2luY2x1ZGUgIlNjcmlwdEJyZWFrcG9pbnQuaCIKICNpbmNs
dWRlICJTY3JpcHREZWJ1Z0xpc3RlbmVyLmgiCkBAIC00Nyw2ICs0OCw3IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKK2NsYXNzIEluc3BlY3Rv
ckNsaWVudDsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kOwogY2xhc3MgSW5zcGVjdG9yQXJyYXk7
CiBjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CkBAIC0xMjQsNyArMTI2LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgU2NyaXB0RGVidWdTZXJ2ZXImIHNjcmlwdERlYnVnU2VydmVyKCkgPSAwOwogCiBw
cm90ZWN0ZWQ6Ci0gICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRz
KiwgSW5zcGVjdG9yU3RhdGUqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKKyAgICBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0ZSosIElu
amVjdGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3RvckNsaWVudCopOwogCiAgICAgdmlydHVhbCB2
b2lkIHN0YXJ0TGlzdGVuaW5nU2NyaXB0RGVidWdTZXJ2ZXIoKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIHN0b3BMaXN0ZW5pbmdTY3JpcHREZWJ1Z1NlcnZlcigpID0gMDsKQEAgLTE1NCwxMCArMTU2
LDE0IEBAIHByaXZhdGU6CiAKICAgICBTdHJpbmcgc291cmNlTWFwVVJMRm9yU2NyaXB0KGNvbnN0
IFNjcmlwdCYpOwogCisgICAgdm9pZCBzaG93UGF1c2VXYXJuaW5nKCk7CisgICAgdm9pZCBoaWRl
UGF1c2VXYXJuaW5nKCk7CisKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTY3JpcHQ+IFNj
cmlwdHNNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4gPiBC
cmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkc01hcDsKIAogICAgIEluamVjdGVk
U2NyaXB0TWFuYWdlciogbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CisgICAgSW5zcGVjdG9yQ2xp
ZW50KiBtX2NsaWVudDsKICAgICBJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXIqIG1fZnJvbnRl
bmQ7CiAgICAgU2NyaXB0U3RhdGUqIG1fcGF1c2VkU2NyaXB0U3RhdGU7CiAgICAgU2NyaXB0VmFs
dWUgbV9jdXJyZW50Q2FsbFN0YWNrOwpAQCAtMTcwLDYgKzE3NiwxOCBAQCBwcml2YXRlOgogICAg
IExpc3RlbmVyKiBtX2xpc3RlbmVyOwogfTsKIAoraW5saW5lIHZvaWQgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6c2hvd1BhdXNlV2FybmluZygpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAg
ICBtX2NsaWVudC0+aGlnaGxpZ2h0KCk7Cit9CisKK2lubGluZSB2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmhpZGVQYXVzZVdhcm5pbmcoKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAg
ICAgbV9jbGllbnQtPmhpZGVIaWdobGlnaHQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIEVOQUJMRShJTlNQ
RUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uLmgKaW5kZXggNDM1MGU5Y2NkNzJmNmViM2ZkY2UwMTYwYTUzZGFhODFlYmYwYjBi
OC4uNzJhMmIwZjFkNDlkNTg1YmE0ZGIxOWJiMmUwMTY2YTc1NGNiMGZkZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaApAQCAt
OTgsNiArOTgsNyBAQCBjbGFzcyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24gewogcHVibGljOgog
ICAgIHN0YXRpYyB2b2lkIGRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSosIERPTVdy
YXBwZXJXb3JsZCopOwogICAgIHN0YXRpYyBib29sIGlzRGVidWdnZXJQYXVzZWQoRnJhbWUqKTsK
KyAgICBzdGF0aWMgYm9vbCBpc0RlYnVnZ2VyUGF1c2VkKEluc3RydW1lbnRpbmdBZ2VudHMqKTsK
IAogICAgIHN0YXRpYyB2b2lkIHdpbGxJbnNlcnRET01Ob2RlKERvY3VtZW50KiwgTm9kZSogcGFy
ZW50KTsKICAgICBzdGF0aWMgdm9pZCBkaWRJbnNlcnRET01Ob2RlKERvY3VtZW50KiwgTm9kZSop
OwpAQCAtNDQzLDYgKzQ0NCwxNCBAQCBpbmxpbmUgYm9vbCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmlzRGVidWdnZXJQYXVzZWQoRnJhbWUqIGZyYW1lKQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAoraW5saW5lIGJvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppc0RlYnVnZ2VyUGF1c2Vk
KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMpCit7CisjaWYgRU5BQkxF
KElOU1BFQ1RPUikKKyAgICByZXR1cm4gaXNEZWJ1Z2dlclBhdXNlZEltcGwoaW5zdHJ1bWVudGlu
Z0FnZW50cyk7CisjZW5kaWYKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGlubGluZSB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEluc2VydERPTU5vZGUoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBOb2RlKiBwYXJlbnQpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGE1ODZlZGYzZmQ0
MTA4YzlkMDc5MmMwYmRmZWJlMWU4M2ZhZmY4NmEuLmIzYzNmYzIyN2JmYmVmNGE2ZGQzYTYwMjFm
N2JhNWMyNzhkMWRhZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdl
RGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1
Z2dlckFnZW50LmNwcApAQCAtNDAsMTMgKzQwLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotUGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2VudD4gUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0
ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0
ZSogaW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIEluamVjdGVkU2NyaXB0TWFu
YWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQorUGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2Vu
dD4gUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGluc3Bl
Y3RlZFBhZ2UsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJ
bnNwZWN0b3JDbGllbnQqIGNsaWVudCkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBhZ2VE
ZWJ1Z2dlckFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlLCBpbnNwZWN0
ZWRQYWdlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3
IFBhZ2VEZWJ1Z2dlckFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlLCBp
bnNwZWN0ZWRQYWdlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIGNsaWVudCkpOwogfQogCi1QYWdl
RGVidWdnZXJBZ2VudDo6UGFnZURlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5z
dHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBQYWdlKiBp
bnNwZWN0ZWRQYWdlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdl
cikKLSAgICA6IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgaW5z
cGVjdG9yU3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdlcikKK1BhZ2VEZWJ1Z2dlckFnZW50OjpQ
YWdlRGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
LCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIElu
amVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JDbGll
bnQqIGNsaWVudCkKKyAgICA6IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0Fn
ZW50cywgaW5zcGVjdG9yU3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdlciwgY2xpZW50KQogICAg
ICwgbV9pbnNwZWN0ZWRQYWdlKGluc3BlY3RlZFBhZ2UpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oCmluZGV4IDlkYmQ1MTNmOWYxYTI4YmI5ODQy
NDkxMzU3ODE0ODZjNzNjMzI2MTguLjA3MzQwODliZmI4YjQzYzE4OGYzODdlYjYwYTc0MTYwMjdk
M2UzYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJB
Z2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5o
CkBAIC00NCw3ICs0NCw3IEBAIGNsYXNzIFBhZ2VEZWJ1Z2dlckFnZW50IDogcHVibGljIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VEZWJ1Z2dl
ckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2Vu
dHMqLCBJbnNwZWN0b3JTdGF0ZSosIFBhZ2UqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRp
bmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0ZSosIFBhZ2UqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIq
LCBJbnNwZWN0b3JDbGllbnQqKTsKICAgICB2aXJ0dWFsIH5QYWdlRGVidWdnZXJBZ2VudCgpOwog
CiBwcml2YXRlOgpAQCAtNTYsNyArNTYsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBJbmpl
Y3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcqLCBjb25zdCBpbnQq
IGV4ZWN1dGlvbkNvbnRleHRJZCk7CiAKLSAgICBQYWdlRGVidWdnZXJBZ2VudChJbnN0cnVtZW50
aW5nQWdlbnRzKiwgSW5zcGVjdG9yU3RhdGUqLCBQYWdlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
Kik7CisgICAgUGFnZURlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3Rv
clN0YXRlKiwgUGFnZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3RvckNsaWVudCop
OwogICAgIFBhZ2UqIGNvbnN0IG1faW5zcGVjdGVkUGFnZTsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcAppbmRleCBjNzVhZjRhNmU0
YzBmNGU5OTZmMzVkOGEzYTc4OTE2MTUzMTcxNjJmLi4xNTg5ZmMzMGY0NTY0ZDkzZTI3YmYyN2Vh
YjU1NzVkNGI2MDZhNTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29y
a2VyRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtl
ckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC04Niw3ICs4Niw3IEBAIFBhc3NPd25QdHI8V29ya2VyRGVi
dWdnZXJBZ2VudD4gV29ya2VyRGVidWdnZXJBZ2VudDo6Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2Vu
dHMqCiB9CiAKIFdvcmtlckRlYnVnZ2VyQWdlbnQ6OldvcmtlckRlYnVnZ2VyQWdlbnQoSW5zdHJ1
bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yU3RhdGUqIGluc3Bl
Y3RvclN0YXRlLCBXb3JrZXJDb250ZXh0KiBpbnNwZWN0ZWRXb3JrZXJDb250ZXh0LCBJbmplY3Rl
ZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlcikKLSAgICA6IEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUsIGluamVjdGVk
U2NyaXB0TWFuYWdlcikKKyAgICA6IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGlu
Z0FnZW50cywgaW5zcGVjdG9yU3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdlciwgMCkKICAgICAs
IG1fc2NyaXB0RGVidWdTZXJ2ZXIoaW5zcGVjdGVkV29ya2VyQ29udGV4dCkKICAgICAsIG1faW5z
cGVjdGVkV29ya2VyQ29udGV4dChpbnNwZWN0ZWRXb3JrZXJDb250ZXh0KQogewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152504</attachid>
            <date>2012-07-16 03:12:07 -0700</date>
            <delta_ts>2012-07-16 03:47:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90880-20120716141206.patch</filename>
            <type>text/plain</type>
            <size>26032</size>
            <attacher name="Sergey Rogulenko">rogulenko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNjk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjExMjYyNzNjNjE5NTFk
MDMzZWYxOGZmZWUzZmRjYzM4NDViOWUxMi4uNTMyMGVlZGNmYzhkYzEyMGVkYjlkY2VmODE0MTRk
MDIzMGY1NTI2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDEyLTA3LTE2ICBTZXJn
ZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogYWRkaW5nIHBhdXNlIGljb24gZm9yIEphdmFTY3JpcHQgZGVidWdnaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg4MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIGFkZGl0aW9uYWwgaW5m
b3JtYXRpb24geWV0LCBiZWNhdXNlIEkgYW0gbm90IHN1cmUgdGhpcyBpcyB0aGUgZmluYWwgdmVy
c2lvbi4KKworICAgICAgICAqIGluc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6SW5zcGVjdG9yT3ZlcmxheSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdPdXRsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvck92ZXJsYXk6OmdldEhpZ2hsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JP
dmVybGF5OjpzZXRIaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JPdmVybGF5OjpzZXRTaG91bGRTaG93UGF1c2VXYXJuaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3SGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3Rvck92ZXJsYXk6OmRyYXdQYXVzZVdhcm5pbmcpOgorICAgICAgICAqIGluc3BlY3Rvci9E
T01Ob2RlSGlnaGxpZ2h0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW5zcGVj
dG9yT3ZlcmxheSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpjcmVhdGUp
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZHJhd0hpZ2hsaWdodCk6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2VudCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRPTUFnZW50OjpoaWRlSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRPTUFnZW50OjpnZXRIaWdobGlnaHQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJbnNwZWN0b3JET01BZ2Vu
dCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yRGVidWdnZXJB
Z2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaXNhYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZENvbnRpbnVlKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclBhZ2VBZ2VudDo6SW5zcGVjdG9yUGFnZUFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclBhZ2VBZ2VudDo6ZHJhd0luc3BlY3Rvck92ZXJsYXkpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZFBhaW50KToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50Lmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6aW5zcGVjdG9yT3Zlcmxh
eSk6CisgICAgICAgIChJbnNwZWN0b3JQYWdlQWdlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9Q
YWdlRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlRGVidWdnZXJBZ2Vu
dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50OjpQYWdlRGVi
dWdnZXJBZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50Lmg6Cisg
ICAgICAgIChQYWdlRGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlRGVidWdn
ZXJBZ2VudDo6aXNQYWdlRGVidWdnZXJBZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL1dvcmtl
ckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyRGVidWdnZXJBZ2Vu
dDo6V29ya2VyRGVidWdnZXJBZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL1dvcmtlckRlYnVn
Z2VyQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckRlYnVnZ2VyQWdlbnQ6OmlzUGFn
ZURlYnVnZ2VyQWdlbnQpOgorICAgICAgICAoV29ya2VyRGVidWdnZXJBZ2VudCk6CisKIDIwMTIt
MDctMTUgIE1pa2UgTGF3dGhlciAgPG1pa2VsYXd0aGVyQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBGaXggY2FsY3VsYXRpb24gb2YgcmdiYSdzIGFscGhhIGluIENTUyBjdXN0b20gdGV4dApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcAppbmRleCBl
NGM3MTAwZDYxYzUyMDgzZjM4MjcxZjJhNzI3NTQ3NTQ2OGVkYjJjLi41OGU4MzNiNzQwNGUxZWQx
Nzk3YzUwZTdmMTdjNjI1M2VmNTA3Mjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcApAQCAtMzksNiArMzksOCBAQAogI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzVHlwZXMuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKKyNpbmNsdWRlICJJbnNw
ZWN0b3JQYWdlQWdlbnQuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgog
I2luY2x1ZGUgIlJhbmdlLmgiCkBAIC00ODUsMjEgKzQ4NywyOSBAQCBzdGF0aWMgdm9pZCBnZXRP
ckRyYXdSZWN0SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgRG9jdW1lbnQqIGRv
Y3VtZW50LAogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAotbmFtZXNwYWNlIERPTU5vZGVI
aWdobGlnaHRlciB7CitJbnNwZWN0b3JPdmVybGF5OjpJbnNwZWN0b3JPdmVybGF5KEluc3BlY3Rv
clBhZ2VBZ2VudCogcGFnZUFnZW50LCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKKyAgICA6IG1f
cGFnZUFnZW50KHBhZ2VBZ2VudCkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fc2hv
dWxkU2hvd1BhdXNlV2FybmluZyhmYWxzZSkKKyAgICAsIG1fZG9jdW1lbnQoMCkKKyAgICAsIG1f
aGlnaGxpZ2h0RGF0YSgwKSB7IH0KIAotdm9pZCBkcmF3SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgRG9jdW1lbnQqIGRvY3VtZW50LCBIaWdobGlnaHREYXRhKiBoaWdobGlnaHRE
YXRhKQordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkKIHsKLSAgICBpZiAoIWhpZ2hsaWdodERhdGEpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAo
bV9oaWdobGlnaHREYXRhKQorICAgICAgICBkcmF3SGlnaGxpZ2h0KGNvbnRleHQpOworICAgIGVs
c2UKKyAgICBpZiAobV9zaG91bGRTaG93UGF1c2VXYXJuaW5nKQorICAgICAgICBkcmF3UGF1c2VX
YXJuaW5nKGNvbnRleHQpOworfQogCi0gICAgSGlnaGxpZ2h0IGhpZ2hsaWdodDsKLSAgICBpZiAo
aGlnaGxpZ2h0RGF0YS0+bm9kZSkKLSAgICAgICAgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdodCgmY29u
dGV4dCwgaGlnaGxpZ2h0RGF0YSwgJmhpZ2hsaWdodCk7Ci0gICAgZWxzZSBpZiAoaGlnaGxpZ2h0
RGF0YS0+cmVjdCkKLSAgICAgICAgZ2V0T3JEcmF3UmVjdEhpZ2hsaWdodCgmY29udGV4dCwgZG9j
dW1lbnQsIGhpZ2hsaWdodERhdGEsICZoaWdobGlnaHQpOwordm9pZCBJbnNwZWN0b3JPdmVybGF5
OjpkcmF3T3V0bGluZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBGbG9hdFJlY3Qgb3V0bGluZVJlY3Qg
PSByZWN0OworICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgb3V0bGluZVJlY3QsIENvbG9y
KCksIGNvbG9yKTsKIH0KIAotdm9pZCBnZXRIaWdobGlnaHQoRG9jdW1lbnQqIGRvY3VtZW50LCBI
aWdobGlnaHREYXRhKiBoaWdobGlnaHREYXRhLCBIaWdobGlnaHQqIGhpZ2hsaWdodCkKK3ZvaWQg
SW5zcGVjdG9yT3ZlcmxheTo6Z2V0SGlnaGxpZ2h0KERvY3VtZW50KiBkb2N1bWVudCwgSGlnaGxp
Z2h0RGF0YSogaGlnaGxpZ2h0RGF0YSwgSGlnaGxpZ2h0KiBoaWdobGlnaHQpCiB7CiAgICAgaWYg
KCFoaWdobGlnaHREYXRhKQogICAgICAgICByZXR1cm47CkBAIC01MTYsMTMgKzUyNiw3OCBAQCB2
b2lkIGdldEhpZ2hsaWdodChEb2N1bWVudCogZG9jdW1lbnQsIEhpZ2hsaWdodERhdGEqIGhpZ2hs
aWdodERhdGEsIEhpZ2hsaWdodCogaAogICAgICAgICBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0KDAs
IGRvY3VtZW50LCBoaWdobGlnaHREYXRhLCBoaWdobGlnaHQpOwogfQogCi12b2lkIGRyYXdPdXRs
aW5lKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpzZXRIaWdobGlnaHQoRG9j
dW1lbnQqIGRvY3VtZW50LCBIaWdobGlnaHREYXRhKiBoaWdobGlnaHREYXRhKQogewotICAgIEZs
b2F0UmVjdCBvdXRsaW5lUmVjdCA9IHJlY3Q7Ci0gICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0
LCBvdXRsaW5lUmVjdCwgQ29sb3IoKSwgY29sb3IpOworICAgIGlmIChkb2N1bWVudCAmJiBoaWdo
bGlnaHREYXRhICYmIChoaWdobGlnaHREYXRhLT5ub2RlIHx8IGhpZ2hsaWdodERhdGEtPnJlY3Qp
KSB7CisgICAgICAgIG1fZG9jdW1lbnQgPSBoaWdobGlnaHREYXRhLT5ub2RlID8gaGlnaGxpZ2h0
RGF0YS0+bm9kZS0+ZG9jdW1lbnQoKSA6IGRvY3VtZW50OworICAgICAgICBtX2hpZ2hsaWdodERh
dGEgPSBoaWdobGlnaHREYXRhOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZG9jdW1lbnQgPSAw
OworICAgICAgICBtX2hpZ2hsaWdodERhdGEgPSAwOworICAgIH0KKyAgICB1cGRhdGUoKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpzZXRTaG91bGRTaG93UGF1c2VXYXJuaW5nKGJvb2wg
c2hvdWxkU2hvd1BhdXNlV2FybmluZykKK3sKKyAgICBtX3Nob3VsZFNob3dQYXVzZVdhcm5pbmcg
PSBzaG91bGRTaG93UGF1c2VXYXJuaW5nOworICAgIHVwZGF0ZSgpOworfQorCit2b2lkIEluc3Bl
Y3Rvck92ZXJsYXk6OnVwZGF0ZSgpCit7CisgICAgaWYgKG1fY2xpZW50KSB7CisgICAgICAgIGlm
IChtX2hpZ2hsaWdodERhdGEgfHwgbV9zaG91bGRTaG93UGF1c2VXYXJuaW5nKQorICAgICAgICAg
ICAgbV9jbGllbnQtPmhpZ2hsaWdodCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Ns
aWVudC0+aGlkZUhpZ2hsaWdodCgpOworICAgIH0KIH0KIAotfSAvLyBuYW1lc3BhY2UgRE9NTm9k
ZUhpZ2hsaWdodGVyCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdIaWdobGlnaHQoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIGlmICghbV9oaWdobGlnaHREYXRhKQorICAgICAg
ICByZXR1cm47CisKKyAgICBIaWdobGlnaHQgaGlnaGxpZ2h0OworICAgIGlmIChtX2hpZ2hsaWdo
dERhdGEtPm5vZGUpCisgICAgICAgIGdldE9yRHJhd05vZGVIaWdobGlnaHQoJmNvbnRleHQsIG1f
aGlnaGxpZ2h0RGF0YSwgJmhpZ2hsaWdodCk7CisgICAgZWxzZSBpZiAobV9oaWdobGlnaHREYXRh
LT5yZWN0KQorICAgICAgICBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0KCZjb250ZXh0LCBtX2RvY3Vt
ZW50LCBtX2hpZ2hsaWdodERhdGEsICZoaWdobGlnaHQpOworfQorCit2b2lkIEluc3BlY3Rvck92
ZXJsYXk6OmRyYXdQYXVzZVdhcm5pbmcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIGJhY2tncm91bmRDb2xvciwgKDAsIDAsIDAsIDMx
KSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgdGV4dEJhY2tncm91bmRDb2xvciwg
KDI1NSwgMjU1LCAxOTQpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCBib3JkZXJD
b2xvciwgKDEyOCwgMTI4LCAxMjgpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGludCwgZm9u
dEhlaWdodCwgKDI0KSk7CisKKyAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2VBZ2VudC0+bWFpbkZy
YW1lKCk7CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZnJhbWUtPnNldHRpbmdzKCk7CisgICAg
SW50UmVjdCB2aXNpYmxlUmVjdCA9IGZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgp
OworCisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoYmFja2dyb3VuZENvbG9yLCBDb2xvclNwYWNl
RGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdSZWN0KHZpc2libGVSZWN0KTsKKworICAgIEZv
bnREZXNjcmlwdGlvbiBkZXNjOworICAgIHNldFVwRm9udERlc2NyaXB0aW9uKGRlc2MsIHNldHRp
bmdzKTsKKyAgICBkZXNjLnNldENvbXB1dGVkU2l6ZShmb250SGVpZ2h0KTsKKyAgICBGb250IGZv
bnQgPSBGb250KGRlc2MsIDAsIDApOworICAgIGZvbnQudXBkYXRlKDApOworCisgICAgU3RyaW5n
IHRleHQgPSAiVGhlIGRlYnVnZ2VyIGlzIHBhdXNlZC4iOworICAgIFRleHRSdW4gdGV4dFJ1bih0
ZXh0KTsKKyAgICBJbnRSZWN0IHRpdGxlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoZm9udC5zZWxl
Y3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBJbnRQb2ludCgpLCBmb250SGVpZ2h0KSk7CisgICAg
dGl0bGVSZWN0LmluZmxhdGUocmVjdEluZmxhdGVQeCk7CisgICAgdGl0bGVSZWN0LnNldExvY2F0
aW9uKEludFBvaW50KHZpc2libGVSZWN0LndpZHRoKCkgLyAyIC0gdGl0bGVSZWN0LndpZHRoKCkg
LyAyLCAwKSk7CisKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0ZXh0QmFja2dyb3VuZENvbG9y
LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGJvcmRl
ckNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdSZWN0KHRpdGxl
UmVjdCk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNl
RGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdUZXh0KGZvbnQsIHRleHRSdW4sIEludFBvaW50
KHRpdGxlUmVjdC54KCkgKyByZWN0SW5mbGF0ZVB4LCB0aXRsZVJlY3QueSgpICsgZm9udEhlaWdo
dCkpOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaAppbmRleCBmN2I2ZjAwZjRmZmUwMjU5MTM1NTI1
NGRmZTE5M2QwMzA2MmNlM2Q5Li4wOGNjNzgwMjEwZDdmZDUyNzJmYTkzYTNhMTI3ZWNkNjFhYjgy
YjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdo
dGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5o
CkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKIAogI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTQzLDYgKzQ0LDEwIEBA
IGNsYXNzIENvbG9yOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBGcmFtZVZpZXc7CiBjbGFzcyBH
cmFwaGljc0NvbnRleHQ7CitjbGFzcyBJbnNwZWN0b3JDbGllbnQ7CitjbGFzcyBJbnNwZWN0b3JQ
YWdlQWdlbnQ7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgSW50U2l6ZTsKIGNsYXNzIE5vZGU7CiAK
IHN0cnVjdCBIaWdobGlnaHREYXRhIHsKQEAgLTc1LDEzICs4MCwzMyBAQCBzdHJ1Y3QgSGlnaGxp
Z2h0IHsKICAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKIH07CiAKLW5hbWVzcGFjZSBET01O
b2RlSGlnaGxpZ2h0ZXIgewotCi12b2lkIGRyYXdIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0Jiwg
RG9jdW1lbnQqLCBIaWdobGlnaHREYXRhKik7Ci12b2lkIGdldEhpZ2hsaWdodChEb2N1bWVudCos
IEhpZ2hsaWdodERhdGEqLCBIaWdobGlnaHQqKTsKLXZvaWQgZHJhd091dGxpbmUoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IENvbG9yJik7Ci0KLX0gLy8gbmFtZXNw
YWNlIERPTU5vZGVIaWdobGlnaHRlcgorY2xhc3MgSW5zcGVjdG9yT3ZlcmxheSB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yT3ZlcmxheT4gY3JlYXRlKEluc3BlY3Rv
clBhZ2VBZ2VudCogcGFnZUFnZW50LCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9yT3ZlcmxheShwYWdlQWdlbnQsIGNs
aWVudCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0Jik7Cisg
ICAgdm9pZCBkcmF3T3V0bGluZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0Jiwg
Y29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIGdldEhpZ2hsaWdodChEb2N1bWVudCosIEhpZ2hsaWdo
dERhdGEqLCBIaWdobGlnaHQqKTsKKyAgICAKKyAgICB2b2lkIHNldEhpZ2hsaWdodChEb2N1bWVu
dCosIEhpZ2hsaWdodERhdGEqKTsKKyAgICB2b2lkIHNldFNob3VsZFNob3dQYXVzZVdhcm5pbmco
Ym9vbCk7CisKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yT3ZlcmxheShJbnNwZWN0b3JQYWdlQWdl
bnQqLCBJbnNwZWN0b3JDbGllbnQqKTsKKworICAgIHZvaWQgdXBkYXRlKCk7CisgICAgdm9pZCBk
cmF3SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYpOworICAgIHZvaWQgZHJhd1BhdXNlV2Fybmlu
ZyhHcmFwaGljc0NvbnRleHQmKTsKKworICAgIEluc3BlY3RvclBhZ2VBZ2VudCogbV9wYWdlQWdl
bnQ7CisgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKKyAgICBib29sIG1fc2hvdWxkU2hv
d1BhdXNlV2FybmluZzsKKyAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKKyAgICBIaWdobGlnaHRE
YXRhKiBtX2hpZ2hsaWdodERhdGE7Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRl
eCAwOTVlMWNjNTFiMzU0YThmOGUwODE0NmE3OWVmNzA4ZGI3Y2Q0OWNlLi4zYjU5ZWU1MjJmZWUw
NTRlYTRhYmVmMjI0NTJjNmQ4NjNjMDhiYzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNs
dWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAKKyNpbmNsdWRlICJET01Ob2RlSGlnaGxpZ2h0
ZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgog
I2luY2x1ZGUgIklkZW50aWZpZXJzRmFjdG9yeS5oIgpAQCAtMTMwLDcgKzEzMSw3IEBAIEluc3Bl
Y3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9y
Q2xpZW50KiBpbnNwZWN0b3JDCiAgICAgbV9hZ2VudHMuYXBwZW5kKGNvbnNvbGVBZ2VudFB0ci5y
ZWxlYXNlKCkpOwogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgT3duUHRy
PEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+IGRlYnVnZ2VyQWdlbnRQdHIoUGFnZURlYnVnZ2VyQWdl
bnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1fc3RhdGUuZ2V0KCksIHBh
Z2UsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpKSk7CisgICAgT3duUHRyPEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ+IGRlYnVnZ2VyQWdlbnRQdHIoUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0
ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1fc3RhdGUuZ2V0KCksIHBhZ2UsIG1faW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpLCBtX3BhZ2VBZ2VudC0+aW5zcGVjdG9yT3ZlcmxheSgp
KSk7CiAgICAgbV9kZWJ1Z2dlckFnZW50ID0gZGVidWdnZXJBZ2VudFB0ci5nZXQoKTsKICAgICBt
X2FnZW50cy5hcHBlbmQoZGVidWdnZXJBZ2VudFB0ci5yZWxlYXNlKCkpOwogCkBAIC0yOTQsNyAr
Mjk1LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpldmFsdWF0ZUZvclRlc3RJbkZyb250
ZW5kKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHMKIAogdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpkcmF3SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKLSAg
ICBtX2RvbUFnZW50LT5kcmF3SGlnaGxpZ2h0KGNvbnRleHQpOworICAgIG1fcGFnZUFnZW50LT5k
cmF3SW5zcGVjdG9yT3ZlcmxheShjb250ZXh0KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpnZXRIaWdobGlnaHQoSGlnaGxpZ2h0KiBoaWdobGlnaHQpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCA5MDc5NTg5ZTUx
Y2U4ZjA4ZTUwZTIwNmU0OWExMzI2YmU5NWMzMDEyLi4yNzVlMmE4ZGIyMjViZjliYmMxODVjNGJj
YWUwZTNmMmYxZjczNzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5jcHAKQEAgLTE5OSw2ICsxOTksNyBAQCBJbnNwZWN0b3JET01BZ2VudDo6SW5z
cGVjdG9yRE9NQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywg
SQogICAgICwgbV9wYWdlQWdlbnQocGFnZUFnZW50KQogICAgICwgbV9jbGllbnQoY2xpZW50KQog
ICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQorICAg
ICwgbV9vdmVybGF5KHBhZ2VBZ2VudC0+aW5zcGVjdG9yT3ZlcmxheSgpKQogICAgICwgbV9mcm9u
dGVuZCgwKQogICAgICwgbV9kb21MaXN0ZW5lcigwKQogICAgICwgbV9sYXN0Tm9kZUlkKDEpCkBA
IC0xMDM2LDcgKzEwMzcsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHQoKQog
ewogICAgIC8vIFRoaXMgbWV0aG9kIHJlcXVpcmVzIG1faGlnaGxpZ2h0RGF0YSB0byBoYXZlIGJl
ZW4gZmlsbGVkIGluIGJ5IGl0cyBjbGllbnQuCiAgICAgQVNTRVJUKG1faGlnaGxpZ2h0RGF0YSk7
Ci0gICAgbV9jbGllbnQtPmhpZ2hsaWdodCgpOworICAgIG1fb3ZlcmxheS0+c2V0SGlnaGxpZ2h0
KG1fZG9jdW1lbnQuZ2V0KCksIG1faGlnaGxpZ2h0RGF0YS5nZXQoKSk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFJlY3QoRXJyb3JTdHJpbmcqLCBpbnQgeCwgaW50IHks
IGludCB3aWR0aCwgaW50IGhlaWdodCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGNv
bG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogb3V0bGluZUNvbG9yKQpAQCAtMTA4
NCw3ICsxMDg1LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlkZUhpZ2hsaWdodChFcnJv
clN0cmluZyopCiAgICAgICAgIG1faGlnaGxpZ2h0RGF0YS0+bm9kZS5jbGVhcigpOwogICAgICAg
ICBtX2hpZ2hsaWdodERhdGEtPnJlY3QuY2xlYXIoKTsKICAgICB9Ci0gICAgbV9jbGllbnQtPmhp
ZGVIaWdobGlnaHQoKTsKKyAgICBoaWdobGlnaHQoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6bW92ZVRvKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgaW50IHRh
cmdldEVsZW1lbnRJZCwgY29uc3QgaW50KiBjb25zdCBhbmNob3JOb2RlSWQsIGludCogbmV3Tm9k
ZUlkKQpAQCAtMTU5OSwyMCArMTYwMCwxMiBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+IEluc3BlY3RvckRPTUFnZW50OjpyZXNvbHZlTm9kZShObwogICAg
IHJldHVybiBpbmplY3RlZFNjcmlwdC53cmFwTm9kZShub2RlLCBvYmplY3RHcm91cCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRyYXdIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAotewotICAgIGlmICghbV9oaWdobGlnaHREYXRhKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBET01Ob2RlSGlnaGxpZ2h0ZXI6OmRyYXdIaWdobGlnaHQoY29udGV4dCwgbV9o
aWdobGlnaHREYXRhLT5ub2RlID8gbV9oaWdobGlnaHREYXRhLT5ub2RlLT5kb2N1bWVudCgpIDog
bV9kb2N1bWVudC5nZXQoKSwgbV9oaWdobGlnaHREYXRhLmdldCgpKTsKLX0KLQogdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6Z2V0SGlnaGxpZ2h0KEhpZ2hsaWdodCogaGlnaGxpZ2h0KSBjb25zdAog
ewogICAgIGlmICghbV9oaWdobGlnaHREYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBET01O
b2RlSGlnaGxpZ2h0ZXI6OmdldEhpZ2hsaWdodChtX2hpZ2hsaWdodERhdGEtPm5vZGUgPyBtX2hp
Z2hsaWdodERhdGEtPm5vZGUtPmRvY3VtZW50KCkgOiBtX2RvY3VtZW50LmdldCgpLCBtX2hpZ2hs
aWdodERhdGEuZ2V0KCksIGhpZ2hsaWdodCk7CisgICAgbV9vdmVybGF5LT5nZXRIaWdobGlnaHQo
bV9oaWdobGlnaHREYXRhLT5ub2RlID8gbV9oaWdobGlnaHREYXRhLT5ub2RlLT5kb2N1bWVudCgp
IDogbV9kb2N1bWVudC5nZXQoKSwgbV9oaWdobGlnaHREYXRhLmdldCgpLCBoaWdobGlnaHQpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5oCmluZGV4IGIwNWFiNTcwZDlmZDFiMDQ4NzA2YTM5M2EyNDY2NTk3
YjQ5NjM5YmYuLmI5MTkyNDU3YjkwMGMzNmZiNjk4YTJmMGQ2ZGE2YmE3ZTc0NjMyNDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC01OSw2ICs1
OSw3IEBAIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIEluc3BlY3RvckNsaWVudDsKIGNs
YXNzIEluc3BlY3RvckZyb250ZW5kOwogY2xhc3MgSW5zcGVjdG9ySGlzdG9yeTsKK2NsYXNzIElu
c3BlY3Rvck92ZXJsYXk7CiBjbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7CiBjbGFzcyBJbnRSZWN0
OwogY2xhc3MgSGl0VGVzdFJlc3VsdDsKQEAgLTE4NSw3ICsxODYsNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBpbnNwZWN0KE5vZGUqKTsKICAgICB2b2lkIGZvY3VzTm9kZSgpOwogCi0gICAgdm9pZCBk
cmF3SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogICAgIHZvaWQgZ2V0SGlnaGxp
Z2h0KEhpZ2hsaWdodCopIGNvbnN0OwogCiAgICAgSW5zcGVjdG9ySGlzdG9yeSogaGlzdG9yeSgp
IHsgcmV0dXJuIG1faGlzdG9yeS5nZXQoKTsgfQpAQCAtMjQzLDYgKzI0Myw3IEBAIHByaXZhdGU6
CiAgICAgSW5zcGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKICAgICBJbnNwZWN0b3JDbGll
bnQqIG1fY2xpZW50OwogICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciogbV9pbmplY3RlZFNjcmlw
dE1hbmFnZXI7CisgICAgSW5zcGVjdG9yT3ZlcmxheSogbV9vdmVybGF5OwogICAgIEluc3BlY3Rv
ckZyb250ZW5kOjpET00qIG1fZnJvbnRlbmQ7CiAgICAgRE9NTGlzdGVuZXIqIG1fZG9tTGlzdGVu
ZXI7CiAgICAgTm9kZVRvSWRNYXAgbV9kb2N1bWVudE5vZGVUb0lkTWFwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDEx
ODA3YTNmOWU4Nzk4NDBkZWE2MDNiMzY2M2UyMDlhZmNlZDcyYzguLmJkYzE1M2I4M2VlOWQzNDkx
OTRjZjVmM2JlMmFjZmMwNDA3ZTk4MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNs
dWRlICJJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgiCiAKICNpbmNsdWRlICJDb250ZW50U2VhcmNo
VXRpbHMuaCIKKyNpbmNsdWRlICJET01Ob2RlSGlnaGxpZ2h0ZXIuaCIKICNpbmNsdWRlICJJbmpl
Y3RlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0TWFuYWdlci5oIgogI2luY2x1
ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCkBAIC02MCwxMCArNjEsMTEgQEAgc3RhdGljIGNvbnN0
IGNoYXIgcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZVtdID0gInBhdXNlT25FeGNlcHRpb25zU3RhdGUi
OwogCiBjb25zdCBjaGFyKiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpiYWNrdHJhY2VPYmplY3RH
cm91cCA9ICJiYWNrdHJhY2Utb2JqZWN0LWdyb3VwIjsKIAotSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50
aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0
TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQorSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
SW5zcGVjdG9yRGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0TWFu
YWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQog
ICAgIDogSW5zcGVjdG9yQmFzZUFnZW50PEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+KCJEZWJ1Z2dl
ciIsIGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlKQogICAgICwgbV9pbmplY3Rl
ZFNjcmlwdE1hbmFnZXIoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQogICAgICwgbV9mcm9udGVuZCgw
KQorICAgICwgbV9vdmVybGF5KG92ZXJsYXkpCiAgICAgLCBtX3BhdXNlZFNjcmlwdFN0YXRlKDAp
CiAgICAgLCBtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZChmYWxzZSkKICAgICAsIG1fbGlzdGVu
ZXIoMCkKQEAgLTEwMyw2ICsxMDUsOCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRp
c2FibGUoKQogCiAgICAgaWYgKG1fbGlzdGVuZXIpCiAgICAgICAgIG1fbGlzdGVuZXItPmRlYnVn
Z2VyV2FzRGlzYWJsZWQoKTsKKyAgICBpZiAoaXNQYWdlRGVidWdnZXJBZ2VudCgpKQorICAgICAg
ICBtX292ZXJsYXktPnNldFNob3VsZFNob3dQYXVzZVdhcm5pbmcoZmFsc2UpOwogfQogCiBib29s
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVuYWJsZWQoKQpAQCAtNjU3LDYgKzY2MSw4IEBAIHZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGF1c2UoU2NyaXB0U3RhdGUqIHNjcmlwdFN0
YXRlLCBjb25zdCBTY3JpcHRWYWx1CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAoaXNQYWdl
RGVidWdnZXJBZ2VudCgpKQorICAgICAgICBtX292ZXJsYXktPnNldFNob3VsZFNob3dQYXVzZVdh
cm5pbmcodHJ1ZSk7CiAgICAgbV9mcm9udGVuZC0+cGF1c2VkKGN1cnJlbnRDYWxsRnJhbWVzKCks
IG1fYnJlYWtSZWFzb24sIG1fYnJlYWtBdXhEYXRhKTsKICAgICBtX2phdmFTY3JpcHRQYXVzZVNj
aGVkdWxlZCA9IGZhbHNlOwogCkBAIC02NzEsNiArNjc3LDggQEAgdm9pZCBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpkaWRDb250aW51ZSgpCiAgICAgbV9wYXVzZWRTY3JpcHRTdGF0ZSA9IDA7CiAg
ICAgbV9jdXJyZW50Q2FsbFN0YWNrID0gU2NyaXB0VmFsdWUoKTsKICAgICBjbGVhckJyZWFrRGV0
YWlscygpOworICAgIGlmIChpc1BhZ2VEZWJ1Z2dlckFnZW50KCkpCisgICAgICAgIG1fb3Zlcmxh
eS0+c2V0U2hvdWxkU2hvd1BhdXNlV2FybmluZyhmYWxzZSk7CiAgICAgbV9mcm9udGVuZC0+cmVz
dW1lZCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRl
YnVnZ2VyQWdlbnQuaAppbmRleCAwOWM5N2QxOTUzZTRiOWIwMDE2MWY4NzRmNDUzMWZiZGVjN2Ri
NmNkLi4wNGU4ZDlhOWUzZWZlM2M2YjFlN2FkMmY5NDlmNzExNGFhM2MyODQ3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAgLTUw
LDYgKzUwLDcgQEAgY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogY2xhc3MgSW5zcGVjdG9y
RnJvbnRlbmQ7CiBjbGFzcyBJbnNwZWN0b3JBcnJheTsKIGNsYXNzIEluc3BlY3Rvck9iamVjdDsK
K2NsYXNzIEluc3BlY3Rvck92ZXJsYXk7CiBjbGFzcyBJbnNwZWN0b3JTdGF0ZTsKIGNsYXNzIElu
c3BlY3RvclZhbHVlOwogY2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsKQEAgLTEyNCw3ICsxMjUs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTY3JpcHREZWJ1Z1NlcnZlciYgc2NyaXB0RGVidWdT
ZXJ2ZXIoKSA9IDA7CiAKIHByb3RlY3RlZDoKLSAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KElu
c3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFuYWdl
ciopOworICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIElu
c3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9yT3ZlcmxheSop
OwogCiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0TGlzdGVuaW5nU2NyaXB0RGVidWdTZXJ2ZXIoKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIHN0b3BMaXN0ZW5pbmdTY3JpcHREZWJ1Z1NlcnZlcigpID0g
MDsKQEAgLTEzNCw2ICsxMzUsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBJbmplY3RlZFNj
cmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcqLCBjb25zdCBpbnQqIGV4ZWN1
dGlvbkNvbnRleHRJZCkgPSAwOwogCiBwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBpc1BhZ2VE
ZWJ1Z2dlckFnZW50KCkgPSAwOworCiAgICAgdm9pZCBlbmFibGUoKTsKICAgICB2b2lkIGRpc2Fi
bGUoKTsKICAgICBib29sIGVuYWJsZWQoKTsKQEAgLTE1OSw2ICsxNjIsNyBAQCBwcml2YXRlOgog
CiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKICAg
ICBJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXIqIG1fZnJvbnRlbmQ7CisgICAgSW5zcGVjdG9y
T3ZlcmxheSogbV9vdmVybGF5OwogICAgIFNjcmlwdFN0YXRlKiBtX3BhdXNlZFNjcmlwdFN0YXRl
OwogICAgIFNjcmlwdFZhbHVlIG1fY3VycmVudENhbGxTdGFjazsKICAgICBTY3JpcHRzTWFwIG1f
c2NyaXB0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQ
YWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHAKaW5kZXggZWYzNDUzN2YwZTExOGZiNWUwY2I4OGNhMmZhYjVlM2VmNjBhMzU3Ny4uY2U4
N2I1OWE5ZmQ3YjIwMjJhOGJkMGViZDMyNTMwNjBkNTg1MTdmNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKQEAgLTUwLDYgKzUwLDcgQEAK
ICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAi
SFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiSWRlbnRpZmllcnNGYWN0b3J5LmgiCkBAIC0zMTUsNiArMzE2LDcgQEAgSW5zcGVjdG9yUGFn
ZUFnZW50OjpJbnNwZWN0b3JQYWdlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cywKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKGluamVjdGVkU2NyaXB0
TWFuYWdlcikKICAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fZnJvbnRlbmQoMCkKKyAg
ICAsIG1fb3ZlcmxheShJbnNwZWN0b3JPdmVybGF5OjpjcmVhdGUodGhpcywgY2xpZW50KSkKICAg
ICAsIG1fbGFzdFNjcmlwdElkZW50aWZpZXIoMCkKICAgICAsIG1fbGFzdFBhaW50Q29udGV4dCgw
KQogICAgICwgbV9kaWRMb2FkRXZlbnRGaXJlKGZhbHNlKQpAQCAtODQzLDYgKzg0NSwxMSBAQCBE
b2N1bWVudExvYWRlciogSW5zcGVjdG9yUGFnZUFnZW50Ojphc3NlcnREb2N1bWVudExvYWRlcihF
cnJvclN0cmluZyogZXJyb3JTdHJpbgogICAgIHJldHVybiBkb2N1bWVudExvYWRlcjsKIH0KIAor
dm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRyYXdJbnNwZWN0b3JPdmVybGF5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkKK3sKKyAgICBtX292ZXJsYXktPmRyYXcoY29udGV4dCk7Cit9CisKIHZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50Ojpsb2FkZXJEZXRhY2hlZEZyb21GcmFtZShEb2N1bWVudExv
YWRlciogbG9hZGVyKQogewogICAgIEhhc2hNYXA8RG9jdW1lbnRMb2FkZXIqLCBTdHJpbmc+Ojpp
dGVyYXRvciBpdGVyYXRvciA9IG1fbG9hZGVyVG9JZGVudGlmaWVyLmZpbmQobG9hZGVyKTsKQEAg
LTg4NSw3ICs4OTIsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlkUGFpbnQoKQogICAg
ICAgICBDb2xvcigwLCAwLCAweEZGLCAweDNGKSwKICAgICB9OwogCi0gICAgRE9NTm9kZUhpZ2hs
aWdodGVyOjpkcmF3T3V0bGluZSgqbV9sYXN0UGFpbnRDb250ZXh0LCBtX2xhc3RQYWludFJlY3Qs
IGNvbG9yc1tjb2xvclNlbGVjdG9yKysgJSBXVEZfQVJSQVlfTEVOR1RIKGNvbG9ycyldKTsKKyAg
ICBtX292ZXJsYXktPmRyYXdPdXRsaW5lKCptX2xhc3RQYWludENvbnRleHQsIG1fbGFzdFBhaW50
UmVjdCwgY29sb3JzW2NvbG9yU2VsZWN0b3IrKyAlIFdURl9BUlJBWV9MRU5HVEgoY29sb3JzKV0p
OwogCiAgICAgbV9sYXN0UGFpbnRDb250ZXh0ID0gMDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaAppbmRleCA5NjRiYzg1ZmM2MzY0OGFmMzhmMmRj
MTJmYzgzZjc5NzFiOTNhNjYzLi4zZTQzOTRkYTVjN2VlOGUxYzRmMTY0YmJlMjQ4ODZkMDIwZmIw
NTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFn
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5o
CkBAIC00OCwxMSArNDgsMTMgQEAgY2xhc3MgRE9NV3JhcHBlcldvcmxkOwogY2xhc3MgRG9jdW1l
bnRMb2FkZXI7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEZyb250ZW5kOworY2xhc3MgR3JhcGhpY3ND
b250ZXh0OwogY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogY2xhc3MgSW5zcGVjdG9yQWdl
bnQ7CiBjbGFzcyBJbnNwZWN0b3JBcnJheTsKIGNsYXNzIEluc3BlY3RvckNsaWVudDsKIGNsYXNz
IEluc3BlY3Rvck9iamVjdDsKK2NsYXNzIEluc3BlY3Rvck92ZXJsYXk7CiBjbGFzcyBJbnNwZWN0
b3JTdGF0ZTsKIGNsYXNzIEluc3RydW1lbnRpbmdBZ2VudHM7CiBjbGFzcyBLVVJMOwpAQCAtMTM1
LDYgKzEzNyw4IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgbG9hZGVySWQoRG9jdW1lbnRMb2FkZXIq
KTsKICAgICBGcmFtZSogYXNzZXJ0RnJhbWUoRXJyb3JTdHJpbmcqLCBTdHJpbmcgZnJhbWVJZCk7
CiAgICAgc3RhdGljIERvY3VtZW50TG9hZGVyKiBhc3NlcnREb2N1bWVudExvYWRlcihFcnJvclN0
cmluZyosIEZyYW1lKik7CisgICAgSW5zcGVjdG9yT3ZlcmxheSogaW5zcGVjdG9yT3ZlcmxheSgp
IHsgcmV0dXJuIG1fb3ZlcmxheS5nZXQoKTsgfQorICAgIHZvaWQgZHJhd0luc3BlY3Rvck92ZXJs
YXkoR3JhcGhpY3NDb250ZXh0Jik7CiAKIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yUGFnZUFnZW50
KEluc3RydW1lbnRpbmdBZ2VudHMqLCBQYWdlKiwgSW5zcGVjdG9yQWdlbnQqLCBJbnNwZWN0b3JT
dGF0ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3RvckNsaWVudCopOwpAQCAtMTQ3
LDYgKzE1MSw3IEBAIHByaXZhdGU6CiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2luamVj
dGVkU2NyaXB0TWFuYWdlcjsKICAgICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50OwogICAgIElu
c3BlY3RvckZyb250ZW5kOjpQYWdlKiBtX2Zyb250ZW5kOworICAgIE93blB0cjxJbnNwZWN0b3JP
dmVybGF5PiBtX292ZXJsYXk7CiAgICAgbG9uZyBtX2xhc3RTY3JpcHRJZGVudGlmaWVyOwogICAg
IFN0cmluZyBtX3BlbmRpbmdTY3JpcHRUb0V2YWx1YXRlT25Mb2FkT25jZTsKICAgICBTdHJpbmcg
bV9zY3JpcHRUb0V2YWx1YXRlT25Mb2FkT25jZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGE1ODZlZGYzZmQ0MTA4YzlkMDc5MmMwYmRm
ZWJlMWU4M2ZhZmY4NmEuLmMxZTYyNzUzZDIxOWRhYTk2MDA3OTBiNjViYjcxOGM4NDNmOGNmOWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcApA
QCAtNDAsMTMgKzQwLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxQ
YWdlRGVidWdnZXJBZ2VudD4gUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5n
QWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3Rh
dGUsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyKQorUGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2VudD4gUGFnZURlYnVnZ2Vy
QWdlbnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJ
bnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIEluamVj
dGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JPdmVybGF5
KiBvdmVybGF5KQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGFnZURlYnVnZ2VyQWdlbnQo
aW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUsIGluc3BlY3RlZFBhZ2UsIGluamVj
dGVkU2NyaXB0TWFuYWdlcikpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGFnZURlYnVnZ2Vy
QWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUsIGluc3BlY3RlZFBhZ2Us
IGluamVjdGVkU2NyaXB0TWFuYWdlciwgb3ZlcmxheSkpOwogfQogCi1QYWdlRGVidWdnZXJBZ2Vu
dDo6UGFnZURlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cywgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBQYWdlKiBpbnNwZWN0ZWRQYWdl
LCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlcikKLSAgICA6IElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUs
IGluamVjdGVkU2NyaXB0TWFuYWdlcikKK1BhZ2VEZWJ1Z2dlckFnZW50OjpQYWdlRGVidWdnZXJB
Z2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JT
dGF0ZSogaW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIEluamVjdGVkU2NyaXB0
TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5
KQorICAgIDogSW5zcGVjdG9yRGVidWdnZXJBZ2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnNw
ZWN0b3JTdGF0ZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBvdmVybGF5KQogICAgICwgbV9pbnNw
ZWN0ZWRQYWdlKGluc3BlY3RlZFBhZ2UpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9QYWdlRGVidWdnZXJBZ2VudC5oCmluZGV4IDlkYmQ1MTNmOWYxYTI4YmI5ODQyNDkxMzU3ODE0
ODZjNzNjMzI2MTguLjYyNGM3NDAyYTUwZTQxYzM5ZmZlMDM3MjE1ZjI4NDE5MzUxMmM1MDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oCkBAIC00NCw3
ICs0NCw3IEBAIGNsYXNzIFBhZ2VEZWJ1Z2dlckFnZW50IDogcHVibGljIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VEZWJ1Z2dlckFnZW50KTsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093
blB0cjxQYWdlRGVidWdnZXJBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNw
ZWN0b3JTdGF0ZSosIFBhZ2UqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKKyAgICBzdGF0aWMg
UGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMq
LCBJbnNwZWN0b3JTdGF0ZSosIFBhZ2UqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0
b3JPdmVybGF5Kik7CiAgICAgdmlydHVhbCB+UGFnZURlYnVnZ2VyQWdlbnQoKTsKIAogcHJpdmF0
ZToKQEAgLTU2LDcgKzU2LDkgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgSW5qZWN0ZWRTY3Jp
cHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nKiwgY29uc3QgaW50KiBleGVjdXRp
b25Db250ZXh0SWQpOwogCi0gICAgUGFnZURlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50
cyosIEluc3BlY3RvclN0YXRlKiwgUGFnZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciopOworICAg
IHZpcnR1YWwgYm9vbCBpc1BhZ2VEZWJ1Z2dlckFnZW50KCkgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgUGFnZURlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclN0YXRl
KiwgUGFnZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3Rvck92ZXJsYXkqKTsKICAg
ICBQYWdlKiBjb25zdCBtX2luc3BlY3RlZFBhZ2U7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvV29ya2VyRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggYzc1YWY0YTZlNGMwZjRl
OTk2ZjM1ZDhhM2E3ODkxNjE1MzE3MTYyZi4uMTU4OWZjMzBmNDU2NGQ5M2UyN2JmMjdlYWI1NTc1
ZDRiNjA2YTUxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckRl
YnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJEZWJ1
Z2dlckFnZW50LmNwcApAQCAtODYsNyArODYsNyBAQCBQYXNzT3duUHRyPFdvcmtlckRlYnVnZ2Vy
QWdlbnQ+IFdvcmtlckRlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKgog
fQogCiBXb3JrZXJEZWJ1Z2dlckFnZW50OjpXb3JrZXJEZWJ1Z2dlckFnZW50KEluc3RydW1lbnRp
bmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JT
dGF0ZSwgV29ya2VyQ29udGV4dCogaW5zcGVjdGVkV29ya2VyQ29udGV4dCwgSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCi0gICAgOiBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlLCBpbmplY3RlZFNjcmlw
dE1hbmFnZXIpCisgICAgOiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KGluc3RydW1lbnRpbmdBZ2Vu
dHMsIGluc3BlY3RvclN0YXRlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIDApCiAgICAgLCBtX3Nj
cmlwdERlYnVnU2VydmVyKGluc3BlY3RlZFdvcmtlckNvbnRleHQpCiAgICAgLCBtX2luc3BlY3Rl
ZFdvcmtlckNvbnRleHQoaW5zcGVjdGVkV29ya2VyQ29udGV4dCkKIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvV29ya2VyRGVidWdnZXJBZ2VudC5oCmluZGV4IDIwYzUwOWIxNGJjMTI1
MjM0MTFmNDE3NzZmMzY0Y2MyNTNjMmVmOGEuLjRlMmMzNzkxYjgyYjQzY2M2ZWY3MDMzYWI5Y2E2
MTAyNGY1YTU0YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJE
ZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckRlYnVn
Z2VyQWdlbnQuaApAQCAtNjAsNiArNjAsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBt
dXRlQ29uc29sZSgpOwogICAgIHZpcnR1YWwgdm9pZCB1bm11dGVDb25zb2xlKCk7CiAKKyAgICB2
aXJ0dWFsIGJvb2wgaXNQYWdlRGVidWdnZXJBZ2VudCgpIHsgcmV0dXJuIGZhbHNlOyB9CisKICAg
ICBXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlciBtX3NjcmlwdERlYnVnU2VydmVyOwogICAgIFdvcmtl
ckNvbnRleHQqIG1faW5zcGVjdGVkV29ya2VyQ29udGV4dDsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152506</attachid>
            <date>2012-07-16 03:47:27 -0700</date>
            <delta_ts>2012-07-16 06:49:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90880-20120716144724.patch</filename>
            <type>text/plain</type>
            <size>29239</size>
            <attacher name="Sergey Rogulenko">rogulenko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNjk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjExMjYyNzNjNjE5NTFk
MDMzZWYxOGZmZWUzZmRjYzM4NDViOWUxMi4uN2MxMmVkYzQ0NmVjMmQxNjdmZmUyMjg3MjlhZTIx
Mjk2OWU5MDk1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDEyLTA3LTE2ICBTZXJn
ZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogYWRkaW5nIHBhdXNlIGljb24gZm9yIEphdmFTY3JpcHQgZGVidWdnaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg4MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIGFkZGl0aW9uYWwgaW5m
b3JtYXRpb24geWV0LCBiZWNhdXNlIEkgYW0gbm90IHN1cmUgdGhpcyBpcyB0aGUgZmluYWwgdmVy
c2lvbi4KKworICAgICAgICAqIGluc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6SW5zcGVjdG9yT3ZlcmxheSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdPdXRsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvck92ZXJsYXk6OmdldEhpZ2hsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JP
dmVybGF5OjpzZXRIaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JPdmVybGF5OjpzZXRTaG91bGRTaG93UGF1c2VXYXJuaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3SGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3Rvck92ZXJsYXk6OmRyYXdQYXVzZVdhcm5pbmcpOgorICAgICAgICAqIGluc3BlY3Rvci9E
T01Ob2RlSGlnaGxpZ2h0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW5zcGVj
dG9yT3ZlcmxheSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpjcmVhdGUp
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZHJhd0hpZ2hsaWdodCk6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2VudCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRPTUFnZW50OjpoaWdobGlnaHRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRPTUFnZW50OjpoaWRlSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRP
TUFnZW50OjpnZXRIaWdobGlnaHQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JE
T01BZ2VudDo6Y3JlYXRlKToKKyAgICAgICAgKEluc3BlY3RvckRPTUFnZW50KToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpc2FibGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGF1c2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ29udGludWUpOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKEluc3BlY3RvckRlYnVnZ2VyQWdlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50
OjpJbnNwZWN0b3JQYWdlQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFn
ZW50OjpkcmF3SW5zcGVjdG9yT3ZlcmxheSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6ZGlkUGFpbnQpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjppbnNwZWN0b3JPdmVybGF5KToKKyAgICAgICAg
KEluc3BlY3RvclBhZ2VBZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFn
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50OjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZURlYnVnZ2VyQWdlbnQ6OlBhZ2VEZWJ1Z2dlckFnZW50KToK
KyAgICAgICAgKiBpbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKFBhZ2VE
ZWJ1Z2dlckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50Ojppc1Bh
Z2VEZWJ1Z2dlckFnZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvV29ya2VyRGVidWdnZXJBZ2Vu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJEZWJ1Z2dlckFnZW50OjpXb3JrZXJEZWJ1
Z2dlckFnZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvV29ya2VyRGVidWdnZXJBZ2VudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyRGVidWdnZXJBZ2VudDo6aXNQYWdlRGVidWdnZXJBZ2Vu
dCk6CisgICAgICAgIChXb3JrZXJEZWJ1Z2dlckFnZW50KToKKwogMjAxMi0wNy0xNSAgTWlrZSBM
YXd0aGVyICA8bWlrZWxhd3RoZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEZpeCBjYWxjdWxh
dGlvbiBvZiByZ2JhJ3MgYWxwaGEgaW4gQ1NTIGN1c3RvbSB0ZXh0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwCmluZGV4IGU0YzcxMDBkNjFjNTIw
ODNmMzgyNzFmMmE3Mjc1NDc1NDY4ZWRiMmMuLjU4ZTgzM2I3NDA0ZTFlZDE3OTdjNTBlN2YxN2M2
MjUzZWY1MDcyNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2Rl
SGlnaGxpZ2h0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGln
aGxpZ2h0ZXIuY3BwCkBAIC0zOSw2ICszOSw4IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgor
I2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvclBhZ2VBZ2Vu
dC5oIgogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmFu
Z2UuaCIKQEAgLTQ4NSwyMSArNDg3LDI5IEBAIHN0YXRpYyB2b2lkIGdldE9yRHJhd1JlY3RIaWdo
bGlnaHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBEb2N1bWVudCogZG9jdW1lbnQsCiAKIH0g
Ly8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi1uYW1lc3BhY2UgRE9NTm9kZUhpZ2hsaWdodGVyIHsK
K0luc3BlY3Rvck92ZXJsYXk6Okluc3BlY3Rvck92ZXJsYXkoSW5zcGVjdG9yUGFnZUFnZW50KiBw
YWdlQWdlbnQsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQorICAgIDogbV9wYWdlQWdlbnQocGFn
ZUFnZW50KQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9zaG91bGRTaG93UGF1c2VX
YXJuaW5nKGZhbHNlKQorICAgICwgbV9kb2N1bWVudCgwKQorICAgICwgbV9oaWdobGlnaHREYXRh
KDApIHsgfQogCi12b2lkIGRyYXdIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBE
b2N1bWVudCogZG9jdW1lbnQsIEhpZ2hsaWdodERhdGEqIGhpZ2hsaWdodERhdGEpCit2b2lkIElu
c3BlY3Rvck92ZXJsYXk6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIGlm
ICghaGlnaGxpZ2h0RGF0YSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2hpZ2hsaWdodERh
dGEpCisgICAgICAgIGRyYXdIaWdobGlnaHQoY29udGV4dCk7CisgICAgZWxzZQorICAgIGlmICht
X3Nob3VsZFNob3dQYXVzZVdhcm5pbmcpCisgICAgICAgIGRyYXdQYXVzZVdhcm5pbmcoY29udGV4
dCk7Cit9CiAKLSAgICBIaWdobGlnaHQgaGlnaGxpZ2h0OwotICAgIGlmIChoaWdobGlnaHREYXRh
LT5ub2RlKQotICAgICAgICBnZXRPckRyYXdOb2RlSGlnaGxpZ2h0KCZjb250ZXh0LCBoaWdobGln
aHREYXRhLCAmaGlnaGxpZ2h0KTsKLSAgICBlbHNlIGlmIChoaWdobGlnaHREYXRhLT5yZWN0KQot
ICAgICAgICBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0KCZjb250ZXh0LCBkb2N1bWVudCwgaGlnaGxp
Z2h0RGF0YSwgJmhpZ2hsaWdodCk7Cit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdPdXRsaW5l
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQoreworICAgIEZsb2F0UmVjdCBvdXRsaW5lUmVjdCA9IHJlY3Q7CisgICAg
ZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBvdXRsaW5lUmVjdCwgQ29sb3IoKSwgY29sb3IpOwog
fQogCi12b2lkIGdldEhpZ2hsaWdodChEb2N1bWVudCogZG9jdW1lbnQsIEhpZ2hsaWdodERhdGEq
IGhpZ2hsaWdodERhdGEsIEhpZ2hsaWdodCogaGlnaGxpZ2h0KQordm9pZCBJbnNwZWN0b3JPdmVy
bGF5OjpnZXRIaWdobGlnaHQoRG9jdW1lbnQqIGRvY3VtZW50LCBIaWdobGlnaHREYXRhKiBoaWdo
bGlnaHREYXRhLCBIaWdobGlnaHQqIGhpZ2hsaWdodCkKIHsKICAgICBpZiAoIWhpZ2hsaWdodERh
dGEpCiAgICAgICAgIHJldHVybjsKQEAgLTUxNiwxMyArNTI2LDc4IEBAIHZvaWQgZ2V0SGlnaGxp
Z2h0KERvY3VtZW50KiBkb2N1bWVudCwgSGlnaGxpZ2h0RGF0YSogaGlnaGxpZ2h0RGF0YSwgSGln
aGxpZ2h0KiBoCiAgICAgICAgIGdldE9yRHJhd1JlY3RIaWdobGlnaHQoMCwgZG9jdW1lbnQsIGhp
Z2hsaWdodERhdGEsIGhpZ2hsaWdodCk7CiB9CiAKLXZvaWQgZHJhd091dGxpbmUoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IpCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnNldEhpZ2hsaWdodChEb2N1bWVudCogZG9jdW1l
bnQsIEhpZ2hsaWdodERhdGEqIGhpZ2hsaWdodERhdGEpCiB7Ci0gICAgRmxvYXRSZWN0IG91dGxp
bmVSZWN0ID0gcmVjdDsKLSAgICBkcmF3T3V0bGluZWRRdWFkKGNvbnRleHQsIG91dGxpbmVSZWN0
LCBDb2xvcigpLCBjb2xvcik7CisgICAgaWYgKGRvY3VtZW50ICYmIGhpZ2hsaWdodERhdGEgJiYg
KGhpZ2hsaWdodERhdGEtPm5vZGUgfHwgaGlnaGxpZ2h0RGF0YS0+cmVjdCkpIHsKKyAgICAgICAg
bV9kb2N1bWVudCA9IGhpZ2hsaWdodERhdGEtPm5vZGUgPyBoaWdobGlnaHREYXRhLT5ub2RlLT5k
b2N1bWVudCgpIDogZG9jdW1lbnQ7CisgICAgICAgIG1faGlnaGxpZ2h0RGF0YSA9IGhpZ2hsaWdo
dERhdGE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9kb2N1bWVudCA9IDA7CisgICAgICAgIG1f
aGlnaGxpZ2h0RGF0YSA9IDA7CisgICAgfQorICAgIHVwZGF0ZSgpOworfQorCit2b2lkIEluc3Bl
Y3Rvck92ZXJsYXk6OnNldFNob3VsZFNob3dQYXVzZVdhcm5pbmcoYm9vbCBzaG91bGRTaG93UGF1
c2VXYXJuaW5nKQoreworICAgIG1fc2hvdWxkU2hvd1BhdXNlV2FybmluZyA9IHNob3VsZFNob3dQ
YXVzZVdhcm5pbmc7CisgICAgdXBkYXRlKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6
dXBkYXRlKCkKK3sKKyAgICBpZiAobV9jbGllbnQpIHsKKyAgICAgICAgaWYgKG1faGlnaGxpZ2h0
RGF0YSB8fCBtX3Nob3VsZFNob3dQYXVzZVdhcm5pbmcpCisgICAgICAgICAgICBtX2NsaWVudC0+
aGlnaGxpZ2h0KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY2xpZW50LT5oaWRlSGln
aGxpZ2h0KCk7CisgICAgfQogfQogCi19IC8vIG5hbWVzcGFjZSBET01Ob2RlSGlnaGxpZ2h0ZXIK
K3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0hpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCit7CisgICAgaWYgKCFtX2hpZ2hsaWdodERhdGEpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEhpZ2hsaWdodCBoaWdobGlnaHQ7CisgICAgaWYgKG1faGlnaGxpZ2h0RGF0YS0+bm9kZSkK
KyAgICAgICAgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdodCgmY29udGV4dCwgbV9oaWdobGlnaHREYXRh
LCAmaGlnaGxpZ2h0KTsKKyAgICBlbHNlIGlmIChtX2hpZ2hsaWdodERhdGEtPnJlY3QpCisgICAg
ICAgIGdldE9yRHJhd1JlY3RIaWdobGlnaHQoJmNvbnRleHQsIG1fZG9jdW1lbnQsIG1faGlnaGxp
Z2h0RGF0YSwgJmhpZ2hsaWdodCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd1Bh
dXNlV2FybmluZyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChDb2xvciwgYmFja2dyb3VuZENvbG9yLCAoMCwgMCwgMCwgMzEpKTsKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKENvbG9yLCB0ZXh0QmFja2dyb3VuZENvbG9yLCAoMjU1LCAyNTUsIDE5
NCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIGJvcmRlckNvbG9yLCAoMTI4LCAx
MjgsIDEyOCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoaW50LCBmb250SGVpZ2h0LCAoMjQp
KTsKKworICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZUFnZW50LT5tYWluRnJhbWUoKTsKKyAgICBT
ZXR0aW5ncyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsKKyAgICBJbnRSZWN0IHZpc2li
bGVSZWN0ID0gZnJhbWUtPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisKKyAgICBjb250
ZXh0LnNldEZpbGxDb2xvcihiYWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwor
ICAgIGNvbnRleHQuZHJhd1JlY3QodmlzaWJsZVJlY3QpOworCisgICAgRm9udERlc2NyaXB0aW9u
IGRlc2M7CisgICAgc2V0VXBGb250RGVzY3JpcHRpb24oZGVzYywgc2V0dGluZ3MpOworICAgIGRl
c2Muc2V0Q29tcHV0ZWRTaXplKGZvbnRIZWlnaHQpOworICAgIEZvbnQgZm9udCA9IEZvbnQoZGVz
YywgMCwgMCk7CisgICAgZm9udC51cGRhdGUoMCk7CisKKyAgICBTdHJpbmcgdGV4dCA9ICJUaGUg
ZGVidWdnZXIgaXMgcGF1c2VkLiI7CisgICAgVGV4dFJ1biB0ZXh0UnVuKHRleHQpOworICAgIElu
dFJlY3QgdGl0bGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmb250LnNlbGVjdGlvblJlY3RGb3JU
ZXh0KHRleHRSdW4sIEludFBvaW50KCksIGZvbnRIZWlnaHQpKTsKKyAgICB0aXRsZVJlY3QuaW5m
bGF0ZShyZWN0SW5mbGF0ZVB4KTsKKyAgICB0aXRsZVJlY3Quc2V0TG9jYXRpb24oSW50UG9pbnQo
dmlzaWJsZVJlY3Qud2lkdGgoKSAvIDIgLSB0aXRsZVJlY3Qud2lkdGgoKSAvIDIsIDApKTsKKwor
ICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRleHRCYWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2VE
ZXZpY2VSR0IpOworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoYm9yZGVyQ29sb3IsIENvbG9y
U3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJhd1JlY3QodGl0bGVSZWN0KTsKKyAgICBj
b250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IpOwor
ICAgIGNvbnRleHQuZHJhd1RleHQoZm9udCwgdGV4dFJ1biwgSW50UG9pbnQodGl0bGVSZWN0Lngo
KSArIHJlY3RJbmZsYXRlUHgsIHRpdGxlUmVjdC55KCkgKyBmb250SGVpZ2h0KSk7Cit9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0RPTU5vZGVIaWdobGlnaHRlci5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5v
ZGVIaWdobGlnaHRlci5oCmluZGV4IGY3YjZmMDBmNGZmZTAyNTkxMzU1MjU0ZGZlMTkzZDAzMDYy
Y2UzZDkuLjA4Y2M3ODAyMTBkN2ZkNTI3MmZhOTNhM2ExMjdlY2Q2MWFiODJiNGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmgKQEAgLTM0LDYgKzM0
LDcgQEAKICNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgogCiAjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNDMsNiArNDQsMTAgQEAgY2xhc3MgQ29sb3I7
CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEZyYW1lVmlldzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4
dDsKK2NsYXNzIEluc3BlY3RvckNsaWVudDsKK2NsYXNzIEluc3BlY3RvclBhZ2VBZ2VudDsKK2Ns
YXNzIEludFJlY3Q7CitjbGFzcyBJbnRTaXplOwogY2xhc3MgTm9kZTsKIAogc3RydWN0IEhpZ2hs
aWdodERhdGEgewpAQCAtNzUsMTMgKzgwLDMzIEBAIHN0cnVjdCBIaWdobGlnaHQgewogICAgIFZl
Y3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwogfTsKIAotbmFtZXNwYWNlIERPTU5vZGVIaWdobGlnaHRl
ciB7Ci0KLXZvaWQgZHJhd0hpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmLCBEb2N1bWVudCosIEhp
Z2hsaWdodERhdGEqKTsKLXZvaWQgZ2V0SGlnaGxpZ2h0KERvY3VtZW50KiwgSGlnaGxpZ2h0RGF0
YSosIEhpZ2hsaWdodCopOwotdm9pZCBkcmF3T3V0bGluZShHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBMYXlvdXRSZWN0JiwgY29uc3QgQ29sb3ImKTsKLQotfSAvLyBuYW1lc3BhY2UgRE9NTm9kZUhp
Z2hsaWdodGVyCitjbGFzcyBJbnNwZWN0b3JPdmVybGF5IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxJbnNwZWN0b3JPdmVybGF5PiBjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiBw
YWdlQWdlbnQsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JPdmVybGF5KHBhZ2VBZ2VudCwgY2xpZW50KSk7CisgICAg
fQorICAgIAorICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmKTsKKyAgICB2b2lkIGRyYXdP
dXRsaW5lKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3QmLCBjb25zdCBDb2xvciYp
OworICAgIHZvaWQgZ2V0SGlnaGxpZ2h0KERvY3VtZW50KiwgSGlnaGxpZ2h0RGF0YSosIEhpZ2hs
aWdodCopOworICAgIAorICAgIHZvaWQgc2V0SGlnaGxpZ2h0KERvY3VtZW50KiwgSGlnaGxpZ2h0
RGF0YSopOworICAgIHZvaWQgc2V0U2hvdWxkU2hvd1BhdXNlV2FybmluZyhib29sKTsKKworcHJp
dmF0ZToKKyAgICBJbnNwZWN0b3JPdmVybGF5KEluc3BlY3RvclBhZ2VBZ2VudCosIEluc3BlY3Rv
ckNsaWVudCopOworCisgICAgdm9pZCB1cGRhdGUoKTsKKyAgICB2b2lkIGRyYXdIaWdobGlnaHQo
R3JhcGhpY3NDb250ZXh0Jik7CisgICAgdm9pZCBkcmF3UGF1c2VXYXJuaW5nKEdyYXBoaWNzQ29u
dGV4dCYpOworCisgICAgSW5zcGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKKyAgICBJbnNw
ZWN0b3JDbGllbnQqIG1fY2xpZW50OworICAgIGJvb2wgbV9zaG91bGRTaG93UGF1c2VXYXJuaW5n
OworICAgIERvY3VtZW50KiBtX2RvY3VtZW50OworICAgIEhpZ2hsaWdodERhdGEqIG1faGlnaGxp
Z2h0RGF0YTsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDA5NWUxY2M1MWIz
NTRhOGY4ZTA4MTQ2YTc5ZWY3MDhkYjdjZDQ5Y2UuLmQwYmI1MTg4MDA5Yzc0OTM3ZmVhYTkzN2Zk
ZjgwYjMzMmNmNTJiZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkluc3BlY3Rv
ckNvbnRyb2xsZXIuaCIKIAorI2luY2x1ZGUgIkRPTU5vZGVIaWdobGlnaHRlci5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSWRl
bnRpZmllcnNGYWN0b3J5LmgiCkBAIC05MCw3ICs5MSw3IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6
Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0
b3JDCiAgICAgbV9wYWdlQWdlbnQgPSBwYWdlQWdlbnRQdHIuZ2V0KCk7CiAgICAgbV9hZ2VudHMu
YXBwZW5kKHBhZ2VBZ2VudFB0ci5yZWxlYXNlKCkpOwogCi0gICAgT3duUHRyPEluc3BlY3RvckRP
TUFnZW50PiBkb21BZ2VudFB0cihJbnNwZWN0b3JET01BZ2VudDo6Y3JlYXRlKG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5nZXQoKSwgcGFnZUFnZW50LCBpbnNwZWN0b3JDbGllbnQsIG1fc3RhdGUuZ2V0
KCksIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpKSk7CisgICAgT3duUHRyPEluc3BlY3Rv
ckRPTUFnZW50PiBkb21BZ2VudFB0cihJbnNwZWN0b3JET01BZ2VudDo6Y3JlYXRlKG1faW5zdHJ1
bWVudGluZ0FnZW50cy5nZXQoKSwgcGFnZUFnZW50LCBtX3N0YXRlLmdldCgpLCBtX2luamVjdGVk
U2NyaXB0TWFuYWdlci5nZXQoKSkpOwogICAgIG1fZG9tQWdlbnQgPSBkb21BZ2VudFB0ci5nZXQo
KTsKICAgICBtX2FnZW50cy5hcHBlbmQoZG9tQWdlbnRQdHIucmVsZWFzZSgpKTsKIApAQCAtMTMw
LDcgKzEzMSw3IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFn
ZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDCiAgICAgbV9hZ2VudHMuYXBwZW5k
KGNvbnNvbGVBZ2VudFB0ci5yZWxlYXNlKCkpOwogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCi0gICAgT3duUHRyPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+IGRlYnVnZ2VyQWdlbnRQ
dHIoUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCks
IG1fc3RhdGUuZ2V0KCksIHBhZ2UsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpKSk7Cisg
ICAgT3duUHRyPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+IGRlYnVnZ2VyQWdlbnRQdHIoUGFnZURl
YnVnZ2VyQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1fc3RhdGUu
Z2V0KCksIHBhZ2UsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpLCBtX3BhZ2VBZ2VudC0+
aW5zcGVjdG9yT3ZlcmxheSgpKSk7CiAgICAgbV9kZWJ1Z2dlckFnZW50ID0gZGVidWdnZXJBZ2Vu
dFB0ci5nZXQoKTsKICAgICBtX2FnZW50cy5hcHBlbmQoZGVidWdnZXJBZ2VudFB0ci5yZWxlYXNl
KCkpOwogCkBAIC0yOTQsNyArMjk1LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpldmFs
dWF0ZUZvclRlc3RJbkZyb250ZW5kKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHMKIAogdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkcmF3SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKIHsKLSAgICBtX2RvbUFnZW50LT5kcmF3SGlnaGxpZ2h0KGNvbnRleHQpOwor
ICAgIG1fcGFnZUFnZW50LT5kcmF3SW5zcGVjdG9yT3ZlcmxheShjb250ZXh0KTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRIaWdobGlnaHQoSGlnaGxpZ2h0KiBoaWdobGlnaHQp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9N
QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNw
cAppbmRleCA5MDc5NTg5ZTUxY2U4ZjA4ZTUwZTIwNmU0OWExMzI2YmU5NWMzMDEyLi45ZTc1ZjY4
MTBkNTk0ZDcyMGQ3ZjEyOTgxM2FhYzgwZTg3NzM3MWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTY2LDcgKzY2LDYgQEAKICNpbmNs
dWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllcnNGYWN0b3J5LmgiCiAj
aW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKICNpbmNsdWRlICJJbnNwZWN0
b3JIaXN0b3J5LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUGFnZUFnZW50LmgiCkBAIC0xOTQsMTEg
KzE5MywxMSBAQCBTdHJpbmcgSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcoY29uc3Qg
RXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgcmV0dXJuICIiOwogfQogCi1JbnNwZWN0b3JET01BZ2Vu
dDo6SW5zcGVjdG9yRE9NQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cywgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIEluc3BlY3RvckNsaWVudCogY2xp
ZW50LCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdl
ciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQorSW5zcGVjdG9yRE9NQWdlbnQ6Okluc3BlY3RvckRP
TUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3Rv
clBhZ2VBZ2VudCogcGFnZUFnZW50LCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIElu
amVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQogICAgIDogSW5zcGVj
dG9yQmFzZUFnZW50PEluc3BlY3RvckRPTUFnZW50PigiRE9NIiwgaW5zdHJ1bWVudGluZ0FnZW50
cywgaW5zcGVjdG9yU3RhdGUpCiAgICAgLCBtX3BhZ2VBZ2VudChwYWdlQWdlbnQpCi0gICAgLCBt
X2NsaWVudChjbGllbnQpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlcihpbmplY3RlZFNj
cmlwdE1hbmFnZXIpCisgICAgLCBtX292ZXJsYXkocGFnZUFnZW50LT5pbnNwZWN0b3JPdmVybGF5
KCkpCiAgICAgLCBtX2Zyb250ZW5kKDApCiAgICAgLCBtX2RvbUxpc3RlbmVyKDApCiAgICAgLCBt
X2xhc3ROb2RlSWQoMSkKQEAgLTEwMzYsNyArMTAzNSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmhpZ2hsaWdodCgpCiB7CiAgICAgLy8gVGhpcyBtZXRob2QgcmVxdWlyZXMgbV9oaWdobGln
aHREYXRhIHRvIGhhdmUgYmVlbiBmaWxsZWQgaW4gYnkgaXRzIGNsaWVudC4KICAgICBBU1NFUlQo
bV9oaWdobGlnaHREYXRhKTsKLSAgICBtX2NsaWVudC0+aGlnaGxpZ2h0KCk7CisgICAgbV9vdmVy
bGF5LT5zZXRIaWdobGlnaHQobV9kb2N1bWVudC5nZXQoKSwgbV9oaWdobGlnaHREYXRhLmdldCgp
KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0UmVjdChFcnJvclN0cmlu
ZyosIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiogY29sb3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBvdXRs
aW5lQ29sb3IpCkBAIC0xMDQ1LDcgKzEwNDQsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpo
aWdobGlnaHRSZWN0KEVycm9yU3RyaW5nKiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludAog
ICAgIG1faGlnaGxpZ2h0RGF0YS0+cmVjdCA9IGFkb3B0UHRyKG5ldyBJbnRSZWN0KHgsIHksIHdp
ZHRoLCBoZWlnaHQpKTsKICAgICBtX2hpZ2hsaWdodERhdGEtPmNvbnRlbnQgPSBwYXJzZUNvbG9y
KGNvbG9yKTsKICAgICBtX2hpZ2hsaWdodERhdGEtPmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb2xv
cihvdXRsaW5lQ29sb3IpOwotICAgIG1fY2xpZW50LT5oaWdobGlnaHQoKTsKKyAgICBoaWdobGln
aHQoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Tm9kZSgKQEAgLTEw
ODQsNyArMTA4Myw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZGVIaWdobGlnaHQoRXJy
b3JTdHJpbmcqKQogICAgICAgICBtX2hpZ2hsaWdodERhdGEtPm5vZGUuY2xlYXIoKTsKICAgICAg
ICAgbV9oaWdobGlnaHREYXRhLT5yZWN0LmNsZWFyKCk7CiAgICAgfQotICAgIG1fY2xpZW50LT5o
aWRlSGlnaGxpZ2h0KCk7CisgICAgaGlnaGxpZ2h0KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6Om1vdmVUbyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGludCB0
YXJnZXRFbGVtZW50SWQsIGNvbnN0IGludCogY29uc3QgYW5jaG9yTm9kZUlkLCBpbnQqIG5ld05v
ZGVJZCkKQEAgLTE1OTksMjAgKzE1OTgsMTIgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0PiBJbnNwZWN0b3JET01BZ2VudDo6cmVzb2x2ZU5vZGUoTm8KICAg
ICByZXR1cm4gaW5qZWN0ZWRTY3JpcHQud3JhcE5vZGUobm9kZSwgb2JqZWN0R3JvdXApOwogfQog
Ci12b2lkIEluc3BlY3RvckRPTUFnZW50OjpkcmF3SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKLXsKLSAgICBpZiAoIW1faGlnaGxpZ2h0RGF0YSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgRE9NTm9kZUhpZ2hsaWdodGVyOjpkcmF3SGlnaGxpZ2h0KGNvbnRleHQsIG1f
aGlnaGxpZ2h0RGF0YS0+bm9kZSA/IG1faGlnaGxpZ2h0RGF0YS0+bm9kZS0+ZG9jdW1lbnQoKSA6
IG1fZG9jdW1lbnQuZ2V0KCksIG1faGlnaGxpZ2h0RGF0YS5nZXQoKSk7Ci19Ci0KIHZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OmdldEhpZ2hsaWdodChIaWdobGlnaHQqIGhpZ2hsaWdodCkgY29uc3QK
IHsKICAgICBpZiAoIW1faGlnaGxpZ2h0RGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRE9N
Tm9kZUhpZ2hsaWdodGVyOjpnZXRIaWdobGlnaHQobV9oaWdobGlnaHREYXRhLT5ub2RlID8gbV9o
aWdobGlnaHREYXRhLT5ub2RlLT5kb2N1bWVudCgpIDogbV9kb2N1bWVudC5nZXQoKSwgbV9oaWdo
bGlnaHREYXRhLmdldCgpLCBoaWdobGlnaHQpOworICAgIG1fb3ZlcmxheS0+Z2V0SGlnaGxpZ2h0
KG1faGlnaGxpZ2h0RGF0YS0+bm9kZSA/IG1faGlnaGxpZ2h0RGF0YS0+bm9kZS0+ZG9jdW1lbnQo
KSA6IG1fZG9jdW1lbnQuZ2V0KCksIG1faGlnaGxpZ2h0RGF0YS5nZXQoKSwgaGlnaGxpZ2h0KTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCBiMDVhYjU3MGQ5ZmQxYjA0ODcwNmEzOTNhMjQ2NjU5
N2I0OTYzOWJmLi40MWVjZWEwZDIxMTk3NWQ4Y2RlZTEwZWY1OTRlMTgwOTQ0NjhhYmRhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaApAQCAtNTYsOSAr
NTYsOSBAQCBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBFdmVudDsKIGNs
YXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEluc3BlY3RvckNsaWVudDsKIGNsYXNzIEluc3Bl
Y3RvckZyb250ZW5kOwogY2xhc3MgSW5zcGVjdG9ySGlzdG9yeTsKK2NsYXNzIEluc3BlY3Rvck92
ZXJsYXk7CiBjbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3Mg
SGl0VGVzdFJlc3VsdDsKQEAgLTEwMyw5ICsxMDMsOSBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRNb2RpZnlET01BdHRyKEVsZW1lbnQqKSA9IDA7CiAgICAgfTsKIAotICAgIHN0
YXRpYyBQYXNzT3duUHRyPEluc3BlY3RvckRPTUFnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQs
IEluc3BlY3RvckNsaWVudCogY2xpZW50LCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUs
IEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQorICAgIHN0YXRp
YyBQYXNzT3duUHRyPEluc3BlY3RvckRPTUFnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50
cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIElu
c3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmpl
Y3RlZFNjcmlwdE1hbmFnZXIpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IElu
c3BlY3RvckRPTUFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIHBhZ2VBZ2VudCwgY2xpZW50LCBp
bnNwZWN0b3JTdGF0ZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKSk7CisgICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgSW5zcGVjdG9yRE9NQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgcGFnZUFn
ZW50LCBpbnNwZWN0b3JTdGF0ZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKSk7CiAgICAgfQogCiAg
ICAgc3RhdGljIFN0cmluZyB0b0Vycm9yU3RyaW5nKGNvbnN0IEV4Y2VwdGlvbkNvZGUmKTsKQEAg
LTE4NSw3ICsxODUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnNwZWN0KE5vZGUqKTsKICAgICB2
b2lkIGZvY3VzTm9kZSgpOwogCi0gICAgdm9pZCBkcmF3SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogICAgIHZvaWQgZ2V0SGlnaGxpZ2h0KEhpZ2hsaWdodCopIGNvbnN0OwogCiAg
ICAgSW5zcGVjdG9ySGlzdG9yeSogaGlzdG9yeSgpIHsgcmV0dXJuIG1faGlzdG9yeS5nZXQoKTsg
fQpAQCAtMjA1LDcgKzIwNCw3IEBAIHB1YmxpYzoKICAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIHBh
Z2VBZ2VudCgpIHsgcmV0dXJuIG1fcGFnZUFnZW50OyB9CiAKIHByaXZhdGU6Ci0gICAgSW5zcGVj
dG9yRE9NQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclBhZ2VBZ2VudCosIElu
c3BlY3RvckNsaWVudCosIEluc3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKik7
CisgICAgSW5zcGVjdG9yRE9NQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclBh
Z2VBZ2VudCosIEluc3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKik7CiAKICAg
ICB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkLCBJbnNwZWN0b3JPYmplY3Qq
IGhpZ2hsaWdodENvbmZpZyk7CiAgICAgYm9vbCBzZXRIaWdobGlnaHREYXRhRnJvbUNvbmZpZyhJ
bnNwZWN0b3JPYmplY3QqIGhpZ2hsaWdodENvbmZpZyk7CkBAIC0yNDEsOCArMjQwLDggQEAgcHJp
dmF0ZToKICNlbmRpZgogCiAgICAgSW5zcGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKLSAg
ICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50OwogICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciog
bV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CisgICAgSW5zcGVjdG9yT3ZlcmxheSogbV9vdmVybGF5
OwogICAgIEluc3BlY3RvckZyb250ZW5kOjpET00qIG1fZnJvbnRlbmQ7CiAgICAgRE9NTGlzdGVu
ZXIqIG1fZG9tTGlzdGVuZXI7CiAgICAgTm9kZVRvSWRNYXAgbV9kb2N1bWVudE5vZGVUb0lkTWFw
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuY3BwCmluZGV4IDExODA3YTNmOWU4Nzk4NDBkZWE2MDNiMzY2M2UyMDlhZmNlZDcyYzguLmJk
YzE1M2I4M2VlOWQzNDkxOTRjZjVmM2JlMmFjZmMwNDA3ZTk4MTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKQEAgLTMzLDYg
KzMzLDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgiCiAKICNpbmNsdWRl
ICJDb250ZW50U2VhcmNoVXRpbHMuaCIKKyNpbmNsdWRlICJET01Ob2RlSGlnaGxpZ2h0ZXIuaCIK
ICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0TWFu
YWdlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCkBAIC02MCwxMCArNjEsMTEg
QEAgc3RhdGljIGNvbnN0IGNoYXIgcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZVtdID0gInBhdXNlT25F
eGNlcHRpb25zU3RhdGUiOwogCiBjb25zdCBjaGFyKiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpi
YWNrdHJhY2VPYmplY3RHcm91cCA9ICJiYWNrdHJhY2Utb2JqZWN0LWdyb3VwIjsKIAotSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUs
IEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQorSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIElu
amVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JPdmVy
bGF5KiBvdmVybGF5KQogICAgIDogSW5zcGVjdG9yQmFzZUFnZW50PEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ+KCJEZWJ1Z2dlciIsIGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlKQog
ICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQogICAg
ICwgbV9mcm9udGVuZCgwKQorICAgICwgbV9vdmVybGF5KG92ZXJsYXkpCiAgICAgLCBtX3BhdXNl
ZFNjcmlwdFN0YXRlKDApCiAgICAgLCBtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZChmYWxzZSkK
ICAgICAsIG1fbGlzdGVuZXIoMCkKQEAgLTEwMyw2ICsxMDUsOCBAQCB2b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmRpc2FibGUoKQogCiAgICAgaWYgKG1fbGlzdGVuZXIpCiAgICAgICAgIG1f
bGlzdGVuZXItPmRlYnVnZ2VyV2FzRGlzYWJsZWQoKTsKKyAgICBpZiAoaXNQYWdlRGVidWdnZXJB
Z2VudCgpKQorICAgICAgICBtX292ZXJsYXktPnNldFNob3VsZFNob3dQYXVzZVdhcm5pbmcoZmFs
c2UpOwogfQogCiBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVuYWJsZWQoKQpAQCAtNjU3
LDYgKzY2MSw4IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGF1c2UoU2NyaXB0
U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBTY3JpcHRWYWx1CiAgICAgICAgIH0KICAgICB9CiAK
KyAgICBpZiAoaXNQYWdlRGVidWdnZXJBZ2VudCgpKQorICAgICAgICBtX292ZXJsYXktPnNldFNo
b3VsZFNob3dQYXVzZVdhcm5pbmcodHJ1ZSk7CiAgICAgbV9mcm9udGVuZC0+cGF1c2VkKGN1cnJl
bnRDYWxsRnJhbWVzKCksIG1fYnJlYWtSZWFzb24sIG1fYnJlYWtBdXhEYXRhKTsKICAgICBtX2ph
dmFTY3JpcHRQYXVzZVNjaGVkdWxlZCA9IGZhbHNlOwogCkBAIC02NzEsNiArNjc3LDggQEAgdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSgpCiAgICAgbV9wYXVzZWRTY3Jp
cHRTdGF0ZSA9IDA7CiAgICAgbV9jdXJyZW50Q2FsbFN0YWNrID0gU2NyaXB0VmFsdWUoKTsKICAg
ICBjbGVhckJyZWFrRGV0YWlscygpOworICAgIGlmIChpc1BhZ2VEZWJ1Z2dlckFnZW50KCkpCisg
ICAgICAgIG1fb3ZlcmxheS0+c2V0U2hvdWxkU2hvd1BhdXNlV2FybmluZyhmYWxzZSk7CiAgICAg
bV9mcm9udGVuZC0+cmVzdW1lZCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAppbmRleCAwOWM5N2QxOTUzZTRiOWIwMDE2MWY4
NzRmNDUzMWZiZGVjN2RiNmNkLi4wNGU4ZDlhOWUzZWZlM2M2YjFlN2FkMmY5NDlmNzExNGFhM2My
ODQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50LmgKQEAgLTUwLDYgKzUwLDcgQEAgY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwog
Y2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CiBjbGFzcyBJbnNwZWN0b3JBcnJheTsKIGNsYXNzIElu
c3BlY3Rvck9iamVjdDsKK2NsYXNzIEluc3BlY3Rvck92ZXJsYXk7CiBjbGFzcyBJbnNwZWN0b3JT
dGF0ZTsKIGNsYXNzIEluc3BlY3RvclZhbHVlOwogY2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsK
QEAgLTEyNCw3ICsxMjUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTY3JpcHREZWJ1Z1NlcnZl
ciYgc2NyaXB0RGVidWdTZXJ2ZXIoKSA9IDA7CiAKIHByb3RlY3RlZDoKLSAgICBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0ZSosIEluamVj
dGVkU2NyaXB0TWFuYWdlciopOworICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVu
dGluZ0FnZW50cyosIEluc3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5z
cGVjdG9yT3ZlcmxheSopOwogCiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0TGlzdGVuaW5nU2NyaXB0
RGVidWdTZXJ2ZXIoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN0b3BMaXN0ZW5pbmdTY3JpcHRE
ZWJ1Z1NlcnZlcigpID0gMDsKQEAgLTEzNCw2ICsxMzUsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdmly
dHVhbCBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcqLCBj
b25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgPSAwOwogCiBwcml2YXRlOgorICAgIHZpcnR1
YWwgYm9vbCBpc1BhZ2VEZWJ1Z2dlckFnZW50KCkgPSAwOworCiAgICAgdm9pZCBlbmFibGUoKTsK
ICAgICB2b2lkIGRpc2FibGUoKTsKICAgICBib29sIGVuYWJsZWQoKTsKQEAgLTE1OSw2ICsxNjIs
NyBAQCBwcml2YXRlOgogCiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2luamVjdGVkU2Ny
aXB0TWFuYWdlcjsKICAgICBJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXIqIG1fZnJvbnRlbmQ7
CisgICAgSW5zcGVjdG9yT3ZlcmxheSogbV9vdmVybGF5OwogICAgIFNjcmlwdFN0YXRlKiBtX3Bh
dXNlZFNjcmlwdFN0YXRlOwogICAgIFNjcmlwdFZhbHVlIG1fY3VycmVudENhbGxTdGFjazsKICAg
ICBTY3JpcHRzTWFwIG1fc2NyaXB0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclBhZ2VBZ2VudC5jcHAKaW5kZXggZWYzNDUzN2YwZTExOGZiNWUwY2I4OGNhMmZhYjVl
M2VmNjBhMzU3Ny4uY2U4N2I1OWE5ZmQ3YjIwMjJhOGJkMGViZDMyNTMwNjBkNTg1MTdmNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKQEAg
LTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllcnNGYWN0b3J5LmgiCkBAIC0zMTUsNiArMzE2LDcg
QEAgSW5zcGVjdG9yUGFnZUFnZW50OjpJbnNwZWN0b3JQYWdlQWdlbnQoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
KGluamVjdGVkU2NyaXB0TWFuYWdlcikKICAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1f
ZnJvbnRlbmQoMCkKKyAgICAsIG1fb3ZlcmxheShJbnNwZWN0b3JPdmVybGF5OjpjcmVhdGUodGhp
cywgY2xpZW50KSkKICAgICAsIG1fbGFzdFNjcmlwdElkZW50aWZpZXIoMCkKICAgICAsIG1fbGFz
dFBhaW50Q29udGV4dCgwKQogICAgICwgbV9kaWRMb2FkRXZlbnRGaXJlKGZhbHNlKQpAQCAtODQz
LDYgKzg0NSwxMSBAQCBEb2N1bWVudExvYWRlciogSW5zcGVjdG9yUGFnZUFnZW50Ojphc3NlcnRE
b2N1bWVudExvYWRlcihFcnJvclN0cmluZyogZXJyb3JTdHJpbgogICAgIHJldHVybiBkb2N1bWVu
dExvYWRlcjsKIH0KIAordm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRyYXdJbnNwZWN0b3JPdmVy
bGF5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBtX292ZXJsYXktPmRyYXcoY29u
dGV4dCk7Cit9CisKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojpsb2FkZXJEZXRhY2hlZEZyb21G
cmFtZShEb2N1bWVudExvYWRlciogbG9hZGVyKQogewogICAgIEhhc2hNYXA8RG9jdW1lbnRMb2Fk
ZXIqLCBTdHJpbmc+OjppdGVyYXRvciBpdGVyYXRvciA9IG1fbG9hZGVyVG9JZGVudGlmaWVyLmZp
bmQobG9hZGVyKTsKQEAgLTg4NSw3ICs4OTIsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6
ZGlkUGFpbnQoKQogICAgICAgICBDb2xvcigwLCAwLCAweEZGLCAweDNGKSwKICAgICB9OwogCi0g
ICAgRE9NTm9kZUhpZ2hsaWdodGVyOjpkcmF3T3V0bGluZSgqbV9sYXN0UGFpbnRDb250ZXh0LCBt
X2xhc3RQYWludFJlY3QsIGNvbG9yc1tjb2xvclNlbGVjdG9yKysgJSBXVEZfQVJSQVlfTEVOR1RI
KGNvbG9ycyldKTsKKyAgICBtX292ZXJsYXktPmRyYXdPdXRsaW5lKCptX2xhc3RQYWludENvbnRl
eHQsIG1fbGFzdFBhaW50UmVjdCwgY29sb3JzW2NvbG9yU2VsZWN0b3IrKyAlIFdURl9BUlJBWV9M
RU5HVEgoY29sb3JzKV0pOwogCiAgICAgbV9sYXN0UGFpbnRDb250ZXh0ID0gMDsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaAppbmRleCA5NjRiYzg1
ZmM2MzY0OGFmMzhmMmRjMTJmYzgzZjc5NzFiOTNhNjYzLi4zZTQzOTRkYTVjN2VlOGUxYzRmMTY0
YmJlMjQ4ODZkMDIwZmIwNTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUGFnZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclBhZ2VBZ2VudC5oCkBAIC00OCwxMSArNDgsMTMgQEAgY2xhc3MgRE9NV3JhcHBlcldvcmxk
OwogY2xhc3MgRG9jdW1lbnRMb2FkZXI7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEZyb250ZW5kOwor
Y2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogY2xh
c3MgSW5zcGVjdG9yQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JBcnJheTsKIGNsYXNzIEluc3BlY3Rv
ckNsaWVudDsKIGNsYXNzIEluc3BlY3Rvck9iamVjdDsKK2NsYXNzIEluc3BlY3Rvck92ZXJsYXk7
CiBjbGFzcyBJbnNwZWN0b3JTdGF0ZTsKIGNsYXNzIEluc3RydW1lbnRpbmdBZ2VudHM7CiBjbGFz
cyBLVVJMOwpAQCAtMTM1LDYgKzEzNyw4IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgbG9hZGVySWQo
RG9jdW1lbnRMb2FkZXIqKTsKICAgICBGcmFtZSogYXNzZXJ0RnJhbWUoRXJyb3JTdHJpbmcqLCBT
dHJpbmcgZnJhbWVJZCk7CiAgICAgc3RhdGljIERvY3VtZW50TG9hZGVyKiBhc3NlcnREb2N1bWVu
dExvYWRlcihFcnJvclN0cmluZyosIEZyYW1lKik7CisgICAgSW5zcGVjdG9yT3ZlcmxheSogaW5z
cGVjdG9yT3ZlcmxheSgpIHsgcmV0dXJuIG1fb3ZlcmxheS5nZXQoKTsgfQorICAgIHZvaWQgZHJh
d0luc3BlY3Rvck92ZXJsYXkoR3JhcGhpY3NDb250ZXh0Jik7CiAKIHByaXZhdGU6CiAgICAgSW5z
cGVjdG9yUGFnZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBQYWdlKiwgSW5zcGVjdG9yQWdl
bnQqLCBJbnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3RvckNs
aWVudCopOwpAQCAtMTQ3LDYgKzE1MSw3IEBAIHByaXZhdGU6CiAgICAgSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyKiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKICAgICBJbnNwZWN0b3JDbGllbnQqIG1f
Y2xpZW50OwogICAgIEluc3BlY3RvckZyb250ZW5kOjpQYWdlKiBtX2Zyb250ZW5kOworICAgIE93
blB0cjxJbnNwZWN0b3JPdmVybGF5PiBtX292ZXJsYXk7CiAgICAgbG9uZyBtX2xhc3RTY3JpcHRJ
ZGVudGlmaWVyOwogICAgIFN0cmluZyBtX3BlbmRpbmdTY3JpcHRUb0V2YWx1YXRlT25Mb2FkT25j
ZTsKICAgICBTdHJpbmcgbV9zY3JpcHRUb0V2YWx1YXRlT25Mb2FkT25jZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGE1ODZlZGYzZmQ0
MTA4YzlkMDc5MmMwYmRmZWJlMWU4M2ZhZmY4NmEuLmMxZTYyNzUzZDIxOWRhYTk2MDA3OTBiNjVi
YjcxOGM4NDNmOGNmOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdl
RGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1
Z2dlckFnZW50LmNwcApAQCAtNDAsMTMgKzQwLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotUGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2VudD4gUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0
ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0
ZSogaW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIEluamVjdGVkU2NyaXB0TWFu
YWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQorUGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2Vu
dD4gUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGluc3Bl
Y3RlZFBhZ2UsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJ
bnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGFn
ZURlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUsIGluc3Bl
Y3RlZFBhZ2UsIGluamVjdGVkU2NyaXB0TWFuYWdlcikpOworICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgUGFnZURlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUs
IGluc3BlY3RlZFBhZ2UsIGluamVjdGVkU2NyaXB0TWFuYWdlciwgb3ZlcmxheSkpOwogfQogCi1Q
YWdlRGVidWdnZXJBZ2VudDo6UGFnZURlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBQYWdl
KiBpbnNwZWN0ZWRQYWdlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFu
YWdlcikKLSAgICA6IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywg
aW5zcGVjdG9yU3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdlcikKK1BhZ2VEZWJ1Z2dlckFnZW50
OjpQYWdlRGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdl
bnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGluc3BlY3RlZFBhZ2Us
IEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JP
dmVybGF5KiBvdmVybGF5KQorICAgIDogSW5zcGVjdG9yRGVidWdnZXJBZ2VudChpbnN0cnVtZW50
aW5nQWdlbnRzLCBpbnNwZWN0b3JTdGF0ZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBvdmVybGF5
KQogICAgICwgbV9pbnNwZWN0ZWRQYWdlKGluc3BlY3RlZFBhZ2UpCiB7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oCmluZGV4IDlkYmQ1MTNmOWYxYTI4
YmI5ODQyNDkxMzU3ODE0ODZjNzNjMzI2MTguLjYyNGM3NDAyYTUwZTQxYzM5ZmZlMDM3MjE1ZjI4
NDE5MzUxMmM1MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVi
dWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJB
Z2VudC5oCkBAIC00NCw3ICs0NCw3IEBAIGNsYXNzIFBhZ2VEZWJ1Z2dlckFnZW50IDogcHVibGlj
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VE
ZWJ1Z2dlckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRp
bmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0ZSosIFBhZ2UqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIq
KTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2VudD4gY3JlYXRlKEluc3Ry
dW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0ZSosIFBhZ2UqLCBJbmplY3RlZFNjcmlwdE1h
bmFnZXIqLCBJbnNwZWN0b3JPdmVybGF5Kik7CiAgICAgdmlydHVhbCB+UGFnZURlYnVnZ2VyQWdl
bnQoKTsKIAogcHJpdmF0ZToKQEAgLTU2LDcgKzU2LDkgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1
YWwgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nKiwgY29u
c3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpOwogCi0gICAgUGFnZURlYnVnZ2VyQWdlbnQoSW5z
dHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclN0YXRlKiwgUGFnZSosIEluamVjdGVkU2NyaXB0
TWFuYWdlciopOworICAgIHZpcnR1YWwgYm9vbCBpc1BhZ2VEZWJ1Z2dlckFnZW50KCkgeyByZXR1
cm4gdHJ1ZTsgfQorCisgICAgUGFnZURlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyos
IEluc3BlY3RvclN0YXRlKiwgUGFnZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3Rv
ck92ZXJsYXkqKTsKICAgICBQYWdlKiBjb25zdCBtX2luc3BlY3RlZFBhZ2U7CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyRGVidWdnZXJBZ2VudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyRGVidWdnZXJBZ2VudC5jcHAKaW5kZXgg
Yzc1YWY0YTZlNGMwZjRlOTk2ZjM1ZDhhM2E3ODkxNjE1MzE3MTYyZi4uMTU4OWZjMzBmNDU2NGQ5
M2UyN2JmMjdlYWI1NTc1ZDRiNjA2YTUxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL1dvcmtlckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcApAQCAtODYsNyArODYsNyBAQCBQYXNzT3duUHRy
PFdvcmtlckRlYnVnZ2VyQWdlbnQ+IFdvcmtlckRlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShJbnN0cnVt
ZW50aW5nQWdlbnRzKgogfQogCiBXb3JrZXJEZWJ1Z2dlckFnZW50OjpXb3JrZXJEZWJ1Z2dlckFn
ZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclN0
YXRlKiBpbnNwZWN0b3JTdGF0ZSwgV29ya2VyQ29udGV4dCogaW5zcGVjdGVkV29ya2VyQ29udGV4
dCwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCi0gICAgOiBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRl
LCBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCisgICAgOiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KGlu
c3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIs
IDApCiAgICAgLCBtX3NjcmlwdERlYnVnU2VydmVyKGluc3BlY3RlZFdvcmtlckNvbnRleHQpCiAg
ICAgLCBtX2luc3BlY3RlZFdvcmtlckNvbnRleHQoaW5zcGVjdGVkV29ya2VyQ29udGV4dCkKIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlckFnZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyRGVidWdnZXJBZ2VudC5oCmluZGV4
IDIwYzUwOWIxNGJjMTI1MjM0MTFmNDE3NzZmMzY0Y2MyNTNjMmVmOGEuLjRlMmMzNzkxYjgyYjQz
Y2M2ZWY3MDMzYWI5Y2E2MTAyNGY1YTU0YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL1dvcmtlckRlYnVnZ2VyQWdlbnQuaApAQCAtNjAsNiArNjAsOCBAQCBwcml2YXRlOgogICAg
IHZpcnR1YWwgdm9pZCBtdXRlQ29uc29sZSgpOwogICAgIHZpcnR1YWwgdm9pZCB1bm11dGVDb25z
b2xlKCk7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNQYWdlRGVidWdnZXJBZ2VudCgpIHsgcmV0dXJu
IGZhbHNlOyB9CisKICAgICBXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlciBtX3NjcmlwdERlYnVnU2Vy
dmVyOwogICAgIFdvcmtlckNvbnRleHQqIG1faW5zcGVjdGVkV29ya2VyQ29udGV4dDsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152523</attachid>
            <date>2012-07-16 06:49:36 -0700</date>
            <delta_ts>2012-07-16 07:11:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90880-20120716174935.patch</filename>
            <type>text/plain</type>
            <size>86432</size>
            <attacher name="Sergey Rogulenko">rogulenko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTZiZmVjMmM0ZGZkYTI1
NmYwZDlhM2U2Zjc4NzllYmY2YjVkNzY1ZC4uNzQ5NWE4MzcxM2FhMWJjNDY1OGMwY2E2YWQ3MzNh
NTA4MmIzMjIzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDEyLTA3LTE2ICBTZXJn
ZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogYWRkaW5nIHBhdXNlIGljb24gZm9yIEphdmFTY3JpcHQgZGVidWdnaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg4MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yZWQgRE9NTm9k
ZUhpZ2hsaWdodGVyIGludG8gSW5zcGVjdG9yT3ZlcmxheSBjbGFzcyBhbmQgYWRkZWQgYSBmZWF0
dXJlIHRvIHNob3cgYSAicGF1c2UiIHNjcmVlbiB3aGVuCisgICAgICAgIHRoZSBKYXZhc2NyaXB0
IGRlYnVnZ2VyIGlzIHBhdXNlZC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06Cisg
ICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0
b3JDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRy
YXdIaWdobGlnaHQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEluc3BlY3RvckNvbnRyb2xsZXIpOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JET01BZ2VudDo6SW5zcGVjdG9yRE9NQWdlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01BZ2VudDo6aGlkZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JE
T01BZ2VudDo6Z2V0SGlnaGxpZ2h0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9N
QWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6OmNyZWF0ZSk6CisgICAgICAgIChJbnNwZWN0b3JET01BZ2VudCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZENvbnRpbnVlKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yT3ZlcmxheS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
RE9NTm9kZUhpZ2hsaWdodGVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJs
YXk6Okluc3BlY3Rvck92ZXJsYXkpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ck92ZXJsYXk6OmRyYXdPdXRsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJs
YXk6OmdldEhpZ2hsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5Ojpz
ZXRIaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6c2V0U2hv
dWxkU2hvd1BhdXNlV2FybmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5
Ojp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0hpZ2hs
aWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3UGF1c2VXYXJu
aW5nKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5oLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChIaWdobGlnaHREYXRhKToKKyAgICAgICAgKEhpZ2hsaWdo
dCk6CisgICAgICAgIChJbnNwZWN0b3JPdmVybGF5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvck92ZXJsYXk6OmNyZWF0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VB
Z2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6Okluc3BlY3RvclBhZ2VBZ2Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmRyYXdJbnNwZWN0b3JP
dmVybGF5KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
UGFnZUFnZW50OjpkaWRQYWludCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VB
Z2VudC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogaW5zcGVjdG9yL1BhZ2VEZWJ1
Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50OjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZURlYnVnZ2VyQWdlbnQ6OlBhZ2VEZWJ1Z2dlckFn
ZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAg
KFBhZ2VEZWJ1Z2dlckFnZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvV29ya2VyRGVidWdnZXJB
Z2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJEZWJ1Z2dlckFnZW50OjpXb3JrZXJE
ZWJ1Z2dlckFnZW50KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisKIDIwMTIt
MDctMTUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQuIEZpeCBtYWtlIGRpc3RjaGVjay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCmluZGV4IDM3MjEzNWUwOGQxNTdlY2JjNDhmNjhlNzM2OWJmMTEyMDVhMmMxZTIuLjNj
YmJkNmM5YjY3YmExMTE5MmEyNjE5NmRjYzM1MjlkYjI4YTdjNTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQpAQCAtMjY5Myw4ICsyNjkzLDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwK
IAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxzLmggXAogCVNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9ET01FZGl0b3IuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvRE9NRWRpdG9yLmggXAotCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGln
aGxpZ2h0ZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdo
dGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmggXAogCVNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JZGVudGlmaWVyc0ZhY3RvcnkuY3BwIFwKQEAgLTI3NTksNiArMjc1
Nyw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yTWVtb3J5QWdlbnQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yTWVtb3J5QWdlbnQuaCBcCisJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92
ZXJsYXkuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAgXApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkK
aW5kZXggNWRhYzJiMDVkMDdjZDZhNjY3OGYyN2M0ZGM5NmYxNTJkY2JiOTI0Ni4uMTE0ZTUxOTA0
NGFmZTljM2UzNzc4MmNhYmYxNzUyNDE5ZDFlNjI3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC04OTcsNyAr
ODk3LDYgQEAgU09VUkNFUyArPSBcCiAgICAgaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcCBc
CiAgICAgaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlscy5jcHAgXAogICAgIGluc3BlY3Rvci9E
T01FZGl0b3IuY3BwIFwKLSAgICBpbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcCBcCiAg
ICAgaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAgXAogICAgIGluc3BlY3Rvci9JZGVudGlm
aWVyc0ZhY3RvcnkuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwIFwKQEAg
LTkyNiw2ICs5MjUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9ySGlz
dG9yeS5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwIFwK
ICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwIFwKKyAgICBpbnNwZWN0b3Iv
SW5zcGVjdG9yT3ZlcmxheS5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQu
Y3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAgXAogICAgIGlu
c3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBlNGM3MTAwZDYxYzUyMDgzZjM4MjcxZjJhNzI3NTQ3NTQ2OGVkYjJjLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTI5ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotCi0j
aW5jbHVkZSAiRE9NTm9kZUhpZ2hsaWdodGVyLmgiCi0KLSNpbmNsdWRlICJFbGVtZW50LmgiCi0j
aW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRm9udEZhbWlseS5oIgotI2luY2x1ZGUg
IkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgotI2luY2x1ZGUgIk5vZGUuaCIKLSNp
bmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJCb3hN
b2RlbE9iamVjdC5oIgotI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgotI2luY2x1ZGUgIlJlbmRl
ck9iamVjdC5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU3R5bGVkRWxlbWVu
dC5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIHsKLQotI2lmIE9TKFdJ
TkRPV1MpCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgZm9udEhlaWdodFB4ID0gMTI7Ci0jZWxpZiBP
UyhNQUNfT1NfWCkgfHwgT1MoVU5JWCkKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBmb250SGVpZ2h0
UHggPSAxMTsKLSNlbmRpZgotCi1jb25zdCBzdGF0aWMgaW50IHJlY3RJbmZsYXRlUHggPSA0Owot
Y29uc3Qgc3RhdGljIGludCBib3JkZXJXaWR0aFB4ID0gMTsKLWNvbnN0IHN0YXRpYyBpbnQgdG9v
bHRpcFBhZGRpbmcgPSA0OwotCi1jb25zdCBzdGF0aWMgaW50IGFycm93VGlwT2Zmc2V0ID0gMjA7
Ci1jb25zdCBzdGF0aWMgZmxvYXQgYXJyb3dIZWlnaHQgPSA3OwotY29uc3Qgc3RhdGljIGZsb2F0
IGFycm93SGFsZldpZHRoID0gNzsKLQotUGF0aCBxdWFkVG9QYXRoKGNvbnN0IEZsb2F0UXVhZCYg
cXVhZCkKLXsKLSAgICBQYXRoIHF1YWRQYXRoOwotICAgIHF1YWRQYXRoLm1vdmVUbyhxdWFkLnAx
KCkpOwotICAgIHF1YWRQYXRoLmFkZExpbmVUbyhxdWFkLnAyKCkpOwotICAgIHF1YWRQYXRoLmFk
ZExpbmVUbyhxdWFkLnAzKCkpOwotICAgIHF1YWRQYXRoLmFkZExpbmVUbyhxdWFkLnA0KCkpOwot
ICAgIHF1YWRQYXRoLmNsb3NlU3VicGF0aCgpOwotICAgIHJldHVybiBxdWFkUGF0aDsKLX0KLQot
dm9pZCBkcmF3T3V0bGluZWRRdWFkKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxv
YXRRdWFkJiBxdWFkLCBjb25zdCBDb2xvciYgZmlsbENvbG9yLCBjb25zdCBDb2xvciYgb3V0bGlu
ZUNvbG9yKQotewotICAgIHN0YXRpYyBjb25zdCBpbnQgb3V0bGluZVRoaWNrbmVzcyA9IDI7Ci0K
LSAgICBQYXRoIHF1YWRQYXRoID0gcXVhZFRvUGF0aChxdWFkKTsKLQotICAgIC8vIENsaXAgb3V0
IHRoZSBxdWFkLCB0aGVuIGRyYXcgd2l0aCBhIDJweCBzdHJva2UgdG8gZ2V0IGEgcGl4ZWwKLSAg
ICAvLyBvZiBvdXRsaW5lIChiZWNhdXNlIGluZmxhdGluZyBhIHF1YWQgaXMgaGFyZCkKLSAgICB7
Ci0gICAgICAgIGNvbnRleHQuc2F2ZSgpOwotICAgICAgICBjb250ZXh0LmNsaXBPdXQocXVhZFBh
dGgpOwotCi0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKG91dGxpbmVUaGlja25l
c3MpOwotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKG91dGxpbmVDb2xvciwgQ29sb3JT
cGFjZURldmljZVJHQik7Ci0gICAgICAgIGNvbnRleHQuc3Ryb2tlUGF0aChxdWFkUGF0aCk7Ci0K
LSAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgfQotCi0gICAgLy8gTm93IGRvIHRoZSBm
aWxsCi0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IoZmlsbENvbG9yLCBDb2xvclNwYWNlRGV2aWNl
UkdCKTsKLSAgICBjb250ZXh0LmZpbGxQYXRoKHF1YWRQYXRoKTsKLX0KLQotdm9pZCBkcmF3T3V0
bGluZWRRdWFkV2l0aENsaXAoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1
YWQmIHF1YWQsIGNvbnN0IEZsb2F0UXVhZCYgY2xpcFF1YWQsIGNvbnN0IENvbG9yJiBmaWxsQ29s
b3IpCi17Ci0gICAgY29udGV4dC5zYXZlKCk7Ci0gICAgUGF0aCBjbGlwUXVhZFBhdGggPSBxdWFk
VG9QYXRoKGNsaXBRdWFkKTsKLSAgICBjb250ZXh0LmNsaXBPdXQoY2xpcFF1YWRQYXRoKTsKLSAg
ICBkcmF3T3V0bGluZWRRdWFkKGNvbnRleHQsIHF1YWQsIGZpbGxDb2xvciwgQ29sb3I6OnRyYW5z
cGFyZW50KTsKLSAgICBjb250ZXh0LnJlc3RvcmUoKTsKLX0KLQotdm9pZCBkcmF3SGlnaGxpZ2h0
Rm9yQm94KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBjb250ZW50
UXVhZCwgY29uc3QgRmxvYXRRdWFkJiBwYWRkaW5nUXVhZCwgY29uc3QgRmxvYXRRdWFkJiBib3Jk
ZXJRdWFkLCBjb25zdCBGbG9hdFF1YWQmIG1hcmdpblF1YWQsIEhpZ2hsaWdodERhdGEqIGhpZ2hs
aWdodERhdGEpCi17Ci0gICAgYm9vbCBoYXNNYXJnaW4gPSBoaWdobGlnaHREYXRhLT5tYXJnaW4g
IT0gQ29sb3I6OnRyYW5zcGFyZW50OwotICAgIGJvb2wgaGFzQm9yZGVyID0gaGlnaGxpZ2h0RGF0
YS0+Ym9yZGVyICE9IENvbG9yOjp0cmFuc3BhcmVudDsKLSAgICBib29sIGhhc1BhZGRpbmcgPSBo
aWdobGlnaHREYXRhLT5wYWRkaW5nICE9IENvbG9yOjp0cmFuc3BhcmVudDsKLSAgICBib29sIGhh
c0NvbnRlbnQgPSBoaWdobGlnaHREYXRhLT5jb250ZW50ICE9IENvbG9yOjp0cmFuc3BhcmVudCB8
fCBoaWdobGlnaHREYXRhLT5jb250ZW50T3V0bGluZSAhPSBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci0K
LSAgICBGbG9hdFF1YWQgY2xpcFF1YWQ7Ci0gICAgQ29sb3IgY2xpcENvbG9yOwotICAgIGlmICho
YXNNYXJnaW4gJiYgKCFoYXNCb3JkZXIgfHwgbWFyZ2luUXVhZCAhPSBib3JkZXJRdWFkKSkgewot
ICAgICAgICBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAoY29udGV4dCwgbWFyZ2luUXVhZCwgYm9y
ZGVyUXVhZCwgaGlnaGxpZ2h0RGF0YS0+bWFyZ2luKTsKLSAgICAgICAgY2xpcFF1YWQgPSBib3Jk
ZXJRdWFkOwotICAgIH0KLSAgICBpZiAoaGFzQm9yZGVyICYmICghaGFzUGFkZGluZyB8fCBib3Jk
ZXJRdWFkICE9IHBhZGRpbmdRdWFkKSkgewotICAgICAgICBkcmF3T3V0bGluZWRRdWFkV2l0aENs
aXAoY29udGV4dCwgYm9yZGVyUXVhZCwgcGFkZGluZ1F1YWQsIGhpZ2hsaWdodERhdGEtPmJvcmRl
cik7Ci0gICAgICAgIGNsaXBRdWFkID0gcGFkZGluZ1F1YWQ7Ci0gICAgfQotICAgIGlmIChoYXNQ
YWRkaW5nICYmICghaGFzQ29udGVudCB8fCBwYWRkaW5nUXVhZCAhPSBjb250ZW50UXVhZCkpIHsK
LSAgICAgICAgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKGNvbnRleHQsIHBhZGRpbmdRdWFkLCBj
b250ZW50UXVhZCwgaGlnaGxpZ2h0RGF0YS0+cGFkZGluZyk7Ci0gICAgICAgIGNsaXBRdWFkID0g
Y29udGVudFF1YWQ7Ci0gICAgfQotICAgIGlmIChoYXNDb250ZW50KQotICAgICAgICBkcmF3T3V0
bGluZWRRdWFkKGNvbnRleHQsIGNvbnRlbnRRdWFkLCBoaWdobGlnaHREYXRhLT5jb250ZW50LCBo
aWdobGlnaHREYXRhLT5jb250ZW50T3V0bGluZSk7Ci19Ci0KLXZvaWQgZHJhd0hpZ2hsaWdodEZv
clNWR1JlbmRlcmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVmVjdG9yPEZsb2F0
UXVhZD4mIGFic29sdXRlUXVhZHMsIEhpZ2hsaWdodERhdGEqIGhpZ2hsaWdodERhdGEpCi17Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhYnNvbHV0ZVF1YWRzLnNpemUoKTsgKytpKQotICAg
ICAgICBkcmF3T3V0bGluZWRRdWFkKGNvbnRleHQsIGFic29sdXRlUXVhZHNbaV0sIGhpZ2hsaWdo
dERhdGEtPmNvbnRlbnQsIENvbG9yOjp0cmFuc3BhcmVudCk7Ci19Ci0KLWludCBkcmF3U3Vic3Ry
aW5nKGNvbnN0IFRleHRSdW4mIGdsb2JhbFRleHRSdW4sIGludCBvZmZzZXQsIGludCBsZW5ndGgs
IGNvbnN0IENvbG9yJiB0ZXh0Q29sb3IsIGNvbnN0IEZvbnQmIGZvbnQsIEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgdGl0bGVSZWN0KQotewotICAgIGNvbnRleHQu
c2V0RmlsbENvbG9yKHRleHRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgY29udGV4
dC5kcmF3VGV4dChmb250LCBnbG9iYWxUZXh0UnVuLCBJbnRQb2ludCh0aXRsZVJlY3QucGl4ZWxT
bmFwcGVkWCgpICsgcmVjdEluZmxhdGVQeCwgdGl0bGVSZWN0LnBpeGVsU25hcHBlZFkoKSArIGZv
bnQuZm9udE1ldHJpY3MoKS5oZWlnaHQoKSksIG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoKTsKLSAg
ICByZXR1cm4gb2Zmc2V0ICsgbGVuZ3RoOwotfQotCi1mbG9hdCBjYWxjdWxhdGVBcnJvd1RpcFgo
Y29uc3QgTGF5b3V0UmVjdCYgYW5jaG9yQm94LCBjb25zdCBMYXlvdXRSZWN0JiB0aXRsZVJlY3Qp
Ci17Ci0gICAgY29uc3Qgc3RhdGljIGludCBhbmNob3JUaXBPZmZzZXRQeCA9IDI7Ci0KLSAgICBp
bnQgbWluWCA9IHRpdGxlUmVjdC54KCkgKyBhcnJvd0hhbGZXaWR0aDsKLSAgICBpbnQgbWF4WCA9
IHRpdGxlUmVjdC5tYXhYKCkgLSBhcnJvd0hhbGZXaWR0aDsKLSAgICBpbnQgYW5jaG9yWCA9IGFu
Y2hvckJveC54KCk7Ci0gICAgaW50IGFuY2hvck1heFggPSBhbmNob3JCb3gubWF4WCgpOwotCi0g
ICAgaW50IHggPSB0aXRsZVJlY3QueCgpICsgYXJyb3dUaXBPZmZzZXQ7IC8vIERlZmF1bHQgdG9v
bHRpcCBwb3NpdGlvbi4KLSAgICBpZiAoeCA8IGFuY2hvclgpCi0gICAgICAgIHggPSBhbmNob3JY
ICsgYW5jaG9yVGlwT2Zmc2V0UHg7Ci0gICAgZWxzZSBpZiAoeCA+IGFuY2hvck1heFgpCi0gICAg
ICAgIHggPSBhbmNob3JNYXhYIC0gYW5jaG9yVGlwT2Zmc2V0UHg7Ci0KLSAgICBpZiAoeCA8IG1p
blgpCi0gICAgICAgIHggPSBtaW5YOwotICAgIGVsc2UgaWYgKHggPiBtYXhYKQotICAgICAgICB4
ID0gbWF4WDsKLQotICAgIHJldHVybiB4OwotfQotCi12b2lkIHNldFVwRm9udERlc2NyaXB0aW9u
KEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBXZWJDb3JlOjpTZXR0aW5ncyogc2V0
dGluZ3MpCi17Ci0jZGVmaW5lIFRPT0xUSVBfRk9OVF9GQU1JTElFUyhzaXplLCAuLi4pIFwKLXN0
YXRpYyBjb25zdCB1bnNpZ25lZCB0b29sdGlwRm9udEZhY2VTaXplID0gc2l6ZTtcCi1zdGF0aWMg
Y29uc3QgQXRvbWljU3RyaW5nKiB0b29sdGlwRm9udEZhY2Vbc2l6ZV0gPSB7IF9fVkFfQVJHU19f
IH07Ci0KLSNpZiBPUyhXSU5ET1dTKQotVE9PTFRJUF9GT05UX0ZBTUlMSUVTKDIsIG5ldyBBdG9t
aWNTdHJpbmcoIkNvbnNvbGFzIiksIG5ldyBBdG9taWNTdHJpbmcoIkx1Y2lkYSBDb25zb2xlIikp
Ci0jZWxpZiBPUyhNQUNfT1NfWCkKLVRPT0xUSVBfRk9OVF9GQU1JTElFUygyLCBuZXcgQXRvbWlj
U3RyaW5nKCJNZW5sbyIpLCBuZXcgQXRvbWljU3RyaW5nKCJNb25hY28iKSkKLSNlbGlmIE9TKFVO
SVgpCi1UT09MVElQX0ZPTlRfRkFNSUxJRVMoMSwgbmV3IEF0b21pY1N0cmluZygiZGVqYXZ1IHNh
bnMgbW9ubyIpKQotI2VuZGlmCi0vLyBJbiB0aGUgZGVmYXVsdCBjYXNlLCB3ZSBnZXQgdGhlIHNl
dHRpbmdzLXByb3ZpZGVkIG1vbm9zcGFjZSBmb250LgotCi0jdW5kZWYgVE9PTFRJUF9GT05UX0ZB
TUlMSUVTCi0KLSAgICBmb250RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9kZShzZXR0aW5ncy0+
Zm9udFJlbmRlcmluZ01vZGUoKSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6
ZShmb250SGVpZ2h0UHgpOwotCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBmaXhlZEZvbnRGYW1p
bHkgPSBzZXR0aW5ncy0+Zml4ZWRGb250RmFtaWx5KCk7Ci0gICAgaWYgKCFmaXhlZEZvbnRGYW1p
bHkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5
KEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5KTsKLSAgICAgICAgRm9udEZhbWlseSog
Y3VycmVudEZhbWlseSA9IDA7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b29s
dGlwRm9udEZhY2VTaXplOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghY3VycmVudEZhbWlseSkg
ewotICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNldEZhbWls
eSgqdG9vbHRpcEZvbnRGYWNlW2ldKTsKLSAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24u
Zmlyc3RGYW1pbHkoKS5hcHBlbmRGYW1pbHkoMCk7Ci0gICAgICAgICAgICAgICAgY3VycmVudEZh
bWlseSA9ICZmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPFNoYXJlZEZvbnRGYW1pbHk+IG5ld0ZhbWlseSA9
IFNoYXJlZEZvbnRGYW1pbHk6OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIG5ld0ZhbWlseS0+
c2V0RmFtaWx5KCp0b29sdGlwRm9udEZhY2VbaV0pOwotICAgICAgICAgICAgICAgIGN1cnJlbnRG
YW1pbHktPmFwcGVuZEZhbWlseShuZXdGYW1pbHkpOwotICAgICAgICAgICAgICAgIGN1cnJlbnRG
YW1pbHkgPSBuZXdGYW1pbHkuZ2V0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgUmVmUHRyPFNoYXJlZEZvbnRGYW1pbHk+IG5ld0ZhbWlseSA9IFNoYXJlZEZvbnRGYW1pbHk6
OmNyZWF0ZSgpOwotICAgICAgICBuZXdGYW1pbHktPnNldEZhbWlseShmaXhlZEZvbnRGYW1pbHkp
OwotICAgICAgICBjdXJyZW50RmFtaWx5LT5hcHBlbmRGYW1pbHkobmV3RmFtaWx5KTsKLSAgICAg
ICAgY3VycmVudEZhbWlseSA9IG5ld0ZhbWlseS5nZXQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgZHJh
d0VsZW1lbnRUaXRsZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIE5vZGUqIG5vZGUsIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEludFJlY3QmIGJvdW5kaW5nQm94LCBjb25zdCBJbnRS
ZWN0JiBhbmNob3JCb3gsIGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZVJlY3QsIFdlYkNvcmU6OlNl
dHRpbmdzKiBzZXR0aW5ncykKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCBiYWNr
Z3JvdW5kQ29sb3IsICgyNTUsIDI1NSwgMTk0KSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChD
b2xvciwgdGFnQ29sb3IsICgxMzYsIDE4LCAxMjgpKTsgLy8gU2FtZSBhcyAud2Via2l0LWh0bWwt
dGFnLgotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIGF0dHJDb2xvciwgKDI2LCAyNiwg
MTY2KSk7IC8vIFNhbWUgYXMgLndlYmtpdC1odG1sLWF0dHJpYnV0ZS12YWx1ZS4KLSAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKENvbG9yLCBub3JtYWxDb2xvciwgKENvbG9yOjpibGFjaykpOwotICAg
IERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIHB4QW5kQm9yZGVyQ29sb3IsICgxMjgsIDEyOCwg
MTI4KSk7Ci0KLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgcHhTdHJpbmcsICgicHgi
KSk7Ci0gICAgY29uc3Qgc3RhdGljIFVDaGFyIHRpbWVzVUNoYXJbXSA9IHsgMHgwMDIwLCAweDAw
RDcsIDB4MDAyMCwgMCB9OwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB0aW1lc1N0
cmluZywgKHRpbWVzVUNoYXIpKTsgLy8gJnRpbWVzOyBzdHJpbmcKLQotICAgIEZvbnRDYWNoZVB1
cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwotCi0gICAgRWxlbWVudCogZWxl
bWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKLSAgICBib29sIGlzWEhUTUwgPSBl
bGVtZW50LT5kb2N1bWVudCgpLT5pc1hIVE1MRG9jdW1lbnQoKTsKLSAgICBTdHJpbmdCdWlsZGVy
IG5vZGVUaXRsZTsKLSAgICBub2RlVGl0bGUuYXBwZW5kKGlzWEhUTUwgPyBlbGVtZW50LT5ub2Rl
TmFtZSgpIDogZWxlbWVudC0+bm9kZU5hbWUoKS5sb3dlcigpKTsKLSAgICB1bnNpZ25lZCB0YWdO
YW1lTGVuZ3RoID0gbm9kZVRpdGxlLmxlbmd0aCgpOwotCi0gICAgY29uc3QgQXRvbWljU3RyaW5n
JiBpZFZhbHVlID0gZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKTsKLSAgICB1bnNpZ25lZCBpZFN0
cmluZ0xlbmd0aCA9IDA7Ci0gICAgU3RyaW5nIGlkU3RyaW5nOwotICAgIGlmICghaWRWYWx1ZS5p
c051bGwoKSAmJiAhaWRWYWx1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgbm9kZVRpdGxlLmFwcGVu
ZCgiIyIpOwotICAgICAgICBub2RlVGl0bGUuYXBwZW5kKGlkVmFsdWUpOwotICAgICAgICBpZFN0
cmluZ0xlbmd0aCA9IDEgKyBpZFZhbHVlLmxlbmd0aCgpOwotICAgIH0KLQotICAgIEhhc2hTZXQ8
QXRvbWljU3RyaW5nPiB1c2VkQ2xhc3NOYW1lczsKLSAgICB1bnNpZ25lZCBjbGFzc2VzU3RyaW5n
TGVuZ3RoID0gMDsKLSAgICBpZiAoZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBlbGVtZW50LT5pc1N0
eWxlZEVsZW1lbnQoKSkgewotICAgICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05h
bWVzU3RyaW5nID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5jbGFzc05h
bWVzKCk7Ci0gICAgICAgIHNpemVfdCBjbGFzc05hbWVDb3VudCA9IGNsYXNzTmFtZXNTdHJpbmcu
c2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNsYXNzTmFtZUNvdW50OyAr
K2kpIHsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2xhc3NOYW1lID0gY2xhc3NO
YW1lc1N0cmluZ1tpXTsKLSAgICAgICAgICAgIGlmICh1c2VkQ2xhc3NOYW1lcy5jb250YWlucyhj
bGFzc05hbWUpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdXNlZENs
YXNzTmFtZXMuYWRkKGNsYXNzTmFtZSk7Ci0gICAgICAgICAgICBub2RlVGl0bGUuYXBwZW5kKCIu
Iik7Ci0gICAgICAgICAgICBub2RlVGl0bGUuYXBwZW5kKGNsYXNzTmFtZSk7Ci0gICAgICAgICAg
ICBjbGFzc2VzU3RyaW5nTGVuZ3RoICs9IDEgKyBjbGFzc05hbWUubGVuZ3RoKCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogbW9kZWxPYmplY3QgPSByZW5k
ZXJlci0+aXNCb3hNb2RlbE9iamVjdCgpID8gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChyZW5kZXJl
cikgOiAwOwotCi0gICAgU3RyaW5nIHdpZHRoTnVtYmVyUGFydCA9ICIgIiArIFN0cmluZzo6bnVt
YmVyKG1vZGVsT2JqZWN0ID8gYWRqdXN0Rm9yQWJzb2x1dGVab29tKG1vZGVsT2JqZWN0LT5waXhl
bFNuYXBwZWRPZmZzZXRXaWR0aCgpLCBtb2RlbE9iamVjdCkgOiBib3VuZGluZ0JveC53aWR0aCgp
KTsKLSAgICBub2RlVGl0bGUuYXBwZW5kKHdpZHRoTnVtYmVyUGFydCk7Ci0gICAgbm9kZVRpdGxl
LmFwcGVuZChweFN0cmluZyk7Ci0gICAgbm9kZVRpdGxlLmFwcGVuZCh0aW1lc1N0cmluZyk7Ci0g
ICAgU3RyaW5nIGhlaWdodE51bWJlclBhcnQgPSBTdHJpbmc6Om51bWJlcihtb2RlbE9iamVjdCA/
IGFkanVzdEZvckFic29sdXRlWm9vbShtb2RlbE9iamVjdC0+cGl4ZWxTbmFwcGVkT2Zmc2V0SGVp
Z2h0KCksIG1vZGVsT2JqZWN0KSA6IGJvdW5kaW5nQm94LmhlaWdodCgpKTsKLSAgICBub2RlVGl0
bGUuYXBwZW5kKGhlaWdodE51bWJlclBhcnQpOwotICAgIG5vZGVUaXRsZS5hcHBlbmQocHhTdHJp
bmcpOwotCi0gICAgRm9udERlc2NyaXB0aW9uIGRlc2M7Ci0gICAgc2V0VXBGb250RGVzY3JpcHRp
b24oZGVzYywgc2V0dGluZ3MpOwotICAgIEZvbnQgZm9udCA9IEZvbnQoZGVzYywgMCwgMCk7Ci0g
ICAgZm9udC51cGRhdGUoMCk7Ci0KLSAgICBUZXh0UnVuIG5vZGVUaXRsZVJ1bihub2RlVGl0bGUu
dG9TdHJpbmcoKSk7Ci0gICAgSW50UG9pbnQgdGl0bGVCYXNlUG9pbnQgPSBJbnRQb2ludChhbmNo
b3JCb3gueCgpLCBhbmNob3JCb3gubWF4WSgpIC0gMSk7Ci0gICAgdGl0bGVCYXNlUG9pbnQubW92
ZShyZWN0SW5mbGF0ZVB4LCByZWN0SW5mbGF0ZVB4KTsKLSAgICBJbnRSZWN0IHRpdGxlUmVjdCA9
IGVuY2xvc2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChub2RlVGl0bGVSdW4s
IHRpdGxlQmFzZVBvaW50LCBmb250SGVpZ2h0UHgpKTsKLSAgICB0aXRsZVJlY3QuaW5mbGF0ZShy
ZWN0SW5mbGF0ZVB4KTsKLQotICAgIC8vIFRoZSBpbml0aWFsIG9mZnNldHMgbmVlZGVkIHRvIGNv
bXBlbnNhdGUgZm9yIGEgMXB4LXRoaWNrIGJvcmRlciBzdHJva2UgKHdoaWNoIGlzIG5vdCBhIHBh
cnQgb2YgdGhlIHJlY3RhbmdsZSkuCi0gICAgaW50IGR4ID0gLWJvcmRlcldpZHRoUHg7Ci0gICAg
aW50IGR5ID0gYm9yZGVyV2lkdGhQeDsKLQotICAgIC8vIElmIHRoZSB0aXAgc3RpY2tzIGJleW9u
ZCB0aGUgcmlnaHQgb2YgdmlzaWJsZVJlY3QsIHJpZ2h0LWFsaWduIHRoZSB0aXAgd2l0aCB0aGUg
c2FpZCBib3VuZGFyeS4KLSAgICBpZiAodGl0bGVSZWN0Lm1heFgoKSArIGR4ID4gdmlzaWJsZVJl
Y3QubWF4WCgpKQotICAgICAgICBkeCA9IHZpc2libGVSZWN0Lm1heFgoKSAtIHRpdGxlUmVjdC5t
YXhYKCk7Ci0KLSAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIGxlZnQgb2Ygdmlz
aWJsZVJlY3QsIGxlZnQtYWxpZ24gdGhlIHRpcCB3aXRoIHRoZSBzYWlkIGJvdW5kYXJ5LgotICAg
IGlmICh0aXRsZVJlY3QueCgpICsgZHggPCB2aXNpYmxlUmVjdC54KCkpCi0gICAgICAgIGR4ID0g
dmlzaWJsZVJlY3QueCgpIC0gdGl0bGVSZWN0LngoKSAtIGJvcmRlcldpZHRoUHg7Ci0KLSAgICAv
LyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIGJvdHRvbSBvZiB2aXNpYmxlUmVjdCwgc2hv
dyB0aGUgdGlwIGF0IHRvcCBvZiBib3VuZGluZyBib3guCi0gICAgaWYgKHRpdGxlUmVjdC5tYXhZ
KCkgKyBkeSA+IHZpc2libGVSZWN0Lm1heFkoKSkgewotICAgICAgICBkeSA9IGFuY2hvckJveC55
KCkgLSB0aXRsZVJlY3QubWF4WSgpIC0gYm9yZGVyV2lkdGhQeDsKLSAgICAgICAgLy8gSWYgdGhl
IHRpcCBzdGlsbCBzdGlja3MgYmV5b25kIHRoZSBib3R0b20gb2YgdmlzaWJsZVJlY3QsIGJvdHRv
bS1hbGlnbiB0aGUgdGlwIHdpdGggdGhlIHNhaWQgYm91bmRhcnkuCi0gICAgICAgIGlmICh0aXRs
ZVJlY3QubWF4WSgpICsgZHkgPiB2aXNpYmxlUmVjdC5tYXhZKCkpCi0gICAgICAgICAgICBkeSA9
IHZpc2libGVSZWN0Lm1heFkoKSAtIHRpdGxlUmVjdC5tYXhZKCk7Ci0gICAgfQotCi0gICAgLy8g
SWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRoZSB0b3Agb2YgdmlzaWJsZVJlY3QsIHNob3cgdGhl
IHRpcCBhdCB0b3Agb2YgdmlzaWJsZVJlY3QuCi0gICAgaWYgKHRpdGxlUmVjdC55KCkgKyBkeSA8
IHZpc2libGVSZWN0LnkoKSkKLSAgICAgICAgZHkgPSB2aXNpYmxlUmVjdC55KCkgLSB0aXRsZVJl
Y3QueSgpICsgYm9yZGVyV2lkdGhQeDsKLQotICAgIHRpdGxlUmVjdC5tb3ZlKGR4LCBkeSk7Ci0K
LSAgICBib29sIGlzQXJyb3dBdFRvcCA9IHRpdGxlUmVjdC55KCkgPiBhbmNob3JCb3gueSgpOwot
ICAgIHRpdGxlUmVjdC5tb3ZlKDAsIHRvb2x0aXBQYWRkaW5nICogKGlzQXJyb3dBdFRvcCA/IDEg
OiAtMSkpOwotCi0gICAgewotICAgICAgICBmbG9hdCBhcnJvd1RpcFggPSBjYWxjdWxhdGVBcnJv
d1RpcFgoYW5jaG9yQm94LCB0aXRsZVJlY3QpOwotICAgICAgICBpbnQgYXJyb3dCYXNlWSA9IGlz
QXJyb3dBdFRvcCA/IHRpdGxlUmVjdC55KCkgOiB0aXRsZVJlY3QubWF4WSgpOwotICAgICAgICBp
bnQgYXJyb3dPcHBvc2l0ZVkgPSBpc0Fycm93QXRUb3AgPyB0aXRsZVJlY3QubWF4WSgpIDogdGl0
bGVSZWN0LnkoKTsKLQotICAgICAgICBGbG9hdFBvaW50IHBvaW50c1s4XTsKLSAgICAgICAgcG9p
bnRzWzBdID0gRmxvYXRQb2ludChhcnJvd1RpcFggLSBhcnJvd0hhbGZXaWR0aCwgYXJyb3dCYXNl
WSk7Ci0gICAgICAgIHBvaW50c1sxXSA9IEZsb2F0UG9pbnQoYXJyb3dUaXBYLCBhcnJvd0Jhc2VZ
ICsgYXJyb3dIZWlnaHQgKiAoaXNBcnJvd0F0VG9wID8gLTEgOiAxKSk7Ci0gICAgICAgIHBvaW50
c1syXSA9IEZsb2F0UG9pbnQoYXJyb3dUaXBYICsgYXJyb3dIYWxmV2lkdGgsIGFycm93QmFzZVkp
OwotICAgICAgICBwb2ludHNbM10gPSBGbG9hdFBvaW50KHRpdGxlUmVjdC5tYXhYKCksIGFycm93
QmFzZVkpOwotICAgICAgICBwb2ludHNbNF0gPSBGbG9hdFBvaW50KHRpdGxlUmVjdC5tYXhYKCks
IGFycm93T3Bwb3NpdGVZKTsKLSAgICAgICAgcG9pbnRzWzVdID0gRmxvYXRQb2ludCh0aXRsZVJl
Y3QueCgpLCBhcnJvd09wcG9zaXRlWSk7Ci0gICAgICAgIHBvaW50c1s2XSA9IEZsb2F0UG9pbnQo
dGl0bGVSZWN0LngoKSwgYXJyb3dCYXNlWSk7Ci0gICAgICAgIHBvaW50c1s3XSA9IHBvaW50c1sw
XTsKLQotICAgICAgICBQYXRoIHBhdGg7Ci0gICAgICAgIHBhdGgubW92ZVRvKHBvaW50c1swXSk7
Ci0gICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgODsgKytpKQotICAgICAgICAgICAgcGF0aC5h
ZGRMaW5lVG8ocG9pbnRzW2ldKTsKLQotICAgICAgICBjb250ZXh0LnNhdmUoKTsKLSAgICAgICAg
Y29udGV4dC50cmFuc2xhdGUoMC41ZiwgMC41Zik7Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tl
Q29sb3IocHhBbmRCb3JkZXJDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgICAgIGNv
bnRleHQuc2V0RmlsbENvbG9yKGJhY2tncm91bmRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7
Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGJvcmRlcldpZHRoUHgpOwotICAg
ICAgICBjb250ZXh0LmZpbGxQYXRoKHBhdGgpOwotICAgICAgICBjb250ZXh0LnN0cm9rZVBhdGgo
cGF0aCk7Ci0gICAgICAgIGNvbnRleHQucmVzdG9yZSgpOwotICAgIH0KLQotICAgIGludCBjdXJy
ZW50UG9zID0gMDsKLSAgICBjdXJyZW50UG9zID0gZHJhd1N1YnN0cmluZyhub2RlVGl0bGVSdW4s
IGN1cnJlbnRQb3MsIHRhZ05hbWVMZW5ndGgsIHRhZ0NvbG9yLCBmb250LCBjb250ZXh0LCB0aXRs
ZVJlY3QpOwotICAgIGlmIChpZFN0cmluZ0xlbmd0aCkKLSAgICAgICAgY3VycmVudFBvcyA9IGRy
YXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBjdXJyZW50UG9zLCBpZFN0cmluZ0xlbmd0aCwgYXR0
ckNvbG9yLCBmb250LCBjb250ZXh0LCB0aXRsZVJlY3QpOwotICAgIGlmIChjbGFzc2VzU3RyaW5n
TGVuZ3RoKQotICAgICAgICBjdXJyZW50UG9zID0gZHJhd1N1YnN0cmluZyhub2RlVGl0bGVSdW4s
IGN1cnJlbnRQb3MsIGNsYXNzZXNTdHJpbmdMZW5ndGgsIGF0dHJDb2xvciwgZm9udCwgY29udGV4
dCwgdGl0bGVSZWN0KTsKLSAgICBjdXJyZW50UG9zID0gZHJhd1N1YnN0cmluZyhub2RlVGl0bGVS
dW4sIGN1cnJlbnRQb3MsIHdpZHRoTnVtYmVyUGFydC5sZW5ndGgoKSwgbm9ybWFsQ29sb3IsIGZv
bnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7Ci0gICAgY3VycmVudFBvcyA9IGRyYXdTdWJzdHJpbmco
bm9kZVRpdGxlUnVuLCBjdXJyZW50UG9zLCBweFN0cmluZy5sZW5ndGgoKSArIHRpbWVzU3RyaW5n
Lmxlbmd0aCgpLCBweEFuZEJvcmRlckNvbG9yLCBmb250LCBjb250ZXh0LCB0aXRsZVJlY3QpOwot
ICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3VycmVudFBvcywg
aGVpZ2h0TnVtYmVyUGFydC5sZW5ndGgoKSwgbm9ybWFsQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRp
dGxlUmVjdCk7Ci0gICAgZHJhd1N1YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIHB4
U3RyaW5nLmxlbmd0aCgpLCBweEFuZEJvcmRlckNvbG9yLCBmb250LCBjb250ZXh0LCB0aXRsZVJl
Y3QpOwotfQotCi1zdGF0aWMgdm9pZCBjb250ZW50c1F1YWRUb1BhZ2UoY29uc3QgRnJhbWVWaWV3
KiBtYWluVmlldywgY29uc3QgRnJhbWVWaWV3KiB2aWV3LCBGbG9hdFF1YWQmIHF1YWQpCi17Ci0g
ICAgcXVhZC5zZXRQMSh2aWV3LT5jb250ZW50c1RvUm9vdFZpZXcocm91bmRlZEludFBvaW50KHF1
YWQucDEoKSkpKTsKLSAgICBxdWFkLnNldFAyKHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhyb3Vu
ZGVkSW50UG9pbnQocXVhZC5wMigpKSkpOwotICAgIHF1YWQuc2V0UDModmlldy0+Y29udGVudHNU
b1Jvb3RWaWV3KHJvdW5kZWRJbnRQb2ludChxdWFkLnAzKCkpKSk7Ci0gICAgcXVhZC5zZXRQNCh2
aWV3LT5jb250ZW50c1RvUm9vdFZpZXcocm91bmRlZEludFBvaW50KHF1YWQucDQoKSkpKTsKLSAg
ICBxdWFkICs9IG1haW5WaWV3LT5zY3JvbGxPZmZzZXQoKTsKLX0KLQotc3RhdGljIHZvaWQgZ2V0
T3JEcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEhpZ2hsaWdodERh
dGEqIGhpZ2hsaWdodERhdGEsIEhpZ2hsaWdodCogaGlnaGxpZ2h0KQotewotICAgIE5vZGUqIG5v
ZGUgPSBoaWdobGlnaHREYXRhLT5ub2RlLmdldCgpOwotICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSBub2RlLT5yZW5kZXJlcigpOwotICAgIEZyYW1lKiBjb250YWluaW5nRnJhbWUgPSBub2Rl
LT5kb2N1bWVudCgpLT5mcmFtZSgpOwotCi0gICAgaWYgKCFyZW5kZXJlciB8fCAhY29udGFpbmlu
Z0ZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGcmFtZVZpZXcqIGNvbnRhaW5pbmdWaWV3
ID0gY29udGFpbmluZ0ZyYW1lLT52aWV3KCk7Ci0gICAgRnJhbWVWaWV3KiBtYWluVmlldyA9IGNv
bnRhaW5pbmdGcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpOwotICAgIEludFJlY3Qg
Ym91bmRpbmdCb3ggPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGNvbnRhaW5pbmdWaWV3LT5jb250ZW50
c1RvUm9vdFZpZXcocmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpKTsKLSAgICBi
b3VuZGluZ0JveC5tb3ZlKG1haW5WaWV3LT5zY3JvbGxPZmZzZXQoKSk7Ci0gICAgSW50UmVjdCB0
aXRsZUFuY2hvckJveCA9IGJvdW5kaW5nQm94OwotCi0gICAgRmxvYXRSZWN0IHZpc2libGVSZWN0
ID0gbWFpblZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOwotICAgIC8vIERvbid0IHRyYW5zbGF0
ZSB0aGUgY29udGV4dCBpZiB0aGUgZnJhbWUgaXMgcmVuZGVyZWQgaW4gcGFnZSBjb29yZGluYXRl
cy4KLSAgICBpZiAoY29udGV4dCAmJiAhbWFpblZpZXctPmRlbGVnYXRlc1Njcm9sbGluZygpKQot
ICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoLXZpc2libGVSZWN0LngoKSwgLXZpc2libGVSZWN0
LnkoKSk7Ci0KLSAgICAvLyBSZW5kZXJTVkdSb290IHNob3VsZCBiZSBoaWdobGlnaHRlZCB0aHJv
dWdoIHRoZSBpc0JveCgpIGNvZGUgcGF0aCwgYWxsIG90aGVyIFNWRyBlbGVtZW50cyBzaG91bGQg
anVzdCBkdW1wIHRoZWlyIGFic29sdXRlUXVhZHMoKS4KLSNpZiBFTkFCTEUoU1ZHKQotICAgIGJv
b2wgaXNTVkdSZW5kZXJlciA9IHJlbmRlcmVyLT5ub2RlKCkgJiYgcmVuZGVyZXItPm5vZGUoKS0+
aXNTVkdFbGVtZW50KCkgJiYgIXJlbmRlcmVyLT5pc1NWR1Jvb3QoKTsKLSNlbHNlCi0gICAgYm9v
bCBpc1NWR1JlbmRlcmVyID0gZmFsc2U7Ci0jZW5kaWYKLQotICAgIGlmIChpc1NWR1JlbmRlcmVy
KSB7Ci0gICAgICAgIGhpZ2hsaWdodC0+dHlwZSA9IEhpZ2hsaWdodFR5cGVSZWN0czsKLSAgICAg
ICAgcmVuZGVyZXItPmFic29sdXRlUXVhZHMoaGlnaGxpZ2h0LT5xdWFkcyk7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgaGlnaGxpZ2h0LT5xdWFkcy5zaXplKCk7ICsraSkKLSAgICAg
ICAgICAgIGNvbnRlbnRzUXVhZFRvUGFnZShtYWluVmlldywgY29udGFpbmluZ1ZpZXcsIGhpZ2hs
aWdodC0+cXVhZHNbaV0pOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICAgICAgZHJh
d0hpZ2hsaWdodEZvclNWR1JlbmRlcmVyKCpjb250ZXh0LCBoaWdobGlnaHQtPnF1YWRzLCBoaWdo
bGlnaHREYXRhKTsKLSAgICB9IGVsc2UgaWYgKHJlbmRlcmVyLT5pc0JveCgpIHx8IHJlbmRlcmVy
LT5pc1JlbmRlcklubGluZSgpKSB7Ci0gICAgICAgIExheW91dFJlY3QgY29udGVudEJveDsKLSAg
ICAgICAgTGF5b3V0UmVjdCBwYWRkaW5nQm94OwotICAgICAgICBMYXlvdXRSZWN0IGJvcmRlckJv
eDsKLSAgICAgICAgTGF5b3V0UmVjdCBtYXJnaW5Cb3g7Ci0KLSAgICAgICAgaWYgKHJlbmRlcmVy
LT5pc0JveCgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IHRvUmVuZGVy
Qm94KHJlbmRlcmVyKTsKLQotICAgICAgICAgICAgLy8gUmVuZGVyQm94IHJldHVybnMgdGhlICJw
dXJlIiBjb250ZW50IGFyZWEgYm94LCBleGNsdXNpdmUgb2YgdGhlIHNjcm9sbGJhcnMgKGlmIHBy
ZXNlbnQpLCB3aGljaCBhbHNvIGNvdW50IHRvd2FyZHMgdGhlIGNvbnRlbnQgYXJlYSBpbiBDU1Mu
Ci0gICAgICAgICAgICBjb250ZW50Qm94ID0gcmVuZGVyQm94LT5jb250ZW50Qm94UmVjdCgpOwot
ICAgICAgICAgICAgY29udGVudEJveC5zZXRXaWR0aChjb250ZW50Qm94LndpZHRoKCkgKyByZW5k
ZXJCb3gtPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSk7Ci0gICAgICAgICAgICBjb250ZW50Qm94
LnNldEhlaWdodChjb250ZW50Qm94LmhlaWdodCgpICsgcmVuZGVyQm94LT5ob3Jpem9udGFsU2Ny
b2xsYmFySGVpZ2h0KCkpOwotCi0gICAgICAgICAgICBwYWRkaW5nQm94ID0gTGF5b3V0UmVjdChj
b250ZW50Qm94LngoKSAtIHJlbmRlckJveC0+cGFkZGluZ0xlZnQoKSwgY29udGVudEJveC55KCkg
LSByZW5kZXJCb3gtPnBhZGRpbmdUb3AoKSwKLSAgICAgICAgICAgICAgICAgICAgY29udGVudEJv
eC53aWR0aCgpICsgcmVuZGVyQm94LT5wYWRkaW5nTGVmdCgpICsgcmVuZGVyQm94LT5wYWRkaW5n
UmlnaHQoKSwgY29udGVudEJveC5oZWlnaHQoKSArIHJlbmRlckJveC0+cGFkZGluZ1RvcCgpICsg
cmVuZGVyQm94LT5wYWRkaW5nQm90dG9tKCkpOwotICAgICAgICAgICAgYm9yZGVyQm94ID0gTGF5
b3V0UmVjdChwYWRkaW5nQm94LngoKSAtIHJlbmRlckJveC0+Ym9yZGVyTGVmdCgpLCBwYWRkaW5n
Qm94LnkoKSAtIHJlbmRlckJveC0+Ym9yZGVyVG9wKCksCi0gICAgICAgICAgICAgICAgICAgIHBh
ZGRpbmdCb3gud2lkdGgoKSArIHJlbmRlckJveC0+Ym9yZGVyTGVmdCgpICsgcmVuZGVyQm94LT5i
b3JkZXJSaWdodCgpLCBwYWRkaW5nQm94LmhlaWdodCgpICsgcmVuZGVyQm94LT5ib3JkZXJUb3Ao
KSArIHJlbmRlckJveC0+Ym9yZGVyQm90dG9tKCkpOwotICAgICAgICAgICAgbWFyZ2luQm94ID0g
TGF5b3V0UmVjdChib3JkZXJCb3gueCgpIC0gcmVuZGVyQm94LT5tYXJnaW5MZWZ0KCksIGJvcmRl
ckJveC55KCkgLSByZW5kZXJCb3gtPm1hcmdpblRvcCgpLAotICAgICAgICAgICAgICAgICAgICBi
b3JkZXJCb3gud2lkdGgoKSArIHJlbmRlckJveC0+bWFyZ2luV2lkdGgoKSwgYm9yZGVyQm94Lmhl
aWdodCgpICsgcmVuZGVyQm94LT5tYXJnaW5IZWlnaHQoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBSZW5kZXJJbmxpbmUqIHJlbmRlcklubGluZSA9IHRvUmVuZGVySW5saW5lKHJl
bmRlcmVyKTsKLQotICAgICAgICAgICAgLy8gUmVuZGVySW5saW5lJ3MgYm91bmRpbmcgYm94IGlu
Y2x1ZGVzIHBhZGRpbmdzIGFuZCBib3JkZXJzLCBleGNsdWRlcyBtYXJnaW5zLgotICAgICAgICAg
ICAgYm9yZGVyQm94ID0gcmVuZGVySW5saW5lLT5saW5lc0JvdW5kaW5nQm94KCk7Ci0gICAgICAg
ICAgICBwYWRkaW5nQm94ID0gTGF5b3V0UmVjdChib3JkZXJCb3gueCgpICsgcmVuZGVySW5saW5l
LT5ib3JkZXJMZWZ0KCksIGJvcmRlckJveC55KCkgKyByZW5kZXJJbmxpbmUtPmJvcmRlclRvcCgp
LAotICAgICAgICAgICAgICAgICAgICBib3JkZXJCb3gud2lkdGgoKSAtIHJlbmRlcklubGluZS0+
Ym9yZGVyTGVmdCgpIC0gcmVuZGVySW5saW5lLT5ib3JkZXJSaWdodCgpLCBib3JkZXJCb3guaGVp
Z2h0KCkgLSByZW5kZXJJbmxpbmUtPmJvcmRlclRvcCgpIC0gcmVuZGVySW5saW5lLT5ib3JkZXJC
b3R0b20oKSk7Ci0gICAgICAgICAgICBjb250ZW50Qm94ID0gTGF5b3V0UmVjdChwYWRkaW5nQm94
LngoKSArIHJlbmRlcklubGluZS0+cGFkZGluZ0xlZnQoKSwgcGFkZGluZ0JveC55KCkgKyByZW5k
ZXJJbmxpbmUtPnBhZGRpbmdUb3AoKSwKLSAgICAgICAgICAgICAgICAgICAgcGFkZGluZ0JveC53
aWR0aCgpIC0gcmVuZGVySW5saW5lLT5wYWRkaW5nTGVmdCgpIC0gcmVuZGVySW5saW5lLT5wYWRk
aW5nUmlnaHQoKSwgcGFkZGluZ0JveC5oZWlnaHQoKSAtIHJlbmRlcklubGluZS0+cGFkZGluZ1Rv
cCgpIC0gcmVuZGVySW5saW5lLT5wYWRkaW5nQm90dG9tKCkpOwotICAgICAgICAgICAgLy8gSWdu
b3JlIG1hcmdpblRvcCBhbmQgbWFyZ2luQm90dG9tIGZvciBpbmxpbmVzLgotICAgICAgICAgICAg
bWFyZ2luQm94ID0gTGF5b3V0UmVjdChib3JkZXJCb3gueCgpIC0gcmVuZGVySW5saW5lLT5tYXJn
aW5MZWZ0KCksIGJvcmRlckJveC55KCksCi0gICAgICAgICAgICAgICAgICAgIGJvcmRlckJveC53
aWR0aCgpICsgcmVuZGVySW5saW5lLT5tYXJnaW5XaWR0aCgpLCBib3JkZXJCb3guaGVpZ2h0KCkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgRmxvYXRRdWFkIGFic0NvbnRlbnRRdWFkID0gcmVuZGVy
ZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGNvbnRlbnRCb3gpKTsKLSAgICAgICAg
RmxvYXRRdWFkIGFic1BhZGRpbmdRdWFkID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQo
RmxvYXRSZWN0KHBhZGRpbmdCb3gpKTsKLSAgICAgICAgRmxvYXRRdWFkIGFic0JvcmRlclF1YWQg
PSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoYm9yZGVyQm94KSk7Ci0g
ICAgICAgIEZsb2F0UXVhZCBhYnNNYXJnaW5RdWFkID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0
ZVF1YWQoRmxvYXRSZWN0KG1hcmdpbkJveCkpOwotCi0gICAgICAgIGNvbnRlbnRzUXVhZFRvUGFn
ZShtYWluVmlldywgY29udGFpbmluZ1ZpZXcsIGFic0NvbnRlbnRRdWFkKTsKLSAgICAgICAgY29u
dGVudHNRdWFkVG9QYWdlKG1haW5WaWV3LCBjb250YWluaW5nVmlldywgYWJzUGFkZGluZ1F1YWQp
OwotICAgICAgICBjb250ZW50c1F1YWRUb1BhZ2UobWFpblZpZXcsIGNvbnRhaW5pbmdWaWV3LCBh
YnNCb3JkZXJRdWFkKTsKLSAgICAgICAgY29udGVudHNRdWFkVG9QYWdlKG1haW5WaWV3LCBjb250
YWluaW5nVmlldywgYWJzTWFyZ2luUXVhZCk7Ci0KLSAgICAgICAgdGl0bGVBbmNob3JCb3ggPSBh
YnNNYXJnaW5RdWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7Ci0KLSAgICAgICAgaGlnaGxpZ2h0
LT50eXBlID0gSGlnaGxpZ2h0VHlwZU5vZGU7Ci0gICAgICAgIGhpZ2hsaWdodC0+cXVhZHMuYXBw
ZW5kKGFic01hcmdpblF1YWQpOwotICAgICAgICBoaWdobGlnaHQtPnF1YWRzLmFwcGVuZChhYnNC
b3JkZXJRdWFkKTsKLSAgICAgICAgaGlnaGxpZ2h0LT5xdWFkcy5hcHBlbmQoYWJzUGFkZGluZ1F1
YWQpOwotICAgICAgICBoaWdobGlnaHQtPnF1YWRzLmFwcGVuZChhYnNDb250ZW50UXVhZCk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgICAgICBkcmF3SGlnaGxpZ2h0Rm9yQm94KCpj
b250ZXh0LCBhYnNDb250ZW50UXVhZCwgYWJzUGFkZGluZ1F1YWQsIGFic0JvcmRlclF1YWQsIGFi
c01hcmdpblF1YWQsIGhpZ2hsaWdodERhdGEpOwotICAgIH0KLQotICAgIC8vIERyYXcgbm9kZSB0
aXRsZSBpZiBuZWNlc3NhcnkuCi0KLSAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGNvbnRleHQgJiYgaGlnaGxpZ2h0RGF0YS0+c2hvd0lu
Zm8pCi0gICAgICAgIGRyYXdFbGVtZW50VGl0bGUoKmNvbnRleHQsIG5vZGUsIHJlbmRlcmVyLCBw
aXhlbFNuYXBwZWRJbnRSZWN0KGJvdW5kaW5nQm94KSwgcGl4ZWxTbmFwcGVkSW50UmVjdCh0aXRs
ZUFuY2hvckJveCksIHZpc2libGVSZWN0LCBjb250YWluaW5nRnJhbWUtPnNldHRpbmdzKCkpOwot
fQotCi1zdGF0aWMgdm9pZCBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgRG9jdW1lbnQqIGRvY3VtZW50LCBIaWdobGlnaHREYXRhKiBoaWdobGlnaHREYXRh
LCBIaWdobGlnaHQgKmhpZ2hsaWdodCkKLXsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBGbG9hdFJlY3QgaGlnaGxpZ2h0UmVjdCgqKGhpZ2hsaWdodERhdGEtPnJl
Y3QpKTsKLQotICAgIGhpZ2hsaWdodC0+dHlwZSA9IEhpZ2hsaWdodFR5cGVSZWN0czsKLSAgICBo
aWdobGlnaHQtPnF1YWRzLmFwcGVuZChoaWdobGlnaHRSZWN0KTsKLQotICAgIGlmIChjb250ZXh0
KSB7Ci0gICAgICAgIEZyYW1lVmlldyogdmlldyA9IGRvY3VtZW50LT5mcmFtZSgpLT52aWV3KCk7
Ci0gICAgICAgIGlmICghdmlldy0+ZGVsZWdhdGVzU2Nyb2xsaW5nKCkpIHsKLSAgICAgICAgICAg
IEZsb2F0UmVjdCB2aXNpYmxlUmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOwotICAg
ICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKC12aXNpYmxlUmVjdC54KCksIC12aXNpYmxlUmVj
dC55KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZHJhd091dGxpbmVkUXVhZCgqY29udGV4dCwg
aGlnaGxpZ2h0UmVjdCwgaGlnaGxpZ2h0RGF0YS0+Y29udGVudCwgaGlnaGxpZ2h0RGF0YS0+Y29u
dGVudE91dGxpbmUpOwotICAgIH0KLX0KLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLW5h
bWVzcGFjZSBET01Ob2RlSGlnaGxpZ2h0ZXIgewotCi12b2lkIGRyYXdIaWdobGlnaHQoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBEb2N1bWVudCogZG9jdW1lbnQsIEhpZ2hsaWdodERhdGEqIGhp
Z2hsaWdodERhdGEpCi17Ci0gICAgaWYgKCFoaWdobGlnaHREYXRhKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBIaWdobGlnaHQgaGlnaGxpZ2h0OwotICAgIGlmIChoaWdobGlnaHREYXRhLT5ub2Rl
KQotICAgICAgICBnZXRPckRyYXdOb2RlSGlnaGxpZ2h0KCZjb250ZXh0LCBoaWdobGlnaHREYXRh
LCAmaGlnaGxpZ2h0KTsKLSAgICBlbHNlIGlmIChoaWdobGlnaHREYXRhLT5yZWN0KQotICAgICAg
ICBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0KCZjb250ZXh0LCBkb2N1bWVudCwgaGlnaGxpZ2h0RGF0
YSwgJmhpZ2hsaWdodCk7Ci19Ci0KLXZvaWQgZ2V0SGlnaGxpZ2h0KERvY3VtZW50KiBkb2N1bWVu
dCwgSGlnaGxpZ2h0RGF0YSogaGlnaGxpZ2h0RGF0YSwgSGlnaGxpZ2h0KiBoaWdobGlnaHQpCi17
Ci0gICAgaWYgKCFoaWdobGlnaHREYXRhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBoaWdobGln
aHQtPmNvbnRlbnRDb2xvciA9IGhpZ2hsaWdodERhdGEtPmNvbnRlbnQ7Ci0gICAgaGlnaGxpZ2h0
LT5wYWRkaW5nQ29sb3IgPSBoaWdobGlnaHREYXRhLT5wYWRkaW5nOwotICAgIGhpZ2hsaWdodC0+
Ym9yZGVyQ29sb3IgPSBoaWdobGlnaHREYXRhLT5ib3JkZXI7Ci0gICAgaGlnaGxpZ2h0LT5tYXJn
aW5Db2xvciA9IGhpZ2hsaWdodERhdGEtPm1hcmdpbjsKLSAgICBoaWdobGlnaHQtPnR5cGUgPSBI
aWdobGlnaHRUeXBlUmVjdHM7Ci0KLSAgICBpZiAoaGlnaGxpZ2h0RGF0YS0+bm9kZSkKLSAgICAg
ICAgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdodCgwLCBoaWdobGlnaHREYXRhLCBoaWdobGlnaHQpOwot
ICAgIGVsc2UgaWYgKGhpZ2hsaWdodERhdGEtPnJlY3QpCi0gICAgICAgIGdldE9yRHJhd1JlY3RI
aWdobGlnaHQoMCwgZG9jdW1lbnQsIGhpZ2hsaWdodERhdGEsIGhpZ2hsaWdodCk7Ci19Ci0KLXZv
aWQgZHJhd091dGxpbmUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgRmxvYXRSZWN0IG91dGxpbmVSZWN0
ID0gcmVjdDsKLSAgICBkcmF3T3V0bGluZWRRdWFkKGNvbnRleHQsIG91dGxpbmVSZWN0LCBDb2xv
cigpLCBjb2xvcik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIERPTU5vZGVIaWdobGlnaHRlcgotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBmN2I2ZjAwZjRmZmUwMjU5MTM1NTI1NGRmZTE5M2QwMzA2MmNl
M2Q5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaAorKysgL2Rldi9udWxsCkBA
IC0xLDg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0g
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERPTU5vZGVIaWdobGlnaHRlcl9oCi0jZGVmaW5lIERP
TU5vZGVIaWdobGlnaHRlcl9oCi0KLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZsb2F0
UXVhZC5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDb2xvcjsKLWNsYXNzIERvY3VtZW50OwotY2xh
c3MgRnJhbWVWaWV3OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgTm9kZTsKLQotc3Ry
dWN0IEhpZ2hsaWdodERhdGEgewotICAgIENvbG9yIGNvbnRlbnQ7Ci0gICAgQ29sb3IgY29udGVu
dE91dGxpbmU7Ci0gICAgQ29sb3IgcGFkZGluZzsKLSAgICBDb2xvciBib3JkZXI7Ci0gICAgQ29s
b3IgbWFyZ2luOwotICAgIGJvb2wgc2hvd0luZm87Ci0KLSAgICAvLyBFaXRoZXIgb2YgdGhlc2Ug
bXVzdCBiZSAwLgotICAgIFJlZlB0cjxOb2RlPiBub2RlOwotICAgIE93blB0cjxJbnRSZWN0PiBy
ZWN0OwotfTsKLQotZW51bSBIaWdobGlnaHRUeXBlIHsKLSAgICBIaWdobGlnaHRUeXBlTm9kZSwK
LSAgICBIaWdobGlnaHRUeXBlUmVjdHMsCi19OwotCi1zdHJ1Y3QgSGlnaGxpZ2h0IHsKLSAgICBD
b2xvciBjb250ZW50Q29sb3I7Ci0gICAgQ29sb3IgcGFkZGluZ0NvbG9yOwotICAgIENvbG9yIGJv
cmRlckNvbG9yOwotICAgIENvbG9yIG1hcmdpbkNvbG9yOwotCi0gICAgLy8gV2hlbiB0aGUgdHlw
ZSBpcyBOb2RlLCB0aGVyZSBhcmUgNCBxdWFkcyAobWFyZ2luLCBib3JkZXIsIHBhZGRpbmcsIGNv
bnRlbnQpLgotICAgIC8vIFdoZW4gdGhlIHR5cGUgaXMgUmVjdHMsIHRoaXMgaXMganVzdCBhIGxp
c3Qgb2YgcXVhZHMuCi0gICAgSGlnaGxpZ2h0VHlwZSB0eXBlOwotICAgIFZlY3RvcjxGbG9hdFF1
YWQ+IHF1YWRzOwotfTsKLQotbmFtZXNwYWNlIERPTU5vZGVIaWdobGlnaHRlciB7Ci0KLXZvaWQg
ZHJhd0hpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmLCBEb2N1bWVudCosIEhpZ2hsaWdodERhdGEq
KTsKLXZvaWQgZ2V0SGlnaGxpZ2h0KERvY3VtZW50KiwgSGlnaGxpZ2h0RGF0YSosIEhpZ2hsaWdo
dCopOwotdm9pZCBkcmF3T3V0bGluZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0
JiwgY29uc3QgQ29sb3ImKTsKLQotfSAvLyBuYW1lc3BhY2UgRE9NTm9kZUhpZ2hsaWdodGVyCi0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotCi0jZW5kaWYgLy8gRE9NTm9kZUhpZ2hsaWdodGVy
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cAppbmRleCAwOTVlMWNjNTFiMzU0YThmOGUwODE0NmE3OWVmNzA4ZGI3Y2Q0OWNlLi41Mzk3Mzc2
MmI1MTFkZWFjOTNlOGIwZmY5MDYxNmE2OTQxMjdiMDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC01Niw2ICs1Niw3IEBACiAj
aW5jbHVkZSAiSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJJbnNwZWN0b3JNZW1vcnlBZ2VudC5oIgorI2lu
Y2x1ZGUgIkluc3BlY3Rvck92ZXJsYXkuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JQYWdlQWdlbnQu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JQcm9maWxlckFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yUmVzb3VyY2VBZ2VudC5oIgpAQCAtNzgsNiArNzksNyBAQCBJbnNwZWN0b3JDb250cm9sbGVy
OjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogaW5zcGVj
dG9yQwogICAgIDogbV9pbnN0cnVtZW50aW5nQWdlbnRzKGFkb3B0UHRyKG5ldyBJbnN0cnVtZW50
aW5nQWdlbnRzKCkpKQogICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyOjpjcmVhdGVGb3JQYWdlKCkpCiAgICAgLCBtX3N0YXRlKGFkb3B0UHRyKG5ldyBJ
bnNwZWN0b3JTdGF0ZShpbnNwZWN0b3JDbGllbnQpKSkKKyAgICAsIG1fb3ZlcmxheShJbnNwZWN0
b3JPdmVybGF5OjpjcmVhdGUocGFnZSwgaW5zcGVjdG9yQ2xpZW50KSkKICAgICAsIG1fcGFnZShw
YWdlKQogICAgICwgbV9pbnNwZWN0b3JDbGllbnQoaW5zcGVjdG9yQ2xpZW50KQogewpAQCAtODUs
MTIgKzg3LDEyIEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFn
ZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDCiAgICAgbV9pbnNwZWN0b3JBZ2Vu
dCA9IGluc3BlY3RvckFnZW50UHRyLmdldCgpOwogICAgIG1fYWdlbnRzLmFwcGVuZChpbnNwZWN0
b3JBZ2VudFB0ci5yZWxlYXNlKCkpOwogCi0gICAgT3duUHRyPEluc3BlY3RvclBhZ2VBZ2VudD4g
cGFnZUFnZW50UHRyKEluc3BlY3RvclBhZ2VBZ2VudDo6Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy5nZXQoKSwgcGFnZSwgbV9pbnNwZWN0b3JBZ2VudCwgbV9zdGF0ZS5nZXQoKSwgbV9pbmpl
Y3RlZFNjcmlwdE1hbmFnZXIuZ2V0KCksIGluc3BlY3RvckNsaWVudCkpOworICAgIE93blB0cjxJ
bnNwZWN0b3JQYWdlQWdlbnQ+IHBhZ2VBZ2VudFB0cihJbnNwZWN0b3JQYWdlQWdlbnQ6OmNyZWF0
ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIHBhZ2UsIG1faW5zcGVjdG9yQWdlbnQsIG1f
c3RhdGUuZ2V0KCksIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpLCBpbnNwZWN0b3JDbGll
bnQsIG1fb3ZlcmxheS5nZXQoKSkpOwogICAgIEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50
ID0gcGFnZUFnZW50UHRyLmdldCgpOwogICAgIG1fcGFnZUFnZW50ID0gcGFnZUFnZW50UHRyLmdl
dCgpOwogICAgIG1fYWdlbnRzLmFwcGVuZChwYWdlQWdlbnRQdHIucmVsZWFzZSgpKTsKIAotICAg
IE93blB0cjxJbnNwZWN0b3JET01BZ2VudD4gZG9tQWdlbnRQdHIoSW5zcGVjdG9yRE9NQWdlbnQ6
OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIHBhZ2VBZ2VudCwgaW5zcGVjdG9y
Q2xpZW50LCBtX3N0YXRlLmdldCgpLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5nZXQoKSkpOwor
ICAgIE93blB0cjxJbnNwZWN0b3JET01BZ2VudD4gZG9tQWdlbnRQdHIoSW5zcGVjdG9yRE9NQWdl
bnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIHBhZ2VBZ2VudCwgbV9zdGF0
ZS5nZXQoKSwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuZ2V0KCksIG1fb3ZlcmxheS5nZXQoKSkp
OwogICAgIG1fZG9tQWdlbnQgPSBkb21BZ2VudFB0ci5nZXQoKTsKICAgICBtX2FnZW50cy5hcHBl
bmQoZG9tQWdlbnRQdHIucmVsZWFzZSgpKTsKIApAQCAtMTMwLDcgKzEzMiw3IEBAIEluc3BlY3Rv
ckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xp
ZW50KiBpbnNwZWN0b3JDCiAgICAgbV9hZ2VudHMuYXBwZW5kKGNvbnNvbGVBZ2VudFB0ci5yZWxl
YXNlKCkpOwogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgT3duUHRyPElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ+IGRlYnVnZ2VyQWdlbnRQdHIoUGFnZURlYnVnZ2VyQWdlbnQ6
OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1fc3RhdGUuZ2V0KCksIHBhZ2Us
IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpKSk7CisgICAgT3duUHRyPEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ+IGRlYnVnZ2VyQWdlbnRQdHIoUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZSht
X2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1fc3RhdGUuZ2V0KCksIHBhZ2UsIG1faW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyLmdldCgpLCBtX292ZXJsYXkuZ2V0KCkpKTsKICAgICBtX2RlYnVnZ2Vy
QWdlbnQgPSBkZWJ1Z2dlckFnZW50UHRyLmdldCgpOwogICAgIG1fYWdlbnRzLmFwcGVuZChkZWJ1
Z2dlckFnZW50UHRyLnJlbGVhc2UoKSk7CiAKQEAgLTI5NCw3ICsyOTYsNyBAQCB2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQobG9uZyBjYWxsSWQsIGNv
bnN0IFN0cmluZyYgcwogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRyYXdIaWdobGlnaHQo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewotICAgIG1fZG9tQWdlbnQtPmRyYXdI
aWdobGlnaHQoY29udGV4dCk7CisgICAgbV9wYWdlQWdlbnQtPmRyYXdJbnNwZWN0b3JPdmVybGF5
KGNvbnRleHQpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldEhpZ2hsaWdodChI
aWdobGlnaHQqIGhpZ2hsaWdodCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDQ3M2JiOGRlMjZmZWEwYWM3MDQ2ZjY2NDk3OWFk
ZmNkNGVjYTViZWQuLjBiNTU4MmNkOTNmZDk5YmRlOGExMTEwMzEyZWIzOTE5YzIzZmY1MTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAt
NTEsNiArNTEsNyBAQCBjbGFzcyBJbnNwZWN0b3JET01BZ2VudDsKIGNsYXNzIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKIGNsYXNzIEluc3BlY3RvckZy
b250ZW5kQ2xpZW50OworY2xhc3MgSW5zcGVjdG9yT3ZlcmxheTsKIGNsYXNzIEluc3BlY3RvclBh
Z2VBZ2VudDsKIGNsYXNzIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JS
ZXNvdXJjZUFnZW50OwpAQCAtMTE5LDYgKzEyMCw3IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPElu
c3RydW1lbnRpbmdBZ2VudHM+IG1faW5zdHJ1bWVudGluZ0FnZW50czsKICAgICBPd25QdHI8SW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyPiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKICAgICBPd25QdHI8
SW5zcGVjdG9yU3RhdGU+IG1fc3RhdGU7CisgICAgT3duUHRyPEluc3BlY3Rvck92ZXJsYXk+IG1f
b3ZlcmxheTsKIAogICAgIEluc3BlY3RvckFnZW50KiBtX2luc3BlY3RvckFnZW50OwogICAgIElu
c3BlY3RvckRPTUFnZW50KiBtX2RvbUFnZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggOTA3OTU4OWU1MWNlOGYwOGU1MGUyMDZlNDlh
MTMyNmJlOTVjMzAxMi4uMWJmN2UyNWJhMjIyODk3NTk3YTIzNjM5ODc4ZWJhMDljNTgxYjFjMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBA
IC00Nyw3ICs0Nyw2IEBACiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiQ29va2llSmFy
LmgiCiAjaW5jbHVkZSAiRE9NRWRpdG9yLmgiCi0jaW5jbHVkZSAiRE9NTm9kZUhpZ2hsaWdodGVy
LmgiCiAjaW5jbHVkZSAiRE9NUGF0Y2hTdXBwb3J0LmgiCiAjaW5jbHVkZSAiRE9NV2luZG93Lmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTY2LDkgKzY1LDkgQEAKICNpbmNsdWRlICJIaXRU
ZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllcnNGYWN0b3J5LmgiCiAjaW5jbHVkZSAi
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JIaXN0b3J5
LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yT3ZlcmxheS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclBh
Z2VBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclN0YXRlLmgiCiAjaW5jbHVkZSAiSW5zdHJ1
bWVudGluZ0FnZW50cy5oIgpAQCAtMTk0LDExICsxOTMsMTEgQEAgU3RyaW5nIEluc3BlY3RvckRP
TUFnZW50Ojp0b0Vycm9yU3RyaW5nKGNvbnN0IEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHJldHVy
biAiIjsKIH0KIAotSW5zcGVjdG9yRE9NQWdlbnQ6Okluc3BlY3RvckRPTUFnZW50KEluc3RydW1l
bnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclBhZ2VBZ2VudCogcGFn
ZUFnZW50LCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCwgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3Rv
clN0YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlcikKK0lu
c3BlY3RvckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBp
bnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgSW5zcGVj
dG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVk
U2NyaXB0TWFuYWdlciwgSW5zcGVjdG9yT3ZlcmxheSogb3ZlcmxheSkKICAgICA6IEluc3BlY3Rv
ckJhc2VBZ2VudDxJbnNwZWN0b3JET01BZ2VudD4oIkRPTSIsIGluc3RydW1lbnRpbmdBZ2VudHMs
IGluc3BlY3RvclN0YXRlKQogICAgICwgbV9wYWdlQWdlbnQocGFnZUFnZW50KQotICAgICwgbV9j
bGllbnQoY2xpZW50KQogICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoaW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKQorICAgICwgbV9vdmVybGF5KG92ZXJsYXkpCiAgICAgLCBtX2Zyb250ZW5kKDAp
CiAgICAgLCBtX2RvbUxpc3RlbmVyKDApCiAgICAgLCBtX2xhc3ROb2RlSWQoMSkKQEAgLTEwMzYs
NyArMTAzNSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodCgpCiB7CiAgICAg
Ly8gVGhpcyBtZXRob2QgcmVxdWlyZXMgbV9oaWdobGlnaHREYXRhIHRvIGhhdmUgYmVlbiBmaWxs
ZWQgaW4gYnkgaXRzIGNsaWVudC4KICAgICBBU1NFUlQobV9oaWdobGlnaHREYXRhKTsKLSAgICBt
X2NsaWVudC0+aGlnaGxpZ2h0KCk7CisgICAgbV9vdmVybGF5LT5zZXRIaWdobGlnaHQobV9kb2N1
bWVudC5nZXQoKSwgbV9oaWdobGlnaHREYXRhLmdldCgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6aGlnaGxpZ2h0UmVjdChFcnJvclN0cmluZyosIGludCB4LCBpbnQgeSwgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogY29sb3IsIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBvdXRsaW5lQ29sb3IpCkBAIC0xMDQ1LDcgKzEw
NDQsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRSZWN0KEVycm9yU3RyaW5n
KiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludAogICAgIG1faGlnaGxpZ2h0RGF0YS0+cmVj
dCA9IGFkb3B0UHRyKG5ldyBJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKICAgICBtX2hp
Z2hsaWdodERhdGEtPmNvbnRlbnQgPSBwYXJzZUNvbG9yKGNvbG9yKTsKICAgICBtX2hpZ2hsaWdo
dERhdGEtPmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb2xvcihvdXRsaW5lQ29sb3IpOwotICAgIG1f
Y2xpZW50LT5oaWdobGlnaHQoKTsKKyAgICBoaWdobGlnaHQoKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6aGlnaGxpZ2h0Tm9kZSgKQEAgLTEwODQsNyArMTA4Myw3IEBAIHZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OmhpZGVIaWdobGlnaHQoRXJyb3JTdHJpbmcqKQogICAgICAgICBtX2hp
Z2hsaWdodERhdGEtPm5vZGUuY2xlYXIoKTsKICAgICAgICAgbV9oaWdobGlnaHREYXRhLT5yZWN0
LmNsZWFyKCk7CiAgICAgfQotICAgIG1fY2xpZW50LT5oaWRlSGlnaGxpZ2h0KCk7CisgICAgaGln
aGxpZ2h0KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Om1vdmVUbyhFcnJvclN0cmlu
ZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGludCB0YXJnZXRFbGVtZW50SWQsIGNvbnN0IGlu
dCogY29uc3QgYW5jaG9yTm9kZUlkLCBpbnQqIG5ld05vZGVJZCkKQEAgLTE1OTksMjAgKzE1OTgs
MTIgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbnNw
ZWN0b3JET01BZ2VudDo6cmVzb2x2ZU5vZGUoTm8KICAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHQu
d3JhcE5vZGUobm9kZSwgb2JqZWN0R3JvdXApOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50
OjpkcmF3SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1faGlnaGxpZ2h0RGF0YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRE9NTm9kZUhpZ2hs
aWdodGVyOjpkcmF3SGlnaGxpZ2h0KGNvbnRleHQsIG1faGlnaGxpZ2h0RGF0YS0+bm9kZSA/IG1f
aGlnaGxpZ2h0RGF0YS0+bm9kZS0+ZG9jdW1lbnQoKSA6IG1fZG9jdW1lbnQuZ2V0KCksIG1faGln
aGxpZ2h0RGF0YS5nZXQoKSk7Ci19Ci0KIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEhpZ2hs
aWdodChIaWdobGlnaHQqIGhpZ2hsaWdodCkgY29uc3QKIHsKICAgICBpZiAoIW1faGlnaGxpZ2h0
RGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRE9NTm9kZUhpZ2hsaWdodGVyOjpnZXRIaWdo
bGlnaHQobV9oaWdobGlnaHREYXRhLT5ub2RlID8gbV9oaWdobGlnaHREYXRhLT5ub2RlLT5kb2N1
bWVudCgpIDogbV9kb2N1bWVudC5nZXQoKSwgbV9oaWdobGlnaHREYXRhLmdldCgpLCBoaWdobGln
aHQpOworICAgIG1fb3ZlcmxheS0+Z2V0SGlnaGxpZ2h0KG1faGlnaGxpZ2h0RGF0YS0+bm9kZSA/
IG1faGlnaGxpZ2h0RGF0YS0+bm9kZS0+ZG9jdW1lbnQoKSA6IG1fZG9jdW1lbnQuZ2V0KCksIG1f
aGlnaGxpZ2h0RGF0YS5nZXQoKSwgaGlnaGxpZ2h0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFn
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRl
eCBiMDVhYjU3MGQ5ZmQxYjA0ODcwNmEzOTNhMjQ2NjU5N2I0OTYzOWJmLi4zYjNmNTliZTc2ODg2
OWIzYTgwYzE2N2JlOWJkMjYxMjA1MWE3MjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuaApAQCAtNTYsOSArNTYsOSBAQCBjbGFzcyBEb2N1bWVudDsK
IGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBFdmVudDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNs
YXNzIEluc3BlY3RvckNsaWVudDsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kOwogY2xhc3MgSW5z
cGVjdG9ySGlzdG9yeTsKK2NsYXNzIEluc3BlY3Rvck92ZXJsYXk7CiBjbGFzcyBJbnNwZWN0b3JQ
YWdlQWdlbnQ7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgSGl0VGVzdFJlc3VsdDsKQEAgLTEwMyw5
ICsxMDMsOSBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRNb2RpZnlET01BdHRy
KEVsZW1lbnQqKSA9IDA7CiAgICAgfTsKIAotICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3Rv
ckRPTUFnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cywgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIEluc3BlY3RvckNsaWVudCogY2xpZW50
LCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdlciog
aW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3RvckRP
TUFnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywg
SW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JT
dGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIEluc3Bl
Y3Rvck92ZXJsYXkqIG92ZXJsYXkpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IEluc3BlY3RvckRPTUFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIHBhZ2VBZ2VudCwgY2xpZW50
LCBpbnNwZWN0b3JTdGF0ZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKSk7CisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgSW5zcGVjdG9yRE9NQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgcGFn
ZUFnZW50LCBpbnNwZWN0b3JTdGF0ZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBvdmVybGF5KSk7
CiAgICAgfQogCiAgICAgc3RhdGljIFN0cmluZyB0b0Vycm9yU3RyaW5nKGNvbnN0IEV4Y2VwdGlv
bkNvZGUmKTsKQEAgLTE4NSw3ICsxODUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnNwZWN0KE5v
ZGUqKTsKICAgICB2b2lkIGZvY3VzTm9kZSgpOwogCi0gICAgdm9pZCBkcmF3SGlnaGxpZ2h0KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OwogICAgIHZvaWQgZ2V0SGlnaGxpZ2h0KEhpZ2hsaWdodCop
IGNvbnN0OwogCiAgICAgSW5zcGVjdG9ySGlzdG9yeSogaGlzdG9yeSgpIHsgcmV0dXJuIG1faGlz
dG9yeS5nZXQoKTsgfQpAQCAtMjA1LDcgKzIwNCw3IEBAIHB1YmxpYzoKICAgICBJbnNwZWN0b3JQ
YWdlQWdlbnQqIHBhZ2VBZ2VudCgpIHsgcmV0dXJuIG1fcGFnZUFnZW50OyB9CiAKIHByaXZhdGU6
Ci0gICAgSW5zcGVjdG9yRE9NQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclBh
Z2VBZ2VudCosIEluc3BlY3RvckNsaWVudCosIEluc3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKik7CisgICAgSW5zcGVjdG9yRE9NQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyos
IEluc3BlY3RvclBhZ2VBZ2VudCosIEluc3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyKiwgSW5zcGVjdG9yT3ZlcmxheSopOwogCiAgICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JOb2Rl
KGJvb2wgZW5hYmxlZCwgSW5zcGVjdG9yT2JqZWN0KiBoaWdobGlnaHRDb25maWcpOwogICAgIGJv
b2wgc2V0SGlnaGxpZ2h0RGF0YUZyb21Db25maWcoSW5zcGVjdG9yT2JqZWN0KiBoaWdobGlnaHRD
b25maWcpOwpAQCAtMjQxLDggKzI0MCw4IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIEluc3Bl
Y3RvclBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7Ci0gICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVu
dDsKICAgICBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwor
ICAgIEluc3BlY3Rvck92ZXJsYXkqIG1fb3ZlcmxheTsKICAgICBJbnNwZWN0b3JGcm9udGVuZDo6
RE9NKiBtX2Zyb250ZW5kOwogICAgIERPTUxpc3RlbmVyKiBtX2RvbUxpc3RlbmVyOwogICAgIE5v
ZGVUb0lkTWFwIG1fZG9jdW1lbnROb2RlVG9JZE1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCAxMTgwN2EzZjllODc5
ODQwZGVhNjAzYjM2NjNlMjA5YWZjZWQ3MmM4Li44NTg5MTNmMTU5NWZjNjgxN2VhNGYxMGQyODhj
YmYyYWVjNDI2ZGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSW5zcGVj
dG9yRGVidWdnZXJBZ2VudC5oIgogCiAjaW5jbHVkZSAiQ29udGVudFNlYXJjaFV0aWxzLmgiCisj
aW5jbHVkZSAiRE9NTm9kZUhpZ2hsaWdodGVyLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHQu
aCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdE1hbmFnZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0
b3JGcm9udGVuZC5oIgpAQCAtNjAsMTAgKzYxLDExIEBAIHN0YXRpYyBjb25zdCBjaGFyIHBhdXNl
T25FeGNlcHRpb25zU3RhdGVbXSA9ICJwYXVzZU9uRXhjZXB0aW9uc1N0YXRlIjsKIAogY29uc3Qg
Y2hhciogSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YmFja3RyYWNlT2JqZWN0R3JvdXAgPSAiYmFj
a3RyYWNlLW9iamVjdC1ncm91cCI7CiAKLUluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywg
SW5zcGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGlu
amVjdGVkU2NyaXB0TWFuYWdlcikKK0luc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3RvckRl
YnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5z
cGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVj
dGVkU2NyaXB0TWFuYWdlciwgSW5zcGVjdG9yT3ZlcmxheSogb3ZlcmxheSkKICAgICA6IEluc3Bl
Y3RvckJhc2VBZ2VudDxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50PigiRGVidWdnZXIiLCBpbnN0cnVt
ZW50aW5nQWdlbnRzLCBpbnNwZWN0b3JTdGF0ZSkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyKGluamVjdGVkU2NyaXB0TWFuYWdlcikKICAgICAsIG1fZnJvbnRlbmQoMCkKKyAgICAsIG1f
b3ZlcmxheShvdmVybGF5KQogICAgICwgbV9wYXVzZWRTY3JpcHRTdGF0ZSgwKQogICAgICwgbV9q
YXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQoZmFsc2UpCiAgICAgLCBtX2xpc3RlbmVyKDApCkBAIC0x
MDMsNiArMTA1LDggQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKCkKIAog
ICAgIGlmIChtX2xpc3RlbmVyKQogICAgICAgICBtX2xpc3RlbmVyLT5kZWJ1Z2dlcldhc0Rpc2Fi
bGVkKCk7CisgICAgaWYgKG1fb3ZlcmxheSkKKyAgICAgICAgbV9vdmVybGF5LT5zZXRTaG91bGRT
aG93UGF1c2VXYXJuaW5nKGZhbHNlKTsKIH0KIAogYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjplbmFibGVkKCkKQEAgLTY1Nyw2ICs2NjEsOCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OmRpZFBhdXNlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgU2NyaXB0VmFsdQog
ICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKG1fb3ZlcmxheSkKKyAgICAgICAgbV9vdmVybGF5
LT5zZXRTaG91bGRTaG93UGF1c2VXYXJuaW5nKHRydWUpOwogICAgIG1fZnJvbnRlbmQtPnBhdXNl
ZChjdXJyZW50Q2FsbEZyYW1lcygpLCBtX2JyZWFrUmVhc29uLCBtX2JyZWFrQXV4RGF0YSk7CiAg
ICAgbV9qYXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQgPSBmYWxzZTsKIApAQCAtNjcxLDYgKzY3Nyw4
IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ29udGludWUoKQogICAgIG1fcGF1
c2VkU2NyaXB0U3RhdGUgPSAwOwogICAgIG1fY3VycmVudENhbGxTdGFjayA9IFNjcmlwdFZhbHVl
KCk7CiAgICAgY2xlYXJCcmVha0RldGFpbHMoKTsKKyAgICBpZiAobV9vdmVybGF5KQorICAgICAg
ICBtX292ZXJsYXktPnNldFNob3VsZFNob3dQYXVzZVdhcm5pbmcoZmFsc2UpOwogICAgIG1fZnJv
bnRlbmQtPnJlc3VtZWQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKaW5kZXggMDljOTdkMTk1M2U0YjliMDAxNjFmODc0ZjQ1
MzFmYmRlYzdkYjZjZC4uZTc4ZTg4ZjlkNjJiYThmNGJlZjM1ODZkZTNkZmJiNDVmMDk3ZDc4MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dC5oCkBAIC01MCw2ICs1MCw3IEBAIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKIGNsYXNz
IEluc3BlY3RvckZyb250ZW5kOwogY2xhc3MgSW5zcGVjdG9yQXJyYXk7CiBjbGFzcyBJbnNwZWN0
b3JPYmplY3Q7CitjbGFzcyBJbnNwZWN0b3JPdmVybGF5OwogY2xhc3MgSW5zcGVjdG9yU3RhdGU7
CiBjbGFzcyBJbnNwZWN0b3JWYWx1ZTsKIGNsYXNzIEluc3RydW1lbnRpbmdBZ2VudHM7CkBAIC0x
MjQsNyArMTI1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU2NyaXB0RGVidWdTZXJ2ZXImIHNj
cmlwdERlYnVnU2VydmVyKCkgPSAwOwogCiBwcm90ZWN0ZWQ6Ci0gICAgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yU3RhdGUqLCBJbmplY3RlZFNj
cmlwdE1hbmFnZXIqKTsKKyAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KEluc3RydW1lbnRpbmdB
Z2VudHMqLCBJbnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3Rv
ck92ZXJsYXkqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzdGFydExpc3RlbmluZ1NjcmlwdERlYnVn
U2VydmVyKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzdG9wTGlzdGVuaW5nU2NyaXB0RGVidWdT
ZXJ2ZXIoKSA9IDA7CkBAIC0xNTksNiArMTYwLDcgQEAgcHJpdmF0ZToKIAogICAgIEluamVjdGVk
U2NyaXB0TWFuYWdlciogbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CiAgICAgSW5zcGVjdG9yRnJv
bnRlbmQ6OkRlYnVnZ2VyKiBtX2Zyb250ZW5kOworICAgIEluc3BlY3Rvck92ZXJsYXkqIG1fb3Zl
cmxheTsKICAgICBTY3JpcHRTdGF0ZSogbV9wYXVzZWRTY3JpcHRTdGF0ZTsKICAgICBTY3JpcHRW
YWx1ZSBtX2N1cnJlbnRDYWxsU3RhY2s7CiAgICAgU2NyaXB0c01hcCBtX3NjcmlwdHM7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
N2VmYmMxZmZkYWQ1MmEwZDkxOTc2NTVkNjhkZTdjZDYxMTEwNThhNgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcApAQCAtMCww
ICsxLDYwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CisKKyNpbmNsdWRlICJJbnNwZWN0b3JPdmVybGF5LmgiCisKKyNpbmNsdWRlICJFbGVtZW50Lmgi
CisjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiRm9udEZhbWlseS5oIgorI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgorI2luY2x1ZGUgIkluc3BlY3Rv
ckNsaWVudC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVk
ZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJCb3hNb2RlbE9iamVjdC5oIgorI2luY2x1ZGUg
IlJlbmRlcklubGluZS5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCisjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgorI2luY2x1ZGUgIlRleHRSdW4u
aCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworbmFtZXNwYWNlIHsKKworI2lmIE9TKFdJTkRPV1MpCitzdGF0aWMgY29uc3QgdW5z
aWduZWQgZm9udEhlaWdodFB4ID0gMTI7CisjZWxpZiBPUyhNQUNfT1NfWCkgfHwgT1MoVU5JWCkK
K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBmb250SGVpZ2h0UHggPSAxMTsKKyNlbmRpZgorCitjb25z
dCBzdGF0aWMgaW50IHJlY3RJbmZsYXRlUHggPSA0OworY29uc3Qgc3RhdGljIGludCBib3JkZXJX
aWR0aFB4ID0gMTsKK2NvbnN0IHN0YXRpYyBpbnQgdG9vbHRpcFBhZGRpbmcgPSA0OworCitjb25z
dCBzdGF0aWMgaW50IGFycm93VGlwT2Zmc2V0ID0gMjA7Citjb25zdCBzdGF0aWMgZmxvYXQgYXJy
b3dIZWlnaHQgPSA3OworY29uc3Qgc3RhdGljIGZsb2F0IGFycm93SGFsZldpZHRoID0gNzsKKwor
UGF0aCBxdWFkVG9QYXRoKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKK3sKKyAgICBQYXRoIHF1YWRQ
YXRoOworICAgIHF1YWRQYXRoLm1vdmVUbyhxdWFkLnAxKCkpOworICAgIHF1YWRQYXRoLmFkZExp
bmVUbyhxdWFkLnAyKCkpOworICAgIHF1YWRQYXRoLmFkZExpbmVUbyhxdWFkLnAzKCkpOworICAg
IHF1YWRQYXRoLmFkZExpbmVUbyhxdWFkLnA0KCkpOworICAgIHF1YWRQYXRoLmNsb3NlU3VicGF0
aCgpOworICAgIHJldHVybiBxdWFkUGF0aDsKK30KKwordm9pZCBkcmF3T3V0bGluZWRRdWFkKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBjb25zdCBDb2xv
ciYgZmlsbENvbG9yLCBjb25zdCBDb2xvciYgb3V0bGluZUNvbG9yKQoreworICAgIHN0YXRpYyBj
b25zdCBpbnQgb3V0bGluZVRoaWNrbmVzcyA9IDI7CisKKyAgICBQYXRoIHF1YWRQYXRoID0gcXVh
ZFRvUGF0aChxdWFkKTsKKworICAgIC8vIENsaXAgb3V0IHRoZSBxdWFkLCB0aGVuIGRyYXcgd2l0
aCBhIDJweCBzdHJva2UgdG8gZ2V0IGEgcGl4ZWwKKyAgICAvLyBvZiBvdXRsaW5lIChiZWNhdXNl
IGluZmxhdGluZyBhIHF1YWQgaXMgaGFyZCkKKyAgICB7CisgICAgICAgIGNvbnRleHQuc2F2ZSgp
OworICAgICAgICBjb250ZXh0LmNsaXBPdXQocXVhZFBhdGgpOworCisgICAgICAgIGNvbnRleHQu
c2V0U3Ryb2tlVGhpY2tuZXNzKG91dGxpbmVUaGlja25lc3MpOworICAgICAgICBjb250ZXh0LnNl
dFN0cm9rZUNvbG9yKG91dGxpbmVDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAg
IGNvbnRleHQuc3Ryb2tlUGF0aChxdWFkUGF0aCk7CisKKyAgICAgICAgY29udGV4dC5yZXN0b3Jl
KCk7CisgICAgfQorCisgICAgLy8gTm93IGRvIHRoZSBmaWxsCisgICAgY29udGV4dC5zZXRGaWxs
Q29sb3IoZmlsbENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmZpbGxQ
YXRoKHF1YWRQYXRoKTsKK30KKwordm9pZCBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsIGNvbnN0IEZsb2F0UXVh
ZCYgY2xpcFF1YWQsIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IpCit7CisgICAgY29udGV4dC5zYXZl
KCk7CisgICAgUGF0aCBjbGlwUXVhZFBhdGggPSBxdWFkVG9QYXRoKGNsaXBRdWFkKTsKKyAgICBj
b250ZXh0LmNsaXBPdXQoY2xpcFF1YWRQYXRoKTsKKyAgICBkcmF3T3V0bGluZWRRdWFkKGNvbnRl
eHQsIHF1YWQsIGZpbGxDb2xvciwgQ29sb3I6OnRyYW5zcGFyZW50KTsKKyAgICBjb250ZXh0LnJl
c3RvcmUoKTsKK30KKwordm9pZCBkcmF3SGlnaGxpZ2h0Rm9yQm94KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBjb250ZW50UXVhZCwgY29uc3QgRmxvYXRRdWFkJiBw
YWRkaW5nUXVhZCwgY29uc3QgRmxvYXRRdWFkJiBib3JkZXJRdWFkLCBjb25zdCBGbG9hdFF1YWQm
IG1hcmdpblF1YWQsIEhpZ2hsaWdodERhdGEqIGhpZ2hsaWdodERhdGEpCit7CisgICAgYm9vbCBo
YXNNYXJnaW4gPSBoaWdobGlnaHREYXRhLT5tYXJnaW4gIT0gQ29sb3I6OnRyYW5zcGFyZW50Owor
ICAgIGJvb2wgaGFzQm9yZGVyID0gaGlnaGxpZ2h0RGF0YS0+Ym9yZGVyICE9IENvbG9yOjp0cmFu
c3BhcmVudDsKKyAgICBib29sIGhhc1BhZGRpbmcgPSBoaWdobGlnaHREYXRhLT5wYWRkaW5nICE9
IENvbG9yOjp0cmFuc3BhcmVudDsKKyAgICBib29sIGhhc0NvbnRlbnQgPSBoaWdobGlnaHREYXRh
LT5jb250ZW50ICE9IENvbG9yOjp0cmFuc3BhcmVudCB8fCBoaWdobGlnaHREYXRhLT5jb250ZW50
T3V0bGluZSAhPSBDb2xvcjo6dHJhbnNwYXJlbnQ7CisKKyAgICBGbG9hdFF1YWQgY2xpcFF1YWQ7
CisgICAgQ29sb3IgY2xpcENvbG9yOworICAgIGlmIChoYXNNYXJnaW4gJiYgKCFoYXNCb3JkZXIg
fHwgbWFyZ2luUXVhZCAhPSBib3JkZXJRdWFkKSkgeworICAgICAgICBkcmF3T3V0bGluZWRRdWFk
V2l0aENsaXAoY29udGV4dCwgbWFyZ2luUXVhZCwgYm9yZGVyUXVhZCwgaGlnaGxpZ2h0RGF0YS0+
bWFyZ2luKTsKKyAgICAgICAgY2xpcFF1YWQgPSBib3JkZXJRdWFkOworICAgIH0KKyAgICBpZiAo
aGFzQm9yZGVyICYmICghaGFzUGFkZGluZyB8fCBib3JkZXJRdWFkICE9IHBhZGRpbmdRdWFkKSkg
eworICAgICAgICBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAoY29udGV4dCwgYm9yZGVyUXVhZCwg
cGFkZGluZ1F1YWQsIGhpZ2hsaWdodERhdGEtPmJvcmRlcik7CisgICAgICAgIGNsaXBRdWFkID0g
cGFkZGluZ1F1YWQ7CisgICAgfQorICAgIGlmIChoYXNQYWRkaW5nICYmICghaGFzQ29udGVudCB8
fCBwYWRkaW5nUXVhZCAhPSBjb250ZW50UXVhZCkpIHsKKyAgICAgICAgZHJhd091dGxpbmVkUXVh
ZFdpdGhDbGlwKGNvbnRleHQsIHBhZGRpbmdRdWFkLCBjb250ZW50UXVhZCwgaGlnaGxpZ2h0RGF0
YS0+cGFkZGluZyk7CisgICAgICAgIGNsaXBRdWFkID0gY29udGVudFF1YWQ7CisgICAgfQorICAg
IGlmIChoYXNDb250ZW50KQorICAgICAgICBkcmF3T3V0bGluZWRRdWFkKGNvbnRleHQsIGNvbnRl
bnRRdWFkLCBoaWdobGlnaHREYXRhLT5jb250ZW50LCBoaWdobGlnaHREYXRhLT5jb250ZW50T3V0
bGluZSk7Cit9CisKK3ZvaWQgZHJhd0hpZ2hsaWdodEZvclNWR1JlbmRlcmVyKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgVmVjdG9yPEZsb2F0UXVhZD4mIGFic29sdXRlUXVhZHMsIEhp
Z2hsaWdodERhdGEqIGhpZ2hsaWdodERhdGEpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBhYnNvbHV0ZVF1YWRzLnNpemUoKTsgKytpKQorICAgICAgICBkcmF3T3V0bGluZWRRdWFkKGNv
bnRleHQsIGFic29sdXRlUXVhZHNbaV0sIGhpZ2hsaWdodERhdGEtPmNvbnRlbnQsIENvbG9yOjp0
cmFuc3BhcmVudCk7Cit9CisKK2ludCBkcmF3U3Vic3RyaW5nKGNvbnN0IFRleHRSdW4mIGdsb2Jh
bFRleHRSdW4sIGludCBvZmZzZXQsIGludCBsZW5ndGgsIGNvbnN0IENvbG9yJiB0ZXh0Q29sb3Is
IGNvbnN0IEZvbnQmIGZvbnQsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0
UmVjdCYgdGl0bGVSZWN0KQoreworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRleHRDb2xvciwg
Q29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5kcmF3VGV4dChmb250LCBnbG9iYWxU
ZXh0UnVuLCBJbnRQb2ludCh0aXRsZVJlY3QucGl4ZWxTbmFwcGVkWCgpICsgcmVjdEluZmxhdGVQ
eCwgdGl0bGVSZWN0LnBpeGVsU25hcHBlZFkoKSArIGZvbnQuZm9udE1ldHJpY3MoKS5oZWlnaHQo
KSksIG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoKTsKKyAgICByZXR1cm4gb2Zmc2V0ICsgbGVuZ3Ro
OworfQorCitmbG9hdCBjYWxjdWxhdGVBcnJvd1RpcFgoY29uc3QgTGF5b3V0UmVjdCYgYW5jaG9y
Qm94LCBjb25zdCBMYXlvdXRSZWN0JiB0aXRsZVJlY3QpCit7CisgICAgY29uc3Qgc3RhdGljIGlu
dCBhbmNob3JUaXBPZmZzZXRQeCA9IDI7CisKKyAgICBpbnQgbWluWCA9IHRpdGxlUmVjdC54KCkg
KyBhcnJvd0hhbGZXaWR0aDsKKyAgICBpbnQgbWF4WCA9IHRpdGxlUmVjdC5tYXhYKCkgLSBhcnJv
d0hhbGZXaWR0aDsKKyAgICBpbnQgYW5jaG9yWCA9IGFuY2hvckJveC54KCk7CisgICAgaW50IGFu
Y2hvck1heFggPSBhbmNob3JCb3gubWF4WCgpOworCisgICAgaW50IHggPSB0aXRsZVJlY3QueCgp
ICsgYXJyb3dUaXBPZmZzZXQ7IC8vIERlZmF1bHQgdG9vbHRpcCBwb3NpdGlvbi4KKyAgICBpZiAo
eCA8IGFuY2hvclgpCisgICAgICAgIHggPSBhbmNob3JYICsgYW5jaG9yVGlwT2Zmc2V0UHg7Cisg
ICAgZWxzZSBpZiAoeCA+IGFuY2hvck1heFgpCisgICAgICAgIHggPSBhbmNob3JNYXhYIC0gYW5j
aG9yVGlwT2Zmc2V0UHg7CisKKyAgICBpZiAoeCA8IG1pblgpCisgICAgICAgIHggPSBtaW5YOwor
ICAgIGVsc2UgaWYgKHggPiBtYXhYKQorICAgICAgICB4ID0gbWF4WDsKKworICAgIHJldHVybiB4
OworfQorCit2b2lkIHNldFVwRm9udERlc2NyaXB0aW9uKEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uLCBXZWJDb3JlOjpTZXR0aW5ncyogc2V0dGluZ3MpCit7CisjZGVmaW5lIFRPT0xU
SVBfRk9OVF9GQU1JTElFUyhzaXplLCAuLi4pIFwKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCB0b29s
dGlwRm9udEZhY2VTaXplID0gc2l6ZTtcCitzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nKiB0b29s
dGlwRm9udEZhY2Vbc2l6ZV0gPSB7IF9fVkFfQVJHU19fIH07CisKKyNpZiBPUyhXSU5ET1dTKQor
VE9PTFRJUF9GT05UX0ZBTUlMSUVTKDIsIG5ldyBBdG9taWNTdHJpbmcoIkNvbnNvbGFzIiksIG5l
dyBBdG9taWNTdHJpbmcoIkx1Y2lkYSBDb25zb2xlIikpCisjZWxpZiBPUyhNQUNfT1NfWCkKK1RP
T0xUSVBfRk9OVF9GQU1JTElFUygyLCBuZXcgQXRvbWljU3RyaW5nKCJNZW5sbyIpLCBuZXcgQXRv
bWljU3RyaW5nKCJNb25hY28iKSkKKyNlbGlmIE9TKFVOSVgpCitUT09MVElQX0ZPTlRfRkFNSUxJ
RVMoMSwgbmV3IEF0b21pY1N0cmluZygiZGVqYXZ1IHNhbnMgbW9ubyIpKQorI2VuZGlmCisvLyBJ
biB0aGUgZGVmYXVsdCBjYXNlLCB3ZSBnZXQgdGhlIHNldHRpbmdzLXByb3ZpZGVkIG1vbm9zcGFj
ZSBmb250LgorCisjdW5kZWYgVE9PTFRJUF9GT05UX0ZBTUlMSUVTCisKKyAgICBmb250RGVzY3Jp
cHRpb24uc2V0UmVuZGVyaW5nTW9kZShzZXR0aW5ncy0+Zm9udFJlbmRlcmluZ01vZGUoKSk7Cisg
ICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShmb250SGVpZ2h0UHgpOworCisgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBmaXhlZEZvbnRGYW1pbHkgPSBzZXR0aW5ncy0+Zml4ZWRGb250
RmFtaWx5KCk7CisgICAgaWYgKCFmaXhlZEZvbnRGYW1pbHkuaXNFbXB0eSgpKSB7CisgICAgICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6TW9ub3Nw
YWNlRmFtaWx5KTsKKyAgICAgICAgRm9udEZhbWlseSogY3VycmVudEZhbWlseSA9IDA7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b29sdGlwRm9udEZhY2VTaXplOyArK2kpIHsK
KyAgICAgICAgICAgIGlmICghY3VycmVudEZhbWlseSkgeworICAgICAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNldEZhbWlseSgqdG9vbHRpcEZvbnRGYWNlW2ldKTsK
KyAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5hcHBlbmRGYW1p
bHkoMCk7CisgICAgICAgICAgICAgICAgY3VycmVudEZhbWlseSA9ICZmb250RGVzY3JpcHRpb24u
Zmlyc3RGYW1pbHkoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgUmVm
UHRyPFNoYXJlZEZvbnRGYW1pbHk+IG5ld0ZhbWlseSA9IFNoYXJlZEZvbnRGYW1pbHk6OmNyZWF0
ZSgpOworICAgICAgICAgICAgICAgIG5ld0ZhbWlseS0+c2V0RmFtaWx5KCp0b29sdGlwRm9udEZh
Y2VbaV0pOworICAgICAgICAgICAgICAgIGN1cnJlbnRGYW1pbHktPmFwcGVuZEZhbWlseShuZXdG
YW1pbHkpOworICAgICAgICAgICAgICAgIGN1cnJlbnRGYW1pbHkgPSBuZXdGYW1pbHkuZ2V0KCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgUmVmUHRyPFNoYXJlZEZvbnRGYW1p
bHk+IG5ld0ZhbWlseSA9IFNoYXJlZEZvbnRGYW1pbHk6OmNyZWF0ZSgpOworICAgICAgICBuZXdG
YW1pbHktPnNldEZhbWlseShmaXhlZEZvbnRGYW1pbHkpOworICAgICAgICBjdXJyZW50RmFtaWx5
LT5hcHBlbmRGYW1pbHkobmV3RmFtaWx5KTsKKyAgICAgICAgY3VycmVudEZhbWlseSA9IG5ld0Zh
bWlseS5nZXQoKTsKKyAgICB9Cit9CisKK3ZvaWQgZHJhd0VsZW1lbnRUaXRsZShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIE5vZGUqIG5vZGUsIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0
IEludFJlY3QmIGJvdW5kaW5nQm94LCBjb25zdCBJbnRSZWN0JiBhbmNob3JCb3gsIGNvbnN0IEZs
b2F0UmVjdCYgdmlzaWJsZVJlY3QsIFdlYkNvcmU6OlNldHRpbmdzKiBzZXR0aW5ncykKK3sKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCBiYWNrZ3JvdW5kQ29sb3IsICgyNTUsIDI1NSwg
MTk0KSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgdGFnQ29sb3IsICgxMzYsIDE4
LCAxMjgpKTsgLy8gU2FtZSBhcyAud2Via2l0LWh0bWwtdGFnLgorICAgIERFRklORV9TVEFUSUNf
TE9DQUwoQ29sb3IsIGF0dHJDb2xvciwgKDI2LCAyNiwgMTY2KSk7IC8vIFNhbWUgYXMgLndlYmtp
dC1odG1sLWF0dHJpYnV0ZS12YWx1ZS4KKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCBu
b3JtYWxDb2xvciwgKENvbG9yOjpibGFjaykpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29s
b3IsIHB4QW5kQm9yZGVyQ29sb3IsICgxMjgsIDEyOCwgMTI4KSk7CisKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKFN0cmluZywgcHhTdHJpbmcsICgicHgiKSk7CisgICAgY29uc3Qgc3RhdGljIFVD
aGFyIHRpbWVzVUNoYXJbXSA9IHsgMHgwMDIwLCAweDAwRDcsIDB4MDAyMCwgMCB9OworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB0aW1lc1N0cmluZywgKHRpbWVzVUNoYXIpKTsgLy8g
JnRpbWVzOyBzdHJpbmcKKworICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1
cmdlUHJldmVudGVyOworCisgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1l
bnQqPihub2RlKTsKKyAgICBib29sIGlzWEhUTUwgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5pc1hI
VE1MRG9jdW1lbnQoKTsKKyAgICBTdHJpbmdCdWlsZGVyIG5vZGVUaXRsZTsKKyAgICBub2RlVGl0
bGUuYXBwZW5kKGlzWEhUTUwgPyBlbGVtZW50LT5ub2RlTmFtZSgpIDogZWxlbWVudC0+bm9kZU5h
bWUoKS5sb3dlcigpKTsKKyAgICB1bnNpZ25lZCB0YWdOYW1lTGVuZ3RoID0gbm9kZVRpdGxlLmxl
bmd0aCgpOworCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZFZhbHVlID0gZWxlbWVudC0+Z2V0
SWRBdHRyaWJ1dGUoKTsKKyAgICB1bnNpZ25lZCBpZFN0cmluZ0xlbmd0aCA9IDA7CisgICAgU3Ry
aW5nIGlkU3RyaW5nOworICAgIGlmICghaWRWYWx1ZS5pc051bGwoKSAmJiAhaWRWYWx1ZS5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgbm9kZVRpdGxlLmFwcGVuZCgiIyIpOworICAgICAgICBub2RlVGl0
bGUuYXBwZW5kKGlkVmFsdWUpOworICAgICAgICBpZFN0cmluZ0xlbmd0aCA9IDEgKyBpZFZhbHVl
Lmxlbmd0aCgpOworICAgIH0KKworICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiB1c2VkQ2xhc3NO
YW1lczsKKyAgICB1bnNpZ25lZCBjbGFzc2VzU3RyaW5nTGVuZ3RoID0gMDsKKyAgICBpZiAoZWxl
bWVudC0+aGFzQ2xhc3MoKSAmJiBlbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQoKSkgeworICAgICAg
ICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVzU3RyaW5nID0gc3RhdGljX2Nhc3Q8
U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5jbGFzc05hbWVzKCk7CisgICAgICAgIHNpemVfdCBj
bGFzc05hbWVDb3VudCA9IGNsYXNzTmFtZXNTdHJpbmcuc2l6ZSgpOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGNsYXNzTmFtZUNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgY2xhc3NOYW1lID0gY2xhc3NOYW1lc1N0cmluZ1tpXTsKKyAgICAgICAg
ICAgIGlmICh1c2VkQ2xhc3NOYW1lcy5jb250YWlucyhjbGFzc05hbWUpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdXNlZENsYXNzTmFtZXMuYWRkKGNsYXNzTmFtZSk7
CisgICAgICAgICAgICBub2RlVGl0bGUuYXBwZW5kKCIuIik7CisgICAgICAgICAgICBub2RlVGl0
bGUuYXBwZW5kKGNsYXNzTmFtZSk7CisgICAgICAgICAgICBjbGFzc2VzU3RyaW5nTGVuZ3RoICs9
IDEgKyBjbGFzc05hbWUubGVuZ3RoKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSZW5kZXJC
b3hNb2RlbE9iamVjdCogbW9kZWxPYmplY3QgPSByZW5kZXJlci0+aXNCb3hNb2RlbE9iamVjdCgp
ID8gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChyZW5kZXJlcikgOiAwOworCisgICAgU3RyaW5nIHdp
ZHRoTnVtYmVyUGFydCA9ICIgIiArIFN0cmluZzo6bnVtYmVyKG1vZGVsT2JqZWN0ID8gYWRqdXN0
Rm9yQWJzb2x1dGVab29tKG1vZGVsT2JqZWN0LT5waXhlbFNuYXBwZWRPZmZzZXRXaWR0aCgpLCBt
b2RlbE9iamVjdCkgOiBib3VuZGluZ0JveC53aWR0aCgpKTsKKyAgICBub2RlVGl0bGUuYXBwZW5k
KHdpZHRoTnVtYmVyUGFydCk7CisgICAgbm9kZVRpdGxlLmFwcGVuZChweFN0cmluZyk7CisgICAg
bm9kZVRpdGxlLmFwcGVuZCh0aW1lc1N0cmluZyk7CisgICAgU3RyaW5nIGhlaWdodE51bWJlclBh
cnQgPSBTdHJpbmc6Om51bWJlcihtb2RlbE9iamVjdCA/IGFkanVzdEZvckFic29sdXRlWm9vbSht
b2RlbE9iamVjdC0+cGl4ZWxTbmFwcGVkT2Zmc2V0SGVpZ2h0KCksIG1vZGVsT2JqZWN0KSA6IGJv
dW5kaW5nQm94LmhlaWdodCgpKTsKKyAgICBub2RlVGl0bGUuYXBwZW5kKGhlaWdodE51bWJlclBh
cnQpOworICAgIG5vZGVUaXRsZS5hcHBlbmQocHhTdHJpbmcpOworCisgICAgRm9udERlc2NyaXB0
aW9uIGRlc2M7CisgICAgc2V0VXBGb250RGVzY3JpcHRpb24oZGVzYywgc2V0dGluZ3MpOworICAg
IEZvbnQgZm9udCA9IEZvbnQoZGVzYywgMCwgMCk7CisgICAgZm9udC51cGRhdGUoMCk7CisKKyAg
ICBUZXh0UnVuIG5vZGVUaXRsZVJ1bihub2RlVGl0bGUudG9TdHJpbmcoKSk7CisgICAgSW50UG9p
bnQgdGl0bGVCYXNlUG9pbnQgPSBJbnRQb2ludChhbmNob3JCb3gueCgpLCBhbmNob3JCb3gubWF4
WSgpIC0gMSk7CisgICAgdGl0bGVCYXNlUG9pbnQubW92ZShyZWN0SW5mbGF0ZVB4LCByZWN0SW5m
bGF0ZVB4KTsKKyAgICBJbnRSZWN0IHRpdGxlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoZm9udC5z
ZWxlY3Rpb25SZWN0Rm9yVGV4dChub2RlVGl0bGVSdW4sIHRpdGxlQmFzZVBvaW50LCBmb250SGVp
Z2h0UHgpKTsKKyAgICB0aXRsZVJlY3QuaW5mbGF0ZShyZWN0SW5mbGF0ZVB4KTsKKworICAgIC8v
IFRoZSBpbml0aWFsIG9mZnNldHMgbmVlZGVkIHRvIGNvbXBlbnNhdGUgZm9yIGEgMXB4LXRoaWNr
IGJvcmRlciBzdHJva2UgKHdoaWNoIGlzIG5vdCBhIHBhcnQgb2YgdGhlIHJlY3RhbmdsZSkuCisg
ICAgaW50IGR4ID0gLWJvcmRlcldpZHRoUHg7CisgICAgaW50IGR5ID0gYm9yZGVyV2lkdGhQeDsK
KworICAgIC8vIElmIHRoZSB0aXAgc3RpY2tzIGJleW9uZCB0aGUgcmlnaHQgb2YgdmlzaWJsZVJl
Y3QsIHJpZ2h0LWFsaWduIHRoZSB0aXAgd2l0aCB0aGUgc2FpZCBib3VuZGFyeS4KKyAgICBpZiAo
dGl0bGVSZWN0Lm1heFgoKSArIGR4ID4gdmlzaWJsZVJlY3QubWF4WCgpKQorICAgICAgICBkeCA9
IHZpc2libGVSZWN0Lm1heFgoKSAtIHRpdGxlUmVjdC5tYXhYKCk7CisKKyAgICAvLyBJZiB0aGUg
dGlwIHN0aWNrcyBiZXlvbmQgdGhlIGxlZnQgb2YgdmlzaWJsZVJlY3QsIGxlZnQtYWxpZ24gdGhl
IHRpcCB3aXRoIHRoZSBzYWlkIGJvdW5kYXJ5LgorICAgIGlmICh0aXRsZVJlY3QueCgpICsgZHgg
PCB2aXNpYmxlUmVjdC54KCkpCisgICAgICAgIGR4ID0gdmlzaWJsZVJlY3QueCgpIC0gdGl0bGVS
ZWN0LngoKSAtIGJvcmRlcldpZHRoUHg7CisKKyAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlv
bmQgdGhlIGJvdHRvbSBvZiB2aXNpYmxlUmVjdCwgc2hvdyB0aGUgdGlwIGF0IHRvcCBvZiBib3Vu
ZGluZyBib3guCisgICAgaWYgKHRpdGxlUmVjdC5tYXhZKCkgKyBkeSA+IHZpc2libGVSZWN0Lm1h
eFkoKSkgeworICAgICAgICBkeSA9IGFuY2hvckJveC55KCkgLSB0aXRsZVJlY3QubWF4WSgpIC0g
Ym9yZGVyV2lkdGhQeDsKKyAgICAgICAgLy8gSWYgdGhlIHRpcCBzdGlsbCBzdGlja3MgYmV5b25k
IHRoZSBib3R0b20gb2YgdmlzaWJsZVJlY3QsIGJvdHRvbS1hbGlnbiB0aGUgdGlwIHdpdGggdGhl
IHNhaWQgYm91bmRhcnkuCisgICAgICAgIGlmICh0aXRsZVJlY3QubWF4WSgpICsgZHkgPiB2aXNp
YmxlUmVjdC5tYXhZKCkpCisgICAgICAgICAgICBkeSA9IHZpc2libGVSZWN0Lm1heFkoKSAtIHRp
dGxlUmVjdC5tYXhZKCk7CisgICAgfQorCisgICAgLy8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25k
IHRoZSB0b3Agb2YgdmlzaWJsZVJlY3QsIHNob3cgdGhlIHRpcCBhdCB0b3Agb2YgdmlzaWJsZVJl
Y3QuCisgICAgaWYgKHRpdGxlUmVjdC55KCkgKyBkeSA8IHZpc2libGVSZWN0LnkoKSkKKyAgICAg
ICAgZHkgPSB2aXNpYmxlUmVjdC55KCkgLSB0aXRsZVJlY3QueSgpICsgYm9yZGVyV2lkdGhQeDsK
KworICAgIHRpdGxlUmVjdC5tb3ZlKGR4LCBkeSk7CisKKyAgICBib29sIGlzQXJyb3dBdFRvcCA9
IHRpdGxlUmVjdC55KCkgPiBhbmNob3JCb3gueSgpOworICAgIHRpdGxlUmVjdC5tb3ZlKDAsIHRv
b2x0aXBQYWRkaW5nICogKGlzQXJyb3dBdFRvcCA/IDEgOiAtMSkpOworCisgICAgeworICAgICAg
ICBmbG9hdCBhcnJvd1RpcFggPSBjYWxjdWxhdGVBcnJvd1RpcFgoYW5jaG9yQm94LCB0aXRsZVJl
Y3QpOworICAgICAgICBpbnQgYXJyb3dCYXNlWSA9IGlzQXJyb3dBdFRvcCA/IHRpdGxlUmVjdC55
KCkgOiB0aXRsZVJlY3QubWF4WSgpOworICAgICAgICBpbnQgYXJyb3dPcHBvc2l0ZVkgPSBpc0Fy
cm93QXRUb3AgPyB0aXRsZVJlY3QubWF4WSgpIDogdGl0bGVSZWN0LnkoKTsKKworICAgICAgICBG
bG9hdFBvaW50IHBvaW50c1s4XTsKKyAgICAgICAgcG9pbnRzWzBdID0gRmxvYXRQb2ludChhcnJv
d1RpcFggLSBhcnJvd0hhbGZXaWR0aCwgYXJyb3dCYXNlWSk7CisgICAgICAgIHBvaW50c1sxXSA9
IEZsb2F0UG9pbnQoYXJyb3dUaXBYLCBhcnJvd0Jhc2VZICsgYXJyb3dIZWlnaHQgKiAoaXNBcnJv
d0F0VG9wID8gLTEgOiAxKSk7CisgICAgICAgIHBvaW50c1syXSA9IEZsb2F0UG9pbnQoYXJyb3dU
aXBYICsgYXJyb3dIYWxmV2lkdGgsIGFycm93QmFzZVkpOworICAgICAgICBwb2ludHNbM10gPSBG
bG9hdFBvaW50KHRpdGxlUmVjdC5tYXhYKCksIGFycm93QmFzZVkpOworICAgICAgICBwb2ludHNb
NF0gPSBGbG9hdFBvaW50KHRpdGxlUmVjdC5tYXhYKCksIGFycm93T3Bwb3NpdGVZKTsKKyAgICAg
ICAgcG9pbnRzWzVdID0gRmxvYXRQb2ludCh0aXRsZVJlY3QueCgpLCBhcnJvd09wcG9zaXRlWSk7
CisgICAgICAgIHBvaW50c1s2XSA9IEZsb2F0UG9pbnQodGl0bGVSZWN0LngoKSwgYXJyb3dCYXNl
WSk7CisgICAgICAgIHBvaW50c1s3XSA9IHBvaW50c1swXTsKKworICAgICAgICBQYXRoIHBhdGg7
CisgICAgICAgIHBhdGgubW92ZVRvKHBvaW50c1swXSk7CisgICAgICAgIGZvciAoaW50IGkgPSAx
OyBpIDwgODsgKytpKQorICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8ocG9pbnRzW2ldKTsKKwor
ICAgICAgICBjb250ZXh0LnNhdmUoKTsKKyAgICAgICAgY29udGV4dC50cmFuc2xhdGUoMC41Ziwg
MC41Zik7CisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IocHhBbmRCb3JkZXJDb2xvciwg
Q29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGJhY2tn
cm91bmRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgIGNvbnRleHQuc2V0U3Ry
b2tlVGhpY2tuZXNzKGJvcmRlcldpZHRoUHgpOworICAgICAgICBjb250ZXh0LmZpbGxQYXRoKHBh
dGgpOworICAgICAgICBjb250ZXh0LnN0cm9rZVBhdGgocGF0aCk7CisgICAgICAgIGNvbnRleHQu
cmVzdG9yZSgpOworICAgIH0KKworICAgIGludCBjdXJyZW50UG9zID0gMDsKKyAgICBjdXJyZW50
UG9zID0gZHJhd1N1YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIHRhZ05hbWVMZW5n
dGgsIHRhZ0NvbG9yLCBmb250LCBjb250ZXh0LCB0aXRsZVJlY3QpOworICAgIGlmIChpZFN0cmlu
Z0xlbmd0aCkKKyAgICAgICAgY3VycmVudFBvcyA9IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVu
LCBjdXJyZW50UG9zLCBpZFN0cmluZ0xlbmd0aCwgYXR0ckNvbG9yLCBmb250LCBjb250ZXh0LCB0
aXRsZVJlY3QpOworICAgIGlmIChjbGFzc2VzU3RyaW5nTGVuZ3RoKQorICAgICAgICBjdXJyZW50
UG9zID0gZHJhd1N1YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIGNsYXNzZXNTdHJp
bmdMZW5ndGgsIGF0dHJDb2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVSZWN0KTsKKyAgICBjdXJy
ZW50UG9zID0gZHJhd1N1YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIHdpZHRoTnVt
YmVyUGFydC5sZW5ndGgoKSwgbm9ybWFsQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7
CisgICAgY3VycmVudFBvcyA9IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBjdXJyZW50UG9z
LCBweFN0cmluZy5sZW5ndGgoKSArIHRpbWVzU3RyaW5nLmxlbmd0aCgpLCBweEFuZEJvcmRlckNv
bG9yLCBmb250LCBjb250ZXh0LCB0aXRsZVJlY3QpOworICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vi
c3RyaW5nKG5vZGVUaXRsZVJ1biwgY3VycmVudFBvcywgaGVpZ2h0TnVtYmVyUGFydC5sZW5ndGgo
KSwgbm9ybWFsQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7CisgICAgZHJhd1N1YnN0
cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIHB4U3RyaW5nLmxlbmd0aCgpLCBweEFuZEJv
cmRlckNvbG9yLCBmb250LCBjb250ZXh0LCB0aXRsZVJlY3QpOworfQorCitzdGF0aWMgdm9pZCBj
b250ZW50c1F1YWRUb1BhZ2UoY29uc3QgRnJhbWVWaWV3KiBtYWluVmlldywgY29uc3QgRnJhbWVW
aWV3KiB2aWV3LCBGbG9hdFF1YWQmIHF1YWQpCit7CisgICAgcXVhZC5zZXRQMSh2aWV3LT5jb250
ZW50c1RvUm9vdFZpZXcocm91bmRlZEludFBvaW50KHF1YWQucDEoKSkpKTsKKyAgICBxdWFkLnNl
dFAyKHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhyb3VuZGVkSW50UG9pbnQocXVhZC5wMigpKSkp
OworICAgIHF1YWQuc2V0UDModmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHJvdW5kZWRJbnRQb2lu
dChxdWFkLnAzKCkpKSk7CisgICAgcXVhZC5zZXRQNCh2aWV3LT5jb250ZW50c1RvUm9vdFZpZXco
cm91bmRlZEludFBvaW50KHF1YWQucDQoKSkpKTsKKyAgICBxdWFkICs9IG1haW5WaWV3LT5zY3Jv
bGxPZmZzZXQoKTsKK30KKworc3RhdGljIHZvaWQgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdodChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIEhpZ2hsaWdodERhdGEqIGhpZ2hsaWdodERhdGEsIEhpZ2hs
aWdodCogaGlnaGxpZ2h0KQoreworICAgIE5vZGUqIG5vZGUgPSBoaWdobGlnaHREYXRhLT5ub2Rl
LmdldCgpOworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwor
ICAgIEZyYW1lKiBjb250YWluaW5nRnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOwor
CisgICAgaWYgKCFyZW5kZXJlciB8fCAhY29udGFpbmluZ0ZyYW1lKQorICAgICAgICByZXR1cm47
CisKKyAgICBGcmFtZVZpZXcqIGNvbnRhaW5pbmdWaWV3ID0gY29udGFpbmluZ0ZyYW1lLT52aWV3
KCk7CisgICAgRnJhbWVWaWV3KiBtYWluVmlldyA9IGNvbnRhaW5pbmdGcmFtZS0+cGFnZSgpLT5t
YWluRnJhbWUoKS0+dmlldygpOworICAgIEludFJlY3QgYm91bmRpbmdCb3ggPSBwaXhlbFNuYXBw
ZWRJbnRSZWN0KGNvbnRhaW5pbmdWaWV3LT5jb250ZW50c1RvUm9vdFZpZXcocmVuZGVyZXItPmFi
c29sdXRlQm91bmRpbmdCb3hSZWN0KCkpKTsKKyAgICBib3VuZGluZ0JveC5tb3ZlKG1haW5WaWV3
LT5zY3JvbGxPZmZzZXQoKSk7CisgICAgSW50UmVjdCB0aXRsZUFuY2hvckJveCA9IGJvdW5kaW5n
Qm94OworCisgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0ID0gbWFpblZpZXctPnZpc2libGVDb250
ZW50UmVjdCgpOworICAgIC8vIERvbid0IHRyYW5zbGF0ZSB0aGUgY29udGV4dCBpZiB0aGUgZnJh
bWUgaXMgcmVuZGVyZWQgaW4gcGFnZSBjb29yZGluYXRlcy4KKyAgICBpZiAoY29udGV4dCAmJiAh
bWFpblZpZXctPmRlbGVnYXRlc1Njcm9sbGluZygpKQorICAgICAgICBjb250ZXh0LT50cmFuc2xh
dGUoLXZpc2libGVSZWN0LngoKSwgLXZpc2libGVSZWN0LnkoKSk7CisKKyAgICAvLyBSZW5kZXJT
VkdSb290IHNob3VsZCBiZSBoaWdobGlnaHRlZCB0aHJvdWdoIHRoZSBpc0JveCgpIGNvZGUgcGF0
aCwgYWxsIG90aGVyIFNWRyBlbGVtZW50cyBzaG91bGQganVzdCBkdW1wIHRoZWlyIGFic29sdXRl
UXVhZHMoKS4KKyNpZiBFTkFCTEUoU1ZHKQorICAgIGJvb2wgaXNTVkdSZW5kZXJlciA9IHJlbmRl
cmVyLT5ub2RlKCkgJiYgcmVuZGVyZXItPm5vZGUoKS0+aXNTVkdFbGVtZW50KCkgJiYgIXJlbmRl
cmVyLT5pc1NWR1Jvb3QoKTsKKyNlbHNlCisgICAgYm9vbCBpc1NWR1JlbmRlcmVyID0gZmFsc2U7
CisjZW5kaWYKKworICAgIGlmIChpc1NWR1JlbmRlcmVyKSB7CisgICAgICAgIGhpZ2hsaWdodC0+
dHlwZSA9IEhpZ2hsaWdodFR5cGVSZWN0czsKKyAgICAgICAgcmVuZGVyZXItPmFic29sdXRlUXVh
ZHMoaGlnaGxpZ2h0LT5xdWFkcyk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaGln
aGxpZ2h0LT5xdWFkcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGNvbnRlbnRzUXVhZFRvUGFn
ZShtYWluVmlldywgY29udGFpbmluZ1ZpZXcsIGhpZ2hsaWdodC0+cXVhZHNbaV0pOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICAgICAgZHJhd0hpZ2hsaWdodEZvclNWR1JlbmRlcmVy
KCpjb250ZXh0LCBoaWdobGlnaHQtPnF1YWRzLCBoaWdobGlnaHREYXRhKTsKKyAgICB9IGVsc2Ug
aWYgKHJlbmRlcmVyLT5pc0JveCgpIHx8IHJlbmRlcmVyLT5pc1JlbmRlcklubGluZSgpKSB7Cisg
ICAgICAgIExheW91dFJlY3QgY29udGVudEJveDsKKyAgICAgICAgTGF5b3V0UmVjdCBwYWRkaW5n
Qm94OworICAgICAgICBMYXlvdXRSZWN0IGJvcmRlckJveDsKKyAgICAgICAgTGF5b3V0UmVjdCBt
YXJnaW5Cb3g7CisKKyAgICAgICAgaWYgKHJlbmRlcmVyLT5pc0JveCgpKSB7CisgICAgICAgICAg
ICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKTsKKworICAgICAg
ICAgICAgLy8gUmVuZGVyQm94IHJldHVybnMgdGhlICJwdXJlIiBjb250ZW50IGFyZWEgYm94LCBl
eGNsdXNpdmUgb2YgdGhlIHNjcm9sbGJhcnMgKGlmIHByZXNlbnQpLCB3aGljaCBhbHNvIGNvdW50
IHRvd2FyZHMgdGhlIGNvbnRlbnQgYXJlYSBpbiBDU1MuCisgICAgICAgICAgICBjb250ZW50Qm94
ID0gcmVuZGVyQm94LT5jb250ZW50Qm94UmVjdCgpOworICAgICAgICAgICAgY29udGVudEJveC5z
ZXRXaWR0aChjb250ZW50Qm94LndpZHRoKCkgKyByZW5kZXJCb3gtPnZlcnRpY2FsU2Nyb2xsYmFy
V2lkdGgoKSk7CisgICAgICAgICAgICBjb250ZW50Qm94LnNldEhlaWdodChjb250ZW50Qm94Lmhl
aWdodCgpICsgcmVuZGVyQm94LT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkpOworCisgICAg
ICAgICAgICBwYWRkaW5nQm94ID0gTGF5b3V0UmVjdChjb250ZW50Qm94LngoKSAtIHJlbmRlckJv
eC0+cGFkZGluZ0xlZnQoKSwgY29udGVudEJveC55KCkgLSByZW5kZXJCb3gtPnBhZGRpbmdUb3Ao
KSwKKyAgICAgICAgICAgICAgICAgICAgY29udGVudEJveC53aWR0aCgpICsgcmVuZGVyQm94LT5w
YWRkaW5nTGVmdCgpICsgcmVuZGVyQm94LT5wYWRkaW5nUmlnaHQoKSwgY29udGVudEJveC5oZWln
aHQoKSArIHJlbmRlckJveC0+cGFkZGluZ1RvcCgpICsgcmVuZGVyQm94LT5wYWRkaW5nQm90dG9t
KCkpOworICAgICAgICAgICAgYm9yZGVyQm94ID0gTGF5b3V0UmVjdChwYWRkaW5nQm94LngoKSAt
IHJlbmRlckJveC0+Ym9yZGVyTGVmdCgpLCBwYWRkaW5nQm94LnkoKSAtIHJlbmRlckJveC0+Ym9y
ZGVyVG9wKCksCisgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdCb3gud2lkdGgoKSArIHJlbmRl
ckJveC0+Ym9yZGVyTGVmdCgpICsgcmVuZGVyQm94LT5ib3JkZXJSaWdodCgpLCBwYWRkaW5nQm94
LmhlaWdodCgpICsgcmVuZGVyQm94LT5ib3JkZXJUb3AoKSArIHJlbmRlckJveC0+Ym9yZGVyQm90
dG9tKCkpOworICAgICAgICAgICAgbWFyZ2luQm94ID0gTGF5b3V0UmVjdChib3JkZXJCb3gueCgp
IC0gcmVuZGVyQm94LT5tYXJnaW5MZWZ0KCksIGJvcmRlckJveC55KCkgLSByZW5kZXJCb3gtPm1h
cmdpblRvcCgpLAorICAgICAgICAgICAgICAgICAgICBib3JkZXJCb3gud2lkdGgoKSArIHJlbmRl
ckJveC0+bWFyZ2luV2lkdGgoKSwgYm9yZGVyQm94LmhlaWdodCgpICsgcmVuZGVyQm94LT5tYXJn
aW5IZWlnaHQoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSZW5kZXJJbmxpbmUq
IHJlbmRlcklubGluZSA9IHRvUmVuZGVySW5saW5lKHJlbmRlcmVyKTsKKworICAgICAgICAgICAg
Ly8gUmVuZGVySW5saW5lJ3MgYm91bmRpbmcgYm94IGluY2x1ZGVzIHBhZGRpbmdzIGFuZCBib3Jk
ZXJzLCBleGNsdWRlcyBtYXJnaW5zLgorICAgICAgICAgICAgYm9yZGVyQm94ID0gcmVuZGVySW5s
aW5lLT5saW5lc0JvdW5kaW5nQm94KCk7CisgICAgICAgICAgICBwYWRkaW5nQm94ID0gTGF5b3V0
UmVjdChib3JkZXJCb3gueCgpICsgcmVuZGVySW5saW5lLT5ib3JkZXJMZWZ0KCksIGJvcmRlckJv
eC55KCkgKyByZW5kZXJJbmxpbmUtPmJvcmRlclRvcCgpLAorICAgICAgICAgICAgICAgICAgICBi
b3JkZXJCb3gud2lkdGgoKSAtIHJlbmRlcklubGluZS0+Ym9yZGVyTGVmdCgpIC0gcmVuZGVySW5s
aW5lLT5ib3JkZXJSaWdodCgpLCBib3JkZXJCb3guaGVpZ2h0KCkgLSByZW5kZXJJbmxpbmUtPmJv
cmRlclRvcCgpIC0gcmVuZGVySW5saW5lLT5ib3JkZXJCb3R0b20oKSk7CisgICAgICAgICAgICBj
b250ZW50Qm94ID0gTGF5b3V0UmVjdChwYWRkaW5nQm94LngoKSArIHJlbmRlcklubGluZS0+cGFk
ZGluZ0xlZnQoKSwgcGFkZGluZ0JveC55KCkgKyByZW5kZXJJbmxpbmUtPnBhZGRpbmdUb3AoKSwK
KyAgICAgICAgICAgICAgICAgICAgcGFkZGluZ0JveC53aWR0aCgpIC0gcmVuZGVySW5saW5lLT5w
YWRkaW5nTGVmdCgpIC0gcmVuZGVySW5saW5lLT5wYWRkaW5nUmlnaHQoKSwgcGFkZGluZ0JveC5o
ZWlnaHQoKSAtIHJlbmRlcklubGluZS0+cGFkZGluZ1RvcCgpIC0gcmVuZGVySW5saW5lLT5wYWRk
aW5nQm90dG9tKCkpOworICAgICAgICAgICAgLy8gSWdub3JlIG1hcmdpblRvcCBhbmQgbWFyZ2lu
Qm90dG9tIGZvciBpbmxpbmVzLgorICAgICAgICAgICAgbWFyZ2luQm94ID0gTGF5b3V0UmVjdChi
b3JkZXJCb3gueCgpIC0gcmVuZGVySW5saW5lLT5tYXJnaW5MZWZ0KCksIGJvcmRlckJveC55KCks
CisgICAgICAgICAgICAgICAgICAgIGJvcmRlckJveC53aWR0aCgpICsgcmVuZGVySW5saW5lLT5t
YXJnaW5XaWR0aCgpLCBib3JkZXJCb3guaGVpZ2h0KCkpOworICAgICAgICB9CisKKyAgICAgICAg
RmxvYXRRdWFkIGFic0NvbnRlbnRRdWFkID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQo
RmxvYXRSZWN0KGNvbnRlbnRCb3gpKTsKKyAgICAgICAgRmxvYXRRdWFkIGFic1BhZGRpbmdRdWFk
ID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KHBhZGRpbmdCb3gpKTsK
KyAgICAgICAgRmxvYXRRdWFkIGFic0JvcmRlclF1YWQgPSByZW5kZXJlci0+bG9jYWxUb0Fic29s
dXRlUXVhZChGbG9hdFJlY3QoYm9yZGVyQm94KSk7CisgICAgICAgIEZsb2F0UXVhZCBhYnNNYXJn
aW5RdWFkID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KG1hcmdpbkJv
eCkpOworCisgICAgICAgIGNvbnRlbnRzUXVhZFRvUGFnZShtYWluVmlldywgY29udGFpbmluZ1Zp
ZXcsIGFic0NvbnRlbnRRdWFkKTsKKyAgICAgICAgY29udGVudHNRdWFkVG9QYWdlKG1haW5WaWV3
LCBjb250YWluaW5nVmlldywgYWJzUGFkZGluZ1F1YWQpOworICAgICAgICBjb250ZW50c1F1YWRU
b1BhZ2UobWFpblZpZXcsIGNvbnRhaW5pbmdWaWV3LCBhYnNCb3JkZXJRdWFkKTsKKyAgICAgICAg
Y29udGVudHNRdWFkVG9QYWdlKG1haW5WaWV3LCBjb250YWluaW5nVmlldywgYWJzTWFyZ2luUXVh
ZCk7CisKKyAgICAgICAgdGl0bGVBbmNob3JCb3ggPSBhYnNNYXJnaW5RdWFkLmVuY2xvc2luZ0Jv
dW5kaW5nQm94KCk7CisKKyAgICAgICAgaGlnaGxpZ2h0LT50eXBlID0gSGlnaGxpZ2h0VHlwZU5v
ZGU7CisgICAgICAgIGhpZ2hsaWdodC0+cXVhZHMuYXBwZW5kKGFic01hcmdpblF1YWQpOworICAg
ICAgICBoaWdobGlnaHQtPnF1YWRzLmFwcGVuZChhYnNCb3JkZXJRdWFkKTsKKyAgICAgICAgaGln
aGxpZ2h0LT5xdWFkcy5hcHBlbmQoYWJzUGFkZGluZ1F1YWQpOworICAgICAgICBoaWdobGlnaHQt
PnF1YWRzLmFwcGVuZChhYnNDb250ZW50UXVhZCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgICAgICBkcmF3SGlnaGxpZ2h0Rm9yQm94KCpjb250ZXh0LCBhYnNDb250ZW50UXVhZCwg
YWJzUGFkZGluZ1F1YWQsIGFic0JvcmRlclF1YWQsIGFic01hcmdpblF1YWQsIGhpZ2hsaWdodERh
dGEpOworICAgIH0KKworICAgIC8vIERyYXcgbm9kZSB0aXRsZSBpZiBuZWNlc3NhcnkuCisKKyAg
ICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KGNvbnRleHQgJiYgaGlnaGxpZ2h0RGF0YS0+c2hvd0luZm8pCisgICAgICAgIGRyYXdFbGVtZW50
VGl0bGUoKmNvbnRleHQsIG5vZGUsIHJlbmRlcmVyLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGJvdW5k
aW5nQm94KSwgcGl4ZWxTbmFwcGVkSW50UmVjdCh0aXRsZUFuY2hvckJveCksIHZpc2libGVSZWN0
LCBjb250YWluaW5nRnJhbWUtPnNldHRpbmdzKCkpOworfQorCitzdGF0aWMgdm9pZCBnZXRPckRy
YXdSZWN0SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgRG9jdW1lbnQqIGRvY3Vt
ZW50LCBIaWdobGlnaHREYXRhKiBoaWdobGlnaHREYXRhLCBIaWdobGlnaHQgKmhpZ2hsaWdodCkK
K3sKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBGbG9hdFJlY3Qg
aGlnaGxpZ2h0UmVjdCgqKGhpZ2hsaWdodERhdGEtPnJlY3QpKTsKKworICAgIGhpZ2hsaWdodC0+
dHlwZSA9IEhpZ2hsaWdodFR5cGVSZWN0czsKKyAgICBoaWdobGlnaHQtPnF1YWRzLmFwcGVuZCho
aWdobGlnaHRSZWN0KTsKKworICAgIGlmIChjb250ZXh0KSB7CisgICAgICAgIEZyYW1lVmlldyog
dmlldyA9IGRvY3VtZW50LT5mcmFtZSgpLT52aWV3KCk7CisgICAgICAgIGlmICghdmlldy0+ZGVs
ZWdhdGVzU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdCA9
IHZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOworICAgICAgICAgICAgY29udGV4dC0+dHJhbnNs
YXRlKC12aXNpYmxlUmVjdC54KCksIC12aXNpYmxlUmVjdC55KCkpOworICAgICAgICB9CisKKyAg
ICAgICAgZHJhd091dGxpbmVkUXVhZCgqY29udGV4dCwgaGlnaGxpZ2h0UmVjdCwgaGlnaGxpZ2h0
RGF0YS0+Y29udGVudCwgaGlnaGxpZ2h0RGF0YS0+Y29udGVudE91dGxpbmUpOworICAgIH0KK30K
KworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK0luc3BlY3Rvck92ZXJsYXk6Okluc3BlY3Rv
ck92ZXJsYXkoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3Bh
Z2UocGFnZSkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fc2hvdWxkU2hvd1BhdXNl
V2FybmluZyhmYWxzZSkKKyAgICAsIG1fZG9jdW1lbnQoMCkKKyAgICAsIG1faGlnaGxpZ2h0RGF0
YSgwKQoreworfQorCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXcoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KQoreworICAgIGlmIChtX2hpZ2hsaWdodERhdGEpCisgICAgICAgIGRyYXdIaWdo
bGlnaHQoY29udGV4dCk7CisgICAgZWxzZSBpZiAobV9zaG91bGRTaG93UGF1c2VXYXJuaW5nKQor
ICAgICAgICBkcmF3UGF1c2VXYXJuaW5nKGNvbnRleHQpOworfQorCit2b2lkIEluc3BlY3Rvck92
ZXJsYXk6OmRyYXdPdXRsaW5lKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIEZsb2F0UmVjdCBvdXRsaW5l
UmVjdCA9IHJlY3Q7CisgICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBvdXRsaW5lUmVjdCwg
Q29sb3IoKSwgY29sb3IpOworfQorCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmdldEhpZ2hsaWdo
dChEb2N1bWVudCogZG9jdW1lbnQsIEhpZ2hsaWdodERhdGEqIGhpZ2hsaWdodERhdGEsIEhpZ2hs
aWdodCogaGlnaGxpZ2h0KQoreworICAgIGlmICghaGlnaGxpZ2h0RGF0YSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaGlnaGxpZ2h0LT5jb250ZW50Q29sb3IgPSBoaWdobGlnaHREYXRhLT5jb250
ZW50OworICAgIGhpZ2hsaWdodC0+cGFkZGluZ0NvbG9yID0gaGlnaGxpZ2h0RGF0YS0+cGFkZGlu
ZzsKKyAgICBoaWdobGlnaHQtPmJvcmRlckNvbG9yID0gaGlnaGxpZ2h0RGF0YS0+Ym9yZGVyOwor
ICAgIGhpZ2hsaWdodC0+bWFyZ2luQ29sb3IgPSBoaWdobGlnaHREYXRhLT5tYXJnaW47CisgICAg
aGlnaGxpZ2h0LT50eXBlID0gSGlnaGxpZ2h0VHlwZVJlY3RzOworCisgICAgaWYgKGhpZ2hsaWdo
dERhdGEtPm5vZGUpCisgICAgICAgIGdldE9yRHJhd05vZGVIaWdobGlnaHQoMCwgaGlnaGxpZ2h0
RGF0YSwgaGlnaGxpZ2h0KTsKKyAgICBlbHNlIGlmIChoaWdobGlnaHREYXRhLT5yZWN0KQorICAg
ICAgICBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0KDAsIGRvY3VtZW50LCBoaWdobGlnaHREYXRhLCBo
aWdobGlnaHQpOworfQorCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnNldEhpZ2hsaWdodChEb2N1
bWVudCogZG9jdW1lbnQsIEhpZ2hsaWdodERhdGEqIGhpZ2hsaWdodERhdGEpCit7CisgICAgaWYg
KGRvY3VtZW50ICYmIGhpZ2hsaWdodERhdGEgJiYgKGhpZ2hsaWdodERhdGEtPm5vZGUgfHwgaGln
aGxpZ2h0RGF0YS0+cmVjdCkpIHsKKyAgICAgICAgbV9kb2N1bWVudCA9IGhpZ2hsaWdodERhdGEt
Pm5vZGUgPyBoaWdobGlnaHREYXRhLT5ub2RlLT5kb2N1bWVudCgpIDogZG9jdW1lbnQ7CisgICAg
ICAgIG1faGlnaGxpZ2h0RGF0YSA9IGhpZ2hsaWdodERhdGE7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgbV9kb2N1bWVudCA9IDA7CisgICAgICAgIG1faGlnaGxpZ2h0RGF0YSA9IDA7CisgICAgfQor
ICAgIHVwZGF0ZSgpOworfQorCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnNldFNob3VsZFNob3dQ
YXVzZVdhcm5pbmcoYm9vbCBzaG91bGRTaG93UGF1c2VXYXJuaW5nKQoreworICAgIG1fc2hvdWxk
U2hvd1BhdXNlV2FybmluZyA9IHNob3VsZFNob3dQYXVzZVdhcm5pbmc7CisgICAgdXBkYXRlKCk7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6dXBkYXRlKCkKK3sKKyAgICBpZiAoIW1fY2xp
ZW50KSAKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2hpZ2hsaWdodERhdGEgfHwgbV9zaG91
bGRTaG93UGF1c2VXYXJuaW5nKQorICAgICAgICBtX2NsaWVudC0+aGlnaGxpZ2h0KCk7CisgICAg
ZWxzZQorICAgICAgICBtX2NsaWVudC0+aGlkZUhpZ2hsaWdodCgpOworfQorCit2b2lkIEluc3Bl
Y3Rvck92ZXJsYXk6OmRyYXdIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQorewor
ICAgIGlmICghbV9oaWdobGlnaHREYXRhKQorICAgICAgICByZXR1cm47CisKKyAgICBIaWdobGln
aHQgaGlnaGxpZ2h0OworICAgIGlmIChtX2hpZ2hsaWdodERhdGEtPm5vZGUpCisgICAgICAgIGdl
dE9yRHJhd05vZGVIaWdobGlnaHQoJmNvbnRleHQsIG1faGlnaGxpZ2h0RGF0YSwgJmhpZ2hsaWdo
dCk7CisgICAgZWxzZSBpZiAobV9oaWdobGlnaHREYXRhLT5yZWN0KQorICAgICAgICBnZXRPckRy
YXdSZWN0SGlnaGxpZ2h0KCZjb250ZXh0LCBtX2RvY3VtZW50LCBtX2hpZ2hsaWdodERhdGEsICZo
aWdobGlnaHQpOworfQorCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdQYXVzZVdhcm5pbmco
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29s
b3IsIGJhY2tncm91bmRDb2xvciwgKDAsIDAsIDAsIDMxKSk7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChDb2xvciwgdGV4dEJhY2tncm91bmRDb2xvciwgKDI1NSwgMjU1LCAxOTQpKTsKKyAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCBib3JkZXJDb2xvciwgKDEyOCwgMTI4LCAxMjgpKTsK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGludCwgZm9udEhlaWdodCwgKDI0KSk7CisKKyAgICBG
cmFtZSogZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpOworICAgIFNldHRpbmdzKiBzZXR0aW5n
cyA9IGZyYW1lLT5zZXR0aW5ncygpOworICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSBmcmFtZS0+
dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoKTsKKworICAgIGNvbnRleHQuc2V0RmlsbENvbG9y
KGJhY2tncm91bmRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5kcmF3
UmVjdCh2aXNpYmxlUmVjdCk7CisKKyAgICBGb250RGVzY3JpcHRpb24gZGVzYzsKKyAgICBzZXRV
cEZvbnREZXNjcmlwdGlvbihkZXNjLCBzZXR0aW5ncyk7CisgICAgZGVzYy5zZXRDb21wdXRlZFNp
emUoZm9udEhlaWdodCk7CisgICAgRm9udCBmb250ID0gRm9udChkZXNjLCAwLCAwKTsKKyAgICBm
b250LnVwZGF0ZSgwKTsKKworICAgIFN0cmluZyB0ZXh0ID0gIlRoZSBkZWJ1Z2dlciBpcyBwYXVz
ZWQuIjsKKyAgICBUZXh0UnVuIHRleHRSdW4odGV4dCk7CisgICAgSW50UmVjdCB0aXRsZVJlY3Qg
PSBlbmNsb3NpbmdJbnRSZWN0KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQodGV4dFJ1biwgSW50
UG9pbnQoKSwgZm9udEhlaWdodCkpOworICAgIHRpdGxlUmVjdC5pbmZsYXRlKHJlY3RJbmZsYXRl
UHgpOworICAgIHRpdGxlUmVjdC5zZXRMb2NhdGlvbihJbnRQb2ludCh2aXNpYmxlUmVjdC53aWR0
aCgpIC8gMiAtIHRpdGxlUmVjdC53aWR0aCgpIC8gMiwgMCkpOworCisgICAgY29udGV4dC5zZXRG
aWxsQ29sb3IodGV4dEJhY2tncm91bmRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAg
Y29udGV4dC5zZXRTdHJva2VDb2xvcihib3JkZXJDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7
CisgICAgY29udGV4dC5kcmF3UmVjdCh0aXRsZVJlY3QpOworICAgIGNvbnRleHQuc2V0RmlsbENv
bG9yKENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5kcmF3
VGV4dChmb250LCB0ZXh0UnVuLCBJbnRQb2ludCh0aXRsZVJlY3QueCgpICsgcmVjdEluZmxhdGVQ
eCwgdGl0bGVSZWN0LnkoKSArIGZvbnRIZWlnaHQpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUxYmI4ODhlYzY2NmI0OTMyMmFk
YmJkNDQxNjEzNTgwNGZhNDEyMzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJ
bnNwZWN0b3JPdmVybGF5X2gKKyNkZWZpbmUgSW5zcGVjdG9yT3ZlcmxheV9oCisKKyNpbmNsdWRl
ICJDb2xvci5oIgorI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkxheW91dFR5cGVz
LmgiCisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbG9yOworY2xhc3MgRG9jdW1lbnQ7CitjbGFz
cyBGcmFtZVZpZXc7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBJbnNwZWN0b3JDbGll
bnQ7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIE5vZGU7CitjbGFzcyBQ
YWdlOworCitzdHJ1Y3QgSGlnaGxpZ2h0RGF0YSB7CisgICAgQ29sb3IgY29udGVudDsKKyAgICBD
b2xvciBjb250ZW50T3V0bGluZTsKKyAgICBDb2xvciBwYWRkaW5nOworICAgIENvbG9yIGJvcmRl
cjsKKyAgICBDb2xvciBtYXJnaW47CisgICAgYm9vbCBzaG93SW5mbzsKKworICAgIC8vIEVpdGhl
ciBvZiB0aGVzZSBtdXN0IGJlIDAuCisgICAgUmVmUHRyPE5vZGU+IG5vZGU7CisgICAgT3duUHRy
PEludFJlY3Q+IHJlY3Q7Cit9OworCitlbnVtIEhpZ2hsaWdodFR5cGUgeworICAgIEhpZ2hsaWdo
dFR5cGVOb2RlLAorICAgIEhpZ2hsaWdodFR5cGVSZWN0cywKK307CisKK3N0cnVjdCBIaWdobGln
aHQgeworICAgIENvbG9yIGNvbnRlbnRDb2xvcjsKKyAgICBDb2xvciBwYWRkaW5nQ29sb3I7Cisg
ICAgQ29sb3IgYm9yZGVyQ29sb3I7CisgICAgQ29sb3IgbWFyZ2luQ29sb3I7CisKKyAgICAvLyBX
aGVuIHRoZSB0eXBlIGlzIE5vZGUsIHRoZXJlIGFyZSA0IHF1YWRzIChtYXJnaW4sIGJvcmRlciwg
cGFkZGluZywgY29udGVudCkuCisgICAgLy8gV2hlbiB0aGUgdHlwZSBpcyBSZWN0cywgdGhpcyBp
cyBqdXN0IGEgbGlzdCBvZiBxdWFkcy4KKyAgICBIaWdobGlnaHRUeXBlIHR5cGU7CisgICAgVmVj
dG9yPEZsb2F0UXVhZD4gcXVhZHM7Cit9OworCitjbGFzcyBJbnNwZWN0b3JPdmVybGF5IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JPdmVybGF5PiBjcmVhdGUoUGFn
ZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IEluc3BlY3Rvck92ZXJsYXkocGFnZSwgY2xpZW50KSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmKTsKKyAgICB2b2lkIGRyYXdPdXRsaW5l
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3QmLCBjb25zdCBDb2xvciYpOworICAg
IHZvaWQgZ2V0SGlnaGxpZ2h0KERvY3VtZW50KiwgSGlnaGxpZ2h0RGF0YSosIEhpZ2hsaWdodCop
OworICAgIAorICAgIHZvaWQgc2V0SGlnaGxpZ2h0KERvY3VtZW50KiwgSGlnaGxpZ2h0RGF0YSop
OworICAgIHZvaWQgc2V0U2hvdWxkU2hvd1BhdXNlV2FybmluZyhib29sKTsKKworcHJpdmF0ZToK
KyAgICBJbnNwZWN0b3JPdmVybGF5KFBhZ2UqLCBJbnNwZWN0b3JDbGllbnQqKTsKKworICAgIHZv
aWQgdXBkYXRlKCk7CisgICAgdm9pZCBkcmF3SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYpOwor
ICAgIHZvaWQgZHJhd1BhdXNlV2FybmluZyhHcmFwaGljc0NvbnRleHQmKTsKKworICAgIFBhZ2Uq
IG1fcGFnZTsKKyAgICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50OworICAgIGJvb2wgbV9zaG91
bGRTaG93UGF1c2VXYXJuaW5nOworICAgIERvY3VtZW50KiBtX2RvY3VtZW50OworICAgIEhpZ2hs
aWdodERhdGEqIG1faGlnaGxpZ2h0RGF0YTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworCisjZW5kaWYgLy8gRE9NTm9kZUhpZ2hsaWdodGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKaW5kZXggZWYzNDUzN2YwZTExOGZiNWUw
Y2I4OGNhMmZhYjVlM2VmNjBhMzU3Ny4uOTg1Y2JmNTNlNTJhOTYzNTFmODlmMWY2NDFiZjc5Y2Ni
NTY5OGI4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VB
Z2VudC5jcHAKQEAgLTQ0LDEyICs0NCwxMiBAQAogI2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1
ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCi0jaW5jbHVk
ZSAiRE9NTm9kZUhpZ2hsaWdodGVyLmgiCiAjaW5jbHVkZSAiRE9NUGF0Y2hTdXBwb3J0LmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllcnNGYWN0b3J5LmgiCkBAIC01OCw2ICs1
OCw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
RnJvbnRlbmQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKKyNpbmNs
dWRlICJJbnNwZWN0b3JPdmVybGF5LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yU3RhdGUuaCIKICNp
bmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNsdWRlICJJbnN0cnVtZW50aW5nQWdlbnRz
LmgiCkBAIC0yMjMsOSArMjI0LDkgQEAgYm9vbCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNoYXJlZEJ1
ZmZlckNvbnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciwgY28KICAgICByZXR1
cm4gZGVjb2RlU2hhcmVkQnVmZmVyKGJ1ZmZlciwgdGV4dEVuY29kaW5nTmFtZSwgcmVzdWx0KTsK
IH0KIAotUGFzc093blB0cjxJbnNwZWN0b3JQYWdlQWdlbnQ+IEluc3BlY3RvclBhZ2VBZ2VudDo6
Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIFBhZ2UqIHBh
Z2UsIEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgSW5zcGVjdG9yU3RhdGUqIHN0YXRl
LCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgSW5zcGVjdG9y
Q2xpZW50KiBjbGllbnQpCitQYXNzT3duUHRyPEluc3BlY3RvclBhZ2VBZ2VudD4gSW5zcGVjdG9y
UGFnZUFnZW50OjpjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cywgUGFnZSogcGFnZSwgSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBJbnNwZWN0b3JT
dGF0ZSogc3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCwgSW5zcGVjdG9yT3ZlcmxheSogb3ZlcmxheSkKIHsK
LSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEluc3BlY3RvclBhZ2VBZ2VudChpbnN0cnVtZW50aW5n
QWdlbnRzLCBwYWdlLCBpbnNwZWN0b3JBZ2VudCwgc3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdl
ciwgY2xpZW50KSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JQYWdlQWdlbnQo
aW5zdHJ1bWVudGluZ0FnZW50cywgcGFnZSwgaW5zcGVjdG9yQWdlbnQsIHN0YXRlLCBpbmplY3Rl
ZFNjcmlwdE1hbmFnZXIsIGNsaWVudCwgb3ZlcmxheSkpOwogfQogCiAvLyBzdGF0aWMKQEAgLTMw
OCwxMyArMzA5LDE0IEBAIFR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkVudW0gSW5z
cGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5cGVKc29uCiAgICAgcmV0dXJuIHJlc291
cmNlVHlwZUpzb24oY2FjaGVkUmVzb3VyY2VUeXBlKGNhY2hlZFJlc291cmNlKSk7CiB9CiAKLUlu
c3BlY3RvclBhZ2VBZ2VudDo6SW5zcGVjdG9yUGFnZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMq
IGluc3RydW1lbnRpbmdBZ2VudHMsIFBhZ2UqIHBhZ2UsIEluc3BlY3RvckFnZW50KiBpbnNwZWN0
b3JBZ2VudCwgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBJbmplY3RlZFNjcmlwdE1h
bmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCitJ
bnNwZWN0b3JQYWdlQWdlbnQ6Okluc3BlY3RvclBhZ2VBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYWdlKiBwYWdlLCBJbnNwZWN0b3JBZ2VudCogaW5zcGVj
dG9yQWdlbnQsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIEluc3BlY3RvckNsaWVudCogY2xpZW50LCBJ
bnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQogICAgIDogSW5zcGVjdG9yQmFzZUFnZW50PEluc3Bl
Y3RvclBhZ2VBZ2VudD4oIlBhZ2UiLCBpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnNwZWN0b3JTdGF0
ZSkKICAgICAsIG1fcGFnZShwYWdlKQogICAgICwgbV9pbnNwZWN0b3JBZ2VudChpbnNwZWN0b3JB
Z2VudCkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKGluamVjdGVkU2NyaXB0TWFuYWdl
cikKICAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fZnJvbnRlbmQoMCkKKyAgICAsIG1f
b3ZlcmxheShvdmVybGF5KQogICAgICwgbV9sYXN0U2NyaXB0SWRlbnRpZmllcigwKQogICAgICwg
bV9sYXN0UGFpbnRDb250ZXh0KDApCiAgICAgLCBtX2RpZExvYWRFdmVudEZpcmUoZmFsc2UpCkBA
IC04NDMsNiArODQ1LDExIEBAIERvY3VtZW50TG9hZGVyKiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFz
c2VydERvY3VtZW50TG9hZGVyKEVycm9yU3RyaW5nKiBlcnJvclN0cmluCiAgICAgcmV0dXJuIGRv
Y3VtZW50TG9hZGVyOwogfQogCit2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZHJhd0luc3BlY3Rv
ck92ZXJsYXkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIG1fb3ZlcmxheS0+ZHJh
dyhjb250ZXh0KTsKK30KKwogdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmxvYWRlckRldGFjaGVk
RnJvbUZyYW1lKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiB7CiAgICAgSGFzaE1hcDxEb2N1bWVu
dExvYWRlciosIFN0cmluZz46Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9sb2FkZXJUb0lkZW50aWZp
ZXIuZmluZChsb2FkZXIpOwpAQCAtODg1LDcgKzg5Miw3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFn
ZW50OjpkaWRQYWludCgpCiAgICAgICAgIENvbG9yKDAsIDAsIDB4RkYsIDB4M0YpLAogICAgIH07
CiAKLSAgICBET01Ob2RlSGlnaGxpZ2h0ZXI6OmRyYXdPdXRsaW5lKCptX2xhc3RQYWludENvbnRl
eHQsIG1fbGFzdFBhaW50UmVjdCwgY29sb3JzW2NvbG9yU2VsZWN0b3IrKyAlIFdURl9BUlJBWV9M
RU5HVEgoY29sb3JzKV0pOworICAgIG1fb3ZlcmxheS0+ZHJhd091dGxpbmUoKm1fbGFzdFBhaW50
Q29udGV4dCwgbV9sYXN0UGFpbnRSZWN0LCBjb2xvcnNbY29sb3JTZWxlY3RvcisrICUgV1RGX0FS
UkFZX0xFTkdUSChjb2xvcnMpXSk7CiAKICAgICBtX2xhc3RQYWludENvbnRleHQgPSAwOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5o
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCmluZGV4IDk2
NGJjODVmYzYzNjQ4YWYzOGYyZGMxMmZjODNmNzk3MWI5M2E2NjMuLjc5ODUwOGE5Njg1ZTZlNmNi
NDRkMGFiMzBmZTUxMzc3MTBmY2E3ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUGFnZUFnZW50LmgKQEAgLTQ4LDExICs0OCwxMyBAQCBjbGFzcyBET01XcmFwcGVy
V29ybGQ7CiBjbGFzcyBEb2N1bWVudExvYWRlcjsKIGNsYXNzIEZyYW1lOwogY2xhc3MgRnJvbnRl
bmQ7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBJbmplY3RlZFNjcmlwdE1hbmFnZXI7
CiBjbGFzcyBJbnNwZWN0b3JBZ2VudDsKIGNsYXNzIEluc3BlY3RvckFycmF5OwogY2xhc3MgSW5z
cGVjdG9yQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9yT2JqZWN0OworY2xhc3MgSW5zcGVjdG9yT3Zl
cmxheTsKIGNsYXNzIEluc3BlY3RvclN0YXRlOwogY2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsK
IGNsYXNzIEtVUkw7CkBAIC03Nyw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICAgICAgT3RoZXJSZXNv
dXJjZQogICAgIH07CiAKLSAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JQYWdlQWdlbnQ+
IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiwgUGFnZSosIEluc3BlY3RvckFnZW50KiwgSW5z
cGVjdG9yU3RhdGUqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JDbGllbnQqKTsK
KyAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JQYWdlQWdlbnQ+IGNyZWF0ZShJbnN0cnVt
ZW50aW5nQWdlbnRzKiwgUGFnZSosIEluc3BlY3RvckFnZW50KiwgSW5zcGVjdG9yU3RhdGUqLCBJ
bmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JDbGllbnQqLCBJbnNwZWN0b3JPdmVybGF5
Kik7CiAKICAgICBzdGF0aWMgYm9vbCBjYWNoZWRSZXNvdXJjZUNvbnRlbnQoQ2FjaGVkUmVzb3Vy
Y2UqLCBTdHJpbmcqIHJlc3VsdCwgYm9vbCogYmFzZTY0RW5jb2RlZCk7CiAgICAgc3RhdGljIGJv
b2wgc2hhcmVkQnVmZmVyQ29udGVudChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIGNvbnN0IFN0
cmluZyYgdGV4dEVuY29kaW5nTmFtZSwgYm9vbCB3aXRoQmFzZTY0RW5jb2RlLCBTdHJpbmcqIHJl
c3VsdCk7CkBAIC0xMzUsOSArMTM3LDEwIEBAIHB1YmxpYzoKICAgICBTdHJpbmcgbG9hZGVySWQo
RG9jdW1lbnRMb2FkZXIqKTsKICAgICBGcmFtZSogYXNzZXJ0RnJhbWUoRXJyb3JTdHJpbmcqLCBT
dHJpbmcgZnJhbWVJZCk7CiAgICAgc3RhdGljIERvY3VtZW50TG9hZGVyKiBhc3NlcnREb2N1bWVu
dExvYWRlcihFcnJvclN0cmluZyosIEZyYW1lKik7CisgICAgdm9pZCBkcmF3SW5zcGVjdG9yT3Zl
cmxheShHcmFwaGljc0NvbnRleHQmKTsKIAogcHJpdmF0ZToKLSAgICBJbnNwZWN0b3JQYWdlQWdl
bnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIFBhZ2UqLCBJbnNwZWN0b3JBZ2VudCosIEluc3BlY3Rv
clN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9yQ2xpZW50Kik7CisgICAg
SW5zcGVjdG9yUGFnZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBQYWdlKiwgSW5zcGVjdG9y
QWdlbnQqLCBJbnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3Rv
ckNsaWVudCosIEluc3BlY3Rvck92ZXJsYXkqKTsKICAgICB2b2lkIHVwZGF0ZVZpZXdNZXRyaWNz
KGludCwgaW50LCBkb3VibGUsIGJvb2wpOwogCiAgICAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
UGFnZTo6RnJhbWU+IGJ1aWxkT2JqZWN0Rm9yRnJhbWUoRnJhbWUqKTsKQEAgLTE0Nyw2ICsxNTAs
NyBAQCBwcml2YXRlOgogICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciogbV9pbmplY3RlZFNjcmlw
dE1hbmFnZXI7CiAgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKICAgICBJbnNwZWN0b3JG
cm9udGVuZDo6UGFnZSogbV9mcm9udGVuZDsKKyAgICBJbnNwZWN0b3JPdmVybGF5KiBtX292ZXJs
YXk7CiAgICAgbG9uZyBtX2xhc3RTY3JpcHRJZGVudGlmaWVyOwogICAgIFN0cmluZyBtX3BlbmRp
bmdTY3JpcHRUb0V2YWx1YXRlT25Mb2FkT25jZTsKICAgICBTdHJpbmcgbV9zY3JpcHRUb0V2YWx1
YXRlT25Mb2FkT25jZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdl
RGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2Vy
QWdlbnQuY3BwCmluZGV4IGE1ODZlZGYzZmQ0MTA4YzlkMDc5MmMwYmRmZWJlMWU4M2ZhZmY4NmEu
LmMxZTYyNzUzZDIxOWRhYTk2MDA3OTBiNjViYjcxOGM4NDNmOGNmOWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcApAQCAtNDAsMTMgKzQwLDEz
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2Vu
dD4gUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGluc3Bl
Y3RlZFBhZ2UsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQor
UGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2VudD4gUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShJ
bnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSog
aW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIEluamVjdGVkU2NyaXB0TWFuYWdl
ciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQogewot
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGFnZURlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0Fn
ZW50cywgaW5zcGVjdG9yU3RhdGUsIGluc3BlY3RlZFBhZ2UsIGluamVjdGVkU2NyaXB0TWFuYWdl
cikpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGFnZURlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVu
dGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUsIGluc3BlY3RlZFBhZ2UsIGluamVjdGVkU2NyaXB0
TWFuYWdlciwgb3ZlcmxheSkpOwogfQogCi1QYWdlRGVidWdnZXJBZ2VudDo6UGFnZURlYnVnZ2Vy
QWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9y
U3RhdGUqIGluc3BlY3RvclN0YXRlLCBQYWdlKiBpbnNwZWN0ZWRQYWdlLCBJbmplY3RlZFNjcmlw
dE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlcikKLSAgICA6IEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUsIGluamVjdGVkU2NyaXB0
TWFuYWdlcikKK1BhZ2VEZWJ1Z2dlckFnZW50OjpQYWdlRGVidWdnZXJBZ2VudChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9y
U3RhdGUsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQorICAgIDogSW5zcGVj
dG9yRGVidWdnZXJBZ2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnNwZWN0b3JTdGF0ZSwgaW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLCBvdmVybGF5KQogICAgICwgbV9pbnNwZWN0ZWRQYWdlKGluc3Bl
Y3RlZFBhZ2UpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFn
ZURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJB
Z2VudC5oCmluZGV4IDlkYmQ1MTNmOWYxYTI4YmI5ODQyNDkxMzU3ODE0ODZjNzNjMzI2MTguLjA2
ZjE3Nzc4MTg3Y2EwMzExN2FlYTBhNDg2NjJjNDYyZjA1NTFhNTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oCkBAIC00NCw3ICs0NCw3IEBAIGNsYXNz
IFBhZ2VEZWJ1Z2dlckFnZW50IDogcHVibGljIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQgewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VEZWJ1Z2dlckFnZW50KTsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxQYWdlRGVidWdn
ZXJBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0ZSosIFBh
Z2UqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxQYWdl
RGVidWdnZXJBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0
ZSosIFBhZ2UqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JPdmVybGF5Kik7CiAg
ICAgdmlydHVhbCB+UGFnZURlYnVnZ2VyQWdlbnQoKTsKIAogcHJpdmF0ZToKQEAgLTU2LDcgKzU2
LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3Jp
cHRGb3JFdmFsKEVycm9yU3RyaW5nKiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpOwog
Ci0gICAgUGFnZURlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclN0
YXRlKiwgUGFnZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciopOworICAgIFBhZ2VEZWJ1Z2dlckFn
ZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0ZSosIFBhZ2UqLCBJbmplY3Rl
ZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JPdmVybGF5Kik7CiAgICAgUGFnZSogY29uc3QgbV9p
bnNwZWN0ZWRQYWdlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L1dvcmtlckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtl
ckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGM3NWFmNGE2ZTRjMGY0ZTk5NmYzNWQ4YTNhNzg5MTYx
NTMxNzE2MmYuLjE1ODlmYzMwZjQ1NjRkOTNlMjdiZjI3ZWFiNTU3NWQ0YjYwNmE1MTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyRGVidWdnZXJBZ2VudC5jcHAKQEAg
LTg2LDcgKzg2LDcgQEAgUGFzc093blB0cjxXb3JrZXJEZWJ1Z2dlckFnZW50PiBXb3JrZXJEZWJ1
Z2dlckFnZW50OjpjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyoKIH0KIAogV29ya2VyRGVidWdn
ZXJBZ2VudDo6V29ya2VyRGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIFdvcmtlckNvbnRl
eHQqIGluc3BlY3RlZFdvcmtlckNvbnRleHQsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKQotICAgIDogSW5zcGVjdG9yRGVidWdnZXJBZ2VudChpbnN0cnVtZW50
aW5nQWdlbnRzLCBpbnNwZWN0b3JTdGF0ZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQorICAgIDog
SW5zcGVjdG9yRGVidWdnZXJBZ2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnNwZWN0b3JTdGF0
ZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCAwKQogICAgICwgbV9zY3JpcHREZWJ1Z1NlcnZlcihp
bnNwZWN0ZWRXb3JrZXJDb250ZXh0KQogICAgICwgbV9pbnNwZWN0ZWRXb3JrZXJDb250ZXh0KGlu
c3BlY3RlZFdvcmtlckNvbnRleHQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAK
aW5kZXggMTg4MTc1OTM3MDU1MGFlMWU0NzdhM2UxNWU4YWFlY2RhMzZkMGYzMS4uZDQ2ZTQ2NjVj
YzE2NGI3OWY3ODEwZWQyYWFjMTU2MzgwOTE5MDA3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkNsaWVudFJlY3QuaCIKICNp
bmNsdWRlICJDbGllbnRSZWN0TGlzdC5oIgogI2luY2x1ZGUgIkNvbXBvc2VkU2hhZG93VHJlZVdh
bGtlci5oIgotI2luY2x1ZGUgIkRPTU5vZGVIaWdobGlnaHRlci5oIgogI2luY2x1ZGUgIkRPTVN0
cmluZ0xpc3QuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TWFy
a2VyLmgiCkBAIC00OSw2ICs0OCw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5o
IgogI2luY2x1ZGUgIkluc3BlY3RvckNvdW50ZXJzLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yT3ZlcmxheS5oIgogI2luY2x1ZGUg
Ikluc3RydW1lbnRpbmdBZ2VudHMuaCIKICNpbmNsdWRlICJJbnRlcm5hbFNldHRpbmdzLmgiCiAj
aW5jbHVkZSAiSW50UmVjdC5oIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152526</attachid>
            <date>2012-07-16 07:11:14 -0700</date>
            <delta_ts>2012-07-16 07:48:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90880-20120716181111.patch</filename>
            <type>text/plain</type>
            <size>87910</size>
            <attacher name="Sergey Rogulenko">rogulenko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTZiZmVjMmM0ZGZkYTI1
NmYwZDlhM2U2Zjc4NzllYmY2YjVkNzY1ZC4uZWJlNGQxNjU5ZDljZmE3ZThjZTVhYzBkMDA5MzYw
OGI4YWYwODlhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0IEBACisyMDEyLTA3LTE2ICBTZXJn
ZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogYWRkaW5nIHBhdXNlIGljb24gZm9yIEphdmFTY3JpcHQgZGVidWdnaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg4MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yZWQgRE9NTm9k
ZUhpZ2hsaWdodGVyIGludG8gSW5zcGVjdG9yT3ZlcmxheSBjbGFzcyBhbmQgYWRkZWQgYSBmZWF0
dXJlIHRvIHNob3cgYSAicGF1c2UiIHNjcmVlbiB3aGVuCisgICAgICAgIHRoZSBKYXZhc2NyaXB0
IGRlYnVnZ2VyIGlzIHBhdXNlZC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRyYXdIaWdobGlnaHQpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KEluc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6SW5zcGVjdG9y
RE9NQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6aGlkZUhpZ2hsaWdodCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Z2V0SGlnaGxpZ2h0KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmNyZWF0ZSk6CisgICAgICAgIChJ
bnNwZWN0b3JET01BZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OmRpZFBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmRpZENvbnRpbnVlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHA6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcC4KKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6Okluc3BlY3Rvck92ZXJsYXkpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdPdXRsaW5lKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmdldEhpZ2hsaWdodCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpzZXRIaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yT3ZlcmxheTo6c2V0U2hvdWxkU2hvd1BhdXNlV2FybmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5Ojp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0hpZ2hsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JPdmVybGF5OjpkcmF3UGF1c2VXYXJuaW5nKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yT3ZlcmxheS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RP
TU5vZGVIaWdobGlnaHRlci5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChIaWdobGln
aHREYXRhKToKKyAgICAgICAgKEhpZ2hsaWdodCk6CisgICAgICAgIChJbnNwZWN0b3JPdmVybGF5
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmNyZWF0ZSk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JQYWdlQWdlbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQ
YWdlQWdlbnQ6Okluc3BlY3RvclBhZ2VBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JQYWdlQWdlbnQ6OmRyYXdJbnNwZWN0b3JPdmVybGF5KToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpkaWRQYWludCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgICogaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2VEZWJ1Z2dlckFnZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZURl
YnVnZ2VyQWdlbnQ6OlBhZ2VEZWJ1Z2dlckFnZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvUGFn
ZURlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKFBhZ2VEZWJ1Z2dlckFnZW50KToKKyAgICAgICAg
KiBpbnNwZWN0b3IvV29ya2VyRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJEZWJ1Z2dlckFnZW50OjpXb3JrZXJEZWJ1Z2dlckFnZW50KToKKyAgICAgICAgKiB0ZXN0
aW5nL0ludGVybmFscy5jcHA6CisKIDIwMTItMDctMTUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8
Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCBtYWtlIGRpc3Rj
aGVjay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNl
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNjAzY2UyMTk2YzE4MjI4NDM0NWJkYzdmYmUz
ZGE5NmUxMjBiMDQ0Zi4uNGMxZjllODk5MGI4ZWJmNjRiOTY1MDVhNjVkYWE3MjM2MWM3ZDA0MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTk0MCw3ICs5NDAsNiBAQCBTRVQoV2ViQ29yZV9TT1VS
Q0VTCiAgICAgaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcAogICAgIGluc3BlY3Rvci9Db250
ZW50U2VhcmNoVXRpbHMuY3BwCiAgICAgaW5zcGVjdG9yL0RPTUVkaXRvci5jcHAKLSAgICBpbnNw
ZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcAogICAgIGluc3BlY3Rvci9ET01QYXRjaFN1cHBv
cnQuY3BwCiAgICAgaW5zcGVjdG9yL0lkZW50aWZpZXJzRmFjdG9yeS5jcHAKICAgICBpbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCkBAIC05NzIsNiArOTcxLDcgQEAgU0VUKFdlYkNvcmVfU09V
UkNFUwogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKICAgICBpbnNw
ZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0
b3JNZW1vcnlBZ2VudC5jcHAKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKICAg
ICBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKICAgICBpbnNwZWN0b3IvSW5z
cGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUnVudGltZUFn
ZW50LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBi
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggMzcyMTM1ZTA4ZDE1N2Vj
YmM0OGY2OGU3MzY5YmYxMTIwNWEyYzFlMi4uM2NiYmQ2YzliNjdiYTExMTkyYTI2MTk2ZGNjMzUy
OWRiMjhhN2M1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0yNjkzLDggKzI2
OTMsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9D
b250ZW50U2VhcmNoVXRpbHMuaCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTUVkaXRv
ci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01FZGl0b3IuaCBcCi0JU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAgXAotCVNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9E
T01QYXRjaFN1cHBvcnQuaCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lkZW50aWZpZXJz
RmFjdG9yeS5jcHAgXApAQCAtMjc1OSw2ICsyNzU3LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwK
IAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggXAog
CVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5oIFwKKwlTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAgXAorCVNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmggXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUGFnZUFnZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQ
cm9maWxlckFnZW50LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
IGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA1ZGFjMmIwNWQwN2NkNmE2Njc4ZjI3
YzRkYzk2ZjE1MmRjYmI5MjQ2Li5mZTA0YzE5ZTM0YWJhOTIyMjUxNTkwMWNkZWMwOTJiMDFjMWFh
MzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1RhcmdldC5wcmkKQEAgLTg5Nyw3ICs4OTcsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBp
bnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwIFwKICAgICBpbnNwZWN0b3IvQ29udGVudFNlYXJj
aFV0aWxzLmNwcCBcCiAgICAgaW5zcGVjdG9yL0RPTUVkaXRvci5jcHAgXAotICAgIGluc3BlY3Rv
ci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwIFwKICAgICBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0
LmNwcCBcCiAgICAgaW5zcGVjdG9yL0lkZW50aWZpZXJzRmFjdG9yeS5jcHAgXAogICAgIGluc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdC5jcHAgXApAQCAtOTI2LDYgKzkyNSw3IEBAIFNPVVJDRVMgKz0g
XAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JIaXN0b3J5LmNwcCBcCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JNZW1v
cnlBZ2VudC5jcHAgXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcCBcCiAgICAg
aW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0
b3JQcm9maWxlckFnZW50LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdl
bnQuY3BwIFwKQEAgLTIwNjAsNyArMjA2MCw2IEBAIEhFQURFUlMgKz0gXAogICAgIGluc3BlY3Rv
ci9Db25zb2xlTWVzc2FnZS5oIFwKICAgICBpbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxzLmgg
XAogICAgIGluc3BlY3Rvci9ET01FZGl0b3IuaCBcCi0gICAgaW5zcGVjdG9yL0RPTU5vZGVIaWdo
bGlnaHRlci5oIFwKICAgICBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmggXAogICAgIGluc3Bl
Y3Rvci9JZGVudGlmaWVyc0ZhY3RvcnkuaCBcCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
LmggXApAQCAtMjA5MSw2ICsyMDkwLDcgQEAgSEVBREVSUyArPSBcCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3Rvckhpc3RvcnkuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlv
bi5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuaCBcCisgICAgaW5zcGVj
dG9yL0luc3BlY3Rvck92ZXJsYXkuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2Vu
dC5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIFwKICAgICBpbnNw
ZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGU0YzcxMDBkNjFjNTIwODNmMzgyNzFmMmE3Mjc1NDc1NDY4ZWRiMmMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MjkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0KLSNpbmNs
dWRlICJET01Ob2RlSGlnaGxpZ2h0ZXIuaCIKLQotI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNs
dWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGb250RmFtaWx5LmgiCi0jaW5jbHVkZSAiRnJh
bWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCi0jaW5jbHVkZSAiTm9kZS5oIgotI2luY2x1
ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgotI2luY2x1ZGUgIlJlbmRlckJveE1vZGVs
T2JqZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCi0jaW5jbHVkZSAiUmVuZGVyT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTdHlsZWRFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiVGV4dFJ1bi5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgewotCi0jaWYgT1MoV0lORE9X
UykKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBmb250SGVpZ2h0UHggPSAxMjsKLSNlbGlmIE9TKE1B
Q19PU19YKSB8fCBPUyhVTklYKQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZvbnRIZWlnaHRQeCA9
IDExOwotI2VuZGlmCi0KLWNvbnN0IHN0YXRpYyBpbnQgcmVjdEluZmxhdGVQeCA9IDQ7Ci1jb25z
dCBzdGF0aWMgaW50IGJvcmRlcldpZHRoUHggPSAxOwotY29uc3Qgc3RhdGljIGludCB0b29sdGlw
UGFkZGluZyA9IDQ7Ci0KLWNvbnN0IHN0YXRpYyBpbnQgYXJyb3dUaXBPZmZzZXQgPSAyMDsKLWNv
bnN0IHN0YXRpYyBmbG9hdCBhcnJvd0hlaWdodCA9IDc7Ci1jb25zdCBzdGF0aWMgZmxvYXQgYXJy
b3dIYWxmV2lkdGggPSA3OwotCi1QYXRoIHF1YWRUb1BhdGgoY29uc3QgRmxvYXRRdWFkJiBxdWFk
KQotewotICAgIFBhdGggcXVhZFBhdGg7Ci0gICAgcXVhZFBhdGgubW92ZVRvKHF1YWQucDEoKSk7
Ci0gICAgcXVhZFBhdGguYWRkTGluZVRvKHF1YWQucDIoKSk7Ci0gICAgcXVhZFBhdGguYWRkTGlu
ZVRvKHF1YWQucDMoKSk7Ci0gICAgcXVhZFBhdGguYWRkTGluZVRvKHF1YWQucDQoKSk7Ci0gICAg
cXVhZFBhdGguY2xvc2VTdWJwYXRoKCk7Ci0gICAgcmV0dXJuIHF1YWRQYXRoOwotfQotCi12b2lk
IGRyYXdPdXRsaW5lZFF1YWQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1
YWQmIHF1YWQsIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IsIGNvbnN0IENvbG9yJiBvdXRsaW5lQ29s
b3IpCi17Ci0gICAgc3RhdGljIGNvbnN0IGludCBvdXRsaW5lVGhpY2tuZXNzID0gMjsKLQotICAg
IFBhdGggcXVhZFBhdGggPSBxdWFkVG9QYXRoKHF1YWQpOwotCi0gICAgLy8gQ2xpcCBvdXQgdGhl
IHF1YWQsIHRoZW4gZHJhdyB3aXRoIGEgMnB4IHN0cm9rZSB0byBnZXQgYSBwaXhlbAotICAgIC8v
IG9mIG91dGxpbmUgKGJlY2F1c2UgaW5mbGF0aW5nIGEgcXVhZCBpcyBoYXJkKQotICAgIHsKLSAg
ICAgICAgY29udGV4dC5zYXZlKCk7Ci0gICAgICAgIGNvbnRleHQuY2xpcE91dChxdWFkUGF0aCk7
Ci0KLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3Mob3V0bGluZVRoaWNrbmVzcyk7
Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3Iob3V0bGluZUNvbG9yLCBDb2xvclNwYWNl
RGV2aWNlUkdCKTsKLSAgICAgICAgY29udGV4dC5zdHJva2VQYXRoKHF1YWRQYXRoKTsKLQotICAg
ICAgICBjb250ZXh0LnJlc3RvcmUoKTsKLSAgICB9Ci0KLSAgICAvLyBOb3cgZG8gdGhlIGZpbGwK
LSAgICBjb250ZXh0LnNldEZpbGxDb2xvcihmaWxsQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0Ip
OwotICAgIGNvbnRleHQuZmlsbFBhdGgocXVhZFBhdGgpOwotfQotCi12b2lkIGRyYXdPdXRsaW5l
ZFF1YWRXaXRoQ2xpcChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYg
cXVhZCwgY29uc3QgRmxvYXRRdWFkJiBjbGlwUXVhZCwgY29uc3QgQ29sb3ImIGZpbGxDb2xvcikK
LXsKLSAgICBjb250ZXh0LnNhdmUoKTsKLSAgICBQYXRoIGNsaXBRdWFkUGF0aCA9IHF1YWRUb1Bh
dGgoY2xpcFF1YWQpOwotICAgIGNvbnRleHQuY2xpcE91dChjbGlwUXVhZFBhdGgpOwotICAgIGRy
YXdPdXRsaW5lZFF1YWQoY29udGV4dCwgcXVhZCwgZmlsbENvbG9yLCBDb2xvcjo6dHJhbnNwYXJl
bnQpOwotICAgIGNvbnRleHQucmVzdG9yZSgpOwotfQotCi12b2lkIGRyYXdIaWdobGlnaHRGb3JC
b3goR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIGNvbnRlbnRRdWFk
LCBjb25zdCBGbG9hdFF1YWQmIHBhZGRpbmdRdWFkLCBjb25zdCBGbG9hdFF1YWQmIGJvcmRlclF1
YWQsIGNvbnN0IEZsb2F0UXVhZCYgbWFyZ2luUXVhZCwgSGlnaGxpZ2h0RGF0YSogaGlnaGxpZ2h0
RGF0YSkKLXsKLSAgICBib29sIGhhc01hcmdpbiA9IGhpZ2hsaWdodERhdGEtPm1hcmdpbiAhPSBD
b2xvcjo6dHJhbnNwYXJlbnQ7Ci0gICAgYm9vbCBoYXNCb3JkZXIgPSBoaWdobGlnaHREYXRhLT5i
b3JkZXIgIT0gQ29sb3I6OnRyYW5zcGFyZW50OwotICAgIGJvb2wgaGFzUGFkZGluZyA9IGhpZ2hs
aWdodERhdGEtPnBhZGRpbmcgIT0gQ29sb3I6OnRyYW5zcGFyZW50OwotICAgIGJvb2wgaGFzQ29u
dGVudCA9IGhpZ2hsaWdodERhdGEtPmNvbnRlbnQgIT0gQ29sb3I6OnRyYW5zcGFyZW50IHx8IGhp
Z2hsaWdodERhdGEtPmNvbnRlbnRPdXRsaW5lICE9IENvbG9yOjp0cmFuc3BhcmVudDsKLQotICAg
IEZsb2F0UXVhZCBjbGlwUXVhZDsKLSAgICBDb2xvciBjbGlwQ29sb3I7Ci0gICAgaWYgKGhhc01h
cmdpbiAmJiAoIWhhc0JvcmRlciB8fCBtYXJnaW5RdWFkICE9IGJvcmRlclF1YWQpKSB7Ci0gICAg
ICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChjb250ZXh0LCBtYXJnaW5RdWFkLCBib3JkZXJR
dWFkLCBoaWdobGlnaHREYXRhLT5tYXJnaW4pOwotICAgICAgICBjbGlwUXVhZCA9IGJvcmRlclF1
YWQ7Ci0gICAgfQotICAgIGlmIChoYXNCb3JkZXIgJiYgKCFoYXNQYWRkaW5nIHx8IGJvcmRlclF1
YWQgIT0gcGFkZGluZ1F1YWQpKSB7Ci0gICAgICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChj
b250ZXh0LCBib3JkZXJRdWFkLCBwYWRkaW5nUXVhZCwgaGlnaGxpZ2h0RGF0YS0+Ym9yZGVyKTsK
LSAgICAgICAgY2xpcFF1YWQgPSBwYWRkaW5nUXVhZDsKLSAgICB9Ci0gICAgaWYgKGhhc1BhZGRp
bmcgJiYgKCFoYXNDb250ZW50IHx8IHBhZGRpbmdRdWFkICE9IGNvbnRlbnRRdWFkKSkgewotICAg
ICAgICBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAoY29udGV4dCwgcGFkZGluZ1F1YWQsIGNvbnRl
bnRRdWFkLCBoaWdobGlnaHREYXRhLT5wYWRkaW5nKTsKLSAgICAgICAgY2xpcFF1YWQgPSBjb250
ZW50UXVhZDsKLSAgICB9Ci0gICAgaWYgKGhhc0NvbnRlbnQpCi0gICAgICAgIGRyYXdPdXRsaW5l
ZFF1YWQoY29udGV4dCwgY29udGVudFF1YWQsIGhpZ2hsaWdodERhdGEtPmNvbnRlbnQsIGhpZ2hs
aWdodERhdGEtPmNvbnRlbnRPdXRsaW5lKTsKLX0KLQotdm9pZCBkcmF3SGlnaGxpZ2h0Rm9yU1ZH
UmVuZGVyZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBWZWN0b3I8RmxvYXRRdWFk
PiYgYWJzb2x1dGVRdWFkcywgSGlnaGxpZ2h0RGF0YSogaGlnaGxpZ2h0RGF0YSkKLXsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGFic29sdXRlUXVhZHMuc2l6ZSgpOyArK2kpCi0gICAgICAg
IGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgYWJzb2x1dGVRdWFkc1tpXSwgaGlnaGxpZ2h0RGF0
YS0+Y29udGVudCwgQ29sb3I6OnRyYW5zcGFyZW50KTsKLX0KLQotaW50IGRyYXdTdWJzdHJpbmco
Y29uc3QgVGV4dFJ1biYgZ2xvYmFsVGV4dFJ1biwgaW50IG9mZnNldCwgaW50IGxlbmd0aCwgY29u
c3QgQ29sb3ImIHRleHRDb2xvciwgY29uc3QgRm9udCYgZm9udCwgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiB0aXRsZVJlY3QpCi17Ci0gICAgY29udGV4dC5zZXRG
aWxsQ29sb3IodGV4dENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICBjb250ZXh0LmRy
YXdUZXh0KGZvbnQsIGdsb2JhbFRleHRSdW4sIEludFBvaW50KHRpdGxlUmVjdC5waXhlbFNuYXBw
ZWRYKCkgKyByZWN0SW5mbGF0ZVB4LCB0aXRsZVJlY3QucGl4ZWxTbmFwcGVkWSgpICsgZm9udC5m
b250TWV0cmljcygpLmhlaWdodCgpKSwgb2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgpOwotICAgIHJl
dHVybiBvZmZzZXQgKyBsZW5ndGg7Ci19Ci0KLWZsb2F0IGNhbGN1bGF0ZUFycm93VGlwWChjb25z
dCBMYXlvdXRSZWN0JiBhbmNob3JCb3gsIGNvbnN0IExheW91dFJlY3QmIHRpdGxlUmVjdCkKLXsK
LSAgICBjb25zdCBzdGF0aWMgaW50IGFuY2hvclRpcE9mZnNldFB4ID0gMjsKLQotICAgIGludCBt
aW5YID0gdGl0bGVSZWN0LngoKSArIGFycm93SGFsZldpZHRoOwotICAgIGludCBtYXhYID0gdGl0
bGVSZWN0Lm1heFgoKSAtIGFycm93SGFsZldpZHRoOwotICAgIGludCBhbmNob3JYID0gYW5jaG9y
Qm94LngoKTsKLSAgICBpbnQgYW5jaG9yTWF4WCA9IGFuY2hvckJveC5tYXhYKCk7Ci0KLSAgICBp
bnQgeCA9IHRpdGxlUmVjdC54KCkgKyBhcnJvd1RpcE9mZnNldDsgLy8gRGVmYXVsdCB0b29sdGlw
IHBvc2l0aW9uLgotICAgIGlmICh4IDwgYW5jaG9yWCkKLSAgICAgICAgeCA9IGFuY2hvclggKyBh
bmNob3JUaXBPZmZzZXRQeDsKLSAgICBlbHNlIGlmICh4ID4gYW5jaG9yTWF4WCkKLSAgICAgICAg
eCA9IGFuY2hvck1heFggLSBhbmNob3JUaXBPZmZzZXRQeDsKLQotICAgIGlmICh4IDwgbWluWCkK
LSAgICAgICAgeCA9IG1pblg7Ci0gICAgZWxzZSBpZiAoeCA+IG1heFgpCi0gICAgICAgIHggPSBt
YXhYOwotCi0gICAgcmV0dXJuIHg7Ci19Ci0KLXZvaWQgc2V0VXBGb250RGVzY3JpcHRpb24oRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFdlYkNvcmU6OlNldHRpbmdzKiBzZXR0aW5n
cykKLXsKLSNkZWZpbmUgVE9PTFRJUF9GT05UX0ZBTUlMSUVTKHNpemUsIC4uLikgXAotc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIHRvb2x0aXBGb250RmFjZVNpemUgPSBzaXplO1wKLXN0YXRpYyBjb25z
dCBBdG9taWNTdHJpbmcqIHRvb2x0aXBGb250RmFjZVtzaXplXSA9IHsgX19WQV9BUkdTX18gfTsK
LQotI2lmIE9TKFdJTkRPV1MpCi1UT09MVElQX0ZPTlRfRkFNSUxJRVMoMiwgbmV3IEF0b21pY1N0
cmluZygiQ29uc29sYXMiKSwgbmV3IEF0b21pY1N0cmluZygiTHVjaWRhIENvbnNvbGUiKSkKLSNl
bGlmIE9TKE1BQ19PU19YKQotVE9PTFRJUF9GT05UX0ZBTUlMSUVTKDIsIG5ldyBBdG9taWNTdHJp
bmcoIk1lbmxvIiksIG5ldyBBdG9taWNTdHJpbmcoIk1vbmFjbyIpKQotI2VsaWYgT1MoVU5JWCkK
LVRPT0xUSVBfRk9OVF9GQU1JTElFUygxLCBuZXcgQXRvbWljU3RyaW5nKCJkZWphdnUgc2FucyBt
b25vIikpCi0jZW5kaWYKLS8vIEluIHRoZSBkZWZhdWx0IGNhc2UsIHdlIGdldCB0aGUgc2V0dGlu
Z3MtcHJvdmlkZWQgbW9ub3NwYWNlIGZvbnQuCi0KLSN1bmRlZiBUT09MVElQX0ZPTlRfRkFNSUxJ
RVMKLQotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdzLT5mb250
UmVuZGVyaW5nTW9kZSgpKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGZv
bnRIZWlnaHRQeCk7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZpeGVkRm9udEZhbWlseSA9
IHNldHRpbmdzLT5maXhlZEZvbnRGYW1pbHkoKTsKLSAgICBpZiAoIWZpeGVkRm9udEZhbWlseS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9u
dERlc2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHkpOwotICAgICAgICBGb250RmFtaWx5KiBjdXJy
ZW50RmFtaWx5ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvb2x0aXBG
b250RmFjZVNpemU7ICsraSkgewotICAgICAgICAgICAgaWYgKCFjdXJyZW50RmFtaWx5KSB7Ci0g
ICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KCp0
b29sdGlwRm9udEZhY2VbaV0pOwotICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJz
dEZhbWlseSgpLmFwcGVuZEZhbWlseSgwKTsKLSAgICAgICAgICAgICAgICBjdXJyZW50RmFtaWx5
ID0gJmZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpOwotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBSZWZQdHI8U2hhcmVkRm9udEZhbWlseT4gbmV3RmFtaWx5ID0gU2hh
cmVkRm9udEZhbWlseTo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgbmV3RmFtaWx5LT5zZXRG
YW1pbHkoKnRvb2x0aXBGb250RmFjZVtpXSk7Ci0gICAgICAgICAgICAgICAgY3VycmVudEZhbWls
eS0+YXBwZW5kRmFtaWx5KG5ld0ZhbWlseSk7Ci0gICAgICAgICAgICAgICAgY3VycmVudEZhbWls
eSA9IG5ld0ZhbWlseS5nZXQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBS
ZWZQdHI8U2hhcmVkRm9udEZhbWlseT4gbmV3RmFtaWx5ID0gU2hhcmVkRm9udEZhbWlseTo6Y3Jl
YXRlKCk7Ci0gICAgICAgIG5ld0ZhbWlseS0+c2V0RmFtaWx5KGZpeGVkRm9udEZhbWlseSk7Ci0g
ICAgICAgIGN1cnJlbnRGYW1pbHktPmFwcGVuZEZhbWlseShuZXdGYW1pbHkpOwotICAgICAgICBj
dXJyZW50RmFtaWx5ID0gbmV3RmFtaWx5LmdldCgpOwotICAgIH0KLX0KLQotdm9pZCBkcmF3RWxl
bWVudFRpdGxlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgTm9kZSogbm9kZSwgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciwgY29uc3QgSW50UmVjdCYgYm91bmRpbmdCb3gsIGNvbnN0IEludFJlY3Qm
IGFuY2hvckJveCwgY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCwgV2ViQ29yZTo6U2V0dGlu
Z3MqIHNldHRpbmdzKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIGJhY2tncm91
bmRDb2xvciwgKDI1NSwgMjU1LCAxOTQpKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9y
LCB0YWdDb2xvciwgKDEzNiwgMTgsIDEyOCkpOyAvLyBTYW1lIGFzIC53ZWJraXQtaHRtbC10YWcu
Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgYXR0ckNvbG9yLCAoMjYsIDI2LCAxNjYp
KTsgLy8gU2FtZSBhcyAud2Via2l0LWh0bWwtYXR0cmlidXRlLXZhbHVlLgotICAgIERFRklORV9T
VEFUSUNfTE9DQUwoQ29sb3IsIG5vcm1hbENvbG9yLCAoQ29sb3I6OmJsYWNrKSk7Ci0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChDb2xvciwgcHhBbmRCb3JkZXJDb2xvciwgKDEyOCwgMTI4LCAxMjgp
KTsKLQotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBweFN0cmluZywgKCJweCIpKTsK
LSAgICBjb25zdCBzdGF0aWMgVUNoYXIgdGltZXNVQ2hhcltdID0geyAweDAwMjAsIDB4MDBENywg
MHgwMDIwLCAwIH07Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHRpbWVzU3RyaW5n
LCAodGltZXNVQ2hhcikpOyAvLyAmdGltZXM7IHN0cmluZwotCi0gICAgRm9udENhY2hlUHVyZ2VQ
cmV2ZW50ZXIgZm9udENhY2hlUHVyZ2VQcmV2ZW50ZXI7Ci0KLSAgICBFbGVtZW50KiBlbGVtZW50
ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOwotICAgIGJvb2wgaXNYSFRNTCA9IGVsZW1l
bnQtPmRvY3VtZW50KCktPmlzWEhUTUxEb2N1bWVudCgpOwotICAgIFN0cmluZ0J1aWxkZXIgbm9k
ZVRpdGxlOwotICAgIG5vZGVUaXRsZS5hcHBlbmQoaXNYSFRNTCA/IGVsZW1lbnQtPm5vZGVOYW1l
KCkgOiBlbGVtZW50LT5ub2RlTmFtZSgpLmxvd2VyKCkpOwotICAgIHVuc2lnbmVkIHRhZ05hbWVM
ZW5ndGggPSBub2RlVGl0bGUubGVuZ3RoKCk7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlk
VmFsdWUgPSBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpOwotICAgIHVuc2lnbmVkIGlkU3RyaW5n
TGVuZ3RoID0gMDsKLSAgICBTdHJpbmcgaWRTdHJpbmc7Ci0gICAgaWYgKCFpZFZhbHVlLmlzTnVs
bCgpICYmICFpZFZhbHVlLmlzRW1wdHkoKSkgewotICAgICAgICBub2RlVGl0bGUuYXBwZW5kKCIj
Iik7Ci0gICAgICAgIG5vZGVUaXRsZS5hcHBlbmQoaWRWYWx1ZSk7Ci0gICAgICAgIGlkU3RyaW5n
TGVuZ3RoID0gMSArIGlkVmFsdWUubGVuZ3RoKCk7Ci0gICAgfQotCi0gICAgSGFzaFNldDxBdG9t
aWNTdHJpbmc+IHVzZWRDbGFzc05hbWVzOwotICAgIHVuc2lnbmVkIGNsYXNzZXNTdHJpbmdMZW5n
dGggPSAwOwotICAgIGlmIChlbGVtZW50LT5oYXNDbGFzcygpICYmIGVsZW1lbnQtPmlzU3R5bGVk
RWxlbWVudCgpKSB7Ci0gICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFtZXNT
dHJpbmcgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmNsYXNzTmFtZXMo
KTsKLSAgICAgICAgc2l6ZV90IGNsYXNzTmFtZUNvdW50ID0gY2xhc3NOYW1lc1N0cmluZy5zaXpl
KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2xhc3NOYW1lQ291bnQ7ICsraSkg
ewotICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjbGFzc05hbWUgPSBjbGFzc05hbWVz
U3RyaW5nW2ldOwotICAgICAgICAgICAgaWYgKHVzZWRDbGFzc05hbWVzLmNvbnRhaW5zKGNsYXNz
TmFtZSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB1c2VkQ2xhc3NO
YW1lcy5hZGQoY2xhc3NOYW1lKTsKLSAgICAgICAgICAgIG5vZGVUaXRsZS5hcHBlbmQoIi4iKTsK
LSAgICAgICAgICAgIG5vZGVUaXRsZS5hcHBlbmQoY2xhc3NOYW1lKTsKLSAgICAgICAgICAgIGNs
YXNzZXNTdHJpbmdMZW5ndGggKz0gMSArIGNsYXNzTmFtZS5sZW5ndGgoKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBtb2RlbE9iamVjdCA9IHJlbmRlcmVy
LT5pc0JveE1vZGVsT2JqZWN0KCkgPyB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRlcmVyKSA6
IDA7Ci0KLSAgICBTdHJpbmcgd2lkdGhOdW1iZXJQYXJ0ID0gIiAiICsgU3RyaW5nOjpudW1iZXIo
bW9kZWxPYmplY3QgPyBhZGp1c3RGb3JBYnNvbHV0ZVpvb20obW9kZWxPYmplY3QtPnBpeGVsU25h
cHBlZE9mZnNldFdpZHRoKCksIG1vZGVsT2JqZWN0KSA6IGJvdW5kaW5nQm94LndpZHRoKCkpOwot
ICAgIG5vZGVUaXRsZS5hcHBlbmQod2lkdGhOdW1iZXJQYXJ0KTsKLSAgICBub2RlVGl0bGUuYXBw
ZW5kKHB4U3RyaW5nKTsKLSAgICBub2RlVGl0bGUuYXBwZW5kKHRpbWVzU3RyaW5nKTsKLSAgICBT
dHJpbmcgaGVpZ2h0TnVtYmVyUGFydCA9IFN0cmluZzo6bnVtYmVyKG1vZGVsT2JqZWN0ID8gYWRq
dXN0Rm9yQWJzb2x1dGVab29tKG1vZGVsT2JqZWN0LT5waXhlbFNuYXBwZWRPZmZzZXRIZWlnaHQo
KSwgbW9kZWxPYmplY3QpIDogYm91bmRpbmdCb3guaGVpZ2h0KCkpOwotICAgIG5vZGVUaXRsZS5h
cHBlbmQoaGVpZ2h0TnVtYmVyUGFydCk7Ci0gICAgbm9kZVRpdGxlLmFwcGVuZChweFN0cmluZyk7
Ci0KLSAgICBGb250RGVzY3JpcHRpb24gZGVzYzsKLSAgICBzZXRVcEZvbnREZXNjcmlwdGlvbihk
ZXNjLCBzZXR0aW5ncyk7Ci0gICAgRm9udCBmb250ID0gRm9udChkZXNjLCAwLCAwKTsKLSAgICBm
b250LnVwZGF0ZSgwKTsKLQotICAgIFRleHRSdW4gbm9kZVRpdGxlUnVuKG5vZGVUaXRsZS50b1N0
cmluZygpKTsKLSAgICBJbnRQb2ludCB0aXRsZUJhc2VQb2ludCA9IEludFBvaW50KGFuY2hvckJv
eC54KCksIGFuY2hvckJveC5tYXhZKCkgLSAxKTsKLSAgICB0aXRsZUJhc2VQb2ludC5tb3ZlKHJl
Y3RJbmZsYXRlUHgsIHJlY3RJbmZsYXRlUHgpOwotICAgIEludFJlY3QgdGl0bGVSZWN0ID0gZW5j
bG9zaW5nSW50UmVjdChmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KG5vZGVUaXRsZVJ1biwgdGl0
bGVCYXNlUG9pbnQsIGZvbnRIZWlnaHRQeCkpOwotICAgIHRpdGxlUmVjdC5pbmZsYXRlKHJlY3RJ
bmZsYXRlUHgpOwotCi0gICAgLy8gVGhlIGluaXRpYWwgb2Zmc2V0cyBuZWVkZWQgdG8gY29tcGVu
c2F0ZSBmb3IgYSAxcHgtdGhpY2sgYm9yZGVyIHN0cm9rZSAod2hpY2ggaXMgbm90IGEgcGFydCBv
ZiB0aGUgcmVjdGFuZ2xlKS4KLSAgICBpbnQgZHggPSAtYm9yZGVyV2lkdGhQeDsKLSAgICBpbnQg
ZHkgPSBib3JkZXJXaWR0aFB4OwotCi0gICAgLy8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRo
ZSByaWdodCBvZiB2aXNpYmxlUmVjdCwgcmlnaHQtYWxpZ24gdGhlIHRpcCB3aXRoIHRoZSBzYWlk
IGJvdW5kYXJ5LgotICAgIGlmICh0aXRsZVJlY3QubWF4WCgpICsgZHggPiB2aXNpYmxlUmVjdC5t
YXhYKCkpCi0gICAgICAgIGR4ID0gdmlzaWJsZVJlY3QubWF4WCgpIC0gdGl0bGVSZWN0Lm1heFgo
KTsKLQotICAgIC8vIElmIHRoZSB0aXAgc3RpY2tzIGJleW9uZCB0aGUgbGVmdCBvZiB2aXNpYmxl
UmVjdCwgbGVmdC1hbGlnbiB0aGUgdGlwIHdpdGggdGhlIHNhaWQgYm91bmRhcnkuCi0gICAgaWYg
KHRpdGxlUmVjdC54KCkgKyBkeCA8IHZpc2libGVSZWN0LngoKSkKLSAgICAgICAgZHggPSB2aXNp
YmxlUmVjdC54KCkgLSB0aXRsZVJlY3QueCgpIC0gYm9yZGVyV2lkdGhQeDsKLQotICAgIC8vIElm
IHRoZSB0aXAgc3RpY2tzIGJleW9uZCB0aGUgYm90dG9tIG9mIHZpc2libGVSZWN0LCBzaG93IHRo
ZSB0aXAgYXQgdG9wIG9mIGJvdW5kaW5nIGJveC4KLSAgICBpZiAodGl0bGVSZWN0Lm1heFkoKSAr
IGR5ID4gdmlzaWJsZVJlY3QubWF4WSgpKSB7Ci0gICAgICAgIGR5ID0gYW5jaG9yQm94LnkoKSAt
IHRpdGxlUmVjdC5tYXhZKCkgLSBib3JkZXJXaWR0aFB4OwotICAgICAgICAvLyBJZiB0aGUgdGlw
IHN0aWxsIHN0aWNrcyBiZXlvbmQgdGhlIGJvdHRvbSBvZiB2aXNpYmxlUmVjdCwgYm90dG9tLWFs
aWduIHRoZSB0aXAgd2l0aCB0aGUgc2FpZCBib3VuZGFyeS4KLSAgICAgICAgaWYgKHRpdGxlUmVj
dC5tYXhZKCkgKyBkeSA+IHZpc2libGVSZWN0Lm1heFkoKSkKLSAgICAgICAgICAgIGR5ID0gdmlz
aWJsZVJlY3QubWF4WSgpIC0gdGl0bGVSZWN0Lm1heFkoKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0
aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIHRvcCBvZiB2aXNpYmxlUmVjdCwgc2hvdyB0aGUgdGlw
IGF0IHRvcCBvZiB2aXNpYmxlUmVjdC4KLSAgICBpZiAodGl0bGVSZWN0LnkoKSArIGR5IDwgdmlz
aWJsZVJlY3QueSgpKQotICAgICAgICBkeSA9IHZpc2libGVSZWN0LnkoKSAtIHRpdGxlUmVjdC55
KCkgKyBib3JkZXJXaWR0aFB4OwotCi0gICAgdGl0bGVSZWN0Lm1vdmUoZHgsIGR5KTsKLQotICAg
IGJvb2wgaXNBcnJvd0F0VG9wID0gdGl0bGVSZWN0LnkoKSA+IGFuY2hvckJveC55KCk7Ci0gICAg
dGl0bGVSZWN0Lm1vdmUoMCwgdG9vbHRpcFBhZGRpbmcgKiAoaXNBcnJvd0F0VG9wID8gMSA6IC0x
KSk7Ci0KLSAgICB7Ci0gICAgICAgIGZsb2F0IGFycm93VGlwWCA9IGNhbGN1bGF0ZUFycm93VGlw
WChhbmNob3JCb3gsIHRpdGxlUmVjdCk7Ci0gICAgICAgIGludCBhcnJvd0Jhc2VZID0gaXNBcnJv
d0F0VG9wID8gdGl0bGVSZWN0LnkoKSA6IHRpdGxlUmVjdC5tYXhZKCk7Ci0gICAgICAgIGludCBh
cnJvd09wcG9zaXRlWSA9IGlzQXJyb3dBdFRvcCA/IHRpdGxlUmVjdC5tYXhZKCkgOiB0aXRsZVJl
Y3QueSgpOwotCi0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnRzWzhdOwotICAgICAgICBwb2ludHNb
MF0gPSBGbG9hdFBvaW50KGFycm93VGlwWCAtIGFycm93SGFsZldpZHRoLCBhcnJvd0Jhc2VZKTsK
LSAgICAgICAgcG9pbnRzWzFdID0gRmxvYXRQb2ludChhcnJvd1RpcFgsIGFycm93QmFzZVkgKyBh
cnJvd0hlaWdodCAqIChpc0Fycm93QXRUb3AgPyAtMSA6IDEpKTsKLSAgICAgICAgcG9pbnRzWzJd
ID0gRmxvYXRQb2ludChhcnJvd1RpcFggKyBhcnJvd0hhbGZXaWR0aCwgYXJyb3dCYXNlWSk7Ci0g
ICAgICAgIHBvaW50c1szXSA9IEZsb2F0UG9pbnQodGl0bGVSZWN0Lm1heFgoKSwgYXJyb3dCYXNl
WSk7Ci0gICAgICAgIHBvaW50c1s0XSA9IEZsb2F0UG9pbnQodGl0bGVSZWN0Lm1heFgoKSwgYXJy
b3dPcHBvc2l0ZVkpOwotICAgICAgICBwb2ludHNbNV0gPSBGbG9hdFBvaW50KHRpdGxlUmVjdC54
KCksIGFycm93T3Bwb3NpdGVZKTsKLSAgICAgICAgcG9pbnRzWzZdID0gRmxvYXRQb2ludCh0aXRs
ZVJlY3QueCgpLCBhcnJvd0Jhc2VZKTsKLSAgICAgICAgcG9pbnRzWzddID0gcG9pbnRzWzBdOwot
Ci0gICAgICAgIFBhdGggcGF0aDsKLSAgICAgICAgcGF0aC5tb3ZlVG8ocG9pbnRzWzBdKTsKLSAg
ICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCA4OyArK2kpCi0gICAgICAgICAgICBwYXRoLmFkZExp
bmVUbyhwb2ludHNbaV0pOwotCi0gICAgICAgIGNvbnRleHQuc2F2ZSgpOwotICAgICAgICBjb250
ZXh0LnRyYW5zbGF0ZSgwLjVmLCAwLjVmKTsKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xv
cihweEFuZEJvcmRlckNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICAgICAgY29udGV4
dC5zZXRGaWxsQ29sb3IoYmFja2dyb3VuZENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAg
ICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoYm9yZGVyV2lkdGhQeCk7Ci0gICAgICAg
IGNvbnRleHQuZmlsbFBhdGgocGF0aCk7Ci0gICAgICAgIGNvbnRleHQuc3Ryb2tlUGF0aChwYXRo
KTsKLSAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgfQotCi0gICAgaW50IGN1cnJlbnRQ
b3MgPSAwOwotICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3Vy
cmVudFBvcywgdGFnTmFtZUxlbmd0aCwgdGFnQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVj
dCk7Ci0gICAgaWYgKGlkU3RyaW5nTGVuZ3RoKQotICAgICAgICBjdXJyZW50UG9zID0gZHJhd1N1
YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIGlkU3RyaW5nTGVuZ3RoLCBhdHRyQ29s
b3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7Ci0gICAgaWYgKGNsYXNzZXNTdHJpbmdMZW5n
dGgpCi0gICAgICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3Vy
cmVudFBvcywgY2xhc3Nlc1N0cmluZ0xlbmd0aCwgYXR0ckNvbG9yLCBmb250LCBjb250ZXh0LCB0
aXRsZVJlY3QpOwotICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwg
Y3VycmVudFBvcywgd2lkdGhOdW1iZXJQYXJ0Lmxlbmd0aCgpLCBub3JtYWxDb2xvciwgZm9udCwg
Y29udGV4dCwgdGl0bGVSZWN0KTsKLSAgICBjdXJyZW50UG9zID0gZHJhd1N1YnN0cmluZyhub2Rl
VGl0bGVSdW4sIGN1cnJlbnRQb3MsIHB4U3RyaW5nLmxlbmd0aCgpICsgdGltZXNTdHJpbmcubGVu
Z3RoKCksIHB4QW5kQm9yZGVyQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7Ci0gICAg
Y3VycmVudFBvcyA9IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBjdXJyZW50UG9zLCBoZWln
aHROdW1iZXJQYXJ0Lmxlbmd0aCgpLCBub3JtYWxDb2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVS
ZWN0KTsKLSAgICBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3VycmVudFBvcywgcHhTdHJp
bmcubGVuZ3RoKCksIHB4QW5kQm9yZGVyQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7
Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbnRlbnRzUXVhZFRvUGFnZShjb25zdCBGcmFtZVZpZXcqIG1h
aW5WaWV3LCBjb25zdCBGcmFtZVZpZXcqIHZpZXcsIEZsb2F0UXVhZCYgcXVhZCkKLXsKLSAgICBx
dWFkLnNldFAxKHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhyb3VuZGVkSW50UG9pbnQocXVhZC5w
MSgpKSkpOwotICAgIHF1YWQuc2V0UDIodmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHJvdW5kZWRJ
bnRQb2ludChxdWFkLnAyKCkpKSk7Ci0gICAgcXVhZC5zZXRQMyh2aWV3LT5jb250ZW50c1RvUm9v
dFZpZXcocm91bmRlZEludFBvaW50KHF1YWQucDMoKSkpKTsKLSAgICBxdWFkLnNldFA0KHZpZXct
PmNvbnRlbnRzVG9Sb290Vmlldyhyb3VuZGVkSW50UG9pbnQocXVhZC5wNCgpKSkpOwotICAgIHF1
YWQgKz0gbWFpblZpZXctPnNjcm9sbE9mZnNldCgpOwotfQotCi1zdGF0aWMgdm9pZCBnZXRPckRy
YXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgSGlnaGxpZ2h0RGF0YSog
aGlnaGxpZ2h0RGF0YSwgSGlnaGxpZ2h0KiBoaWdobGlnaHQpCi17Ci0gICAgTm9kZSogbm9kZSA9
IGhpZ2hsaWdodERhdGEtPm5vZGUuZ2V0KCk7Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgRnJhbWUqIGNvbnRhaW5pbmdGcmFtZSA9IG5vZGUtPmRv
Y3VtZW50KCktPmZyYW1lKCk7Ci0KLSAgICBpZiAoIXJlbmRlcmVyIHx8ICFjb250YWluaW5nRnJh
bWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lVmlldyogY29udGFpbmluZ1ZpZXcgPSBj
b250YWluaW5nRnJhbWUtPnZpZXcoKTsKLSAgICBGcmFtZVZpZXcqIG1haW5WaWV3ID0gY29udGFp
bmluZ0ZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCk7Ci0gICAgSW50UmVjdCBib3Vu
ZGluZ0JveCA9IHBpeGVsU25hcHBlZEludFJlY3QoY29udGFpbmluZ1ZpZXctPmNvbnRlbnRzVG9S
b290VmlldyhyZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSkpOwotICAgIGJvdW5k
aW5nQm94Lm1vdmUobWFpblZpZXctPnNjcm9sbE9mZnNldCgpKTsKLSAgICBJbnRSZWN0IHRpdGxl
QW5jaG9yQm94ID0gYm91bmRpbmdCb3g7Ci0KLSAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QgPSBt
YWluVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgLy8gRG9uJ3QgdHJhbnNsYXRlIHRo
ZSBjb250ZXh0IGlmIHRoZSBmcmFtZSBpcyByZW5kZXJlZCBpbiBwYWdlIGNvb3JkaW5hdGVzLgot
ICAgIGlmIChjb250ZXh0ICYmICFtYWluVmlldy0+ZGVsZWdhdGVzU2Nyb2xsaW5nKCkpCi0gICAg
ICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtdmlzaWJsZVJlY3QueCgpLCAtdmlzaWJsZVJlY3QueSgp
KTsKLQotICAgIC8vIFJlbmRlclNWR1Jvb3Qgc2hvdWxkIGJlIGhpZ2hsaWdodGVkIHRocm91Z2gg
dGhlIGlzQm94KCkgY29kZSBwYXRoLCBhbGwgb3RoZXIgU1ZHIGVsZW1lbnRzIHNob3VsZCBqdXN0
IGR1bXAgdGhlaXIgYWJzb2x1dGVRdWFkcygpLgotI2lmIEVOQUJMRShTVkcpCi0gICAgYm9vbCBp
c1NWR1JlbmRlcmVyID0gcmVuZGVyZXItPm5vZGUoKSAmJiByZW5kZXJlci0+bm9kZSgpLT5pc1NW
R0VsZW1lbnQoKSAmJiAhcmVuZGVyZXItPmlzU1ZHUm9vdCgpOwotI2Vsc2UKLSAgICBib29sIGlz
U1ZHUmVuZGVyZXIgPSBmYWxzZTsKLSNlbmRpZgotCi0gICAgaWYgKGlzU1ZHUmVuZGVyZXIpIHsK
LSAgICAgICAgaGlnaGxpZ2h0LT50eXBlID0gSGlnaGxpZ2h0VHlwZVJlY3RzOwotICAgICAgICBy
ZW5kZXJlci0+YWJzb2x1dGVRdWFkcyhoaWdobGlnaHQtPnF1YWRzKTsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBoaWdobGlnaHQtPnF1YWRzLnNpemUoKTsgKytpKQotICAgICAgICAg
ICAgY29udGVudHNRdWFkVG9QYWdlKG1haW5WaWV3LCBjb250YWluaW5nVmlldywgaGlnaGxpZ2h0
LT5xdWFkc1tpXSk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgICAgICBkcmF3SGln
aGxpZ2h0Rm9yU1ZHUmVuZGVyZXIoKmNvbnRleHQsIGhpZ2hsaWdodC0+cXVhZHMsIGhpZ2hsaWdo
dERhdGEpOwotICAgIH0gZWxzZSBpZiAocmVuZGVyZXItPmlzQm94KCkgfHwgcmVuZGVyZXItPmlz
UmVuZGVySW5saW5lKCkpIHsKLSAgICAgICAgTGF5b3V0UmVjdCBjb250ZW50Qm94OwotICAgICAg
ICBMYXlvdXRSZWN0IHBhZGRpbmdCb3g7Ci0gICAgICAgIExheW91dFJlY3QgYm9yZGVyQm94Owot
ICAgICAgICBMYXlvdXRSZWN0IG1hcmdpbkJveDsKLQotICAgICAgICBpZiAocmVuZGVyZXItPmlz
Qm94KCkpIHsKLSAgICAgICAgICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gdG9SZW5kZXJCb3go
cmVuZGVyZXIpOwotCi0gICAgICAgICAgICAvLyBSZW5kZXJCb3ggcmV0dXJucyB0aGUgInB1cmUi
IGNvbnRlbnQgYXJlYSBib3gsIGV4Y2x1c2l2ZSBvZiB0aGUgc2Nyb2xsYmFycyAoaWYgcHJlc2Vu
dCksIHdoaWNoIGFsc28gY291bnQgdG93YXJkcyB0aGUgY29udGVudCBhcmVhIGluIENTUy4KLSAg
ICAgICAgICAgIGNvbnRlbnRCb3ggPSByZW5kZXJCb3gtPmNvbnRlbnRCb3hSZWN0KCk7Ci0gICAg
ICAgICAgICBjb250ZW50Qm94LnNldFdpZHRoKGNvbnRlbnRCb3gud2lkdGgoKSArIHJlbmRlckJv
eC0+dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpKTsKLSAgICAgICAgICAgIGNvbnRlbnRCb3guc2V0
SGVpZ2h0KGNvbnRlbnRCb3guaGVpZ2h0KCkgKyByZW5kZXJCb3gtPmhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQoKSk7Ci0KLSAgICAgICAgICAgIHBhZGRpbmdCb3ggPSBMYXlvdXRSZWN0KGNvbnRl
bnRCb3gueCgpIC0gcmVuZGVyQm94LT5wYWRkaW5nTGVmdCgpLCBjb250ZW50Qm94LnkoKSAtIHJl
bmRlckJveC0+cGFkZGluZ1RvcCgpLAotICAgICAgICAgICAgICAgICAgICBjb250ZW50Qm94Lndp
ZHRoKCkgKyByZW5kZXJCb3gtPnBhZGRpbmdMZWZ0KCkgKyByZW5kZXJCb3gtPnBhZGRpbmdSaWdo
dCgpLCBjb250ZW50Qm94LmhlaWdodCgpICsgcmVuZGVyQm94LT5wYWRkaW5nVG9wKCkgKyByZW5k
ZXJCb3gtPnBhZGRpbmdCb3R0b20oKSk7Ci0gICAgICAgICAgICBib3JkZXJCb3ggPSBMYXlvdXRS
ZWN0KHBhZGRpbmdCb3gueCgpIC0gcmVuZGVyQm94LT5ib3JkZXJMZWZ0KCksIHBhZGRpbmdCb3gu
eSgpIC0gcmVuZGVyQm94LT5ib3JkZXJUb3AoKSwKLSAgICAgICAgICAgICAgICAgICAgcGFkZGlu
Z0JveC53aWR0aCgpICsgcmVuZGVyQm94LT5ib3JkZXJMZWZ0KCkgKyByZW5kZXJCb3gtPmJvcmRl
clJpZ2h0KCksIHBhZGRpbmdCb3guaGVpZ2h0KCkgKyByZW5kZXJCb3gtPmJvcmRlclRvcCgpICsg
cmVuZGVyQm94LT5ib3JkZXJCb3R0b20oKSk7Ci0gICAgICAgICAgICBtYXJnaW5Cb3ggPSBMYXlv
dXRSZWN0KGJvcmRlckJveC54KCkgLSByZW5kZXJCb3gtPm1hcmdpbkxlZnQoKSwgYm9yZGVyQm94
LnkoKSAtIHJlbmRlckJveC0+bWFyZ2luVG9wKCksCi0gICAgICAgICAgICAgICAgICAgIGJvcmRl
ckJveC53aWR0aCgpICsgcmVuZGVyQm94LT5tYXJnaW5XaWR0aCgpLCBib3JkZXJCb3guaGVpZ2h0
KCkgKyByZW5kZXJCb3gtPm1hcmdpbkhlaWdodCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIFJlbmRlcklubGluZSogcmVuZGVySW5saW5lID0gdG9SZW5kZXJJbmxpbmUocmVuZGVy
ZXIpOwotCi0gICAgICAgICAgICAvLyBSZW5kZXJJbmxpbmUncyBib3VuZGluZyBib3ggaW5jbHVk
ZXMgcGFkZGluZ3MgYW5kIGJvcmRlcnMsIGV4Y2x1ZGVzIG1hcmdpbnMuCi0gICAgICAgICAgICBi
b3JkZXJCb3ggPSByZW5kZXJJbmxpbmUtPmxpbmVzQm91bmRpbmdCb3goKTsKLSAgICAgICAgICAg
IHBhZGRpbmdCb3ggPSBMYXlvdXRSZWN0KGJvcmRlckJveC54KCkgKyByZW5kZXJJbmxpbmUtPmJv
cmRlckxlZnQoKSwgYm9yZGVyQm94LnkoKSArIHJlbmRlcklubGluZS0+Ym9yZGVyVG9wKCksCi0g
ICAgICAgICAgICAgICAgICAgIGJvcmRlckJveC53aWR0aCgpIC0gcmVuZGVySW5saW5lLT5ib3Jk
ZXJMZWZ0KCkgLSByZW5kZXJJbmxpbmUtPmJvcmRlclJpZ2h0KCksIGJvcmRlckJveC5oZWlnaHQo
KSAtIHJlbmRlcklubGluZS0+Ym9yZGVyVG9wKCkgLSByZW5kZXJJbmxpbmUtPmJvcmRlckJvdHRv
bSgpKTsKLSAgICAgICAgICAgIGNvbnRlbnRCb3ggPSBMYXlvdXRSZWN0KHBhZGRpbmdCb3gueCgp
ICsgcmVuZGVySW5saW5lLT5wYWRkaW5nTGVmdCgpLCBwYWRkaW5nQm94LnkoKSArIHJlbmRlcklu
bGluZS0+cGFkZGluZ1RvcCgpLAotICAgICAgICAgICAgICAgICAgICBwYWRkaW5nQm94LndpZHRo
KCkgLSByZW5kZXJJbmxpbmUtPnBhZGRpbmdMZWZ0KCkgLSByZW5kZXJJbmxpbmUtPnBhZGRpbmdS
aWdodCgpLCBwYWRkaW5nQm94LmhlaWdodCgpIC0gcmVuZGVySW5saW5lLT5wYWRkaW5nVG9wKCkg
LSByZW5kZXJJbmxpbmUtPnBhZGRpbmdCb3R0b20oKSk7Ci0gICAgICAgICAgICAvLyBJZ25vcmUg
bWFyZ2luVG9wIGFuZCBtYXJnaW5Cb3R0b20gZm9yIGlubGluZXMuCi0gICAgICAgICAgICBtYXJn
aW5Cb3ggPSBMYXlvdXRSZWN0KGJvcmRlckJveC54KCkgLSByZW5kZXJJbmxpbmUtPm1hcmdpbkxl
ZnQoKSwgYm9yZGVyQm94LnkoKSwKLSAgICAgICAgICAgICAgICAgICAgYm9yZGVyQm94LndpZHRo
KCkgKyByZW5kZXJJbmxpbmUtPm1hcmdpbldpZHRoKCksIGJvcmRlckJveC5oZWlnaHQoKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBGbG9hdFF1YWQgYWJzQ29udGVudFF1YWQgPSByZW5kZXJlci0+
bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoY29udGVudEJveCkpOwotICAgICAgICBGbG9h
dFF1YWQgYWJzUGFkZGluZ1F1YWQgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9h
dFJlY3QocGFkZGluZ0JveCkpOwotICAgICAgICBGbG9hdFF1YWQgYWJzQm9yZGVyUXVhZCA9IHJl
bmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChib3JkZXJCb3gpKTsKLSAgICAg
ICAgRmxvYXRRdWFkIGFic01hcmdpblF1YWQgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVh
ZChGbG9hdFJlY3QobWFyZ2luQm94KSk7Ci0KLSAgICAgICAgY29udGVudHNRdWFkVG9QYWdlKG1h
aW5WaWV3LCBjb250YWluaW5nVmlldywgYWJzQ29udGVudFF1YWQpOwotICAgICAgICBjb250ZW50
c1F1YWRUb1BhZ2UobWFpblZpZXcsIGNvbnRhaW5pbmdWaWV3LCBhYnNQYWRkaW5nUXVhZCk7Ci0g
ICAgICAgIGNvbnRlbnRzUXVhZFRvUGFnZShtYWluVmlldywgY29udGFpbmluZ1ZpZXcsIGFic0Jv
cmRlclF1YWQpOwotICAgICAgICBjb250ZW50c1F1YWRUb1BhZ2UobWFpblZpZXcsIGNvbnRhaW5p
bmdWaWV3LCBhYnNNYXJnaW5RdWFkKTsKLQotICAgICAgICB0aXRsZUFuY2hvckJveCA9IGFic01h
cmdpblF1YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKLQotICAgICAgICBoaWdobGlnaHQtPnR5
cGUgPSBIaWdobGlnaHRUeXBlTm9kZTsKLSAgICAgICAgaGlnaGxpZ2h0LT5xdWFkcy5hcHBlbmQo
YWJzTWFyZ2luUXVhZCk7Ci0gICAgICAgIGhpZ2hsaWdodC0+cXVhZHMuYXBwZW5kKGFic0JvcmRl
clF1YWQpOwotICAgICAgICBoaWdobGlnaHQtPnF1YWRzLmFwcGVuZChhYnNQYWRkaW5nUXVhZCk7
Ci0gICAgICAgIGhpZ2hsaWdodC0+cXVhZHMuYXBwZW5kKGFic0NvbnRlbnRRdWFkKTsKLQotICAg
ICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgICAgIGRyYXdIaWdobGlnaHRGb3JCb3goKmNvbnRl
eHQsIGFic0NvbnRlbnRRdWFkLCBhYnNQYWRkaW5nUXVhZCwgYWJzQm9yZGVyUXVhZCwgYWJzTWFy
Z2luUXVhZCwgaGlnaGxpZ2h0RGF0YSk7Ci0gICAgfQotCi0gICAgLy8gRHJhdyBub2RlIHRpdGxl
IGlmIG5lY2Vzc2FyeS4KLQotICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoY29udGV4dCAmJiBoaWdobGlnaHREYXRhLT5zaG93SW5mbykK
LSAgICAgICAgZHJhd0VsZW1lbnRUaXRsZSgqY29udGV4dCwgbm9kZSwgcmVuZGVyZXIsIHBpeGVs
U25hcHBlZEludFJlY3QoYm91bmRpbmdCb3gpLCBwaXhlbFNuYXBwZWRJbnRSZWN0KHRpdGxlQW5j
aG9yQm94KSwgdmlzaWJsZVJlY3QsIGNvbnRhaW5pbmdGcmFtZS0+c2V0dGluZ3MoKSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIGdldE9yRHJhd1JlY3RIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBEb2N1bWVudCogZG9jdW1lbnQsIEhpZ2hsaWdodERhdGEqIGhpZ2hsaWdodERhdGEsIEhp
Z2hsaWdodCAqaGlnaGxpZ2h0KQotewotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEZsb2F0UmVjdCBoaWdobGlnaHRSZWN0KCooaGlnaGxpZ2h0RGF0YS0+cmVjdCkp
OwotCi0gICAgaGlnaGxpZ2h0LT50eXBlID0gSGlnaGxpZ2h0VHlwZVJlY3RzOwotICAgIGhpZ2hs
aWdodC0+cXVhZHMuYXBwZW5kKGhpZ2hsaWdodFJlY3QpOwotCi0gICAgaWYgKGNvbnRleHQpIHsK
LSAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gZG9jdW1lbnQtPmZyYW1lKCktPnZpZXcoKTsKLSAg
ICAgICAgaWYgKCF2aWV3LT5kZWxlZ2F0ZXNTY3JvbGxpbmcoKSkgewotICAgICAgICAgICAgRmxv
YXRSZWN0IHZpc2libGVSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgICAg
ICAgICBjb250ZXh0LT50cmFuc2xhdGUoLXZpc2libGVSZWN0LngoKSwgLXZpc2libGVSZWN0Lnko
KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBkcmF3T3V0bGluZWRRdWFkKCpjb250ZXh0LCBoaWdo
bGlnaHRSZWN0LCBoaWdobGlnaHREYXRhLT5jb250ZW50LCBoaWdobGlnaHREYXRhLT5jb250ZW50
T3V0bGluZSk7Ci0gICAgfQotfQotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotbmFtZXNw
YWNlIERPTU5vZGVIaWdobGlnaHRlciB7Ci0KLXZvaWQgZHJhd0hpZ2hsaWdodChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIERvY3VtZW50KiBkb2N1bWVudCwgSGlnaGxpZ2h0RGF0YSogaGlnaGxp
Z2h0RGF0YSkKLXsKLSAgICBpZiAoIWhpZ2hsaWdodERhdGEpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEhpZ2hsaWdodCBoaWdobGlnaHQ7Ci0gICAgaWYgKGhpZ2hsaWdodERhdGEtPm5vZGUpCi0g
ICAgICAgIGdldE9yRHJhd05vZGVIaWdobGlnaHQoJmNvbnRleHQsIGhpZ2hsaWdodERhdGEsICZo
aWdobGlnaHQpOwotICAgIGVsc2UgaWYgKGhpZ2hsaWdodERhdGEtPnJlY3QpCi0gICAgICAgIGdl
dE9yRHJhd1JlY3RIaWdobGlnaHQoJmNvbnRleHQsIGRvY3VtZW50LCBoaWdobGlnaHREYXRhLCAm
aGlnaGxpZ2h0KTsKLX0KLQotdm9pZCBnZXRIaWdobGlnaHQoRG9jdW1lbnQqIGRvY3VtZW50LCBI
aWdobGlnaHREYXRhKiBoaWdobGlnaHREYXRhLCBIaWdobGlnaHQqIGhpZ2hsaWdodCkKLXsKLSAg
ICBpZiAoIWhpZ2hsaWdodERhdGEpCi0gICAgICAgIHJldHVybjsKLQotICAgIGhpZ2hsaWdodC0+
Y29udGVudENvbG9yID0gaGlnaGxpZ2h0RGF0YS0+Y29udGVudDsKLSAgICBoaWdobGlnaHQtPnBh
ZGRpbmdDb2xvciA9IGhpZ2hsaWdodERhdGEtPnBhZGRpbmc7Ci0gICAgaGlnaGxpZ2h0LT5ib3Jk
ZXJDb2xvciA9IGhpZ2hsaWdodERhdGEtPmJvcmRlcjsKLSAgICBoaWdobGlnaHQtPm1hcmdpbkNv
bG9yID0gaGlnaGxpZ2h0RGF0YS0+bWFyZ2luOwotICAgIGhpZ2hsaWdodC0+dHlwZSA9IEhpZ2hs
aWdodFR5cGVSZWN0czsKLQotICAgIGlmIChoaWdobGlnaHREYXRhLT5ub2RlKQotICAgICAgICBn
ZXRPckRyYXdOb2RlSGlnaGxpZ2h0KDAsIGhpZ2hsaWdodERhdGEsIGhpZ2hsaWdodCk7Ci0gICAg
ZWxzZSBpZiAoaGlnaGxpZ2h0RGF0YS0+cmVjdCkKLSAgICAgICAgZ2V0T3JEcmF3UmVjdEhpZ2hs
aWdodCgwLCBkb2N1bWVudCwgaGlnaGxpZ2h0RGF0YSwgaGlnaGxpZ2h0KTsKLX0KLQotdm9pZCBk
cmF3T3V0bGluZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBGbG9hdFJlY3Qgb3V0bGluZVJlY3QgPSBy
ZWN0OwotICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgb3V0bGluZVJlY3QsIENvbG9yKCks
IGNvbG9yKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgRE9NTm9kZUhpZ2hsaWdodGVyCi0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGY3YjZmMDBmNGZmZTAyNTkxMzU1MjU0ZGZlMTkzZDAzMDYyY2UzZDku
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5oCisrKyAvZGV2L251bGwKQEAgLTEs
ODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgRE9NTm9kZUhpZ2hsaWdodGVyX2gKLSNkZWZpbmUgRE9NTm9k
ZUhpZ2hsaWdodGVyX2gKLQotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFk
LmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKLQotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENvbG9yOwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBG
cmFtZVZpZXc7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBOb2RlOwotCi1zdHJ1Y3Qg
SGlnaGxpZ2h0RGF0YSB7Ci0gICAgQ29sb3IgY29udGVudDsKLSAgICBDb2xvciBjb250ZW50T3V0
bGluZTsKLSAgICBDb2xvciBwYWRkaW5nOwotICAgIENvbG9yIGJvcmRlcjsKLSAgICBDb2xvciBt
YXJnaW47Ci0gICAgYm9vbCBzaG93SW5mbzsKLQotICAgIC8vIEVpdGhlciBvZiB0aGVzZSBtdXN0
IGJlIDAuCi0gICAgUmVmUHRyPE5vZGU+IG5vZGU7Ci0gICAgT3duUHRyPEludFJlY3Q+IHJlY3Q7
Ci19OwotCi1lbnVtIEhpZ2hsaWdodFR5cGUgewotICAgIEhpZ2hsaWdodFR5cGVOb2RlLAotICAg
IEhpZ2hsaWdodFR5cGVSZWN0cywKLX07Ci0KLXN0cnVjdCBIaWdobGlnaHQgewotICAgIENvbG9y
IGNvbnRlbnRDb2xvcjsKLSAgICBDb2xvciBwYWRkaW5nQ29sb3I7Ci0gICAgQ29sb3IgYm9yZGVy
Q29sb3I7Ci0gICAgQ29sb3IgbWFyZ2luQ29sb3I7Ci0KLSAgICAvLyBXaGVuIHRoZSB0eXBlIGlz
IE5vZGUsIHRoZXJlIGFyZSA0IHF1YWRzIChtYXJnaW4sIGJvcmRlciwgcGFkZGluZywgY29udGVu
dCkuCi0gICAgLy8gV2hlbiB0aGUgdHlwZSBpcyBSZWN0cywgdGhpcyBpcyBqdXN0IGEgbGlzdCBv
ZiBxdWFkcy4KLSAgICBIaWdobGlnaHRUeXBlIHR5cGU7Ci0gICAgVmVjdG9yPEZsb2F0UXVhZD4g
cXVhZHM7Ci19OwotCi1uYW1lc3BhY2UgRE9NTm9kZUhpZ2hsaWdodGVyIHsKLQotdm9pZCBkcmF3
SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYsIERvY3VtZW50KiwgSGlnaGxpZ2h0RGF0YSopOwot
dm9pZCBnZXRIaWdobGlnaHQoRG9jdW1lbnQqLCBIaWdobGlnaHREYXRhKiwgSGlnaGxpZ2h0Kik7
Ci12b2lkIGRyYXdPdXRsaW5lKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3QmLCBj
b25zdCBDb2xvciYpOwotCi19IC8vIG5hbWVzcGFjZSBET01Ob2RlSGlnaGxpZ2h0ZXIKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0KLSNlbmRpZiAvLyBET01Ob2RlSGlnaGxpZ2h0ZXJfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmlu
ZGV4IDA5NWUxY2M1MWIzNTRhOGY4ZTA4MTQ2YTc5ZWY3MDhkYjdjZDQ5Y2UuLjUzOTczNzYyYjUx
MWRlYWM5M2U4YjBmZjkwNjE2YTY5NDEyN2IwOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTU2LDYgKzU2LDcgQEAKICNpbmNs
dWRlICJJbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkluc3BlY3Rvck1lbW9yeUFnZW50LmgiCisjaW5jbHVk
ZSAiSW5zcGVjdG9yT3ZlcmxheS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclBhZ2VBZ2VudC5oIgog
I2luY2x1ZGUgIkluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JS
ZXNvdXJjZUFnZW50LmgiCkBAIC03OCw2ICs3OSw3IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Oklu
c3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JD
CiAgICAgOiBtX2luc3RydW1lbnRpbmdBZ2VudHMoYWRvcHRQdHIobmV3IEluc3RydW1lbnRpbmdB
Z2VudHMoKSkpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlcihJbmplY3RlZFNjcmlwdE1h
bmFnZXI6OmNyZWF0ZUZvclBhZ2UoKSkKICAgICAsIG1fc3RhdGUoYWRvcHRQdHIobmV3IEluc3Bl
Y3RvclN0YXRlKGluc3BlY3RvckNsaWVudCkpKQorICAgICwgbV9vdmVybGF5KEluc3BlY3Rvck92
ZXJsYXk6OmNyZWF0ZShwYWdlLCBpbnNwZWN0b3JDbGllbnQpKQogICAgICwgbV9wYWdlKHBhZ2Up
CiAgICAgLCBtX2luc3BlY3RvckNsaWVudChpbnNwZWN0b3JDbGllbnQpCiB7CkBAIC04NSwxMiAr
ODcsMTIgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBw
YWdlLCBJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckMKICAgICBtX2luc3BlY3RvckFnZW50ID0g
aW5zcGVjdG9yQWdlbnRQdHIuZ2V0KCk7CiAgICAgbV9hZ2VudHMuYXBwZW5kKGluc3BlY3RvckFn
ZW50UHRyLnJlbGVhc2UoKSk7CiAKLSAgICBPd25QdHI8SW5zcGVjdG9yUGFnZUFnZW50PiBwYWdl
QWdlbnRQdHIoSW5zcGVjdG9yUGFnZUFnZW50OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRz
LmdldCgpLCBwYWdlLCBtX2luc3BlY3RvckFnZW50LCBtX3N0YXRlLmdldCgpLCBtX2luamVjdGVk
U2NyaXB0TWFuYWdlci5nZXQoKSwgaW5zcGVjdG9yQ2xpZW50KSk7CisgICAgT3duUHRyPEluc3Bl
Y3RvclBhZ2VBZ2VudD4gcGFnZUFnZW50UHRyKEluc3BlY3RvclBhZ2VBZ2VudDo6Y3JlYXRlKG1f
aW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgcGFnZSwgbV9pbnNwZWN0b3JBZ2VudCwgbV9zdGF0
ZS5nZXQoKSwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuZ2V0KCksIGluc3BlY3RvckNsaWVudCwg
bV9vdmVybGF5LmdldCgpKSk7CiAgICAgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQgPSBw
YWdlQWdlbnRQdHIuZ2V0KCk7CiAgICAgbV9wYWdlQWdlbnQgPSBwYWdlQWdlbnRQdHIuZ2V0KCk7
CiAgICAgbV9hZ2VudHMuYXBwZW5kKHBhZ2VBZ2VudFB0ci5yZWxlYXNlKCkpOwogCi0gICAgT3du
UHRyPEluc3BlY3RvckRPTUFnZW50PiBkb21BZ2VudFB0cihJbnNwZWN0b3JET01BZ2VudDo6Y3Jl
YXRlKG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgcGFnZUFnZW50LCBpbnNwZWN0b3JDbGll
bnQsIG1fc3RhdGUuZ2V0KCksIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpKSk7CisgICAg
T3duUHRyPEluc3BlY3RvckRPTUFnZW50PiBkb21BZ2VudFB0cihJbnNwZWN0b3JET01BZ2VudDo6
Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgcGFnZUFnZW50LCBtX3N0YXRlLmdl
dCgpLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5nZXQoKSwgbV9vdmVybGF5LmdldCgpKSk7CiAg
ICAgbV9kb21BZ2VudCA9IGRvbUFnZW50UHRyLmdldCgpOwogICAgIG1fYWdlbnRzLmFwcGVuZChk
b21BZ2VudFB0ci5yZWxlYXNlKCkpOwogCkBAIC0xMzAsNyArMTMyLDcgQEAgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQq
IGluc3BlY3RvckMKICAgICBtX2FnZW50cy5hcHBlbmQoY29uc29sZUFnZW50UHRyLnJlbGVhc2Uo
KSk7CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICBPd25QdHI8SW5zcGVj
dG9yRGVidWdnZXJBZ2VudD4gZGVidWdnZXJBZ2VudFB0cihQYWdlRGVidWdnZXJBZ2VudDo6Y3Jl
YXRlKG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgbV9zdGF0ZS5nZXQoKSwgcGFnZSwgbV9p
bmplY3RlZFNjcmlwdE1hbmFnZXIuZ2V0KCkpKTsKKyAgICBPd25QdHI8SW5zcGVjdG9yRGVidWdn
ZXJBZ2VudD4gZGVidWdnZXJBZ2VudFB0cihQYWdlRGVidWdnZXJBZ2VudDo6Y3JlYXRlKG1faW5z
dHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgbV9zdGF0ZS5nZXQoKSwgcGFnZSwgbV9pbmplY3RlZFNj
cmlwdE1hbmFnZXIuZ2V0KCksIG1fb3ZlcmxheS5nZXQoKSkpOwogICAgIG1fZGVidWdnZXJBZ2Vu
dCA9IGRlYnVnZ2VyQWdlbnRQdHIuZ2V0KCk7CiAgICAgbV9hZ2VudHMuYXBwZW5kKGRlYnVnZ2Vy
QWdlbnRQdHIucmVsZWFzZSgpKTsKIApAQCAtMjk0LDcgKzI5Niw3IEBAIHZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChsb25nIGNhbGxJZCwgY29uc3Qg
U3RyaW5nJiBzCiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZHJhd0hpZ2hsaWdodChHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7Ci0gICAgbV9kb21BZ2VudC0+ZHJhd0hpZ2hs
aWdodChjb250ZXh0KTsKKyAgICBtX3BhZ2VBZ2VudC0+ZHJhd0luc3BlY3Rvck92ZXJsYXkoY29u
dGV4dCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0SGlnaGxpZ2h0KEhpZ2hs
aWdodCogaGlnaGxpZ2h0KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmgKaW5kZXggNDczYmI4ZGUyNmZlYTBhYzcwNDZmNjY0OTc5YWRmY2Q0
ZWNhNWJlZC4uMGI1NTgyY2Q5M2ZkOTliZGU4YTExMTAzMTJlYjM5MTljMjNmZjUxMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC01MSw2
ICs1MSw3IEBAIGNsYXNzIEluc3BlY3RvckRPTUFnZW50OwogY2xhc3MgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kOwogY2xhc3MgSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ7CitjbGFzcyBJbnNwZWN0b3JPdmVybGF5OwogY2xhc3MgSW5zcGVjdG9yUGFnZUFn
ZW50OwogY2xhc3MgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDsKIGNsYXNzIEluc3BlY3RvclJlc291
cmNlQWdlbnQ7CkBAIC0xMTksNiArMTIwLDcgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8SW5zdHJ1
bWVudGluZ0FnZW50cz4gbV9pbnN0cnVtZW50aW5nQWdlbnRzOwogICAgIE93blB0cjxJbmplY3Rl
ZFNjcmlwdE1hbmFnZXI+IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogICAgIE93blB0cjxJbnNw
ZWN0b3JTdGF0ZT4gbV9zdGF0ZTsKKyAgICBPd25QdHI8SW5zcGVjdG9yT3ZlcmxheT4gbV9vdmVy
bGF5OwogCiAgICAgSW5zcGVjdG9yQWdlbnQqIG1faW5zcGVjdG9yQWdlbnQ7CiAgICAgSW5zcGVj
dG9yRE9NQWdlbnQqIG1fZG9tQWdlbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTUFnZW50LmNwcAppbmRleCA5MDc5NTg5ZTUxY2U4ZjA4ZTUwZTIwNmU0OWExMzI2
YmU5NWMzMDEyLi4xYmY3ZTI1YmEyMjI4OTc1OTdhMjM2Mzk4NzhlYmEwOWM1ODFiMWMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTQ3
LDcgKzQ3LDYgQEAKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIK
ICNpbmNsdWRlICJET01FZGl0b3IuaCIKLSNpbmNsdWRlICJET01Ob2RlSGlnaGxpZ2h0ZXIuaCIK
ICNpbmNsdWRlICJET01QYXRjaFN1cHBvcnQuaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgpAQCAtNjYsOSArNjUsOSBAQAogI2luY2x1ZGUgIkhpdFRlc3RS
ZXN1bHQuaCIKICNpbmNsdWRlICJJZGVudGlmaWVyc0ZhY3RvcnkuaCIKICNpbmNsdWRlICJJbmpl
Y3RlZFNjcmlwdE1hbmFnZXIuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckhpc3RvcnkuaCIK
KyNpbmNsdWRlICJJbnNwZWN0b3JPdmVybGF5LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUGFnZUFn
ZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yU3RhdGUuaCIKICNpbmNsdWRlICJJbnN0cnVtZW50
aW5nQWdlbnRzLmgiCkBAIC0xOTQsMTEgKzE5MywxMSBAQCBTdHJpbmcgSW5zcGVjdG9yRE9NQWdl
bnQ6OnRvRXJyb3JTdHJpbmcoY29uc3QgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgcmV0dXJuICIi
OwogfQogCi1JbnNwZWN0b3JET01BZ2VudDo6SW5zcGVjdG9yRE9NQWdlbnQoSW5zdHJ1bWVudGlu
Z0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdl
bnQsIEluc3BlY3RvckNsaWVudCogY2xpZW50LCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3Rh
dGUsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQorSW5zcGVj
dG9yRE9NQWdlbnQ6Okluc3BlY3RvckRPTUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3Ry
dW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBJbnNwZWN0b3JT
dGF0ZSogaW5zcGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyLCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQogICAgIDogSW5zcGVjdG9yQmFz
ZUFnZW50PEluc3BlY3RvckRPTUFnZW50PigiRE9NIiwgaW5zdHJ1bWVudGluZ0FnZW50cywgaW5z
cGVjdG9yU3RhdGUpCiAgICAgLCBtX3BhZ2VBZ2VudChwYWdlQWdlbnQpCi0gICAgLCBtX2NsaWVu
dChjbGllbnQpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlcihpbmplY3RlZFNjcmlwdE1h
bmFnZXIpCisgICAgLCBtX292ZXJsYXkob3ZlcmxheSkKICAgICAsIG1fZnJvbnRlbmQoMCkKICAg
ICAsIG1fZG9tTGlzdGVuZXIoMCkKICAgICAsIG1fbGFzdE5vZGVJZCgxKQpAQCAtMTAzNiw3ICsx
MDM1LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0KCkKIHsKICAgICAvLyBU
aGlzIG1ldGhvZCByZXF1aXJlcyBtX2hpZ2hsaWdodERhdGEgdG8gaGF2ZSBiZWVuIGZpbGxlZCBp
biBieSBpdHMgY2xpZW50LgogICAgIEFTU0VSVChtX2hpZ2hsaWdodERhdGEpOwotICAgIG1fY2xp
ZW50LT5oaWdobGlnaHQoKTsKKyAgICBtX292ZXJsYXktPnNldEhpZ2hsaWdodChtX2RvY3VtZW50
LmdldCgpLCBtX2hpZ2hsaWdodERhdGEuZ2V0KCkpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpoaWdobGlnaHRSZWN0KEVycm9yU3RyaW5nKiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgs
IGludCBoZWlnaHQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBjb2xvciwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIG91dGxpbmVDb2xvcikKQEAgLTEwNDUsNyArMTA0NCw3
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFJlY3QoRXJyb3JTdHJpbmcqLCBp
bnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50CiAgICAgbV9oaWdobGlnaHREYXRhLT5yZWN0ID0g
YWRvcHRQdHIobmV3IEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwogICAgIG1faGlnaGxp
Z2h0RGF0YS0+Y29udGVudCA9IHBhcnNlQ29sb3IoY29sb3IpOwogICAgIG1faGlnaGxpZ2h0RGF0
YS0+Y29udGVudE91dGxpbmUgPSBwYXJzZUNvbG9yKG91dGxpbmVDb2xvcik7Ci0gICAgbV9jbGll
bnQtPmhpZ2hsaWdodCgpOworICAgIGhpZ2hsaWdodCgpOwogfQogCiB2b2lkIEluc3BlY3RvckRP
TUFnZW50OjpoaWdobGlnaHROb2RlKApAQCAtMTA4NCw3ICsxMDgzLDcgQEAgdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6aGlkZUhpZ2hsaWdodChFcnJvclN0cmluZyopCiAgICAgICAgIG1faGlnaGxp
Z2h0RGF0YS0+bm9kZS5jbGVhcigpOwogICAgICAgICBtX2hpZ2hsaWdodERhdGEtPnJlY3QuY2xl
YXIoKTsKICAgICB9Ci0gICAgbV9jbGllbnQtPmhpZGVIaWdobGlnaHQoKTsKKyAgICBoaWdobGln
aHQoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6bW92ZVRvKEVycm9yU3RyaW5nKiBl
cnJvclN0cmluZywgaW50IG5vZGVJZCwgaW50IHRhcmdldEVsZW1lbnRJZCwgY29uc3QgaW50KiBj
b25zdCBhbmNob3JOb2RlSWQsIGludCogbmV3Tm9kZUlkKQpAQCAtMTU5OSwyMCArMTU5OCwxMiBA
QCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IEluc3BlY3Rv
ckRPTUFnZW50OjpyZXNvbHZlTm9kZShObwogICAgIHJldHVybiBpbmplY3RlZFNjcmlwdC53cmFw
Tm9kZShub2RlLCBvYmplY3RHcm91cCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRy
YXdIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGlmICgh
bV9oaWdobGlnaHREYXRhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBET01Ob2RlSGlnaGxpZ2h0
ZXI6OmRyYXdIaWdobGlnaHQoY29udGV4dCwgbV9oaWdobGlnaHREYXRhLT5ub2RlID8gbV9oaWdo
bGlnaHREYXRhLT5ub2RlLT5kb2N1bWVudCgpIDogbV9kb2N1bWVudC5nZXQoKSwgbV9oaWdobGln
aHREYXRhLmdldCgpKTsKLX0KLQogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0SGlnaGxpZ2h0
KEhpZ2hsaWdodCogaGlnaGxpZ2h0KSBjb25zdAogewogICAgIGlmICghbV9oaWdobGlnaHREYXRh
KQogICAgICAgICByZXR1cm47CiAKLSAgICBET01Ob2RlSGlnaGxpZ2h0ZXI6OmdldEhpZ2hsaWdo
dChtX2hpZ2hsaWdodERhdGEtPm5vZGUgPyBtX2hpZ2hsaWdodERhdGEtPm5vZGUtPmRvY3VtZW50
KCkgOiBtX2RvY3VtZW50LmdldCgpLCBtX2hpZ2hsaWdodERhdGEuZ2V0KCksIGhpZ2hsaWdodCk7
CisgICAgbV9vdmVybGF5LT5nZXRIaWdobGlnaHQobV9oaWdobGlnaHREYXRhLT5ub2RlID8gbV9o
aWdobGlnaHREYXRhLT5ub2RlLT5kb2N1bWVudCgpIDogbV9kb2N1bWVudC5nZXQoKSwgbV9oaWdo
bGlnaHREYXRhLmdldCgpLCBoaWdobGlnaHQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCmluZGV4IGIw
NWFiNTcwZDlmZDFiMDQ4NzA2YTM5M2EyNDY2NTk3YjQ5NjM5YmYuLjNiM2Y1OWJlNzY4ODY5YjNh
ODBjMTY3YmU5YmQyNjEyMDUxYTcyN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5oCkBAIC01Niw5ICs1Niw5IEBAIGNsYXNzIERvY3VtZW50OwogY2xh
c3MgRWxlbWVudDsKIGNsYXNzIEV2ZW50OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3Mg
SW5zcGVjdG9yQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CiBjbGFzcyBJbnNwZWN0
b3JIaXN0b3J5OworY2xhc3MgSW5zcGVjdG9yT3ZlcmxheTsKIGNsYXNzIEluc3BlY3RvclBhZ2VB
Z2VudDsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBIaXRUZXN0UmVzdWx0OwpAQCAtMTAzLDkgKzEw
Myw5IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZE1vZGlmeURPTUF0dHIoRWxl
bWVudCopID0gMDsKICAgICB9OwogCi0gICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yRE9N
QWdlbnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJ
bnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQsIElu
c3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmpl
Y3RlZFNjcmlwdE1hbmFnZXIpCisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yRE9NQWdl
bnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNw
ZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRl
LCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgSW5zcGVjdG9y
T3ZlcmxheSogb3ZlcmxheSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5z
cGVjdG9yRE9NQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgcGFnZUFnZW50LCBjbGllbnQsIGlu
c3BlY3RvclN0YXRlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIpKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBJbnNwZWN0b3JET01BZ2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBwYWdlQWdl
bnQsIGluc3BlY3RvclN0YXRlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIG92ZXJsYXkpKTsKICAg
ICB9CiAKICAgICBzdGF0aWMgU3RyaW5nIHRvRXJyb3JTdHJpbmcoY29uc3QgRXhjZXB0aW9uQ29k
ZSYpOwpAQCAtMTg1LDcgKzE4NSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGluc3BlY3QoTm9kZSop
OwogICAgIHZvaWQgZm9jdXNOb2RlKCk7CiAKLSAgICB2b2lkIGRyYXdIaWdobGlnaHQoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7CiAgICAgdm9pZCBnZXRIaWdobGlnaHQoSGlnaGxpZ2h0KikgY29u
c3Q7CiAKICAgICBJbnNwZWN0b3JIaXN0b3J5KiBoaXN0b3J5KCkgeyByZXR1cm4gbV9oaXN0b3J5
LmdldCgpOyB9CkBAIC0yMDUsNyArMjA0LDcgQEAgcHVibGljOgogICAgIEluc3BlY3RvclBhZ2VB
Z2VudCogcGFnZUFnZW50KCkgeyByZXR1cm4gbV9wYWdlQWdlbnQ7IH0KIAogcHJpdmF0ZToKLSAg
ICBJbnNwZWN0b3JET01BZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yUGFnZUFn
ZW50KiwgSW5zcGVjdG9yQ2xpZW50KiwgSW5zcGVjdG9yU3RhdGUqLCBJbmplY3RlZFNjcmlwdE1h
bmFnZXIqKTsKKyAgICBJbnNwZWN0b3JET01BZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5z
cGVjdG9yUGFnZUFnZW50KiwgSW5zcGVjdG9yU3RhdGUqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIq
LCBJbnNwZWN0b3JPdmVybGF5Kik7CiAKICAgICB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUoYm9v
bCBlbmFibGVkLCBJbnNwZWN0b3JPYmplY3QqIGhpZ2hsaWdodENvbmZpZyk7CiAgICAgYm9vbCBz
ZXRIaWdobGlnaHREYXRhRnJvbUNvbmZpZyhJbnNwZWN0b3JPYmplY3QqIGhpZ2hsaWdodENvbmZp
Zyk7CkBAIC0yNDEsOCArMjQwLDggQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgSW5zcGVjdG9y
UGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKLSAgICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50Owog
ICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciogbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CisgICAg
SW5zcGVjdG9yT3ZlcmxheSogbV9vdmVybGF5OwogICAgIEluc3BlY3RvckZyb250ZW5kOjpET00q
IG1fZnJvbnRlbmQ7CiAgICAgRE9NTGlzdGVuZXIqIG1fZG9tTGlzdGVuZXI7CiAgICAgTm9kZVRv
SWRNYXAgbV9kb2N1bWVudE5vZGVUb0lkTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDExODA3YTNmOWU4Nzk4NDBk
ZWE2MDNiMzY2M2UyMDlhZmNlZDcyYzguLjg1ODkxM2YxNTk1ZmM2ODE3ZWE0ZjEwZDI4OGNiZjJh
ZWM0MjZkYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RGVidWdnZXJBZ2VudC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50LmgiCiAKICNpbmNsdWRlICJDb250ZW50U2VhcmNoVXRpbHMuaCIKKyNpbmNs
dWRlICJET01Ob2RlSGlnaGxpZ2h0ZXIuaCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdC5oIgog
I2luY2x1ZGUgIkluamVjdGVkU2NyaXB0TWFuYWdlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZy
b250ZW5kLmgiCkBAIC02MCwxMCArNjEsMTEgQEAgc3RhdGljIGNvbnN0IGNoYXIgcGF1c2VPbkV4
Y2VwdGlvbnNTdGF0ZVtdID0gInBhdXNlT25FeGNlcHRpb25zU3RhdGUiOwogCiBjb25zdCBjaGFy
KiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpiYWNrdHJhY2VPYmplY3RHcm91cCA9ICJiYWNrdHJh
Y2Utb2JqZWN0LWdyb3VwIjsKIAotSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yRGVi
dWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNw
ZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKQorSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yRGVidWdn
ZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0
b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQogICAgIDogSW5zcGVjdG9y
QmFzZUFnZW50PEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+KCJEZWJ1Z2dlciIsIGluc3RydW1lbnRp
bmdBZ2VudHMsIGluc3BlY3RvclN0YXRlKQogICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIo
aW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQogICAgICwgbV9mcm9udGVuZCgwKQorICAgICwgbV9vdmVy
bGF5KG92ZXJsYXkpCiAgICAgLCBtX3BhdXNlZFNjcmlwdFN0YXRlKDApCiAgICAgLCBtX2phdmFT
Y3JpcHRQYXVzZVNjaGVkdWxlZChmYWxzZSkKICAgICAsIG1fbGlzdGVuZXIoMCkKQEAgLTEwMyw2
ICsxMDUsOCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoKQogCiAgICAg
aWYgKG1fbGlzdGVuZXIpCiAgICAgICAgIG1fbGlzdGVuZXItPmRlYnVnZ2VyV2FzRGlzYWJsZWQo
KTsKKyAgICBpZiAobV9vdmVybGF5KQorICAgICAgICBtX292ZXJsYXktPnNldFNob3VsZFNob3dQ
YXVzZVdhcm5pbmcoZmFsc2UpOwogfQogCiBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVu
YWJsZWQoKQpAQCAtNjU3LDYgKzY2MSw4IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
ZGlkUGF1c2UoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBTY3JpcHRWYWx1CiAgICAg
ICAgIH0KICAgICB9CiAKKyAgICBpZiAobV9vdmVybGF5KQorICAgICAgICBtX292ZXJsYXktPnNl
dFNob3VsZFNob3dQYXVzZVdhcm5pbmcodHJ1ZSk7CiAgICAgbV9mcm9udGVuZC0+cGF1c2VkKGN1
cnJlbnRDYWxsRnJhbWVzKCksIG1fYnJlYWtSZWFzb24sIG1fYnJlYWtBdXhEYXRhKTsKICAgICBt
X2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZCA9IGZhbHNlOwogCkBAIC02NzEsNiArNjc3LDggQEAg
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSgpCiAgICAgbV9wYXVzZWRT
Y3JpcHRTdGF0ZSA9IDA7CiAgICAgbV9jdXJyZW50Q2FsbFN0YWNrID0gU2NyaXB0VmFsdWUoKTsK
ICAgICBjbGVhckJyZWFrRGV0YWlscygpOworICAgIGlmIChtX292ZXJsYXkpCisgICAgICAgIG1f
b3ZlcmxheS0+c2V0U2hvdWxkU2hvd1BhdXNlV2FybmluZyhmYWxzZSk7CiAgICAgbV9mcm9udGVu
ZC0+cmVzdW1lZCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQuaAppbmRleCAwOWM5N2QxOTUzZTRiOWIwMDE2MWY4NzRmNDUzMWZi
ZGVjN2RiNmNkLi5lNzhlODhmOWQ2MmJhOGY0YmVmMzU4NmRlM2RmYmI0NWYwOTdkNzgxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgK
QEAgLTUwLDYgKzUwLDcgQEAgY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogY2xhc3MgSW5z
cGVjdG9yRnJvbnRlbmQ7CiBjbGFzcyBJbnNwZWN0b3JBcnJheTsKIGNsYXNzIEluc3BlY3Rvck9i
amVjdDsKK2NsYXNzIEluc3BlY3Rvck92ZXJsYXk7CiBjbGFzcyBJbnNwZWN0b3JTdGF0ZTsKIGNs
YXNzIEluc3BlY3RvclZhbHVlOwogY2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsKQEAgLTEyNCw3
ICsxMjUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTY3JpcHREZWJ1Z1NlcnZlciYgc2NyaXB0
RGVidWdTZXJ2ZXIoKSA9IDA7CiAKIHByb3RlY3RlZDoKLSAgICBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0
TWFuYWdlciopOworICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50
cyosIEluc3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9yT3Zl
cmxheSopOwogCiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0TGlzdGVuaW5nU2NyaXB0RGVidWdTZXJ2
ZXIoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN0b3BMaXN0ZW5pbmdTY3JpcHREZWJ1Z1NlcnZl
cigpID0gMDsKQEAgLTE1OSw2ICsxNjAsNyBAQCBwcml2YXRlOgogCiAgICAgSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKICAgICBJbnNwZWN0b3JGcm9udGVu
ZDo6RGVidWdnZXIqIG1fZnJvbnRlbmQ7CisgICAgSW5zcGVjdG9yT3ZlcmxheSogbV9vdmVybGF5
OwogICAgIFNjcmlwdFN0YXRlKiBtX3BhdXNlZFNjcmlwdFN0YXRlOwogICAgIFNjcmlwdFZhbHVl
IG1fY3VycmVudENhbGxTdGFjazsKICAgICBTY3JpcHRzTWFwIG1fc2NyaXB0czsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZWZi
YzFmZmRhZDUyYTBkOTE5NzY1NWQ2OGRlN2NkNjExMTA1OGE2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCkBAIC0wLDAgKzEs
NjA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKwor
I2luY2x1ZGUgIkluc3BlY3Rvck92ZXJsYXkuaCIKKworI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNp
bmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250RmFtaWx5LmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ2xp
ZW50LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJS
YW5nZS5oIgorI2luY2x1ZGUgIlJlbmRlckJveE1vZGVsT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVu
ZGVySW5saW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKKyNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCisjaW5jbHVkZSAiVGV4dFJ1bi5oIgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgeworCisjaWYgT1MoV0lORE9XUykKK3N0YXRpYyBjb25zdCB1bnNpZ25l
ZCBmb250SGVpZ2h0UHggPSAxMjsKKyNlbGlmIE9TKE1BQ19PU19YKSB8fCBPUyhVTklYKQorc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGZvbnRIZWlnaHRQeCA9IDExOworI2VuZGlmCisKK2NvbnN0IHN0
YXRpYyBpbnQgcmVjdEluZmxhdGVQeCA9IDQ7Citjb25zdCBzdGF0aWMgaW50IGJvcmRlcldpZHRo
UHggPSAxOworY29uc3Qgc3RhdGljIGludCB0b29sdGlwUGFkZGluZyA9IDQ7CisKK2NvbnN0IHN0
YXRpYyBpbnQgYXJyb3dUaXBPZmZzZXQgPSAyMDsKK2NvbnN0IHN0YXRpYyBmbG9hdCBhcnJvd0hl
aWdodCA9IDc7Citjb25zdCBzdGF0aWMgZmxvYXQgYXJyb3dIYWxmV2lkdGggPSA3OworCitQYXRo
IHF1YWRUb1BhdGgoY29uc3QgRmxvYXRRdWFkJiBxdWFkKQoreworICAgIFBhdGggcXVhZFBhdGg7
CisgICAgcXVhZFBhdGgubW92ZVRvKHF1YWQucDEoKSk7CisgICAgcXVhZFBhdGguYWRkTGluZVRv
KHF1YWQucDIoKSk7CisgICAgcXVhZFBhdGguYWRkTGluZVRvKHF1YWQucDMoKSk7CisgICAgcXVh
ZFBhdGguYWRkTGluZVRvKHF1YWQucDQoKSk7CisgICAgcXVhZFBhdGguY2xvc2VTdWJwYXRoKCk7
CisgICAgcmV0dXJuIHF1YWRQYXRoOworfQorCit2b2lkIGRyYXdPdXRsaW5lZFF1YWQoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsIGNvbnN0IENvbG9yJiBm
aWxsQ29sb3IsIGNvbnN0IENvbG9yJiBvdXRsaW5lQ29sb3IpCit7CisgICAgc3RhdGljIGNvbnN0
IGludCBvdXRsaW5lVGhpY2tuZXNzID0gMjsKKworICAgIFBhdGggcXVhZFBhdGggPSBxdWFkVG9Q
YXRoKHF1YWQpOworCisgICAgLy8gQ2xpcCBvdXQgdGhlIHF1YWQsIHRoZW4gZHJhdyB3aXRoIGEg
MnB4IHN0cm9rZSB0byBnZXQgYSBwaXhlbAorICAgIC8vIG9mIG91dGxpbmUgKGJlY2F1c2UgaW5m
bGF0aW5nIGEgcXVhZCBpcyBoYXJkKQorICAgIHsKKyAgICAgICAgY29udGV4dC5zYXZlKCk7Cisg
ICAgICAgIGNvbnRleHQuY2xpcE91dChxdWFkUGF0aCk7CisKKyAgICAgICAgY29udGV4dC5zZXRT
dHJva2VUaGlja25lc3Mob3V0bGluZVRoaWNrbmVzcyk7CisgICAgICAgIGNvbnRleHQuc2V0U3Ry
b2tlQ29sb3Iob3V0bGluZUNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAgY29u
dGV4dC5zdHJva2VQYXRoKHF1YWRQYXRoKTsKKworICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsK
KyAgICB9CisKKyAgICAvLyBOb3cgZG8gdGhlIGZpbGwKKyAgICBjb250ZXh0LnNldEZpbGxDb2xv
cihmaWxsQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZmlsbFBhdGgo
cXVhZFBhdGgpOworfQorCit2b2lkIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgY29uc3QgRmxvYXRRdWFkJiBj
bGlwUXVhZCwgY29uc3QgQ29sb3ImIGZpbGxDb2xvcikKK3sKKyAgICBjb250ZXh0LnNhdmUoKTsK
KyAgICBQYXRoIGNsaXBRdWFkUGF0aCA9IHF1YWRUb1BhdGgoY2xpcFF1YWQpOworICAgIGNvbnRl
eHQuY2xpcE91dChjbGlwUXVhZFBhdGgpOworICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwg
cXVhZCwgZmlsbENvbG9yLCBDb2xvcjo6dHJhbnNwYXJlbnQpOworICAgIGNvbnRleHQucmVzdG9y
ZSgpOworfQorCit2b2lkIGRyYXdIaWdobGlnaHRGb3JCb3goR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBGbG9hdFF1YWQmIGNvbnRlbnRRdWFkLCBjb25zdCBGbG9hdFF1YWQmIHBhZGRp
bmdRdWFkLCBjb25zdCBGbG9hdFF1YWQmIGJvcmRlclF1YWQsIGNvbnN0IEZsb2F0UXVhZCYgbWFy
Z2luUXVhZCwgSGlnaGxpZ2h0RGF0YSogaGlnaGxpZ2h0RGF0YSkKK3sKKyAgICBib29sIGhhc01h
cmdpbiA9IGhpZ2hsaWdodERhdGEtPm1hcmdpbiAhPSBDb2xvcjo6dHJhbnNwYXJlbnQ7CisgICAg
Ym9vbCBoYXNCb3JkZXIgPSBoaWdobGlnaHREYXRhLT5ib3JkZXIgIT0gQ29sb3I6OnRyYW5zcGFy
ZW50OworICAgIGJvb2wgaGFzUGFkZGluZyA9IGhpZ2hsaWdodERhdGEtPnBhZGRpbmcgIT0gQ29s
b3I6OnRyYW5zcGFyZW50OworICAgIGJvb2wgaGFzQ29udGVudCA9IGhpZ2hsaWdodERhdGEtPmNv
bnRlbnQgIT0gQ29sb3I6OnRyYW5zcGFyZW50IHx8IGhpZ2hsaWdodERhdGEtPmNvbnRlbnRPdXRs
aW5lICE9IENvbG9yOjp0cmFuc3BhcmVudDsKKworICAgIEZsb2F0UXVhZCBjbGlwUXVhZDsKKyAg
ICBDb2xvciBjbGlwQ29sb3I7CisgICAgaWYgKGhhc01hcmdpbiAmJiAoIWhhc0JvcmRlciB8fCBt
YXJnaW5RdWFkICE9IGJvcmRlclF1YWQpKSB7CisgICAgICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRo
Q2xpcChjb250ZXh0LCBtYXJnaW5RdWFkLCBib3JkZXJRdWFkLCBoaWdobGlnaHREYXRhLT5tYXJn
aW4pOworICAgICAgICBjbGlwUXVhZCA9IGJvcmRlclF1YWQ7CisgICAgfQorICAgIGlmIChoYXNC
b3JkZXIgJiYgKCFoYXNQYWRkaW5nIHx8IGJvcmRlclF1YWQgIT0gcGFkZGluZ1F1YWQpKSB7Cisg
ICAgICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChjb250ZXh0LCBib3JkZXJRdWFkLCBwYWRk
aW5nUXVhZCwgaGlnaGxpZ2h0RGF0YS0+Ym9yZGVyKTsKKyAgICAgICAgY2xpcFF1YWQgPSBwYWRk
aW5nUXVhZDsKKyAgICB9CisgICAgaWYgKGhhc1BhZGRpbmcgJiYgKCFoYXNDb250ZW50IHx8IHBh
ZGRpbmdRdWFkICE9IGNvbnRlbnRRdWFkKSkgeworICAgICAgICBkcmF3T3V0bGluZWRRdWFkV2l0
aENsaXAoY29udGV4dCwgcGFkZGluZ1F1YWQsIGNvbnRlbnRRdWFkLCBoaWdobGlnaHREYXRhLT5w
YWRkaW5nKTsKKyAgICAgICAgY2xpcFF1YWQgPSBjb250ZW50UXVhZDsKKyAgICB9CisgICAgaWYg
KGhhc0NvbnRlbnQpCisgICAgICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgY29udGVudFF1
YWQsIGhpZ2hsaWdodERhdGEtPmNvbnRlbnQsIGhpZ2hsaWdodERhdGEtPmNvbnRlbnRPdXRsaW5l
KTsKK30KKwordm9pZCBkcmF3SGlnaGxpZ2h0Rm9yU1ZHUmVuZGVyZXIoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBWZWN0b3I8RmxvYXRRdWFkPiYgYWJzb2x1dGVRdWFkcywgSGlnaGxp
Z2h0RGF0YSogaGlnaGxpZ2h0RGF0YSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFi
c29sdXRlUXVhZHMuc2l6ZSgpOyArK2kpCisgICAgICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4
dCwgYWJzb2x1dGVRdWFkc1tpXSwgaGlnaGxpZ2h0RGF0YS0+Y29udGVudCwgQ29sb3I6OnRyYW5z
cGFyZW50KTsKK30KKworaW50IGRyYXdTdWJzdHJpbmcoY29uc3QgVGV4dFJ1biYgZ2xvYmFsVGV4
dFJ1biwgaW50IG9mZnNldCwgaW50IGxlbmd0aCwgY29uc3QgQ29sb3ImIHRleHRDb2xvciwgY29u
c3QgRm9udCYgZm9udCwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0
JiB0aXRsZVJlY3QpCit7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodGV4dENvbG9yLCBDb2xv
clNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdUZXh0KGZvbnQsIGdsb2JhbFRleHRS
dW4sIEludFBvaW50KHRpdGxlUmVjdC5waXhlbFNuYXBwZWRYKCkgKyByZWN0SW5mbGF0ZVB4LCB0
aXRsZVJlY3QucGl4ZWxTbmFwcGVkWSgpICsgZm9udC5mb250TWV0cmljcygpLmhlaWdodCgpKSwg
b2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgpOworICAgIHJldHVybiBvZmZzZXQgKyBsZW5ndGg7Cit9
CisKK2Zsb2F0IGNhbGN1bGF0ZUFycm93VGlwWChjb25zdCBMYXlvdXRSZWN0JiBhbmNob3JCb3gs
IGNvbnN0IExheW91dFJlY3QmIHRpdGxlUmVjdCkKK3sKKyAgICBjb25zdCBzdGF0aWMgaW50IGFu
Y2hvclRpcE9mZnNldFB4ID0gMjsKKworICAgIGludCBtaW5YID0gdGl0bGVSZWN0LngoKSArIGFy
cm93SGFsZldpZHRoOworICAgIGludCBtYXhYID0gdGl0bGVSZWN0Lm1heFgoKSAtIGFycm93SGFs
ZldpZHRoOworICAgIGludCBhbmNob3JYID0gYW5jaG9yQm94LngoKTsKKyAgICBpbnQgYW5jaG9y
TWF4WCA9IGFuY2hvckJveC5tYXhYKCk7CisKKyAgICBpbnQgeCA9IHRpdGxlUmVjdC54KCkgKyBh
cnJvd1RpcE9mZnNldDsgLy8gRGVmYXVsdCB0b29sdGlwIHBvc2l0aW9uLgorICAgIGlmICh4IDwg
YW5jaG9yWCkKKyAgICAgICAgeCA9IGFuY2hvclggKyBhbmNob3JUaXBPZmZzZXRQeDsKKyAgICBl
bHNlIGlmICh4ID4gYW5jaG9yTWF4WCkKKyAgICAgICAgeCA9IGFuY2hvck1heFggLSBhbmNob3JU
aXBPZmZzZXRQeDsKKworICAgIGlmICh4IDwgbWluWCkKKyAgICAgICAgeCA9IG1pblg7CisgICAg
ZWxzZSBpZiAoeCA+IG1heFgpCisgICAgICAgIHggPSBtYXhYOworCisgICAgcmV0dXJuIHg7Cit9
CisKK3ZvaWQgc2V0VXBGb250RGVzY3JpcHRpb24oRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24sIFdlYkNvcmU6OlNldHRpbmdzKiBzZXR0aW5ncykKK3sKKyNkZWZpbmUgVE9PTFRJUF9G
T05UX0ZBTUlMSUVTKHNpemUsIC4uLikgXAorc3RhdGljIGNvbnN0IHVuc2lnbmVkIHRvb2x0aXBG
b250RmFjZVNpemUgPSBzaXplO1wKK3N0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcqIHRvb2x0aXBG
b250RmFjZVtzaXplXSA9IHsgX19WQV9BUkdTX18gfTsKKworI2lmIE9TKFdJTkRPV1MpCitUT09M
VElQX0ZPTlRfRkFNSUxJRVMoMiwgbmV3IEF0b21pY1N0cmluZygiQ29uc29sYXMiKSwgbmV3IEF0
b21pY1N0cmluZygiTHVjaWRhIENvbnNvbGUiKSkKKyNlbGlmIE9TKE1BQ19PU19YKQorVE9PTFRJ
UF9GT05UX0ZBTUlMSUVTKDIsIG5ldyBBdG9taWNTdHJpbmcoIk1lbmxvIiksIG5ldyBBdG9taWNT
dHJpbmcoIk1vbmFjbyIpKQorI2VsaWYgT1MoVU5JWCkKK1RPT0xUSVBfRk9OVF9GQU1JTElFUygx
LCBuZXcgQXRvbWljU3RyaW5nKCJkZWphdnUgc2FucyBtb25vIikpCisjZW5kaWYKKy8vIEluIHRo
ZSBkZWZhdWx0IGNhc2UsIHdlIGdldCB0aGUgc2V0dGluZ3MtcHJvdmlkZWQgbW9ub3NwYWNlIGZv
bnQuCisKKyN1bmRlZiBUT09MVElQX0ZPTlRfRkFNSUxJRVMKKworICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdzLT5mb250UmVuZGVyaW5nTW9kZSgpKTsKKyAgICBm
b250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGZvbnRIZWlnaHRQeCk7CisKKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGZpeGVkRm9udEZhbWlseSA9IHNldHRpbmdzLT5maXhlZEZvbnRGYW1p
bHkoKTsKKyAgICBpZiAoIWZpeGVkRm9udEZhbWlseS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpNb25vc3BhY2VG
YW1pbHkpOworICAgICAgICBGb250RmFtaWx5KiBjdXJyZW50RmFtaWx5ID0gMDsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvb2x0aXBGb250RmFjZVNpemU7ICsraSkgeworICAg
ICAgICAgICAgaWYgKCFjdXJyZW50RmFtaWx5KSB7CisgICAgICAgICAgICAgICAgZm9udERlc2Ny
aXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KCp0b29sdGlwRm9udEZhY2VbaV0pOworICAg
ICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLmFwcGVuZEZhbWlseSgw
KTsKKyAgICAgICAgICAgICAgICBjdXJyZW50RmFtaWx5ID0gJmZvbnREZXNjcmlwdGlvbi5maXJz
dEZhbWlseSgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8
U2hhcmVkRm9udEZhbWlseT4gbmV3RmFtaWx5ID0gU2hhcmVkRm9udEZhbWlseTo6Y3JlYXRlKCk7
CisgICAgICAgICAgICAgICAgbmV3RmFtaWx5LT5zZXRGYW1pbHkoKnRvb2x0aXBGb250RmFjZVtp
XSk7CisgICAgICAgICAgICAgICAgY3VycmVudEZhbWlseS0+YXBwZW5kRmFtaWx5KG5ld0ZhbWls
eSk7CisgICAgICAgICAgICAgICAgY3VycmVudEZhbWlseSA9IG5ld0ZhbWlseS5nZXQoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBSZWZQdHI8U2hhcmVkRm9udEZhbWlseT4g
bmV3RmFtaWx5ID0gU2hhcmVkRm9udEZhbWlseTo6Y3JlYXRlKCk7CisgICAgICAgIG5ld0ZhbWls
eS0+c2V0RmFtaWx5KGZpeGVkRm9udEZhbWlseSk7CisgICAgICAgIGN1cnJlbnRGYW1pbHktPmFw
cGVuZEZhbWlseShuZXdGYW1pbHkpOworICAgICAgICBjdXJyZW50RmFtaWx5ID0gbmV3RmFtaWx5
LmdldCgpOworICAgIH0KK30KKwordm9pZCBkcmF3RWxlbWVudFRpdGxlKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgTm9kZSogbm9kZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50
UmVjdCYgYm91bmRpbmdCb3gsIGNvbnN0IEludFJlY3QmIGFuY2hvckJveCwgY29uc3QgRmxvYXRS
ZWN0JiB2aXNpYmxlUmVjdCwgV2ViQ29yZTo6U2V0dGluZ3MqIHNldHRpbmdzKQoreworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIGJhY2tncm91bmRDb2xvciwgKDI1NSwgMjU1LCAxOTQp
KTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCB0YWdDb2xvciwgKDEzNiwgMTgsIDEy
OCkpOyAvLyBTYW1lIGFzIC53ZWJraXQtaHRtbC10YWcuCisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChDb2xvciwgYXR0ckNvbG9yLCAoMjYsIDI2LCAxNjYpKTsgLy8gU2FtZSBhcyAud2Via2l0LWh0
bWwtYXR0cmlidXRlLXZhbHVlLgorICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIG5vcm1h
bENvbG9yLCAoQ29sb3I6OmJsYWNrKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwg
cHhBbmRCb3JkZXJDb2xvciwgKDEyOCwgMTI4LCAxMjgpKTsKKworICAgIERFRklORV9TVEFUSUNf
TE9DQUwoU3RyaW5nLCBweFN0cmluZywgKCJweCIpKTsKKyAgICBjb25zdCBzdGF0aWMgVUNoYXIg
dGltZXNVQ2hhcltdID0geyAweDAwMjAsIDB4MDBENywgMHgwMDIwLCAwIH07CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChTdHJpbmcsIHRpbWVzU3RyaW5nLCAodGltZXNVQ2hhcikpOyAvLyAmdGlt
ZXM7IHN0cmluZworCisgICAgRm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9udENhY2hlUHVyZ2VQ
cmV2ZW50ZXI7CisKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG5vZGUpOworICAgIGJvb2wgaXNYSFRNTCA9IGVsZW1lbnQtPmRvY3VtZW50KCktPmlzWEhUTUxE
b2N1bWVudCgpOworICAgIFN0cmluZ0J1aWxkZXIgbm9kZVRpdGxlOworICAgIG5vZGVUaXRsZS5h
cHBlbmQoaXNYSFRNTCA/IGVsZW1lbnQtPm5vZGVOYW1lKCkgOiBlbGVtZW50LT5ub2RlTmFtZSgp
Lmxvd2VyKCkpOworICAgIHVuc2lnbmVkIHRhZ05hbWVMZW5ndGggPSBub2RlVGl0bGUubGVuZ3Ro
KCk7CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkVmFsdWUgPSBlbGVtZW50LT5nZXRJZEF0
dHJpYnV0ZSgpOworICAgIHVuc2lnbmVkIGlkU3RyaW5nTGVuZ3RoID0gMDsKKyAgICBTdHJpbmcg
aWRTdHJpbmc7CisgICAgaWYgKCFpZFZhbHVlLmlzTnVsbCgpICYmICFpZFZhbHVlLmlzRW1wdHko
KSkgeworICAgICAgICBub2RlVGl0bGUuYXBwZW5kKCIjIik7CisgICAgICAgIG5vZGVUaXRsZS5h
cHBlbmQoaWRWYWx1ZSk7CisgICAgICAgIGlkU3RyaW5nTGVuZ3RoID0gMSArIGlkVmFsdWUubGVu
Z3RoKCk7CisgICAgfQorCisgICAgSGFzaFNldDxBdG9taWNTdHJpbmc+IHVzZWRDbGFzc05hbWVz
OworICAgIHVuc2lnbmVkIGNsYXNzZXNTdHJpbmdMZW5ndGggPSAwOworICAgIGlmIChlbGVtZW50
LT5oYXNDbGFzcygpICYmIGVsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpKSB7CisgICAgICAgIGNv
bnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFtZXNTdHJpbmcgPSBzdGF0aWNfY2FzdDxTdHls
ZWRFbGVtZW50Kj4oZWxlbWVudCktPmNsYXNzTmFtZXMoKTsKKyAgICAgICAgc2l6ZV90IGNsYXNz
TmFtZUNvdW50ID0gY2xhc3NOYW1lc1N0cmluZy5zaXplKCk7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY2xhc3NOYW1lQ291bnQ7ICsraSkgeworICAgICAgICAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBjbGFzc05hbWUgPSBjbGFzc05hbWVzU3RyaW5nW2ldOworICAgICAgICAgICAg
aWYgKHVzZWRDbGFzc05hbWVzLmNvbnRhaW5zKGNsYXNzTmFtZSkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICB1c2VkQ2xhc3NOYW1lcy5hZGQoY2xhc3NOYW1lKTsKKyAg
ICAgICAgICAgIG5vZGVUaXRsZS5hcHBlbmQoIi4iKTsKKyAgICAgICAgICAgIG5vZGVUaXRsZS5h
cHBlbmQoY2xhc3NOYW1lKTsKKyAgICAgICAgICAgIGNsYXNzZXNTdHJpbmdMZW5ndGggKz0gMSAr
IGNsYXNzTmFtZS5sZW5ndGgoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJlbmRlckJveE1v
ZGVsT2JqZWN0KiBtb2RlbE9iamVjdCA9IHJlbmRlcmVyLT5pc0JveE1vZGVsT2JqZWN0KCkgPyB0
b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRlcmVyKSA6IDA7CisKKyAgICBTdHJpbmcgd2lkdGhO
dW1iZXJQYXJ0ID0gIiAiICsgU3RyaW5nOjpudW1iZXIobW9kZWxPYmplY3QgPyBhZGp1c3RGb3JB
YnNvbHV0ZVpvb20obW9kZWxPYmplY3QtPnBpeGVsU25hcHBlZE9mZnNldFdpZHRoKCksIG1vZGVs
T2JqZWN0KSA6IGJvdW5kaW5nQm94LndpZHRoKCkpOworICAgIG5vZGVUaXRsZS5hcHBlbmQod2lk
dGhOdW1iZXJQYXJ0KTsKKyAgICBub2RlVGl0bGUuYXBwZW5kKHB4U3RyaW5nKTsKKyAgICBub2Rl
VGl0bGUuYXBwZW5kKHRpbWVzU3RyaW5nKTsKKyAgICBTdHJpbmcgaGVpZ2h0TnVtYmVyUGFydCA9
IFN0cmluZzo6bnVtYmVyKG1vZGVsT2JqZWN0ID8gYWRqdXN0Rm9yQWJzb2x1dGVab29tKG1vZGVs
T2JqZWN0LT5waXhlbFNuYXBwZWRPZmZzZXRIZWlnaHQoKSwgbW9kZWxPYmplY3QpIDogYm91bmRp
bmdCb3guaGVpZ2h0KCkpOworICAgIG5vZGVUaXRsZS5hcHBlbmQoaGVpZ2h0TnVtYmVyUGFydCk7
CisgICAgbm9kZVRpdGxlLmFwcGVuZChweFN0cmluZyk7CisKKyAgICBGb250RGVzY3JpcHRpb24g
ZGVzYzsKKyAgICBzZXRVcEZvbnREZXNjcmlwdGlvbihkZXNjLCBzZXR0aW5ncyk7CisgICAgRm9u
dCBmb250ID0gRm9udChkZXNjLCAwLCAwKTsKKyAgICBmb250LnVwZGF0ZSgwKTsKKworICAgIFRl
eHRSdW4gbm9kZVRpdGxlUnVuKG5vZGVUaXRsZS50b1N0cmluZygpKTsKKyAgICBJbnRQb2ludCB0
aXRsZUJhc2VQb2ludCA9IEludFBvaW50KGFuY2hvckJveC54KCksIGFuY2hvckJveC5tYXhZKCkg
LSAxKTsKKyAgICB0aXRsZUJhc2VQb2ludC5tb3ZlKHJlY3RJbmZsYXRlUHgsIHJlY3RJbmZsYXRl
UHgpOworICAgIEludFJlY3QgdGl0bGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmb250LnNlbGVj
dGlvblJlY3RGb3JUZXh0KG5vZGVUaXRsZVJ1biwgdGl0bGVCYXNlUG9pbnQsIGZvbnRIZWlnaHRQ
eCkpOworICAgIHRpdGxlUmVjdC5pbmZsYXRlKHJlY3RJbmZsYXRlUHgpOworCisgICAgLy8gVGhl
IGluaXRpYWwgb2Zmc2V0cyBuZWVkZWQgdG8gY29tcGVuc2F0ZSBmb3IgYSAxcHgtdGhpY2sgYm9y
ZGVyIHN0cm9rZSAod2hpY2ggaXMgbm90IGEgcGFydCBvZiB0aGUgcmVjdGFuZ2xlKS4KKyAgICBp
bnQgZHggPSAtYm9yZGVyV2lkdGhQeDsKKyAgICBpbnQgZHkgPSBib3JkZXJXaWR0aFB4OworCisg
ICAgLy8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRoZSByaWdodCBvZiB2aXNpYmxlUmVjdCwg
cmlnaHQtYWxpZ24gdGhlIHRpcCB3aXRoIHRoZSBzYWlkIGJvdW5kYXJ5LgorICAgIGlmICh0aXRs
ZVJlY3QubWF4WCgpICsgZHggPiB2aXNpYmxlUmVjdC5tYXhYKCkpCisgICAgICAgIGR4ID0gdmlz
aWJsZVJlY3QubWF4WCgpIC0gdGl0bGVSZWN0Lm1heFgoKTsKKworICAgIC8vIElmIHRoZSB0aXAg
c3RpY2tzIGJleW9uZCB0aGUgbGVmdCBvZiB2aXNpYmxlUmVjdCwgbGVmdC1hbGlnbiB0aGUgdGlw
IHdpdGggdGhlIHNhaWQgYm91bmRhcnkuCisgICAgaWYgKHRpdGxlUmVjdC54KCkgKyBkeCA8IHZp
c2libGVSZWN0LngoKSkKKyAgICAgICAgZHggPSB2aXNpYmxlUmVjdC54KCkgLSB0aXRsZVJlY3Qu
eCgpIC0gYm9yZGVyV2lkdGhQeDsKKworICAgIC8vIElmIHRoZSB0aXAgc3RpY2tzIGJleW9uZCB0
aGUgYm90dG9tIG9mIHZpc2libGVSZWN0LCBzaG93IHRoZSB0aXAgYXQgdG9wIG9mIGJvdW5kaW5n
IGJveC4KKyAgICBpZiAodGl0bGVSZWN0Lm1heFkoKSArIGR5ID4gdmlzaWJsZVJlY3QubWF4WSgp
KSB7CisgICAgICAgIGR5ID0gYW5jaG9yQm94LnkoKSAtIHRpdGxlUmVjdC5tYXhZKCkgLSBib3Jk
ZXJXaWR0aFB4OworICAgICAgICAvLyBJZiB0aGUgdGlwIHN0aWxsIHN0aWNrcyBiZXlvbmQgdGhl
IGJvdHRvbSBvZiB2aXNpYmxlUmVjdCwgYm90dG9tLWFsaWduIHRoZSB0aXAgd2l0aCB0aGUgc2Fp
ZCBib3VuZGFyeS4KKyAgICAgICAgaWYgKHRpdGxlUmVjdC5tYXhZKCkgKyBkeSA+IHZpc2libGVS
ZWN0Lm1heFkoKSkKKyAgICAgICAgICAgIGR5ID0gdmlzaWJsZVJlY3QubWF4WSgpIC0gdGl0bGVS
ZWN0Lm1heFkoKTsKKyAgICB9CisKKyAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhl
IHRvcCBvZiB2aXNpYmxlUmVjdCwgc2hvdyB0aGUgdGlwIGF0IHRvcCBvZiB2aXNpYmxlUmVjdC4K
KyAgICBpZiAodGl0bGVSZWN0LnkoKSArIGR5IDwgdmlzaWJsZVJlY3QueSgpKQorICAgICAgICBk
eSA9IHZpc2libGVSZWN0LnkoKSAtIHRpdGxlUmVjdC55KCkgKyBib3JkZXJXaWR0aFB4OworCisg
ICAgdGl0bGVSZWN0Lm1vdmUoZHgsIGR5KTsKKworICAgIGJvb2wgaXNBcnJvd0F0VG9wID0gdGl0
bGVSZWN0LnkoKSA+IGFuY2hvckJveC55KCk7CisgICAgdGl0bGVSZWN0Lm1vdmUoMCwgdG9vbHRp
cFBhZGRpbmcgKiAoaXNBcnJvd0F0VG9wID8gMSA6IC0xKSk7CisKKyAgICB7CisgICAgICAgIGZs
b2F0IGFycm93VGlwWCA9IGNhbGN1bGF0ZUFycm93VGlwWChhbmNob3JCb3gsIHRpdGxlUmVjdCk7
CisgICAgICAgIGludCBhcnJvd0Jhc2VZID0gaXNBcnJvd0F0VG9wID8gdGl0bGVSZWN0LnkoKSA6
IHRpdGxlUmVjdC5tYXhZKCk7CisgICAgICAgIGludCBhcnJvd09wcG9zaXRlWSA9IGlzQXJyb3dB
dFRvcCA/IHRpdGxlUmVjdC5tYXhZKCkgOiB0aXRsZVJlY3QueSgpOworCisgICAgICAgIEZsb2F0
UG9pbnQgcG9pbnRzWzhdOworICAgICAgICBwb2ludHNbMF0gPSBGbG9hdFBvaW50KGFycm93VGlw
WCAtIGFycm93SGFsZldpZHRoLCBhcnJvd0Jhc2VZKTsKKyAgICAgICAgcG9pbnRzWzFdID0gRmxv
YXRQb2ludChhcnJvd1RpcFgsIGFycm93QmFzZVkgKyBhcnJvd0hlaWdodCAqIChpc0Fycm93QXRU
b3AgPyAtMSA6IDEpKTsKKyAgICAgICAgcG9pbnRzWzJdID0gRmxvYXRQb2ludChhcnJvd1RpcFgg
KyBhcnJvd0hhbGZXaWR0aCwgYXJyb3dCYXNlWSk7CisgICAgICAgIHBvaW50c1szXSA9IEZsb2F0
UG9pbnQodGl0bGVSZWN0Lm1heFgoKSwgYXJyb3dCYXNlWSk7CisgICAgICAgIHBvaW50c1s0XSA9
IEZsb2F0UG9pbnQodGl0bGVSZWN0Lm1heFgoKSwgYXJyb3dPcHBvc2l0ZVkpOworICAgICAgICBw
b2ludHNbNV0gPSBGbG9hdFBvaW50KHRpdGxlUmVjdC54KCksIGFycm93T3Bwb3NpdGVZKTsKKyAg
ICAgICAgcG9pbnRzWzZdID0gRmxvYXRQb2ludCh0aXRsZVJlY3QueCgpLCBhcnJvd0Jhc2VZKTsK
KyAgICAgICAgcG9pbnRzWzddID0gcG9pbnRzWzBdOworCisgICAgICAgIFBhdGggcGF0aDsKKyAg
ICAgICAgcGF0aC5tb3ZlVG8ocG9pbnRzWzBdKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkg
PCA4OyArK2kpCisgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyhwb2ludHNbaV0pOworCisgICAg
ICAgIGNvbnRleHQuc2F2ZSgpOworICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLjVmLCAwLjVm
KTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihweEFuZEJvcmRlckNvbG9yLCBDb2xv
clNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoYmFja2dyb3Vu
ZENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VU
aGlja25lc3MoYm9yZGVyV2lkdGhQeCk7CisgICAgICAgIGNvbnRleHQuZmlsbFBhdGgocGF0aCk7
CisgICAgICAgIGNvbnRleHQuc3Ryb2tlUGF0aChwYXRoKTsKKyAgICAgICAgY29udGV4dC5yZXN0
b3JlKCk7CisgICAgfQorCisgICAgaW50IGN1cnJlbnRQb3MgPSAwOworICAgIGN1cnJlbnRQb3Mg
PSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3VycmVudFBvcywgdGFnTmFtZUxlbmd0aCwg
dGFnQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7CisgICAgaWYgKGlkU3RyaW5nTGVu
Z3RoKQorICAgICAgICBjdXJyZW50UG9zID0gZHJhd1N1YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1
cnJlbnRQb3MsIGlkU3RyaW5nTGVuZ3RoLCBhdHRyQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxl
UmVjdCk7CisgICAgaWYgKGNsYXNzZXNTdHJpbmdMZW5ndGgpCisgICAgICAgIGN1cnJlbnRQb3Mg
PSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3VycmVudFBvcywgY2xhc3Nlc1N0cmluZ0xl
bmd0aCwgYXR0ckNvbG9yLCBmb250LCBjb250ZXh0LCB0aXRsZVJlY3QpOworICAgIGN1cnJlbnRQ
b3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3VycmVudFBvcywgd2lkdGhOdW1iZXJQ
YXJ0Lmxlbmd0aCgpLCBub3JtYWxDb2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVSZWN0KTsKKyAg
ICBjdXJyZW50UG9zID0gZHJhd1N1YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIHB4
U3RyaW5nLmxlbmd0aCgpICsgdGltZXNTdHJpbmcubGVuZ3RoKCksIHB4QW5kQm9yZGVyQ29sb3Is
IGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7CisgICAgY3VycmVudFBvcyA9IGRyYXdTdWJzdHJp
bmcobm9kZVRpdGxlUnVuLCBjdXJyZW50UG9zLCBoZWlnaHROdW1iZXJQYXJ0Lmxlbmd0aCgpLCBu
b3JtYWxDb2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVSZWN0KTsKKyAgICBkcmF3U3Vic3RyaW5n
KG5vZGVUaXRsZVJ1biwgY3VycmVudFBvcywgcHhTdHJpbmcubGVuZ3RoKCksIHB4QW5kQm9yZGVy
Q29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnRl
bnRzUXVhZFRvUGFnZShjb25zdCBGcmFtZVZpZXcqIG1haW5WaWV3LCBjb25zdCBGcmFtZVZpZXcq
IHZpZXcsIEZsb2F0UXVhZCYgcXVhZCkKK3sKKyAgICBxdWFkLnNldFAxKHZpZXctPmNvbnRlbnRz
VG9Sb290Vmlldyhyb3VuZGVkSW50UG9pbnQocXVhZC5wMSgpKSkpOworICAgIHF1YWQuc2V0UDIo
dmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHJvdW5kZWRJbnRQb2ludChxdWFkLnAyKCkpKSk7Cisg
ICAgcXVhZC5zZXRQMyh2aWV3LT5jb250ZW50c1RvUm9vdFZpZXcocm91bmRlZEludFBvaW50KHF1
YWQucDMoKSkpKTsKKyAgICBxdWFkLnNldFA0KHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhyb3Vu
ZGVkSW50UG9pbnQocXVhZC5wNCgpKSkpOworICAgIHF1YWQgKz0gbWFpblZpZXctPnNjcm9sbE9m
ZnNldCgpOworfQorCitzdGF0aWMgdm9pZCBnZXRPckRyYXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgSGlnaGxpZ2h0RGF0YSogaGlnaGxpZ2h0RGF0YSwgSGlnaGxpZ2h0
KiBoaWdobGlnaHQpCit7CisgICAgTm9kZSogbm9kZSA9IGhpZ2hsaWdodERhdGEtPm5vZGUuZ2V0
KCk7CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAg
RnJhbWUqIGNvbnRhaW5pbmdGcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7CisKKyAg
ICBpZiAoIXJlbmRlcmVyIHx8ICFjb250YWluaW5nRnJhbWUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEZyYW1lVmlldyogY29udGFpbmluZ1ZpZXcgPSBjb250YWluaW5nRnJhbWUtPnZpZXcoKTsK
KyAgICBGcmFtZVZpZXcqIG1haW5WaWV3ID0gY29udGFpbmluZ0ZyYW1lLT5wYWdlKCktPm1haW5G
cmFtZSgpLT52aWV3KCk7CisgICAgSW50UmVjdCBib3VuZGluZ0JveCA9IHBpeGVsU25hcHBlZElu
dFJlY3QoY29udGFpbmluZ1ZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhyZW5kZXJlci0+YWJzb2x1
dGVCb3VuZGluZ0JveFJlY3QoKSkpOworICAgIGJvdW5kaW5nQm94Lm1vdmUobWFpblZpZXctPnNj
cm9sbE9mZnNldCgpKTsKKyAgICBJbnRSZWN0IHRpdGxlQW5jaG9yQm94ID0gYm91bmRpbmdCb3g7
CisKKyAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QgPSBtYWluVmlldy0+dmlzaWJsZUNvbnRlbnRS
ZWN0KCk7CisgICAgLy8gRG9uJ3QgdHJhbnNsYXRlIHRoZSBjb250ZXh0IGlmIHRoZSBmcmFtZSBp
cyByZW5kZXJlZCBpbiBwYWdlIGNvb3JkaW5hdGVzLgorICAgIGlmIChjb250ZXh0ICYmICFtYWlu
Vmlldy0+ZGVsZWdhdGVzU2Nyb2xsaW5nKCkpCisgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgt
dmlzaWJsZVJlY3QueCgpLCAtdmlzaWJsZVJlY3QueSgpKTsKKworICAgIC8vIFJlbmRlclNWR1Jv
b3Qgc2hvdWxkIGJlIGhpZ2hsaWdodGVkIHRocm91Z2ggdGhlIGlzQm94KCkgY29kZSBwYXRoLCBh
bGwgb3RoZXIgU1ZHIGVsZW1lbnRzIHNob3VsZCBqdXN0IGR1bXAgdGhlaXIgYWJzb2x1dGVRdWFk
cygpLgorI2lmIEVOQUJMRShTVkcpCisgICAgYm9vbCBpc1NWR1JlbmRlcmVyID0gcmVuZGVyZXIt
Pm5vZGUoKSAmJiByZW5kZXJlci0+bm9kZSgpLT5pc1NWR0VsZW1lbnQoKSAmJiAhcmVuZGVyZXIt
PmlzU1ZHUm9vdCgpOworI2Vsc2UKKyAgICBib29sIGlzU1ZHUmVuZGVyZXIgPSBmYWxzZTsKKyNl
bmRpZgorCisgICAgaWYgKGlzU1ZHUmVuZGVyZXIpIHsKKyAgICAgICAgaGlnaGxpZ2h0LT50eXBl
ID0gSGlnaGxpZ2h0VHlwZVJlY3RzOworICAgICAgICByZW5kZXJlci0+YWJzb2x1dGVRdWFkcyho
aWdobGlnaHQtPnF1YWRzKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBoaWdobGln
aHQtPnF1YWRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgY29udGVudHNRdWFkVG9QYWdlKG1h
aW5WaWV3LCBjb250YWluaW5nVmlldywgaGlnaGxpZ2h0LT5xdWFkc1tpXSk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgICAgICBkcmF3SGlnaGxpZ2h0Rm9yU1ZHUmVuZGVyZXIoKmNv
bnRleHQsIGhpZ2hsaWdodC0+cXVhZHMsIGhpZ2hsaWdodERhdGEpOworICAgIH0gZWxzZSBpZiAo
cmVuZGVyZXItPmlzQm94KCkgfHwgcmVuZGVyZXItPmlzUmVuZGVySW5saW5lKCkpIHsKKyAgICAg
ICAgTGF5b3V0UmVjdCBjb250ZW50Qm94OworICAgICAgICBMYXlvdXRSZWN0IHBhZGRpbmdCb3g7
CisgICAgICAgIExheW91dFJlY3QgYm9yZGVyQm94OworICAgICAgICBMYXlvdXRSZWN0IG1hcmdp
bkJveDsKKworICAgICAgICBpZiAocmVuZGVyZXItPmlzQm94KCkpIHsKKyAgICAgICAgICAgIFJl
bmRlckJveCogcmVuZGVyQm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIpOworCisgICAgICAgICAg
ICAvLyBSZW5kZXJCb3ggcmV0dXJucyB0aGUgInB1cmUiIGNvbnRlbnQgYXJlYSBib3gsIGV4Y2x1
c2l2ZSBvZiB0aGUgc2Nyb2xsYmFycyAoaWYgcHJlc2VudCksIHdoaWNoIGFsc28gY291bnQgdG93
YXJkcyB0aGUgY29udGVudCBhcmVhIGluIENTUy4KKyAgICAgICAgICAgIGNvbnRlbnRCb3ggPSBy
ZW5kZXJCb3gtPmNvbnRlbnRCb3hSZWN0KCk7CisgICAgICAgICAgICBjb250ZW50Qm94LnNldFdp
ZHRoKGNvbnRlbnRCb3gud2lkdGgoKSArIHJlbmRlckJveC0+dmVydGljYWxTY3JvbGxiYXJXaWR0
aCgpKTsKKyAgICAgICAgICAgIGNvbnRlbnRCb3guc2V0SGVpZ2h0KGNvbnRlbnRCb3guaGVpZ2h0
KCkgKyByZW5kZXJCb3gtPmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSk7CisKKyAgICAgICAg
ICAgIHBhZGRpbmdCb3ggPSBMYXlvdXRSZWN0KGNvbnRlbnRCb3gueCgpIC0gcmVuZGVyQm94LT5w
YWRkaW5nTGVmdCgpLCBjb250ZW50Qm94LnkoKSAtIHJlbmRlckJveC0+cGFkZGluZ1RvcCgpLAor
ICAgICAgICAgICAgICAgICAgICBjb250ZW50Qm94LndpZHRoKCkgKyByZW5kZXJCb3gtPnBhZGRp
bmdMZWZ0KCkgKyByZW5kZXJCb3gtPnBhZGRpbmdSaWdodCgpLCBjb250ZW50Qm94LmhlaWdodCgp
ICsgcmVuZGVyQm94LT5wYWRkaW5nVG9wKCkgKyByZW5kZXJCb3gtPnBhZGRpbmdCb3R0b20oKSk7
CisgICAgICAgICAgICBib3JkZXJCb3ggPSBMYXlvdXRSZWN0KHBhZGRpbmdCb3gueCgpIC0gcmVu
ZGVyQm94LT5ib3JkZXJMZWZ0KCksIHBhZGRpbmdCb3gueSgpIC0gcmVuZGVyQm94LT5ib3JkZXJU
b3AoKSwKKyAgICAgICAgICAgICAgICAgICAgcGFkZGluZ0JveC53aWR0aCgpICsgcmVuZGVyQm94
LT5ib3JkZXJMZWZ0KCkgKyByZW5kZXJCb3gtPmJvcmRlclJpZ2h0KCksIHBhZGRpbmdCb3guaGVp
Z2h0KCkgKyByZW5kZXJCb3gtPmJvcmRlclRvcCgpICsgcmVuZGVyQm94LT5ib3JkZXJCb3R0b20o
KSk7CisgICAgICAgICAgICBtYXJnaW5Cb3ggPSBMYXlvdXRSZWN0KGJvcmRlckJveC54KCkgLSBy
ZW5kZXJCb3gtPm1hcmdpbkxlZnQoKSwgYm9yZGVyQm94LnkoKSAtIHJlbmRlckJveC0+bWFyZ2lu
VG9wKCksCisgICAgICAgICAgICAgICAgICAgIGJvcmRlckJveC53aWR0aCgpICsgcmVuZGVyQm94
LT5tYXJnaW5XaWR0aCgpLCBib3JkZXJCb3guaGVpZ2h0KCkgKyByZW5kZXJCb3gtPm1hcmdpbkhl
aWdodCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJlbmRlcklubGluZSogcmVu
ZGVySW5saW5lID0gdG9SZW5kZXJJbmxpbmUocmVuZGVyZXIpOworCisgICAgICAgICAgICAvLyBS
ZW5kZXJJbmxpbmUncyBib3VuZGluZyBib3ggaW5jbHVkZXMgcGFkZGluZ3MgYW5kIGJvcmRlcnMs
IGV4Y2x1ZGVzIG1hcmdpbnMuCisgICAgICAgICAgICBib3JkZXJCb3ggPSByZW5kZXJJbmxpbmUt
PmxpbmVzQm91bmRpbmdCb3goKTsKKyAgICAgICAgICAgIHBhZGRpbmdCb3ggPSBMYXlvdXRSZWN0
KGJvcmRlckJveC54KCkgKyByZW5kZXJJbmxpbmUtPmJvcmRlckxlZnQoKSwgYm9yZGVyQm94Lnko
KSArIHJlbmRlcklubGluZS0+Ym9yZGVyVG9wKCksCisgICAgICAgICAgICAgICAgICAgIGJvcmRl
ckJveC53aWR0aCgpIC0gcmVuZGVySW5saW5lLT5ib3JkZXJMZWZ0KCkgLSByZW5kZXJJbmxpbmUt
PmJvcmRlclJpZ2h0KCksIGJvcmRlckJveC5oZWlnaHQoKSAtIHJlbmRlcklubGluZS0+Ym9yZGVy
VG9wKCkgLSByZW5kZXJJbmxpbmUtPmJvcmRlckJvdHRvbSgpKTsKKyAgICAgICAgICAgIGNvbnRl
bnRCb3ggPSBMYXlvdXRSZWN0KHBhZGRpbmdCb3gueCgpICsgcmVuZGVySW5saW5lLT5wYWRkaW5n
TGVmdCgpLCBwYWRkaW5nQm94LnkoKSArIHJlbmRlcklubGluZS0+cGFkZGluZ1RvcCgpLAorICAg
ICAgICAgICAgICAgICAgICBwYWRkaW5nQm94LndpZHRoKCkgLSByZW5kZXJJbmxpbmUtPnBhZGRp
bmdMZWZ0KCkgLSByZW5kZXJJbmxpbmUtPnBhZGRpbmdSaWdodCgpLCBwYWRkaW5nQm94LmhlaWdo
dCgpIC0gcmVuZGVySW5saW5lLT5wYWRkaW5nVG9wKCkgLSByZW5kZXJJbmxpbmUtPnBhZGRpbmdC
b3R0b20oKSk7CisgICAgICAgICAgICAvLyBJZ25vcmUgbWFyZ2luVG9wIGFuZCBtYXJnaW5Cb3R0
b20gZm9yIGlubGluZXMuCisgICAgICAgICAgICBtYXJnaW5Cb3ggPSBMYXlvdXRSZWN0KGJvcmRl
ckJveC54KCkgLSByZW5kZXJJbmxpbmUtPm1hcmdpbkxlZnQoKSwgYm9yZGVyQm94LnkoKSwKKyAg
ICAgICAgICAgICAgICAgICAgYm9yZGVyQm94LndpZHRoKCkgKyByZW5kZXJJbmxpbmUtPm1hcmdp
bldpZHRoKCksIGJvcmRlckJveC5oZWlnaHQoKSk7CisgICAgICAgIH0KKworICAgICAgICBGbG9h
dFF1YWQgYWJzQ29udGVudFF1YWQgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9h
dFJlY3QoY29udGVudEJveCkpOworICAgICAgICBGbG9hdFF1YWQgYWJzUGFkZGluZ1F1YWQgPSBy
ZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QocGFkZGluZ0JveCkpOworICAg
ICAgICBGbG9hdFF1YWQgYWJzQm9yZGVyUXVhZCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVR
dWFkKEZsb2F0UmVjdChib3JkZXJCb3gpKTsKKyAgICAgICAgRmxvYXRRdWFkIGFic01hcmdpblF1
YWQgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QobWFyZ2luQm94KSk7
CisKKyAgICAgICAgY29udGVudHNRdWFkVG9QYWdlKG1haW5WaWV3LCBjb250YWluaW5nVmlldywg
YWJzQ29udGVudFF1YWQpOworICAgICAgICBjb250ZW50c1F1YWRUb1BhZ2UobWFpblZpZXcsIGNv
bnRhaW5pbmdWaWV3LCBhYnNQYWRkaW5nUXVhZCk7CisgICAgICAgIGNvbnRlbnRzUXVhZFRvUGFn
ZShtYWluVmlldywgY29udGFpbmluZ1ZpZXcsIGFic0JvcmRlclF1YWQpOworICAgICAgICBjb250
ZW50c1F1YWRUb1BhZ2UobWFpblZpZXcsIGNvbnRhaW5pbmdWaWV3LCBhYnNNYXJnaW5RdWFkKTsK
KworICAgICAgICB0aXRsZUFuY2hvckJveCA9IGFic01hcmdpblF1YWQuZW5jbG9zaW5nQm91bmRp
bmdCb3goKTsKKworICAgICAgICBoaWdobGlnaHQtPnR5cGUgPSBIaWdobGlnaHRUeXBlTm9kZTsK
KyAgICAgICAgaGlnaGxpZ2h0LT5xdWFkcy5hcHBlbmQoYWJzTWFyZ2luUXVhZCk7CisgICAgICAg
IGhpZ2hsaWdodC0+cXVhZHMuYXBwZW5kKGFic0JvcmRlclF1YWQpOworICAgICAgICBoaWdobGln
aHQtPnF1YWRzLmFwcGVuZChhYnNQYWRkaW5nUXVhZCk7CisgICAgICAgIGhpZ2hsaWdodC0+cXVh
ZHMuYXBwZW5kKGFic0NvbnRlbnRRdWFkKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgICAgIGRyYXdIaWdobGlnaHRGb3JCb3goKmNvbnRleHQsIGFic0NvbnRlbnRRdWFkLCBhYnNQ
YWRkaW5nUXVhZCwgYWJzQm9yZGVyUXVhZCwgYWJzTWFyZ2luUXVhZCwgaGlnaGxpZ2h0RGF0YSk7
CisgICAgfQorCisgICAgLy8gRHJhdyBub2RlIHRpdGxlIGlmIG5lY2Vzc2FyeS4KKworICAgIGlm
ICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoY29u
dGV4dCAmJiBoaWdobGlnaHREYXRhLT5zaG93SW5mbykKKyAgICAgICAgZHJhd0VsZW1lbnRUaXRs
ZSgqY29udGV4dCwgbm9kZSwgcmVuZGVyZXIsIHBpeGVsU25hcHBlZEludFJlY3QoYm91bmRpbmdC
b3gpLCBwaXhlbFNuYXBwZWRJbnRSZWN0KHRpdGxlQW5jaG9yQm94KSwgdmlzaWJsZVJlY3QsIGNv
bnRhaW5pbmdGcmFtZS0+c2V0dGluZ3MoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGdldE9yRHJhd1Jl
Y3RIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBEb2N1bWVudCogZG9jdW1lbnQs
IEhpZ2hsaWdodERhdGEqIGhpZ2hsaWdodERhdGEsIEhpZ2hsaWdodCAqaGlnaGxpZ2h0KQorewor
ICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIEZsb2F0UmVjdCBoaWdo
bGlnaHRSZWN0KCooaGlnaGxpZ2h0RGF0YS0+cmVjdCkpOworCisgICAgaGlnaGxpZ2h0LT50eXBl
ID0gSGlnaGxpZ2h0VHlwZVJlY3RzOworICAgIGhpZ2hsaWdodC0+cXVhZHMuYXBwZW5kKGhpZ2hs
aWdodFJlY3QpOworCisgICAgaWYgKGNvbnRleHQpIHsKKyAgICAgICAgRnJhbWVWaWV3KiB2aWV3
ID0gZG9jdW1lbnQtPmZyYW1lKCktPnZpZXcoKTsKKyAgICAgICAgaWYgKCF2aWV3LT5kZWxlZ2F0
ZXNTY3JvbGxpbmcoKSkgeworICAgICAgICAgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0ID0gdmll
dy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUo
LXZpc2libGVSZWN0LngoKSwgLXZpc2libGVSZWN0LnkoKSk7CisgICAgICAgIH0KKworICAgICAg
ICBkcmF3T3V0bGluZWRRdWFkKCpjb250ZXh0LCBoaWdobGlnaHRSZWN0LCBoaWdobGlnaHREYXRh
LT5jb250ZW50LCBoaWdobGlnaHREYXRhLT5jb250ZW50T3V0bGluZSk7CisgICAgfQorfQorCit9
IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworSW5zcGVjdG9yT3ZlcmxheTo6SW5zcGVjdG9yT3Zl
cmxheShQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fcGFnZShw
YWdlKQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9zaG91bGRTaG93UGF1c2VXYXJu
aW5nKGZhbHNlKQorICAgICwgbV9kb2N1bWVudCgwKQorICAgICwgbV9oaWdobGlnaHREYXRhKDAp
Cit7Cit9CisKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCit7CisgICAgaWYgKG1faGlnaGxpZ2h0RGF0YSkKKyAgICAgICAgZHJhd0hpZ2hsaWdo
dChjb250ZXh0KTsKKyAgICBlbHNlIGlmIChtX3Nob3VsZFNob3dQYXVzZVdhcm5pbmcpCisgICAg
ICAgIGRyYXdQYXVzZVdhcm5pbmcoY29udGV4dCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yT3Zlcmxh
eTo6ZHJhd091dGxpbmUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgRmxvYXRSZWN0IG91dGxpbmVSZWN0
ID0gcmVjdDsKKyAgICBkcmF3T3V0bGluZWRRdWFkKGNvbnRleHQsIG91dGxpbmVSZWN0LCBDb2xv
cigpLCBjb2xvcik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6Z2V0SGlnaGxpZ2h0KERv
Y3VtZW50KiBkb2N1bWVudCwgSGlnaGxpZ2h0RGF0YSogaGlnaGxpZ2h0RGF0YSwgSGlnaGxpZ2h0
KiBoaWdobGlnaHQpCit7CisgICAgaWYgKCFoaWdobGlnaHREYXRhKQorICAgICAgICByZXR1cm47
CisKKyAgICBoaWdobGlnaHQtPmNvbnRlbnRDb2xvciA9IGhpZ2hsaWdodERhdGEtPmNvbnRlbnQ7
CisgICAgaGlnaGxpZ2h0LT5wYWRkaW5nQ29sb3IgPSBoaWdobGlnaHREYXRhLT5wYWRkaW5nOwor
ICAgIGhpZ2hsaWdodC0+Ym9yZGVyQ29sb3IgPSBoaWdobGlnaHREYXRhLT5ib3JkZXI7CisgICAg
aGlnaGxpZ2h0LT5tYXJnaW5Db2xvciA9IGhpZ2hsaWdodERhdGEtPm1hcmdpbjsKKyAgICBoaWdo
bGlnaHQtPnR5cGUgPSBIaWdobGlnaHRUeXBlUmVjdHM7CisKKyAgICBpZiAoaGlnaGxpZ2h0RGF0
YS0+bm9kZSkKKyAgICAgICAgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdodCgwLCBoaWdobGlnaHREYXRh
LCBoaWdobGlnaHQpOworICAgIGVsc2UgaWYgKGhpZ2hsaWdodERhdGEtPnJlY3QpCisgICAgICAg
IGdldE9yRHJhd1JlY3RIaWdobGlnaHQoMCwgZG9jdW1lbnQsIGhpZ2hsaWdodERhdGEsIGhpZ2hs
aWdodCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6c2V0SGlnaGxpZ2h0KERvY3VtZW50
KiBkb2N1bWVudCwgSGlnaGxpZ2h0RGF0YSogaGlnaGxpZ2h0RGF0YSkKK3sKKyAgICBpZiAoZG9j
dW1lbnQgJiYgaGlnaGxpZ2h0RGF0YSAmJiAoaGlnaGxpZ2h0RGF0YS0+bm9kZSB8fCBoaWdobGln
aHREYXRhLT5yZWN0KSkgeworICAgICAgICBtX2RvY3VtZW50ID0gaGlnaGxpZ2h0RGF0YS0+bm9k
ZSA/IGhpZ2hsaWdodERhdGEtPm5vZGUtPmRvY3VtZW50KCkgOiBkb2N1bWVudDsKKyAgICAgICAg
bV9oaWdobGlnaHREYXRhID0gaGlnaGxpZ2h0RGF0YTsKKyAgICB9IGVsc2UgeworICAgICAgICBt
X2RvY3VtZW50ID0gMDsKKyAgICAgICAgbV9oaWdobGlnaHREYXRhID0gMDsKKyAgICB9CisgICAg
dXBkYXRlKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6c2V0U2hvdWxkU2hvd1BhdXNl
V2FybmluZyhib29sIHNob3VsZFNob3dQYXVzZVdhcm5pbmcpCit7CisgICAgbV9zaG91bGRTaG93
UGF1c2VXYXJuaW5nID0gc2hvdWxkU2hvd1BhdXNlV2FybmluZzsKKyAgICB1cGRhdGUoKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JPdmVybGF5Ojp1cGRhdGUoKQoreworICAgIGlmICghbV9jbGllbnQp
IAorICAgICAgICByZXR1cm47CisgICAgaWYgKG1faGlnaGxpZ2h0RGF0YSB8fCBtX3Nob3VsZFNo
b3dQYXVzZVdhcm5pbmcpCisgICAgICAgIG1fY2xpZW50LT5oaWdobGlnaHQoKTsKKyAgICBlbHNl
CisgICAgICAgIG1fY2xpZW50LT5oaWRlSGlnaGxpZ2h0KCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
T3ZlcmxheTo6ZHJhd0hpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAg
aWYgKCFtX2hpZ2hsaWdodERhdGEpCisgICAgICAgIHJldHVybjsKKworICAgIEhpZ2hsaWdodCBo
aWdobGlnaHQ7CisgICAgaWYgKG1faGlnaGxpZ2h0RGF0YS0+bm9kZSkKKyAgICAgICAgZ2V0T3JE
cmF3Tm9kZUhpZ2hsaWdodCgmY29udGV4dCwgbV9oaWdobGlnaHREYXRhLCAmaGlnaGxpZ2h0KTsK
KyAgICBlbHNlIGlmIChtX2hpZ2hsaWdodERhdGEtPnJlY3QpCisgICAgICAgIGdldE9yRHJhd1Jl
Y3RIaWdobGlnaHQoJmNvbnRleHQsIG1fZG9jdW1lbnQsIG1faGlnaGxpZ2h0RGF0YSwgJmhpZ2hs
aWdodCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd1BhdXNlV2FybmluZyhHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwg
YmFja2dyb3VuZENvbG9yLCAoMCwgMCwgMCwgMzEpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KENvbG9yLCB0ZXh0QmFja2dyb3VuZENvbG9yLCAoMjU1LCAyNTUsIDE5NCkpOworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoQ29sb3IsIGJvcmRlckNvbG9yLCAoMTI4LCAxMjgsIDEyOCkpOworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoaW50LCBmb250SGVpZ2h0LCAoMjQpKTsKKworICAgIEZyYW1l
KiBmcmFtZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCk7CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0g
ZnJhbWUtPnNldHRpbmdzKCk7CisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IGZyYW1lLT52aWV3
KCktPnZpc2libGVDb250ZW50UmVjdCgpOworCisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoYmFj
a2dyb3VuZENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdSZWN0
KHZpc2libGVSZWN0KTsKKworICAgIEZvbnREZXNjcmlwdGlvbiBkZXNjOworICAgIHNldFVwRm9u
dERlc2NyaXB0aW9uKGRlc2MsIHNldHRpbmdzKTsKKyAgICBkZXNjLnNldENvbXB1dGVkU2l6ZShm
b250SGVpZ2h0KTsKKyAgICBGb250IGZvbnQgPSBGb250KGRlc2MsIDAsIDApOworICAgIGZvbnQu
dXBkYXRlKDApOworCisgICAgU3RyaW5nIHRleHQgPSAiVGhlIGRlYnVnZ2VyIGlzIHBhdXNlZC4i
OworICAgIFRleHRSdW4gdGV4dFJ1bih0ZXh0KTsKKyAgICBJbnRSZWN0IHRpdGxlUmVjdCA9IGVu
Y2xvc2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBJbnRQb2lu
dCgpLCBmb250SGVpZ2h0KSk7CisgICAgdGl0bGVSZWN0LmluZmxhdGUocmVjdEluZmxhdGVQeCk7
CisgICAgdGl0bGVSZWN0LnNldExvY2F0aW9uKEludFBvaW50KHZpc2libGVSZWN0LndpZHRoKCkg
LyAyIC0gdGl0bGVSZWN0LndpZHRoKCkgLyAyLCAwKSk7CisKKyAgICBjb250ZXh0LnNldEZpbGxD
b2xvcih0ZXh0QmFja2dyb3VuZENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250
ZXh0LnNldFN0cm9rZUNvbG9yKGJvcmRlckNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAg
ICBjb250ZXh0LmRyYXdSZWN0KHRpdGxlUmVjdCk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3Io
Q29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdUZXh0
KGZvbnQsIHRleHRSdW4sIEludFBvaW50KHRpdGxlUmVjdC54KCkgKyByZWN0SW5mbGF0ZVB4LCB0
aXRsZVJlY3QueSgpICsgZm9udEhlaWdodCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JPdmVybGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTFiYjg4OGVjNjY2YjQ5MzIyYWRiYmQ0
NDE2MTM1ODA0ZmE0MTIzOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JPdmVybGF5LmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluc3Bl
Y3Rvck92ZXJsYXlfaAorI2RlZmluZSBJbnNwZWN0b3JPdmVybGF5X2gKKworI2luY2x1ZGUgIkNv
bG9yLmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIK
KworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29sb3I7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEZy
YW1lVmlldzsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEluc3BlY3RvckNsaWVudDsK
K2NsYXNzIEludFJlY3Q7CitjbGFzcyBJbnRTaXplOworY2xhc3MgTm9kZTsKK2NsYXNzIFBhZ2U7
CisKK3N0cnVjdCBIaWdobGlnaHREYXRhIHsKKyAgICBDb2xvciBjb250ZW50OworICAgIENvbG9y
IGNvbnRlbnRPdXRsaW5lOworICAgIENvbG9yIHBhZGRpbmc7CisgICAgQ29sb3IgYm9yZGVyOwor
ICAgIENvbG9yIG1hcmdpbjsKKyAgICBib29sIHNob3dJbmZvOworCisgICAgLy8gRWl0aGVyIG9m
IHRoZXNlIG11c3QgYmUgMC4KKyAgICBSZWZQdHI8Tm9kZT4gbm9kZTsKKyAgICBPd25QdHI8SW50
UmVjdD4gcmVjdDsKK307CisKK2VudW0gSGlnaGxpZ2h0VHlwZSB7CisgICAgSGlnaGxpZ2h0VHlw
ZU5vZGUsCisgICAgSGlnaGxpZ2h0VHlwZVJlY3RzLAorfTsKKworc3RydWN0IEhpZ2hsaWdodCB7
CisgICAgQ29sb3IgY29udGVudENvbG9yOworICAgIENvbG9yIHBhZGRpbmdDb2xvcjsKKyAgICBD
b2xvciBib3JkZXJDb2xvcjsKKyAgICBDb2xvciBtYXJnaW5Db2xvcjsKKworICAgIC8vIFdoZW4g
dGhlIHR5cGUgaXMgTm9kZSwgdGhlcmUgYXJlIDQgcXVhZHMgKG1hcmdpbiwgYm9yZGVyLCBwYWRk
aW5nLCBjb250ZW50KS4KKyAgICAvLyBXaGVuIHRoZSB0eXBlIGlzIFJlY3RzLCB0aGlzIGlzIGp1
c3QgYSBsaXN0IG9mIHF1YWRzLgorICAgIEhpZ2hsaWdodFR5cGUgdHlwZTsKKyAgICBWZWN0b3I8
RmxvYXRRdWFkPiBxdWFkczsKK307CisKK2NsYXNzIEluc3BlY3Rvck92ZXJsYXkgeworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3Rvck92ZXJsYXk+IGNyZWF0ZShQYWdlKiBw
YWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgSW5zcGVjdG9yT3ZlcmxheShwYWdlLCBjbGllbnQpKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYpOworICAgIHZvaWQgZHJhd091dGxpbmUoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IENvbG9yJik7CisgICAgdm9p
ZCBnZXRIaWdobGlnaHQoRG9jdW1lbnQqLCBIaWdobGlnaHREYXRhKiwgSGlnaGxpZ2h0Kik7Cisg
ICAgCisgICAgdm9pZCBzZXRIaWdobGlnaHQoRG9jdW1lbnQqLCBIaWdobGlnaHREYXRhKik7Cisg
ICAgdm9pZCBzZXRTaG91bGRTaG93UGF1c2VXYXJuaW5nKGJvb2wpOworCitwcml2YXRlOgorICAg
IEluc3BlY3Rvck92ZXJsYXkoUGFnZSosIEluc3BlY3RvckNsaWVudCopOworCisgICAgdm9pZCB1
cGRhdGUoKTsKKyAgICB2b2lkIGRyYXdIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0Jik7CisgICAg
dm9pZCBkcmF3UGF1c2VXYXJuaW5nKEdyYXBoaWNzQ29udGV4dCYpOworCisgICAgUGFnZSogbV9w
YWdlOworICAgIEluc3BlY3RvckNsaWVudCogbV9jbGllbnQ7CisgICAgYm9vbCBtX3Nob3VsZFNo
b3dQYXVzZVdhcm5pbmc7CisgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CisgICAgSGlnaGxpZ2h0
RGF0YSogbV9oaWdobGlnaHREYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisK
KyNlbmRpZiAvLyBET01Ob2RlSGlnaGxpZ2h0ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAppbmRleCBlZjM0NTM3ZjBlMTE4ZmI1ZTBjYjg4
Y2EyZmFiNWUzZWY2MGEzNTc3Li45ODVjYmY1M2U1MmE5NjM1MWY4OWYxZjY0MWJmNzljY2I1Njk4
YjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFn
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50
LmNwcApAQCAtNDQsMTIgKzQ0LDEyIEBACiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAi
Q29va2llSmFyLmgiCiAjaW5jbHVkZSAiRE9NSW1wbGVtZW50YXRpb24uaCIKLSNpbmNsdWRlICJE
T01Ob2RlSGlnaGxpZ2h0ZXIuaCIKICNpbmNsdWRlICJET01QYXRjaFN1cHBvcnQuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKICNpbmNsdWRlICJJZGVudGlmaWVyc0ZhY3RvcnkuaCIKQEAgLTU4LDYgKzU4LDcg
QEAKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9u
dGVuZC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUg
Ikluc3BlY3Rvck92ZXJsYXkuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JTdGF0ZS5oIgogI2luY2x1
ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIK
QEAgLTIyMyw5ICsyMjQsOSBAQCBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6c2hhcmVkQnVmZmVy
Q29udGVudChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyLCBjbwogICAgIHJldHVybiBk
ZWNvZGVTaGFyZWRCdWZmZXIoYnVmZmVyLCB0ZXh0RW5jb2RpbmdOYW1lLCByZXN1bHQpOwogfQog
Ci1QYXNzT3duUHRyPEluc3BlY3RvclBhZ2VBZ2VudD4gSW5zcGVjdG9yUGFnZUFnZW50OjpjcmVh
dGUoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgUGFnZSogcGFnZSwg
SW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBJbnNwZWN0b3JTdGF0ZSogc3RhdGUsIElu
amVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JDbGll
bnQqIGNsaWVudCkKK1Bhc3NPd25QdHI8SW5zcGVjdG9yUGFnZUFnZW50PiBJbnNwZWN0b3JQYWdl
QWdlbnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQ
YWdlKiBwYWdlLCBJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIEluc3BlY3RvclN0YXRl
KiBzdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIElu
c3BlY3RvckNsaWVudCogY2xpZW50LCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQogewotICAg
IHJldHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9yUGFnZUFnZW50KGluc3RydW1lbnRpbmdBZ2Vu
dHMsIHBhZ2UsIGluc3BlY3RvckFnZW50LCBzdGF0ZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBj
bGllbnQpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEluc3BlY3RvclBhZ2VBZ2VudChpbnN0
cnVtZW50aW5nQWdlbnRzLCBwYWdlLCBpbnNwZWN0b3JBZ2VudCwgc3RhdGUsIGluamVjdGVkU2Ny
aXB0TWFuYWdlciwgY2xpZW50LCBvdmVybGF5KSk7CiB9CiAKIC8vIHN0YXRpYwpAQCAtMzA4LDEz
ICszMDksMTQgQEAgVHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZTo6RW51bSBJbnNwZWN0
b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlVHlwZUpzb24KICAgICByZXR1cm4gcmVzb3VyY2VU
eXBlSnNvbihjYWNoZWRSZXNvdXJjZVR5cGUoY2FjaGVkUmVzb3VyY2UpKTsKIH0KIAotSW5zcGVj
dG9yUGFnZUFnZW50OjpJbnNwZWN0b3JQYWdlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5z
dHJ1bWVudGluZ0FnZW50cywgUGFnZSogcGFnZSwgSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFn
ZW50LCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdl
ciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKK0luc3Bl
Y3RvclBhZ2VBZ2VudDo6SW5zcGVjdG9yUGFnZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGlu
c3RydW1lbnRpbmdBZ2VudHMsIFBhZ2UqIHBhZ2UsIEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JB
Z2VudCwgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFn
ZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQsIEluc3Bl
Y3Rvck92ZXJsYXkqIG92ZXJsYXkpCiAgICAgOiBJbnNwZWN0b3JCYXNlQWdlbnQ8SW5zcGVjdG9y
UGFnZUFnZW50PigiUGFnZSIsIGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlKQog
ICAgICwgbV9wYWdlKHBhZ2UpCiAgICAgLCBtX2luc3BlY3RvckFnZW50KGluc3BlY3RvckFnZW50
KQogICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQog
ICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9mcm9udGVuZCgwKQorICAgICwgbV9vdmVy
bGF5KG92ZXJsYXkpCiAgICAgLCBtX2xhc3RTY3JpcHRJZGVudGlmaWVyKDApCiAgICAgLCBtX2xh
c3RQYWludENvbnRleHQoMCkKICAgICAsIG1fZGlkTG9hZEV2ZW50RmlyZShmYWxzZSkKQEAgLTg0
Myw2ICs4NDUsMTEgQEAgRG9jdW1lbnRMb2FkZXIqIEluc3BlY3RvclBhZ2VBZ2VudDo6YXNzZXJ0
RG9jdW1lbnRMb2FkZXIoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW4KICAgICByZXR1cm4gZG9jdW1l
bnRMb2FkZXI7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkcmF3SW5zcGVjdG9yT3Zl
cmxheShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgbV9vdmVybGF5LT5kcmF3KGNv
bnRleHQpOworfQorCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6bG9hZGVyRGV0YWNoZWRGcm9t
RnJhbWUoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKIHsKICAgICBIYXNoTWFwPERvY3VtZW50TG9h
ZGVyKiwgU3RyaW5nPjo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2xvYWRlclRvSWRlbnRpZmllci5m
aW5kKGxvYWRlcik7CkBAIC04ODUsNyArODkyLDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6
OmRpZFBhaW50KCkKICAgICAgICAgQ29sb3IoMCwgMCwgMHhGRiwgMHgzRiksCiAgICAgfTsKIAot
ICAgIERPTU5vZGVIaWdobGlnaHRlcjo6ZHJhd091dGxpbmUoKm1fbGFzdFBhaW50Q29udGV4dCwg
bV9sYXN0UGFpbnRSZWN0LCBjb2xvcnNbY29sb3JTZWxlY3RvcisrICUgV1RGX0FSUkFZX0xFTkdU
SChjb2xvcnMpXSk7CisgICAgbV9vdmVybGF5LT5kcmF3T3V0bGluZSgqbV9sYXN0UGFpbnRDb250
ZXh0LCBtX2xhc3RQYWludFJlY3QsIGNvbG9yc1tjb2xvclNlbGVjdG9yKysgJSBXVEZfQVJSQVlf
TEVOR1RIKGNvbG9ycyldKTsKIAogICAgIG1fbGFzdFBhaW50Q29udGV4dCA9IDA7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKaW5kZXggOTY0YmM4
NWZjNjM2NDhhZjM4ZjJkYzEyZmM4M2Y3OTcxYjkzYTY2My4uNzk4NTA4YTk2ODVlNmU2Y2I0NGQw
YWIzMGZlNTEzNzcxMGZjYTdmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclBhZ2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JQYWdlQWdlbnQuaApAQCAtNDgsMTEgKzQ4LDEzIEBAIGNsYXNzIERPTVdyYXBwZXJXb3Js
ZDsKIGNsYXNzIERvY3VtZW50TG9hZGVyOwogY2xhc3MgRnJhbWU7CiBjbGFzcyBGcm9udGVuZDsK
K2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKIGNs
YXNzIEluc3BlY3RvckFnZW50OwogY2xhc3MgSW5zcGVjdG9yQXJyYXk7CiBjbGFzcyBJbnNwZWN0
b3JDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CitjbGFzcyBJbnNwZWN0b3JPdmVybGF5
OwogY2xhc3MgSW5zcGVjdG9yU3RhdGU7CiBjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzOwogY2xh
c3MgS1VSTDsKQEAgLTc3LDcgKzc5LDcgQEAgcHVibGljOgogICAgICAgICBPdGhlclJlc291cmNl
CiAgICAgfTsKIAotICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3RvclBhZ2VBZ2VudD4gY3Jl
YXRlKEluc3RydW1lbnRpbmdBZ2VudHMqLCBQYWdlKiwgSW5zcGVjdG9yQWdlbnQqLCBJbnNwZWN0
b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3RvckNsaWVudCopOworICAg
IHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3RvclBhZ2VBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRp
bmdBZ2VudHMqLCBQYWdlKiwgSW5zcGVjdG9yQWdlbnQqLCBJbnNwZWN0b3JTdGF0ZSosIEluamVj
dGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3RvckNsaWVudCosIEluc3BlY3Rvck92ZXJsYXkqKTsK
IAogICAgIHN0YXRpYyBib29sIGNhY2hlZFJlc291cmNlQ29udGVudChDYWNoZWRSZXNvdXJjZSos
IFN0cmluZyogcmVzdWx0LCBib29sKiBiYXNlNjRFbmNvZGVkKTsKICAgICBzdGF0aWMgYm9vbCBz
aGFyZWRCdWZmZXJDb250ZW50KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgY29uc3QgU3RyaW5n
JiB0ZXh0RW5jb2RpbmdOYW1lLCBib29sIHdpdGhCYXNlNjRFbmNvZGUsIFN0cmluZyogcmVzdWx0
KTsKQEAgLTEzNSw5ICsxMzcsMTAgQEAgcHVibGljOgogICAgIFN0cmluZyBsb2FkZXJJZChEb2N1
bWVudExvYWRlciopOwogICAgIEZyYW1lKiBhc3NlcnRGcmFtZShFcnJvclN0cmluZyosIFN0cmlu
ZyBmcmFtZUlkKTsKICAgICBzdGF0aWMgRG9jdW1lbnRMb2FkZXIqIGFzc2VydERvY3VtZW50TG9h
ZGVyKEVycm9yU3RyaW5nKiwgRnJhbWUqKTsKKyAgICB2b2lkIGRyYXdJbnNwZWN0b3JPdmVybGF5
KEdyYXBoaWNzQ29udGV4dCYpOwogCiBwcml2YXRlOgotICAgIEluc3BlY3RvclBhZ2VBZ2VudChJ
bnN0cnVtZW50aW5nQWdlbnRzKiwgUGFnZSosIEluc3BlY3RvckFnZW50KiwgSW5zcGVjdG9yU3Rh
dGUqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JDbGllbnQqKTsKKyAgICBJbnNw
ZWN0b3JQYWdlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIFBhZ2UqLCBJbnNwZWN0b3JBZ2Vu
dCosIEluc3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9yQ2xp
ZW50KiwgSW5zcGVjdG9yT3ZlcmxheSopOwogICAgIHZvaWQgdXBkYXRlVmlld01ldHJpY3MoaW50
LCBpbnQsIGRvdWJsZSwgYm9vbCk7CiAKICAgICBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpQYWdl
OjpGcmFtZT4gYnVpbGRPYmplY3RGb3JGcmFtZShGcmFtZSopOwpAQCAtMTQ3LDYgKzE1MCw3IEBA
IHByaXZhdGU6CiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2luamVjdGVkU2NyaXB0TWFu
YWdlcjsKICAgICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50OwogICAgIEluc3BlY3RvckZyb250
ZW5kOjpQYWdlKiBtX2Zyb250ZW5kOworICAgIEluc3BlY3Rvck92ZXJsYXkqIG1fb3ZlcmxheTsK
ICAgICBsb25nIG1fbGFzdFNjcmlwdElkZW50aWZpZXI7CiAgICAgU3RyaW5nIG1fcGVuZGluZ1Nj
cmlwdFRvRXZhbHVhdGVPbkxvYWRPbmNlOwogICAgIFN0cmluZyBtX3NjcmlwdFRvRXZhbHVhdGVP
bkxvYWRPbmNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1
Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2Vu
dC5jcHAKaW5kZXggYTU4NmVkZjNmZDQxMDhjOWQwNzkyYzBiZGZlYmUxZTgzZmFmZjg2YS4uYzFl
NjI3NTNkMjE5ZGFhOTYwMDc5MGI2NWJiNzE4Yzg0M2Y4Y2Y5YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCkBAIC00MCwxMyArNDAsMTMgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRyPFBhZ2VEZWJ1Z2dlckFnZW50PiBQ
YWdlRGVidWdnZXJBZ2VudDo6Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRp
bmdBZ2VudHMsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgUGFnZSogaW5zcGVjdGVk
UGFnZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCitQYXNz
T3duUHRyPFBhZ2VEZWJ1Z2dlckFnZW50PiBQYWdlRGVidWdnZXJBZ2VudDo6Y3JlYXRlKEluc3Ry
dW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclN0YXRlKiBpbnNw
ZWN0b3JTdGF0ZSwgUGFnZSogaW5zcGVjdGVkUGFnZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBp
bmplY3RlZFNjcmlwdE1hbmFnZXIsIEluc3BlY3Rvck92ZXJsYXkqIG92ZXJsYXkpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBQYWdlRGVidWdnZXJBZ2VudChpbnN0cnVtZW50aW5nQWdlbnRz
LCBpbnNwZWN0b3JTdGF0ZSwgaW5zcGVjdGVkUGFnZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKSk7
CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQYWdlRGVidWdnZXJBZ2VudChpbnN0cnVtZW50aW5n
QWdlbnRzLCBpbnNwZWN0b3JTdGF0ZSwgaW5zcGVjdGVkUGFnZSwgaW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyLCBvdmVybGF5KSk7CiB9CiAKLVBhZ2VEZWJ1Z2dlckFnZW50OjpQYWdlRGVidWdnZXJBZ2Vu
dChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0
ZSogaW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIEluamVjdGVkU2NyaXB0TWFu
YWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQotICAgIDogSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dChpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnNwZWN0b3JTdGF0ZSwgaW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyKQorUGFnZURlYnVnZ2VyQWdlbnQ6OlBhZ2VEZWJ1Z2dlckFnZW50KEluc3RydW1lbnRpbmdB
Z2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0
ZSwgUGFnZSogaW5zcGVjdGVkUGFnZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNj
cmlwdE1hbmFnZXIsIEluc3BlY3Rvck92ZXJsYXkqIG92ZXJsYXkpCisgICAgOiBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlLCBpbmplY3Rl
ZFNjcmlwdE1hbmFnZXIsIG92ZXJsYXkpCiAgICAgLCBtX2luc3BlY3RlZFBhZ2UoaW5zcGVjdGVk
UGFnZSkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVi
dWdnZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50
LmgKaW5kZXggOWRiZDUxM2Y5ZjFhMjhiYjk4NDI0OTEzNTc4MTQ4NmM3M2MzMjYxOC4uMDZmMTc3
NzgxODdjYTAzMTE3YWVhMGE0ODY2MmM0NjJmMDU1MWE1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmgKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3MgUGFn
ZURlYnVnZ2VyQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoUGFnZURlYnVnZ2VyQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFBhZ2VEZWJ1Z2dlckFn
ZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclN0YXRlKiwgUGFnZSos
IEluamVjdGVkU2NyaXB0TWFuYWdlciopOworICAgIHN0YXRpYyBQYXNzT3duUHRyPFBhZ2VEZWJ1
Z2dlckFnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclN0YXRlKiwg
UGFnZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3Rvck92ZXJsYXkqKTsKICAgICB2
aXJ0dWFsIH5QYWdlRGVidWdnZXJBZ2VudCgpOwogCiBwcml2YXRlOgpAQCAtNTYsNyArNTYsNyBA
QCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZv
ckV2YWwoRXJyb3JTdHJpbmcqLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCk7CiAKLSAg
ICBQYWdlRGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yU3RhdGUq
LCBQYWdlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKik7CisgICAgUGFnZURlYnVnZ2VyQWdlbnQo
SW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclN0YXRlKiwgUGFnZSosIEluamVjdGVkU2Ny
aXB0TWFuYWdlciosIEluc3BlY3Rvck92ZXJsYXkqKTsKICAgICBQYWdlKiBjb25zdCBtX2luc3Bl
Y3RlZFBhZ2U7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29y
a2VyRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyRGVi
dWdnZXJBZ2VudC5jcHAKaW5kZXggYzc1YWY0YTZlNGMwZjRlOTk2ZjM1ZDhhM2E3ODkxNjE1MzE3
MTYyZi4uMTU4OWZjMzBmNDU2NGQ5M2UyN2JmMjdlYWI1NTc1ZDRiNjA2YTUxNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcApAQCAtODYs
NyArODYsNyBAQCBQYXNzT3duUHRyPFdvcmtlckRlYnVnZ2VyQWdlbnQ+IFdvcmtlckRlYnVnZ2Vy
QWdlbnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKgogfQogCiBXb3JrZXJEZWJ1Z2dlckFn
ZW50OjpXb3JrZXJEZWJ1Z2dlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRp
bmdBZ2VudHMsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgV29ya2VyQ29udGV4dCog
aW5zcGVjdGVkV29ya2VyQ29udGV4dCwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNj
cmlwdE1hbmFnZXIpCi0gICAgOiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KGluc3RydW1lbnRpbmdB
Z2VudHMsIGluc3BlY3RvclN0YXRlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCisgICAgOiBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlLCBp
bmplY3RlZFNjcmlwdE1hbmFnZXIsIDApCiAgICAgLCBtX3NjcmlwdERlYnVnU2VydmVyKGluc3Bl
Y3RlZFdvcmtlckNvbnRleHQpCiAgICAgLCBtX2luc3BlY3RlZFdvcmtlckNvbnRleHQoaW5zcGVj
dGVkV29ya2VyQ29udGV4dCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRl
eCAxODgxNzU5MzcwNTUwYWUxZTQ3N2EzZTE1ZThhYWVjZGEzNmQwZjMxLi5kNDZlNDY2NWNjMTY0
Yjc5Zjc4MTBlZDJhYWMxNTYzODA5MTkwMDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiQ2xpZW50UmVjdC5oIgogI2luY2x1
ZGUgIkNsaWVudFJlY3RMaXN0LmgiCiAjaW5jbHVkZSAiQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2Vy
LmgiCi0jaW5jbHVkZSAiRE9NTm9kZUhpZ2hsaWdodGVyLmgiCiAjaW5jbHVkZSAiRE9NU3RyaW5n
TGlzdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXIu
aCIKQEAgLTQ5LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yQ291bnRlcnMuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JPdmVybGF5LmgiCiAjaW5jbHVkZSAiSW5z
dHJ1bWVudGluZ0FnZW50cy5oIgogI2luY2x1ZGUgIkludGVybmFsU2V0dGluZ3MuaCIKICNpbmNs
dWRlICJJbnRSZWN0LmgiCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152534</attachid>
            <date>2012-07-16 07:48:54 -0700</date>
            <delta_ts>2012-07-16 08:55:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90880-20120716184852.patch</filename>
            <type>text/plain</type>
            <size>91500</size>
            <attacher name="Sergey Rogulenko">rogulenko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTZiZmVjMmM0ZGZkYTI1
NmYwZDlhM2U2Zjc4NzllYmY2YjVkNzY1ZC4uNjI3YmU5MzY4MDc4ZWZiMjRkMWQ5ZWJiOTE2MmQx
OTExODZiNTQ5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDEyLTA3LTE2ICBTZXJn
ZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogYWRkaW5nIHBhdXNlIGljb24gZm9yIEphdmFTY3JpcHQgZGVidWdnaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg4MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yZWQgRE9NTm9k
ZUhpZ2hsaWdodGVyIGludG8gSW5zcGVjdG9yT3ZlcmxheSBjbGFzcyBhbmQgYWRkZWQgYSBmZWF0
dXJlIHRvIHNob3cgYSAicGF1c2UiIHNjcmVlbiB3aGVuCisgICAgICAgIHRoZSBKYXZhc2NyaXB0
IGRlYnVnZ2VyIGlzIHBhdXNlZC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFsbEluT25lLmNwcDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXI6OmRyYXdIaWdobGlnaHQpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKElu
c3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6SW5zcGVjdG9yRE9N
QWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6aGlkZUhpZ2hsaWdodCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Z2V0SGlnaGxpZ2h0KToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmNyZWF0ZSk6CisgICAgICAgIChJbnNw
ZWN0b3JET01BZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5zcGVj
dG9yRGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmRpZFBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRp
ZENvbnRpbnVlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6Okluc3BlY3Rvck92ZXJsYXkpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdPdXRsaW5lKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmdldEhpZ2hsaWdodCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JPdmVybGF5OjpzZXRIaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yT3ZlcmxheTo6c2V0U2hvdWxkU2hvd1BhdXNlV2FybmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5Ojp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yT3ZlcmxheTo6ZHJhd0hpZ2hsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JPdmVybGF5OjpkcmF3UGF1c2VXYXJuaW5nKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yT3ZlcmxheS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5v
ZGVIaWdobGlnaHRlci5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChIaWdobGlnaHRE
YXRhKToKKyAgICAgICAgKEhpZ2hsaWdodCk6CisgICAgICAgIChJbnNwZWN0b3JPdmVybGF5KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmNyZWF0ZSk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JQYWdlQWdlbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdl
QWdlbnQ6Okluc3BlY3RvclBhZ2VBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmRyYXdJbnNwZWN0b3JPdmVybGF5KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpkaWRQYWludCk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgICogaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2VEZWJ1Z2dlckFnZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZURlYnVn
Z2VyQWdlbnQ6OlBhZ2VEZWJ1Z2dlckFnZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvUGFnZURl
YnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKFBhZ2VEZWJ1Z2dlckFnZW50KToKKyAgICAgICAgKiBp
bnNwZWN0b3IvV29ya2VyRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJEZWJ1Z2dlckFnZW50OjpXb3JrZXJEZWJ1Z2dlckFnZW50KToKKyAgICAgICAgKiB0ZXN0aW5n
L0ludGVybmFscy5jcHA6CisKIDIwMTItMDctMTUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dh
cmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCBtYWtlIGRpc3RjaGVj
ay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNjAzY2UyMTk2YzE4MjI4NDM0NWJkYzdmYmUzZGE5
NmUxMjBiMDQ0Zi4uNGMxZjllODk5MGI4ZWJmNjRiOTY1MDVhNjVkYWE3MjM2MWM3ZDA0MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKQEAgLTk0MCw3ICs5NDAsNiBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VT
CiAgICAgaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcAogICAgIGluc3BlY3Rvci9Db250ZW50
U2VhcmNoVXRpbHMuY3BwCiAgICAgaW5zcGVjdG9yL0RPTUVkaXRvci5jcHAKLSAgICBpbnNwZWN0
b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcAogICAgIGluc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQu
Y3BwCiAgICAgaW5zcGVjdG9yL0lkZW50aWZpZXJzRmFjdG9yeS5jcHAKICAgICBpbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHQuY3BwCkBAIC05NzIsNiArOTcxLDcgQEAgU0VUKFdlYkNvcmVfU09VUkNF
UwogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKICAgICBpbnNwZWN0
b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JN
ZW1vcnlBZ2VudC5jcHAKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKICAgICBp
bnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVj
dG9yUmVzb3VyY2VBZ2VudC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUnVudGltZUFnZW50
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggMzcyMTM1ZTA4ZDE1N2VjYmM0
OGY2OGU3MzY5YmYxMTIwNWEyYzFlMi4uM2NiYmQ2YzliNjdiYTExMTkyYTI2MTk2ZGNjMzUyOWRi
MjhhN2M1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0yNjkzLDggKzI2OTMs
NiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db250
ZW50U2VhcmNoVXRpbHMuaCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTUVkaXRvci5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01FZGl0b3IuaCBcCi0JU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAgXAotCVNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Q
YXRjaFN1cHBvcnQuaCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lkZW50aWZpZXJzRmFj
dG9yeS5jcHAgXApAQCAtMjc1OSw2ICsyNzU3LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggXAogCVNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5oIFwKKwlTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmggXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JQYWdlQWdlbnQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUGFnZUFnZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9m
aWxlckFnZW50LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIv
U291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA1ZGFjMmIwNWQwN2NkNmE2Njc4ZjI3YzRk
Yzk2ZjE1MmRjYmI5MjQ2Li5mZTA0YzE5ZTM0YWJhOTIyMjUxNTkwMWNkZWMwOTJiMDFjMWFhMzgy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkKQEAgLTg5Nyw3ICs4OTcsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBpbnNw
ZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwIFwKICAgICBpbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0
aWxzLmNwcCBcCiAgICAgaW5zcGVjdG9yL0RPTUVkaXRvci5jcHAgXAotICAgIGluc3BlY3Rvci9E
T01Ob2RlSGlnaGxpZ2h0ZXIuY3BwIFwKICAgICBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNw
cCBcCiAgICAgaW5zcGVjdG9yL0lkZW50aWZpZXJzRmFjdG9yeS5jcHAgXAogICAgIGluc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdC5jcHAgXApAQCAtOTI2LDYgKzkyNSw3IEBAIFNPVVJDRVMgKz0gXAog
ICAgIGluc3BlY3Rvci9JbnNwZWN0b3JIaXN0b3J5LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlB
Z2VudC5jcHAgXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcCBcCiAgICAgaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JQ
cm9maWxlckFnZW50LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQu
Y3BwIFwKQEAgLTIwNjAsNyArMjA2MCw2IEBAIEhFQURFUlMgKz0gXAogICAgIGluc3BlY3Rvci9D
b25zb2xlTWVzc2FnZS5oIFwKICAgICBpbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxzLmggXAog
ICAgIGluc3BlY3Rvci9ET01FZGl0b3IuaCBcCi0gICAgaW5zcGVjdG9yL0RPTU5vZGVIaWdobGln
aHRlci5oIFwKICAgICBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmggXAogICAgIGluc3BlY3Rv
ci9JZGVudGlmaWVyc0ZhY3RvcnkuaCBcCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Lmgg
XApAQCAtMjA5MSw2ICsyMDkwLDcgQEAgSEVBREVSUyArPSBcCiAgICAgaW5zcGVjdG9yL0luc3Bl
Y3Rvckhpc3RvcnkuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5o
IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuaCBcCisgICAgaW5zcGVjdG9y
L0luc3BlY3Rvck92ZXJsYXkuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5o
IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIFwKICAgICBpbnNwZWN0
b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBmM2Y3N2Vh
NDNhZGFjNWIxOWYwOWIzZTBjYWQ0M2JhZTVhNDc5MTU0Li41NTNkYjZlNjU1MmU1MjhlNGNhNzc5
ZDBiYjcxMjY3YWVmNTkyNDAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yNzgxLDggKzI3ODEsNiBA
QAogICAgICAgICAgICAgJ2luc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbHMuaCcsCiAgICAgICAg
ICAgICAnaW5zcGVjdG9yL0RPTUVkaXRvci5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9E
T01FZGl0b3IuaCcsCi0gICAgICAgICAgICAnaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5j
cHAnLAotICAgICAgICAgICAgJ2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaCcsCiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAnLAogICAgICAgICAgICAgJ2lu
c3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0lkZW50
aWZpZXJzRmFjdG9yeS5jcHAnLApAQCAtMjg0MCw2ICsyODM4LDggQEAKICAgICAgICAgICAgICdp
bnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgnLAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9J
bnNwZWN0b3JNZW1vcnlBZ2VudC5oJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9y
T3ZlcmxheS5jcHAnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5Lmgn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwJywKICAgICAg
ICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgnLAogICAgICAgICAgICAgJ2lu
c3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDUzYjIyNGMzYjQ5OGE3MDRjZWEzMjg3
ODIzOThhNmM2ODVjNThiNGQuLjdmYTJiNTE4NTM5M2EzNjFkNjQ1Yjg3ODhjOWEzY2IzOTk5MjEx
NzMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBA
IC03MzQ1MSwzMCArNzM0NTEsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcRE9NTm9kZUhpZ2hsaWdodGVyLmNwcCIKLQkJCQk+
Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCi0JCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1l
PSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0J
CQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCi0JCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1l
PSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0J
CQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXERPTU5v
ZGVIaWdobGlnaHRlci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCiAJCQkJUmVsYXRp
dmVQYXRoPSIuLlxpbnNwZWN0b3JcRE9NUGF0Y2hTdXBwb3J0LmNwcCIKIAkJCQk+CiAJCQkJPEZp
bGVDb25maWd1cmF0aW9uCkBAIC03NDI0Nyw2ICs3NDIyMywzMCBAQAogCQkJCT4KIAkJCTwvRmls
ZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yT3Zl
cmxheS5jcHAiCisJCQkJPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxl
YXNlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8
VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVD
b25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJQcm9kdWN0
aW9ufFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8
VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVD
b25maWd1cmF0aW9uPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGluc3BlY3RvclxJbnNwZWN0b3JPdmVybGF5LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZp
bGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JQYWdlQWdlbnQuY3Bw
IgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGU0YzcxMDBkNjFjNTIwODNmMzgyNzFmMmE3Mjc1NDc1NDY4ZWRiMmMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MjkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0KLSNpbmNs
dWRlICJET01Ob2RlSGlnaGxpZ2h0ZXIuaCIKLQotI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNs
dWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGb250RmFtaWx5LmgiCi0jaW5jbHVkZSAiRnJh
bWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCi0jaW5jbHVkZSAiTm9kZS5oIgotI2luY2x1
ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgotI2luY2x1ZGUgIlJlbmRlckJveE1vZGVs
T2JqZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCi0jaW5jbHVkZSAiUmVuZGVyT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTdHlsZWRFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiVGV4dFJ1bi5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgewotCi0jaWYgT1MoV0lORE9X
UykKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBmb250SGVpZ2h0UHggPSAxMjsKLSNlbGlmIE9TKE1B
Q19PU19YKSB8fCBPUyhVTklYKQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZvbnRIZWlnaHRQeCA9
IDExOwotI2VuZGlmCi0KLWNvbnN0IHN0YXRpYyBpbnQgcmVjdEluZmxhdGVQeCA9IDQ7Ci1jb25z
dCBzdGF0aWMgaW50IGJvcmRlcldpZHRoUHggPSAxOwotY29uc3Qgc3RhdGljIGludCB0b29sdGlw
UGFkZGluZyA9IDQ7Ci0KLWNvbnN0IHN0YXRpYyBpbnQgYXJyb3dUaXBPZmZzZXQgPSAyMDsKLWNv
bnN0IHN0YXRpYyBmbG9hdCBhcnJvd0hlaWdodCA9IDc7Ci1jb25zdCBzdGF0aWMgZmxvYXQgYXJy
b3dIYWxmV2lkdGggPSA3OwotCi1QYXRoIHF1YWRUb1BhdGgoY29uc3QgRmxvYXRRdWFkJiBxdWFk
KQotewotICAgIFBhdGggcXVhZFBhdGg7Ci0gICAgcXVhZFBhdGgubW92ZVRvKHF1YWQucDEoKSk7
Ci0gICAgcXVhZFBhdGguYWRkTGluZVRvKHF1YWQucDIoKSk7Ci0gICAgcXVhZFBhdGguYWRkTGlu
ZVRvKHF1YWQucDMoKSk7Ci0gICAgcXVhZFBhdGguYWRkTGluZVRvKHF1YWQucDQoKSk7Ci0gICAg
cXVhZFBhdGguY2xvc2VTdWJwYXRoKCk7Ci0gICAgcmV0dXJuIHF1YWRQYXRoOwotfQotCi12b2lk
IGRyYXdPdXRsaW5lZFF1YWQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1
YWQmIHF1YWQsIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IsIGNvbnN0IENvbG9yJiBvdXRsaW5lQ29s
b3IpCi17Ci0gICAgc3RhdGljIGNvbnN0IGludCBvdXRsaW5lVGhpY2tuZXNzID0gMjsKLQotICAg
IFBhdGggcXVhZFBhdGggPSBxdWFkVG9QYXRoKHF1YWQpOwotCi0gICAgLy8gQ2xpcCBvdXQgdGhl
IHF1YWQsIHRoZW4gZHJhdyB3aXRoIGEgMnB4IHN0cm9rZSB0byBnZXQgYSBwaXhlbAotICAgIC8v
IG9mIG91dGxpbmUgKGJlY2F1c2UgaW5mbGF0aW5nIGEgcXVhZCBpcyBoYXJkKQotICAgIHsKLSAg
ICAgICAgY29udGV4dC5zYXZlKCk7Ci0gICAgICAgIGNvbnRleHQuY2xpcE91dChxdWFkUGF0aCk7
Ci0KLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3Mob3V0bGluZVRoaWNrbmVzcyk7
Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3Iob3V0bGluZUNvbG9yLCBDb2xvclNwYWNl
RGV2aWNlUkdCKTsKLSAgICAgICAgY29udGV4dC5zdHJva2VQYXRoKHF1YWRQYXRoKTsKLQotICAg
ICAgICBjb250ZXh0LnJlc3RvcmUoKTsKLSAgICB9Ci0KLSAgICAvLyBOb3cgZG8gdGhlIGZpbGwK
LSAgICBjb250ZXh0LnNldEZpbGxDb2xvcihmaWxsQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0Ip
OwotICAgIGNvbnRleHQuZmlsbFBhdGgocXVhZFBhdGgpOwotfQotCi12b2lkIGRyYXdPdXRsaW5l
ZFF1YWRXaXRoQ2xpcChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYg
cXVhZCwgY29uc3QgRmxvYXRRdWFkJiBjbGlwUXVhZCwgY29uc3QgQ29sb3ImIGZpbGxDb2xvcikK
LXsKLSAgICBjb250ZXh0LnNhdmUoKTsKLSAgICBQYXRoIGNsaXBRdWFkUGF0aCA9IHF1YWRUb1Bh
dGgoY2xpcFF1YWQpOwotICAgIGNvbnRleHQuY2xpcE91dChjbGlwUXVhZFBhdGgpOwotICAgIGRy
YXdPdXRsaW5lZFF1YWQoY29udGV4dCwgcXVhZCwgZmlsbENvbG9yLCBDb2xvcjo6dHJhbnNwYXJl
bnQpOwotICAgIGNvbnRleHQucmVzdG9yZSgpOwotfQotCi12b2lkIGRyYXdIaWdobGlnaHRGb3JC
b3goR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIGNvbnRlbnRRdWFk
LCBjb25zdCBGbG9hdFF1YWQmIHBhZGRpbmdRdWFkLCBjb25zdCBGbG9hdFF1YWQmIGJvcmRlclF1
YWQsIGNvbnN0IEZsb2F0UXVhZCYgbWFyZ2luUXVhZCwgSGlnaGxpZ2h0RGF0YSogaGlnaGxpZ2h0
RGF0YSkKLXsKLSAgICBib29sIGhhc01hcmdpbiA9IGhpZ2hsaWdodERhdGEtPm1hcmdpbiAhPSBD
b2xvcjo6dHJhbnNwYXJlbnQ7Ci0gICAgYm9vbCBoYXNCb3JkZXIgPSBoaWdobGlnaHREYXRhLT5i
b3JkZXIgIT0gQ29sb3I6OnRyYW5zcGFyZW50OwotICAgIGJvb2wgaGFzUGFkZGluZyA9IGhpZ2hs
aWdodERhdGEtPnBhZGRpbmcgIT0gQ29sb3I6OnRyYW5zcGFyZW50OwotICAgIGJvb2wgaGFzQ29u
dGVudCA9IGhpZ2hsaWdodERhdGEtPmNvbnRlbnQgIT0gQ29sb3I6OnRyYW5zcGFyZW50IHx8IGhp
Z2hsaWdodERhdGEtPmNvbnRlbnRPdXRsaW5lICE9IENvbG9yOjp0cmFuc3BhcmVudDsKLQotICAg
IEZsb2F0UXVhZCBjbGlwUXVhZDsKLSAgICBDb2xvciBjbGlwQ29sb3I7Ci0gICAgaWYgKGhhc01h
cmdpbiAmJiAoIWhhc0JvcmRlciB8fCBtYXJnaW5RdWFkICE9IGJvcmRlclF1YWQpKSB7Ci0gICAg
ICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChjb250ZXh0LCBtYXJnaW5RdWFkLCBib3JkZXJR
dWFkLCBoaWdobGlnaHREYXRhLT5tYXJnaW4pOwotICAgICAgICBjbGlwUXVhZCA9IGJvcmRlclF1
YWQ7Ci0gICAgfQotICAgIGlmIChoYXNCb3JkZXIgJiYgKCFoYXNQYWRkaW5nIHx8IGJvcmRlclF1
YWQgIT0gcGFkZGluZ1F1YWQpKSB7Ci0gICAgICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChj
b250ZXh0LCBib3JkZXJRdWFkLCBwYWRkaW5nUXVhZCwgaGlnaGxpZ2h0RGF0YS0+Ym9yZGVyKTsK
LSAgICAgICAgY2xpcFF1YWQgPSBwYWRkaW5nUXVhZDsKLSAgICB9Ci0gICAgaWYgKGhhc1BhZGRp
bmcgJiYgKCFoYXNDb250ZW50IHx8IHBhZGRpbmdRdWFkICE9IGNvbnRlbnRRdWFkKSkgewotICAg
ICAgICBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAoY29udGV4dCwgcGFkZGluZ1F1YWQsIGNvbnRl
bnRRdWFkLCBoaWdobGlnaHREYXRhLT5wYWRkaW5nKTsKLSAgICAgICAgY2xpcFF1YWQgPSBjb250
ZW50UXVhZDsKLSAgICB9Ci0gICAgaWYgKGhhc0NvbnRlbnQpCi0gICAgICAgIGRyYXdPdXRsaW5l
ZFF1YWQoY29udGV4dCwgY29udGVudFF1YWQsIGhpZ2hsaWdodERhdGEtPmNvbnRlbnQsIGhpZ2hs
aWdodERhdGEtPmNvbnRlbnRPdXRsaW5lKTsKLX0KLQotdm9pZCBkcmF3SGlnaGxpZ2h0Rm9yU1ZH
UmVuZGVyZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBWZWN0b3I8RmxvYXRRdWFk
PiYgYWJzb2x1dGVRdWFkcywgSGlnaGxpZ2h0RGF0YSogaGlnaGxpZ2h0RGF0YSkKLXsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGFic29sdXRlUXVhZHMuc2l6ZSgpOyArK2kpCi0gICAgICAg
IGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgYWJzb2x1dGVRdWFkc1tpXSwgaGlnaGxpZ2h0RGF0
YS0+Y29udGVudCwgQ29sb3I6OnRyYW5zcGFyZW50KTsKLX0KLQotaW50IGRyYXdTdWJzdHJpbmco
Y29uc3QgVGV4dFJ1biYgZ2xvYmFsVGV4dFJ1biwgaW50IG9mZnNldCwgaW50IGxlbmd0aCwgY29u
c3QgQ29sb3ImIHRleHRDb2xvciwgY29uc3QgRm9udCYgZm9udCwgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiB0aXRsZVJlY3QpCi17Ci0gICAgY29udGV4dC5zZXRG
aWxsQ29sb3IodGV4dENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICBjb250ZXh0LmRy
YXdUZXh0KGZvbnQsIGdsb2JhbFRleHRSdW4sIEludFBvaW50KHRpdGxlUmVjdC5waXhlbFNuYXBw
ZWRYKCkgKyByZWN0SW5mbGF0ZVB4LCB0aXRsZVJlY3QucGl4ZWxTbmFwcGVkWSgpICsgZm9udC5m
b250TWV0cmljcygpLmhlaWdodCgpKSwgb2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgpOwotICAgIHJl
dHVybiBvZmZzZXQgKyBsZW5ndGg7Ci19Ci0KLWZsb2F0IGNhbGN1bGF0ZUFycm93VGlwWChjb25z
dCBMYXlvdXRSZWN0JiBhbmNob3JCb3gsIGNvbnN0IExheW91dFJlY3QmIHRpdGxlUmVjdCkKLXsK
LSAgICBjb25zdCBzdGF0aWMgaW50IGFuY2hvclRpcE9mZnNldFB4ID0gMjsKLQotICAgIGludCBt
aW5YID0gdGl0bGVSZWN0LngoKSArIGFycm93SGFsZldpZHRoOwotICAgIGludCBtYXhYID0gdGl0
bGVSZWN0Lm1heFgoKSAtIGFycm93SGFsZldpZHRoOwotICAgIGludCBhbmNob3JYID0gYW5jaG9y
Qm94LngoKTsKLSAgICBpbnQgYW5jaG9yTWF4WCA9IGFuY2hvckJveC5tYXhYKCk7Ci0KLSAgICBp
bnQgeCA9IHRpdGxlUmVjdC54KCkgKyBhcnJvd1RpcE9mZnNldDsgLy8gRGVmYXVsdCB0b29sdGlw
IHBvc2l0aW9uLgotICAgIGlmICh4IDwgYW5jaG9yWCkKLSAgICAgICAgeCA9IGFuY2hvclggKyBh
bmNob3JUaXBPZmZzZXRQeDsKLSAgICBlbHNlIGlmICh4ID4gYW5jaG9yTWF4WCkKLSAgICAgICAg
eCA9IGFuY2hvck1heFggLSBhbmNob3JUaXBPZmZzZXRQeDsKLQotICAgIGlmICh4IDwgbWluWCkK
LSAgICAgICAgeCA9IG1pblg7Ci0gICAgZWxzZSBpZiAoeCA+IG1heFgpCi0gICAgICAgIHggPSBt
YXhYOwotCi0gICAgcmV0dXJuIHg7Ci19Ci0KLXZvaWQgc2V0VXBGb250RGVzY3JpcHRpb24oRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFdlYkNvcmU6OlNldHRpbmdzKiBzZXR0aW5n
cykKLXsKLSNkZWZpbmUgVE9PTFRJUF9GT05UX0ZBTUlMSUVTKHNpemUsIC4uLikgXAotc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIHRvb2x0aXBGb250RmFjZVNpemUgPSBzaXplO1wKLXN0YXRpYyBjb25z
dCBBdG9taWNTdHJpbmcqIHRvb2x0aXBGb250RmFjZVtzaXplXSA9IHsgX19WQV9BUkdTX18gfTsK
LQotI2lmIE9TKFdJTkRPV1MpCi1UT09MVElQX0ZPTlRfRkFNSUxJRVMoMiwgbmV3IEF0b21pY1N0
cmluZygiQ29uc29sYXMiKSwgbmV3IEF0b21pY1N0cmluZygiTHVjaWRhIENvbnNvbGUiKSkKLSNl
bGlmIE9TKE1BQ19PU19YKQotVE9PTFRJUF9GT05UX0ZBTUlMSUVTKDIsIG5ldyBBdG9taWNTdHJp
bmcoIk1lbmxvIiksIG5ldyBBdG9taWNTdHJpbmcoIk1vbmFjbyIpKQotI2VsaWYgT1MoVU5JWCkK
LVRPT0xUSVBfRk9OVF9GQU1JTElFUygxLCBuZXcgQXRvbWljU3RyaW5nKCJkZWphdnUgc2FucyBt
b25vIikpCi0jZW5kaWYKLS8vIEluIHRoZSBkZWZhdWx0IGNhc2UsIHdlIGdldCB0aGUgc2V0dGlu
Z3MtcHJvdmlkZWQgbW9ub3NwYWNlIGZvbnQuCi0KLSN1bmRlZiBUT09MVElQX0ZPTlRfRkFNSUxJ
RVMKLQotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdzLT5mb250
UmVuZGVyaW5nTW9kZSgpKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGZv
bnRIZWlnaHRQeCk7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZpeGVkRm9udEZhbWlseSA9
IHNldHRpbmdzLT5maXhlZEZvbnRGYW1pbHkoKTsKLSAgICBpZiAoIWZpeGVkRm9udEZhbWlseS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9u
dERlc2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHkpOwotICAgICAgICBGb250RmFtaWx5KiBjdXJy
ZW50RmFtaWx5ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvb2x0aXBG
b250RmFjZVNpemU7ICsraSkgewotICAgICAgICAgICAgaWYgKCFjdXJyZW50RmFtaWx5KSB7Ci0g
ICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KCp0
b29sdGlwRm9udEZhY2VbaV0pOwotICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJz
dEZhbWlseSgpLmFwcGVuZEZhbWlseSgwKTsKLSAgICAgICAgICAgICAgICBjdXJyZW50RmFtaWx5
ID0gJmZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpOwotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBSZWZQdHI8U2hhcmVkRm9udEZhbWlseT4gbmV3RmFtaWx5ID0gU2hh
cmVkRm9udEZhbWlseTo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgbmV3RmFtaWx5LT5zZXRG
YW1pbHkoKnRvb2x0aXBGb250RmFjZVtpXSk7Ci0gICAgICAgICAgICAgICAgY3VycmVudEZhbWls
eS0+YXBwZW5kRmFtaWx5KG5ld0ZhbWlseSk7Ci0gICAgICAgICAgICAgICAgY3VycmVudEZhbWls
eSA9IG5ld0ZhbWlseS5nZXQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBS
ZWZQdHI8U2hhcmVkRm9udEZhbWlseT4gbmV3RmFtaWx5ID0gU2hhcmVkRm9udEZhbWlseTo6Y3Jl
YXRlKCk7Ci0gICAgICAgIG5ld0ZhbWlseS0+c2V0RmFtaWx5KGZpeGVkRm9udEZhbWlseSk7Ci0g
ICAgICAgIGN1cnJlbnRGYW1pbHktPmFwcGVuZEZhbWlseShuZXdGYW1pbHkpOwotICAgICAgICBj
dXJyZW50RmFtaWx5ID0gbmV3RmFtaWx5LmdldCgpOwotICAgIH0KLX0KLQotdm9pZCBkcmF3RWxl
bWVudFRpdGxlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgTm9kZSogbm9kZSwgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciwgY29uc3QgSW50UmVjdCYgYm91bmRpbmdCb3gsIGNvbnN0IEludFJlY3Qm
IGFuY2hvckJveCwgY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCwgV2ViQ29yZTo6U2V0dGlu
Z3MqIHNldHRpbmdzKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIGJhY2tncm91
bmRDb2xvciwgKDI1NSwgMjU1LCAxOTQpKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9y
LCB0YWdDb2xvciwgKDEzNiwgMTgsIDEyOCkpOyAvLyBTYW1lIGFzIC53ZWJraXQtaHRtbC10YWcu
Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgYXR0ckNvbG9yLCAoMjYsIDI2LCAxNjYp
KTsgLy8gU2FtZSBhcyAud2Via2l0LWh0bWwtYXR0cmlidXRlLXZhbHVlLgotICAgIERFRklORV9T
VEFUSUNfTE9DQUwoQ29sb3IsIG5vcm1hbENvbG9yLCAoQ29sb3I6OmJsYWNrKSk7Ci0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChDb2xvciwgcHhBbmRCb3JkZXJDb2xvciwgKDEyOCwgMTI4LCAxMjgp
KTsKLQotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBweFN0cmluZywgKCJweCIpKTsK
LSAgICBjb25zdCBzdGF0aWMgVUNoYXIgdGltZXNVQ2hhcltdID0geyAweDAwMjAsIDB4MDBENywg
MHgwMDIwLCAwIH07Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHRpbWVzU3RyaW5n
LCAodGltZXNVQ2hhcikpOyAvLyAmdGltZXM7IHN0cmluZwotCi0gICAgRm9udENhY2hlUHVyZ2VQ
cmV2ZW50ZXIgZm9udENhY2hlUHVyZ2VQcmV2ZW50ZXI7Ci0KLSAgICBFbGVtZW50KiBlbGVtZW50
ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOwotICAgIGJvb2wgaXNYSFRNTCA9IGVsZW1l
bnQtPmRvY3VtZW50KCktPmlzWEhUTUxEb2N1bWVudCgpOwotICAgIFN0cmluZ0J1aWxkZXIgbm9k
ZVRpdGxlOwotICAgIG5vZGVUaXRsZS5hcHBlbmQoaXNYSFRNTCA/IGVsZW1lbnQtPm5vZGVOYW1l
KCkgOiBlbGVtZW50LT5ub2RlTmFtZSgpLmxvd2VyKCkpOwotICAgIHVuc2lnbmVkIHRhZ05hbWVM
ZW5ndGggPSBub2RlVGl0bGUubGVuZ3RoKCk7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlk
VmFsdWUgPSBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpOwotICAgIHVuc2lnbmVkIGlkU3RyaW5n
TGVuZ3RoID0gMDsKLSAgICBTdHJpbmcgaWRTdHJpbmc7Ci0gICAgaWYgKCFpZFZhbHVlLmlzTnVs
bCgpICYmICFpZFZhbHVlLmlzRW1wdHkoKSkgewotICAgICAgICBub2RlVGl0bGUuYXBwZW5kKCIj
Iik7Ci0gICAgICAgIG5vZGVUaXRsZS5hcHBlbmQoaWRWYWx1ZSk7Ci0gICAgICAgIGlkU3RyaW5n
TGVuZ3RoID0gMSArIGlkVmFsdWUubGVuZ3RoKCk7Ci0gICAgfQotCi0gICAgSGFzaFNldDxBdG9t
aWNTdHJpbmc+IHVzZWRDbGFzc05hbWVzOwotICAgIHVuc2lnbmVkIGNsYXNzZXNTdHJpbmdMZW5n
dGggPSAwOwotICAgIGlmIChlbGVtZW50LT5oYXNDbGFzcygpICYmIGVsZW1lbnQtPmlzU3R5bGVk
RWxlbWVudCgpKSB7Ci0gICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFtZXNT
dHJpbmcgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmNsYXNzTmFtZXMo
KTsKLSAgICAgICAgc2l6ZV90IGNsYXNzTmFtZUNvdW50ID0gY2xhc3NOYW1lc1N0cmluZy5zaXpl
KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2xhc3NOYW1lQ291bnQ7ICsraSkg
ewotICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjbGFzc05hbWUgPSBjbGFzc05hbWVz
U3RyaW5nW2ldOwotICAgICAgICAgICAgaWYgKHVzZWRDbGFzc05hbWVzLmNvbnRhaW5zKGNsYXNz
TmFtZSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB1c2VkQ2xhc3NO
YW1lcy5hZGQoY2xhc3NOYW1lKTsKLSAgICAgICAgICAgIG5vZGVUaXRsZS5hcHBlbmQoIi4iKTsK
LSAgICAgICAgICAgIG5vZGVUaXRsZS5hcHBlbmQoY2xhc3NOYW1lKTsKLSAgICAgICAgICAgIGNs
YXNzZXNTdHJpbmdMZW5ndGggKz0gMSArIGNsYXNzTmFtZS5sZW5ndGgoKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBtb2RlbE9iamVjdCA9IHJlbmRlcmVy
LT5pc0JveE1vZGVsT2JqZWN0KCkgPyB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRlcmVyKSA6
IDA7Ci0KLSAgICBTdHJpbmcgd2lkdGhOdW1iZXJQYXJ0ID0gIiAiICsgU3RyaW5nOjpudW1iZXIo
bW9kZWxPYmplY3QgPyBhZGp1c3RGb3JBYnNvbHV0ZVpvb20obW9kZWxPYmplY3QtPnBpeGVsU25h
cHBlZE9mZnNldFdpZHRoKCksIG1vZGVsT2JqZWN0KSA6IGJvdW5kaW5nQm94LndpZHRoKCkpOwot
ICAgIG5vZGVUaXRsZS5hcHBlbmQod2lkdGhOdW1iZXJQYXJ0KTsKLSAgICBub2RlVGl0bGUuYXBw
ZW5kKHB4U3RyaW5nKTsKLSAgICBub2RlVGl0bGUuYXBwZW5kKHRpbWVzU3RyaW5nKTsKLSAgICBT
dHJpbmcgaGVpZ2h0TnVtYmVyUGFydCA9IFN0cmluZzo6bnVtYmVyKG1vZGVsT2JqZWN0ID8gYWRq
dXN0Rm9yQWJzb2x1dGVab29tKG1vZGVsT2JqZWN0LT5waXhlbFNuYXBwZWRPZmZzZXRIZWlnaHQo
KSwgbW9kZWxPYmplY3QpIDogYm91bmRpbmdCb3guaGVpZ2h0KCkpOwotICAgIG5vZGVUaXRsZS5h
cHBlbmQoaGVpZ2h0TnVtYmVyUGFydCk7Ci0gICAgbm9kZVRpdGxlLmFwcGVuZChweFN0cmluZyk7
Ci0KLSAgICBGb250RGVzY3JpcHRpb24gZGVzYzsKLSAgICBzZXRVcEZvbnREZXNjcmlwdGlvbihk
ZXNjLCBzZXR0aW5ncyk7Ci0gICAgRm9udCBmb250ID0gRm9udChkZXNjLCAwLCAwKTsKLSAgICBm
b250LnVwZGF0ZSgwKTsKLQotICAgIFRleHRSdW4gbm9kZVRpdGxlUnVuKG5vZGVUaXRsZS50b1N0
cmluZygpKTsKLSAgICBJbnRQb2ludCB0aXRsZUJhc2VQb2ludCA9IEludFBvaW50KGFuY2hvckJv
eC54KCksIGFuY2hvckJveC5tYXhZKCkgLSAxKTsKLSAgICB0aXRsZUJhc2VQb2ludC5tb3ZlKHJl
Y3RJbmZsYXRlUHgsIHJlY3RJbmZsYXRlUHgpOwotICAgIEludFJlY3QgdGl0bGVSZWN0ID0gZW5j
bG9zaW5nSW50UmVjdChmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KG5vZGVUaXRsZVJ1biwgdGl0
bGVCYXNlUG9pbnQsIGZvbnRIZWlnaHRQeCkpOwotICAgIHRpdGxlUmVjdC5pbmZsYXRlKHJlY3RJ
bmZsYXRlUHgpOwotCi0gICAgLy8gVGhlIGluaXRpYWwgb2Zmc2V0cyBuZWVkZWQgdG8gY29tcGVu
c2F0ZSBmb3IgYSAxcHgtdGhpY2sgYm9yZGVyIHN0cm9rZSAod2hpY2ggaXMgbm90IGEgcGFydCBv
ZiB0aGUgcmVjdGFuZ2xlKS4KLSAgICBpbnQgZHggPSAtYm9yZGVyV2lkdGhQeDsKLSAgICBpbnQg
ZHkgPSBib3JkZXJXaWR0aFB4OwotCi0gICAgLy8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRo
ZSByaWdodCBvZiB2aXNpYmxlUmVjdCwgcmlnaHQtYWxpZ24gdGhlIHRpcCB3aXRoIHRoZSBzYWlk
IGJvdW5kYXJ5LgotICAgIGlmICh0aXRsZVJlY3QubWF4WCgpICsgZHggPiB2aXNpYmxlUmVjdC5t
YXhYKCkpCi0gICAgICAgIGR4ID0gdmlzaWJsZVJlY3QubWF4WCgpIC0gdGl0bGVSZWN0Lm1heFgo
KTsKLQotICAgIC8vIElmIHRoZSB0aXAgc3RpY2tzIGJleW9uZCB0aGUgbGVmdCBvZiB2aXNpYmxl
UmVjdCwgbGVmdC1hbGlnbiB0aGUgdGlwIHdpdGggdGhlIHNhaWQgYm91bmRhcnkuCi0gICAgaWYg
KHRpdGxlUmVjdC54KCkgKyBkeCA8IHZpc2libGVSZWN0LngoKSkKLSAgICAgICAgZHggPSB2aXNp
YmxlUmVjdC54KCkgLSB0aXRsZVJlY3QueCgpIC0gYm9yZGVyV2lkdGhQeDsKLQotICAgIC8vIElm
IHRoZSB0aXAgc3RpY2tzIGJleW9uZCB0aGUgYm90dG9tIG9mIHZpc2libGVSZWN0LCBzaG93IHRo
ZSB0aXAgYXQgdG9wIG9mIGJvdW5kaW5nIGJveC4KLSAgICBpZiAodGl0bGVSZWN0Lm1heFkoKSAr
IGR5ID4gdmlzaWJsZVJlY3QubWF4WSgpKSB7Ci0gICAgICAgIGR5ID0gYW5jaG9yQm94LnkoKSAt
IHRpdGxlUmVjdC5tYXhZKCkgLSBib3JkZXJXaWR0aFB4OwotICAgICAgICAvLyBJZiB0aGUgdGlw
IHN0aWxsIHN0aWNrcyBiZXlvbmQgdGhlIGJvdHRvbSBvZiB2aXNpYmxlUmVjdCwgYm90dG9tLWFs
aWduIHRoZSB0aXAgd2l0aCB0aGUgc2FpZCBib3VuZGFyeS4KLSAgICAgICAgaWYgKHRpdGxlUmVj
dC5tYXhZKCkgKyBkeSA+IHZpc2libGVSZWN0Lm1heFkoKSkKLSAgICAgICAgICAgIGR5ID0gdmlz
aWJsZVJlY3QubWF4WSgpIC0gdGl0bGVSZWN0Lm1heFkoKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0
aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIHRvcCBvZiB2aXNpYmxlUmVjdCwgc2hvdyB0aGUgdGlw
IGF0IHRvcCBvZiB2aXNpYmxlUmVjdC4KLSAgICBpZiAodGl0bGVSZWN0LnkoKSArIGR5IDwgdmlz
aWJsZVJlY3QueSgpKQotICAgICAgICBkeSA9IHZpc2libGVSZWN0LnkoKSAtIHRpdGxlUmVjdC55
KCkgKyBib3JkZXJXaWR0aFB4OwotCi0gICAgdGl0bGVSZWN0Lm1vdmUoZHgsIGR5KTsKLQotICAg
IGJvb2wgaXNBcnJvd0F0VG9wID0gdGl0bGVSZWN0LnkoKSA+IGFuY2hvckJveC55KCk7Ci0gICAg
dGl0bGVSZWN0Lm1vdmUoMCwgdG9vbHRpcFBhZGRpbmcgKiAoaXNBcnJvd0F0VG9wID8gMSA6IC0x
KSk7Ci0KLSAgICB7Ci0gICAgICAgIGZsb2F0IGFycm93VGlwWCA9IGNhbGN1bGF0ZUFycm93VGlw
WChhbmNob3JCb3gsIHRpdGxlUmVjdCk7Ci0gICAgICAgIGludCBhcnJvd0Jhc2VZID0gaXNBcnJv
d0F0VG9wID8gdGl0bGVSZWN0LnkoKSA6IHRpdGxlUmVjdC5tYXhZKCk7Ci0gICAgICAgIGludCBh
cnJvd09wcG9zaXRlWSA9IGlzQXJyb3dBdFRvcCA/IHRpdGxlUmVjdC5tYXhZKCkgOiB0aXRsZVJl
Y3QueSgpOwotCi0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnRzWzhdOwotICAgICAgICBwb2ludHNb
MF0gPSBGbG9hdFBvaW50KGFycm93VGlwWCAtIGFycm93SGFsZldpZHRoLCBhcnJvd0Jhc2VZKTsK
LSAgICAgICAgcG9pbnRzWzFdID0gRmxvYXRQb2ludChhcnJvd1RpcFgsIGFycm93QmFzZVkgKyBh
cnJvd0hlaWdodCAqIChpc0Fycm93QXRUb3AgPyAtMSA6IDEpKTsKLSAgICAgICAgcG9pbnRzWzJd
ID0gRmxvYXRQb2ludChhcnJvd1RpcFggKyBhcnJvd0hhbGZXaWR0aCwgYXJyb3dCYXNlWSk7Ci0g
ICAgICAgIHBvaW50c1szXSA9IEZsb2F0UG9pbnQodGl0bGVSZWN0Lm1heFgoKSwgYXJyb3dCYXNl
WSk7Ci0gICAgICAgIHBvaW50c1s0XSA9IEZsb2F0UG9pbnQodGl0bGVSZWN0Lm1heFgoKSwgYXJy
b3dPcHBvc2l0ZVkpOwotICAgICAgICBwb2ludHNbNV0gPSBGbG9hdFBvaW50KHRpdGxlUmVjdC54
KCksIGFycm93T3Bwb3NpdGVZKTsKLSAgICAgICAgcG9pbnRzWzZdID0gRmxvYXRQb2ludCh0aXRs
ZVJlY3QueCgpLCBhcnJvd0Jhc2VZKTsKLSAgICAgICAgcG9pbnRzWzddID0gcG9pbnRzWzBdOwot
Ci0gICAgICAgIFBhdGggcGF0aDsKLSAgICAgICAgcGF0aC5tb3ZlVG8ocG9pbnRzWzBdKTsKLSAg
ICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCA4OyArK2kpCi0gICAgICAgICAgICBwYXRoLmFkZExp
bmVUbyhwb2ludHNbaV0pOwotCi0gICAgICAgIGNvbnRleHQuc2F2ZSgpOwotICAgICAgICBjb250
ZXh0LnRyYW5zbGF0ZSgwLjVmLCAwLjVmKTsKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xv
cihweEFuZEJvcmRlckNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICAgICAgY29udGV4
dC5zZXRGaWxsQ29sb3IoYmFja2dyb3VuZENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAg
ICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoYm9yZGVyV2lkdGhQeCk7Ci0gICAgICAg
IGNvbnRleHQuZmlsbFBhdGgocGF0aCk7Ci0gICAgICAgIGNvbnRleHQuc3Ryb2tlUGF0aChwYXRo
KTsKLSAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgfQotCi0gICAgaW50IGN1cnJlbnRQ
b3MgPSAwOwotICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3Vy
cmVudFBvcywgdGFnTmFtZUxlbmd0aCwgdGFnQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVj
dCk7Ci0gICAgaWYgKGlkU3RyaW5nTGVuZ3RoKQotICAgICAgICBjdXJyZW50UG9zID0gZHJhd1N1
YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIGlkU3RyaW5nTGVuZ3RoLCBhdHRyQ29s
b3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7Ci0gICAgaWYgKGNsYXNzZXNTdHJpbmdMZW5n
dGgpCi0gICAgICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3Vy
cmVudFBvcywgY2xhc3Nlc1N0cmluZ0xlbmd0aCwgYXR0ckNvbG9yLCBmb250LCBjb250ZXh0LCB0
aXRsZVJlY3QpOwotICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwg
Y3VycmVudFBvcywgd2lkdGhOdW1iZXJQYXJ0Lmxlbmd0aCgpLCBub3JtYWxDb2xvciwgZm9udCwg
Y29udGV4dCwgdGl0bGVSZWN0KTsKLSAgICBjdXJyZW50UG9zID0gZHJhd1N1YnN0cmluZyhub2Rl
VGl0bGVSdW4sIGN1cnJlbnRQb3MsIHB4U3RyaW5nLmxlbmd0aCgpICsgdGltZXNTdHJpbmcubGVu
Z3RoKCksIHB4QW5kQm9yZGVyQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7Ci0gICAg
Y3VycmVudFBvcyA9IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBjdXJyZW50UG9zLCBoZWln
aHROdW1iZXJQYXJ0Lmxlbmd0aCgpLCBub3JtYWxDb2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVS
ZWN0KTsKLSAgICBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3VycmVudFBvcywgcHhTdHJp
bmcubGVuZ3RoKCksIHB4QW5kQm9yZGVyQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7
Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbnRlbnRzUXVhZFRvUGFnZShjb25zdCBGcmFtZVZpZXcqIG1h
aW5WaWV3LCBjb25zdCBGcmFtZVZpZXcqIHZpZXcsIEZsb2F0UXVhZCYgcXVhZCkKLXsKLSAgICBx
dWFkLnNldFAxKHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhyb3VuZGVkSW50UG9pbnQocXVhZC5w
MSgpKSkpOwotICAgIHF1YWQuc2V0UDIodmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHJvdW5kZWRJ
bnRQb2ludChxdWFkLnAyKCkpKSk7Ci0gICAgcXVhZC5zZXRQMyh2aWV3LT5jb250ZW50c1RvUm9v
dFZpZXcocm91bmRlZEludFBvaW50KHF1YWQucDMoKSkpKTsKLSAgICBxdWFkLnNldFA0KHZpZXct
PmNvbnRlbnRzVG9Sb290Vmlldyhyb3VuZGVkSW50UG9pbnQocXVhZC5wNCgpKSkpOwotICAgIHF1
YWQgKz0gbWFpblZpZXctPnNjcm9sbE9mZnNldCgpOwotfQotCi1zdGF0aWMgdm9pZCBnZXRPckRy
YXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgSGlnaGxpZ2h0RGF0YSog
aGlnaGxpZ2h0RGF0YSwgSGlnaGxpZ2h0KiBoaWdobGlnaHQpCi17Ci0gICAgTm9kZSogbm9kZSA9
IGhpZ2hsaWdodERhdGEtPm5vZGUuZ2V0KCk7Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgRnJhbWUqIGNvbnRhaW5pbmdGcmFtZSA9IG5vZGUtPmRv
Y3VtZW50KCktPmZyYW1lKCk7Ci0KLSAgICBpZiAoIXJlbmRlcmVyIHx8ICFjb250YWluaW5nRnJh
bWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lVmlldyogY29udGFpbmluZ1ZpZXcgPSBj
b250YWluaW5nRnJhbWUtPnZpZXcoKTsKLSAgICBGcmFtZVZpZXcqIG1haW5WaWV3ID0gY29udGFp
bmluZ0ZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCk7Ci0gICAgSW50UmVjdCBib3Vu
ZGluZ0JveCA9IHBpeGVsU25hcHBlZEludFJlY3QoY29udGFpbmluZ1ZpZXctPmNvbnRlbnRzVG9S
b290VmlldyhyZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSkpOwotICAgIGJvdW5k
aW5nQm94Lm1vdmUobWFpblZpZXctPnNjcm9sbE9mZnNldCgpKTsKLSAgICBJbnRSZWN0IHRpdGxl
QW5jaG9yQm94ID0gYm91bmRpbmdCb3g7Ci0KLSAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QgPSBt
YWluVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgLy8gRG9uJ3QgdHJhbnNsYXRlIHRo
ZSBjb250ZXh0IGlmIHRoZSBmcmFtZSBpcyByZW5kZXJlZCBpbiBwYWdlIGNvb3JkaW5hdGVzLgot
ICAgIGlmIChjb250ZXh0ICYmICFtYWluVmlldy0+ZGVsZWdhdGVzU2Nyb2xsaW5nKCkpCi0gICAg
ICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtdmlzaWJsZVJlY3QueCgpLCAtdmlzaWJsZVJlY3QueSgp
KTsKLQotICAgIC8vIFJlbmRlclNWR1Jvb3Qgc2hvdWxkIGJlIGhpZ2hsaWdodGVkIHRocm91Z2gg
dGhlIGlzQm94KCkgY29kZSBwYXRoLCBhbGwgb3RoZXIgU1ZHIGVsZW1lbnRzIHNob3VsZCBqdXN0
IGR1bXAgdGhlaXIgYWJzb2x1dGVRdWFkcygpLgotI2lmIEVOQUJMRShTVkcpCi0gICAgYm9vbCBp
c1NWR1JlbmRlcmVyID0gcmVuZGVyZXItPm5vZGUoKSAmJiByZW5kZXJlci0+bm9kZSgpLT5pc1NW
R0VsZW1lbnQoKSAmJiAhcmVuZGVyZXItPmlzU1ZHUm9vdCgpOwotI2Vsc2UKLSAgICBib29sIGlz
U1ZHUmVuZGVyZXIgPSBmYWxzZTsKLSNlbmRpZgotCi0gICAgaWYgKGlzU1ZHUmVuZGVyZXIpIHsK
LSAgICAgICAgaGlnaGxpZ2h0LT50eXBlID0gSGlnaGxpZ2h0VHlwZVJlY3RzOwotICAgICAgICBy
ZW5kZXJlci0+YWJzb2x1dGVRdWFkcyhoaWdobGlnaHQtPnF1YWRzKTsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBoaWdobGlnaHQtPnF1YWRzLnNpemUoKTsgKytpKQotICAgICAgICAg
ICAgY29udGVudHNRdWFkVG9QYWdlKG1haW5WaWV3LCBjb250YWluaW5nVmlldywgaGlnaGxpZ2h0
LT5xdWFkc1tpXSk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgICAgICBkcmF3SGln
aGxpZ2h0Rm9yU1ZHUmVuZGVyZXIoKmNvbnRleHQsIGhpZ2hsaWdodC0+cXVhZHMsIGhpZ2hsaWdo
dERhdGEpOwotICAgIH0gZWxzZSBpZiAocmVuZGVyZXItPmlzQm94KCkgfHwgcmVuZGVyZXItPmlz
UmVuZGVySW5saW5lKCkpIHsKLSAgICAgICAgTGF5b3V0UmVjdCBjb250ZW50Qm94OwotICAgICAg
ICBMYXlvdXRSZWN0IHBhZGRpbmdCb3g7Ci0gICAgICAgIExheW91dFJlY3QgYm9yZGVyQm94Owot
ICAgICAgICBMYXlvdXRSZWN0IG1hcmdpbkJveDsKLQotICAgICAgICBpZiAocmVuZGVyZXItPmlz
Qm94KCkpIHsKLSAgICAgICAgICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gdG9SZW5kZXJCb3go
cmVuZGVyZXIpOwotCi0gICAgICAgICAgICAvLyBSZW5kZXJCb3ggcmV0dXJucyB0aGUgInB1cmUi
IGNvbnRlbnQgYXJlYSBib3gsIGV4Y2x1c2l2ZSBvZiB0aGUgc2Nyb2xsYmFycyAoaWYgcHJlc2Vu
dCksIHdoaWNoIGFsc28gY291bnQgdG93YXJkcyB0aGUgY29udGVudCBhcmVhIGluIENTUy4KLSAg
ICAgICAgICAgIGNvbnRlbnRCb3ggPSByZW5kZXJCb3gtPmNvbnRlbnRCb3hSZWN0KCk7Ci0gICAg
ICAgICAgICBjb250ZW50Qm94LnNldFdpZHRoKGNvbnRlbnRCb3gud2lkdGgoKSArIHJlbmRlckJv
eC0+dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpKTsKLSAgICAgICAgICAgIGNvbnRlbnRCb3guc2V0
SGVpZ2h0KGNvbnRlbnRCb3guaGVpZ2h0KCkgKyByZW5kZXJCb3gtPmhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQoKSk7Ci0KLSAgICAgICAgICAgIHBhZGRpbmdCb3ggPSBMYXlvdXRSZWN0KGNvbnRl
bnRCb3gueCgpIC0gcmVuZGVyQm94LT5wYWRkaW5nTGVmdCgpLCBjb250ZW50Qm94LnkoKSAtIHJl
bmRlckJveC0+cGFkZGluZ1RvcCgpLAotICAgICAgICAgICAgICAgICAgICBjb250ZW50Qm94Lndp
ZHRoKCkgKyByZW5kZXJCb3gtPnBhZGRpbmdMZWZ0KCkgKyByZW5kZXJCb3gtPnBhZGRpbmdSaWdo
dCgpLCBjb250ZW50Qm94LmhlaWdodCgpICsgcmVuZGVyQm94LT5wYWRkaW5nVG9wKCkgKyByZW5k
ZXJCb3gtPnBhZGRpbmdCb3R0b20oKSk7Ci0gICAgICAgICAgICBib3JkZXJCb3ggPSBMYXlvdXRS
ZWN0KHBhZGRpbmdCb3gueCgpIC0gcmVuZGVyQm94LT5ib3JkZXJMZWZ0KCksIHBhZGRpbmdCb3gu
eSgpIC0gcmVuZGVyQm94LT5ib3JkZXJUb3AoKSwKLSAgICAgICAgICAgICAgICAgICAgcGFkZGlu
Z0JveC53aWR0aCgpICsgcmVuZGVyQm94LT5ib3JkZXJMZWZ0KCkgKyByZW5kZXJCb3gtPmJvcmRl
clJpZ2h0KCksIHBhZGRpbmdCb3guaGVpZ2h0KCkgKyByZW5kZXJCb3gtPmJvcmRlclRvcCgpICsg
cmVuZGVyQm94LT5ib3JkZXJCb3R0b20oKSk7Ci0gICAgICAgICAgICBtYXJnaW5Cb3ggPSBMYXlv
dXRSZWN0KGJvcmRlckJveC54KCkgLSByZW5kZXJCb3gtPm1hcmdpbkxlZnQoKSwgYm9yZGVyQm94
LnkoKSAtIHJlbmRlckJveC0+bWFyZ2luVG9wKCksCi0gICAgICAgICAgICAgICAgICAgIGJvcmRl
ckJveC53aWR0aCgpICsgcmVuZGVyQm94LT5tYXJnaW5XaWR0aCgpLCBib3JkZXJCb3guaGVpZ2h0
KCkgKyByZW5kZXJCb3gtPm1hcmdpbkhlaWdodCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIFJlbmRlcklubGluZSogcmVuZGVySW5saW5lID0gdG9SZW5kZXJJbmxpbmUocmVuZGVy
ZXIpOwotCi0gICAgICAgICAgICAvLyBSZW5kZXJJbmxpbmUncyBib3VuZGluZyBib3ggaW5jbHVk
ZXMgcGFkZGluZ3MgYW5kIGJvcmRlcnMsIGV4Y2x1ZGVzIG1hcmdpbnMuCi0gICAgICAgICAgICBi
b3JkZXJCb3ggPSByZW5kZXJJbmxpbmUtPmxpbmVzQm91bmRpbmdCb3goKTsKLSAgICAgICAgICAg
IHBhZGRpbmdCb3ggPSBMYXlvdXRSZWN0KGJvcmRlckJveC54KCkgKyByZW5kZXJJbmxpbmUtPmJv
cmRlckxlZnQoKSwgYm9yZGVyQm94LnkoKSArIHJlbmRlcklubGluZS0+Ym9yZGVyVG9wKCksCi0g
ICAgICAgICAgICAgICAgICAgIGJvcmRlckJveC53aWR0aCgpIC0gcmVuZGVySW5saW5lLT5ib3Jk
ZXJMZWZ0KCkgLSByZW5kZXJJbmxpbmUtPmJvcmRlclJpZ2h0KCksIGJvcmRlckJveC5oZWlnaHQo
KSAtIHJlbmRlcklubGluZS0+Ym9yZGVyVG9wKCkgLSByZW5kZXJJbmxpbmUtPmJvcmRlckJvdHRv
bSgpKTsKLSAgICAgICAgICAgIGNvbnRlbnRCb3ggPSBMYXlvdXRSZWN0KHBhZGRpbmdCb3gueCgp
ICsgcmVuZGVySW5saW5lLT5wYWRkaW5nTGVmdCgpLCBwYWRkaW5nQm94LnkoKSArIHJlbmRlcklu
bGluZS0+cGFkZGluZ1RvcCgpLAotICAgICAgICAgICAgICAgICAgICBwYWRkaW5nQm94LndpZHRo
KCkgLSByZW5kZXJJbmxpbmUtPnBhZGRpbmdMZWZ0KCkgLSByZW5kZXJJbmxpbmUtPnBhZGRpbmdS
aWdodCgpLCBwYWRkaW5nQm94LmhlaWdodCgpIC0gcmVuZGVySW5saW5lLT5wYWRkaW5nVG9wKCkg
LSByZW5kZXJJbmxpbmUtPnBhZGRpbmdCb3R0b20oKSk7Ci0gICAgICAgICAgICAvLyBJZ25vcmUg
bWFyZ2luVG9wIGFuZCBtYXJnaW5Cb3R0b20gZm9yIGlubGluZXMuCi0gICAgICAgICAgICBtYXJn
aW5Cb3ggPSBMYXlvdXRSZWN0KGJvcmRlckJveC54KCkgLSByZW5kZXJJbmxpbmUtPm1hcmdpbkxl
ZnQoKSwgYm9yZGVyQm94LnkoKSwKLSAgICAgICAgICAgICAgICAgICAgYm9yZGVyQm94LndpZHRo
KCkgKyByZW5kZXJJbmxpbmUtPm1hcmdpbldpZHRoKCksIGJvcmRlckJveC5oZWlnaHQoKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBGbG9hdFF1YWQgYWJzQ29udGVudFF1YWQgPSByZW5kZXJlci0+
bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoY29udGVudEJveCkpOwotICAgICAgICBGbG9h
dFF1YWQgYWJzUGFkZGluZ1F1YWQgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9h
dFJlY3QocGFkZGluZ0JveCkpOwotICAgICAgICBGbG9hdFF1YWQgYWJzQm9yZGVyUXVhZCA9IHJl
bmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChib3JkZXJCb3gpKTsKLSAgICAg
ICAgRmxvYXRRdWFkIGFic01hcmdpblF1YWQgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVh
ZChGbG9hdFJlY3QobWFyZ2luQm94KSk7Ci0KLSAgICAgICAgY29udGVudHNRdWFkVG9QYWdlKG1h
aW5WaWV3LCBjb250YWluaW5nVmlldywgYWJzQ29udGVudFF1YWQpOwotICAgICAgICBjb250ZW50
c1F1YWRUb1BhZ2UobWFpblZpZXcsIGNvbnRhaW5pbmdWaWV3LCBhYnNQYWRkaW5nUXVhZCk7Ci0g
ICAgICAgIGNvbnRlbnRzUXVhZFRvUGFnZShtYWluVmlldywgY29udGFpbmluZ1ZpZXcsIGFic0Jv
cmRlclF1YWQpOwotICAgICAgICBjb250ZW50c1F1YWRUb1BhZ2UobWFpblZpZXcsIGNvbnRhaW5p
bmdWaWV3LCBhYnNNYXJnaW5RdWFkKTsKLQotICAgICAgICB0aXRsZUFuY2hvckJveCA9IGFic01h
cmdpblF1YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKLQotICAgICAgICBoaWdobGlnaHQtPnR5
cGUgPSBIaWdobGlnaHRUeXBlTm9kZTsKLSAgICAgICAgaGlnaGxpZ2h0LT5xdWFkcy5hcHBlbmQo
YWJzTWFyZ2luUXVhZCk7Ci0gICAgICAgIGhpZ2hsaWdodC0+cXVhZHMuYXBwZW5kKGFic0JvcmRl
clF1YWQpOwotICAgICAgICBoaWdobGlnaHQtPnF1YWRzLmFwcGVuZChhYnNQYWRkaW5nUXVhZCk7
Ci0gICAgICAgIGhpZ2hsaWdodC0+cXVhZHMuYXBwZW5kKGFic0NvbnRlbnRRdWFkKTsKLQotICAg
ICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgICAgIGRyYXdIaWdobGlnaHRGb3JCb3goKmNvbnRl
eHQsIGFic0NvbnRlbnRRdWFkLCBhYnNQYWRkaW5nUXVhZCwgYWJzQm9yZGVyUXVhZCwgYWJzTWFy
Z2luUXVhZCwgaGlnaGxpZ2h0RGF0YSk7Ci0gICAgfQotCi0gICAgLy8gRHJhdyBub2RlIHRpdGxl
IGlmIG5lY2Vzc2FyeS4KLQotICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoY29udGV4dCAmJiBoaWdobGlnaHREYXRhLT5zaG93SW5mbykK
LSAgICAgICAgZHJhd0VsZW1lbnRUaXRsZSgqY29udGV4dCwgbm9kZSwgcmVuZGVyZXIsIHBpeGVs
U25hcHBlZEludFJlY3QoYm91bmRpbmdCb3gpLCBwaXhlbFNuYXBwZWRJbnRSZWN0KHRpdGxlQW5j
aG9yQm94KSwgdmlzaWJsZVJlY3QsIGNvbnRhaW5pbmdGcmFtZS0+c2V0dGluZ3MoKSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIGdldE9yRHJhd1JlY3RIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBEb2N1bWVudCogZG9jdW1lbnQsIEhpZ2hsaWdodERhdGEqIGhpZ2hsaWdodERhdGEsIEhp
Z2hsaWdodCAqaGlnaGxpZ2h0KQotewotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEZsb2F0UmVjdCBoaWdobGlnaHRSZWN0KCooaGlnaGxpZ2h0RGF0YS0+cmVjdCkp
OwotCi0gICAgaGlnaGxpZ2h0LT50eXBlID0gSGlnaGxpZ2h0VHlwZVJlY3RzOwotICAgIGhpZ2hs
aWdodC0+cXVhZHMuYXBwZW5kKGhpZ2hsaWdodFJlY3QpOwotCi0gICAgaWYgKGNvbnRleHQpIHsK
LSAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gZG9jdW1lbnQtPmZyYW1lKCktPnZpZXcoKTsKLSAg
ICAgICAgaWYgKCF2aWV3LT5kZWxlZ2F0ZXNTY3JvbGxpbmcoKSkgewotICAgICAgICAgICAgRmxv
YXRSZWN0IHZpc2libGVSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgICAg
ICAgICBjb250ZXh0LT50cmFuc2xhdGUoLXZpc2libGVSZWN0LngoKSwgLXZpc2libGVSZWN0Lnko
KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBkcmF3T3V0bGluZWRRdWFkKCpjb250ZXh0LCBoaWdo
bGlnaHRSZWN0LCBoaWdobGlnaHREYXRhLT5jb250ZW50LCBoaWdobGlnaHREYXRhLT5jb250ZW50
T3V0bGluZSk7Ci0gICAgfQotfQotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotbmFtZXNw
YWNlIERPTU5vZGVIaWdobGlnaHRlciB7Ci0KLXZvaWQgZHJhd0hpZ2hsaWdodChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIERvY3VtZW50KiBkb2N1bWVudCwgSGlnaGxpZ2h0RGF0YSogaGlnaGxp
Z2h0RGF0YSkKLXsKLSAgICBpZiAoIWhpZ2hsaWdodERhdGEpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEhpZ2hsaWdodCBoaWdobGlnaHQ7Ci0gICAgaWYgKGhpZ2hsaWdodERhdGEtPm5vZGUpCi0g
ICAgICAgIGdldE9yRHJhd05vZGVIaWdobGlnaHQoJmNvbnRleHQsIGhpZ2hsaWdodERhdGEsICZo
aWdobGlnaHQpOwotICAgIGVsc2UgaWYgKGhpZ2hsaWdodERhdGEtPnJlY3QpCi0gICAgICAgIGdl
dE9yRHJhd1JlY3RIaWdobGlnaHQoJmNvbnRleHQsIGRvY3VtZW50LCBoaWdobGlnaHREYXRhLCAm
aGlnaGxpZ2h0KTsKLX0KLQotdm9pZCBnZXRIaWdobGlnaHQoRG9jdW1lbnQqIGRvY3VtZW50LCBI
aWdobGlnaHREYXRhKiBoaWdobGlnaHREYXRhLCBIaWdobGlnaHQqIGhpZ2hsaWdodCkKLXsKLSAg
ICBpZiAoIWhpZ2hsaWdodERhdGEpCi0gICAgICAgIHJldHVybjsKLQotICAgIGhpZ2hsaWdodC0+
Y29udGVudENvbG9yID0gaGlnaGxpZ2h0RGF0YS0+Y29udGVudDsKLSAgICBoaWdobGlnaHQtPnBh
ZGRpbmdDb2xvciA9IGhpZ2hsaWdodERhdGEtPnBhZGRpbmc7Ci0gICAgaGlnaGxpZ2h0LT5ib3Jk
ZXJDb2xvciA9IGhpZ2hsaWdodERhdGEtPmJvcmRlcjsKLSAgICBoaWdobGlnaHQtPm1hcmdpbkNv
bG9yID0gaGlnaGxpZ2h0RGF0YS0+bWFyZ2luOwotICAgIGhpZ2hsaWdodC0+dHlwZSA9IEhpZ2hs
aWdodFR5cGVSZWN0czsKLQotICAgIGlmIChoaWdobGlnaHREYXRhLT5ub2RlKQotICAgICAgICBn
ZXRPckRyYXdOb2RlSGlnaGxpZ2h0KDAsIGhpZ2hsaWdodERhdGEsIGhpZ2hsaWdodCk7Ci0gICAg
ZWxzZSBpZiAoaGlnaGxpZ2h0RGF0YS0+cmVjdCkKLSAgICAgICAgZ2V0T3JEcmF3UmVjdEhpZ2hs
aWdodCgwLCBkb2N1bWVudCwgaGlnaGxpZ2h0RGF0YSwgaGlnaGxpZ2h0KTsKLX0KLQotdm9pZCBk
cmF3T3V0bGluZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBGbG9hdFJlY3Qgb3V0bGluZVJlY3QgPSBy
ZWN0OwotICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgb3V0bGluZVJlY3QsIENvbG9yKCks
IGNvbG9yKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgRE9NTm9kZUhpZ2hsaWdodGVyCi0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGY3YjZmMDBmNGZmZTAyNTkxMzU1MjU0ZGZlMTkzZDAzMDYyY2UzZDku
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5oCisrKyAvZGV2L251bGwKQEAgLTEs
ODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgRE9NTm9kZUhpZ2hsaWdodGVyX2gKLSNkZWZpbmUgRE9NTm9k
ZUhpZ2hsaWdodGVyX2gKLQotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFk
LmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKLQotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENvbG9yOwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBG
cmFtZVZpZXc7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBOb2RlOwotCi1zdHJ1Y3Qg
SGlnaGxpZ2h0RGF0YSB7Ci0gICAgQ29sb3IgY29udGVudDsKLSAgICBDb2xvciBjb250ZW50T3V0
bGluZTsKLSAgICBDb2xvciBwYWRkaW5nOwotICAgIENvbG9yIGJvcmRlcjsKLSAgICBDb2xvciBt
YXJnaW47Ci0gICAgYm9vbCBzaG93SW5mbzsKLQotICAgIC8vIEVpdGhlciBvZiB0aGVzZSBtdXN0
IGJlIDAuCi0gICAgUmVmUHRyPE5vZGU+IG5vZGU7Ci0gICAgT3duUHRyPEludFJlY3Q+IHJlY3Q7
Ci19OwotCi1lbnVtIEhpZ2hsaWdodFR5cGUgewotICAgIEhpZ2hsaWdodFR5cGVOb2RlLAotICAg
IEhpZ2hsaWdodFR5cGVSZWN0cywKLX07Ci0KLXN0cnVjdCBIaWdobGlnaHQgewotICAgIENvbG9y
IGNvbnRlbnRDb2xvcjsKLSAgICBDb2xvciBwYWRkaW5nQ29sb3I7Ci0gICAgQ29sb3IgYm9yZGVy
Q29sb3I7Ci0gICAgQ29sb3IgbWFyZ2luQ29sb3I7Ci0KLSAgICAvLyBXaGVuIHRoZSB0eXBlIGlz
IE5vZGUsIHRoZXJlIGFyZSA0IHF1YWRzIChtYXJnaW4sIGJvcmRlciwgcGFkZGluZywgY29udGVu
dCkuCi0gICAgLy8gV2hlbiB0aGUgdHlwZSBpcyBSZWN0cywgdGhpcyBpcyBqdXN0IGEgbGlzdCBv
ZiBxdWFkcy4KLSAgICBIaWdobGlnaHRUeXBlIHR5cGU7Ci0gICAgVmVjdG9yPEZsb2F0UXVhZD4g
cXVhZHM7Ci19OwotCi1uYW1lc3BhY2UgRE9NTm9kZUhpZ2hsaWdodGVyIHsKLQotdm9pZCBkcmF3
SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYsIERvY3VtZW50KiwgSGlnaGxpZ2h0RGF0YSopOwot
dm9pZCBnZXRIaWdobGlnaHQoRG9jdW1lbnQqLCBIaWdobGlnaHREYXRhKiwgSGlnaGxpZ2h0Kik7
Ci12b2lkIGRyYXdPdXRsaW5lKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3QmLCBj
b25zdCBDb2xvciYpOwotCi19IC8vIG5hbWVzcGFjZSBET01Ob2RlSGlnaGxpZ2h0ZXIKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0KLSNlbmRpZiAvLyBET01Ob2RlSGlnaGxpZ2h0ZXJfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFsbEluT25lLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBbGxJbk9uZS5jcHAKaW5kZXgg
MjZiYmEyYWVjOWY5ZDliMGVkZDZhODk1ZTg4MjdjNGVlZjA4ZDc0Mi4uMjk2OGFlOTM0OWI1NDA3
OTY1NTI5N2MxOTZlYjA1MjUxNjJkYjM4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckFsbEluT25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQWxsSW5PbmUuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiQ29u
c29sZU1lc3NhZ2UuY3BwIgogI2luY2x1ZGUgIkNvbnRlbnRTZWFyY2hVdGlscy5jcHAiCiAjaW5j
bHVkZSAiRE9NRWRpdG9yLmNwcCIKLSNpbmNsdWRlICJET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwIgog
I2luY2x1ZGUgIkRPTVBhdGNoU3VwcG9ydC5jcHAiCiAjaW5jbHVkZSAiSWRlbnRpZmllcnNGYWN0
b3J5LmNwcCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdC5jcHAiCkBAIC01Nyw2ICs1Niw3IEBA
CiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwIgogI2luY2x1ZGUgIkluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5jcHAiCiAjaW5jbHVkZSAiSW5zcGVjdG9yTWVtb3J5QWdlbnQu
Y3BwIgorI2luY2x1ZGUgIkluc3BlY3Rvck92ZXJsYXkuY3BwIgogI2luY2x1ZGUgIkluc3BlY3Rv
clBhZ2VBZ2VudC5jcHAiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggMDk1ZTFjYzUxYjM1NGE4
ZjhlMDgxNDZhNzllZjcwOGRiN2NkNDljZS4uNTM5NzM3NjJiNTExZGVhYzkzZThiMGZmOTA2MTZh
Njk0MTI3YjA5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmNwcApAQCAtNTYsNiArNTYsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckluZGV4
ZWREQkFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9yTWVtb3J5QWdlbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JPdmVybGF5
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUGFnZUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
UHJvZmlsZXJBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlQWdlbnQuaCIKQEAg
LTc4LDYgKzc5LDcgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQ
YWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckMKICAgICA6IG1faW5zdHJ1bWVu
dGluZ0FnZW50cyhhZG9wdFB0cihuZXcgSW5zdHJ1bWVudGluZ0FnZW50cygpKSkKICAgICAsIG1f
aW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKEluamVjdGVkU2NyaXB0TWFuYWdlcjo6Y3JlYXRlRm9yUGFn
ZSgpKQogICAgICwgbV9zdGF0ZShhZG9wdFB0cihuZXcgSW5zcGVjdG9yU3RhdGUoaW5zcGVjdG9y
Q2xpZW50KSkpCisgICAgLCBtX292ZXJsYXkoSW5zcGVjdG9yT3ZlcmxheTo6Y3JlYXRlKHBhZ2Us
IGluc3BlY3RvckNsaWVudCkpCiAgICAgLCBtX3BhZ2UocGFnZSkKICAgICAsIG1faW5zcGVjdG9y
Q2xpZW50KGluc3BlY3RvckNsaWVudCkKIHsKQEAgLTg1LDEyICs4NywxMiBAQCBJbnNwZWN0b3JD
b250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVu
dCogaW5zcGVjdG9yQwogICAgIG1faW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudFB0ci5n
ZXQoKTsKICAgICBtX2FnZW50cy5hcHBlbmQoaW5zcGVjdG9yQWdlbnRQdHIucmVsZWFzZSgpKTsK
IAotICAgIE93blB0cjxJbnNwZWN0b3JQYWdlQWdlbnQ+IHBhZ2VBZ2VudFB0cihJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIHBhZ2UsIG1faW5z
cGVjdG9yQWdlbnQsIG1fc3RhdGUuZ2V0KCksIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgp
LCBpbnNwZWN0b3JDbGllbnQpKTsKKyAgICBPd25QdHI8SW5zcGVjdG9yUGFnZUFnZW50PiBwYWdl
QWdlbnRQdHIoSW5zcGVjdG9yUGFnZUFnZW50OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRz
LmdldCgpLCBwYWdlLCBtX2luc3BlY3RvckFnZW50LCBtX3N0YXRlLmdldCgpLCBtX2luamVjdGVk
U2NyaXB0TWFuYWdlci5nZXQoKSwgaW5zcGVjdG9yQ2xpZW50LCBtX292ZXJsYXkuZ2V0KCkpKTsK
ICAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCA9IHBhZ2VBZ2VudFB0ci5nZXQoKTsK
ICAgICBtX3BhZ2VBZ2VudCA9IHBhZ2VBZ2VudFB0ci5nZXQoKTsKICAgICBtX2FnZW50cy5hcHBl
bmQocGFnZUFnZW50UHRyLnJlbGVhc2UoKSk7CiAKLSAgICBPd25QdHI8SW5zcGVjdG9yRE9NQWdl
bnQ+IGRvbUFnZW50UHRyKEluc3BlY3RvckRPTUFnZW50OjpjcmVhdGUobV9pbnN0cnVtZW50aW5n
QWdlbnRzLmdldCgpLCBwYWdlQWdlbnQsIGluc3BlY3RvckNsaWVudCwgbV9zdGF0ZS5nZXQoKSwg
bV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuZ2V0KCkpKTsKKyAgICBPd25QdHI8SW5zcGVjdG9yRE9N
QWdlbnQ+IGRvbUFnZW50UHRyKEluc3BlY3RvckRPTUFnZW50OjpjcmVhdGUobV9pbnN0cnVtZW50
aW5nQWdlbnRzLmdldCgpLCBwYWdlQWdlbnQsIG1fc3RhdGUuZ2V0KCksIG1faW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyLmdldCgpLCBtX292ZXJsYXkuZ2V0KCkpKTsKICAgICBtX2RvbUFnZW50ID0gZG9t
QWdlbnRQdHIuZ2V0KCk7CiAgICAgbV9hZ2VudHMuYXBwZW5kKGRvbUFnZW50UHRyLnJlbGVhc2Uo
KSk7CiAKQEAgLTEzMCw3ICsxMzIsNyBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JD
b250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQwogICAgIG1f
YWdlbnRzLmFwcGVuZChjb25zb2xlQWdlbnRQdHIucmVsZWFzZSgpKTsKIAogI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIE93blB0cjxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50PiBk
ZWJ1Z2dlckFnZW50UHRyKFBhZ2VEZWJ1Z2dlckFnZW50OjpjcmVhdGUobV9pbnN0cnVtZW50aW5n
QWdlbnRzLmdldCgpLCBtX3N0YXRlLmdldCgpLCBwYWdlLCBtX2luamVjdGVkU2NyaXB0TWFuYWdl
ci5nZXQoKSkpOworICAgIE93blB0cjxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50PiBkZWJ1Z2dlckFn
ZW50UHRyKFBhZ2VEZWJ1Z2dlckFnZW50OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmdl
dCgpLCBtX3N0YXRlLmdldCgpLCBwYWdlLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5nZXQoKSwg
bV9vdmVybGF5LmdldCgpKSk7CiAgICAgbV9kZWJ1Z2dlckFnZW50ID0gZGVidWdnZXJBZ2VudFB0
ci5nZXQoKTsKICAgICBtX2FnZW50cy5hcHBlbmQoZGVidWdnZXJBZ2VudFB0ci5yZWxlYXNlKCkp
OwogCkBAIC0yOTQsNyArMjk2LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpldmFsdWF0
ZUZvclRlc3RJbkZyb250ZW5kKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHMKIAogdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpkcmF3SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKIHsKLSAgICBtX2RvbUFnZW50LT5kcmF3SGlnaGxpZ2h0KGNvbnRleHQpOworICAg
IG1fcGFnZUFnZW50LT5kcmF3SW5zcGVjdG9yT3ZlcmxheShjb250ZXh0KTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpnZXRIaWdobGlnaHQoSGlnaGxpZ2h0KiBoaWdobGlnaHQpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApp
bmRleCA0NzNiYjhkZTI2ZmVhMGFjNzA0NmY2NjQ5NzlhZGZjZDRlY2E1YmVkLi4wYjU1ODJjZDkz
ZmQ5OWJkZThhMTExMDMxMmViMzkxOWMyM2ZmNTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTUxLDYgKzUxLDcgQEAgY2xhc3MgSW5z
cGVjdG9yRE9NQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OwogY2xhc3MgSW5z
cGVjdG9yRnJvbnRlbmQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVudDsKK2NsYXNzIElu
c3BlY3Rvck92ZXJsYXk7CiBjbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7CiBjbGFzcyBJbnNwZWN0
b3JQcm9maWxlckFnZW50OwogY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDsKQEAgLTExOSw2
ICsxMjAsNyBAQCBwcml2YXRlOgogICAgIE93blB0cjxJbnN0cnVtZW50aW5nQWdlbnRzPiBtX2lu
c3RydW1lbnRpbmdBZ2VudHM7CiAgICAgT3duUHRyPEluamVjdGVkU2NyaXB0TWFuYWdlcj4gbV9p
bmplY3RlZFNjcmlwdE1hbmFnZXI7CiAgICAgT3duUHRyPEluc3BlY3RvclN0YXRlPiBtX3N0YXRl
OworICAgIE93blB0cjxJbnNwZWN0b3JPdmVybGF5PiBtX292ZXJsYXk7CiAKICAgICBJbnNwZWN0
b3JBZ2VudCogbV9pbnNwZWN0b3JBZ2VudDsKICAgICBJbnNwZWN0b3JET01BZ2VudCogbV9kb21B
Z2VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
CmluZGV4IDkwNzk1ODllNTFjZThmMDhlNTBlMjA2ZTQ5YTEzMjZiZTk1YzMwMTIuLjFiZjdlMjVi
YTIyMjg5NzU5N2EyMzYzOTg3OGViYTA5YzU4MWIxYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtNDcsNyArNDcsNiBAQAogI2luY2x1
ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRPTUVkaXRv
ci5oIgotI2luY2x1ZGUgIkRPTU5vZGVIaWdobGlnaHRlci5oIgogI2luY2x1ZGUgIkRPTVBhdGNo
U3VwcG9ydC5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CkBAIC02Niw5ICs2NSw5IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUg
IklkZW50aWZpZXJzRmFjdG9yeS5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0TWFuYWdlci5o
IgotI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250
ZW5kLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySGlzdG9yeS5oIgorI2luY2x1ZGUgIkluc3BlY3Rv
ck92ZXJsYXkuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JQYWdlQWdlbnQuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JTdGF0ZS5oIgogI2luY2x1ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIKQEAgLTE5
NCwxMSArMTkzLDExIEBAIFN0cmluZyBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhj
b25zdCBFeGNlcHRpb25Db2RlJiBlYykKICAgICByZXR1cm4gIiI7CiB9CiAKLUluc3BlY3RvckRP
TUFnZW50OjpJbnNwZWN0b3JET01BZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50
aW5nQWdlbnRzLCBJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgSW5zcGVjdG9yQ2xpZW50
KiBjbGllbnQsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCitJbnNwZWN0b3JET01BZ2VudDo6SW5zcGVj
dG9yRE9NQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5z
cGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0
ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIEluc3BlY3Rv
ck92ZXJsYXkqIG92ZXJsYXkpCiAgICAgOiBJbnNwZWN0b3JCYXNlQWdlbnQ8SW5zcGVjdG9yRE9N
QWdlbnQ+KCJET00iLCBpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnNwZWN0b3JTdGF0ZSkKICAgICAs
IG1fcGFnZUFnZW50KHBhZ2VBZ2VudCkKLSAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1f
aW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKGluamVjdGVkU2NyaXB0TWFuYWdlcikKKyAgICAsIG1fb3Zl
cmxheShvdmVybGF5KQogICAgICwgbV9mcm9udGVuZCgwKQogICAgICwgbV9kb21MaXN0ZW5lcigw
KQogICAgICwgbV9sYXN0Tm9kZUlkKDEpCkBAIC0xMDM2LDcgKzEwMzUsNyBAQCB2b2lkIEluc3Bl
Y3RvckRPTUFnZW50OjpoaWdobGlnaHQoKQogewogICAgIC8vIFRoaXMgbWV0aG9kIHJlcXVpcmVz
IG1faGlnaGxpZ2h0RGF0YSB0byBoYXZlIGJlZW4gZmlsbGVkIGluIGJ5IGl0cyBjbGllbnQuCiAg
ICAgQVNTRVJUKG1faGlnaGxpZ2h0RGF0YSk7Ci0gICAgbV9jbGllbnQtPmhpZ2hsaWdodCgpOwor
ICAgIG1fb3ZlcmxheS0+c2V0SGlnaGxpZ2h0KG1fZG9jdW1lbnQuZ2V0KCksIG1faGlnaGxpZ2h0
RGF0YS5nZXQoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFJlY3Qo
RXJyb3JTdHJpbmcqLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0Piogb3V0bGluZUNvbG9yKQpAQCAtMTA0NSw3ICsxMDQ0LDcgQEAgdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6aGlnaGxpZ2h0UmVjdChFcnJvclN0cmluZyosIGludCB4LCBpbnQgeSwgaW50IHdp
ZHRoLCBpbnQKICAgICBtX2hpZ2hsaWdodERhdGEtPnJlY3QgPSBhZG9wdFB0cihuZXcgSW50UmVj
dCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CiAgICAgbV9oaWdobGlnaHREYXRhLT5jb250ZW50ID0g
cGFyc2VDb2xvcihjb2xvcik7CiAgICAgbV9oaWdobGlnaHREYXRhLT5jb250ZW50T3V0bGluZSA9
IHBhcnNlQ29sb3Iob3V0bGluZUNvbG9yKTsKLSAgICBtX2NsaWVudC0+aGlnaGxpZ2h0KCk7Cisg
ICAgaGlnaGxpZ2h0KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodE5v
ZGUoCkBAIC0xMDg0LDcgKzEwODMsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWRlSGln
aGxpZ2h0KEVycm9yU3RyaW5nKikKICAgICAgICAgbV9oaWdobGlnaHREYXRhLT5ub2RlLmNsZWFy
KCk7CiAgICAgICAgIG1faGlnaGxpZ2h0RGF0YS0+cmVjdC5jbGVhcigpOwogICAgIH0KLSAgICBt
X2NsaWVudC0+aGlkZUhpZ2hsaWdodCgpOworICAgIGhpZ2hsaWdodCgpOwogfQogCiB2b2lkIElu
c3BlY3RvckRPTUFnZW50Ojptb3ZlVG8oRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9k
ZUlkLCBpbnQgdGFyZ2V0RWxlbWVudElkLCBjb25zdCBpbnQqIGNvbnN0IGFuY2hvck5vZGVJZCwg
aW50KiBuZXdOb2RlSWQpCkBAIC0xNTk5LDIwICsxNTk4LDEyIEBAIFBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnJlc29sdmVO
b2RlKE5vCiAgICAgcmV0dXJuIGluamVjdGVkU2NyaXB0LndyYXBOb2RlKG5vZGUsIG9iamVjdEdy
b3VwKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZHJhd0hpZ2hsaWdodChHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hpZ2hsaWdodERhdGEpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIERPTU5vZGVIaWdobGlnaHRlcjo6ZHJhd0hpZ2hsaWdodChj
b250ZXh0LCBtX2hpZ2hsaWdodERhdGEtPm5vZGUgPyBtX2hpZ2hsaWdodERhdGEtPm5vZGUtPmRv
Y3VtZW50KCkgOiBtX2RvY3VtZW50LmdldCgpLCBtX2hpZ2hsaWdodERhdGEuZ2V0KCkpOwotfQot
CiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRIaWdobGlnaHQoSGlnaGxpZ2h0KiBoaWdobGln
aHQpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2hpZ2hsaWdodERhdGEpCiAgICAgICAgIHJldHVybjsK
IAotICAgIERPTU5vZGVIaWdobGlnaHRlcjo6Z2V0SGlnaGxpZ2h0KG1faGlnaGxpZ2h0RGF0YS0+
bm9kZSA/IG1faGlnaGxpZ2h0RGF0YS0+bm9kZS0+ZG9jdW1lbnQoKSA6IG1fZG9jdW1lbnQuZ2V0
KCksIG1faGlnaGxpZ2h0RGF0YS5nZXQoKSwgaGlnaGxpZ2h0KTsKKyAgICBtX292ZXJsYXktPmdl
dEhpZ2hsaWdodChtX2hpZ2hsaWdodERhdGEtPm5vZGUgPyBtX2hpZ2hsaWdodERhdGEtPm5vZGUt
PmRvY3VtZW50KCkgOiBtX2RvY3VtZW50LmdldCgpLCBtX2hpZ2hsaWdodERhdGEuZ2V0KCksIGhp
Z2hsaWdodCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggYjA1YWI1NzBkOWZkMWIwNDg3MDZh
MzkzYTI0NjY1OTdiNDk2MzliZi4uM2IzZjU5YmU3Njg4NjliM2E4MGMxNjdiZTliZDI2MTIwNTFh
NzI3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFn
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgK
QEAgLTU2LDkgKzU2LDkgQEAgY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFbGVtZW50OwogY2xhc3Mg
RXZlbnQ7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBJbnNwZWN0b3JDbGllbnQ7CiBj
bGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKIGNsYXNzIEluc3BlY3Rvckhpc3Rvcnk7CitjbGFzcyBJ
bnNwZWN0b3JPdmVybGF5OwogY2xhc3MgSW5zcGVjdG9yUGFnZUFnZW50OwogY2xhc3MgSW50UmVj
dDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CkBAIC0xMDMsOSArMTAzLDkgQEAgcHVibGljOgogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkTW9kaWZ5RE9NQXR0cihFbGVtZW50KikgPSAwOwogICAgIH07
CiAKLSAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JET01BZ2VudD4gY3JlYXRlKEluc3Ry
dW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclBhZ2VBZ2VudCog
cGFnZUFnZW50LCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCwgSW5zcGVjdG9yU3RhdGUqIGluc3Bl
Y3RvclN0YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlcikK
KyAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JET01BZ2VudD4gY3JlYXRlKEluc3RydW1l
bnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclBhZ2VBZ2VudCogcGFn
ZUFnZW50LCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0TWFu
YWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JET01BZ2VudChpbnN0
cnVtZW50aW5nQWdlbnRzLCBwYWdlQWdlbnQsIGNsaWVudCwgaW5zcGVjdG9yU3RhdGUsIGluamVj
dGVkU2NyaXB0TWFuYWdlcikpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEluc3BlY3Rv
ckRPTUFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIHBhZ2VBZ2VudCwgaW5zcGVjdG9yU3RhdGUs
IGluamVjdGVkU2NyaXB0TWFuYWdlciwgb3ZlcmxheSkpOwogICAgIH0KIAogICAgIHN0YXRpYyBT
dHJpbmcgdG9FcnJvclN0cmluZyhjb25zdCBFeGNlcHRpb25Db2RlJik7CkBAIC0xODUsNyArMTg1
LDYgQEAgcHVibGljOgogICAgIHZvaWQgaW5zcGVjdChOb2RlKik7CiAgICAgdm9pZCBmb2N1c05v
ZGUoKTsKIAotICAgIHZvaWQgZHJhd0hpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
ICAgICB2b2lkIGdldEhpZ2hsaWdodChIaWdobGlnaHQqKSBjb25zdDsKIAogICAgIEluc3BlY3Rv
ckhpc3RvcnkqIGhpc3RvcnkoKSB7IHJldHVybiBtX2hpc3RvcnkuZ2V0KCk7IH0KQEAgLTIwNSw3
ICsyMDQsNyBAQCBwdWJsaWM6CiAgICAgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQoKSB7
IHJldHVybiBtX3BhZ2VBZ2VudDsgfQogCiBwcml2YXRlOgotICAgIEluc3BlY3RvckRPTUFnZW50
KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JQYWdlQWdlbnQqLCBJbnNwZWN0b3JDbGll
bnQqLCBJbnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciopOworICAgIEluc3Bl
Y3RvckRPTUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JQYWdlQWdlbnQqLCBJ
bnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3Rvck92ZXJsYXkq
KTsKIAogICAgIHZvaWQgc2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQsIEluc3BlY3Rv
ck9iamVjdCogaGlnaGxpZ2h0Q29uZmlnKTsKICAgICBib29sIHNldEhpZ2hsaWdodERhdGFGcm9t
Q29uZmlnKEluc3BlY3Rvck9iamVjdCogaGlnaGxpZ2h0Q29uZmlnKTsKQEAgLTI0MSw4ICsyNDAs
OCBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIG1fcGFnZUFn
ZW50OwotICAgIEluc3BlY3RvckNsaWVudCogbV9jbGllbnQ7CiAgICAgSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyKiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKKyAgICBJbnNwZWN0b3JPdmVybGF5KiBt
X292ZXJsYXk7CiAgICAgSW5zcGVjdG9yRnJvbnRlbmQ6OkRPTSogbV9mcm9udGVuZDsKICAgICBE
T01MaXN0ZW5lciogbV9kb21MaXN0ZW5lcjsKICAgICBOb2RlVG9JZE1hcCBtX2RvY3VtZW50Tm9k
ZVRvSWRNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5jcHAKaW5kZXggMTE4MDdhM2Y5ZTg3OTg0MGRlYTYwM2IzNjYzZTIwOWFmY2Vk
NzJjOC4uNzU1N2U3YjgyM2Q5YzRlZTQxODNiODYzYzlhZjRhOTlkMDU5OGFmMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcApA
QCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAi
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIK
KyNpbmNsdWRlICJJbnNwZWN0b3JPdmVybGF5LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUGFnZUFn
ZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yU3RhdGUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JW
YWx1ZXMuaCIKQEAgLTYwLDEwICs2MSwxMSBAQCBzdGF0aWMgY29uc3QgY2hhciBwYXVzZU9uRXhj
ZXB0aW9uc1N0YXRlW10gPSAicGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSI7CiAKIGNvbnN0IGNoYXIq
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJhY2t0cmFjZU9iamVjdEdyb3VwID0gImJhY2t0cmFj
ZS1vYmplY3QtZ3JvdXAiOwogCi1JbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3Bl
Y3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3Rl
ZFNjcmlwdE1hbmFnZXIpCitJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3Rv
clN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNj
cmlwdE1hbmFnZXIsIEluc3BlY3Rvck92ZXJsYXkqIG92ZXJsYXkpCiAgICAgOiBJbnNwZWN0b3JC
YXNlQWdlbnQ8SW5zcGVjdG9yRGVidWdnZXJBZ2VudD4oIkRlYnVnZ2VyIiwgaW5zdHJ1bWVudGlu
Z0FnZW50cywgaW5zcGVjdG9yU3RhdGUpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlcihp
bmplY3RlZFNjcmlwdE1hbmFnZXIpCiAgICAgLCBtX2Zyb250ZW5kKDApCisgICAgLCBtX292ZXJs
YXkob3ZlcmxheSkKICAgICAsIG1fcGF1c2VkU2NyaXB0U3RhdGUoMCkKICAgICAsIG1famF2YVNj
cmlwdFBhdXNlU2NoZWR1bGVkKGZhbHNlKQogICAgICwgbV9saXN0ZW5lcigwKQpAQCAtMTAzLDYg
KzEwNSw4IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJsZSgpCiAKICAgICBp
ZiAobV9saXN0ZW5lcikKICAgICAgICAgbV9saXN0ZW5lci0+ZGVidWdnZXJXYXNEaXNhYmxlZCgp
OworICAgIGlmIChtX292ZXJsYXkpCisgICAgICAgIG1fb3ZlcmxheS0+c2V0U2hvdWxkU2hvd1Bh
dXNlV2FybmluZyhmYWxzZSk7CiB9CiAKIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZW5h
YmxlZCgpCkBAIC02NTcsNiArNjYxLDggQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpk
aWRQYXVzZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IFNjcmlwdFZhbHUKICAgICAg
ICAgfQogICAgIH0KIAorICAgIGlmIChtX292ZXJsYXkpCisgICAgICAgIG1fb3ZlcmxheS0+c2V0
U2hvdWxkU2hvd1BhdXNlV2FybmluZyh0cnVlKTsKICAgICBtX2Zyb250ZW5kLT5wYXVzZWQoY3Vy
cmVudENhbGxGcmFtZXMoKSwgbV9icmVha1JlYXNvbiwgbV9icmVha0F1eERhdGEpOwogICAgIG1f
amF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkID0gZmFsc2U7CiAKQEAgLTY3MSw2ICs2NzcsOCBAQCB2
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZENvbnRpbnVlKCkKICAgICBtX3BhdXNlZFNj
cmlwdFN0YXRlID0gMDsKICAgICBtX2N1cnJlbnRDYWxsU3RhY2sgPSBTY3JpcHRWYWx1ZSgpOwog
ICAgIGNsZWFyQnJlYWtEZXRhaWxzKCk7CisgICAgaWYgKG1fb3ZlcmxheSkKKyAgICAgICAgbV9v
dmVybGF5LT5zZXRTaG91bGRTaG93UGF1c2VXYXJuaW5nKGZhbHNlKTsKICAgICBtX2Zyb250ZW5k
LT5yZXN1bWVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRGVidWdnZXJBZ2VudC5oCmluZGV4IDA5Yzk3ZDE5NTNlNGI5YjAwMTYxZjg3NGY0NTMxZmJk
ZWM3ZGI2Y2QuLmU3OGU4OGY5ZDYyYmE4ZjRiZWYzNTg2ZGUzZGZiYjQ1ZjA5N2Q3ODEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaApA
QCAtNTAsNiArNTAsNyBAQCBjbGFzcyBJbmplY3RlZFNjcmlwdE1hbmFnZXI7CiBjbGFzcyBJbnNw
ZWN0b3JGcm9udGVuZDsKIGNsYXNzIEluc3BlY3RvckFycmF5OwogY2xhc3MgSW5zcGVjdG9yT2Jq
ZWN0OworY2xhc3MgSW5zcGVjdG9yT3ZlcmxheTsKIGNsYXNzIEluc3BlY3RvclN0YXRlOwogY2xh
c3MgSW5zcGVjdG9yVmFsdWU7CiBjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzOwpAQCAtMTI0LDcg
KzEyNSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFNjcmlwdERlYnVnU2VydmVyJiBzY3JpcHRE
ZWJ1Z1NlcnZlcigpID0gMDsKIAogcHJvdGVjdGVkOgotICAgIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyKik7CisgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRz
KiwgSW5zcGVjdG9yU3RhdGUqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JPdmVy
bGF5Kik7CiAKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRMaXN0ZW5pbmdTY3JpcHREZWJ1Z1NlcnZl
cigpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcExpc3RlbmluZ1NjcmlwdERlYnVnU2VydmVy
KCkgPSAwOwpAQCAtMTU5LDYgKzE2MCw3IEBAIHByaXZhdGU6CiAKICAgICBJbmplY3RlZFNjcmlw
dE1hbmFnZXIqIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogICAgIEluc3BlY3RvckZyb250ZW5k
OjpEZWJ1Z2dlciogbV9mcm9udGVuZDsKKyAgICBJbnNwZWN0b3JPdmVybGF5KiBtX292ZXJsYXk7
CiAgICAgU2NyaXB0U3RhdGUqIG1fcGF1c2VkU2NyaXB0U3RhdGU7CiAgICAgU2NyaXB0VmFsdWUg
bV9jdXJyZW50Q2FsbFN0YWNrOwogICAgIFNjcmlwdHNNYXAgbV9zY3JpcHRzOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlZmJj
MWZmZGFkNTJhMGQ5MTk3NjU1ZDY4ZGU3Y2Q2MTExMDU4YTYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKQEAgLTAsMCArMSw2
MDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisj
aW5jbHVkZSAiSW5zcGVjdG9yT3ZlcmxheS5oIgorCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZvbnRGYW1pbHkuaCIKKyNpbmNsdWRlICJG
cmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDbGll
bnQuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJh
bmdlLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94TW9kZWxPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5k
ZXJJbmxpbmUuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJTZXR0aW5n
cy5oIgorI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJUZXh0UnVuLmgiCisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK25hbWVzcGFjZSB7CisKKyNpZiBPUyhXSU5ET1dTKQorc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGZvbnRIZWlnaHRQeCA9IDEyOworI2VsaWYgT1MoTUFDX09TX1gpIHx8IE9TKFVOSVgpCitzdGF0
aWMgY29uc3QgdW5zaWduZWQgZm9udEhlaWdodFB4ID0gMTE7CisjZW5kaWYKKworY29uc3Qgc3Rh
dGljIGludCByZWN0SW5mbGF0ZVB4ID0gNDsKK2NvbnN0IHN0YXRpYyBpbnQgYm9yZGVyV2lkdGhQ
eCA9IDE7Citjb25zdCBzdGF0aWMgaW50IHRvb2x0aXBQYWRkaW5nID0gNDsKKworY29uc3Qgc3Rh
dGljIGludCBhcnJvd1RpcE9mZnNldCA9IDIwOworY29uc3Qgc3RhdGljIGZsb2F0IGFycm93SGVp
Z2h0ID0gNzsKK2NvbnN0IHN0YXRpYyBmbG9hdCBhcnJvd0hhbGZXaWR0aCA9IDc7CisKK1BhdGgg
cXVhZFRvUGF0aChjb25zdCBGbG9hdFF1YWQmIHF1YWQpCit7CisgICAgUGF0aCBxdWFkUGF0aDsK
KyAgICBxdWFkUGF0aC5tb3ZlVG8ocXVhZC5wMSgpKTsKKyAgICBxdWFkUGF0aC5hZGRMaW5lVG8o
cXVhZC5wMigpKTsKKyAgICBxdWFkUGF0aC5hZGRMaW5lVG8ocXVhZC5wMygpKTsKKyAgICBxdWFk
UGF0aC5hZGRMaW5lVG8ocXVhZC5wNCgpKTsKKyAgICBxdWFkUGF0aC5jbG9zZVN1YnBhdGgoKTsK
KyAgICByZXR1cm4gcXVhZFBhdGg7Cit9CisKK3ZvaWQgZHJhd091dGxpbmVkUXVhZChHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgY29uc3QgQ29sb3ImIGZp
bGxDb2xvciwgY29uc3QgQ29sb3ImIG91dGxpbmVDb2xvcikKK3sKKyAgICBzdGF0aWMgY29uc3Qg
aW50IG91dGxpbmVUaGlja25lc3MgPSAyOworCisgICAgUGF0aCBxdWFkUGF0aCA9IHF1YWRUb1Bh
dGgocXVhZCk7CisKKyAgICAvLyBDbGlwIG91dCB0aGUgcXVhZCwgdGhlbiBkcmF3IHdpdGggYSAy
cHggc3Ryb2tlIHRvIGdldCBhIHBpeGVsCisgICAgLy8gb2Ygb3V0bGluZSAoYmVjYXVzZSBpbmZs
YXRpbmcgYSBxdWFkIGlzIGhhcmQpCisgICAgeworICAgICAgICBjb250ZXh0LnNhdmUoKTsKKyAg
ICAgICAgY29udGV4dC5jbGlwT3V0KHF1YWRQYXRoKTsKKworICAgICAgICBjb250ZXh0LnNldFN0
cm9rZVRoaWNrbmVzcyhvdXRsaW5lVGhpY2tuZXNzKTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJv
a2VDb2xvcihvdXRsaW5lQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAgICBjb250
ZXh0LnN0cm9rZVBhdGgocXVhZFBhdGgpOworCisgICAgICAgIGNvbnRleHQucmVzdG9yZSgpOwor
ICAgIH0KKworICAgIC8vIE5vdyBkbyB0aGUgZmlsbAorICAgIGNvbnRleHQuc2V0RmlsbENvbG9y
KGZpbGxDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5maWxsUGF0aChx
dWFkUGF0aCk7Cit9CisKK3ZvaWQgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBjb25zdCBGbG9hdFF1YWQmIGNs
aXBRdWFkLCBjb25zdCBDb2xvciYgZmlsbENvbG9yKQoreworICAgIGNvbnRleHQuc2F2ZSgpOwor
ICAgIFBhdGggY2xpcFF1YWRQYXRoID0gcXVhZFRvUGF0aChjbGlwUXVhZCk7CisgICAgY29udGV4
dC5jbGlwT3V0KGNsaXBRdWFkUGF0aCk7CisgICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBx
dWFkLCBmaWxsQ29sb3IsIENvbG9yOjp0cmFuc3BhcmVudCk7CisgICAgY29udGV4dC5yZXN0b3Jl
KCk7Cit9CisKK3ZvaWQgZHJhd0hpZ2hsaWdodEZvckJveChHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UXVhZCYgY29udGVudFF1YWQsIGNvbnN0IEZsb2F0UXVhZCYgcGFkZGlu
Z1F1YWQsIGNvbnN0IEZsb2F0UXVhZCYgYm9yZGVyUXVhZCwgY29uc3QgRmxvYXRRdWFkJiBtYXJn
aW5RdWFkLCBIaWdobGlnaHREYXRhKiBoaWdobGlnaHREYXRhKQoreworICAgIGJvb2wgaGFzTWFy
Z2luID0gaGlnaGxpZ2h0RGF0YS0+bWFyZ2luICE9IENvbG9yOjp0cmFuc3BhcmVudDsKKyAgICBi
b29sIGhhc0JvcmRlciA9IGhpZ2hsaWdodERhdGEtPmJvcmRlciAhPSBDb2xvcjo6dHJhbnNwYXJl
bnQ7CisgICAgYm9vbCBoYXNQYWRkaW5nID0gaGlnaGxpZ2h0RGF0YS0+cGFkZGluZyAhPSBDb2xv
cjo6dHJhbnNwYXJlbnQ7CisgICAgYm9vbCBoYXNDb250ZW50ID0gaGlnaGxpZ2h0RGF0YS0+Y29u
dGVudCAhPSBDb2xvcjo6dHJhbnNwYXJlbnQgfHwgaGlnaGxpZ2h0RGF0YS0+Y29udGVudE91dGxp
bmUgIT0gQ29sb3I6OnRyYW5zcGFyZW50OworCisgICAgRmxvYXRRdWFkIGNsaXBRdWFkOworICAg
IENvbG9yIGNsaXBDb2xvcjsKKyAgICBpZiAoaGFzTWFyZ2luICYmICghaGFzQm9yZGVyIHx8IG1h
cmdpblF1YWQgIT0gYm9yZGVyUXVhZCkpIHsKKyAgICAgICAgZHJhd091dGxpbmVkUXVhZFdpdGhD
bGlwKGNvbnRleHQsIG1hcmdpblF1YWQsIGJvcmRlclF1YWQsIGhpZ2hsaWdodERhdGEtPm1hcmdp
bik7CisgICAgICAgIGNsaXBRdWFkID0gYm9yZGVyUXVhZDsKKyAgICB9CisgICAgaWYgKGhhc0Jv
cmRlciAmJiAoIWhhc1BhZGRpbmcgfHwgYm9yZGVyUXVhZCAhPSBwYWRkaW5nUXVhZCkpIHsKKyAg
ICAgICAgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKGNvbnRleHQsIGJvcmRlclF1YWQsIHBhZGRp
bmdRdWFkLCBoaWdobGlnaHREYXRhLT5ib3JkZXIpOworICAgICAgICBjbGlwUXVhZCA9IHBhZGRp
bmdRdWFkOworICAgIH0KKyAgICBpZiAoaGFzUGFkZGluZyAmJiAoIWhhc0NvbnRlbnQgfHwgcGFk
ZGluZ1F1YWQgIT0gY29udGVudFF1YWQpKSB7CisgICAgICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRo
Q2xpcChjb250ZXh0LCBwYWRkaW5nUXVhZCwgY29udGVudFF1YWQsIGhpZ2hsaWdodERhdGEtPnBh
ZGRpbmcpOworICAgICAgICBjbGlwUXVhZCA9IGNvbnRlbnRRdWFkOworICAgIH0KKyAgICBpZiAo
aGFzQ29udGVudCkKKyAgICAgICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBjb250ZW50UXVh
ZCwgaGlnaGxpZ2h0RGF0YS0+Y29udGVudCwgaGlnaGxpZ2h0RGF0YS0+Y29udGVudE91dGxpbmUp
OworfQorCit2b2lkIGRyYXdIaWdobGlnaHRGb3JTVkdSZW5kZXJlcihHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+JiBhYnNvbHV0ZVF1YWRzLCBIaWdobGln
aHREYXRhKiBoaWdobGlnaHREYXRhKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWJz
b2x1dGVRdWFkcy5zaXplKCk7ICsraSkKKyAgICAgICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0
LCBhYnNvbHV0ZVF1YWRzW2ldLCBoaWdobGlnaHREYXRhLT5jb250ZW50LCBDb2xvcjo6dHJhbnNw
YXJlbnQpOworfQorCitpbnQgZHJhd1N1YnN0cmluZyhjb25zdCBUZXh0UnVuJiBnbG9iYWxUZXh0
UnVuLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoLCBjb25zdCBDb2xvciYgdGV4dENvbG9yLCBjb25z
dCBGb250JiBmb250LCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3Qm
IHRpdGxlUmVjdCkKK3sKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0ZXh0Q29sb3IsIENvbG9y
U3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJhd1RleHQoZm9udCwgZ2xvYmFsVGV4dFJ1
biwgSW50UG9pbnQodGl0bGVSZWN0LnBpeGVsU25hcHBlZFgoKSArIHJlY3RJbmZsYXRlUHgsIHRp
dGxlUmVjdC5waXhlbFNuYXBwZWRZKCkgKyBmb250LmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCkpLCBv
ZmZzZXQsIG9mZnNldCArIGxlbmd0aCk7CisgICAgcmV0dXJuIG9mZnNldCArIGxlbmd0aDsKK30K
KworZmxvYXQgY2FsY3VsYXRlQXJyb3dUaXBYKGNvbnN0IExheW91dFJlY3QmIGFuY2hvckJveCwg
Y29uc3QgTGF5b3V0UmVjdCYgdGl0bGVSZWN0KQoreworICAgIGNvbnN0IHN0YXRpYyBpbnQgYW5j
aG9yVGlwT2Zmc2V0UHggPSAyOworCisgICAgaW50IG1pblggPSB0aXRsZVJlY3QueCgpICsgYXJy
b3dIYWxmV2lkdGg7CisgICAgaW50IG1heFggPSB0aXRsZVJlY3QubWF4WCgpIC0gYXJyb3dIYWxm
V2lkdGg7CisgICAgaW50IGFuY2hvclggPSBhbmNob3JCb3gueCgpOworICAgIGludCBhbmNob3JN
YXhYID0gYW5jaG9yQm94Lm1heFgoKTsKKworICAgIGludCB4ID0gdGl0bGVSZWN0LngoKSArIGFy
cm93VGlwT2Zmc2V0OyAvLyBEZWZhdWx0IHRvb2x0aXAgcG9zaXRpb24uCisgICAgaWYgKHggPCBh
bmNob3JYKQorICAgICAgICB4ID0gYW5jaG9yWCArIGFuY2hvclRpcE9mZnNldFB4OworICAgIGVs
c2UgaWYgKHggPiBhbmNob3JNYXhYKQorICAgICAgICB4ID0gYW5jaG9yTWF4WCAtIGFuY2hvclRp
cE9mZnNldFB4OworCisgICAgaWYgKHggPCBtaW5YKQorICAgICAgICB4ID0gbWluWDsKKyAgICBl
bHNlIGlmICh4ID4gbWF4WCkKKyAgICAgICAgeCA9IG1heFg7CisKKyAgICByZXR1cm4geDsKK30K
Kwordm9pZCBzZXRVcEZvbnREZXNjcmlwdGlvbihGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgV2ViQ29yZTo6U2V0dGluZ3MqIHNldHRpbmdzKQoreworI2RlZmluZSBUT09MVElQX0ZP
TlRfRkFNSUxJRVMoc2l6ZSwgLi4uKSBcCitzdGF0aWMgY29uc3QgdW5zaWduZWQgdG9vbHRpcEZv
bnRGYWNlU2l6ZSA9IHNpemU7XAorc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyogdG9vbHRpcEZv
bnRGYWNlW3NpemVdID0geyBfX1ZBX0FSR1NfXyB9OworCisjaWYgT1MoV0lORE9XUykKK1RPT0xU
SVBfRk9OVF9GQU1JTElFUygyLCBuZXcgQXRvbWljU3RyaW5nKCJDb25zb2xhcyIpLCBuZXcgQXRv
bWljU3RyaW5nKCJMdWNpZGEgQ29uc29sZSIpKQorI2VsaWYgT1MoTUFDX09TX1gpCitUT09MVElQ
X0ZPTlRfRkFNSUxJRVMoMiwgbmV3IEF0b21pY1N0cmluZygiTWVubG8iKSwgbmV3IEF0b21pY1N0
cmluZygiTW9uYWNvIikpCisjZWxpZiBPUyhVTklYKQorVE9PTFRJUF9GT05UX0ZBTUlMSUVTKDEs
IG5ldyBBdG9taWNTdHJpbmcoImRlamF2dSBzYW5zIG1vbm8iKSkKKyNlbmRpZgorLy8gSW4gdGhl
IGRlZmF1bHQgY2FzZSwgd2UgZ2V0IHRoZSBzZXR0aW5ncy1wcm92aWRlZCBtb25vc3BhY2UgZm9u
dC4KKworI3VuZGVmIFRPT0xUSVBfRk9OVF9GQU1JTElFUworCisgICAgZm9udERlc2NyaXB0aW9u
LnNldFJlbmRlcmluZ01vZGUoc2V0dGluZ3MtPmZvbnRSZW5kZXJpbmdNb2RlKCkpOworICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZm9udEhlaWdodFB4KTsKKworICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgZml4ZWRGb250RmFtaWx5ID0gc2V0dGluZ3MtPmZpeGVkRm9udEZhbWls
eSgpOworICAgIGlmICghZml4ZWRGb250RmFtaWx5LmlzRW1wdHkoKSkgeworICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZh
bWlseSk7CisgICAgICAgIEZvbnRGYW1pbHkqIGN1cnJlbnRGYW1pbHkgPSAwOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9vbHRpcEZvbnRGYWNlU2l6ZTsgKytpKSB7CisgICAg
ICAgICAgICBpZiAoIWN1cnJlbnRGYW1pbHkpIHsKKyAgICAgICAgICAgICAgICBmb250RGVzY3Jp
cHRpb24uZmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoKnRvb2x0aXBGb250RmFjZVtpXSk7CisgICAg
ICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuYXBwZW5kRmFtaWx5KDAp
OworICAgICAgICAgICAgICAgIGN1cnJlbnRGYW1pbHkgPSAmZm9udERlc2NyaXB0aW9uLmZpcnN0
RmFtaWx5KCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFJlZlB0cjxT
aGFyZWRGb250RmFtaWx5PiBuZXdGYW1pbHkgPSBTaGFyZWRGb250RmFtaWx5OjpjcmVhdGUoKTsK
KyAgICAgICAgICAgICAgICBuZXdGYW1pbHktPnNldEZhbWlseSgqdG9vbHRpcEZvbnRGYWNlW2ld
KTsKKyAgICAgICAgICAgICAgICBjdXJyZW50RmFtaWx5LT5hcHBlbmRGYW1pbHkobmV3RmFtaWx5
KTsKKyAgICAgICAgICAgICAgICBjdXJyZW50RmFtaWx5ID0gbmV3RmFtaWx5LmdldCgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIFJlZlB0cjxTaGFyZWRGb250RmFtaWx5PiBu
ZXdGYW1pbHkgPSBTaGFyZWRGb250RmFtaWx5OjpjcmVhdGUoKTsKKyAgICAgICAgbmV3RmFtaWx5
LT5zZXRGYW1pbHkoZml4ZWRGb250RmFtaWx5KTsKKyAgICAgICAgY3VycmVudEZhbWlseS0+YXBw
ZW5kRmFtaWx5KG5ld0ZhbWlseSk7CisgICAgICAgIGN1cnJlbnRGYW1pbHkgPSBuZXdGYW1pbHku
Z2V0KCk7CisgICAgfQorfQorCit2b2lkIGRyYXdFbGVtZW50VGl0bGUoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBOb2RlKiBub2RlLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRS
ZWN0JiBib3VuZGluZ0JveCwgY29uc3QgSW50UmVjdCYgYW5jaG9yQm94LCBjb25zdCBGbG9hdFJl
Y3QmIHZpc2libGVSZWN0LCBXZWJDb3JlOjpTZXR0aW5ncyogc2V0dGluZ3MpCit7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChDb2xvciwgYmFja2dyb3VuZENvbG9yLCAoMjU1LCAyNTUsIDE5NCkp
OworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIHRhZ0NvbG9yLCAoMTM2LCAxOCwgMTI4
KSk7IC8vIFNhbWUgYXMgLndlYmtpdC1odG1sLXRhZy4KKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KENvbG9yLCBhdHRyQ29sb3IsICgyNiwgMjYsIDE2NikpOyAvLyBTYW1lIGFzIC53ZWJraXQtaHRt
bC1hdHRyaWJ1dGUtdmFsdWUuCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgbm9ybWFs
Q29sb3IsIChDb2xvcjo6YmxhY2spKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCBw
eEFuZEJvcmRlckNvbG9yLCAoMTI4LCAxMjgsIDEyOCkpOworCisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChTdHJpbmcsIHB4U3RyaW5nLCAoInB4IikpOworICAgIGNvbnN0IHN0YXRpYyBVQ2hhciB0
aW1lc1VDaGFyW10gPSB7IDB4MDAyMCwgMHgwMEQ3LCAweDAwMjAsIDAgfTsKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFN0cmluZywgdGltZXNTdHJpbmcsICh0aW1lc1VDaGFyKSk7IC8vICZ0aW1l
czsgc3RyaW5nCisKKyAgICBGb250Q2FjaGVQdXJnZVByZXZlbnRlciBmb250Q2FjaGVQdXJnZVBy
ZXZlbnRlcjsKKworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4o
bm9kZSk7CisgICAgYm9vbCBpc1hIVE1MID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+aXNYSFRNTERv
Y3VtZW50KCk7CisgICAgU3RyaW5nQnVpbGRlciBub2RlVGl0bGU7CisgICAgbm9kZVRpdGxlLmFw
cGVuZChpc1hIVE1MID8gZWxlbWVudC0+bm9kZU5hbWUoKSA6IGVsZW1lbnQtPm5vZGVOYW1lKCku
bG93ZXIoKSk7CisgICAgdW5zaWduZWQgdGFnTmFtZUxlbmd0aCA9IG5vZGVUaXRsZS5sZW5ndGgo
KTsKKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRWYWx1ZSA9IGVsZW1lbnQtPmdldElkQXR0
cmlidXRlKCk7CisgICAgdW5zaWduZWQgaWRTdHJpbmdMZW5ndGggPSAwOworICAgIFN0cmluZyBp
ZFN0cmluZzsKKyAgICBpZiAoIWlkVmFsdWUuaXNOdWxsKCkgJiYgIWlkVmFsdWUuaXNFbXB0eSgp
KSB7CisgICAgICAgIG5vZGVUaXRsZS5hcHBlbmQoIiMiKTsKKyAgICAgICAgbm9kZVRpdGxlLmFw
cGVuZChpZFZhbHVlKTsKKyAgICAgICAgaWRTdHJpbmdMZW5ndGggPSAxICsgaWRWYWx1ZS5sZW5n
dGgoKTsKKyAgICB9CisKKyAgICBIYXNoU2V0PEF0b21pY1N0cmluZz4gdXNlZENsYXNzTmFtZXM7
CisgICAgdW5zaWduZWQgY2xhc3Nlc1N0cmluZ0xlbmd0aCA9IDA7CisgICAgaWYgKGVsZW1lbnQt
Pmhhc0NsYXNzKCkgJiYgZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50KCkpIHsKKyAgICAgICAgY29u
c3QgU3BhY2VTcGxpdFN0cmluZyYgY2xhc3NOYW1lc1N0cmluZyA9IHN0YXRpY19jYXN0PFN0eWxl
ZEVsZW1lbnQqPihlbGVtZW50KS0+Y2xhc3NOYW1lcygpOworICAgICAgICBzaXplX3QgY2xhc3NO
YW1lQ291bnQgPSBjbGFzc05hbWVzU3RyaW5nLnNpemUoKTsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjbGFzc05hbWVDb3VudDsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNTdHJpbmdbaV07CisgICAgICAgICAgICBp
ZiAodXNlZENsYXNzTmFtZXMuY29udGFpbnMoY2xhc3NOYW1lKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIHVzZWRDbGFzc05hbWVzLmFkZChjbGFzc05hbWUpOworICAg
ICAgICAgICAgbm9kZVRpdGxlLmFwcGVuZCgiLiIpOworICAgICAgICAgICAgbm9kZVRpdGxlLmFw
cGVuZChjbGFzc05hbWUpOworICAgICAgICAgICAgY2xhc3Nlc1N0cmluZ0xlbmd0aCArPSAxICsg
Y2xhc3NOYW1lLmxlbmd0aCgpOworICAgICAgICB9CisgICAgfQorCisgICAgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIG1vZGVsT2JqZWN0ID0gcmVuZGVyZXItPmlzQm94TW9kZWxPYmplY3QoKSA/IHRv
UmVuZGVyQm94TW9kZWxPYmplY3QocmVuZGVyZXIpIDogMDsKKworICAgIFN0cmluZyB3aWR0aE51
bWJlclBhcnQgPSAiICIgKyBTdHJpbmc6Om51bWJlcihtb2RlbE9iamVjdCA/IGFkanVzdEZvckFi
c29sdXRlWm9vbShtb2RlbE9iamVjdC0+cGl4ZWxTbmFwcGVkT2Zmc2V0V2lkdGgoKSwgbW9kZWxP
YmplY3QpIDogYm91bmRpbmdCb3gud2lkdGgoKSk7CisgICAgbm9kZVRpdGxlLmFwcGVuZCh3aWR0
aE51bWJlclBhcnQpOworICAgIG5vZGVUaXRsZS5hcHBlbmQocHhTdHJpbmcpOworICAgIG5vZGVU
aXRsZS5hcHBlbmQodGltZXNTdHJpbmcpOworICAgIFN0cmluZyBoZWlnaHROdW1iZXJQYXJ0ID0g
U3RyaW5nOjpudW1iZXIobW9kZWxPYmplY3QgPyBhZGp1c3RGb3JBYnNvbHV0ZVpvb20obW9kZWxP
YmplY3QtPnBpeGVsU25hcHBlZE9mZnNldEhlaWdodCgpLCBtb2RlbE9iamVjdCkgOiBib3VuZGlu
Z0JveC5oZWlnaHQoKSk7CisgICAgbm9kZVRpdGxlLmFwcGVuZChoZWlnaHROdW1iZXJQYXJ0KTsK
KyAgICBub2RlVGl0bGUuYXBwZW5kKHB4U3RyaW5nKTsKKworICAgIEZvbnREZXNjcmlwdGlvbiBk
ZXNjOworICAgIHNldFVwRm9udERlc2NyaXB0aW9uKGRlc2MsIHNldHRpbmdzKTsKKyAgICBGb250
IGZvbnQgPSBGb250KGRlc2MsIDAsIDApOworICAgIGZvbnQudXBkYXRlKDApOworCisgICAgVGV4
dFJ1biBub2RlVGl0bGVSdW4obm9kZVRpdGxlLnRvU3RyaW5nKCkpOworICAgIEludFBvaW50IHRp
dGxlQmFzZVBvaW50ID0gSW50UG9pbnQoYW5jaG9yQm94LngoKSwgYW5jaG9yQm94Lm1heFkoKSAt
IDEpOworICAgIHRpdGxlQmFzZVBvaW50Lm1vdmUocmVjdEluZmxhdGVQeCwgcmVjdEluZmxhdGVQ
eCk7CisgICAgSW50UmVjdCB0aXRsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZvbnQuc2VsZWN0
aW9uUmVjdEZvclRleHQobm9kZVRpdGxlUnVuLCB0aXRsZUJhc2VQb2ludCwgZm9udEhlaWdodFB4
KSk7CisgICAgdGl0bGVSZWN0LmluZmxhdGUocmVjdEluZmxhdGVQeCk7CisKKyAgICAvLyBUaGUg
aW5pdGlhbCBvZmZzZXRzIG5lZWRlZCB0byBjb21wZW5zYXRlIGZvciBhIDFweC10aGljayBib3Jk
ZXIgc3Ryb2tlICh3aGljaCBpcyBub3QgYSBwYXJ0IG9mIHRoZSByZWN0YW5nbGUpLgorICAgIGlu
dCBkeCA9IC1ib3JkZXJXaWR0aFB4OworICAgIGludCBkeSA9IGJvcmRlcldpZHRoUHg7CisKKyAg
ICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIHJpZ2h0IG9mIHZpc2libGVSZWN0LCBy
aWdodC1hbGlnbiB0aGUgdGlwIHdpdGggdGhlIHNhaWQgYm91bmRhcnkuCisgICAgaWYgKHRpdGxl
UmVjdC5tYXhYKCkgKyBkeCA+IHZpc2libGVSZWN0Lm1heFgoKSkKKyAgICAgICAgZHggPSB2aXNp
YmxlUmVjdC5tYXhYKCkgLSB0aXRsZVJlY3QubWF4WCgpOworCisgICAgLy8gSWYgdGhlIHRpcCBz
dGlja3MgYmV5b25kIHRoZSBsZWZ0IG9mIHZpc2libGVSZWN0LCBsZWZ0LWFsaWduIHRoZSB0aXAg
d2l0aCB0aGUgc2FpZCBib3VuZGFyeS4KKyAgICBpZiAodGl0bGVSZWN0LngoKSArIGR4IDwgdmlz
aWJsZVJlY3QueCgpKQorICAgICAgICBkeCA9IHZpc2libGVSZWN0LngoKSAtIHRpdGxlUmVjdC54
KCkgLSBib3JkZXJXaWR0aFB4OworCisgICAgLy8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRo
ZSBib3R0b20gb2YgdmlzaWJsZVJlY3QsIHNob3cgdGhlIHRpcCBhdCB0b3Agb2YgYm91bmRpbmcg
Ym94LgorICAgIGlmICh0aXRsZVJlY3QubWF4WSgpICsgZHkgPiB2aXNpYmxlUmVjdC5tYXhZKCkp
IHsKKyAgICAgICAgZHkgPSBhbmNob3JCb3gueSgpIC0gdGl0bGVSZWN0Lm1heFkoKSAtIGJvcmRl
cldpZHRoUHg7CisgICAgICAgIC8vIElmIHRoZSB0aXAgc3RpbGwgc3RpY2tzIGJleW9uZCB0aGUg
Ym90dG9tIG9mIHZpc2libGVSZWN0LCBib3R0b20tYWxpZ24gdGhlIHRpcCB3aXRoIHRoZSBzYWlk
IGJvdW5kYXJ5LgorICAgICAgICBpZiAodGl0bGVSZWN0Lm1heFkoKSArIGR5ID4gdmlzaWJsZVJl
Y3QubWF4WSgpKQorICAgICAgICAgICAgZHkgPSB2aXNpYmxlUmVjdC5tYXhZKCkgLSB0aXRsZVJl
Y3QubWF4WSgpOworICAgIH0KKworICAgIC8vIElmIHRoZSB0aXAgc3RpY2tzIGJleW9uZCB0aGUg
dG9wIG9mIHZpc2libGVSZWN0LCBzaG93IHRoZSB0aXAgYXQgdG9wIG9mIHZpc2libGVSZWN0Lgor
ICAgIGlmICh0aXRsZVJlY3QueSgpICsgZHkgPCB2aXNpYmxlUmVjdC55KCkpCisgICAgICAgIGR5
ID0gdmlzaWJsZVJlY3QueSgpIC0gdGl0bGVSZWN0LnkoKSArIGJvcmRlcldpZHRoUHg7CisKKyAg
ICB0aXRsZVJlY3QubW92ZShkeCwgZHkpOworCisgICAgYm9vbCBpc0Fycm93QXRUb3AgPSB0aXRs
ZVJlY3QueSgpID4gYW5jaG9yQm94LnkoKTsKKyAgICB0aXRsZVJlY3QubW92ZSgwLCB0b29sdGlw
UGFkZGluZyAqIChpc0Fycm93QXRUb3AgPyAxIDogLTEpKTsKKworICAgIHsKKyAgICAgICAgZmxv
YXQgYXJyb3dUaXBYID0gY2FsY3VsYXRlQXJyb3dUaXBYKGFuY2hvckJveCwgdGl0bGVSZWN0KTsK
KyAgICAgICAgaW50IGFycm93QmFzZVkgPSBpc0Fycm93QXRUb3AgPyB0aXRsZVJlY3QueSgpIDog
dGl0bGVSZWN0Lm1heFkoKTsKKyAgICAgICAgaW50IGFycm93T3Bwb3NpdGVZID0gaXNBcnJvd0F0
VG9wID8gdGl0bGVSZWN0Lm1heFkoKSA6IHRpdGxlUmVjdC55KCk7CisKKyAgICAgICAgRmxvYXRQ
b2ludCBwb2ludHNbOF07CisgICAgICAgIHBvaW50c1swXSA9IEZsb2F0UG9pbnQoYXJyb3dUaXBY
IC0gYXJyb3dIYWxmV2lkdGgsIGFycm93QmFzZVkpOworICAgICAgICBwb2ludHNbMV0gPSBGbG9h
dFBvaW50KGFycm93VGlwWCwgYXJyb3dCYXNlWSArIGFycm93SGVpZ2h0ICogKGlzQXJyb3dBdFRv
cCA/IC0xIDogMSkpOworICAgICAgICBwb2ludHNbMl0gPSBGbG9hdFBvaW50KGFycm93VGlwWCAr
IGFycm93SGFsZldpZHRoLCBhcnJvd0Jhc2VZKTsKKyAgICAgICAgcG9pbnRzWzNdID0gRmxvYXRQ
b2ludCh0aXRsZVJlY3QubWF4WCgpLCBhcnJvd0Jhc2VZKTsKKyAgICAgICAgcG9pbnRzWzRdID0g
RmxvYXRQb2ludCh0aXRsZVJlY3QubWF4WCgpLCBhcnJvd09wcG9zaXRlWSk7CisgICAgICAgIHBv
aW50c1s1XSA9IEZsb2F0UG9pbnQodGl0bGVSZWN0LngoKSwgYXJyb3dPcHBvc2l0ZVkpOworICAg
ICAgICBwb2ludHNbNl0gPSBGbG9hdFBvaW50KHRpdGxlUmVjdC54KCksIGFycm93QmFzZVkpOwor
ICAgICAgICBwb2ludHNbN10gPSBwb2ludHNbMF07CisKKyAgICAgICAgUGF0aCBwYXRoOworICAg
ICAgICBwYXRoLm1vdmVUbyhwb2ludHNbMF0pOworICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8
IDg7ICsraSkKKyAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHBvaW50c1tpXSk7CisKKyAgICAg
ICAgY29udGV4dC5zYXZlKCk7CisgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKDAuNWYsIDAuNWYp
OworICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKHB4QW5kQm9yZGVyQ29sb3IsIENvbG9y
U3BhY2VEZXZpY2VSR0IpOworICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihiYWNrZ3JvdW5k
Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRo
aWNrbmVzcyhib3JkZXJXaWR0aFB4KTsKKyAgICAgICAgY29udGV4dC5maWxsUGF0aChwYXRoKTsK
KyAgICAgICAgY29udGV4dC5zdHJva2VQYXRoKHBhdGgpOworICAgICAgICBjb250ZXh0LnJlc3Rv
cmUoKTsKKyAgICB9CisKKyAgICBpbnQgY3VycmVudFBvcyA9IDA7CisgICAgY3VycmVudFBvcyA9
IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBjdXJyZW50UG9zLCB0YWdOYW1lTGVuZ3RoLCB0
YWdDb2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVSZWN0KTsKKyAgICBpZiAoaWRTdHJpbmdMZW5n
dGgpCisgICAgICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3Vy
cmVudFBvcywgaWRTdHJpbmdMZW5ndGgsIGF0dHJDb2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVS
ZWN0KTsKKyAgICBpZiAoY2xhc3Nlc1N0cmluZ0xlbmd0aCkKKyAgICAgICAgY3VycmVudFBvcyA9
IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBjdXJyZW50UG9zLCBjbGFzc2VzU3RyaW5nTGVu
Z3RoLCBhdHRyQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7CisgICAgY3VycmVudFBv
cyA9IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBjdXJyZW50UG9zLCB3aWR0aE51bWJlclBh
cnQubGVuZ3RoKCksIG5vcm1hbENvbG9yLCBmb250LCBjb250ZXh0LCB0aXRsZVJlY3QpOworICAg
IGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3VycmVudFBvcywgcHhT
dHJpbmcubGVuZ3RoKCkgKyB0aW1lc1N0cmluZy5sZW5ndGgoKSwgcHhBbmRCb3JkZXJDb2xvciwg
Zm9udCwgY29udGV4dCwgdGl0bGVSZWN0KTsKKyAgICBjdXJyZW50UG9zID0gZHJhd1N1YnN0cmlu
Zyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIGhlaWdodE51bWJlclBhcnQubGVuZ3RoKCksIG5v
cm1hbENvbG9yLCBmb250LCBjb250ZXh0LCB0aXRsZVJlY3QpOworICAgIGRyYXdTdWJzdHJpbmco
bm9kZVRpdGxlUnVuLCBjdXJyZW50UG9zLCBweFN0cmluZy5sZW5ndGgoKSwgcHhBbmRCb3JkZXJD
b2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVSZWN0KTsKK30KKworc3RhdGljIHZvaWQgY29udGVu
dHNRdWFkVG9QYWdlKGNvbnN0IEZyYW1lVmlldyogbWFpblZpZXcsIGNvbnN0IEZyYW1lVmlldyog
dmlldywgRmxvYXRRdWFkJiBxdWFkKQoreworICAgIHF1YWQuc2V0UDEodmlldy0+Y29udGVudHNU
b1Jvb3RWaWV3KHJvdW5kZWRJbnRQb2ludChxdWFkLnAxKCkpKSk7CisgICAgcXVhZC5zZXRQMih2
aWV3LT5jb250ZW50c1RvUm9vdFZpZXcocm91bmRlZEludFBvaW50KHF1YWQucDIoKSkpKTsKKyAg
ICBxdWFkLnNldFAzKHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhyb3VuZGVkSW50UG9pbnQocXVh
ZC5wMygpKSkpOworICAgIHF1YWQuc2V0UDQodmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHJvdW5k
ZWRJbnRQb2ludChxdWFkLnA0KCkpKSk7CisgICAgcXVhZCArPSBtYWluVmlldy0+c2Nyb2xsT2Zm
c2V0KCk7Cit9CisKK3N0YXRpYyB2b2lkIGdldE9yRHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBIaWdobGlnaHREYXRhKiBoaWdobGlnaHREYXRhLCBIaWdobGlnaHQq
IGhpZ2hsaWdodCkKK3sKKyAgICBOb2RlKiBub2RlID0gaGlnaGxpZ2h0RGF0YS0+bm9kZS5nZXQo
KTsKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKKyAgICBG
cmFtZSogY29udGFpbmluZ0ZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKworICAg
IGlmICghcmVuZGVyZXIgfHwgIWNvbnRhaW5pbmdGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgRnJhbWVWaWV3KiBjb250YWluaW5nVmlldyA9IGNvbnRhaW5pbmdGcmFtZS0+dmlldygpOwor
ICAgIEZyYW1lVmlldyogbWFpblZpZXcgPSBjb250YWluaW5nRnJhbWUtPnBhZ2UoKS0+bWFpbkZy
YW1lKCktPnZpZXcoKTsKKyAgICBJbnRSZWN0IGJvdW5kaW5nQm94ID0gcGl4ZWxTbmFwcGVkSW50
UmVjdChjb250YWluaW5nVmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHJlbmRlcmVyLT5hYnNvbHV0
ZUJvdW5kaW5nQm94UmVjdCgpKSk7CisgICAgYm91bmRpbmdCb3gubW92ZShtYWluVmlldy0+c2Ny
b2xsT2Zmc2V0KCkpOworICAgIEludFJlY3QgdGl0bGVBbmNob3JCb3ggPSBib3VuZGluZ0JveDsK
KworICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdCA9IG1haW5WaWV3LT52aXNpYmxlQ29udGVudFJl
Y3QoKTsKKyAgICAvLyBEb24ndCB0cmFuc2xhdGUgdGhlIGNvbnRleHQgaWYgdGhlIGZyYW1lIGlz
IHJlbmRlcmVkIGluIHBhZ2UgY29vcmRpbmF0ZXMuCisgICAgaWYgKGNvbnRleHQgJiYgIW1haW5W
aWV3LT5kZWxlZ2F0ZXNTY3JvbGxpbmcoKSkKKyAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKC12
aXNpYmxlUmVjdC54KCksIC12aXNpYmxlUmVjdC55KCkpOworCisgICAgLy8gUmVuZGVyU1ZHUm9v
dCBzaG91bGQgYmUgaGlnaGxpZ2h0ZWQgdGhyb3VnaCB0aGUgaXNCb3goKSBjb2RlIHBhdGgsIGFs
bCBvdGhlciBTVkcgZWxlbWVudHMgc2hvdWxkIGp1c3QgZHVtcCB0aGVpciBhYnNvbHV0ZVF1YWRz
KCkuCisjaWYgRU5BQkxFKFNWRykKKyAgICBib29sIGlzU1ZHUmVuZGVyZXIgPSByZW5kZXJlci0+
bm9kZSgpICYmIHJlbmRlcmVyLT5ub2RlKCktPmlzU1ZHRWxlbWVudCgpICYmICFyZW5kZXJlci0+
aXNTVkdSb290KCk7CisjZWxzZQorICAgIGJvb2wgaXNTVkdSZW5kZXJlciA9IGZhbHNlOworI2Vu
ZGlmCisKKyAgICBpZiAoaXNTVkdSZW5kZXJlcikgeworICAgICAgICBoaWdobGlnaHQtPnR5cGUg
PSBIaWdobGlnaHRUeXBlUmVjdHM7CisgICAgICAgIHJlbmRlcmVyLT5hYnNvbHV0ZVF1YWRzKGhp
Z2hsaWdodC0+cXVhZHMpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhpZ2hsaWdo
dC0+cXVhZHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBjb250ZW50c1F1YWRUb1BhZ2UobWFp
blZpZXcsIGNvbnRhaW5pbmdWaWV3LCBoaWdobGlnaHQtPnF1YWRzW2ldKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgICAgIGRyYXdIaWdobGlnaHRGb3JTVkdSZW5kZXJlcigqY29u
dGV4dCwgaGlnaGxpZ2h0LT5xdWFkcywgaGlnaGxpZ2h0RGF0YSk7CisgICAgfSBlbHNlIGlmIChy
ZW5kZXJlci0+aXNCb3goKSB8fCByZW5kZXJlci0+aXNSZW5kZXJJbmxpbmUoKSkgeworICAgICAg
ICBMYXlvdXRSZWN0IGNvbnRlbnRCb3g7CisgICAgICAgIExheW91dFJlY3QgcGFkZGluZ0JveDsK
KyAgICAgICAgTGF5b3V0UmVjdCBib3JkZXJCb3g7CisgICAgICAgIExheW91dFJlY3QgbWFyZ2lu
Qm94OworCisgICAgICAgIGlmIChyZW5kZXJlci0+aXNCb3goKSkgeworICAgICAgICAgICAgUmVu
ZGVyQm94KiByZW5kZXJCb3ggPSB0b1JlbmRlckJveChyZW5kZXJlcik7CisKKyAgICAgICAgICAg
IC8vIFJlbmRlckJveCByZXR1cm5zIHRoZSAicHVyZSIgY29udGVudCBhcmVhIGJveCwgZXhjbHVz
aXZlIG9mIHRoZSBzY3JvbGxiYXJzIChpZiBwcmVzZW50KSwgd2hpY2ggYWxzbyBjb3VudCB0b3dh
cmRzIHRoZSBjb250ZW50IGFyZWEgaW4gQ1NTLgorICAgICAgICAgICAgY29udGVudEJveCA9IHJl
bmRlckJveC0+Y29udGVudEJveFJlY3QoKTsKKyAgICAgICAgICAgIGNvbnRlbnRCb3guc2V0V2lk
dGgoY29udGVudEJveC53aWR0aCgpICsgcmVuZGVyQm94LT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRo
KCkpOworICAgICAgICAgICAgY29udGVudEJveC5zZXRIZWlnaHQoY29udGVudEJveC5oZWlnaHQo
KSArIHJlbmRlckJveC0+aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpKTsKKworICAgICAgICAg
ICAgcGFkZGluZ0JveCA9IExheW91dFJlY3QoY29udGVudEJveC54KCkgLSByZW5kZXJCb3gtPnBh
ZGRpbmdMZWZ0KCksIGNvbnRlbnRCb3gueSgpIC0gcmVuZGVyQm94LT5wYWRkaW5nVG9wKCksCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRlbnRCb3gud2lkdGgoKSArIHJlbmRlckJveC0+cGFkZGlu
Z0xlZnQoKSArIHJlbmRlckJveC0+cGFkZGluZ1JpZ2h0KCksIGNvbnRlbnRCb3guaGVpZ2h0KCkg
KyByZW5kZXJCb3gtPnBhZGRpbmdUb3AoKSArIHJlbmRlckJveC0+cGFkZGluZ0JvdHRvbSgpKTsK
KyAgICAgICAgICAgIGJvcmRlckJveCA9IExheW91dFJlY3QocGFkZGluZ0JveC54KCkgLSByZW5k
ZXJCb3gtPmJvcmRlckxlZnQoKSwgcGFkZGluZ0JveC55KCkgLSByZW5kZXJCb3gtPmJvcmRlclRv
cCgpLAorICAgICAgICAgICAgICAgICAgICBwYWRkaW5nQm94LndpZHRoKCkgKyByZW5kZXJCb3gt
PmJvcmRlckxlZnQoKSArIHJlbmRlckJveC0+Ym9yZGVyUmlnaHQoKSwgcGFkZGluZ0JveC5oZWln
aHQoKSArIHJlbmRlckJveC0+Ym9yZGVyVG9wKCkgKyByZW5kZXJCb3gtPmJvcmRlckJvdHRvbSgp
KTsKKyAgICAgICAgICAgIG1hcmdpbkJveCA9IExheW91dFJlY3QoYm9yZGVyQm94LngoKSAtIHJl
bmRlckJveC0+bWFyZ2luTGVmdCgpLCBib3JkZXJCb3gueSgpIC0gcmVuZGVyQm94LT5tYXJnaW5U
b3AoKSwKKyAgICAgICAgICAgICAgICAgICAgYm9yZGVyQm94LndpZHRoKCkgKyByZW5kZXJCb3gt
Pm1hcmdpbldpZHRoKCksIGJvcmRlckJveC5oZWlnaHQoKSArIHJlbmRlckJveC0+bWFyZ2luSGVp
Z2h0KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUmVuZGVySW5saW5lKiByZW5k
ZXJJbmxpbmUgPSB0b1JlbmRlcklubGluZShyZW5kZXJlcik7CisKKyAgICAgICAgICAgIC8vIFJl
bmRlcklubGluZSdzIGJvdW5kaW5nIGJveCBpbmNsdWRlcyBwYWRkaW5ncyBhbmQgYm9yZGVycywg
ZXhjbHVkZXMgbWFyZ2lucy4KKyAgICAgICAgICAgIGJvcmRlckJveCA9IHJlbmRlcklubGluZS0+
bGluZXNCb3VuZGluZ0JveCgpOworICAgICAgICAgICAgcGFkZGluZ0JveCA9IExheW91dFJlY3Qo
Ym9yZGVyQm94LngoKSArIHJlbmRlcklubGluZS0+Ym9yZGVyTGVmdCgpLCBib3JkZXJCb3gueSgp
ICsgcmVuZGVySW5saW5lLT5ib3JkZXJUb3AoKSwKKyAgICAgICAgICAgICAgICAgICAgYm9yZGVy
Qm94LndpZHRoKCkgLSByZW5kZXJJbmxpbmUtPmJvcmRlckxlZnQoKSAtIHJlbmRlcklubGluZS0+
Ym9yZGVyUmlnaHQoKSwgYm9yZGVyQm94LmhlaWdodCgpIC0gcmVuZGVySW5saW5lLT5ib3JkZXJU
b3AoKSAtIHJlbmRlcklubGluZS0+Ym9yZGVyQm90dG9tKCkpOworICAgICAgICAgICAgY29udGVu
dEJveCA9IExheW91dFJlY3QocGFkZGluZ0JveC54KCkgKyByZW5kZXJJbmxpbmUtPnBhZGRpbmdM
ZWZ0KCksIHBhZGRpbmdCb3gueSgpICsgcmVuZGVySW5saW5lLT5wYWRkaW5nVG9wKCksCisgICAg
ICAgICAgICAgICAgICAgIHBhZGRpbmdCb3gud2lkdGgoKSAtIHJlbmRlcklubGluZS0+cGFkZGlu
Z0xlZnQoKSAtIHJlbmRlcklubGluZS0+cGFkZGluZ1JpZ2h0KCksIHBhZGRpbmdCb3guaGVpZ2h0
KCkgLSByZW5kZXJJbmxpbmUtPnBhZGRpbmdUb3AoKSAtIHJlbmRlcklubGluZS0+cGFkZGluZ0Jv
dHRvbSgpKTsKKyAgICAgICAgICAgIC8vIElnbm9yZSBtYXJnaW5Ub3AgYW5kIG1hcmdpbkJvdHRv
bSBmb3IgaW5saW5lcy4KKyAgICAgICAgICAgIG1hcmdpbkJveCA9IExheW91dFJlY3QoYm9yZGVy
Qm94LngoKSAtIHJlbmRlcklubGluZS0+bWFyZ2luTGVmdCgpLCBib3JkZXJCb3gueSgpLAorICAg
ICAgICAgICAgICAgICAgICBib3JkZXJCb3gud2lkdGgoKSArIHJlbmRlcklubGluZS0+bWFyZ2lu
V2lkdGgoKSwgYm9yZGVyQm94LmhlaWdodCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEZsb2F0
UXVhZCBhYnNDb250ZW50UXVhZCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0
UmVjdChjb250ZW50Qm94KSk7CisgICAgICAgIEZsb2F0UXVhZCBhYnNQYWRkaW5nUXVhZCA9IHJl
bmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChwYWRkaW5nQm94KSk7CisgICAg
ICAgIEZsb2F0UXVhZCBhYnNCb3JkZXJRdWFkID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1
YWQoRmxvYXRSZWN0KGJvcmRlckJveCkpOworICAgICAgICBGbG9hdFF1YWQgYWJzTWFyZ2luUXVh
ZCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChtYXJnaW5Cb3gpKTsK
KworICAgICAgICBjb250ZW50c1F1YWRUb1BhZ2UobWFpblZpZXcsIGNvbnRhaW5pbmdWaWV3LCBh
YnNDb250ZW50UXVhZCk7CisgICAgICAgIGNvbnRlbnRzUXVhZFRvUGFnZShtYWluVmlldywgY29u
dGFpbmluZ1ZpZXcsIGFic1BhZGRpbmdRdWFkKTsKKyAgICAgICAgY29udGVudHNRdWFkVG9QYWdl
KG1haW5WaWV3LCBjb250YWluaW5nVmlldywgYWJzQm9yZGVyUXVhZCk7CisgICAgICAgIGNvbnRl
bnRzUXVhZFRvUGFnZShtYWluVmlldywgY29udGFpbmluZ1ZpZXcsIGFic01hcmdpblF1YWQpOwor
CisgICAgICAgIHRpdGxlQW5jaG9yQm94ID0gYWJzTWFyZ2luUXVhZC5lbmNsb3NpbmdCb3VuZGlu
Z0JveCgpOworCisgICAgICAgIGhpZ2hsaWdodC0+dHlwZSA9IEhpZ2hsaWdodFR5cGVOb2RlOwor
ICAgICAgICBoaWdobGlnaHQtPnF1YWRzLmFwcGVuZChhYnNNYXJnaW5RdWFkKTsKKyAgICAgICAg
aGlnaGxpZ2h0LT5xdWFkcy5hcHBlbmQoYWJzQm9yZGVyUXVhZCk7CisgICAgICAgIGhpZ2hsaWdo
dC0+cXVhZHMuYXBwZW5kKGFic1BhZGRpbmdRdWFkKTsKKyAgICAgICAgaGlnaGxpZ2h0LT5xdWFk
cy5hcHBlbmQoYWJzQ29udGVudFF1YWQpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICAgICAgZHJhd0hpZ2hsaWdodEZvckJveCgqY29udGV4dCwgYWJzQ29udGVudFF1YWQsIGFic1Bh
ZGRpbmdRdWFkLCBhYnNCb3JkZXJRdWFkLCBhYnNNYXJnaW5RdWFkLCBoaWdobGlnaHREYXRhKTsK
KyAgICB9CisKKyAgICAvLyBEcmF3IG5vZGUgdGl0bGUgaWYgbmVjZXNzYXJ5LgorCisgICAgaWYg
KCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjb250
ZXh0ICYmIGhpZ2hsaWdodERhdGEtPnNob3dJbmZvKQorICAgICAgICBkcmF3RWxlbWVudFRpdGxl
KCpjb250ZXh0LCBub2RlLCByZW5kZXJlciwgcGl4ZWxTbmFwcGVkSW50UmVjdChib3VuZGluZ0Jv
eCksIHBpeGVsU25hcHBlZEludFJlY3QodGl0bGVBbmNob3JCb3gpLCB2aXNpYmxlUmVjdCwgY29u
dGFpbmluZ0ZyYW1lLT5zZXR0aW5ncygpKTsKK30KKworc3RhdGljIHZvaWQgZ2V0T3JEcmF3UmVj
dEhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIERvY3VtZW50KiBkb2N1bWVudCwg
SGlnaGxpZ2h0RGF0YSogaGlnaGxpZ2h0RGF0YSwgSGlnaGxpZ2h0ICpoaWdobGlnaHQpCit7Cisg
ICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRmxvYXRSZWN0IGhpZ2hs
aWdodFJlY3QoKihoaWdobGlnaHREYXRhLT5yZWN0KSk7CisKKyAgICBoaWdobGlnaHQtPnR5cGUg
PSBIaWdobGlnaHRUeXBlUmVjdHM7CisgICAgaGlnaGxpZ2h0LT5xdWFkcy5hcHBlbmQoaGlnaGxp
Z2h0UmVjdCk7CisKKyAgICBpZiAoY29udGV4dCkgeworICAgICAgICBGcmFtZVZpZXcqIHZpZXcg
PSBkb2N1bWVudC0+ZnJhbWUoKS0+dmlldygpOworICAgICAgICBpZiAoIXZpZXctPmRlbGVnYXRl
c1Njcm9sbGluZygpKSB7CisgICAgICAgICAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QgPSB2aWV3
LT52aXNpYmxlQ29udGVudFJlY3QoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgt
dmlzaWJsZVJlY3QueCgpLCAtdmlzaWJsZVJlY3QueSgpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGRyYXdPdXRsaW5lZFF1YWQoKmNvbnRleHQsIGhpZ2hsaWdodFJlY3QsIGhpZ2hsaWdodERhdGEt
PmNvbnRlbnQsIGhpZ2hsaWdodERhdGEtPmNvbnRlbnRPdXRsaW5lKTsKKyAgICB9Cit9CisKK30g
Ly8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitJbnNwZWN0b3JPdmVybGF5OjpJbnNwZWN0b3JPdmVy
bGF5KFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQorICAgIDogbV9wYWdlKHBh
Z2UpCisgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX3Nob3VsZFNob3dQYXVzZVdhcm5p
bmcoZmFsc2UpCisgICAgLCBtX2RvY3VtZW50KDApCisgICAgLCBtX2hpZ2hsaWdodERhdGEoMCkK
K3sKK30KKwordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkKK3sKKyAgICBpZiAobV9oaWdobGlnaHREYXRhKQorICAgICAgICBkcmF3SGlnaGxpZ2h0
KGNvbnRleHQpOworICAgIGVsc2UgaWYgKG1fc2hvdWxkU2hvd1BhdXNlV2FybmluZykKKyAgICAg
ICAgZHJhd1BhdXNlV2FybmluZyhjb250ZXh0KTsKK30KKwordm9pZCBJbnNwZWN0b3JPdmVybGF5
OjpkcmF3T3V0bGluZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBGbG9hdFJlY3Qgb3V0bGluZVJlY3Qg
PSByZWN0OworICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgb3V0bGluZVJlY3QsIENvbG9y
KCksIGNvbG9yKTsKK30KKwordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpnZXRIaWdobGlnaHQoRG9j
dW1lbnQqIGRvY3VtZW50LCBIaWdobGlnaHREYXRhKiBoaWdobGlnaHREYXRhLCBIaWdobGlnaHQq
IGhpZ2hsaWdodCkKK3sKKyAgICBpZiAoIWhpZ2hsaWdodERhdGEpCisgICAgICAgIHJldHVybjsK
KworICAgIGhpZ2hsaWdodC0+Y29udGVudENvbG9yID0gaGlnaGxpZ2h0RGF0YS0+Y29udGVudDsK
KyAgICBoaWdobGlnaHQtPnBhZGRpbmdDb2xvciA9IGhpZ2hsaWdodERhdGEtPnBhZGRpbmc7Cisg
ICAgaGlnaGxpZ2h0LT5ib3JkZXJDb2xvciA9IGhpZ2hsaWdodERhdGEtPmJvcmRlcjsKKyAgICBo
aWdobGlnaHQtPm1hcmdpbkNvbG9yID0gaGlnaGxpZ2h0RGF0YS0+bWFyZ2luOworICAgIGhpZ2hs
aWdodC0+dHlwZSA9IEhpZ2hsaWdodFR5cGVSZWN0czsKKworICAgIGlmIChoaWdobGlnaHREYXRh
LT5ub2RlKQorICAgICAgICBnZXRPckRyYXdOb2RlSGlnaGxpZ2h0KDAsIGhpZ2hsaWdodERhdGEs
IGhpZ2hsaWdodCk7CisgICAgZWxzZSBpZiAoaGlnaGxpZ2h0RGF0YS0+cmVjdCkKKyAgICAgICAg
Z2V0T3JEcmF3UmVjdEhpZ2hsaWdodCgwLCBkb2N1bWVudCwgaGlnaGxpZ2h0RGF0YSwgaGlnaGxp
Z2h0KTsKK30KKwordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpzZXRIaWdobGlnaHQoRG9jdW1lbnQq
IGRvY3VtZW50LCBIaWdobGlnaHREYXRhKiBoaWdobGlnaHREYXRhKQoreworICAgIGlmIChkb2N1
bWVudCAmJiBoaWdobGlnaHREYXRhICYmIChoaWdobGlnaHREYXRhLT5ub2RlIHx8IGhpZ2hsaWdo
dERhdGEtPnJlY3QpKSB7CisgICAgICAgIG1fZG9jdW1lbnQgPSBoaWdobGlnaHREYXRhLT5ub2Rl
ID8gaGlnaGxpZ2h0RGF0YS0+bm9kZS0+ZG9jdW1lbnQoKSA6IGRvY3VtZW50OworICAgICAgICBt
X2hpZ2hsaWdodERhdGEgPSBoaWdobGlnaHREYXRhOworICAgIH0gZWxzZSB7CisgICAgICAgIG1f
ZG9jdW1lbnQgPSAwOworICAgICAgICBtX2hpZ2hsaWdodERhdGEgPSAwOworICAgIH0KKyAgICB1
cGRhdGUoKTsKK30KKwordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpzZXRTaG91bGRTaG93UGF1c2VX
YXJuaW5nKGJvb2wgc2hvdWxkU2hvd1BhdXNlV2FybmluZykKK3sKKyAgICBtX3Nob3VsZFNob3dQ
YXVzZVdhcm5pbmcgPSBzaG91bGRTaG93UGF1c2VXYXJuaW5nOworICAgIHVwZGF0ZSgpOworfQor
Cit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnVwZGF0ZSgpCit7CisgICAgaWYgKCFtX2NsaWVudCkg
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9oaWdobGlnaHREYXRhIHx8IG1fc2hvdWxkU2hv
d1BhdXNlV2FybmluZykKKyAgICAgICAgbV9jbGllbnQtPmhpZ2hsaWdodCgpOworICAgIGVsc2UK
KyAgICAgICAgbV9jbGllbnQtPmhpZGVIaWdobGlnaHQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JP
dmVybGF5OjpkcmF3SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBp
ZiAoIW1faGlnaGxpZ2h0RGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSGlnaGxpZ2h0IGhp
Z2hsaWdodDsKKyAgICBpZiAobV9oaWdobGlnaHREYXRhLT5ub2RlKQorICAgICAgICBnZXRPckRy
YXdOb2RlSGlnaGxpZ2h0KCZjb250ZXh0LCBtX2hpZ2hsaWdodERhdGEsICZoaWdobGlnaHQpOwor
ICAgIGVsc2UgaWYgKG1faGlnaGxpZ2h0RGF0YS0+cmVjdCkKKyAgICAgICAgZ2V0T3JEcmF3UmVj
dEhpZ2hsaWdodCgmY29udGV4dCwgbV9kb2N1bWVudCwgbV9oaWdobGlnaHREYXRhLCAmaGlnaGxp
Z2h0KTsKK30KKwordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3UGF1c2VXYXJuaW5nKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCBi
YWNrZ3JvdW5kQ29sb3IsICgwLCAwLCAwLCAzMSkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Q29sb3IsIHRleHRCYWNrZ3JvdW5kQ29sb3IsICgyNTUsIDI1NSwgMTk0KSk7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChDb2xvciwgYm9yZGVyQ29sb3IsICgxMjgsIDEyOCwgMTI4KSk7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChpbnQsIGZvbnRIZWlnaHQsICgyNCkpOworCisgICAgRnJhbWUq
IGZyYW1lID0gbV9wYWdlLT5tYWluRnJhbWUoKTsKKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBm
cmFtZS0+c2V0dGluZ3MoKTsKKyAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gZnJhbWUtPnZpZXco
KS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihiYWNr
Z3JvdW5kQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJhd1JlY3Qo
dmlzaWJsZVJlY3QpOworCisgICAgRm9udERlc2NyaXB0aW9uIGRlc2M7CisgICAgc2V0VXBGb250
RGVzY3JpcHRpb24oZGVzYywgc2V0dGluZ3MpOworICAgIGRlc2Muc2V0Q29tcHV0ZWRTaXplKGZv
bnRIZWlnaHQpOworICAgIEZvbnQgZm9udCA9IEZvbnQoZGVzYywgMCwgMCk7CisgICAgZm9udC51
cGRhdGUoMCk7CisKKyAgICBTdHJpbmcgdGV4dCA9ICJUaGUgZGVidWdnZXIgaXMgcGF1c2VkLiI7
CisgICAgVGV4dFJ1biB0ZXh0UnVuKHRleHQpOworICAgIEludFJlY3QgdGl0bGVSZWN0ID0gZW5j
bG9zaW5nSW50UmVjdChmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4sIEludFBvaW50
KCksIGZvbnRIZWlnaHQpKTsKKyAgICB0aXRsZVJlY3QuaW5mbGF0ZShyZWN0SW5mbGF0ZVB4KTsK
KyAgICB0aXRsZVJlY3Quc2V0TG9jYXRpb24oSW50UG9pbnQodmlzaWJsZVJlY3Qud2lkdGgoKSAv
IDIgLSB0aXRsZVJlY3Qud2lkdGgoKSAvIDIsIDApKTsKKworICAgIGNvbnRleHQuc2V0RmlsbENv
bG9yKHRleHRCYWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRl
eHQuc2V0U3Ryb2tlQ29sb3IoYm9yZGVyQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAg
IGNvbnRleHQuZHJhd1JlY3QodGl0bGVSZWN0KTsKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihD
b2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJhd1RleHQo
Zm9udCwgdGV4dFJ1biwgSW50UG9pbnQodGl0bGVSZWN0LngoKSArIHJlY3RJbmZsYXRlUHgsIHRp
dGxlUmVjdC55KCkgKyBmb250SGVpZ2h0KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvck92ZXJsYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MWJiODg4ZWM2NjZiNDkzMjJhZGJiZDQ0
MTYxMzU4MDRmYTQxMjM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvck92ZXJsYXkuaApAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW5zcGVj
dG9yT3ZlcmxheV9oCisjZGVmaW5lIEluc3BlY3Rvck92ZXJsYXlfaAorCisjaW5jbHVkZSAiQ29s
b3IuaCIKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgor
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBDb2xvcjsKK2NsYXNzIERvY3VtZW50OworY2xhc3MgRnJh
bWVWaWV3OworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgSW5zcGVjdG9yQ2xpZW50Owor
Y2xhc3MgSW50UmVjdDsKK2NsYXNzIEludFNpemU7CitjbGFzcyBOb2RlOworY2xhc3MgUGFnZTsK
Kworc3RydWN0IEhpZ2hsaWdodERhdGEgeworICAgIENvbG9yIGNvbnRlbnQ7CisgICAgQ29sb3Ig
Y29udGVudE91dGxpbmU7CisgICAgQ29sb3IgcGFkZGluZzsKKyAgICBDb2xvciBib3JkZXI7Cisg
ICAgQ29sb3IgbWFyZ2luOworICAgIGJvb2wgc2hvd0luZm87CisKKyAgICAvLyBFaXRoZXIgb2Yg
dGhlc2UgbXVzdCBiZSAwLgorICAgIFJlZlB0cjxOb2RlPiBub2RlOworICAgIE93blB0cjxJbnRS
ZWN0PiByZWN0OworfTsKKworZW51bSBIaWdobGlnaHRUeXBlIHsKKyAgICBIaWdobGlnaHRUeXBl
Tm9kZSwKKyAgICBIaWdobGlnaHRUeXBlUmVjdHMsCit9OworCitzdHJ1Y3QgSGlnaGxpZ2h0IHsK
KyAgICBDb2xvciBjb250ZW50Q29sb3I7CisgICAgQ29sb3IgcGFkZGluZ0NvbG9yOworICAgIENv
bG9yIGJvcmRlckNvbG9yOworICAgIENvbG9yIG1hcmdpbkNvbG9yOworCisgICAgLy8gV2hlbiB0
aGUgdHlwZSBpcyBOb2RlLCB0aGVyZSBhcmUgNCBxdWFkcyAobWFyZ2luLCBib3JkZXIsIHBhZGRp
bmcsIGNvbnRlbnQpLgorICAgIC8vIFdoZW4gdGhlIHR5cGUgaXMgUmVjdHMsIHRoaXMgaXMganVz
dCBhIGxpc3Qgb2YgcXVhZHMuCisgICAgSGlnaGxpZ2h0VHlwZSB0eXBlOworICAgIFZlY3RvcjxG
bG9hdFF1YWQ+IHF1YWRzOworfTsKKworY2xhc3MgSW5zcGVjdG9yT3ZlcmxheSB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yT3ZlcmxheT4gY3JlYXRlKFBhZ2UqIHBh
Z2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBJbnNwZWN0b3JPdmVybGF5KHBhZ2UsIGNsaWVudCkpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0Jik7CisgICAgdm9pZCBkcmF3T3V0bGluZShHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiwgY29uc3QgQ29sb3ImKTsKKyAgICB2b2lk
IGdldEhpZ2hsaWdodChEb2N1bWVudCosIEhpZ2hsaWdodERhdGEqLCBIaWdobGlnaHQqKTsKKyAg
ICAKKyAgICB2b2lkIHNldEhpZ2hsaWdodChEb2N1bWVudCosIEhpZ2hsaWdodERhdGEqKTsKKyAg
ICB2b2lkIHNldFNob3VsZFNob3dQYXVzZVdhcm5pbmcoYm9vbCk7CisKK3ByaXZhdGU6CisgICAg
SW5zcGVjdG9yT3ZlcmxheShQYWdlKiwgSW5zcGVjdG9yQ2xpZW50Kik7CisKKyAgICB2b2lkIHVw
ZGF0ZSgpOworICAgIHZvaWQgZHJhd0hpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmKTsKKyAgICB2
b2lkIGRyYXdQYXVzZVdhcm5pbmcoR3JhcGhpY3NDb250ZXh0Jik7CisKKyAgICBQYWdlKiBtX3Bh
Z2U7CisgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKKyAgICBib29sIG1fc2hvdWxkU2hv
d1BhdXNlV2FybmluZzsKKyAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKKyAgICBIaWdobGlnaHRE
YXRhKiBtX2hpZ2hsaWdodERhdGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKwor
I2VuZGlmIC8vIERPTU5vZGVIaWdobGlnaHRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4IGVmMzQ1MzdmMGUxMThmYjVlMGNiODhj
YTJmYWI1ZTNlZjYwYTM1NzcuLjk4NWNiZjUzZTUyYTk2MzUxZjg5ZjFmNjQxYmY3OWNjYjU2OThi
ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdl
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQu
Y3BwCkBAIC00NCwxMiArNDQsMTIgQEAKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNsdWRlICJD
b29raWVKYXIuaCIKICNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgotI2luY2x1ZGUgIkRP
TU5vZGVIaWdobGlnaHRlci5oIgogI2luY2x1ZGUgIkRPTVBhdGNoU3VwcG9ydC5oIgogI2luY2x1
ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIklkZW50aWZpZXJzRmFjdG9yeS5oIgpAQCAtNTgsNiArNTgsNyBA
QAogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250
ZW5kLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yT3ZlcmxheS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclN0YXRlLmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiSW5zdHJ1bWVudGluZ0FnZW50cy5oIgpA
QCAtMjIzLDkgKzIyNCw5IEBAIGJvb2wgSW5zcGVjdG9yUGFnZUFnZW50OjpzaGFyZWRCdWZmZXJD
b250ZW50KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIsIGNvCiAgICAgcmV0dXJuIGRl
Y29kZVNoYXJlZEJ1ZmZlcihidWZmZXIsIHRleHRFbmNvZGluZ05hbWUsIHJlc3VsdCk7CiB9CiAK
LVBhc3NPd25QdHI8SW5zcGVjdG9yUGFnZUFnZW50PiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNyZWF0
ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYWdlKiBwYWdlLCBJ
bnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIEluc3BlY3RvclN0YXRlKiBzdGF0ZSwgSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIEluc3BlY3RvckNsaWVu
dCogY2xpZW50KQorUGFzc093blB0cjxJbnNwZWN0b3JQYWdlQWdlbnQ+IEluc3BlY3RvclBhZ2VB
Z2VudDo6Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIFBh
Z2UqIHBhZ2UsIEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgSW5zcGVjdG9yU3RhdGUq
IHN0YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgSW5z
cGVjdG9yQ2xpZW50KiBjbGllbnQsIEluc3BlY3Rvck92ZXJsYXkqIG92ZXJsYXkpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JQYWdlQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50
cywgcGFnZSwgaW5zcGVjdG9yQWdlbnQsIHN0YXRlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIGNs
aWVudCkpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9yUGFnZUFnZW50KGluc3Ry
dW1lbnRpbmdBZ2VudHMsIHBhZ2UsIGluc3BlY3RvckFnZW50LCBzdGF0ZSwgaW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyLCBjbGllbnQsIG92ZXJsYXkpKTsKIH0KIAogLy8gc3RhdGljCkBAIC0zMDgsMTMg
KzMwOSwxNCBAQCBUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBlOjpFbnVtIEluc3BlY3Rv
clBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlSnNvbgogICAgIHJldHVybiByZXNvdXJjZVR5
cGVKc29uKGNhY2hlZFJlc291cmNlVHlwZShjYWNoZWRSZXNvdXJjZSkpOwogfQogCi1JbnNwZWN0
b3JQYWdlQWdlbnQ6Okluc3BlY3RvclBhZ2VBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzLCBQYWdlKiBwYWdlLCBJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdl
bnQsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
KiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQorSW5zcGVj
dG9yUGFnZUFnZW50OjpJbnNwZWN0b3JQYWdlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5z
dHJ1bWVudGluZ0FnZW50cywgUGFnZSogcGFnZSwgSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFn
ZW50LCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdl
ciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCwgSW5zcGVj
dG9yT3ZlcmxheSogb3ZlcmxheSkKICAgICA6IEluc3BlY3RvckJhc2VBZ2VudDxJbnNwZWN0b3JQ
YWdlQWdlbnQ+KCJQYWdlIiwgaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUpCiAg
ICAgLCBtX3BhZ2UocGFnZSkKICAgICAsIG1faW5zcGVjdG9yQWdlbnQoaW5zcGVjdG9yQWdlbnQp
CiAgICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlcihpbmplY3RlZFNjcmlwdE1hbmFnZXIpCiAg
ICAgLCBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX2Zyb250ZW5kKDApCisgICAgLCBtX292ZXJs
YXkob3ZlcmxheSkKICAgICAsIG1fbGFzdFNjcmlwdElkZW50aWZpZXIoMCkKICAgICAsIG1fbGFz
dFBhaW50Q29udGV4dCgwKQogICAgICwgbV9kaWRMb2FkRXZlbnRGaXJlKGZhbHNlKQpAQCAtODQz
LDYgKzg0NSwxMSBAQCBEb2N1bWVudExvYWRlciogSW5zcGVjdG9yUGFnZUFnZW50Ojphc3NlcnRE
b2N1bWVudExvYWRlcihFcnJvclN0cmluZyogZXJyb3JTdHJpbgogICAgIHJldHVybiBkb2N1bWVu
dExvYWRlcjsKIH0KIAordm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRyYXdJbnNwZWN0b3JPdmVy
bGF5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBtX292ZXJsYXktPmRyYXcoY29u
dGV4dCk7Cit9CisKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojpsb2FkZXJEZXRhY2hlZEZyb21G
cmFtZShEb2N1bWVudExvYWRlciogbG9hZGVyKQogewogICAgIEhhc2hNYXA8RG9jdW1lbnRMb2Fk
ZXIqLCBTdHJpbmc+OjppdGVyYXRvciBpdGVyYXRvciA9IG1fbG9hZGVyVG9JZGVudGlmaWVyLmZp
bmQobG9hZGVyKTsKQEAgLTg4NSw3ICs4OTIsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6
ZGlkUGFpbnQoKQogICAgICAgICBDb2xvcigwLCAwLCAweEZGLCAweDNGKSwKICAgICB9OwogCi0g
ICAgRE9NTm9kZUhpZ2hsaWdodGVyOjpkcmF3T3V0bGluZSgqbV9sYXN0UGFpbnRDb250ZXh0LCBt
X2xhc3RQYWludFJlY3QsIGNvbG9yc1tjb2xvclNlbGVjdG9yKysgJSBXVEZfQVJSQVlfTEVOR1RI
KGNvbG9ycyldKTsKKyAgICBtX292ZXJsYXktPmRyYXdPdXRsaW5lKCptX2xhc3RQYWludENvbnRl
eHQsIG1fbGFzdFBhaW50UmVjdCwgY29sb3JzW2NvbG9yU2VsZWN0b3IrKyAlIFdURl9BUlJBWV9M
RU5HVEgoY29sb3JzKV0pOwogCiAgICAgbV9sYXN0UGFpbnRDb250ZXh0ID0gMDsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaAppbmRleCA5NjRiYzg1
ZmM2MzY0OGFmMzhmMmRjMTJmYzgzZjc5NzFiOTNhNjYzLi43OTg1MDhhOTY4NWU2ZTZjYjQ0ZDBh
YjMwZmU1MTM3NzEwZmNhN2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUGFnZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclBhZ2VBZ2VudC5oCkBAIC00OCwxMSArNDgsMTMgQEAgY2xhc3MgRE9NV3JhcHBlcldvcmxk
OwogY2xhc3MgRG9jdW1lbnRMb2FkZXI7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEZyb250ZW5kOwor
Y2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogY2xh
c3MgSW5zcGVjdG9yQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JBcnJheTsKIGNsYXNzIEluc3BlY3Rv
ckNsaWVudDsKIGNsYXNzIEluc3BlY3Rvck9iamVjdDsKK2NsYXNzIEluc3BlY3Rvck92ZXJsYXk7
CiBjbGFzcyBJbnNwZWN0b3JTdGF0ZTsKIGNsYXNzIEluc3RydW1lbnRpbmdBZ2VudHM7CiBjbGFz
cyBLVVJMOwpAQCAtNzcsNyArNzksNyBAQCBwdWJsaWM6CiAgICAgICAgIE90aGVyUmVzb3VyY2UK
ICAgICB9OwogCi0gICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yUGFnZUFnZW50PiBjcmVh
dGUoSW5zdHJ1bWVudGluZ0FnZW50cyosIFBhZ2UqLCBJbnNwZWN0b3JBZ2VudCosIEluc3BlY3Rv
clN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9yQ2xpZW50Kik7CisgICAg
c3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yUGFnZUFnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGlu
Z0FnZW50cyosIFBhZ2UqLCBJbnNwZWN0b3JBZ2VudCosIEluc3BlY3RvclN0YXRlKiwgSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9yQ2xpZW50KiwgSW5zcGVjdG9yT3ZlcmxheSopOwog
CiAgICAgc3RhdGljIGJvb2wgY2FjaGVkUmVzb3VyY2VDb250ZW50KENhY2hlZFJlc291cmNlKiwg
U3RyaW5nKiByZXN1bHQsIGJvb2wqIGJhc2U2NEVuY29kZWQpOwogICAgIHN0YXRpYyBib29sIHNo
YXJlZEJ1ZmZlckNvbnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBjb25zdCBTdHJpbmcm
IHRleHRFbmNvZGluZ05hbWUsIGJvb2wgd2l0aEJhc2U2NEVuY29kZSwgU3RyaW5nKiByZXN1bHQp
OwpAQCAtMTM1LDkgKzEzNywxMCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGxvYWRlcklkKERvY3Vt
ZW50TG9hZGVyKik7CiAgICAgRnJhbWUqIGFzc2VydEZyYW1lKEVycm9yU3RyaW5nKiwgU3RyaW5n
IGZyYW1lSWQpOwogICAgIHN0YXRpYyBEb2N1bWVudExvYWRlciogYXNzZXJ0RG9jdW1lbnRMb2Fk
ZXIoRXJyb3JTdHJpbmcqLCBGcmFtZSopOworICAgIHZvaWQgZHJhd0luc3BlY3Rvck92ZXJsYXko
R3JhcGhpY3NDb250ZXh0Jik7CiAKIHByaXZhdGU6Ci0gICAgSW5zcGVjdG9yUGFnZUFnZW50KElu
c3RydW1lbnRpbmdBZ2VudHMqLCBQYWdlKiwgSW5zcGVjdG9yQWdlbnQqLCBJbnNwZWN0b3JTdGF0
ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3RvckNsaWVudCopOworICAgIEluc3Bl
Y3RvclBhZ2VBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgUGFnZSosIEluc3BlY3RvckFnZW50
KiwgSW5zcGVjdG9yU3RhdGUqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JDbGll
bnQqLCBJbnNwZWN0b3JPdmVybGF5Kik7CiAgICAgdm9pZCB1cGRhdGVWaWV3TWV0cmljcyhpbnQs
IGludCwgZG91YmxlLCBib29sKTsKIAogICAgIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlBhZ2U6
OkZyYW1lPiBidWlsZE9iamVjdEZvckZyYW1lKEZyYW1lKik7CkBAIC0xNDcsNiArMTUwLDcgQEAg
cHJpdmF0ZToKICAgICBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIG1faW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyOwogICAgIEluc3BlY3RvckNsaWVudCogbV9jbGllbnQ7CiAgICAgSW5zcGVjdG9yRnJvbnRl
bmQ6OlBhZ2UqIG1fZnJvbnRlbmQ7CisgICAgSW5zcGVjdG9yT3ZlcmxheSogbV9vdmVybGF5Owog
ICAgIGxvbmcgbV9sYXN0U2NyaXB0SWRlbnRpZmllcjsKICAgICBTdHJpbmcgbV9wZW5kaW5nU2Ny
aXB0VG9FdmFsdWF0ZU9uTG9hZE9uY2U7CiAgICAgU3RyaW5nIG1fc2NyaXB0VG9FdmFsdWF0ZU9u
TG9hZE9uY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVn
Z2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50
LmNwcAppbmRleCBhNTg2ZWRmM2ZkNDEwOGM5ZDA3OTJjMGJkZmViZTFlODNmYWZmODZhLi5jMWU2
Mjc1M2QyMTlkYWE5NjAwNzkwYjY1YmI3MThjODQzZjhjZjljIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAKQEAgLTQwLDEzICs0MCwxMyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8UGFnZURlYnVnZ2VyQWdlbnQ+IFBh
Z2VEZWJ1Z2dlckFnZW50OjpjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGlu
Z0FnZW50cywgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBQYWdlKiBpbnNwZWN0ZWRQ
YWdlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlcikKK1Bhc3NP
d25QdHI8UGFnZURlYnVnZ2VyQWdlbnQ+IFBhZ2VEZWJ1Z2dlckFnZW50OjpjcmVhdGUoSW5zdHJ1
bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yU3RhdGUqIGluc3Bl
Y3RvclN0YXRlLCBQYWdlKiBpbnNwZWN0ZWRQYWdlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGlu
amVjdGVkU2NyaXB0TWFuYWdlciwgSW5zcGVjdG9yT3ZlcmxheSogb3ZlcmxheSkKIHsKLSAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IFBhZ2VEZWJ1Z2dlckFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMs
IGluc3BlY3RvclN0YXRlLCBpbnNwZWN0ZWRQYWdlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIpKTsK
KyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBhZ2VEZWJ1Z2dlckFnZW50KGluc3RydW1lbnRpbmdB
Z2VudHMsIGluc3BlY3RvclN0YXRlLCBpbnNwZWN0ZWRQYWdlLCBpbmplY3RlZFNjcmlwdE1hbmFn
ZXIsIG92ZXJsYXkpKTsKIH0KIAotUGFnZURlYnVnZ2VyQWdlbnQ6OlBhZ2VEZWJ1Z2dlckFnZW50
KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclN0YXRl
KiBpbnNwZWN0b3JTdGF0ZSwgUGFnZSogaW5zcGVjdGVkUGFnZSwgSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCi0gICAgOiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
KGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlLCBpbmplY3RlZFNjcmlwdE1hbmFn
ZXIpCitQYWdlRGVidWdnZXJBZ2VudDo6UGFnZURlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRl
LCBQYWdlKiBpbnNwZWN0ZWRQYWdlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2Ny
aXB0TWFuYWdlciwgSW5zcGVjdG9yT3ZlcmxheSogb3ZlcmxheSkKKyAgICA6IEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUsIGluamVjdGVk
U2NyaXB0TWFuYWdlciwgb3ZlcmxheSkKICAgICAsIG1faW5zcGVjdGVkUGFnZShpbnNwZWN0ZWRQ
YWdlKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1
Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQu
aAppbmRleCA5ZGJkNTEzZjlmMWEyOGJiOTg0MjQ5MTM1NzgxNDg2YzczYzMyNjE4Li4wNmYxNzc3
ODE4N2NhMDMxMTdhZWEwYTQ4NjYyYzQ2MmYwNTUxYTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuaApAQCAtNDQsNyArNDQsNyBAQCBjbGFzcyBQYWdl
RGVidWdnZXJBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShQYWdlRGVidWdnZXJBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8UGFnZURlYnVnZ2VyQWdl
bnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yU3RhdGUqLCBQYWdlKiwg
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8UGFnZURlYnVn
Z2VyQWdlbnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yU3RhdGUqLCBQ
YWdlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9yT3ZlcmxheSopOwogICAgIHZp
cnR1YWwgflBhZ2VEZWJ1Z2dlckFnZW50KCk7CiAKIHByaXZhdGU6CkBAIC01Niw3ICs1Niw3IEBA
IHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9y
RXZhbChFcnJvclN0cmluZyosIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKTsKIAotICAg
IFBhZ2VEZWJ1Z2dlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0ZSos
IFBhZ2UqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKKyAgICBQYWdlRGVidWdnZXJBZ2VudChJ
bnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yU3RhdGUqLCBQYWdlKiwgSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKiwgSW5zcGVjdG9yT3ZlcmxheSopOwogICAgIFBhZ2UqIGNvbnN0IG1faW5zcGVj
dGVkUGFnZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3Jr
ZXJEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJEZWJ1
Z2dlckFnZW50LmNwcAppbmRleCBjNzVhZjRhNmU0YzBmNGU5OTZmMzVkOGEzYTc4OTE2MTUzMTcx
NjJmLi4xNTg5ZmMzMGY0NTY0ZDkzZTI3YmYyN2VhYjU1NzVkNGI2MDZhNTE3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyRGVidWdnZXJBZ2VudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC04Niw3
ICs4Niw3IEBAIFBhc3NPd25QdHI8V29ya2VyRGVidWdnZXJBZ2VudD4gV29ya2VyRGVidWdnZXJB
Z2VudDo6Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqCiB9CiAKIFdvcmtlckRlYnVnZ2VyQWdl
bnQ6OldvcmtlckRlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGlu
Z0FnZW50cywgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBXb3JrZXJDb250ZXh0KiBp
bnNwZWN0ZWRXb3JrZXJDb250ZXh0LCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2Ny
aXB0TWFuYWdlcikKLSAgICA6IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0Fn
ZW50cywgaW5zcGVjdG9yU3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdlcikKKyAgICA6IEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUsIGlu
amVjdGVkU2NyaXB0TWFuYWdlciwgMCkKICAgICAsIG1fc2NyaXB0RGVidWdTZXJ2ZXIoaW5zcGVj
dGVkV29ya2VyQ29udGV4dCkKICAgICAsIG1faW5zcGVjdGVkV29ya2VyQ29udGV4dChpbnNwZWN0
ZWRXb3JrZXJDb250ZXh0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4
IDE4ODE3NTkzNzA1NTBhZTFlNDc3YTNlMTVlOGFhZWNkYTM2ZDBmMzEuLmQ0NmU0NjY1Y2MxNjRi
NzlmNzgxMGVkMmFhYzE1NjM4MDkxOTAwNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJDbGllbnRSZWN0LmgiCiAjaW5jbHVk
ZSAiQ2xpZW50UmVjdExpc3QuaCIKICNpbmNsdWRlICJDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXIu
aCIKLSNpbmNsdWRlICJET01Ob2RlSGlnaGxpZ2h0ZXIuaCIKICNpbmNsdWRlICJET01TdHJpbmdM
aXN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudE1hcmtlci5o
IgpAQCAtNDksNiArNDgsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJJbnNwZWN0b3JDb3VudGVycy5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1l
bnRhdGlvbi5oIgorI2luY2x1ZGUgIkluc3BlY3Rvck92ZXJsYXkuaCIKICNpbmNsdWRlICJJbnN0
cnVtZW50aW5nQWdlbnRzLmgiCiAjaW5jbHVkZSAiSW50ZXJuYWxTZXR0aW5ncy5oIgogI2luY2x1
ZGUgIkludFJlY3QuaCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152545</attachid>
            <date>2012-07-16 08:55:46 -0700</date>
            <delta_ts>2012-07-16 09:52:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90880-20120716195544.patch</filename>
            <type>text/plain</type>
            <size>103881</size>
            <attacher name="Sergey Rogulenko">rogulenko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTZiZmVjMmM0ZGZkYTI1
NmYwZDlhM2U2Zjc4NzllYmY2YjVkNzY1ZC4uYTdlYzVlM2Q0OWI3NjkxZjgyYWI3NDc4OTU1MTY4
YTM3ZGU1OTA4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDEyLTA3LTE2ICBTZXJn
ZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogYWRkaW5nIHBhdXNlIGljb24gZm9yIEphdmFTY3JpcHQgZGVidWdnaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg4MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yZWQgRE9NTm9k
ZUhpZ2hsaWdodGVyIGludG8gSW5zcGVjdG9yT3ZlcmxheSBjbGFzcyBhbmQgYWRkZWQgYSBmZWF0
dXJlIHRvIHNob3cgYSAicGF1c2UiIHNjcmVlbiB3aGVuCisgICAgICAgIHRoZSBKYXZhc2NyaXB0
IGRlYnVnZ2VyIGlzIHBhdXNlZC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JBbGxJbk9uZS5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjpkcmF3SGlnaGxpZ2h0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJbnNwZWN0b3JDb250
cm9sbGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6Okluc3BlY3RvckRPTUFnZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmhpZGVIaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldEhpZ2hsaWdodCk6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckRPTUFnZW50OjpjcmVhdGUpOgorICAgICAgICAoSW5zcGVjdG9yRE9NQWdl
bnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSk6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoSW5zcGVjdG9yRGVidWdnZXJBZ2VudCk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JPdmVybGF5OjpJbnNwZWN0b3JPdmVybGF5KToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6ZHJhdyk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3T3V0bGluZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JPdmVybGF5OjpnZXRIaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yT3ZlcmxheTo6c2V0SGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92
ZXJsYXk6OnNldFNob3VsZFNob3dQYXVzZVdhcm5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yT3ZlcmxheTo6dXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJs
YXk6OmRyYXdIaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6
ZHJhd1BhdXNlV2FybmluZyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXku
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0
ZXIuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSGlnaGxpZ2h0RGF0YSk6CisgICAg
ICAgIChIaWdobGlnaHQpOgorICAgICAgICAoSW5zcGVjdG9yT3ZlcmxheSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpjcmVhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFn
ZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpJbnNw
ZWN0b3JQYWdlQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50Ojpk
cmF3SW5zcGVjdG9yT3ZlcmxheSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6ZGlkUGFpbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JQYWdlQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlRGVidWdn
ZXJBZ2VudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50OjpQ
YWdlRGVidWdnZXJBZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50
Lmg6CisgICAgICAgIChQYWdlRGVidWdnZXJBZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL1dv
cmtlckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyRGVidWdnZXJB
Z2VudDo6V29ya2VyRGVidWdnZXJBZ2VudCk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMu
Y3BwOgorCiAyMDEyLTA3LTE1ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBGaXggbWFrZSBkaXN0Y2hlY2suCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CmluZGV4IDYwM2NlMjE5NmMxODIyODQzNDViZGM3ZmJlM2RhOTZlMTIwYjA0NGYu
LjRjMWY5ZTg5OTBiOGViZjY0Yjk2NTA1YTY1ZGFhNzIzNjFjN2QwNDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CkBAIC05NDAsNyArOTQwLDYgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGluc3Bl
Y3Rvci9Db25zb2xlTWVzc2FnZS5jcHAKICAgICBpbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxz
LmNwcAogICAgIGluc3BlY3Rvci9ET01FZGl0b3IuY3BwCi0gICAgaW5zcGVjdG9yL0RPTU5vZGVI
aWdobGlnaHRlci5jcHAKICAgICBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAogICAgIGlu
c3BlY3Rvci9JZGVudGlmaWVyc0ZhY3RvcnkuY3BwCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0LmNwcApAQCAtOTcyLDYgKzk3MSw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBpbnNw
ZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQu
Y3BwCisgICAgaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNl
QWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDM3MjEzNWUwOGQxNTdlY2JjNDhmNjhlNzM2OWJm
MTEyMDVhMmMxZTIuLjNjYmJkNmM5YjY3YmExMTE5MmEyNjE5NmRjYzM1MjlkYjI4YTdjNTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMjY5Myw4ICsyNjkzLDYgQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0
aWxzLmggXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01FZGl0b3IuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NRWRpdG9yLmggXAotCVNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
RE9NTm9kZUhpZ2hsaWdodGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRj
aFN1cHBvcnQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0
LmggXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JZGVudGlmaWVyc0ZhY3RvcnkuY3BwIFwK
QEAgLTI3NTksNiArMjc1Nyw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuaCBcCisJU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yT3ZlcmxheS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFn
ZUFnZW50LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2Vu
dC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5j
cHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkKaW5kZXggNWRhYzJiMDVkMDdjZDZhNjY3OGYyN2M0ZGM5NmYxNTJkY2Ji
OTI0Ni4uZmUwNGMxOWUzNGFiYTkyMjI1MTU5MDFjZGVjMDkyYjAxYzFhYTM4MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpCkBAIC04OTcsNyArODk3LDYgQEAgU09VUkNFUyArPSBcCiAgICAgaW5zcGVjdG9yL0NvbnNv
bGVNZXNzYWdlLmNwcCBcCiAgICAgaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlscy5jcHAgXAog
ICAgIGluc3BlY3Rvci9ET01FZGl0b3IuY3BwIFwKLSAgICBpbnNwZWN0b3IvRE9NTm9kZUhpZ2hs
aWdodGVyLmNwcCBcCiAgICAgaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAgXAogICAgIGlu
c3BlY3Rvci9JZGVudGlmaWVyc0ZhY3RvcnkuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHQuY3BwIFwKQEAgLTkyNiw2ICs5MjUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBpbnNwZWN0
b3IvSW5zcGVjdG9ySGlzdG9yeS5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwIFwK
KyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNw
ZWN0b3JQYWdlQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcCBcCkBAIC0y
MDYwLDcgKzIwNjAsNiBAQCBIRUFERVJTICs9IFwKICAgICBpbnNwZWN0b3IvQ29uc29sZU1lc3Nh
Z2UuaCBcCiAgICAgaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlscy5oIFwKICAgICBpbnNwZWN0
b3IvRE9NRWRpdG9yLmggXAotICAgIGluc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaCBcCiAg
ICAgaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5oIFwKICAgICBpbnNwZWN0b3IvSWRlbnRpZmll
cnNGYWN0b3J5LmggXAogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oIFwKQEAgLTIwOTEs
NiArMjA5MCw3IEBAIEhFQURFUlMgKz0gXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JIaXN0b3J5
LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBcCiAgICAgaW5z
cGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmggXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JP
dmVybGF5LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaCBcCiAgICAgaW5z
cGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3Rv
clJlc291cmNlQWdlbnQuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZjNmNzdlYTQzYWRhYzViMTlm
MDliM2UwY2FkNDNiYWU1YTQ3OTE1NC4uNTUzZGI2ZTY1NTJlNTI4ZTRjYTc3OWQwYmI3MTI2N2Fl
ZjU5MjQwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjc4MSw4ICsyNzgxLDYgQEAKICAgICAgICAg
ICAgICdpbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxzLmgnLAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9ET01FZGl0b3IuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvRE9NRWRpdG9yLmgn
LAotICAgICAgICAgICAgJ2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwJywKLSAgICAg
ICAgICAgICdpbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmgnLAogICAgICAgICAgICAgJ2lu
c3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvRE9N
UGF0Y2hTdXBwb3J0LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JZGVudGlmaWVyc0ZhY3Rv
cnkuY3BwJywKQEAgLTI4NDAsNiArMjgzOCw4IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0lu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVj
dG9yTWVtb3J5QWdlbnQuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yTWVt
b3J5QWdlbnQuaCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3Bw
JywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oJywKICAgICAgICAg
ICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcCcsCiAgICAgICAgICAgICAnaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5z
cGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagppbmRleCA1M2IyMjRjM2I0OThhNzA0Y2VhMzI4NzgyMzk4YTZjNjg1
YzU4YjRkLi43ZmEyYjUxODUzOTNhMzYxZDY0NWI4Nzg4YzlhM2NiMzk5OTIxMTczIDEwMDc1NQot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNzM0NTEsMzAg
KzczNDUxLDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0
aD0iLi5caW5zcGVjdG9yXERPTU5vZGVIaWdobGlnaHRlci5jcHAiCi0JCQkJPgotCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZy
b21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgotCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgotCQkJCQlFeGNsdWRlZEZy
b21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJPC9GaWxlPgot
CQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxET01Ob2RlSGlnaGxpZ2h0
ZXIuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aW5zcGVjdG9yXERPTVBhdGNoU3VwcG9ydC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgpAQCAtNzQyNDcsNiArNzQyMjMsMzAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3Rvck92ZXJsYXkuY3BwIgor
CQkJCT4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIK
KwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIK
KwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3Jc
SW5zcGVjdG9yT3ZlcmxheS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVs
YXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yUGFnZUFnZW50LmNwcCIKIAkJCQk+CiAJ
CQkJPEZpbGVDb25maWd1cmF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRl
eCBkYTQ3MzA5MTk4ZWJiYzY3ZjczODM2ZGE1YTQ5YWEzOWEzNWNkMTY4Li4wZGVkN2M0NTJlNzUx
ODY2NGI2NDE2MDg4ZjA5NjY1MzQ2ZjJkMjlkCi0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwMTgsNyArMTAxOCw3IEBACiAJCTQxMEI3RTcy
MTA0NUZBQjAwMEQ4MjI0RiAvKiBKU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTBCN0U3MTEwNDVGQUIwMDBEODIy
NEYgLyogSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwICovOyB9OwogCQk0MTEwNDY0MTBGQTIyMkE2
MDBCQTQzNkEgLyogU2NyaXB0RXZlbnRMaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDExMDQ2M0YwRkEyMjJBNjAwQkE0MzZBIC8qIFNjcmlw
dEV2ZW50TGlzdGVuZXIuaCAqLzsgfTsKIAkJNDExMDQ2NDIwRkEyMjJBNjAwQkE0MzZBIC8qIFNj
cmlwdEV2ZW50TGlzdGVuZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDExMDQ2NDAwRkEyMjJBNjAwQkE0MzZBIC8qIFNjcmlwdEV2ZW50TGlzdGVu
ZXIuY3BwICovOyB9OwotCQk0MTIzMDgxQjEzOEM0Mjk3MDBCQ0NGQ0EgLyogV2ViQ29yZS5mcmFt
ZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
M0YxOUIxQTA4MjQ1RTVBMDAxRTlBQkMgLyogV2ViQ29yZS5mcmFtZXdvcmsgKi87IH07CisJCTQx
MjMwODFCMTM4QzQyOTcwMEJDQ0ZDQSAvKiAuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGMTlCMUEwODI0NUU1QTAwMUU5QUJDIC8q
IC5mcmFtZXdvcmsgKi87IH07CiAJCTQxMjMwOTEzMTM4QzQyRkYwMEJDQ0ZDQSAvKiBKYXZhU2Ny
aXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGODIxNjI5OTAyOUY0RkI1MDEwMDAxMzEgLyogSmF2YVNjcmlwdENvcmUuZnJh
bWV3b3JrICovOyB9OwogCQk0MTIzRTU2OTEyN0IzMDQxMDAwRkVFQTcgLyogV2luZG93RXZlbnRD
b250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
MTIzRTU2NzEyN0IzMDQxMDAwRkVFQTcgLyogV2luZG93RXZlbnRDb250ZXh0LmggKi87IH07CiAJ
CTQxMjNFNTZBMTI3QjMwNDEwMDBGRUVBNyAvKiBXaW5kb3dFdmVudENvbnRleHQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEyM0U1NjgxMjdCMzA0
MTAwMEZFRUE3IC8qIFdpbmRvd0V2ZW50Q29udGV4dC5jcHAgKi87IH07CkBAIC0xNDMzLDggKzE0
MzMsNiBAQAogCQk0RTE5NTkyQzBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV2YWx1YXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEUxOTU5
MjYwQTM5REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVlcnlFdmFsdWF0b3IuaCAqLzsgfTsKIAkJNEUx
OTU5MkQwQTM5REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVlcnlFeHAuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEUxOTU5MjcwQTM5REFDQzAwMjIwRkU1
IC8qIE1lZGlhUXVlcnlFeHAuY3BwICovOyB9OwogCQk0RTE5NTkyRTBBMzlEQUNDMDAyMjBGRTUg
LyogTWVkaWFRdWVyeUV4cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNEUxOTU5MjgwQTM5REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVlcnlFeHAuaCAqLzsg
fTsKLQkJNEYxNDQyMjgxMzM5RkQ2MjAwRTBENkY4IC8qIERPTU5vZGVIaWdobGlnaHRlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RjE0NDIyNjEz
MzlGRDYyMDBFMEQ2RjggLyogRE9NTm9kZUhpZ2hsaWdodGVyLmNwcCAqLzsgfTsKLQkJNEYxNDQy
MjkxMzM5RkQ2MjAwRTBENkY4IC8qIERPTU5vZGVIaWdobGlnaHRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEYxNDQyMjcxMzM5RkQ2MjAwRTBENkY4
IC8qIERPTU5vZGVIaWdobGlnaHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTRGMTUzNERFMTFCNTMyRUMwMDIxRkQ4NiAvKiBFZGl0aW5nQmVo
YXZpb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRG
MTUzNEREMTFCNTMyRUMwMDIxRkQ4NiAvKiBFZGl0aW5nQmVoYXZpb3IuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0RjE1MzRFMDExQjUzMzAyMDAy
MUZEODYgLyogRWRpdGluZ0JlaGF2aW9yVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGMTUzNERGMTFCNTMzMDIwMDIxRkQ4NiAvKiBFZGl0aW5n
QmVoYXZpb3JUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTRGMkQyMDU0MTJFQUU3QjMwMDVDMjg3NCAvKiBJbnNwZWN0b3JBZ2VudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEYyRDIwNTIxMkVB
RTdCMzAwNUMyODc0IC8qIEluc3BlY3RvckFnZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgwODMsNyArODA4MSw3IEBACiAJCTQxNzI1M0E5
MTM1NEJCQkMwMDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xFbGVtZW50cy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUNvbnRyb2xFbGVtZW50cy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0MTdEQTRDRTEzNzM0MzI2MDA3QzU3RkIgLyogSW50ZXJuYWxzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGVybmFscy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MTdEQTRDRjEzNzM0MzI2MDA3QzU3RkIgLyogSW50ZXJuYWxz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybmFscy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxN0RBNkQwMTM3MzRFMDIwMDdDNTdGQiAv
KiBsaWJXZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBpbmNsdWRlSW5J
bmRleCA9IDA7IHBhdGggPSBsaWJXZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWI7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTQxN0RBNkQwMTM3MzRFMDIwMDdDNTdGQiAvKiBs
aWJXZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBpbmNsdWRlSW5JbmRl
eCA9IDA7IG5hbWUgPSBsaWJXZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWI7IHBhdGggPSAuZHlsaWI7
IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTQxN0RBNzFCMTM3MzVERkEw
MDdDNTdGQiAvKiBKU0ludGVybmFscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0ludGVybmFscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQx
N0RBNzFDMTM3MzVERkEwMDdDNTdGQiAvKiBKU0ludGVybmFscy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0ludGVybmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0MTgxM0Y5MTEzODE4QUQ2MDA1N0FBQTQgLyogSW50ZXJuYWxzLmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBJbnRlcm5hbHMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtODUyOCw4ICs4NTI2LDYgQEAKIAkJNEUxOTU5MjYwQTM5REFDQzAwMjIwRkU1IC8qIE1lZGlh
UXVlcnlFdmFsdWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlh
UXVlcnlFdmFsdWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEUxOTU5Mjcw
QTM5REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVlcnlFeHAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhUXVlcnlFeHAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0RTE5NTkyODBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV4cC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFRdWVyeUV4cC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk0RjE0NDIyNjEzMzlGRDYyMDBFMEQ2RjggLyogRE9NTm9k
ZUhpZ2hsaWdodGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERP
TU5vZGVIaWdobGlnaHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTRGMTQ0
MjI3MTMzOUZENjIwMEUwRDZGOCAvKiBET01Ob2RlSGlnaGxpZ2h0ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NTm9kZUhpZ2hsaWdodGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTRGMTUzNEREMTFCNTMyRUMwMDIxRkQ4NiAvKiBFZGl0aW5nQmVoYXZp
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWRpdGluZ0JlaGF2aW9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRGMTUzNERGMTFCNTMzMDIwMDIxRkQ4NiAv
KiBFZGl0aW5nQmVoYXZpb3JUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBFZGl0aW5nQmVoYXZpb3JUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
RjJEMjA1MjEyRUFFN0IzMDA1QzI4NzQgLyogSW5zcGVjdG9yQWdlbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTkwODQsNiArOTA4MCw4IEBACiAJCTdCOTE4NEQwMTU3NThFNDIwMDkyQUE5
MyAvKiBVbmRvTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmRv
TWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QjkxODREMTE1NzU4RTQy
MDA5MkFBOTMgLyogVW5kb01hbmFnZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFVuZG9N
YW5hZ2VyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M2MDEyODA2MDA3OEJC
NzBFMzY3QTk1IC8qIEROU1Jlc29sdmVRdWV1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBETlNSZXNvbHZlUXVldWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3QzY1MjI2RDE1QjQ2RjhDMDBCMTdFRkEgLyogSW5zcGVjdG9yT3ZlcmxheS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JPdmVybGF5LmNw
cDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk3QzY1MjI2RTE1QjQ2RkExMDBCMTdF
RkEgLyogSW5zcGVjdG9yT3ZlcmxheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JPdmVybGF5
Lmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKIAkJN0UzM0NEMDAxMjdGMzQwRDAwQkU4
RjE3IC8qIFB1cmdlUHJpb3JpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UHVyZ2VQcmlvcml0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3RTM3RUYyRDEz
MzkyMDg4MDBCMjkyNTAgLyogU3VicmVzb3VyY2VMb2FkZXJDRi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTdWJyZXNvdXJjZUxvYWRlckNGLmNwcDsgcGF0aCA9IGNm
L1N1YnJlc291cmNlTG9hZGVyQ0YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
RTk5QUY1MjBCMTM4NDY0NjhGQjAxQTUgLyogV2luZG93Rm9jdXNBbGxvd2VkSW5kaWNhdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdpbmRvd0ZvY3VzQWxsb3dl
ZEluZGljYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDQxNSw3ICsx
MDQxMyw3IEBACiAJCTkzRUVDMUY2MDlDMjg3NzcwMEM1MTVEMSAvKiBUZXh0LmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBUZXh0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTNFRUMxRjcwOUMyODc3NzAwQzUxNUQxIC8qIFdoZWVsRXZlbnQuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IFdoZWVsRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
M0YxOUIxOTA4MjQ1RTU5MDAxRTlBQkMgLyogSW5mby5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5wbGlz
dC54bWw7IHBhdGggPSBJbmZvLnBsaXN0OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0
aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJOTNGMTlCMUEwODI0NUU1QTAwMUU5QUJDIC8qIFdl
YkNvcmUuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0Rmls
ZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gV2Vi
Q29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTkz
RjE5QjFBMDgyNDVFNUEwMDFFOUFCQyAvKiAuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgaW5jbHVkZUlu
SW5kZXggPSAwOyBwYXRoID0gLmZyYW1ld29yazsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RT
X0RJUjsgfTsKIAkJOTNGMUQzMUEwNTU4Q0M1QzAwODIxQkMwIC8qIGxpYmljdWNvcmUuZHlsaWIg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAiY29tcGls
ZWQubWFjaC1vLmR5bGliIjsgbmFtZSA9IGxpYmljdWNvcmUuZHlsaWI7IHBhdGggPSAvdXNyL2xp
Yi9saWJpY3Vjb3JlLmR5bGliOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQk5M0Yx
RDVCNzEyRDUzMkM0MDA4MzJCRUMgLyogV2ViR0xMb3NlQ29udGV4dC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJHTExvc2VDb250ZXh0LmNwcDsgcGF0aCA9IGNh
bnZhcy9XZWJHTExvc2VDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTNGMUQ1QjgxMkQ1MzJDNDAwODMyQkVDIC8qIFdlYkdMTG9zZUNvbnRleHQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViR0xMb3NlQ29udGV4dC5oOyBwYXRoID0gY2FudmFz
L1dlYkdMTG9zZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzODM2
LDcgKzEzODM0LDcgQEAKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxl
cyA9ICgKIAkJCQk0MTIzMDkxMzEzOEM0MkZGMDBCQ0NGQ0EgLyogSmF2YVNjcmlwdENvcmUuZnJh
bWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCi0JCQkJNDEyMzA4MUIxMzhDNDI5NzAwQkNDRkNBIC8q
IFdlYkNvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkJNDEyMzA4MUIxMzhDNDI5
NzAwQkNDRkNBIC8qIC5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTEzOTAzLDcgKzEz
OTAxLDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTVEODdCQjRGMTFFM0VBRUIwMDcwMkI2RiAv
KiBXZWJDb3JlRXhwb3J0RmlsZUdlbmVyYXRvciAqLywKIAkJCQk0MTdEQTZEMDEzNzM0RTAyMDA3
QzU3RkIgLyogbGliV2ViQ29yZVRlc3RTdXBwb3J0LmR5bGliICovLAotCQkJCTkzRjE5QjFBMDgy
NDVFNUEwMDFFOUFCQyAvKiBXZWJDb3JlLmZyYW1ld29yayAqLywKKwkJCQk5M0YxOUIxQTA4MjQ1
RTVBMDAxRTlBQkMgLyogLmZyYW1ld29yayAqLywKIAkJCSk7CiAJCQluYW1lID0gUHJvZHVjdHM7
CiAJCQlzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7CkBAIC0xNDQ2NCw4ICsxNDQ2Miw2IEBACiAJ
CQkJNTkxMDJGQkExNDMyN0QzQjAwM0M5RDA0IC8qIENvbnRlbnRTZWFyY2hVdGlscy5oICovLAog
CQkJCTdBQUJBMjU3MTRCQzYxMzMwMEFBOUExMSAvKiBET01FZGl0b3IuY3BwICovLAogCQkJCTdB
QUJBMjU4MTRCQzYxMzMwMEFBOUExMSAvKiBET01FZGl0b3IuaCAqLywKLQkJCQk0RjE0NDIyNjEz
MzlGRDYyMDBFMEQ2RjggLyogRE9NTm9kZUhpZ2hsaWdodGVyLmNwcCAqLywKLQkJCQk0RjE0NDIy
NzEzMzlGRDYyMDBFMEQ2RjggLyogRE9NTm9kZUhpZ2hsaWdodGVyLmggKi8sCiAJCQkJN0E1NDg4
MTYxNEU0MzJBMTAwNkFFMDVBIC8qIERPTVBhdGNoU3VwcG9ydC5jcHAgKi8sCiAJCQkJN0E1NDg4
MTUxNEU0MzJBMTAwNkFFMDVBIC8qIERPTVBhdGNoU3VwcG9ydC5oICovLAogCQkJCTU5MTNBMjNG
MTNENDlFQkEwMEY1QjA1QyAvKiBJZGVudGlmaWVyc0ZhY3RvcnkuY3BwICovLApAQCAtMTQ1Mzcs
NiArMTQ1MzMsOCBAQAogCQkJCTIwRDYyOTI1MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24uaCAqLywKIAkJCQk3QUE1MUREMzE0ODUwNkE5MDBBRDI3NTIgLyogSW5z
cGVjdG9yTWVtb3J5QWdlbnQuY3BwICovLAogCQkJCTdBQTUxREQ0MTQ4NTA2QTkwMEFEMjc1MiAv
KiBJbnNwZWN0b3JNZW1vcnlBZ2VudC5oICovLAorCQkJCTdDNjUyMjZEMTVCNDZGOEMwMEIxN0VG
QSAvKiBJbnNwZWN0b3JPdmVybGF5LmNwcCAqLywKKwkJCQk3QzY1MjI2RTE1QjQ2RkExMDBCMTdF
RkEgLyogSW5zcGVjdG9yT3ZlcmxheS5oICovLAogCQkJCTRGNkZERDYyMTM0MURFREQwMDFGOEVF
MyAvKiBJbnNwZWN0b3JQYWdlQWdlbnQuY3BwICovLAogCQkJCTRGNkZERDYzMTM0MURFREQwMDFG
OEVFMyAvKiBJbnNwZWN0b3JQYWdlQWdlbnQuaCAqLywKIAkJCQk5RjBENkIyQzEyMUJGRUJBMDA2
QzAyODggLyogSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAgKi8sCkBAIC0yMjYxOCw3ICsyMjYx
Niw2IEBACiAJCQkJODVFNzExRDIwQUM1RDUzNTAwNTMyNzBGIC8qIERPTU5hbWVkTm9kZU1hcElu
dGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTNCRjREQjBBQkI2QjU1MDA4NjQ3QkIgLyog
RE9NTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU0MDc1MjYwQUQ2QzY2NzAwNjIwQzU3IC8q
IERPTU5vZGVGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTRGMTQ0MjI5MTMzOUZENjIwMEUw
RDZGOCAvKiBET01Ob2RlSGlnaGxpZ2h0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1QjQ5OEZC
MEFEQjM0MDIwMDkyNUNCQiAvKiBET01Ob2RlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg1NTI2QzM3MEFCMEExN0UwMDAzMDJFQSAvKiBET01Ob2RlSXRlcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg1MEI0MUMyMEFEOUU3RTcwMEE2RUQ0RiAvKiBET01Ob2RlSXRlcmF0b3JJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTI5Nyw3ICsyNTI5NCw3IEBACiAJCQluYW1lID0g
V2ViQ29yZTsKIAkJCXByb2R1Y3RJbnN0YWxsUGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdv
cmtzL1dlYktpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzOwogCQkJcHJvZHVjdE5h
bWUgPSBXZWJLaXQ7Ci0JCQlwcm9kdWN0UmVmZXJlbmNlID0gOTNGMTlCMUEwODI0NUU1QTAwMUU5
QUJDIC8qIFdlYkNvcmUuZnJhbWV3b3JrICovOworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDkzRjE5
QjFBMDgyNDVFNUEwMDFFOUFCQyAvKiAuZnJhbWV3b3JrICovOwogCQkJcHJvZHVjdFR5cGUgPSAi
Y29tLmFwcGxlLnByb2R1Y3QtdHlwZS5mcmFtZXdvcmsiOwogCQl9OwogLyogRW5kIFBCWE5hdGl2
ZVRhcmdldCBzZWN0aW9uICovCkBAIC0yNjAyNiw3ICsyNjAyMyw2IEBACiAJCQkJODVDN0Y1QzAw
QUFGQjdDRDAwNDAxNEREIC8qIERPTU11dGF0aW9uRXZlbnQubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk4NTE4REQ3OTBBOUNGMzFCMDA5MUI3QTYgLyogRE9NTmFtZWROb2RlTWFwLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODUzQkY0REMwQUJCNkI1NTAwODY0N0JCIC8qIERPTU5vZGUubW0gaW4gU291
cmNlcyAqLywKLQkJCQk0RjE0NDIyODEzMzlGRDYyMDBFMEQ2RjggLyogRE9NTm9kZUhpZ2hsaWdo
dGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1NTI2QzM4MEFCMEExN0UwMDAzMDJFQSAvKiBE
T01Ob2RlSXRlcmF0b3IubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NUFDQUE4RTBBOUI3NTlDMDA2
NzFFOTAgLyogRE9NTm9kZUxpc3QubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NUNBOTZFQjBBOTYy
NEU5MDA2OTBDQ0YgLyogRE9NTm90YXRpb24ubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGU0YzcxMDBkNjFjNTIwODNmMzgyNzFmMmE3Mjc1NDc1NDY4ZWRiMmMu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw1MjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShJTlNQRUNU
T1IpCi0KLSNpbmNsdWRlICJET01Ob2RlSGlnaGxpZ2h0ZXIuaCIKLQotI2luY2x1ZGUgIkVsZW1l
bnQuaCIKLSNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGb250RmFtaWx5LmgiCi0j
aW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCi0jaW5jbHVkZSAiTm9k
ZS5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgotI2luY2x1ZGUgIlJl
bmRlckJveE1vZGVsT2JqZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTdHls
ZWRFbGVtZW50LmgiCi0jaW5jbHVkZSAiVGV4dFJ1bi5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgewotCi0j
aWYgT1MoV0lORE9XUykKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBmb250SGVpZ2h0UHggPSAxMjsK
LSNlbGlmIE9TKE1BQ19PU19YKSB8fCBPUyhVTklYKQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZv
bnRIZWlnaHRQeCA9IDExOwotI2VuZGlmCi0KLWNvbnN0IHN0YXRpYyBpbnQgcmVjdEluZmxhdGVQ
eCA9IDQ7Ci1jb25zdCBzdGF0aWMgaW50IGJvcmRlcldpZHRoUHggPSAxOwotY29uc3Qgc3RhdGlj
IGludCB0b29sdGlwUGFkZGluZyA9IDQ7Ci0KLWNvbnN0IHN0YXRpYyBpbnQgYXJyb3dUaXBPZmZz
ZXQgPSAyMDsKLWNvbnN0IHN0YXRpYyBmbG9hdCBhcnJvd0hlaWdodCA9IDc7Ci1jb25zdCBzdGF0
aWMgZmxvYXQgYXJyb3dIYWxmV2lkdGggPSA3OwotCi1QYXRoIHF1YWRUb1BhdGgoY29uc3QgRmxv
YXRRdWFkJiBxdWFkKQotewotICAgIFBhdGggcXVhZFBhdGg7Ci0gICAgcXVhZFBhdGgubW92ZVRv
KHF1YWQucDEoKSk7Ci0gICAgcXVhZFBhdGguYWRkTGluZVRvKHF1YWQucDIoKSk7Ci0gICAgcXVh
ZFBhdGguYWRkTGluZVRvKHF1YWQucDMoKSk7Ci0gICAgcXVhZFBhdGguYWRkTGluZVRvKHF1YWQu
cDQoKSk7Ci0gICAgcXVhZFBhdGguY2xvc2VTdWJwYXRoKCk7Ci0gICAgcmV0dXJuIHF1YWRQYXRo
OwotfQotCi12b2lkIGRyYXdPdXRsaW5lZFF1YWQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGbG9hdFF1YWQmIHF1YWQsIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IsIGNvbnN0IENvbG9y
JiBvdXRsaW5lQ29sb3IpCi17Ci0gICAgc3RhdGljIGNvbnN0IGludCBvdXRsaW5lVGhpY2tuZXNz
ID0gMjsKLQotICAgIFBhdGggcXVhZFBhdGggPSBxdWFkVG9QYXRoKHF1YWQpOwotCi0gICAgLy8g
Q2xpcCBvdXQgdGhlIHF1YWQsIHRoZW4gZHJhdyB3aXRoIGEgMnB4IHN0cm9rZSB0byBnZXQgYSBw
aXhlbAotICAgIC8vIG9mIG91dGxpbmUgKGJlY2F1c2UgaW5mbGF0aW5nIGEgcXVhZCBpcyBoYXJk
KQotICAgIHsKLSAgICAgICAgY29udGV4dC5zYXZlKCk7Ci0gICAgICAgIGNvbnRleHQuY2xpcE91
dChxdWFkUGF0aCk7Ci0KLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3Mob3V0bGlu
ZVRoaWNrbmVzcyk7Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3Iob3V0bGluZUNvbG9y
LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICAgICAgY29udGV4dC5zdHJva2VQYXRoKHF1YWRQ
YXRoKTsKLQotICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsKLSAgICB9Ci0KLSAgICAvLyBOb3cg
ZG8gdGhlIGZpbGwKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcihmaWxsQ29sb3IsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IpOwotICAgIGNvbnRleHQuZmlsbFBhdGgocXVhZFBhdGgpOwotfQotCi12b2lk
IGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEZsb2F0UXVhZCYgcXVhZCwgY29uc3QgRmxvYXRRdWFkJiBjbGlwUXVhZCwgY29uc3QgQ29sb3Im
IGZpbGxDb2xvcikKLXsKLSAgICBjb250ZXh0LnNhdmUoKTsKLSAgICBQYXRoIGNsaXBRdWFkUGF0
aCA9IHF1YWRUb1BhdGgoY2xpcFF1YWQpOwotICAgIGNvbnRleHQuY2xpcE91dChjbGlwUXVhZFBh
dGgpOwotICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgcXVhZCwgZmlsbENvbG9yLCBDb2xv
cjo6dHJhbnNwYXJlbnQpOwotICAgIGNvbnRleHQucmVzdG9yZSgpOwotfQotCi12b2lkIGRyYXdI
aWdobGlnaHRGb3JCb3goR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQm
IGNvbnRlbnRRdWFkLCBjb25zdCBGbG9hdFF1YWQmIHBhZGRpbmdRdWFkLCBjb25zdCBGbG9hdFF1
YWQmIGJvcmRlclF1YWQsIGNvbnN0IEZsb2F0UXVhZCYgbWFyZ2luUXVhZCwgSGlnaGxpZ2h0RGF0
YSogaGlnaGxpZ2h0RGF0YSkKLXsKLSAgICBib29sIGhhc01hcmdpbiA9IGhpZ2hsaWdodERhdGEt
Pm1hcmdpbiAhPSBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci0gICAgYm9vbCBoYXNCb3JkZXIgPSBoaWdo
bGlnaHREYXRhLT5ib3JkZXIgIT0gQ29sb3I6OnRyYW5zcGFyZW50OwotICAgIGJvb2wgaGFzUGFk
ZGluZyA9IGhpZ2hsaWdodERhdGEtPnBhZGRpbmcgIT0gQ29sb3I6OnRyYW5zcGFyZW50OwotICAg
IGJvb2wgaGFzQ29udGVudCA9IGhpZ2hsaWdodERhdGEtPmNvbnRlbnQgIT0gQ29sb3I6OnRyYW5z
cGFyZW50IHx8IGhpZ2hsaWdodERhdGEtPmNvbnRlbnRPdXRsaW5lICE9IENvbG9yOjp0cmFuc3Bh
cmVudDsKLQotICAgIEZsb2F0UXVhZCBjbGlwUXVhZDsKLSAgICBDb2xvciBjbGlwQ29sb3I7Ci0g
ICAgaWYgKGhhc01hcmdpbiAmJiAoIWhhc0JvcmRlciB8fCBtYXJnaW5RdWFkICE9IGJvcmRlclF1
YWQpKSB7Ci0gICAgICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChjb250ZXh0LCBtYXJnaW5R
dWFkLCBib3JkZXJRdWFkLCBoaWdobGlnaHREYXRhLT5tYXJnaW4pOwotICAgICAgICBjbGlwUXVh
ZCA9IGJvcmRlclF1YWQ7Ci0gICAgfQotICAgIGlmIChoYXNCb3JkZXIgJiYgKCFoYXNQYWRkaW5n
IHx8IGJvcmRlclF1YWQgIT0gcGFkZGluZ1F1YWQpKSB7Ci0gICAgICAgIGRyYXdPdXRsaW5lZFF1
YWRXaXRoQ2xpcChjb250ZXh0LCBib3JkZXJRdWFkLCBwYWRkaW5nUXVhZCwgaGlnaGxpZ2h0RGF0
YS0+Ym9yZGVyKTsKLSAgICAgICAgY2xpcFF1YWQgPSBwYWRkaW5nUXVhZDsKLSAgICB9Ci0gICAg
aWYgKGhhc1BhZGRpbmcgJiYgKCFoYXNDb250ZW50IHx8IHBhZGRpbmdRdWFkICE9IGNvbnRlbnRR
dWFkKSkgewotICAgICAgICBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAoY29udGV4dCwgcGFkZGlu
Z1F1YWQsIGNvbnRlbnRRdWFkLCBoaWdobGlnaHREYXRhLT5wYWRkaW5nKTsKLSAgICAgICAgY2xp
cFF1YWQgPSBjb250ZW50UXVhZDsKLSAgICB9Ci0gICAgaWYgKGhhc0NvbnRlbnQpCi0gICAgICAg
IGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgY29udGVudFF1YWQsIGhpZ2hsaWdodERhdGEtPmNv
bnRlbnQsIGhpZ2hsaWdodERhdGEtPmNvbnRlbnRPdXRsaW5lKTsKLX0KLQotdm9pZCBkcmF3SGln
aGxpZ2h0Rm9yU1ZHUmVuZGVyZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBWZWN0
b3I8RmxvYXRRdWFkPiYgYWJzb2x1dGVRdWFkcywgSGlnaGxpZ2h0RGF0YSogaGlnaGxpZ2h0RGF0
YSkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFic29sdXRlUXVhZHMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgYWJzb2x1dGVRdWFkc1tpXSwg
aGlnaGxpZ2h0RGF0YS0+Y29udGVudCwgQ29sb3I6OnRyYW5zcGFyZW50KTsKLX0KLQotaW50IGRy
YXdTdWJzdHJpbmcoY29uc3QgVGV4dFJ1biYgZ2xvYmFsVGV4dFJ1biwgaW50IG9mZnNldCwgaW50
IGxlbmd0aCwgY29uc3QgQ29sb3ImIHRleHRDb2xvciwgY29uc3QgRm9udCYgZm9udCwgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiB0aXRsZVJlY3QpCi17Ci0gICAg
Y29udGV4dC5zZXRGaWxsQ29sb3IodGV4dENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAg
ICBjb250ZXh0LmRyYXdUZXh0KGZvbnQsIGdsb2JhbFRleHRSdW4sIEludFBvaW50KHRpdGxlUmVj
dC5waXhlbFNuYXBwZWRYKCkgKyByZWN0SW5mbGF0ZVB4LCB0aXRsZVJlY3QucGl4ZWxTbmFwcGVk
WSgpICsgZm9udC5mb250TWV0cmljcygpLmhlaWdodCgpKSwgb2Zmc2V0LCBvZmZzZXQgKyBsZW5n
dGgpOwotICAgIHJldHVybiBvZmZzZXQgKyBsZW5ndGg7Ci19Ci0KLWZsb2F0IGNhbGN1bGF0ZUFy
cm93VGlwWChjb25zdCBMYXlvdXRSZWN0JiBhbmNob3JCb3gsIGNvbnN0IExheW91dFJlY3QmIHRp
dGxlUmVjdCkKLXsKLSAgICBjb25zdCBzdGF0aWMgaW50IGFuY2hvclRpcE9mZnNldFB4ID0gMjsK
LQotICAgIGludCBtaW5YID0gdGl0bGVSZWN0LngoKSArIGFycm93SGFsZldpZHRoOwotICAgIGlu
dCBtYXhYID0gdGl0bGVSZWN0Lm1heFgoKSAtIGFycm93SGFsZldpZHRoOwotICAgIGludCBhbmNo
b3JYID0gYW5jaG9yQm94LngoKTsKLSAgICBpbnQgYW5jaG9yTWF4WCA9IGFuY2hvckJveC5tYXhY
KCk7Ci0KLSAgICBpbnQgeCA9IHRpdGxlUmVjdC54KCkgKyBhcnJvd1RpcE9mZnNldDsgLy8gRGVm
YXVsdCB0b29sdGlwIHBvc2l0aW9uLgotICAgIGlmICh4IDwgYW5jaG9yWCkKLSAgICAgICAgeCA9
IGFuY2hvclggKyBhbmNob3JUaXBPZmZzZXRQeDsKLSAgICBlbHNlIGlmICh4ID4gYW5jaG9yTWF4
WCkKLSAgICAgICAgeCA9IGFuY2hvck1heFggLSBhbmNob3JUaXBPZmZzZXRQeDsKLQotICAgIGlm
ICh4IDwgbWluWCkKLSAgICAgICAgeCA9IG1pblg7Ci0gICAgZWxzZSBpZiAoeCA+IG1heFgpCi0g
ICAgICAgIHggPSBtYXhYOwotCi0gICAgcmV0dXJuIHg7Ci19Ci0KLXZvaWQgc2V0VXBGb250RGVz
Y3JpcHRpb24oRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFdlYkNvcmU6OlNldHRp
bmdzKiBzZXR0aW5ncykKLXsKLSNkZWZpbmUgVE9PTFRJUF9GT05UX0ZBTUlMSUVTKHNpemUsIC4u
LikgXAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHRvb2x0aXBGb250RmFjZVNpemUgPSBzaXplO1wK
LXN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcqIHRvb2x0aXBGb250RmFjZVtzaXplXSA9IHsgX19W
QV9BUkdTX18gfTsKLQotI2lmIE9TKFdJTkRPV1MpCi1UT09MVElQX0ZPTlRfRkFNSUxJRVMoMiwg
bmV3IEF0b21pY1N0cmluZygiQ29uc29sYXMiKSwgbmV3IEF0b21pY1N0cmluZygiTHVjaWRhIENv
bnNvbGUiKSkKLSNlbGlmIE9TKE1BQ19PU19YKQotVE9PTFRJUF9GT05UX0ZBTUlMSUVTKDIsIG5l
dyBBdG9taWNTdHJpbmcoIk1lbmxvIiksIG5ldyBBdG9taWNTdHJpbmcoIk1vbmFjbyIpKQotI2Vs
aWYgT1MoVU5JWCkKLVRPT0xUSVBfRk9OVF9GQU1JTElFUygxLCBuZXcgQXRvbWljU3RyaW5nKCJk
ZWphdnUgc2FucyBtb25vIikpCi0jZW5kaWYKLS8vIEluIHRoZSBkZWZhdWx0IGNhc2UsIHdlIGdl
dCB0aGUgc2V0dGluZ3MtcHJvdmlkZWQgbW9ub3NwYWNlIGZvbnQuCi0KLSN1bmRlZiBUT09MVElQ
X0ZPTlRfRkFNSUxJRVMKLQotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNl
dHRpbmdzLT5mb250UmVuZGVyaW5nTW9kZSgpKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0Q29t
cHV0ZWRTaXplKGZvbnRIZWlnaHRQeCk7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZpeGVk
Rm9udEZhbWlseSA9IHNldHRpbmdzLT5maXhlZEZvbnRGYW1pbHkoKTsKLSAgICBpZiAoIWZpeGVk
Rm9udEZhbWlseS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVy
aWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHkpOwotICAgICAgICBGb250
RmFtaWx5KiBjdXJyZW50RmFtaWx5ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHRvb2x0aXBGb250RmFjZVNpemU7ICsraSkgewotICAgICAgICAgICAgaWYgKCFjdXJyZW50
RmFtaWx5KSB7Ci0gICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCku
c2V0RmFtaWx5KCp0b29sdGlwRm9udEZhY2VbaV0pOwotICAgICAgICAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5maXJzdEZhbWlseSgpLmFwcGVuZEZhbWlseSgwKTsKLSAgICAgICAgICAgICAgICBj
dXJyZW50RmFtaWx5ID0gJmZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8U2hhcmVkRm9udEZhbWlseT4gbmV3
RmFtaWx5ID0gU2hhcmVkRm9udEZhbWlseTo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgbmV3
RmFtaWx5LT5zZXRGYW1pbHkoKnRvb2x0aXBGb250RmFjZVtpXSk7Ci0gICAgICAgICAgICAgICAg
Y3VycmVudEZhbWlseS0+YXBwZW5kRmFtaWx5KG5ld0ZhbWlseSk7Ci0gICAgICAgICAgICAgICAg
Y3VycmVudEZhbWlseSA9IG5ld0ZhbWlseS5nZXQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBSZWZQdHI8U2hhcmVkRm9udEZhbWlseT4gbmV3RmFtaWx5ID0gU2hhcmVkRm9u
dEZhbWlseTo6Y3JlYXRlKCk7Ci0gICAgICAgIG5ld0ZhbWlseS0+c2V0RmFtaWx5KGZpeGVkRm9u
dEZhbWlseSk7Ci0gICAgICAgIGN1cnJlbnRGYW1pbHktPmFwcGVuZEZhbWlseShuZXdGYW1pbHkp
OwotICAgICAgICBjdXJyZW50RmFtaWx5ID0gbmV3RmFtaWx5LmdldCgpOwotICAgIH0KLX0KLQot
dm9pZCBkcmF3RWxlbWVudFRpdGxlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgTm9kZSogbm9k
ZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50UmVjdCYgYm91bmRpbmdCb3gsIGNv
bnN0IEludFJlY3QmIGFuY2hvckJveCwgY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCwgV2Vi
Q29yZTo6U2V0dGluZ3MqIHNldHRpbmdzKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29s
b3IsIGJhY2tncm91bmRDb2xvciwgKDI1NSwgMjU1LCAxOTQpKTsKLSAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKENvbG9yLCB0YWdDb2xvciwgKDEzNiwgMTgsIDEyOCkpOyAvLyBTYW1lIGFzIC53ZWJr
aXQtaHRtbC10YWcuCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgYXR0ckNvbG9yLCAo
MjYsIDI2LCAxNjYpKTsgLy8gU2FtZSBhcyAud2Via2l0LWh0bWwtYXR0cmlidXRlLXZhbHVlLgot
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIG5vcm1hbENvbG9yLCAoQ29sb3I6OmJsYWNr
KSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgcHhBbmRCb3JkZXJDb2xvciwgKDEy
OCwgMTI4LCAxMjgpKTsKLQotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBweFN0cmlu
ZywgKCJweCIpKTsKLSAgICBjb25zdCBzdGF0aWMgVUNoYXIgdGltZXNVQ2hhcltdID0geyAweDAw
MjAsIDB4MDBENywgMHgwMDIwLCAwIH07Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcs
IHRpbWVzU3RyaW5nLCAodGltZXNVQ2hhcikpOyAvLyAmdGltZXM7IHN0cmluZwotCi0gICAgRm9u
dENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9udENhY2hlUHVyZ2VQcmV2ZW50ZXI7Ci0KLSAgICBFbGVt
ZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOwotICAgIGJvb2wgaXNY
SFRNTCA9IGVsZW1lbnQtPmRvY3VtZW50KCktPmlzWEhUTUxEb2N1bWVudCgpOwotICAgIFN0cmlu
Z0J1aWxkZXIgbm9kZVRpdGxlOwotICAgIG5vZGVUaXRsZS5hcHBlbmQoaXNYSFRNTCA/IGVsZW1l
bnQtPm5vZGVOYW1lKCkgOiBlbGVtZW50LT5ub2RlTmFtZSgpLmxvd2VyKCkpOwotICAgIHVuc2ln
bmVkIHRhZ05hbWVMZW5ndGggPSBub2RlVGl0bGUubGVuZ3RoKCk7Ci0KLSAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGlkVmFsdWUgPSBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpOwotICAgIHVuc2ln
bmVkIGlkU3RyaW5nTGVuZ3RoID0gMDsKLSAgICBTdHJpbmcgaWRTdHJpbmc7Ci0gICAgaWYgKCFp
ZFZhbHVlLmlzTnVsbCgpICYmICFpZFZhbHVlLmlzRW1wdHkoKSkgewotICAgICAgICBub2RlVGl0
bGUuYXBwZW5kKCIjIik7Ci0gICAgICAgIG5vZGVUaXRsZS5hcHBlbmQoaWRWYWx1ZSk7Ci0gICAg
ICAgIGlkU3RyaW5nTGVuZ3RoID0gMSArIGlkVmFsdWUubGVuZ3RoKCk7Ci0gICAgfQotCi0gICAg
SGFzaFNldDxBdG9taWNTdHJpbmc+IHVzZWRDbGFzc05hbWVzOwotICAgIHVuc2lnbmVkIGNsYXNz
ZXNTdHJpbmdMZW5ndGggPSAwOwotICAgIGlmIChlbGVtZW50LT5oYXNDbGFzcygpICYmIGVsZW1l
bnQtPmlzU3R5bGVkRWxlbWVudCgpKSB7Ci0gICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcm
IGNsYXNzTmFtZXNTdHJpbmcgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCkt
PmNsYXNzTmFtZXMoKTsKLSAgICAgICAgc2l6ZV90IGNsYXNzTmFtZUNvdW50ID0gY2xhc3NOYW1l
c1N0cmluZy5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2xhc3NOYW1l
Q291bnQ7ICsraSkgewotICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjbGFzc05hbWUg
PSBjbGFzc05hbWVzU3RyaW5nW2ldOwotICAgICAgICAgICAgaWYgKHVzZWRDbGFzc05hbWVzLmNv
bnRhaW5zKGNsYXNzTmFtZSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICB1c2VkQ2xhc3NOYW1lcy5hZGQoY2xhc3NOYW1lKTsKLSAgICAgICAgICAgIG5vZGVUaXRsZS5h
cHBlbmQoIi4iKTsKLSAgICAgICAgICAgIG5vZGVUaXRsZS5hcHBlbmQoY2xhc3NOYW1lKTsKLSAg
ICAgICAgICAgIGNsYXNzZXNTdHJpbmdMZW5ndGggKz0gMSArIGNsYXNzTmFtZS5sZW5ndGgoKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBtb2RlbE9iamVj
dCA9IHJlbmRlcmVyLT5pc0JveE1vZGVsT2JqZWN0KCkgPyB0b1JlbmRlckJveE1vZGVsT2JqZWN0
KHJlbmRlcmVyKSA6IDA7Ci0KLSAgICBTdHJpbmcgd2lkdGhOdW1iZXJQYXJ0ID0gIiAiICsgU3Ry
aW5nOjpudW1iZXIobW9kZWxPYmplY3QgPyBhZGp1c3RGb3JBYnNvbHV0ZVpvb20obW9kZWxPYmpl
Y3QtPnBpeGVsU25hcHBlZE9mZnNldFdpZHRoKCksIG1vZGVsT2JqZWN0KSA6IGJvdW5kaW5nQm94
LndpZHRoKCkpOwotICAgIG5vZGVUaXRsZS5hcHBlbmQod2lkdGhOdW1iZXJQYXJ0KTsKLSAgICBu
b2RlVGl0bGUuYXBwZW5kKHB4U3RyaW5nKTsKLSAgICBub2RlVGl0bGUuYXBwZW5kKHRpbWVzU3Ry
aW5nKTsKLSAgICBTdHJpbmcgaGVpZ2h0TnVtYmVyUGFydCA9IFN0cmluZzo6bnVtYmVyKG1vZGVs
T2JqZWN0ID8gYWRqdXN0Rm9yQWJzb2x1dGVab29tKG1vZGVsT2JqZWN0LT5waXhlbFNuYXBwZWRP
ZmZzZXRIZWlnaHQoKSwgbW9kZWxPYmplY3QpIDogYm91bmRpbmdCb3guaGVpZ2h0KCkpOwotICAg
IG5vZGVUaXRsZS5hcHBlbmQoaGVpZ2h0TnVtYmVyUGFydCk7Ci0gICAgbm9kZVRpdGxlLmFwcGVu
ZChweFN0cmluZyk7Ci0KLSAgICBGb250RGVzY3JpcHRpb24gZGVzYzsKLSAgICBzZXRVcEZvbnRE
ZXNjcmlwdGlvbihkZXNjLCBzZXR0aW5ncyk7Ci0gICAgRm9udCBmb250ID0gRm9udChkZXNjLCAw
LCAwKTsKLSAgICBmb250LnVwZGF0ZSgwKTsKLQotICAgIFRleHRSdW4gbm9kZVRpdGxlUnVuKG5v
ZGVUaXRsZS50b1N0cmluZygpKTsKLSAgICBJbnRQb2ludCB0aXRsZUJhc2VQb2ludCA9IEludFBv
aW50KGFuY2hvckJveC54KCksIGFuY2hvckJveC5tYXhZKCkgLSAxKTsKLSAgICB0aXRsZUJhc2VQ
b2ludC5tb3ZlKHJlY3RJbmZsYXRlUHgsIHJlY3RJbmZsYXRlUHgpOwotICAgIEludFJlY3QgdGl0
bGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KG5vZGVU
aXRsZVJ1biwgdGl0bGVCYXNlUG9pbnQsIGZvbnRIZWlnaHRQeCkpOwotICAgIHRpdGxlUmVjdC5p
bmZsYXRlKHJlY3RJbmZsYXRlUHgpOwotCi0gICAgLy8gVGhlIGluaXRpYWwgb2Zmc2V0cyBuZWVk
ZWQgdG8gY29tcGVuc2F0ZSBmb3IgYSAxcHgtdGhpY2sgYm9yZGVyIHN0cm9rZSAod2hpY2ggaXMg
bm90IGEgcGFydCBvZiB0aGUgcmVjdGFuZ2xlKS4KLSAgICBpbnQgZHggPSAtYm9yZGVyV2lkdGhQ
eDsKLSAgICBpbnQgZHkgPSBib3JkZXJXaWR0aFB4OwotCi0gICAgLy8gSWYgdGhlIHRpcCBzdGlj
a3MgYmV5b25kIHRoZSByaWdodCBvZiB2aXNpYmxlUmVjdCwgcmlnaHQtYWxpZ24gdGhlIHRpcCB3
aXRoIHRoZSBzYWlkIGJvdW5kYXJ5LgotICAgIGlmICh0aXRsZVJlY3QubWF4WCgpICsgZHggPiB2
aXNpYmxlUmVjdC5tYXhYKCkpCi0gICAgICAgIGR4ID0gdmlzaWJsZVJlY3QubWF4WCgpIC0gdGl0
bGVSZWN0Lm1heFgoKTsKLQotICAgIC8vIElmIHRoZSB0aXAgc3RpY2tzIGJleW9uZCB0aGUgbGVm
dCBvZiB2aXNpYmxlUmVjdCwgbGVmdC1hbGlnbiB0aGUgdGlwIHdpdGggdGhlIHNhaWQgYm91bmRh
cnkuCi0gICAgaWYgKHRpdGxlUmVjdC54KCkgKyBkeCA8IHZpc2libGVSZWN0LngoKSkKLSAgICAg
ICAgZHggPSB2aXNpYmxlUmVjdC54KCkgLSB0aXRsZVJlY3QueCgpIC0gYm9yZGVyV2lkdGhQeDsK
LQotICAgIC8vIElmIHRoZSB0aXAgc3RpY2tzIGJleW9uZCB0aGUgYm90dG9tIG9mIHZpc2libGVS
ZWN0LCBzaG93IHRoZSB0aXAgYXQgdG9wIG9mIGJvdW5kaW5nIGJveC4KLSAgICBpZiAodGl0bGVS
ZWN0Lm1heFkoKSArIGR5ID4gdmlzaWJsZVJlY3QubWF4WSgpKSB7Ci0gICAgICAgIGR5ID0gYW5j
aG9yQm94LnkoKSAtIHRpdGxlUmVjdC5tYXhZKCkgLSBib3JkZXJXaWR0aFB4OwotICAgICAgICAv
LyBJZiB0aGUgdGlwIHN0aWxsIHN0aWNrcyBiZXlvbmQgdGhlIGJvdHRvbSBvZiB2aXNpYmxlUmVj
dCwgYm90dG9tLWFsaWduIHRoZSB0aXAgd2l0aCB0aGUgc2FpZCBib3VuZGFyeS4KLSAgICAgICAg
aWYgKHRpdGxlUmVjdC5tYXhZKCkgKyBkeSA+IHZpc2libGVSZWN0Lm1heFkoKSkKLSAgICAgICAg
ICAgIGR5ID0gdmlzaWJsZVJlY3QubWF4WSgpIC0gdGl0bGVSZWN0Lm1heFkoKTsKLSAgICB9Ci0K
LSAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIHRvcCBvZiB2aXNpYmxlUmVjdCwg
c2hvdyB0aGUgdGlwIGF0IHRvcCBvZiB2aXNpYmxlUmVjdC4KLSAgICBpZiAodGl0bGVSZWN0Lnko
KSArIGR5IDwgdmlzaWJsZVJlY3QueSgpKQotICAgICAgICBkeSA9IHZpc2libGVSZWN0LnkoKSAt
IHRpdGxlUmVjdC55KCkgKyBib3JkZXJXaWR0aFB4OwotCi0gICAgdGl0bGVSZWN0Lm1vdmUoZHgs
IGR5KTsKLQotICAgIGJvb2wgaXNBcnJvd0F0VG9wID0gdGl0bGVSZWN0LnkoKSA+IGFuY2hvckJv
eC55KCk7Ci0gICAgdGl0bGVSZWN0Lm1vdmUoMCwgdG9vbHRpcFBhZGRpbmcgKiAoaXNBcnJvd0F0
VG9wID8gMSA6IC0xKSk7Ci0KLSAgICB7Ci0gICAgICAgIGZsb2F0IGFycm93VGlwWCA9IGNhbGN1
bGF0ZUFycm93VGlwWChhbmNob3JCb3gsIHRpdGxlUmVjdCk7Ci0gICAgICAgIGludCBhcnJvd0Jh
c2VZID0gaXNBcnJvd0F0VG9wID8gdGl0bGVSZWN0LnkoKSA6IHRpdGxlUmVjdC5tYXhZKCk7Ci0g
ICAgICAgIGludCBhcnJvd09wcG9zaXRlWSA9IGlzQXJyb3dBdFRvcCA/IHRpdGxlUmVjdC5tYXhZ
KCkgOiB0aXRsZVJlY3QueSgpOwotCi0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnRzWzhdOwotICAg
ICAgICBwb2ludHNbMF0gPSBGbG9hdFBvaW50KGFycm93VGlwWCAtIGFycm93SGFsZldpZHRoLCBh
cnJvd0Jhc2VZKTsKLSAgICAgICAgcG9pbnRzWzFdID0gRmxvYXRQb2ludChhcnJvd1RpcFgsIGFy
cm93QmFzZVkgKyBhcnJvd0hlaWdodCAqIChpc0Fycm93QXRUb3AgPyAtMSA6IDEpKTsKLSAgICAg
ICAgcG9pbnRzWzJdID0gRmxvYXRQb2ludChhcnJvd1RpcFggKyBhcnJvd0hhbGZXaWR0aCwgYXJy
b3dCYXNlWSk7Ci0gICAgICAgIHBvaW50c1szXSA9IEZsb2F0UG9pbnQodGl0bGVSZWN0Lm1heFgo
KSwgYXJyb3dCYXNlWSk7Ci0gICAgICAgIHBvaW50c1s0XSA9IEZsb2F0UG9pbnQodGl0bGVSZWN0
Lm1heFgoKSwgYXJyb3dPcHBvc2l0ZVkpOwotICAgICAgICBwb2ludHNbNV0gPSBGbG9hdFBvaW50
KHRpdGxlUmVjdC54KCksIGFycm93T3Bwb3NpdGVZKTsKLSAgICAgICAgcG9pbnRzWzZdID0gRmxv
YXRQb2ludCh0aXRsZVJlY3QueCgpLCBhcnJvd0Jhc2VZKTsKLSAgICAgICAgcG9pbnRzWzddID0g
cG9pbnRzWzBdOwotCi0gICAgICAgIFBhdGggcGF0aDsKLSAgICAgICAgcGF0aC5tb3ZlVG8ocG9p
bnRzWzBdKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCA4OyArK2kpCi0gICAgICAgICAg
ICBwYXRoLmFkZExpbmVUbyhwb2ludHNbaV0pOwotCi0gICAgICAgIGNvbnRleHQuc2F2ZSgpOwot
ICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLjVmLCAwLjVmKTsKLSAgICAgICAgY29udGV4dC5z
ZXRTdHJva2VDb2xvcihweEFuZEJvcmRlckNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAg
ICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoYmFja2dyb3VuZENvbG9yLCBDb2xvclNwYWNlRGV2
aWNlUkdCKTsKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoYm9yZGVyV2lkdGhQ
eCk7Ci0gICAgICAgIGNvbnRleHQuZmlsbFBhdGgocGF0aCk7Ci0gICAgICAgIGNvbnRleHQuc3Ry
b2tlUGF0aChwYXRoKTsKLSAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgfQotCi0gICAg
aW50IGN1cnJlbnRQb3MgPSAwOwotICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVU
aXRsZVJ1biwgY3VycmVudFBvcywgdGFnTmFtZUxlbmd0aCwgdGFnQ29sb3IsIGZvbnQsIGNvbnRl
eHQsIHRpdGxlUmVjdCk7Ci0gICAgaWYgKGlkU3RyaW5nTGVuZ3RoKQotICAgICAgICBjdXJyZW50
UG9zID0gZHJhd1N1YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIGlkU3RyaW5nTGVu
Z3RoLCBhdHRyQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7Ci0gICAgaWYgKGNsYXNz
ZXNTdHJpbmdMZW5ndGgpCi0gICAgICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVU
aXRsZVJ1biwgY3VycmVudFBvcywgY2xhc3Nlc1N0cmluZ0xlbmd0aCwgYXR0ckNvbG9yLCBmb250
LCBjb250ZXh0LCB0aXRsZVJlY3QpOwotICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5v
ZGVUaXRsZVJ1biwgY3VycmVudFBvcywgd2lkdGhOdW1iZXJQYXJ0Lmxlbmd0aCgpLCBub3JtYWxD
b2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVSZWN0KTsKLSAgICBjdXJyZW50UG9zID0gZHJhd1N1
YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIHB4U3RyaW5nLmxlbmd0aCgpICsgdGlt
ZXNTdHJpbmcubGVuZ3RoKCksIHB4QW5kQm9yZGVyQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxl
UmVjdCk7Ci0gICAgY3VycmVudFBvcyA9IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBjdXJy
ZW50UG9zLCBoZWlnaHROdW1iZXJQYXJ0Lmxlbmd0aCgpLCBub3JtYWxDb2xvciwgZm9udCwgY29u
dGV4dCwgdGl0bGVSZWN0KTsKLSAgICBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3VycmVu
dFBvcywgcHhTdHJpbmcubGVuZ3RoKCksIHB4QW5kQm9yZGVyQ29sb3IsIGZvbnQsIGNvbnRleHQs
IHRpdGxlUmVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbnRlbnRzUXVhZFRvUGFnZShjb25zdCBG
cmFtZVZpZXcqIG1haW5WaWV3LCBjb25zdCBGcmFtZVZpZXcqIHZpZXcsIEZsb2F0UXVhZCYgcXVh
ZCkKLXsKLSAgICBxdWFkLnNldFAxKHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhyb3VuZGVkSW50
UG9pbnQocXVhZC5wMSgpKSkpOwotICAgIHF1YWQuc2V0UDIodmlldy0+Y29udGVudHNUb1Jvb3RW
aWV3KHJvdW5kZWRJbnRQb2ludChxdWFkLnAyKCkpKSk7Ci0gICAgcXVhZC5zZXRQMyh2aWV3LT5j
b250ZW50c1RvUm9vdFZpZXcocm91bmRlZEludFBvaW50KHF1YWQucDMoKSkpKTsKLSAgICBxdWFk
LnNldFA0KHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhyb3VuZGVkSW50UG9pbnQocXVhZC5wNCgp
KSkpOwotICAgIHF1YWQgKz0gbWFpblZpZXctPnNjcm9sbE9mZnNldCgpOwotfQotCi1zdGF0aWMg
dm9pZCBnZXRPckRyYXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgSGln
aGxpZ2h0RGF0YSogaGlnaGxpZ2h0RGF0YSwgSGlnaGxpZ2h0KiBoaWdobGlnaHQpCi17Ci0gICAg
Tm9kZSogbm9kZSA9IGhpZ2hsaWdodERhdGEtPm5vZGUuZ2V0KCk7Ci0gICAgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgRnJhbWUqIGNvbnRhaW5pbmdGcmFt
ZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7Ci0KLSAgICBpZiAoIXJlbmRlcmVyIHx8ICFj
b250YWluaW5nRnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lVmlldyogY29udGFp
bmluZ1ZpZXcgPSBjb250YWluaW5nRnJhbWUtPnZpZXcoKTsKLSAgICBGcmFtZVZpZXcqIG1haW5W
aWV3ID0gY29udGFpbmluZ0ZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCk7Ci0gICAg
SW50UmVjdCBib3VuZGluZ0JveCA9IHBpeGVsU25hcHBlZEludFJlY3QoY29udGFpbmluZ1ZpZXct
PmNvbnRlbnRzVG9Sb290VmlldyhyZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSkp
OwotICAgIGJvdW5kaW5nQm94Lm1vdmUobWFpblZpZXctPnNjcm9sbE9mZnNldCgpKTsKLSAgICBJ
bnRSZWN0IHRpdGxlQW5jaG9yQm94ID0gYm91bmRpbmdCb3g7Ci0KLSAgICBGbG9hdFJlY3Qgdmlz
aWJsZVJlY3QgPSBtYWluVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgLy8gRG9uJ3Qg
dHJhbnNsYXRlIHRoZSBjb250ZXh0IGlmIHRoZSBmcmFtZSBpcyByZW5kZXJlZCBpbiBwYWdlIGNv
b3JkaW5hdGVzLgotICAgIGlmIChjb250ZXh0ICYmICFtYWluVmlldy0+ZGVsZWdhdGVzU2Nyb2xs
aW5nKCkpCi0gICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtdmlzaWJsZVJlY3QueCgpLCAtdmlz
aWJsZVJlY3QueSgpKTsKLQotICAgIC8vIFJlbmRlclNWR1Jvb3Qgc2hvdWxkIGJlIGhpZ2hsaWdo
dGVkIHRocm91Z2ggdGhlIGlzQm94KCkgY29kZSBwYXRoLCBhbGwgb3RoZXIgU1ZHIGVsZW1lbnRz
IHNob3VsZCBqdXN0IGR1bXAgdGhlaXIgYWJzb2x1dGVRdWFkcygpLgotI2lmIEVOQUJMRShTVkcp
Ci0gICAgYm9vbCBpc1NWR1JlbmRlcmVyID0gcmVuZGVyZXItPm5vZGUoKSAmJiByZW5kZXJlci0+
bm9kZSgpLT5pc1NWR0VsZW1lbnQoKSAmJiAhcmVuZGVyZXItPmlzU1ZHUm9vdCgpOwotI2Vsc2UK
LSAgICBib29sIGlzU1ZHUmVuZGVyZXIgPSBmYWxzZTsKLSNlbmRpZgotCi0gICAgaWYgKGlzU1ZH
UmVuZGVyZXIpIHsKLSAgICAgICAgaGlnaGxpZ2h0LT50eXBlID0gSGlnaGxpZ2h0VHlwZVJlY3Rz
OwotICAgICAgICByZW5kZXJlci0+YWJzb2x1dGVRdWFkcyhoaWdobGlnaHQtPnF1YWRzKTsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBoaWdobGlnaHQtPnF1YWRzLnNpemUoKTsgKytp
KQotICAgICAgICAgICAgY29udGVudHNRdWFkVG9QYWdlKG1haW5WaWV3LCBjb250YWluaW5nVmll
dywgaGlnaGxpZ2h0LT5xdWFkc1tpXSk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAg
ICAgICBkcmF3SGlnaGxpZ2h0Rm9yU1ZHUmVuZGVyZXIoKmNvbnRleHQsIGhpZ2hsaWdodC0+cXVh
ZHMsIGhpZ2hsaWdodERhdGEpOwotICAgIH0gZWxzZSBpZiAocmVuZGVyZXItPmlzQm94KCkgfHwg
cmVuZGVyZXItPmlzUmVuZGVySW5saW5lKCkpIHsKLSAgICAgICAgTGF5b3V0UmVjdCBjb250ZW50
Qm94OwotICAgICAgICBMYXlvdXRSZWN0IHBhZGRpbmdCb3g7Ci0gICAgICAgIExheW91dFJlY3Qg
Ym9yZGVyQm94OwotICAgICAgICBMYXlvdXRSZWN0IG1hcmdpbkJveDsKLQotICAgICAgICBpZiAo
cmVuZGVyZXItPmlzQm94KCkpIHsKLSAgICAgICAgICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0g
dG9SZW5kZXJCb3gocmVuZGVyZXIpOwotCi0gICAgICAgICAgICAvLyBSZW5kZXJCb3ggcmV0dXJu
cyB0aGUgInB1cmUiIGNvbnRlbnQgYXJlYSBib3gsIGV4Y2x1c2l2ZSBvZiB0aGUgc2Nyb2xsYmFy
cyAoaWYgcHJlc2VudCksIHdoaWNoIGFsc28gY291bnQgdG93YXJkcyB0aGUgY29udGVudCBhcmVh
IGluIENTUy4KLSAgICAgICAgICAgIGNvbnRlbnRCb3ggPSByZW5kZXJCb3gtPmNvbnRlbnRCb3hS
ZWN0KCk7Ci0gICAgICAgICAgICBjb250ZW50Qm94LnNldFdpZHRoKGNvbnRlbnRCb3gud2lkdGgo
KSArIHJlbmRlckJveC0+dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpKTsKLSAgICAgICAgICAgIGNv
bnRlbnRCb3guc2V0SGVpZ2h0KGNvbnRlbnRCb3guaGVpZ2h0KCkgKyByZW5kZXJCb3gtPmhvcml6
b250YWxTY3JvbGxiYXJIZWlnaHQoKSk7Ci0KLSAgICAgICAgICAgIHBhZGRpbmdCb3ggPSBMYXlv
dXRSZWN0KGNvbnRlbnRCb3gueCgpIC0gcmVuZGVyQm94LT5wYWRkaW5nTGVmdCgpLCBjb250ZW50
Qm94LnkoKSAtIHJlbmRlckJveC0+cGFkZGluZ1RvcCgpLAotICAgICAgICAgICAgICAgICAgICBj
b250ZW50Qm94LndpZHRoKCkgKyByZW5kZXJCb3gtPnBhZGRpbmdMZWZ0KCkgKyByZW5kZXJCb3gt
PnBhZGRpbmdSaWdodCgpLCBjb250ZW50Qm94LmhlaWdodCgpICsgcmVuZGVyQm94LT5wYWRkaW5n
VG9wKCkgKyByZW5kZXJCb3gtPnBhZGRpbmdCb3R0b20oKSk7Ci0gICAgICAgICAgICBib3JkZXJC
b3ggPSBMYXlvdXRSZWN0KHBhZGRpbmdCb3gueCgpIC0gcmVuZGVyQm94LT5ib3JkZXJMZWZ0KCks
IHBhZGRpbmdCb3gueSgpIC0gcmVuZGVyQm94LT5ib3JkZXJUb3AoKSwKLSAgICAgICAgICAgICAg
ICAgICAgcGFkZGluZ0JveC53aWR0aCgpICsgcmVuZGVyQm94LT5ib3JkZXJMZWZ0KCkgKyByZW5k
ZXJCb3gtPmJvcmRlclJpZ2h0KCksIHBhZGRpbmdCb3guaGVpZ2h0KCkgKyByZW5kZXJCb3gtPmJv
cmRlclRvcCgpICsgcmVuZGVyQm94LT5ib3JkZXJCb3R0b20oKSk7Ci0gICAgICAgICAgICBtYXJn
aW5Cb3ggPSBMYXlvdXRSZWN0KGJvcmRlckJveC54KCkgLSByZW5kZXJCb3gtPm1hcmdpbkxlZnQo
KSwgYm9yZGVyQm94LnkoKSAtIHJlbmRlckJveC0+bWFyZ2luVG9wKCksCi0gICAgICAgICAgICAg
ICAgICAgIGJvcmRlckJveC53aWR0aCgpICsgcmVuZGVyQm94LT5tYXJnaW5XaWR0aCgpLCBib3Jk
ZXJCb3guaGVpZ2h0KCkgKyByZW5kZXJCb3gtPm1hcmdpbkhlaWdodCgpKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIFJlbmRlcklubGluZSogcmVuZGVySW5saW5lID0gdG9SZW5kZXJJ
bmxpbmUocmVuZGVyZXIpOwotCi0gICAgICAgICAgICAvLyBSZW5kZXJJbmxpbmUncyBib3VuZGlu
ZyBib3ggaW5jbHVkZXMgcGFkZGluZ3MgYW5kIGJvcmRlcnMsIGV4Y2x1ZGVzIG1hcmdpbnMuCi0g
ICAgICAgICAgICBib3JkZXJCb3ggPSByZW5kZXJJbmxpbmUtPmxpbmVzQm91bmRpbmdCb3goKTsK
LSAgICAgICAgICAgIHBhZGRpbmdCb3ggPSBMYXlvdXRSZWN0KGJvcmRlckJveC54KCkgKyByZW5k
ZXJJbmxpbmUtPmJvcmRlckxlZnQoKSwgYm9yZGVyQm94LnkoKSArIHJlbmRlcklubGluZS0+Ym9y
ZGVyVG9wKCksCi0gICAgICAgICAgICAgICAgICAgIGJvcmRlckJveC53aWR0aCgpIC0gcmVuZGVy
SW5saW5lLT5ib3JkZXJMZWZ0KCkgLSByZW5kZXJJbmxpbmUtPmJvcmRlclJpZ2h0KCksIGJvcmRl
ckJveC5oZWlnaHQoKSAtIHJlbmRlcklubGluZS0+Ym9yZGVyVG9wKCkgLSByZW5kZXJJbmxpbmUt
PmJvcmRlckJvdHRvbSgpKTsKLSAgICAgICAgICAgIGNvbnRlbnRCb3ggPSBMYXlvdXRSZWN0KHBh
ZGRpbmdCb3gueCgpICsgcmVuZGVySW5saW5lLT5wYWRkaW5nTGVmdCgpLCBwYWRkaW5nQm94Lnko
KSArIHJlbmRlcklubGluZS0+cGFkZGluZ1RvcCgpLAotICAgICAgICAgICAgICAgICAgICBwYWRk
aW5nQm94LndpZHRoKCkgLSByZW5kZXJJbmxpbmUtPnBhZGRpbmdMZWZ0KCkgLSByZW5kZXJJbmxp
bmUtPnBhZGRpbmdSaWdodCgpLCBwYWRkaW5nQm94LmhlaWdodCgpIC0gcmVuZGVySW5saW5lLT5w
YWRkaW5nVG9wKCkgLSByZW5kZXJJbmxpbmUtPnBhZGRpbmdCb3R0b20oKSk7Ci0gICAgICAgICAg
ICAvLyBJZ25vcmUgbWFyZ2luVG9wIGFuZCBtYXJnaW5Cb3R0b20gZm9yIGlubGluZXMuCi0gICAg
ICAgICAgICBtYXJnaW5Cb3ggPSBMYXlvdXRSZWN0KGJvcmRlckJveC54KCkgLSByZW5kZXJJbmxp
bmUtPm1hcmdpbkxlZnQoKSwgYm9yZGVyQm94LnkoKSwKLSAgICAgICAgICAgICAgICAgICAgYm9y
ZGVyQm94LndpZHRoKCkgKyByZW5kZXJJbmxpbmUtPm1hcmdpbldpZHRoKCksIGJvcmRlckJveC5o
ZWlnaHQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBGbG9hdFF1YWQgYWJzQ29udGVudFF1YWQg
PSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoY29udGVudEJveCkpOwot
ICAgICAgICBGbG9hdFF1YWQgYWJzUGFkZGluZ1F1YWQgPSByZW5kZXJlci0+bG9jYWxUb0Fic29s
dXRlUXVhZChGbG9hdFJlY3QocGFkZGluZ0JveCkpOwotICAgICAgICBGbG9hdFF1YWQgYWJzQm9y
ZGVyUXVhZCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChib3JkZXJC
b3gpKTsKLSAgICAgICAgRmxvYXRRdWFkIGFic01hcmdpblF1YWQgPSByZW5kZXJlci0+bG9jYWxU
b0Fic29sdXRlUXVhZChGbG9hdFJlY3QobWFyZ2luQm94KSk7Ci0KLSAgICAgICAgY29udGVudHNR
dWFkVG9QYWdlKG1haW5WaWV3LCBjb250YWluaW5nVmlldywgYWJzQ29udGVudFF1YWQpOwotICAg
ICAgICBjb250ZW50c1F1YWRUb1BhZ2UobWFpblZpZXcsIGNvbnRhaW5pbmdWaWV3LCBhYnNQYWRk
aW5nUXVhZCk7Ci0gICAgICAgIGNvbnRlbnRzUXVhZFRvUGFnZShtYWluVmlldywgY29udGFpbmlu
Z1ZpZXcsIGFic0JvcmRlclF1YWQpOwotICAgICAgICBjb250ZW50c1F1YWRUb1BhZ2UobWFpblZp
ZXcsIGNvbnRhaW5pbmdWaWV3LCBhYnNNYXJnaW5RdWFkKTsKLQotICAgICAgICB0aXRsZUFuY2hv
ckJveCA9IGFic01hcmdpblF1YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKLQotICAgICAgICBo
aWdobGlnaHQtPnR5cGUgPSBIaWdobGlnaHRUeXBlTm9kZTsKLSAgICAgICAgaGlnaGxpZ2h0LT5x
dWFkcy5hcHBlbmQoYWJzTWFyZ2luUXVhZCk7Ci0gICAgICAgIGhpZ2hsaWdodC0+cXVhZHMuYXBw
ZW5kKGFic0JvcmRlclF1YWQpOwotICAgICAgICBoaWdobGlnaHQtPnF1YWRzLmFwcGVuZChhYnNQ
YWRkaW5nUXVhZCk7Ci0gICAgICAgIGhpZ2hsaWdodC0+cXVhZHMuYXBwZW5kKGFic0NvbnRlbnRR
dWFkKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgICAgIGRyYXdIaWdobGlnaHRG
b3JCb3goKmNvbnRleHQsIGFic0NvbnRlbnRRdWFkLCBhYnNQYWRkaW5nUXVhZCwgYWJzQm9yZGVy
UXVhZCwgYWJzTWFyZ2luUXVhZCwgaGlnaGxpZ2h0RGF0YSk7Ci0gICAgfQotCi0gICAgLy8gRHJh
dyBub2RlIHRpdGxlIGlmIG5lY2Vzc2FyeS4KLQotICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9k
ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoY29udGV4dCAmJiBoaWdobGlnaHREYXRh
LT5zaG93SW5mbykKLSAgICAgICAgZHJhd0VsZW1lbnRUaXRsZSgqY29udGV4dCwgbm9kZSwgcmVu
ZGVyZXIsIHBpeGVsU25hcHBlZEludFJlY3QoYm91bmRpbmdCb3gpLCBwaXhlbFNuYXBwZWRJbnRS
ZWN0KHRpdGxlQW5jaG9yQm94KSwgdmlzaWJsZVJlY3QsIGNvbnRhaW5pbmdGcmFtZS0+c2V0dGlu
Z3MoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdldE9yRHJhd1JlY3RIaWdobGlnaHQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBEb2N1bWVudCogZG9jdW1lbnQsIEhpZ2hsaWdodERhdGEqIGhpZ2hs
aWdodERhdGEsIEhpZ2hsaWdodCAqaGlnaGxpZ2h0KQotewotICAgIGlmICghZG9jdW1lbnQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEZsb2F0UmVjdCBoaWdobGlnaHRSZWN0KCooaGlnaGxpZ2h0
RGF0YS0+cmVjdCkpOwotCi0gICAgaGlnaGxpZ2h0LT50eXBlID0gSGlnaGxpZ2h0VHlwZVJlY3Rz
OwotICAgIGhpZ2hsaWdodC0+cXVhZHMuYXBwZW5kKGhpZ2hsaWdodFJlY3QpOwotCi0gICAgaWYg
KGNvbnRleHQpIHsKLSAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gZG9jdW1lbnQtPmZyYW1lKCkt
PnZpZXcoKTsKLSAgICAgICAgaWYgKCF2aWV3LT5kZWxlZ2F0ZXNTY3JvbGxpbmcoKSkgewotICAg
ICAgICAgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0
KCk7Ci0gICAgICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoLXZpc2libGVSZWN0LngoKSwgLXZp
c2libGVSZWN0LnkoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBkcmF3T3V0bGluZWRRdWFkKCpj
b250ZXh0LCBoaWdobGlnaHRSZWN0LCBoaWdobGlnaHREYXRhLT5jb250ZW50LCBoaWdobGlnaHRE
YXRhLT5jb250ZW50T3V0bGluZSk7Ci0gICAgfQotfQotCi19IC8vIGFub255bW91cyBuYW1lc3Bh
Y2UKLQotbmFtZXNwYWNlIERPTU5vZGVIaWdobGlnaHRlciB7Ci0KLXZvaWQgZHJhd0hpZ2hsaWdo
dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIERvY3VtZW50KiBkb2N1bWVudCwgSGlnaGxpZ2h0
RGF0YSogaGlnaGxpZ2h0RGF0YSkKLXsKLSAgICBpZiAoIWhpZ2hsaWdodERhdGEpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEhpZ2hsaWdodCBoaWdobGlnaHQ7Ci0gICAgaWYgKGhpZ2hsaWdodERh
dGEtPm5vZGUpCi0gICAgICAgIGdldE9yRHJhd05vZGVIaWdobGlnaHQoJmNvbnRleHQsIGhpZ2hs
aWdodERhdGEsICZoaWdobGlnaHQpOwotICAgIGVsc2UgaWYgKGhpZ2hsaWdodERhdGEtPnJlY3Qp
Ci0gICAgICAgIGdldE9yRHJhd1JlY3RIaWdobGlnaHQoJmNvbnRleHQsIGRvY3VtZW50LCBoaWdo
bGlnaHREYXRhLCAmaGlnaGxpZ2h0KTsKLX0KLQotdm9pZCBnZXRIaWdobGlnaHQoRG9jdW1lbnQq
IGRvY3VtZW50LCBIaWdobGlnaHREYXRhKiBoaWdobGlnaHREYXRhLCBIaWdobGlnaHQqIGhpZ2hs
aWdodCkKLXsKLSAgICBpZiAoIWhpZ2hsaWdodERhdGEpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGhpZ2hsaWdodC0+Y29udGVudENvbG9yID0gaGlnaGxpZ2h0RGF0YS0+Y29udGVudDsKLSAgICBo
aWdobGlnaHQtPnBhZGRpbmdDb2xvciA9IGhpZ2hsaWdodERhdGEtPnBhZGRpbmc7Ci0gICAgaGln
aGxpZ2h0LT5ib3JkZXJDb2xvciA9IGhpZ2hsaWdodERhdGEtPmJvcmRlcjsKLSAgICBoaWdobGln
aHQtPm1hcmdpbkNvbG9yID0gaGlnaGxpZ2h0RGF0YS0+bWFyZ2luOwotICAgIGhpZ2hsaWdodC0+
dHlwZSA9IEhpZ2hsaWdodFR5cGVSZWN0czsKLQotICAgIGlmIChoaWdobGlnaHREYXRhLT5ub2Rl
KQotICAgICAgICBnZXRPckRyYXdOb2RlSGlnaGxpZ2h0KDAsIGhpZ2hsaWdodERhdGEsIGhpZ2hs
aWdodCk7Ci0gICAgZWxzZSBpZiAoaGlnaGxpZ2h0RGF0YS0+cmVjdCkKLSAgICAgICAgZ2V0T3JE
cmF3UmVjdEhpZ2hsaWdodCgwLCBkb2N1bWVudCwgaGlnaGxpZ2h0RGF0YSwgaGlnaGxpZ2h0KTsK
LX0KLQotdm9pZCBkcmF3T3V0bGluZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExh
eW91dFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBGbG9hdFJlY3Qgb3V0
bGluZVJlY3QgPSByZWN0OwotICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgb3V0bGluZVJl
Y3QsIENvbG9yKCksIGNvbG9yKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgRE9NTm9kZUhpZ2hsaWdo
dGVyCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdo
dGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3YjZmMDBmNGZmZTAyNTkxMzU1MjU0ZGZlMTkz
ZDAzMDYyY2UzZDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5oCisrKyAvZGV2
L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRE9NTm9kZUhpZ2hsaWdodGVyX2gKLSNk
ZWZpbmUgRE9NTm9kZUhpZ2hsaWdodGVyX2gKLQotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVk
ZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKLQotI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENvbG9yOwotY2xhc3MgRG9jdW1l
bnQ7Ci1jbGFzcyBGcmFtZVZpZXc7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBOb2Rl
OwotCi1zdHJ1Y3QgSGlnaGxpZ2h0RGF0YSB7Ci0gICAgQ29sb3IgY29udGVudDsKLSAgICBDb2xv
ciBjb250ZW50T3V0bGluZTsKLSAgICBDb2xvciBwYWRkaW5nOwotICAgIENvbG9yIGJvcmRlcjsK
LSAgICBDb2xvciBtYXJnaW47Ci0gICAgYm9vbCBzaG93SW5mbzsKLQotICAgIC8vIEVpdGhlciBv
ZiB0aGVzZSBtdXN0IGJlIDAuCi0gICAgUmVmUHRyPE5vZGU+IG5vZGU7Ci0gICAgT3duUHRyPElu
dFJlY3Q+IHJlY3Q7Ci19OwotCi1lbnVtIEhpZ2hsaWdodFR5cGUgewotICAgIEhpZ2hsaWdodFR5
cGVOb2RlLAotICAgIEhpZ2hsaWdodFR5cGVSZWN0cywKLX07Ci0KLXN0cnVjdCBIaWdobGlnaHQg
ewotICAgIENvbG9yIGNvbnRlbnRDb2xvcjsKLSAgICBDb2xvciBwYWRkaW5nQ29sb3I7Ci0gICAg
Q29sb3IgYm9yZGVyQ29sb3I7Ci0gICAgQ29sb3IgbWFyZ2luQ29sb3I7Ci0KLSAgICAvLyBXaGVu
IHRoZSB0eXBlIGlzIE5vZGUsIHRoZXJlIGFyZSA0IHF1YWRzIChtYXJnaW4sIGJvcmRlciwgcGFk
ZGluZywgY29udGVudCkuCi0gICAgLy8gV2hlbiB0aGUgdHlwZSBpcyBSZWN0cywgdGhpcyBpcyBq
dXN0IGEgbGlzdCBvZiBxdWFkcy4KLSAgICBIaWdobGlnaHRUeXBlIHR5cGU7Ci0gICAgVmVjdG9y
PEZsb2F0UXVhZD4gcXVhZHM7Ci19OwotCi1uYW1lc3BhY2UgRE9NTm9kZUhpZ2hsaWdodGVyIHsK
LQotdm9pZCBkcmF3SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYsIERvY3VtZW50KiwgSGlnaGxp
Z2h0RGF0YSopOwotdm9pZCBnZXRIaWdobGlnaHQoRG9jdW1lbnQqLCBIaWdobGlnaHREYXRhKiwg
SGlnaGxpZ2h0Kik7Ci12b2lkIGRyYXdPdXRsaW5lKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExh
eW91dFJlY3QmLCBjb25zdCBDb2xvciYpOwotCi19IC8vIG5hbWVzcGFjZSBET01Ob2RlSGlnaGxp
Z2h0ZXIKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0KLSNlbmRpZiAvLyBET01Ob2RlSGln
aGxpZ2h0ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckFsbEluT25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBbGxJbk9u
ZS5jcHAKaW5kZXggMjZiYmEyYWVjOWY5ZDliMGVkZDZhODk1ZTg4MjdjNGVlZjA4ZDc0Mi4uMjk2
OGFlOTM0OWI1NDA3OTY1NTI5N2MxOTZlYjA1MjUxNjJkYjM4NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFsbEluT25lLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWxsSW5PbmUuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAj
aW5jbHVkZSAiQ29uc29sZU1lc3NhZ2UuY3BwIgogI2luY2x1ZGUgIkNvbnRlbnRTZWFyY2hVdGls
cy5jcHAiCiAjaW5jbHVkZSAiRE9NRWRpdG9yLmNwcCIKLSNpbmNsdWRlICJET01Ob2RlSGlnaGxp
Z2h0ZXIuY3BwIgogI2luY2x1ZGUgIkRPTVBhdGNoU3VwcG9ydC5jcHAiCiAjaW5jbHVkZSAiSWRl
bnRpZmllcnNGYWN0b3J5LmNwcCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdC5jcHAiCkBAIC01
Nyw2ICs1Niw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwIgogI2lu
Y2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
TWVtb3J5QWdlbnQuY3BwIgorI2luY2x1ZGUgIkluc3BlY3Rvck92ZXJsYXkuY3BwIgogI2luY2x1
ZGUgIkluc3BlY3RvclBhZ2VBZ2VudC5jcHAiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvZmlsZXJB
Z2VudC5jcHAiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggMDk1
ZTFjYzUxYjM1NGE4ZjhlMDgxNDZhNzllZjcwOGRiN2NkNDljZS4uNTM5NzM3NjJiNTExZGVhYzkz
ZThiMGZmOTA2MTZhNjk0MTI3YjA5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtNTYsNiArNTYsNyBAQAogI2luY2x1ZGUgIklu
c3BlY3RvckluZGV4ZWREQkFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yTWVtb3J5QWdlbnQuaCIKKyNpbmNsdWRlICJJbnNw
ZWN0b3JPdmVybGF5LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUGFnZUFnZW50LmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNl
QWdlbnQuaCIKQEAgLTc4LDYgKzc5LDcgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9y
Q29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckMKICAgICA6
IG1faW5zdHJ1bWVudGluZ0FnZW50cyhhZG9wdFB0cihuZXcgSW5zdHJ1bWVudGluZ0FnZW50cygp
KSkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKEluamVjdGVkU2NyaXB0TWFuYWdlcjo6
Y3JlYXRlRm9yUGFnZSgpKQogICAgICwgbV9zdGF0ZShhZG9wdFB0cihuZXcgSW5zcGVjdG9yU3Rh
dGUoaW5zcGVjdG9yQ2xpZW50KSkpCisgICAgLCBtX292ZXJsYXkoSW5zcGVjdG9yT3ZlcmxheTo6
Y3JlYXRlKHBhZ2UsIGluc3BlY3RvckNsaWVudCkpCiAgICAgLCBtX3BhZ2UocGFnZSkKICAgICAs
IG1faW5zcGVjdG9yQ2xpZW50KGluc3BlY3RvckNsaWVudCkKIHsKQEAgLTg1LDEyICs4NywxMiBA
QCBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIElu
c3BlY3RvckNsaWVudCogaW5zcGVjdG9yQwogICAgIG1faW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0
b3JBZ2VudFB0ci5nZXQoKTsKICAgICBtX2FnZW50cy5hcHBlbmQoaW5zcGVjdG9yQWdlbnRQdHIu
cmVsZWFzZSgpKTsKIAotICAgIE93blB0cjxJbnNwZWN0b3JQYWdlQWdlbnQ+IHBhZ2VBZ2VudFB0
cihJbnNwZWN0b3JQYWdlQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCks
IHBhZ2UsIG1faW5zcGVjdG9yQWdlbnQsIG1fc3RhdGUuZ2V0KCksIG1faW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmdldCgpLCBpbnNwZWN0b3JDbGllbnQpKTsKKyAgICBPd25QdHI8SW5zcGVjdG9yUGFn
ZUFnZW50PiBwYWdlQWdlbnRQdHIoSW5zcGVjdG9yUGFnZUFnZW50OjpjcmVhdGUobV9pbnN0cnVt
ZW50aW5nQWdlbnRzLmdldCgpLCBwYWdlLCBtX2luc3BlY3RvckFnZW50LCBtX3N0YXRlLmdldCgp
LCBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5nZXQoKSwgaW5zcGVjdG9yQ2xpZW50LCBtX292ZXJs
YXkuZ2V0KCkpKTsKICAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCA9IHBhZ2VBZ2Vu
dFB0ci5nZXQoKTsKICAgICBtX3BhZ2VBZ2VudCA9IHBhZ2VBZ2VudFB0ci5nZXQoKTsKICAgICBt
X2FnZW50cy5hcHBlbmQocGFnZUFnZW50UHRyLnJlbGVhc2UoKSk7CiAKLSAgICBPd25QdHI8SW5z
cGVjdG9yRE9NQWdlbnQ+IGRvbUFnZW50UHRyKEluc3BlY3RvckRPTUFnZW50OjpjcmVhdGUobV9p
bnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBwYWdlQWdlbnQsIGluc3BlY3RvckNsaWVudCwgbV9z
dGF0ZS5nZXQoKSwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuZ2V0KCkpKTsKKyAgICBPd25QdHI8
SW5zcGVjdG9yRE9NQWdlbnQ+IGRvbUFnZW50UHRyKEluc3BlY3RvckRPTUFnZW50OjpjcmVhdGUo
bV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBwYWdlQWdlbnQsIG1fc3RhdGUuZ2V0KCksIG1f
aW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpLCBtX292ZXJsYXkuZ2V0KCkpKTsKICAgICBtX2Rv
bUFnZW50ID0gZG9tQWdlbnRQdHIuZ2V0KCk7CiAgICAgbV9hZ2VudHMuYXBwZW5kKGRvbUFnZW50
UHRyLnJlbGVhc2UoKSk7CiAKQEAgLTEzMCw3ICsxMzIsNyBAQCBJbnNwZWN0b3JDb250cm9sbGVy
OjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogaW5zcGVj
dG9yQwogICAgIG1fYWdlbnRzLmFwcGVuZChjb25zb2xlQWdlbnRQdHIucmVsZWFzZSgpKTsKIAog
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIE93blB0cjxJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50PiBkZWJ1Z2dlckFnZW50UHRyKFBhZ2VEZWJ1Z2dlckFnZW50OjpjcmVhdGUobV9p
bnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBtX3N0YXRlLmdldCgpLCBwYWdlLCBtX2luamVjdGVk
U2NyaXB0TWFuYWdlci5nZXQoKSkpOworICAgIE93blB0cjxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
PiBkZWJ1Z2dlckFnZW50UHRyKFBhZ2VEZWJ1Z2dlckFnZW50OjpjcmVhdGUobV9pbnN0cnVtZW50
aW5nQWdlbnRzLmdldCgpLCBtX3N0YXRlLmdldCgpLCBwYWdlLCBtX2luamVjdGVkU2NyaXB0TWFu
YWdlci5nZXQoKSwgbV9vdmVybGF5LmdldCgpKSk7CiAgICAgbV9kZWJ1Z2dlckFnZW50ID0gZGVi
dWdnZXJBZ2VudFB0ci5nZXQoKTsKICAgICBtX2FnZW50cy5hcHBlbmQoZGVidWdnZXJBZ2VudFB0
ci5yZWxlYXNlKCkpOwogCkBAIC0yOTQsNyArMjk2LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcm
IHMKIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkcmF3SGlnaGxpZ2h0KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKIHsKLSAgICBtX2RvbUFnZW50LT5kcmF3SGlnaGxpZ2h0KGNv
bnRleHQpOworICAgIG1fcGFnZUFnZW50LT5kcmF3SW5zcGVjdG9yT3ZlcmxheShjb250ZXh0KTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRIaWdobGlnaHQoSGlnaGxpZ2h0KiBo
aWdobGlnaHQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuaAppbmRleCA0NzNiYjhkZTI2ZmVhMGFjNzA0NmY2NjQ5NzlhZGZjZDRlY2E1YmVk
Li4wYjU1ODJjZDkzZmQ5OWJkZThhMTExMDMxMmViMzkxOWMyM2ZmNTEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTUxLDYgKzUxLDcg
QEAgY2xhc3MgSW5zcGVjdG9yRE9NQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVu
dDsKK2NsYXNzIEluc3BlY3Rvck92ZXJsYXk7CiBjbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7CiBj
bGFzcyBJbnNwZWN0b3JQcm9maWxlckFnZW50OwogY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dDsKQEAgLTExOSw2ICsxMjAsNyBAQCBwcml2YXRlOgogICAgIE93blB0cjxJbnN0cnVtZW50aW5n
QWdlbnRzPiBtX2luc3RydW1lbnRpbmdBZ2VudHM7CiAgICAgT3duUHRyPEluamVjdGVkU2NyaXB0
TWFuYWdlcj4gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CiAgICAgT3duUHRyPEluc3BlY3RvclN0
YXRlPiBtX3N0YXRlOworICAgIE93blB0cjxJbnNwZWN0b3JPdmVybGF5PiBtX292ZXJsYXk7CiAK
ICAgICBJbnNwZWN0b3JBZ2VudCogbV9pbnNwZWN0b3JBZ2VudDsKICAgICBJbnNwZWN0b3JET01B
Z2VudCogbV9kb21BZ2VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwCmluZGV4IDkwNzk1ODllNTFjZThmMDhlNTBlMjA2ZTQ5YTEzMjZiZTk1YzMw
MTIuLjFiZjdlMjViYTIyMjg5NzU5N2EyMzYzOTg3OGViYTA5YzU4MWIxYzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtNDcsNyArNDcs
NiBAQAogI2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1
ZGUgIkRPTUVkaXRvci5oIgotI2luY2x1ZGUgIkRPTU5vZGVIaWdobGlnaHRlci5oIgogI2luY2x1
ZGUgIkRPTVBhdGNoU3VwcG9ydC5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCkBAIC02Niw5ICs2NSw5IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5o
IgogI2luY2x1ZGUgIklkZW50aWZpZXJzRmFjdG9yeS5oIgogI2luY2x1ZGUgIkluamVjdGVkU2Ny
aXB0TWFuYWdlci5oIgotI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgogI2luY2x1ZGUgIklu
c3BlY3RvckZyb250ZW5kLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySGlzdG9yeS5oIgorI2luY2x1
ZGUgIkluc3BlY3Rvck92ZXJsYXkuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JQYWdlQWdlbnQuaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JTdGF0ZS5oIgogI2luY2x1ZGUgIkluc3RydW1lbnRpbmdBZ2Vu
dHMuaCIKQEAgLTE5NCwxMSArMTkzLDExIEBAIFN0cmluZyBJbnNwZWN0b3JET01BZ2VudDo6dG9F
cnJvclN0cmluZyhjb25zdCBFeGNlcHRpb25Db2RlJiBlYykKICAgICByZXR1cm4gIiI7CiB9CiAK
LUluc3BlY3RvckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2VudChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgSW5z
cGVjdG9yQ2xpZW50KiBjbGllbnQsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCitJbnNwZWN0b3JET01B
Z2VudDo6SW5zcGVjdG9yRE9NQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGlu
Z0FnZW50cywgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIEluc3BlY3RvclN0YXRlKiBp
bnNwZWN0b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFn
ZXIsIEluc3BlY3Rvck92ZXJsYXkqIG92ZXJsYXkpCiAgICAgOiBJbnNwZWN0b3JCYXNlQWdlbnQ8
SW5zcGVjdG9yRE9NQWdlbnQ+KCJET00iLCBpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnNwZWN0b3JT
dGF0ZSkKICAgICAsIG1fcGFnZUFnZW50KHBhZ2VBZ2VudCkKLSAgICAsIG1fY2xpZW50KGNsaWVu
dCkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKGluamVjdGVkU2NyaXB0TWFuYWdlcikK
KyAgICAsIG1fb3ZlcmxheShvdmVybGF5KQogICAgICwgbV9mcm9udGVuZCgwKQogICAgICwgbV9k
b21MaXN0ZW5lcigwKQogICAgICwgbV9sYXN0Tm9kZUlkKDEpCkBAIC0xMDM2LDcgKzEwMzUsNyBA
QCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHQoKQogewogICAgIC8vIFRoaXMgbWV0
aG9kIHJlcXVpcmVzIG1faGlnaGxpZ2h0RGF0YSB0byBoYXZlIGJlZW4gZmlsbGVkIGluIGJ5IGl0
cyBjbGllbnQuCiAgICAgQVNTRVJUKG1faGlnaGxpZ2h0RGF0YSk7Ci0gICAgbV9jbGllbnQtPmhp
Z2hsaWdodCgpOworICAgIG1fb3ZlcmxheS0+c2V0SGlnaGxpZ2h0KG1fZG9jdW1lbnQuZ2V0KCks
IG1faGlnaGxpZ2h0RGF0YS5nZXQoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Omhp
Z2hsaWdodFJlY3QoRXJyb3JTdHJpbmcqLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhl
aWdodCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGNvbG9yLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0Piogb3V0bGluZUNvbG9yKQpAQCAtMTA0NSw3ICsxMDQ0LDcgQEAgdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0UmVjdChFcnJvclN0cmluZyosIGludCB4LCBp
bnQgeSwgaW50IHdpZHRoLCBpbnQKICAgICBtX2hpZ2hsaWdodERhdGEtPnJlY3QgPSBhZG9wdFB0
cihuZXcgSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CiAgICAgbV9oaWdobGlnaHREYXRh
LT5jb250ZW50ID0gcGFyc2VDb2xvcihjb2xvcik7CiAgICAgbV9oaWdobGlnaHREYXRhLT5jb250
ZW50T3V0bGluZSA9IHBhcnNlQ29sb3Iob3V0bGluZUNvbG9yKTsKLSAgICBtX2NsaWVudC0+aGln
aGxpZ2h0KCk7CisgICAgaGlnaGxpZ2h0KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OmhpZ2hsaWdodE5vZGUoCkBAIC0xMDg0LDcgKzEwODMsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpoaWRlSGlnaGxpZ2h0KEVycm9yU3RyaW5nKikKICAgICAgICAgbV9oaWdobGlnaHREYXRh
LT5ub2RlLmNsZWFyKCk7CiAgICAgICAgIG1faGlnaGxpZ2h0RGF0YS0+cmVjdC5jbGVhcigpOwog
ICAgIH0KLSAgICBtX2NsaWVudC0+aGlkZUhpZ2hsaWdodCgpOworICAgIGhpZ2hsaWdodCgpOwog
fQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojptb3ZlVG8oRXJyb3JTdHJpbmcqIGVycm9yU3Ry
aW5nLCBpbnQgbm9kZUlkLCBpbnQgdGFyZ2V0RWxlbWVudElkLCBjb25zdCBpbnQqIGNvbnN0IGFu
Y2hvck5vZGVJZCwgaW50KiBuZXdOb2RlSWQpCkBAIC0xNTk5LDIwICsxNTk4LDEyIEBAIFBhc3NS
ZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5zcGVjdG9yRE9NQWdl
bnQ6OnJlc29sdmVOb2RlKE5vCiAgICAgcmV0dXJuIGluamVjdGVkU2NyaXB0LndyYXBOb2RlKG5v
ZGUsIG9iamVjdEdyb3VwKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZHJhd0hpZ2hs
aWdodChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hpZ2hs
aWdodERhdGEpCi0gICAgICAgIHJldHVybjsKLQotICAgIERPTU5vZGVIaWdobGlnaHRlcjo6ZHJh
d0hpZ2hsaWdodChjb250ZXh0LCBtX2hpZ2hsaWdodERhdGEtPm5vZGUgPyBtX2hpZ2hsaWdodERh
dGEtPm5vZGUtPmRvY3VtZW50KCkgOiBtX2RvY3VtZW50LmdldCgpLCBtX2hpZ2hsaWdodERhdGEu
Z2V0KCkpOwotfQotCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRIaWdobGlnaHQoSGlnaGxp
Z2h0KiBoaWdobGlnaHQpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2hpZ2hsaWdodERhdGEpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIERPTU5vZGVIaWdobGlnaHRlcjo6Z2V0SGlnaGxpZ2h0KG1faGln
aGxpZ2h0RGF0YS0+bm9kZSA/IG1faGlnaGxpZ2h0RGF0YS0+bm9kZS0+ZG9jdW1lbnQoKSA6IG1f
ZG9jdW1lbnQuZ2V0KCksIG1faGlnaGxpZ2h0RGF0YS5nZXQoKSwgaGlnaGxpZ2h0KTsKKyAgICBt
X292ZXJsYXktPmdldEhpZ2hsaWdodChtX2hpZ2hsaWdodERhdGEtPm5vZGUgPyBtX2hpZ2hsaWdo
dERhdGEtPm5vZGUtPmRvY3VtZW50KCkgOiBtX2RvY3VtZW50LmdldCgpLCBtX2hpZ2hsaWdodERh
dGEuZ2V0KCksIGhpZ2hsaWdodCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggYjA1YWI1NzBk
OWZkMWIwNDg3MDZhMzkzYTI0NjY1OTdiNDk2MzliZi4uM2IzZjU5YmU3Njg4NjliM2E4MGMxNjdi
ZTliZDI2MTIwNTFhNzI3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTUFnZW50LmgKQEAgLTU2LDkgKzU2LDkgQEAgY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFbGVt
ZW50OwogY2xhc3MgRXZlbnQ7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBJbnNwZWN0
b3JDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKIGNsYXNzIEluc3BlY3Rvckhpc3Rv
cnk7CitjbGFzcyBJbnNwZWN0b3JPdmVybGF5OwogY2xhc3MgSW5zcGVjdG9yUGFnZUFnZW50Owog
Y2xhc3MgSW50UmVjdDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CkBAIC0xMDMsOSArMTAzLDkgQEAg
cHVibGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkTW9kaWZ5RE9NQXR0cihFbGVtZW50Kikg
PSAwOwogICAgIH07CiAKLSAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JET01BZ2VudD4g
Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3Rv
clBhZ2VBZ2VudCogcGFnZUFnZW50LCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCwgSW5zcGVjdG9y
U3RhdGUqIGluc3BlY3RvclN0YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2Ny
aXB0TWFuYWdlcikKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JET01BZ2VudD4gY3Jl
YXRlKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclBh
Z2VBZ2VudCogcGFnZUFnZW50LCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIEluamVj
dGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JPdmVybGF5
KiBvdmVybGF5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JE
T01BZ2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBwYWdlQWdlbnQsIGNsaWVudCwgaW5zcGVjdG9y
U3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdlcikpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IEluc3BlY3RvckRPTUFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIHBhZ2VBZ2VudCwgaW5z
cGVjdG9yU3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdlciwgb3ZlcmxheSkpOwogICAgIH0KIAog
ICAgIHN0YXRpYyBTdHJpbmcgdG9FcnJvclN0cmluZyhjb25zdCBFeGNlcHRpb25Db2RlJik7CkBA
IC0xODUsNyArMTg1LDYgQEAgcHVibGljOgogICAgIHZvaWQgaW5zcGVjdChOb2RlKik7CiAgICAg
dm9pZCBmb2N1c05vZGUoKTsKIAotICAgIHZvaWQgZHJhd0hpZ2hsaWdodChHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKICAgICB2b2lkIGdldEhpZ2hsaWdodChIaWdobGlnaHQqKSBjb25zdDsKIAog
ICAgIEluc3BlY3Rvckhpc3RvcnkqIGhpc3RvcnkoKSB7IHJldHVybiBtX2hpc3RvcnkuZ2V0KCk7
IH0KQEAgLTIwNSw3ICsyMDQsNyBAQCBwdWJsaWM6CiAgICAgSW5zcGVjdG9yUGFnZUFnZW50KiBw
YWdlQWdlbnQoKSB7IHJldHVybiBtX3BhZ2VBZ2VudDsgfQogCiBwcml2YXRlOgotICAgIEluc3Bl
Y3RvckRPTUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JQYWdlQWdlbnQqLCBJ
bnNwZWN0b3JDbGllbnQqLCBJbnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciop
OworICAgIEluc3BlY3RvckRPTUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JQ
YWdlQWdlbnQqLCBJbnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciosIEluc3Bl
Y3Rvck92ZXJsYXkqKTsKIAogICAgIHZvaWQgc2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJs
ZWQsIEluc3BlY3Rvck9iamVjdCogaGlnaGxpZ2h0Q29uZmlnKTsKICAgICBib29sIHNldEhpZ2hs
aWdodERhdGFGcm9tQ29uZmlnKEluc3BlY3Rvck9iamVjdCogaGlnaGxpZ2h0Q29uZmlnKTsKQEAg
LTI0MSw4ICsyNDAsOCBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBJbnNwZWN0b3JQYWdlQWdl
bnQqIG1fcGFnZUFnZW50OwotICAgIEluc3BlY3RvckNsaWVudCogbV9jbGllbnQ7CiAgICAgSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKKyAgICBJbnNwZWN0
b3JPdmVybGF5KiBtX292ZXJsYXk7CiAgICAgSW5zcGVjdG9yRnJvbnRlbmQ6OkRPTSogbV9mcm9u
dGVuZDsKICAgICBET01MaXN0ZW5lciogbV9kb21MaXN0ZW5lcjsKICAgICBOb2RlVG9JZE1hcCBt
X2RvY3VtZW50Tm9kZVRvSWRNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggMTE4MDdhM2Y5ZTg3OTg0MGRlYTYwM2Iz
NjYzZTIwOWFmY2VkNzJjOC4uNzU1N2U3YjgyM2Q5YzRlZTQxODNiODYzYzlhZjRhOTlkMDU5OGFm
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50LmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0Lmgi
CiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
RnJvbnRlbmQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JPdmVybGF5LmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yUGFnZUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yU3RhdGUuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JWYWx1ZXMuaCIKQEAgLTYwLDEwICs2MSwxMSBAQCBzdGF0aWMgY29uc3QgY2hh
ciBwYXVzZU9uRXhjZXB0aW9uc1N0YXRlW10gPSAicGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSI7CiAK
IGNvbnN0IGNoYXIqIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJhY2t0cmFjZU9iamVjdEdyb3Vw
ID0gImJhY2t0cmFjZS1vYmplY3QtZ3JvdXAiOwogCi1JbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdB
Z2VudHMsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCitJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2Vu
dHMsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
KiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIEluc3BlY3Rvck92ZXJsYXkqIG92ZXJsYXkpCiAgICAg
OiBJbnNwZWN0b3JCYXNlQWdlbnQ8SW5zcGVjdG9yRGVidWdnZXJBZ2VudD4oIkRlYnVnZ2VyIiwg
aW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUpCiAgICAgLCBtX2luamVjdGVkU2Ny
aXB0TWFuYWdlcihpbmplY3RlZFNjcmlwdE1hbmFnZXIpCiAgICAgLCBtX2Zyb250ZW5kKDApCisg
ICAgLCBtX292ZXJsYXkob3ZlcmxheSkKICAgICAsIG1fcGF1c2VkU2NyaXB0U3RhdGUoMCkKICAg
ICAsIG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkKGZhbHNlKQogICAgICwgbV9saXN0ZW5lcigw
KQpAQCAtMTAzLDYgKzEwNSw4IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJs
ZSgpCiAKICAgICBpZiAobV9saXN0ZW5lcikKICAgICAgICAgbV9saXN0ZW5lci0+ZGVidWdnZXJX
YXNEaXNhYmxlZCgpOworICAgIGlmIChtX292ZXJsYXkpCisgICAgICAgIG1fb3ZlcmxheS0+c2V0
U2hvdWxkU2hvd1BhdXNlV2FybmluZyhmYWxzZSk7CiB9CiAKIGJvb2wgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6ZW5hYmxlZCgpCkBAIC02NTcsNiArNjYxLDggQEAgdm9pZCBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpkaWRQYXVzZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IFNjcmlw
dFZhbHUKICAgICAgICAgfQogICAgIH0KIAorICAgIGlmIChtX292ZXJsYXkpCisgICAgICAgIG1f
b3ZlcmxheS0+c2V0U2hvdWxkU2hvd1BhdXNlV2FybmluZyh0cnVlKTsKICAgICBtX2Zyb250ZW5k
LT5wYXVzZWQoY3VycmVudENhbGxGcmFtZXMoKSwgbV9icmVha1JlYXNvbiwgbV9icmVha0F1eERh
dGEpOwogICAgIG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkID0gZmFsc2U7CiAKQEAgLTY3MSw2
ICs2NzcsOCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZENvbnRpbnVlKCkKICAg
ICBtX3BhdXNlZFNjcmlwdFN0YXRlID0gMDsKICAgICBtX2N1cnJlbnRDYWxsU3RhY2sgPSBTY3Jp
cHRWYWx1ZSgpOwogICAgIGNsZWFyQnJlYWtEZXRhaWxzKCk7CisgICAgaWYgKG1fb3ZlcmxheSkK
KyAgICAgICAgbV9vdmVybGF5LT5zZXRTaG91bGRTaG93UGF1c2VXYXJuaW5nKGZhbHNlKTsKICAg
ICBtX2Zyb250ZW5kLT5yZXN1bWVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCmluZGV4IDA5Yzk3ZDE5NTNlNGI5YjAwMTYx
Zjg3NGY0NTMxZmJkZWM3ZGI2Y2QuLmU3OGU4OGY5ZDYyYmE4ZjRiZWYzNTg2ZGUzZGZiYjQ1ZjA5
N2Q3ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1
Z2dlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVn
Z2VyQWdlbnQuaApAQCAtNTAsNiArNTAsNyBAQCBjbGFzcyBJbmplY3RlZFNjcmlwdE1hbmFnZXI7
CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKIGNsYXNzIEluc3BlY3RvckFycmF5OwogY2xhc3Mg
SW5zcGVjdG9yT2JqZWN0OworY2xhc3MgSW5zcGVjdG9yT3ZlcmxheTsKIGNsYXNzIEluc3BlY3Rv
clN0YXRlOwogY2xhc3MgSW5zcGVjdG9yVmFsdWU7CiBjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRz
OwpAQCAtMTI0LDcgKzEyNSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFNjcmlwdERlYnVnU2Vy
dmVyJiBzY3JpcHREZWJ1Z1NlcnZlcigpID0gMDsKIAogcHJvdGVjdGVkOgotICAgIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclN0YXRlKiwgSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyKik7CisgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudChJbnN0cnVt
ZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yU3RhdGUqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJ
bnNwZWN0b3JPdmVybGF5Kik7CiAKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRMaXN0ZW5pbmdTY3Jp
cHREZWJ1Z1NlcnZlcigpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcExpc3RlbmluZ1Njcmlw
dERlYnVnU2VydmVyKCkgPSAwOwpAQCAtMTU5LDYgKzE2MCw3IEBAIHByaXZhdGU6CiAKICAgICBJ
bmplY3RlZFNjcmlwdE1hbmFnZXIqIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogICAgIEluc3Bl
Y3RvckZyb250ZW5kOjpEZWJ1Z2dlciogbV9mcm9udGVuZDsKKyAgICBJbnNwZWN0b3JPdmVybGF5
KiBtX292ZXJsYXk7CiAgICAgU2NyaXB0U3RhdGUqIG1fcGF1c2VkU2NyaXB0U3RhdGU7CiAgICAg
U2NyaXB0VmFsdWUgbV9jdXJyZW50Q2FsbFN0YWNrOwogICAgIFNjcmlwdHNNYXAgbV9zY3JpcHRz
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXku
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjdlZmJjMWZmZGFkNTJhMGQ5MTk3NjU1ZDY4ZGU3Y2Q2MTExMDU4YTYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAK
QEAgLTAsMCArMSw2MDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yT3ZlcmxheS5oIgorCisjaW5jbHVkZSAiRWxl
bWVudC5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZvbnRGYW1pbHkuaCIK
KyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKyNpbmNsdWRlICJJ
bnNwZWN0b3JDbGllbnQuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiUGFnZS5oIgor
I2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94TW9kZWxPYmplY3QuaCIKKyNp
bmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNs
dWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJU
ZXh0UnVuLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSB7CisKKyNpZiBPUyhXSU5ET1dTKQorc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGZvbnRIZWlnaHRQeCA9IDEyOworI2VsaWYgT1MoTUFDX09TX1gpIHx8IE9T
KFVOSVgpCitzdGF0aWMgY29uc3QgdW5zaWduZWQgZm9udEhlaWdodFB4ID0gMTE7CisjZW5kaWYK
KworY29uc3Qgc3RhdGljIGludCByZWN0SW5mbGF0ZVB4ID0gNDsKK2NvbnN0IHN0YXRpYyBpbnQg
Ym9yZGVyV2lkdGhQeCA9IDE7Citjb25zdCBzdGF0aWMgaW50IHRvb2x0aXBQYWRkaW5nID0gNDsK
KworY29uc3Qgc3RhdGljIGludCBhcnJvd1RpcE9mZnNldCA9IDIwOworY29uc3Qgc3RhdGljIGZs
b2F0IGFycm93SGVpZ2h0ID0gNzsKK2NvbnN0IHN0YXRpYyBmbG9hdCBhcnJvd0hhbGZXaWR0aCA9
IDc7CisKK1BhdGggcXVhZFRvUGF0aChjb25zdCBGbG9hdFF1YWQmIHF1YWQpCit7CisgICAgUGF0
aCBxdWFkUGF0aDsKKyAgICBxdWFkUGF0aC5tb3ZlVG8ocXVhZC5wMSgpKTsKKyAgICBxdWFkUGF0
aC5hZGRMaW5lVG8ocXVhZC5wMigpKTsKKyAgICBxdWFkUGF0aC5hZGRMaW5lVG8ocXVhZC5wMygp
KTsKKyAgICBxdWFkUGF0aC5hZGRMaW5lVG8ocXVhZC5wNCgpKTsKKyAgICBxdWFkUGF0aC5jbG9z
ZVN1YnBhdGgoKTsKKyAgICByZXR1cm4gcXVhZFBhdGg7Cit9CisKK3ZvaWQgZHJhd091dGxpbmVk
UXVhZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgY29u
c3QgQ29sb3ImIGZpbGxDb2xvciwgY29uc3QgQ29sb3ImIG91dGxpbmVDb2xvcikKK3sKKyAgICBz
dGF0aWMgY29uc3QgaW50IG91dGxpbmVUaGlja25lc3MgPSAyOworCisgICAgUGF0aCBxdWFkUGF0
aCA9IHF1YWRUb1BhdGgocXVhZCk7CisKKyAgICAvLyBDbGlwIG91dCB0aGUgcXVhZCwgdGhlbiBk
cmF3IHdpdGggYSAycHggc3Ryb2tlIHRvIGdldCBhIHBpeGVsCisgICAgLy8gb2Ygb3V0bGluZSAo
YmVjYXVzZSBpbmZsYXRpbmcgYSBxdWFkIGlzIGhhcmQpCisgICAgeworICAgICAgICBjb250ZXh0
LnNhdmUoKTsKKyAgICAgICAgY29udGV4dC5jbGlwT3V0KHF1YWRQYXRoKTsKKworICAgICAgICBj
b250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhvdXRsaW5lVGhpY2tuZXNzKTsKKyAgICAgICAgY29u
dGV4dC5zZXRTdHJva2VDb2xvcihvdXRsaW5lQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwor
ICAgICAgICBjb250ZXh0LnN0cm9rZVBhdGgocXVhZFBhdGgpOworCisgICAgICAgIGNvbnRleHQu
cmVzdG9yZSgpOworICAgIH0KKworICAgIC8vIE5vdyBkbyB0aGUgZmlsbAorICAgIGNvbnRleHQu
c2V0RmlsbENvbG9yKGZpbGxDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4
dC5maWxsUGF0aChxdWFkUGF0aCk7Cit9CisKK3ZvaWQgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlw
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBjb25zdCBG
bG9hdFF1YWQmIGNsaXBRdWFkLCBjb25zdCBDb2xvciYgZmlsbENvbG9yKQoreworICAgIGNvbnRl
eHQuc2F2ZSgpOworICAgIFBhdGggY2xpcFF1YWRQYXRoID0gcXVhZFRvUGF0aChjbGlwUXVhZCk7
CisgICAgY29udGV4dC5jbGlwT3V0KGNsaXBRdWFkUGF0aCk7CisgICAgZHJhd091dGxpbmVkUXVh
ZChjb250ZXh0LCBxdWFkLCBmaWxsQ29sb3IsIENvbG9yOjp0cmFuc3BhcmVudCk7CisgICAgY29u
dGV4dC5yZXN0b3JlKCk7Cit9CisKK3ZvaWQgZHJhd0hpZ2hsaWdodEZvckJveChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYgY29udGVudFF1YWQsIGNvbnN0IEZsb2F0
UXVhZCYgcGFkZGluZ1F1YWQsIGNvbnN0IEZsb2F0UXVhZCYgYm9yZGVyUXVhZCwgY29uc3QgRmxv
YXRRdWFkJiBtYXJnaW5RdWFkLCBIaWdobGlnaHREYXRhKiBoaWdobGlnaHREYXRhKQoreworICAg
IGJvb2wgaGFzTWFyZ2luID0gaGlnaGxpZ2h0RGF0YS0+bWFyZ2luICE9IENvbG9yOjp0cmFuc3Bh
cmVudDsKKyAgICBib29sIGhhc0JvcmRlciA9IGhpZ2hsaWdodERhdGEtPmJvcmRlciAhPSBDb2xv
cjo6dHJhbnNwYXJlbnQ7CisgICAgYm9vbCBoYXNQYWRkaW5nID0gaGlnaGxpZ2h0RGF0YS0+cGFk
ZGluZyAhPSBDb2xvcjo6dHJhbnNwYXJlbnQ7CisgICAgYm9vbCBoYXNDb250ZW50ID0gaGlnaGxp
Z2h0RGF0YS0+Y29udGVudCAhPSBDb2xvcjo6dHJhbnNwYXJlbnQgfHwgaGlnaGxpZ2h0RGF0YS0+
Y29udGVudE91dGxpbmUgIT0gQ29sb3I6OnRyYW5zcGFyZW50OworCisgICAgRmxvYXRRdWFkIGNs
aXBRdWFkOworICAgIENvbG9yIGNsaXBDb2xvcjsKKyAgICBpZiAoaGFzTWFyZ2luICYmICghaGFz
Qm9yZGVyIHx8IG1hcmdpblF1YWQgIT0gYm9yZGVyUXVhZCkpIHsKKyAgICAgICAgZHJhd091dGxp
bmVkUXVhZFdpdGhDbGlwKGNvbnRleHQsIG1hcmdpblF1YWQsIGJvcmRlclF1YWQsIGhpZ2hsaWdo
dERhdGEtPm1hcmdpbik7CisgICAgICAgIGNsaXBRdWFkID0gYm9yZGVyUXVhZDsKKyAgICB9Cisg
ICAgaWYgKGhhc0JvcmRlciAmJiAoIWhhc1BhZGRpbmcgfHwgYm9yZGVyUXVhZCAhPSBwYWRkaW5n
UXVhZCkpIHsKKyAgICAgICAgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKGNvbnRleHQsIGJvcmRl
clF1YWQsIHBhZGRpbmdRdWFkLCBoaWdobGlnaHREYXRhLT5ib3JkZXIpOworICAgICAgICBjbGlw
UXVhZCA9IHBhZGRpbmdRdWFkOworICAgIH0KKyAgICBpZiAoaGFzUGFkZGluZyAmJiAoIWhhc0Nv
bnRlbnQgfHwgcGFkZGluZ1F1YWQgIT0gY29udGVudFF1YWQpKSB7CisgICAgICAgIGRyYXdPdXRs
aW5lZFF1YWRXaXRoQ2xpcChjb250ZXh0LCBwYWRkaW5nUXVhZCwgY29udGVudFF1YWQsIGhpZ2hs
aWdodERhdGEtPnBhZGRpbmcpOworICAgICAgICBjbGlwUXVhZCA9IGNvbnRlbnRRdWFkOworICAg
IH0KKyAgICBpZiAoaGFzQ29udGVudCkKKyAgICAgICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0
LCBjb250ZW50UXVhZCwgaGlnaGxpZ2h0RGF0YS0+Y29udGVudCwgaGlnaGxpZ2h0RGF0YS0+Y29u
dGVudE91dGxpbmUpOworfQorCit2b2lkIGRyYXdIaWdobGlnaHRGb3JTVkdSZW5kZXJlcihHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+JiBhYnNvbHV0ZVF1
YWRzLCBIaWdobGlnaHREYXRhKiBoaWdobGlnaHREYXRhKQoreworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYWJzb2x1dGVRdWFkcy5zaXplKCk7ICsraSkKKyAgICAgICAgZHJhd091dGxpbmVk
UXVhZChjb250ZXh0LCBhYnNvbHV0ZVF1YWRzW2ldLCBoaWdobGlnaHREYXRhLT5jb250ZW50LCBD
b2xvcjo6dHJhbnNwYXJlbnQpOworfQorCitpbnQgZHJhd1N1YnN0cmluZyhjb25zdCBUZXh0UnVu
JiBnbG9iYWxUZXh0UnVuLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoLCBjb25zdCBDb2xvciYgdGV4
dENvbG9yLCBjb25zdCBGb250JiBmb250LCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IExheW91dFJlY3QmIHRpdGxlUmVjdCkKK3sKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0ZXh0
Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJhd1RleHQoZm9udCwg
Z2xvYmFsVGV4dFJ1biwgSW50UG9pbnQodGl0bGVSZWN0LnBpeGVsU25hcHBlZFgoKSArIHJlY3RJ
bmZsYXRlUHgsIHRpdGxlUmVjdC5waXhlbFNuYXBwZWRZKCkgKyBmb250LmZvbnRNZXRyaWNzKCku
aGVpZ2h0KCkpLCBvZmZzZXQsIG9mZnNldCArIGxlbmd0aCk7CisgICAgcmV0dXJuIG9mZnNldCAr
IGxlbmd0aDsKK30KKworZmxvYXQgY2FsY3VsYXRlQXJyb3dUaXBYKGNvbnN0IExheW91dFJlY3Qm
IGFuY2hvckJveCwgY29uc3QgTGF5b3V0UmVjdCYgdGl0bGVSZWN0KQoreworICAgIGNvbnN0IHN0
YXRpYyBpbnQgYW5jaG9yVGlwT2Zmc2V0UHggPSAyOworCisgICAgaW50IG1pblggPSB0aXRsZVJl
Y3QueCgpICsgYXJyb3dIYWxmV2lkdGg7CisgICAgaW50IG1heFggPSB0aXRsZVJlY3QubWF4WCgp
IC0gYXJyb3dIYWxmV2lkdGg7CisgICAgaW50IGFuY2hvclggPSBhbmNob3JCb3gueCgpOworICAg
IGludCBhbmNob3JNYXhYID0gYW5jaG9yQm94Lm1heFgoKTsKKworICAgIGludCB4ID0gdGl0bGVS
ZWN0LngoKSArIGFycm93VGlwT2Zmc2V0OyAvLyBEZWZhdWx0IHRvb2x0aXAgcG9zaXRpb24uCisg
ICAgaWYgKHggPCBhbmNob3JYKQorICAgICAgICB4ID0gYW5jaG9yWCArIGFuY2hvclRpcE9mZnNl
dFB4OworICAgIGVsc2UgaWYgKHggPiBhbmNob3JNYXhYKQorICAgICAgICB4ID0gYW5jaG9yTWF4
WCAtIGFuY2hvclRpcE9mZnNldFB4OworCisgICAgaWYgKHggPCBtaW5YKQorICAgICAgICB4ID0g
bWluWDsKKyAgICBlbHNlIGlmICh4ID4gbWF4WCkKKyAgICAgICAgeCA9IG1heFg7CisKKyAgICBy
ZXR1cm4geDsKK30KKwordm9pZCBzZXRVcEZvbnREZXNjcmlwdGlvbihGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbiwgV2ViQ29yZTo6U2V0dGluZ3MqIHNldHRpbmdzKQoreworI2RlZmlu
ZSBUT09MVElQX0ZPTlRfRkFNSUxJRVMoc2l6ZSwgLi4uKSBcCitzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgdG9vbHRpcEZvbnRGYWNlU2l6ZSA9IHNpemU7XAorc3RhdGljIGNvbnN0IEF0b21pY1N0cmlu
ZyogdG9vbHRpcEZvbnRGYWNlW3NpemVdID0geyBfX1ZBX0FSR1NfXyB9OworCisjaWYgT1MoV0lO
RE9XUykKK1RPT0xUSVBfRk9OVF9GQU1JTElFUygyLCBuZXcgQXRvbWljU3RyaW5nKCJDb25zb2xh
cyIpLCBuZXcgQXRvbWljU3RyaW5nKCJMdWNpZGEgQ29uc29sZSIpKQorI2VsaWYgT1MoTUFDX09T
X1gpCitUT09MVElQX0ZPTlRfRkFNSUxJRVMoMiwgbmV3IEF0b21pY1N0cmluZygiTWVubG8iKSwg
bmV3IEF0b21pY1N0cmluZygiTW9uYWNvIikpCisjZWxpZiBPUyhVTklYKQorVE9PTFRJUF9GT05U
X0ZBTUlMSUVTKDEsIG5ldyBBdG9taWNTdHJpbmcoImRlamF2dSBzYW5zIG1vbm8iKSkKKyNlbmRp
ZgorLy8gSW4gdGhlIGRlZmF1bHQgY2FzZSwgd2UgZ2V0IHRoZSBzZXR0aW5ncy1wcm92aWRlZCBt
b25vc3BhY2UgZm9udC4KKworI3VuZGVmIFRPT0xUSVBfRk9OVF9GQU1JTElFUworCisgICAgZm9u
dERlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUoc2V0dGluZ3MtPmZvbnRSZW5kZXJpbmdNb2Rl
KCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZm9udEhlaWdodFB4KTsK
KworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZml4ZWRGb250RmFtaWx5ID0gc2V0dGluZ3MtPmZp
eGVkRm9udEZhbWlseSgpOworICAgIGlmICghZml4ZWRGb250RmFtaWx5LmlzRW1wdHkoKSkgewor
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246
Ok1vbm9zcGFjZUZhbWlseSk7CisgICAgICAgIEZvbnRGYW1pbHkqIGN1cnJlbnRGYW1pbHkgPSAw
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9vbHRpcEZvbnRGYWNlU2l6ZTsg
KytpKSB7CisgICAgICAgICAgICBpZiAoIWN1cnJlbnRGYW1pbHkpIHsKKyAgICAgICAgICAgICAg
ICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoKnRvb2x0aXBGb250RmFj
ZVtpXSk7CisgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuYXBw
ZW5kRmFtaWx5KDApOworICAgICAgICAgICAgICAgIGN1cnJlbnRGYW1pbHkgPSAmZm9udERlc2Ny
aXB0aW9uLmZpcnN0RmFtaWx5KCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIFJlZlB0cjxTaGFyZWRGb250RmFtaWx5PiBuZXdGYW1pbHkgPSBTaGFyZWRGb250RmFtaWx5
OjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAgICBuZXdGYW1pbHktPnNldEZhbWlseSgqdG9vbHRp
cEZvbnRGYWNlW2ldKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50RmFtaWx5LT5hcHBlbmRGYW1p
bHkobmV3RmFtaWx5KTsKKyAgICAgICAgICAgICAgICBjdXJyZW50RmFtaWx5ID0gbmV3RmFtaWx5
LmdldCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIFJlZlB0cjxTaGFyZWRG
b250RmFtaWx5PiBuZXdGYW1pbHkgPSBTaGFyZWRGb250RmFtaWx5OjpjcmVhdGUoKTsKKyAgICAg
ICAgbmV3RmFtaWx5LT5zZXRGYW1pbHkoZml4ZWRGb250RmFtaWx5KTsKKyAgICAgICAgY3VycmVu
dEZhbWlseS0+YXBwZW5kRmFtaWx5KG5ld0ZhbWlseSk7CisgICAgICAgIGN1cnJlbnRGYW1pbHkg
PSBuZXdGYW1pbHkuZ2V0KCk7CisgICAgfQorfQorCit2b2lkIGRyYXdFbGVtZW50VGl0bGUoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBOb2RlKiBub2RlLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
LCBjb25zdCBJbnRSZWN0JiBib3VuZGluZ0JveCwgY29uc3QgSW50UmVjdCYgYW5jaG9yQm94LCBj
b25zdCBGbG9hdFJlY3QmIHZpc2libGVSZWN0LCBXZWJDb3JlOjpTZXR0aW5ncyogc2V0dGluZ3Mp
Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgYmFja2dyb3VuZENvbG9yLCAoMjU1
LCAyNTUsIDE5NCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIHRhZ0NvbG9yLCAo
MTM2LCAxOCwgMTI4KSk7IC8vIFNhbWUgYXMgLndlYmtpdC1odG1sLXRhZy4KKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKENvbG9yLCBhdHRyQ29sb3IsICgyNiwgMjYsIDE2NikpOyAvLyBTYW1lIGFz
IC53ZWJraXQtaHRtbC1hdHRyaWJ1dGUtdmFsdWUuCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChD
b2xvciwgbm9ybWFsQ29sb3IsIChDb2xvcjo6YmxhY2spKTsKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKENvbG9yLCBweEFuZEJvcmRlckNvbG9yLCAoMTI4LCAxMjgsIDEyOCkpOworCisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHB4U3RyaW5nLCAoInB4IikpOworICAgIGNvbnN0IHN0
YXRpYyBVQ2hhciB0aW1lc1VDaGFyW10gPSB7IDB4MDAyMCwgMHgwMEQ3LCAweDAwMjAsIDAgfTsK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdGltZXNTdHJpbmcsICh0aW1lc1VDaGFy
KSk7IC8vICZ0aW1lczsgc3RyaW5nCisKKyAgICBGb250Q2FjaGVQdXJnZVByZXZlbnRlciBmb250
Q2FjaGVQdXJnZVByZXZlbnRlcjsKKworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4obm9kZSk7CisgICAgYm9vbCBpc1hIVE1MID0gZWxlbWVudC0+ZG9jdW1lbnQo
KS0+aXNYSFRNTERvY3VtZW50KCk7CisgICAgU3RyaW5nQnVpbGRlciBub2RlVGl0bGU7CisgICAg
bm9kZVRpdGxlLmFwcGVuZChpc1hIVE1MID8gZWxlbWVudC0+bm9kZU5hbWUoKSA6IGVsZW1lbnQt
Pm5vZGVOYW1lKCkubG93ZXIoKSk7CisgICAgdW5zaWduZWQgdGFnTmFtZUxlbmd0aCA9IG5vZGVU
aXRsZS5sZW5ndGgoKTsKKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRWYWx1ZSA9IGVsZW1l
bnQtPmdldElkQXR0cmlidXRlKCk7CisgICAgdW5zaWduZWQgaWRTdHJpbmdMZW5ndGggPSAwOwor
ICAgIFN0cmluZyBpZFN0cmluZzsKKyAgICBpZiAoIWlkVmFsdWUuaXNOdWxsKCkgJiYgIWlkVmFs
dWUuaXNFbXB0eSgpKSB7CisgICAgICAgIG5vZGVUaXRsZS5hcHBlbmQoIiMiKTsKKyAgICAgICAg
bm9kZVRpdGxlLmFwcGVuZChpZFZhbHVlKTsKKyAgICAgICAgaWRTdHJpbmdMZW5ndGggPSAxICsg
aWRWYWx1ZS5sZW5ndGgoKTsKKyAgICB9CisKKyAgICBIYXNoU2V0PEF0b21pY1N0cmluZz4gdXNl
ZENsYXNzTmFtZXM7CisgICAgdW5zaWduZWQgY2xhc3Nlc1N0cmluZ0xlbmd0aCA9IDA7CisgICAg
aWYgKGVsZW1lbnQtPmhhc0NsYXNzKCkgJiYgZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50KCkpIHsK
KyAgICAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgY2xhc3NOYW1lc1N0cmluZyA9IHN0YXRp
Y19jYXN0PFN0eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+Y2xhc3NOYW1lcygpOworICAgICAgICBz
aXplX3QgY2xhc3NOYW1lQ291bnQgPSBjbGFzc05hbWVzU3RyaW5nLnNpemUoKTsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjbGFzc05hbWVDb3VudDsgKytpKSB7CisgICAgICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNTdHJpbmdbaV07Cisg
ICAgICAgICAgICBpZiAodXNlZENsYXNzTmFtZXMuY29udGFpbnMoY2xhc3NOYW1lKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHVzZWRDbGFzc05hbWVzLmFkZChjbGFz
c05hbWUpOworICAgICAgICAgICAgbm9kZVRpdGxlLmFwcGVuZCgiLiIpOworICAgICAgICAgICAg
bm9kZVRpdGxlLmFwcGVuZChjbGFzc05hbWUpOworICAgICAgICAgICAgY2xhc3Nlc1N0cmluZ0xl
bmd0aCArPSAxICsgY2xhc3NOYW1lLmxlbmd0aCgpOworICAgICAgICB9CisgICAgfQorCisgICAg
UmVuZGVyQm94TW9kZWxPYmplY3QqIG1vZGVsT2JqZWN0ID0gcmVuZGVyZXItPmlzQm94TW9kZWxP
YmplY3QoKSA/IHRvUmVuZGVyQm94TW9kZWxPYmplY3QocmVuZGVyZXIpIDogMDsKKworICAgIFN0
cmluZyB3aWR0aE51bWJlclBhcnQgPSAiICIgKyBTdHJpbmc6Om51bWJlcihtb2RlbE9iamVjdCA/
IGFkanVzdEZvckFic29sdXRlWm9vbShtb2RlbE9iamVjdC0+cGl4ZWxTbmFwcGVkT2Zmc2V0V2lk
dGgoKSwgbW9kZWxPYmplY3QpIDogYm91bmRpbmdCb3gud2lkdGgoKSk7CisgICAgbm9kZVRpdGxl
LmFwcGVuZCh3aWR0aE51bWJlclBhcnQpOworICAgIG5vZGVUaXRsZS5hcHBlbmQocHhTdHJpbmcp
OworICAgIG5vZGVUaXRsZS5hcHBlbmQodGltZXNTdHJpbmcpOworICAgIFN0cmluZyBoZWlnaHRO
dW1iZXJQYXJ0ID0gU3RyaW5nOjpudW1iZXIobW9kZWxPYmplY3QgPyBhZGp1c3RGb3JBYnNvbHV0
ZVpvb20obW9kZWxPYmplY3QtPnBpeGVsU25hcHBlZE9mZnNldEhlaWdodCgpLCBtb2RlbE9iamVj
dCkgOiBib3VuZGluZ0JveC5oZWlnaHQoKSk7CisgICAgbm9kZVRpdGxlLmFwcGVuZChoZWlnaHRO
dW1iZXJQYXJ0KTsKKyAgICBub2RlVGl0bGUuYXBwZW5kKHB4U3RyaW5nKTsKKworICAgIEZvbnRE
ZXNjcmlwdGlvbiBkZXNjOworICAgIHNldFVwRm9udERlc2NyaXB0aW9uKGRlc2MsIHNldHRpbmdz
KTsKKyAgICBGb250IGZvbnQgPSBGb250KGRlc2MsIDAsIDApOworICAgIGZvbnQudXBkYXRlKDAp
OworCisgICAgVGV4dFJ1biBub2RlVGl0bGVSdW4obm9kZVRpdGxlLnRvU3RyaW5nKCkpOworICAg
IEludFBvaW50IHRpdGxlQmFzZVBvaW50ID0gSW50UG9pbnQoYW5jaG9yQm94LngoKSwgYW5jaG9y
Qm94Lm1heFkoKSAtIDEpOworICAgIHRpdGxlQmFzZVBvaW50Lm1vdmUocmVjdEluZmxhdGVQeCwg
cmVjdEluZmxhdGVQeCk7CisgICAgSW50UmVjdCB0aXRsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0
KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQobm9kZVRpdGxlUnVuLCB0aXRsZUJhc2VQb2ludCwg
Zm9udEhlaWdodFB4KSk7CisgICAgdGl0bGVSZWN0LmluZmxhdGUocmVjdEluZmxhdGVQeCk7CisK
KyAgICAvLyBUaGUgaW5pdGlhbCBvZmZzZXRzIG5lZWRlZCB0byBjb21wZW5zYXRlIGZvciBhIDFw
eC10aGljayBib3JkZXIgc3Ryb2tlICh3aGljaCBpcyBub3QgYSBwYXJ0IG9mIHRoZSByZWN0YW5n
bGUpLgorICAgIGludCBkeCA9IC1ib3JkZXJXaWR0aFB4OworICAgIGludCBkeSA9IGJvcmRlcldp
ZHRoUHg7CisKKyAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIHJpZ2h0IG9mIHZp
c2libGVSZWN0LCByaWdodC1hbGlnbiB0aGUgdGlwIHdpdGggdGhlIHNhaWQgYm91bmRhcnkuCisg
ICAgaWYgKHRpdGxlUmVjdC5tYXhYKCkgKyBkeCA+IHZpc2libGVSZWN0Lm1heFgoKSkKKyAgICAg
ICAgZHggPSB2aXNpYmxlUmVjdC5tYXhYKCkgLSB0aXRsZVJlY3QubWF4WCgpOworCisgICAgLy8g
SWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRoZSBsZWZ0IG9mIHZpc2libGVSZWN0LCBsZWZ0LWFs
aWduIHRoZSB0aXAgd2l0aCB0aGUgc2FpZCBib3VuZGFyeS4KKyAgICBpZiAodGl0bGVSZWN0Lngo
KSArIGR4IDwgdmlzaWJsZVJlY3QueCgpKQorICAgICAgICBkeCA9IHZpc2libGVSZWN0LngoKSAt
IHRpdGxlUmVjdC54KCkgLSBib3JkZXJXaWR0aFB4OworCisgICAgLy8gSWYgdGhlIHRpcCBzdGlj
a3MgYmV5b25kIHRoZSBib3R0b20gb2YgdmlzaWJsZVJlY3QsIHNob3cgdGhlIHRpcCBhdCB0b3Ag
b2YgYm91bmRpbmcgYm94LgorICAgIGlmICh0aXRsZVJlY3QubWF4WSgpICsgZHkgPiB2aXNpYmxl
UmVjdC5tYXhZKCkpIHsKKyAgICAgICAgZHkgPSBhbmNob3JCb3gueSgpIC0gdGl0bGVSZWN0Lm1h
eFkoKSAtIGJvcmRlcldpZHRoUHg7CisgICAgICAgIC8vIElmIHRoZSB0aXAgc3RpbGwgc3RpY2tz
IGJleW9uZCB0aGUgYm90dG9tIG9mIHZpc2libGVSZWN0LCBib3R0b20tYWxpZ24gdGhlIHRpcCB3
aXRoIHRoZSBzYWlkIGJvdW5kYXJ5LgorICAgICAgICBpZiAodGl0bGVSZWN0Lm1heFkoKSArIGR5
ID4gdmlzaWJsZVJlY3QubWF4WSgpKQorICAgICAgICAgICAgZHkgPSB2aXNpYmxlUmVjdC5tYXhZ
KCkgLSB0aXRsZVJlY3QubWF4WSgpOworICAgIH0KKworICAgIC8vIElmIHRoZSB0aXAgc3RpY2tz
IGJleW9uZCB0aGUgdG9wIG9mIHZpc2libGVSZWN0LCBzaG93IHRoZSB0aXAgYXQgdG9wIG9mIHZp
c2libGVSZWN0LgorICAgIGlmICh0aXRsZVJlY3QueSgpICsgZHkgPCB2aXNpYmxlUmVjdC55KCkp
CisgICAgICAgIGR5ID0gdmlzaWJsZVJlY3QueSgpIC0gdGl0bGVSZWN0LnkoKSArIGJvcmRlcldp
ZHRoUHg7CisKKyAgICB0aXRsZVJlY3QubW92ZShkeCwgZHkpOworCisgICAgYm9vbCBpc0Fycm93
QXRUb3AgPSB0aXRsZVJlY3QueSgpID4gYW5jaG9yQm94LnkoKTsKKyAgICB0aXRsZVJlY3QubW92
ZSgwLCB0b29sdGlwUGFkZGluZyAqIChpc0Fycm93QXRUb3AgPyAxIDogLTEpKTsKKworICAgIHsK
KyAgICAgICAgZmxvYXQgYXJyb3dUaXBYID0gY2FsY3VsYXRlQXJyb3dUaXBYKGFuY2hvckJveCwg
dGl0bGVSZWN0KTsKKyAgICAgICAgaW50IGFycm93QmFzZVkgPSBpc0Fycm93QXRUb3AgPyB0aXRs
ZVJlY3QueSgpIDogdGl0bGVSZWN0Lm1heFkoKTsKKyAgICAgICAgaW50IGFycm93T3Bwb3NpdGVZ
ID0gaXNBcnJvd0F0VG9wID8gdGl0bGVSZWN0Lm1heFkoKSA6IHRpdGxlUmVjdC55KCk7CisKKyAg
ICAgICAgRmxvYXRQb2ludCBwb2ludHNbOF07CisgICAgICAgIHBvaW50c1swXSA9IEZsb2F0UG9p
bnQoYXJyb3dUaXBYIC0gYXJyb3dIYWxmV2lkdGgsIGFycm93QmFzZVkpOworICAgICAgICBwb2lu
dHNbMV0gPSBGbG9hdFBvaW50KGFycm93VGlwWCwgYXJyb3dCYXNlWSArIGFycm93SGVpZ2h0ICog
KGlzQXJyb3dBdFRvcCA/IC0xIDogMSkpOworICAgICAgICBwb2ludHNbMl0gPSBGbG9hdFBvaW50
KGFycm93VGlwWCArIGFycm93SGFsZldpZHRoLCBhcnJvd0Jhc2VZKTsKKyAgICAgICAgcG9pbnRz
WzNdID0gRmxvYXRQb2ludCh0aXRsZVJlY3QubWF4WCgpLCBhcnJvd0Jhc2VZKTsKKyAgICAgICAg
cG9pbnRzWzRdID0gRmxvYXRQb2ludCh0aXRsZVJlY3QubWF4WCgpLCBhcnJvd09wcG9zaXRlWSk7
CisgICAgICAgIHBvaW50c1s1XSA9IEZsb2F0UG9pbnQodGl0bGVSZWN0LngoKSwgYXJyb3dPcHBv
c2l0ZVkpOworICAgICAgICBwb2ludHNbNl0gPSBGbG9hdFBvaW50KHRpdGxlUmVjdC54KCksIGFy
cm93QmFzZVkpOworICAgICAgICBwb2ludHNbN10gPSBwb2ludHNbMF07CisKKyAgICAgICAgUGF0
aCBwYXRoOworICAgICAgICBwYXRoLm1vdmVUbyhwb2ludHNbMF0pOworICAgICAgICBmb3IgKGlu
dCBpID0gMTsgaSA8IDg7ICsraSkKKyAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHBvaW50c1tp
XSk7CisKKyAgICAgICAgY29udGV4dC5zYXZlKCk7CisgICAgICAgIGNvbnRleHQudHJhbnNsYXRl
KDAuNWYsIDAuNWYpOworICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKHB4QW5kQm9yZGVy
Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xv
cihiYWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAgICBjb250ZXh0
LnNldFN0cm9rZVRoaWNrbmVzcyhib3JkZXJXaWR0aFB4KTsKKyAgICAgICAgY29udGV4dC5maWxs
UGF0aChwYXRoKTsKKyAgICAgICAgY29udGV4dC5zdHJva2VQYXRoKHBhdGgpOworICAgICAgICBj
b250ZXh0LnJlc3RvcmUoKTsKKyAgICB9CisKKyAgICBpbnQgY3VycmVudFBvcyA9IDA7CisgICAg
Y3VycmVudFBvcyA9IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBjdXJyZW50UG9zLCB0YWdO
YW1lTGVuZ3RoLCB0YWdDb2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVSZWN0KTsKKyAgICBpZiAo
aWRTdHJpbmdMZW5ndGgpCisgICAgICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVU
aXRsZVJ1biwgY3VycmVudFBvcywgaWRTdHJpbmdMZW5ndGgsIGF0dHJDb2xvciwgZm9udCwgY29u
dGV4dCwgdGl0bGVSZWN0KTsKKyAgICBpZiAoY2xhc3Nlc1N0cmluZ0xlbmd0aCkKKyAgICAgICAg
Y3VycmVudFBvcyA9IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBjdXJyZW50UG9zLCBjbGFz
c2VzU3RyaW5nTGVuZ3RoLCBhdHRyQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7Cisg
ICAgY3VycmVudFBvcyA9IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBjdXJyZW50UG9zLCB3
aWR0aE51bWJlclBhcnQubGVuZ3RoKCksIG5vcm1hbENvbG9yLCBmb250LCBjb250ZXh0LCB0aXRs
ZVJlY3QpOworICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3Vy
cmVudFBvcywgcHhTdHJpbmcubGVuZ3RoKCkgKyB0aW1lc1N0cmluZy5sZW5ndGgoKSwgcHhBbmRC
b3JkZXJDb2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVSZWN0KTsKKyAgICBjdXJyZW50UG9zID0g
ZHJhd1N1YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIGhlaWdodE51bWJlclBhcnQu
bGVuZ3RoKCksIG5vcm1hbENvbG9yLCBmb250LCBjb250ZXh0LCB0aXRsZVJlY3QpOworICAgIGRy
YXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBjdXJyZW50UG9zLCBweFN0cmluZy5sZW5ndGgoKSwg
cHhBbmRCb3JkZXJDb2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVSZWN0KTsKK30KKworc3RhdGlj
IHZvaWQgY29udGVudHNRdWFkVG9QYWdlKGNvbnN0IEZyYW1lVmlldyogbWFpblZpZXcsIGNvbnN0
IEZyYW1lVmlldyogdmlldywgRmxvYXRRdWFkJiBxdWFkKQoreworICAgIHF1YWQuc2V0UDEodmll
dy0+Y29udGVudHNUb1Jvb3RWaWV3KHJvdW5kZWRJbnRQb2ludChxdWFkLnAxKCkpKSk7CisgICAg
cXVhZC5zZXRQMih2aWV3LT5jb250ZW50c1RvUm9vdFZpZXcocm91bmRlZEludFBvaW50KHF1YWQu
cDIoKSkpKTsKKyAgICBxdWFkLnNldFAzKHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhyb3VuZGVk
SW50UG9pbnQocXVhZC5wMygpKSkpOworICAgIHF1YWQuc2V0UDQodmlldy0+Y29udGVudHNUb1Jv
b3RWaWV3KHJvdW5kZWRJbnRQb2ludChxdWFkLnA0KCkpKSk7CisgICAgcXVhZCArPSBtYWluVmll
dy0+c2Nyb2xsT2Zmc2V0KCk7Cit9CisKK3N0YXRpYyB2b2lkIGdldE9yRHJhd05vZGVIaWdobGln
aHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBIaWdobGlnaHREYXRhKiBoaWdobGlnaHREYXRh
LCBIaWdobGlnaHQqIGhpZ2hsaWdodCkKK3sKKyAgICBOb2RlKiBub2RlID0gaGlnaGxpZ2h0RGF0
YS0+bm9kZS5nZXQoKTsKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVy
ZXIoKTsKKyAgICBGcmFtZSogY29udGFpbmluZ0ZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJh
bWUoKTsKKworICAgIGlmICghcmVuZGVyZXIgfHwgIWNvbnRhaW5pbmdGcmFtZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgRnJhbWVWaWV3KiBjb250YWluaW5nVmlldyA9IGNvbnRhaW5pbmdGcmFt
ZS0+dmlldygpOworICAgIEZyYW1lVmlldyogbWFpblZpZXcgPSBjb250YWluaW5nRnJhbWUtPnBh
Z2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKyAgICBJbnRSZWN0IGJvdW5kaW5nQm94ID0gcGl4
ZWxTbmFwcGVkSW50UmVjdChjb250YWluaW5nVmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHJlbmRl
cmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKSk7CisgICAgYm91bmRpbmdCb3gubW92ZSht
YWluVmlldy0+c2Nyb2xsT2Zmc2V0KCkpOworICAgIEludFJlY3QgdGl0bGVBbmNob3JCb3ggPSBi
b3VuZGluZ0JveDsKKworICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdCA9IG1haW5WaWV3LT52aXNp
YmxlQ29udGVudFJlY3QoKTsKKyAgICAvLyBEb24ndCB0cmFuc2xhdGUgdGhlIGNvbnRleHQgaWYg
dGhlIGZyYW1lIGlzIHJlbmRlcmVkIGluIHBhZ2UgY29vcmRpbmF0ZXMuCisgICAgaWYgKGNvbnRl
eHQgJiYgIW1haW5WaWV3LT5kZWxlZ2F0ZXNTY3JvbGxpbmcoKSkKKyAgICAgICAgY29udGV4dC0+
dHJhbnNsYXRlKC12aXNpYmxlUmVjdC54KCksIC12aXNpYmxlUmVjdC55KCkpOworCisgICAgLy8g
UmVuZGVyU1ZHUm9vdCBzaG91bGQgYmUgaGlnaGxpZ2h0ZWQgdGhyb3VnaCB0aGUgaXNCb3goKSBj
b2RlIHBhdGgsIGFsbCBvdGhlciBTVkcgZWxlbWVudHMgc2hvdWxkIGp1c3QgZHVtcCB0aGVpciBh
YnNvbHV0ZVF1YWRzKCkuCisjaWYgRU5BQkxFKFNWRykKKyAgICBib29sIGlzU1ZHUmVuZGVyZXIg
PSByZW5kZXJlci0+bm9kZSgpICYmIHJlbmRlcmVyLT5ub2RlKCktPmlzU1ZHRWxlbWVudCgpICYm
ICFyZW5kZXJlci0+aXNTVkdSb290KCk7CisjZWxzZQorICAgIGJvb2wgaXNTVkdSZW5kZXJlciA9
IGZhbHNlOworI2VuZGlmCisKKyAgICBpZiAoaXNTVkdSZW5kZXJlcikgeworICAgICAgICBoaWdo
bGlnaHQtPnR5cGUgPSBIaWdobGlnaHRUeXBlUmVjdHM7CisgICAgICAgIHJlbmRlcmVyLT5hYnNv
bHV0ZVF1YWRzKGhpZ2hsaWdodC0+cXVhZHMpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGhpZ2hsaWdodC0+cXVhZHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBjb250ZW50c1F1
YWRUb1BhZ2UobWFpblZpZXcsIGNvbnRhaW5pbmdWaWV3LCBoaWdobGlnaHQtPnF1YWRzW2ldKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgICAgIGRyYXdIaWdobGlnaHRGb3JTVkdS
ZW5kZXJlcigqY29udGV4dCwgaGlnaGxpZ2h0LT5xdWFkcywgaGlnaGxpZ2h0RGF0YSk7CisgICAg
fSBlbHNlIGlmIChyZW5kZXJlci0+aXNCb3goKSB8fCByZW5kZXJlci0+aXNSZW5kZXJJbmxpbmUo
KSkgeworICAgICAgICBMYXlvdXRSZWN0IGNvbnRlbnRCb3g7CisgICAgICAgIExheW91dFJlY3Qg
cGFkZGluZ0JveDsKKyAgICAgICAgTGF5b3V0UmVjdCBib3JkZXJCb3g7CisgICAgICAgIExheW91
dFJlY3QgbWFyZ2luQm94OworCisgICAgICAgIGlmIChyZW5kZXJlci0+aXNCb3goKSkgeworICAg
ICAgICAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSB0b1JlbmRlckJveChyZW5kZXJlcik7CisK
KyAgICAgICAgICAgIC8vIFJlbmRlckJveCByZXR1cm5zIHRoZSAicHVyZSIgY29udGVudCBhcmVh
IGJveCwgZXhjbHVzaXZlIG9mIHRoZSBzY3JvbGxiYXJzIChpZiBwcmVzZW50KSwgd2hpY2ggYWxz
byBjb3VudCB0b3dhcmRzIHRoZSBjb250ZW50IGFyZWEgaW4gQ1NTLgorICAgICAgICAgICAgY29u
dGVudEJveCA9IHJlbmRlckJveC0+Y29udGVudEJveFJlY3QoKTsKKyAgICAgICAgICAgIGNvbnRl
bnRCb3guc2V0V2lkdGgoY29udGVudEJveC53aWR0aCgpICsgcmVuZGVyQm94LT52ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoKCkpOworICAgICAgICAgICAgY29udGVudEJveC5zZXRIZWlnaHQoY29udGVu
dEJveC5oZWlnaHQoKSArIHJlbmRlckJveC0+aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpKTsK
KworICAgICAgICAgICAgcGFkZGluZ0JveCA9IExheW91dFJlY3QoY29udGVudEJveC54KCkgLSBy
ZW5kZXJCb3gtPnBhZGRpbmdMZWZ0KCksIGNvbnRlbnRCb3gueSgpIC0gcmVuZGVyQm94LT5wYWRk
aW5nVG9wKCksCisgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRCb3gud2lkdGgoKSArIHJlbmRl
ckJveC0+cGFkZGluZ0xlZnQoKSArIHJlbmRlckJveC0+cGFkZGluZ1JpZ2h0KCksIGNvbnRlbnRC
b3guaGVpZ2h0KCkgKyByZW5kZXJCb3gtPnBhZGRpbmdUb3AoKSArIHJlbmRlckJveC0+cGFkZGlu
Z0JvdHRvbSgpKTsKKyAgICAgICAgICAgIGJvcmRlckJveCA9IExheW91dFJlY3QocGFkZGluZ0Jv
eC54KCkgLSByZW5kZXJCb3gtPmJvcmRlckxlZnQoKSwgcGFkZGluZ0JveC55KCkgLSByZW5kZXJC
b3gtPmJvcmRlclRvcCgpLAorICAgICAgICAgICAgICAgICAgICBwYWRkaW5nQm94LndpZHRoKCkg
KyByZW5kZXJCb3gtPmJvcmRlckxlZnQoKSArIHJlbmRlckJveC0+Ym9yZGVyUmlnaHQoKSwgcGFk
ZGluZ0JveC5oZWlnaHQoKSArIHJlbmRlckJveC0+Ym9yZGVyVG9wKCkgKyByZW5kZXJCb3gtPmJv
cmRlckJvdHRvbSgpKTsKKyAgICAgICAgICAgIG1hcmdpbkJveCA9IExheW91dFJlY3QoYm9yZGVy
Qm94LngoKSAtIHJlbmRlckJveC0+bWFyZ2luTGVmdCgpLCBib3JkZXJCb3gueSgpIC0gcmVuZGVy
Qm94LT5tYXJnaW5Ub3AoKSwKKyAgICAgICAgICAgICAgICAgICAgYm9yZGVyQm94LndpZHRoKCkg
KyByZW5kZXJCb3gtPm1hcmdpbldpZHRoKCksIGJvcmRlckJveC5oZWlnaHQoKSArIHJlbmRlckJv
eC0+bWFyZ2luSGVpZ2h0KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUmVuZGVy
SW5saW5lKiByZW5kZXJJbmxpbmUgPSB0b1JlbmRlcklubGluZShyZW5kZXJlcik7CisKKyAgICAg
ICAgICAgIC8vIFJlbmRlcklubGluZSdzIGJvdW5kaW5nIGJveCBpbmNsdWRlcyBwYWRkaW5ncyBh
bmQgYm9yZGVycywgZXhjbHVkZXMgbWFyZ2lucy4KKyAgICAgICAgICAgIGJvcmRlckJveCA9IHJl
bmRlcklubGluZS0+bGluZXNCb3VuZGluZ0JveCgpOworICAgICAgICAgICAgcGFkZGluZ0JveCA9
IExheW91dFJlY3QoYm9yZGVyQm94LngoKSArIHJlbmRlcklubGluZS0+Ym9yZGVyTGVmdCgpLCBi
b3JkZXJCb3gueSgpICsgcmVuZGVySW5saW5lLT5ib3JkZXJUb3AoKSwKKyAgICAgICAgICAgICAg
ICAgICAgYm9yZGVyQm94LndpZHRoKCkgLSByZW5kZXJJbmxpbmUtPmJvcmRlckxlZnQoKSAtIHJl
bmRlcklubGluZS0+Ym9yZGVyUmlnaHQoKSwgYm9yZGVyQm94LmhlaWdodCgpIC0gcmVuZGVySW5s
aW5lLT5ib3JkZXJUb3AoKSAtIHJlbmRlcklubGluZS0+Ym9yZGVyQm90dG9tKCkpOworICAgICAg
ICAgICAgY29udGVudEJveCA9IExheW91dFJlY3QocGFkZGluZ0JveC54KCkgKyByZW5kZXJJbmxp
bmUtPnBhZGRpbmdMZWZ0KCksIHBhZGRpbmdCb3gueSgpICsgcmVuZGVySW5saW5lLT5wYWRkaW5n
VG9wKCksCisgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdCb3gud2lkdGgoKSAtIHJlbmRlcklu
bGluZS0+cGFkZGluZ0xlZnQoKSAtIHJlbmRlcklubGluZS0+cGFkZGluZ1JpZ2h0KCksIHBhZGRp
bmdCb3guaGVpZ2h0KCkgLSByZW5kZXJJbmxpbmUtPnBhZGRpbmdUb3AoKSAtIHJlbmRlcklubGlu
ZS0+cGFkZGluZ0JvdHRvbSgpKTsKKyAgICAgICAgICAgIC8vIElnbm9yZSBtYXJnaW5Ub3AgYW5k
IG1hcmdpbkJvdHRvbSBmb3IgaW5saW5lcy4KKyAgICAgICAgICAgIG1hcmdpbkJveCA9IExheW91
dFJlY3QoYm9yZGVyQm94LngoKSAtIHJlbmRlcklubGluZS0+bWFyZ2luTGVmdCgpLCBib3JkZXJC
b3gueSgpLAorICAgICAgICAgICAgICAgICAgICBib3JkZXJCb3gud2lkdGgoKSArIHJlbmRlcklu
bGluZS0+bWFyZ2luV2lkdGgoKSwgYm9yZGVyQm94LmhlaWdodCgpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIEZsb2F0UXVhZCBhYnNDb250ZW50UXVhZCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1
dGVRdWFkKEZsb2F0UmVjdChjb250ZW50Qm94KSk7CisgICAgICAgIEZsb2F0UXVhZCBhYnNQYWRk
aW5nUXVhZCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChwYWRkaW5n
Qm94KSk7CisgICAgICAgIEZsb2F0UXVhZCBhYnNCb3JkZXJRdWFkID0gcmVuZGVyZXItPmxvY2Fs
VG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGJvcmRlckJveCkpOworICAgICAgICBGbG9hdFF1YWQg
YWJzTWFyZ2luUXVhZCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdCht
YXJnaW5Cb3gpKTsKKworICAgICAgICBjb250ZW50c1F1YWRUb1BhZ2UobWFpblZpZXcsIGNvbnRh
aW5pbmdWaWV3LCBhYnNDb250ZW50UXVhZCk7CisgICAgICAgIGNvbnRlbnRzUXVhZFRvUGFnZSht
YWluVmlldywgY29udGFpbmluZ1ZpZXcsIGFic1BhZGRpbmdRdWFkKTsKKyAgICAgICAgY29udGVu
dHNRdWFkVG9QYWdlKG1haW5WaWV3LCBjb250YWluaW5nVmlldywgYWJzQm9yZGVyUXVhZCk7Cisg
ICAgICAgIGNvbnRlbnRzUXVhZFRvUGFnZShtYWluVmlldywgY29udGFpbmluZ1ZpZXcsIGFic01h
cmdpblF1YWQpOworCisgICAgICAgIHRpdGxlQW5jaG9yQm94ID0gYWJzTWFyZ2luUXVhZC5lbmNs
b3NpbmdCb3VuZGluZ0JveCgpOworCisgICAgICAgIGhpZ2hsaWdodC0+dHlwZSA9IEhpZ2hsaWdo
dFR5cGVOb2RlOworICAgICAgICBoaWdobGlnaHQtPnF1YWRzLmFwcGVuZChhYnNNYXJnaW5RdWFk
KTsKKyAgICAgICAgaGlnaGxpZ2h0LT5xdWFkcy5hcHBlbmQoYWJzQm9yZGVyUXVhZCk7CisgICAg
ICAgIGhpZ2hsaWdodC0+cXVhZHMuYXBwZW5kKGFic1BhZGRpbmdRdWFkKTsKKyAgICAgICAgaGln
aGxpZ2h0LT5xdWFkcy5hcHBlbmQoYWJzQ29udGVudFF1YWQpOworCisgICAgICAgIGlmIChjb250
ZXh0KQorICAgICAgICAgICAgZHJhd0hpZ2hsaWdodEZvckJveCgqY29udGV4dCwgYWJzQ29udGVu
dFF1YWQsIGFic1BhZGRpbmdRdWFkLCBhYnNCb3JkZXJRdWFkLCBhYnNNYXJnaW5RdWFkLCBoaWdo
bGlnaHREYXRhKTsKKyAgICB9CisKKyAgICAvLyBEcmF3IG5vZGUgdGl0bGUgaWYgbmVjZXNzYXJ5
LgorCisgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChjb250ZXh0ICYmIGhpZ2hsaWdodERhdGEtPnNob3dJbmZvKQorICAgICAgICBkcmF3
RWxlbWVudFRpdGxlKCpjb250ZXh0LCBub2RlLCByZW5kZXJlciwgcGl4ZWxTbmFwcGVkSW50UmVj
dChib3VuZGluZ0JveCksIHBpeGVsU25hcHBlZEludFJlY3QodGl0bGVBbmNob3JCb3gpLCB2aXNp
YmxlUmVjdCwgY29udGFpbmluZ0ZyYW1lLT5zZXR0aW5ncygpKTsKK30KKworc3RhdGljIHZvaWQg
Z2V0T3JEcmF3UmVjdEhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIERvY3VtZW50
KiBkb2N1bWVudCwgSGlnaGxpZ2h0RGF0YSogaGlnaGxpZ2h0RGF0YSwgSGlnaGxpZ2h0ICpoaWdo
bGlnaHQpCit7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRmxv
YXRSZWN0IGhpZ2hsaWdodFJlY3QoKihoaWdobGlnaHREYXRhLT5yZWN0KSk7CisKKyAgICBoaWdo
bGlnaHQtPnR5cGUgPSBIaWdobGlnaHRUeXBlUmVjdHM7CisgICAgaGlnaGxpZ2h0LT5xdWFkcy5h
cHBlbmQoaGlnaGxpZ2h0UmVjdCk7CisKKyAgICBpZiAoY29udGV4dCkgeworICAgICAgICBGcmFt
ZVZpZXcqIHZpZXcgPSBkb2N1bWVudC0+ZnJhbWUoKS0+dmlldygpOworICAgICAgICBpZiAoIXZp
ZXctPmRlbGVnYXRlc1Njcm9sbGluZygpKSB7CisgICAgICAgICAgICBGbG9hdFJlY3QgdmlzaWJs
ZVJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PnRyYW5zbGF0ZSgtdmlzaWJsZVJlY3QueCgpLCAtdmlzaWJsZVJlY3QueSgpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGRyYXdPdXRsaW5lZFF1YWQoKmNvbnRleHQsIGhpZ2hsaWdodFJlY3QsIGhp
Z2hsaWdodERhdGEtPmNvbnRlbnQsIGhpZ2hsaWdodERhdGEtPmNvbnRlbnRPdXRsaW5lKTsKKyAg
ICB9Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitJbnNwZWN0b3JPdmVybGF5OjpJ
bnNwZWN0b3JPdmVybGF5KFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQorICAg
IDogbV9wYWdlKHBhZ2UpCisgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX3Nob3VsZFNo
b3dQYXVzZVdhcm5pbmcoZmFsc2UpCisgICAgLCBtX2RvY3VtZW50KDApCisgICAgLCBtX2hpZ2hs
aWdodERhdGEoMCkKK3sKK30KKwordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKK3sKKyAgICBpZiAobV9oaWdobGlnaHREYXRhKQorICAgICAgICBk
cmF3SGlnaGxpZ2h0KGNvbnRleHQpOworICAgIGVsc2UgaWYgKG1fc2hvdWxkU2hvd1BhdXNlV2Fy
bmluZykKKyAgICAgICAgZHJhd1BhdXNlV2FybmluZyhjb250ZXh0KTsKK30KKwordm9pZCBJbnNw
ZWN0b3JPdmVybGF5OjpkcmF3T3V0bGluZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IExheW91dFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBGbG9hdFJlY3Qg
b3V0bGluZVJlY3QgPSByZWN0OworICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgb3V0bGlu
ZVJlY3QsIENvbG9yKCksIGNvbG9yKTsKK30KKwordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpnZXRI
aWdobGlnaHQoRG9jdW1lbnQqIGRvY3VtZW50LCBIaWdobGlnaHREYXRhKiBoaWdobGlnaHREYXRh
LCBIaWdobGlnaHQqIGhpZ2hsaWdodCkKK3sKKyAgICBpZiAoIWhpZ2hsaWdodERhdGEpCisgICAg
ICAgIHJldHVybjsKKworICAgIGhpZ2hsaWdodC0+Y29udGVudENvbG9yID0gaGlnaGxpZ2h0RGF0
YS0+Y29udGVudDsKKyAgICBoaWdobGlnaHQtPnBhZGRpbmdDb2xvciA9IGhpZ2hsaWdodERhdGEt
PnBhZGRpbmc7CisgICAgaGlnaGxpZ2h0LT5ib3JkZXJDb2xvciA9IGhpZ2hsaWdodERhdGEtPmJv
cmRlcjsKKyAgICBoaWdobGlnaHQtPm1hcmdpbkNvbG9yID0gaGlnaGxpZ2h0RGF0YS0+bWFyZ2lu
OworICAgIGhpZ2hsaWdodC0+dHlwZSA9IEhpZ2hsaWdodFR5cGVSZWN0czsKKworICAgIGlmICho
aWdobGlnaHREYXRhLT5ub2RlKQorICAgICAgICBnZXRPckRyYXdOb2RlSGlnaGxpZ2h0KDAsIGhp
Z2hsaWdodERhdGEsIGhpZ2hsaWdodCk7CisgICAgZWxzZSBpZiAoaGlnaGxpZ2h0RGF0YS0+cmVj
dCkKKyAgICAgICAgZ2V0T3JEcmF3UmVjdEhpZ2hsaWdodCgwLCBkb2N1bWVudCwgaGlnaGxpZ2h0
RGF0YSwgaGlnaGxpZ2h0KTsKK30KKwordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpzZXRIaWdobGln
aHQoRG9jdW1lbnQqIGRvY3VtZW50LCBIaWdobGlnaHREYXRhKiBoaWdobGlnaHREYXRhKQorewor
ICAgIGlmIChkb2N1bWVudCAmJiBoaWdobGlnaHREYXRhICYmIChoaWdobGlnaHREYXRhLT5ub2Rl
IHx8IGhpZ2hsaWdodERhdGEtPnJlY3QpKSB7CisgICAgICAgIG1fZG9jdW1lbnQgPSBoaWdobGln
aHREYXRhLT5ub2RlID8gaGlnaGxpZ2h0RGF0YS0+bm9kZS0+ZG9jdW1lbnQoKSA6IGRvY3VtZW50
OworICAgICAgICBtX2hpZ2hsaWdodERhdGEgPSBoaWdobGlnaHREYXRhOworICAgIH0gZWxzZSB7
CisgICAgICAgIG1fZG9jdW1lbnQgPSAwOworICAgICAgICBtX2hpZ2hsaWdodERhdGEgPSAwOwor
ICAgIH0KKyAgICB1cGRhdGUoKTsKK30KKwordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpzZXRTaG91
bGRTaG93UGF1c2VXYXJuaW5nKGJvb2wgc2hvdWxkU2hvd1BhdXNlV2FybmluZykKK3sKKyAgICBt
X3Nob3VsZFNob3dQYXVzZVdhcm5pbmcgPSBzaG91bGRTaG93UGF1c2VXYXJuaW5nOworICAgIHVw
ZGF0ZSgpOworfQorCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnVwZGF0ZSgpCit7CisgICAgaWYg
KCFtX2NsaWVudCkgCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9oaWdobGlnaHREYXRhIHx8
IG1fc2hvdWxkU2hvd1BhdXNlV2FybmluZykKKyAgICAgICAgbV9jbGllbnQtPmhpZ2hsaWdodCgp
OworICAgIGVsc2UKKyAgICAgICAgbV9jbGllbnQtPmhpZGVIaWdobGlnaHQoKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkKK3sKKyAgICBpZiAoIW1faGlnaGxpZ2h0RGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
SGlnaGxpZ2h0IGhpZ2hsaWdodDsKKyAgICBpZiAobV9oaWdobGlnaHREYXRhLT5ub2RlKQorICAg
ICAgICBnZXRPckRyYXdOb2RlSGlnaGxpZ2h0KCZjb250ZXh0LCBtX2hpZ2hsaWdodERhdGEsICZo
aWdobGlnaHQpOworICAgIGVsc2UgaWYgKG1faGlnaGxpZ2h0RGF0YS0+cmVjdCkKKyAgICAgICAg
Z2V0T3JEcmF3UmVjdEhpZ2hsaWdodCgmY29udGV4dCwgbV9kb2N1bWVudCwgbV9oaWdobGlnaHRE
YXRhLCAmaGlnaGxpZ2h0KTsKK30KKwordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3UGF1c2VX
YXJuaW5nKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKENvbG9yLCBiYWNrZ3JvdW5kQ29sb3IsICgwLCAwLCAwLCAzMSkpOworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoQ29sb3IsIHRleHRCYWNrZ3JvdW5kQ29sb3IsICgyNTUsIDI1NSwgMTk0KSk7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgYm9yZGVyQ29sb3IsICgxMjgsIDEyOCwg
MTI4KSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChpbnQsIGZvbnRIZWlnaHQsICgyNCkpOwor
CisgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5tYWluRnJhbWUoKTsKKyAgICBTZXR0aW5ncyog
c2V0dGluZ3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsKKyAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0g
ZnJhbWUtPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisKKyAgICBjb250ZXh0LnNldEZp
bGxDb2xvcihiYWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRl
eHQuZHJhd1JlY3QodmlzaWJsZVJlY3QpOworCisgICAgRm9udERlc2NyaXB0aW9uIGRlc2M7Cisg
ICAgc2V0VXBGb250RGVzY3JpcHRpb24oZGVzYywgc2V0dGluZ3MpOworICAgIGRlc2Muc2V0Q29t
cHV0ZWRTaXplKGZvbnRIZWlnaHQpOworICAgIEZvbnQgZm9udCA9IEZvbnQoZGVzYywgMCwgMCk7
CisgICAgZm9udC51cGRhdGUoMCk7CisKKyAgICBTdHJpbmcgdGV4dCA9ICJUaGUgZGVidWdnZXIg
aXMgcGF1c2VkLiI7CisgICAgVGV4dFJ1biB0ZXh0UnVuKHRleHQpOworICAgIEludFJlY3QgdGl0
bGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRS
dW4sIEludFBvaW50KCksIGZvbnRIZWlnaHQpKTsKKyAgICB0aXRsZVJlY3QuaW5mbGF0ZShyZWN0
SW5mbGF0ZVB4KTsKKyAgICB0aXRsZVJlY3Quc2V0TG9jYXRpb24oSW50UG9pbnQodmlzaWJsZVJl
Y3Qud2lkdGgoKSAvIDIgLSB0aXRsZVJlY3Qud2lkdGgoKSAvIDIsIDApKTsKKworICAgIGNvbnRl
eHQuc2V0RmlsbENvbG9yKHRleHRCYWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0Ip
OworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoYm9yZGVyQ29sb3IsIENvbG9yU3BhY2VEZXZp
Y2VSR0IpOworICAgIGNvbnRleHQuZHJhd1JlY3QodGl0bGVSZWN0KTsKKyAgICBjb250ZXh0LnNl
dEZpbGxDb2xvcihDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRl
eHQuZHJhd1RleHQoZm9udCwgdGV4dFJ1biwgSW50UG9pbnQodGl0bGVSZWN0LngoKSArIHJlY3RJ
bmZsYXRlUHgsIHRpdGxlUmVjdC55KCkgKyBmb250SGVpZ2h0KSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MWJiODg4ZWM2NjZi
NDkzMjJhZGJiZDQ0MTYxMzU4MDRmYTQxMjM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaApAQCAtMCwwICsxLDExNCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgSW5zcGVjdG9yT3ZlcmxheV9oCisjZGVmaW5lIEluc3BlY3Rvck92ZXJsYXlfaAorCisj
aW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJMYXlv
dXRUeXBlcy5oIgorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb2xvcjsKK2NsYXNzIERvY3VtZW50
OworY2xhc3MgRnJhbWVWaWV3OworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgSW5zcGVj
dG9yQ2xpZW50OworY2xhc3MgSW50UmVjdDsKK2NsYXNzIEludFNpemU7CitjbGFzcyBOb2RlOwor
Y2xhc3MgUGFnZTsKKworc3RydWN0IEhpZ2hsaWdodERhdGEgeworICAgIENvbG9yIGNvbnRlbnQ7
CisgICAgQ29sb3IgY29udGVudE91dGxpbmU7CisgICAgQ29sb3IgcGFkZGluZzsKKyAgICBDb2xv
ciBib3JkZXI7CisgICAgQ29sb3IgbWFyZ2luOworICAgIGJvb2wgc2hvd0luZm87CisKKyAgICAv
LyBFaXRoZXIgb2YgdGhlc2UgbXVzdCBiZSAwLgorICAgIFJlZlB0cjxOb2RlPiBub2RlOworICAg
IE93blB0cjxJbnRSZWN0PiByZWN0OworfTsKKworZW51bSBIaWdobGlnaHRUeXBlIHsKKyAgICBI
aWdobGlnaHRUeXBlTm9kZSwKKyAgICBIaWdobGlnaHRUeXBlUmVjdHMsCit9OworCitzdHJ1Y3Qg
SGlnaGxpZ2h0IHsKKyAgICBDb2xvciBjb250ZW50Q29sb3I7CisgICAgQ29sb3IgcGFkZGluZ0Nv
bG9yOworICAgIENvbG9yIGJvcmRlckNvbG9yOworICAgIENvbG9yIG1hcmdpbkNvbG9yOworCisg
ICAgLy8gV2hlbiB0aGUgdHlwZSBpcyBOb2RlLCB0aGVyZSBhcmUgNCBxdWFkcyAobWFyZ2luLCBi
b3JkZXIsIHBhZGRpbmcsIGNvbnRlbnQpLgorICAgIC8vIFdoZW4gdGhlIHR5cGUgaXMgUmVjdHMs
IHRoaXMgaXMganVzdCBhIGxpc3Qgb2YgcXVhZHMuCisgICAgSGlnaGxpZ2h0VHlwZSB0eXBlOwor
ICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworfTsKKworY2xhc3MgSW5zcGVjdG9yT3Zlcmxh
eSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yT3ZlcmxheT4gY3Jl
YXRlKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JPdmVybGF5KHBhZ2UsIGNsaWVudCkpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0Jik7CisgICAgdm9pZCBkcmF3
T3V0bGluZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiwgY29uc3QgQ29sb3Im
KTsKKyAgICB2b2lkIGdldEhpZ2hsaWdodChEb2N1bWVudCosIEhpZ2hsaWdodERhdGEqLCBIaWdo
bGlnaHQqKTsKKyAgICAKKyAgICB2b2lkIHNldEhpZ2hsaWdodChEb2N1bWVudCosIEhpZ2hsaWdo
dERhdGEqKTsKKyAgICB2b2lkIHNldFNob3VsZFNob3dQYXVzZVdhcm5pbmcoYm9vbCk7CisKK3By
aXZhdGU6CisgICAgSW5zcGVjdG9yT3ZlcmxheShQYWdlKiwgSW5zcGVjdG9yQ2xpZW50Kik7CisK
KyAgICB2b2lkIHVwZGF0ZSgpOworICAgIHZvaWQgZHJhd0hpZ2hsaWdodChHcmFwaGljc0NvbnRl
eHQmKTsKKyAgICB2b2lkIGRyYXdQYXVzZVdhcm5pbmcoR3JhcGhpY3NDb250ZXh0Jik7CisKKyAg
ICBQYWdlKiBtX3BhZ2U7CisgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKKyAgICBib29s
IG1fc2hvdWxkU2hvd1BhdXNlV2FybmluZzsKKyAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKKyAg
ICBIaWdobGlnaHREYXRhKiBtX2hpZ2hsaWdodERhdGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKworI2VuZGlmIC8vIERPTU5vZGVIaWdobGlnaHRlcl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4IGVmMzQ1MzdmMGUx
MThmYjVlMGNiODhjYTJmYWI1ZTNlZjYwYTM1NzcuLjk4NWNiZjUzZTUyYTk2MzUxZjg5ZjFmNjQx
YmY3OWNjYjU2OThiODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JQYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JQYWdlQWdlbnQuY3BwCkBAIC00NCwxMiArNDQsMTIgQEAKICNpbmNsdWRlICJDb29raWUuaCIK
ICNpbmNsdWRlICJDb29raWVKYXIuaCIKICNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgot
I2luY2x1ZGUgIkRPTU5vZGVIaWdobGlnaHRlci5oIgogI2luY2x1ZGUgIkRPTVBhdGNoU3VwcG9y
dC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIklkZW50aWZpZXJzRmFjdG9yeS5oIgpAQCAt
NTgsNiArNTgsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgogI2luY2x1ZGUgIklu
c3BlY3RvckZyb250ZW5kLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgi
CisjaW5jbHVkZSAiSW5zcGVjdG9yT3ZlcmxheS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclN0YXRl
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiSW5zdHJ1bWVudGlu
Z0FnZW50cy5oIgpAQCAtMjIzLDkgKzIyNCw5IEBAIGJvb2wgSW5zcGVjdG9yUGFnZUFnZW50Ojpz
aGFyZWRCdWZmZXJDb250ZW50KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIsIGNvCiAg
ICAgcmV0dXJuIGRlY29kZVNoYXJlZEJ1ZmZlcihidWZmZXIsIHRleHRFbmNvZGluZ05hbWUsIHJl
c3VsdCk7CiB9CiAKLVBhc3NPd25QdHI8SW5zcGVjdG9yUGFnZUFnZW50PiBJbnNwZWN0b3JQYWdl
QWdlbnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQ
YWdlKiBwYWdlLCBJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIEluc3BlY3RvclN0YXRl
KiBzdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIElu
c3BlY3RvckNsaWVudCogY2xpZW50KQorUGFzc093blB0cjxJbnNwZWN0b3JQYWdlQWdlbnQ+IElu
c3BlY3RvclBhZ2VBZ2VudDo6Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRp
bmdBZ2VudHMsIFBhZ2UqIHBhZ2UsIEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgSW5z
cGVjdG9yU3RhdGUqIHN0YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0
TWFuYWdlciwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQsIEluc3BlY3Rvck92ZXJsYXkqIG92ZXJs
YXkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JQYWdlQWdlbnQoaW5zdHJ1
bWVudGluZ0FnZW50cywgcGFnZSwgaW5zcGVjdG9yQWdlbnQsIHN0YXRlLCBpbmplY3RlZFNjcmlw
dE1hbmFnZXIsIGNsaWVudCkpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9yUGFn
ZUFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIHBhZ2UsIGluc3BlY3RvckFnZW50LCBzdGF0ZSwg
aW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBjbGllbnQsIG92ZXJsYXkpKTsKIH0KIAogLy8gc3RhdGlj
CkBAIC0zMDgsMTMgKzMwOSwxNCBAQCBUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBlOjpF
bnVtIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlSnNvbgogICAgIHJldHVy
biByZXNvdXJjZVR5cGVKc29uKGNhY2hlZFJlc291cmNlVHlwZShjYWNoZWRSZXNvdXJjZSkpOwog
fQogCi1JbnNwZWN0b3JQYWdlQWdlbnQ6Okluc3BlY3RvclBhZ2VBZ2VudChJbnN0cnVtZW50aW5n
QWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYWdlKiBwYWdlLCBJbnNwZWN0b3JBZ2VudCog
aW5zcGVjdG9yQWdlbnQsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIEluc3BlY3RvckNsaWVudCogY2xp
ZW50KQorSW5zcGVjdG9yUGFnZUFnZW50OjpJbnNwZWN0b3JQYWdlQWdlbnQoSW5zdHJ1bWVudGlu
Z0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgUGFnZSogcGFnZSwgSW5zcGVjdG9yQWdlbnQq
IGluc3BlY3RvckFnZW50LCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIEluamVjdGVk
U2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JDbGllbnQqIGNs
aWVudCwgSW5zcGVjdG9yT3ZlcmxheSogb3ZlcmxheSkKICAgICA6IEluc3BlY3RvckJhc2VBZ2Vu
dDxJbnNwZWN0b3JQYWdlQWdlbnQ+KCJQYWdlIiwgaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVj
dG9yU3RhdGUpCiAgICAgLCBtX3BhZ2UocGFnZSkKICAgICAsIG1faW5zcGVjdG9yQWdlbnQoaW5z
cGVjdG9yQWdlbnQpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlcihpbmplY3RlZFNjcmlw
dE1hbmFnZXIpCiAgICAgLCBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX2Zyb250ZW5kKDApCisg
ICAgLCBtX292ZXJsYXkob3ZlcmxheSkKICAgICAsIG1fbGFzdFNjcmlwdElkZW50aWZpZXIoMCkK
ICAgICAsIG1fbGFzdFBhaW50Q29udGV4dCgwKQogICAgICwgbV9kaWRMb2FkRXZlbnRGaXJlKGZh
bHNlKQpAQCAtODQzLDYgKzg0NSwxMSBAQCBEb2N1bWVudExvYWRlciogSW5zcGVjdG9yUGFnZUFn
ZW50Ojphc3NlcnREb2N1bWVudExvYWRlcihFcnJvclN0cmluZyogZXJyb3JTdHJpbgogICAgIHJl
dHVybiBkb2N1bWVudExvYWRlcjsKIH0KIAordm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRyYXdJ
bnNwZWN0b3JPdmVybGF5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBtX292ZXJs
YXktPmRyYXcoY29udGV4dCk7Cit9CisKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojpsb2FkZXJE
ZXRhY2hlZEZyb21GcmFtZShEb2N1bWVudExvYWRlciogbG9hZGVyKQogewogICAgIEhhc2hNYXA8
RG9jdW1lbnRMb2FkZXIqLCBTdHJpbmc+OjppdGVyYXRvciBpdGVyYXRvciA9IG1fbG9hZGVyVG9J
ZGVudGlmaWVyLmZpbmQobG9hZGVyKTsKQEAgLTg4NSw3ICs4OTIsNyBAQCB2b2lkIEluc3BlY3Rv
clBhZ2VBZ2VudDo6ZGlkUGFpbnQoKQogICAgICAgICBDb2xvcigwLCAwLCAweEZGLCAweDNGKSwK
ICAgICB9OwogCi0gICAgRE9NTm9kZUhpZ2hsaWdodGVyOjpkcmF3T3V0bGluZSgqbV9sYXN0UGFp
bnRDb250ZXh0LCBtX2xhc3RQYWludFJlY3QsIGNvbG9yc1tjb2xvclNlbGVjdG9yKysgJSBXVEZf
QVJSQVlfTEVOR1RIKGNvbG9ycyldKTsKKyAgICBtX292ZXJsYXktPmRyYXdPdXRsaW5lKCptX2xh
c3RQYWludENvbnRleHQsIG1fbGFzdFBhaW50UmVjdCwgY29sb3JzW2NvbG9yU2VsZWN0b3IrKyAl
IFdURl9BUlJBWV9MRU5HVEgoY29sb3JzKV0pOwogCiAgICAgbV9sYXN0UGFpbnRDb250ZXh0ID0g
MDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdl
QWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaApp
bmRleCA5NjRiYzg1ZmM2MzY0OGFmMzhmMmRjMTJmYzgzZjc5NzFiOTNhNjYzLi43OTg1MDhhOTY4
NWU2ZTZjYjQ0ZDBhYjMwZmU1MTM3NzEwZmNhN2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCkBAIC00OCwxMSArNDgsMTMgQEAgY2xhc3MgRE9N
V3JhcHBlcldvcmxkOwogY2xhc3MgRG9jdW1lbnRMb2FkZXI7CiBjbGFzcyBGcmFtZTsKIGNsYXNz
IEZyb250ZW5kOworY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyOwogY2xhc3MgSW5zcGVjdG9yQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JBcnJheTsKIGNs
YXNzIEluc3BlY3RvckNsaWVudDsKIGNsYXNzIEluc3BlY3Rvck9iamVjdDsKK2NsYXNzIEluc3Bl
Y3Rvck92ZXJsYXk7CiBjbGFzcyBJbnNwZWN0b3JTdGF0ZTsKIGNsYXNzIEluc3RydW1lbnRpbmdB
Z2VudHM7CiBjbGFzcyBLVVJMOwpAQCAtNzcsNyArNzksNyBAQCBwdWJsaWM6CiAgICAgICAgIE90
aGVyUmVzb3VyY2UKICAgICB9OwogCi0gICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yUGFn
ZUFnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyosIFBhZ2UqLCBJbnNwZWN0b3JBZ2Vu
dCosIEluc3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9yQ2xp
ZW50Kik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yUGFnZUFnZW50PiBjcmVhdGUo
SW5zdHJ1bWVudGluZ0FnZW50cyosIFBhZ2UqLCBJbnNwZWN0b3JBZ2VudCosIEluc3BlY3RvclN0
YXRlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9yQ2xpZW50KiwgSW5zcGVjdG9y
T3ZlcmxheSopOwogCiAgICAgc3RhdGljIGJvb2wgY2FjaGVkUmVzb3VyY2VDb250ZW50KENhY2hl
ZFJlc291cmNlKiwgU3RyaW5nKiByZXN1bHQsIGJvb2wqIGJhc2U2NEVuY29kZWQpOwogICAgIHN0
YXRpYyBib29sIHNoYXJlZEJ1ZmZlckNvbnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBj
b25zdCBTdHJpbmcmIHRleHRFbmNvZGluZ05hbWUsIGJvb2wgd2l0aEJhc2U2NEVuY29kZSwgU3Ry
aW5nKiByZXN1bHQpOwpAQCAtMTM1LDkgKzEzNywxMCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGxv
YWRlcklkKERvY3VtZW50TG9hZGVyKik7CiAgICAgRnJhbWUqIGFzc2VydEZyYW1lKEVycm9yU3Ry
aW5nKiwgU3RyaW5nIGZyYW1lSWQpOwogICAgIHN0YXRpYyBEb2N1bWVudExvYWRlciogYXNzZXJ0
RG9jdW1lbnRMb2FkZXIoRXJyb3JTdHJpbmcqLCBGcmFtZSopOworICAgIHZvaWQgZHJhd0luc3Bl
Y3Rvck92ZXJsYXkoR3JhcGhpY3NDb250ZXh0Jik7CiAKIHByaXZhdGU6Ci0gICAgSW5zcGVjdG9y
UGFnZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBQYWdlKiwgSW5zcGVjdG9yQWdlbnQqLCBJ
bnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3RvckNsaWVudCop
OworICAgIEluc3BlY3RvclBhZ2VBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgUGFnZSosIElu
c3BlY3RvckFnZW50KiwgSW5zcGVjdG9yU3RhdGUqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJ
bnNwZWN0b3JDbGllbnQqLCBJbnNwZWN0b3JPdmVybGF5Kik7CiAgICAgdm9pZCB1cGRhdGVWaWV3
TWV0cmljcyhpbnQsIGludCwgZG91YmxlLCBib29sKTsKIAogICAgIFBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6OlBhZ2U6OkZyYW1lPiBidWlsZE9iamVjdEZvckZyYW1lKEZyYW1lKik7CkBAIC0xNDcs
NiArMTUwLDcgQEAgcHJpdmF0ZToKICAgICBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIG1faW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyOwogICAgIEluc3BlY3RvckNsaWVudCogbV9jbGllbnQ7CiAgICAgSW5z
cGVjdG9yRnJvbnRlbmQ6OlBhZ2UqIG1fZnJvbnRlbmQ7CisgICAgSW5zcGVjdG9yT3ZlcmxheSog
bV9vdmVybGF5OwogICAgIGxvbmcgbV9sYXN0U2NyaXB0SWRlbnRpZmllcjsKICAgICBTdHJpbmcg
bV9wZW5kaW5nU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZE9uY2U7CiAgICAgU3RyaW5nIG1fc2NyaXB0
VG9FdmFsdWF0ZU9uTG9hZE9uY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VE
ZWJ1Z2dlckFnZW50LmNwcAppbmRleCBhNTg2ZWRmM2ZkNDEwOGM5ZDA3OTJjMGJkZmViZTFlODNm
YWZmODZhLi5jMWU2Mjc1M2QyMTlkYWE5NjAwNzkwYjY1YmI3MThjODQzZjhjZjljIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAKQEAgLTQwLDEz
ICs0MCwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8UGFnZURlYnVn
Z2VyQWdlbnQ+IFBhZ2VEZWJ1Z2dlckFnZW50OjpjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBQYWdl
KiBpbnNwZWN0ZWRQYWdlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFu
YWdlcikKK1Bhc3NPd25QdHI8UGFnZURlYnVnZ2VyQWdlbnQ+IFBhZ2VEZWJ1Z2dlckFnZW50Ojpj
cmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9y
U3RhdGUqIGluc3BlY3RvclN0YXRlLCBQYWdlKiBpbnNwZWN0ZWRQYWdlLCBJbmplY3RlZFNjcmlw
dE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgSW5zcGVjdG9yT3ZlcmxheSogb3Zlcmxh
eSkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBhZ2VEZWJ1Z2dlckFnZW50KGluc3RydW1l
bnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlLCBpbnNwZWN0ZWRQYWdlLCBpbmplY3RlZFNjcmlw
dE1hbmFnZXIpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBhZ2VEZWJ1Z2dlckFnZW50KGlu
c3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlLCBpbnNwZWN0ZWRQYWdlLCBpbmplY3Rl
ZFNjcmlwdE1hbmFnZXIsIG92ZXJsYXkpKTsKIH0KIAotUGFnZURlYnVnZ2VyQWdlbnQ6OlBhZ2VE
ZWJ1Z2dlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIElu
c3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgUGFnZSogaW5zcGVjdGVkUGFnZSwgSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCi0gICAgOiBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlLCBpbmplY3Rl
ZFNjcmlwdE1hbmFnZXIpCitQYWdlRGVidWdnZXJBZ2VudDo6UGFnZURlYnVnZ2VyQWdlbnQoSW5z
dHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yU3RhdGUqIGlu
c3BlY3RvclN0YXRlLCBQYWdlKiBpbnNwZWN0ZWRQYWdlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIq
IGluamVjdGVkU2NyaXB0TWFuYWdlciwgSW5zcGVjdG9yT3ZlcmxheSogb3ZlcmxheSkKKyAgICA6
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3Rh
dGUsIGluamVjdGVkU2NyaXB0TWFuYWdlciwgb3ZlcmxheSkKICAgICAsIG1faW5zcGVjdGVkUGFn
ZShpbnNwZWN0ZWRQYWdlKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURl
YnVnZ2VyQWdlbnQuaAppbmRleCA5ZGJkNTEzZjlmMWEyOGJiOTg0MjQ5MTM1NzgxNDg2YzczYzMy
NjE4Li4wNmYxNzc3ODE4N2NhMDMxMTdhZWEwYTQ4NjYyYzQ2MmYwNTUxYTU1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuaApAQCAtNDQsNyArNDQsNyBA
QCBjbGFzcyBQYWdlRGVidWdnZXJBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYWdlRGVidWdnZXJBZ2VudCk7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8UGFn
ZURlYnVnZ2VyQWdlbnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yU3Rh
dGUqLCBQYWdlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKik7CisgICAgc3RhdGljIFBhc3NPd25Q
dHI8UGFnZURlYnVnZ2VyQWdlbnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVj
dG9yU3RhdGUqLCBQYWdlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9yT3Zlcmxh
eSopOwogICAgIHZpcnR1YWwgflBhZ2VEZWJ1Z2dlckFnZW50KCk7CiAKIHByaXZhdGU6CkBAIC01
Niw3ICs1Niw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIEluamVjdGVkU2NyaXB0IGluamVj
dGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyosIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4
dElkKTsKIAotICAgIFBhZ2VEZWJ1Z2dlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNw
ZWN0b3JTdGF0ZSosIFBhZ2UqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKKyAgICBQYWdlRGVi
dWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yU3RhdGUqLCBQYWdlKiwg
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9yT3ZlcmxheSopOwogICAgIFBhZ2UqIGNv
bnN0IG1faW5zcGVjdGVkUGFnZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcAppbmRleCBjNzVhZjRhNmU0YzBmNGU5OTZmMzVkOGEz
YTc4OTE2MTUzMTcxNjJmLi4xNTg5ZmMzMGY0NTY0ZDkzZTI3YmYyN2VhYjU1NzVkNGI2MDZhNTE3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyRGVidWdnZXJBZ2Vu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckRlYnVnZ2VyQWdlbnQu
Y3BwCkBAIC04Niw3ICs4Niw3IEBAIFBhc3NPd25QdHI8V29ya2VyRGVidWdnZXJBZ2VudD4gV29y
a2VyRGVidWdnZXJBZ2VudDo6Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqCiB9CiAKIFdvcmtl
ckRlYnVnZ2VyQWdlbnQ6OldvcmtlckRlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBXb3Jr
ZXJDb250ZXh0KiBpbnNwZWN0ZWRXb3JrZXJDb250ZXh0LCBJbmplY3RlZFNjcmlwdE1hbmFnZXIq
IGluamVjdGVkU2NyaXB0TWFuYWdlcikKLSAgICA6IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoaW5z
dHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdlcikK
KyAgICA6IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVj
dG9yU3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdlciwgMCkKICAgICAsIG1fc2NyaXB0RGVidWdT
ZXJ2ZXIoaW5zcGVjdGVkV29ya2VyQ29udGV4dCkKICAgICAsIG1faW5zcGVjdGVkV29ya2VyQ29u
dGV4dChpbnNwZWN0ZWRXb3JrZXJDb250ZXh0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCmluZGV4IDE4ODE3NTkzNzA1NTBhZTFlNDc3YTNlMTVlOGFhZWNkYTM2ZDBmMzEuLmQ0
NmU0NjY1Y2MxNjRiNzlmNzgxMGVkMmFhYzE1NjM4MDkxOTAwNzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJDbGllbnRSZWN0
LmgiCiAjaW5jbHVkZSAiQ2xpZW50UmVjdExpc3QuaCIKICNpbmNsdWRlICJDb21wb3NlZFNoYWRv
d1RyZWVXYWxrZXIuaCIKLSNpbmNsdWRlICJET01Ob2RlSGlnaGxpZ2h0ZXIuaCIKICNpbmNsdWRl
ICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1
bWVudE1hcmtlci5oIgpAQCAtNDksNiArNDgsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb3VudGVycy5oIgogI2luY2x1ZGUgIkluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIkluc3BlY3Rvck92ZXJsYXkuaCIKICNp
bmNsdWRlICJJbnN0cnVtZW50aW5nQWdlbnRzLmgiCiAjaW5jbHVkZSAiSW50ZXJuYWxTZXR0aW5n
cy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152553</attachid>
            <date>2012-07-16 09:52:52 -0700</date>
            <delta_ts>2012-07-16 10:25:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90880-20120716205250.patch</filename>
            <type>text/plain</type>
            <size>100723</size>
            <attacher name="Sergey Rogulenko">rogulenko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTZiZmVjMmM0ZGZkYTI1
NmYwZDlhM2U2Zjc4NzllYmY2YjVkNzY1ZC4uYTdlYzVlM2Q0OWI3NjkxZjgyYWI3NDc4OTU1MTY4
YTM3ZGU1OTA4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDEyLTA3LTE2ICBTZXJn
ZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogYWRkaW5nIHBhdXNlIGljb24gZm9yIEphdmFTY3JpcHQgZGVidWdnaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg4MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yZWQgRE9NTm9k
ZUhpZ2hsaWdodGVyIGludG8gSW5zcGVjdG9yT3ZlcmxheSBjbGFzcyBhbmQgYWRkZWQgYSBmZWF0
dXJlIHRvIHNob3cgYSAicGF1c2UiIHNjcmVlbiB3aGVuCisgICAgICAgIHRoZSBKYXZhc2NyaXB0
IGRlYnVnZ2VyIGlzIHBhdXNlZC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JBbGxJbk9uZS5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjpkcmF3SGlnaGxpZ2h0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJbnNwZWN0b3JDb250
cm9sbGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6Okluc3BlY3RvckRPTUFnZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmhpZGVIaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldEhpZ2hsaWdodCk6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckRPTUFnZW50OjpjcmVhdGUpOgorICAgICAgICAoSW5zcGVjdG9yRE9NQWdl
bnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSk6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoSW5zcGVjdG9yRGVidWdnZXJBZ2VudCk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JPdmVybGF5OjpJbnNwZWN0b3JPdmVybGF5KToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6ZHJhdyk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3T3V0bGluZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JPdmVybGF5OjpnZXRIaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yT3ZlcmxheTo6c2V0SGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92
ZXJsYXk6OnNldFNob3VsZFNob3dQYXVzZVdhcm5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yT3ZlcmxheTo6dXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJs
YXk6OmRyYXdIaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6
ZHJhd1BhdXNlV2FybmluZyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXku
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0
ZXIuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSGlnaGxpZ2h0RGF0YSk6CisgICAg
ICAgIChIaWdobGlnaHQpOgorICAgICAgICAoSW5zcGVjdG9yT3ZlcmxheSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpjcmVhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFn
ZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpJbnNw
ZWN0b3JQYWdlQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50Ojpk
cmF3SW5zcGVjdG9yT3ZlcmxheSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6ZGlkUGFpbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JQYWdlQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlRGVidWdn
ZXJBZ2VudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50OjpQ
YWdlRGVidWdnZXJBZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50
Lmg6CisgICAgICAgIChQYWdlRGVidWdnZXJBZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL1dv
cmtlckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyRGVidWdnZXJB
Z2VudDo6V29ya2VyRGVidWdnZXJBZ2VudCk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMu
Y3BwOgorCiAyMDEyLTA3LTE1ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBGaXggbWFrZSBkaXN0Y2hlY2suCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CmluZGV4IDYwM2NlMjE5NmMxODIyODQzNDViZGM3ZmJlM2RhOTZlMTIwYjA0NGYu
LjRjMWY5ZTg5OTBiOGViZjY0Yjk2NTA1YTY1ZGFhNzIzNjFjN2QwNDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CkBAIC05NDAsNyArOTQwLDYgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGluc3Bl
Y3Rvci9Db25zb2xlTWVzc2FnZS5jcHAKICAgICBpbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxz
LmNwcAogICAgIGluc3BlY3Rvci9ET01FZGl0b3IuY3BwCi0gICAgaW5zcGVjdG9yL0RPTU5vZGVI
aWdobGlnaHRlci5jcHAKICAgICBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAogICAgIGlu
c3BlY3Rvci9JZGVudGlmaWVyc0ZhY3RvcnkuY3BwCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0LmNwcApAQCAtOTcyLDYgKzk3MSw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBpbnNw
ZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQu
Y3BwCisgICAgaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNl
QWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDM3MjEzNWUwOGQxNTdlY2JjNDhmNjhlNzM2OWJm
MTEyMDVhMmMxZTIuLjNjYmJkNmM5YjY3YmExMTE5MmEyNjE5NmRjYzM1MjlkYjI4YTdjNTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMjY5Myw4ICsyNjkzLDYgQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0
aWxzLmggXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01FZGl0b3IuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NRWRpdG9yLmggXAotCVNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
RE9NTm9kZUhpZ2hsaWdodGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRj
aFN1cHBvcnQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0
LmggXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JZGVudGlmaWVyc0ZhY3RvcnkuY3BwIFwK
QEAgLTI3NTksNiArMjc1Nyw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuaCBcCisJU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yT3ZlcmxheS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFn
ZUFnZW50LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2Vu
dC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5j
cHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkKaW5kZXggNWRhYzJiMDVkMDdjZDZhNjY3OGYyN2M0ZGM5NmYxNTJkY2Ji
OTI0Ni4uZmUwNGMxOWUzNGFiYTkyMjI1MTU5MDFjZGVjMDkyYjAxYzFhYTM4MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpCkBAIC04OTcsNyArODk3LDYgQEAgU09VUkNFUyArPSBcCiAgICAgaW5zcGVjdG9yL0NvbnNv
bGVNZXNzYWdlLmNwcCBcCiAgICAgaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlscy5jcHAgXAog
ICAgIGluc3BlY3Rvci9ET01FZGl0b3IuY3BwIFwKLSAgICBpbnNwZWN0b3IvRE9NTm9kZUhpZ2hs
aWdodGVyLmNwcCBcCiAgICAgaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAgXAogICAgIGlu
c3BlY3Rvci9JZGVudGlmaWVyc0ZhY3RvcnkuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHQuY3BwIFwKQEAgLTkyNiw2ICs5MjUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBpbnNwZWN0
b3IvSW5zcGVjdG9ySGlzdG9yeS5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwIFwK
KyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNw
ZWN0b3JQYWdlQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcCBcCkBAIC0y
MDYwLDcgKzIwNjAsNiBAQCBIRUFERVJTICs9IFwKICAgICBpbnNwZWN0b3IvQ29uc29sZU1lc3Nh
Z2UuaCBcCiAgICAgaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlscy5oIFwKICAgICBpbnNwZWN0
b3IvRE9NRWRpdG9yLmggXAotICAgIGluc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaCBcCiAg
ICAgaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5oIFwKICAgICBpbnNwZWN0b3IvSWRlbnRpZmll
cnNGYWN0b3J5LmggXAogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oIFwKQEAgLTIwOTEs
NiArMjA5MCw3IEBAIEhFQURFUlMgKz0gXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JIaXN0b3J5
LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBcCiAgICAgaW5z
cGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmggXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JP
dmVybGF5LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaCBcCiAgICAgaW5z
cGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3Rv
clJlc291cmNlQWdlbnQuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZjNmNzdlYTQzYWRhYzViMTlm
MDliM2UwY2FkNDNiYWU1YTQ3OTE1NC4uNTUzZGI2ZTY1NTJlNTI4ZTRjYTc3OWQwYmI3MTI2N2Fl
ZjU5MjQwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjc4MSw4ICsyNzgxLDYgQEAKICAgICAgICAg
ICAgICdpbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxzLmgnLAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9ET01FZGl0b3IuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvRE9NRWRpdG9yLmgn
LAotICAgICAgICAgICAgJ2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwJywKLSAgICAg
ICAgICAgICdpbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmgnLAogICAgICAgICAgICAgJ2lu
c3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvRE9N
UGF0Y2hTdXBwb3J0LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JZGVudGlmaWVyc0ZhY3Rv
cnkuY3BwJywKQEAgLTI4NDAsNiArMjgzOCw4IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0lu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVj
dG9yTWVtb3J5QWdlbnQuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yTWVt
b3J5QWdlbnQuaCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3Bw
JywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oJywKICAgICAgICAg
ICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcCcsCiAgICAgICAgICAgICAnaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5z
cGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagppbmRleCA1M2IyMjRjM2I0OThhNzA0Y2VhMzI4NzgyMzk4YTZjNjg1
YzU4YjRkLi43ZmEyYjUxODUzOTNhMzYxZDY0NWI4Nzg4YzlhM2NiMzk5OTIxMTczIDEwMDc1NQot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNzM0NTEsMzAg
KzczNDUxLDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0
aD0iLi5caW5zcGVjdG9yXERPTU5vZGVIaWdobGlnaHRlci5jcHAiCi0JCQkJPgotCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZy
b21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgotCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgotCQkJCQlFeGNsdWRlZEZy
b21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJPC9GaWxlPgot
CQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxET01Ob2RlSGlnaGxpZ2h0
ZXIuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aW5zcGVjdG9yXERPTVBhdGNoU3VwcG9ydC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgpAQCAtNzQyNDcsNiArNzQyMjMsMzAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3Rvck92ZXJsYXkuY3BwIgor
CQkJCT4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIK
KwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIK
KwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3Jc
SW5zcGVjdG9yT3ZlcmxheS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVs
YXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yUGFnZUFnZW50LmNwcCIKIAkJCQk+CiAJ
CQkJPEZpbGVDb25maWd1cmF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRl
eCBkYTQ3MzA5MTk4ZWJiYzY3ZjczODM2ZGE1YTQ5YWEzOWEzNWNkMTY4Li44ZGFlOGQwZDgzNjBk
ZTE1NWVkYjhhZjNkZmFkNzI0ZDQ1ZGVhZWI2Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE0MzMsOCArMTQzMyw2IEBACiAJCTRFMTk1OTJD
MEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXZhbHVhdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RTE5NTkyNjBBMzlEQUNDMDAyMjBGRTUg
LyogTWVkaWFRdWVyeUV2YWx1YXRvci5oICovOyB9OwogCQk0RTE5NTkyRDBBMzlEQUNDMDAyMjBG
RTUgLyogTWVkaWFRdWVyeUV4cC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0RTE5NTkyNzBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV4cC5j
cHAgKi87IH07CiAJCTRFMTk1OTJFMEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXhwLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RTE5NTkyODBB
MzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV4cC5oICovOyB9OwotCQk0RjE0NDIyODEzMzlG
RDYyMDBFMEQ2RjggLyogRE9NTm9kZUhpZ2hsaWdodGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGMTQ0MjI2MTMzOUZENjIwMEUwRDZGOCAvKiBE
T01Ob2RlSGlnaGxpZ2h0ZXIuY3BwICovOyB9OwotCQk0RjE0NDIyOTEzMzlGRDYyMDBFMEQ2Rjgg
LyogRE9NTm9kZUhpZ2hsaWdodGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0RjE0NDIyNzEzMzlGRDYyMDBFMEQ2RjggLyogRE9NTm9kZUhpZ2hsaWdo
dGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NEYxNTM0REUxMUI1MzJFQzAwMjFGRDg2IC8qIEVkaXRpbmdCZWhhdmlvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEYxNTM0REQxMUI1MzJFQzAwMjFG
RDg2IC8qIEVkaXRpbmdCZWhhdmlvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTRGMTUzNEUwMTFCNTMzMDIwMDIxRkQ4NiAvKiBFZGl0aW5nQmVo
YXZpb3JUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNEYxNTM0REYxMUI1MzMwMjAwMjFGRDg2IC8qIEVkaXRpbmdCZWhhdmlvclR5cGVzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNEYyRDIwNTQx
MkVBRTdCMzAwNUMyODc0IC8qIEluc3BlY3RvckFnZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RjJEMjA1MjEyRUFFN0IzMDA1QzI4NzQgLyogSW5z
cGVjdG9yQWdlbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMTk0Nyw2ICsxOTQ1LDggQEAKIAkJN0IxRUEwQ0YxNTc2QzVCNTAwNjAxNzdEIC8q
IEpTVW5kb01hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdCMUVBMENEMTU3NkM1QjUwMDYwMTc3RCAvKiBKU1VuZG9NYW5hZ2VyLmggKi87IH07
CiAJCTdCOTE4NEQyMTU3NThFNDIwMDkyQUE5MyAvKiBVbmRvTWFuYWdlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjkxODRDRjE1NzU4RTQyMDA5
MkFBOTMgLyogVW5kb01hbmFnZXIuY3BwICovOyB9OwogCQk3QjkxODREMzE1NzU4RTQyMDA5MkFB
OTMgLyogVW5kb01hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdCOTE4NEQwMTU3NThFNDIwMDkyQUE5MyAvKiBVbmRvTWFuYWdlci5oICovOyB9
OworCQk3QzUyMkQ0QjE1QjQ3N0U4MDA5QjdDOTUgLyogSW5zcGVjdG9yT3ZlcmxheS5jcHAgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M1MjJENDkxNUI0NzdFODAwOUI3Qzk1
IC8qIEluc3BlY3Rvck92ZXJsYXkuY3BwICovOyB9OworCQk3QzUyMkQ0QzE1QjQ3OEIyMDA5QjdD
OTUgLyogSW5zcGVjdG9yT3ZlcmxheS5oICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdDNTIyRDRBMTVCNDc3RTgwMDlCN0M5NSAvKiBJbnNwZWN0b3JPdmVybGF5LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0UzM0NEMDExMjdG
MzQwRDAwQkU4RjE3IC8qIFB1cmdlUHJpb3JpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFMzNDRDAwMTI3RjM0MEQwMEJFOEYxNyAvKiBQdXJnZVBy
aW9yaXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJN0UzN0VGMkUxMzM5MjA4ODAwQjI5MjUwIC8qIFN1YnJlc291cmNlTG9hZGVyQ0YuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0UzN0VGMkQxMzM5
MjA4ODAwQjI5MjUwIC8qIFN1YnJlc291cmNlTG9hZGVyQ0YuY3BwICovOyB9OwogCQk3RTk5QUY1
MTBCMTM4NDY0NjhGQjAxQTUgLyogV2luZG93Rm9jdXNBbGxvd2VkSW5kaWNhdG9yLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFOTlBRjUyMEIxMzg0
NjQ2OEZCMDFBNSAvKiBXaW5kb3dGb2N1c0FsbG93ZWRJbmRpY2F0b3IuY3BwICovOyB9OwpAQCAt
ODUyOCw4ICs4NTI4LDYgQEAKIAkJNEUxOTU5MjYwQTM5REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVl
cnlFdmFsdWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUXVl
cnlFdmFsdWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEUxOTU5MjcwQTM5
REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVlcnlFeHAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IE1lZGlhUXVlcnlFeHAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0RTE5NTkyODBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV4cC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFRdWVyeUV4cC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk0RjE0NDIyNjEzMzlGRDYyMDBFMEQ2RjggLyogRE9NTm9kZUhp
Z2hsaWdodGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTU5v
ZGVIaWdobGlnaHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTRGMTQ0MjI3
MTMzOUZENjIwMEUwRDZGOCAvKiBET01Ob2RlSGlnaGxpZ2h0ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRE9NTm9kZUhpZ2hsaWdodGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTRGMTUzNEREMTFCNTMyRUMwMDIxRkQ4NiAvKiBFZGl0aW5nQmVoYXZpb3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWRpdGluZ0JlaGF2aW9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRGMTUzNERGMTFCNTMzMDIwMDIxRkQ4NiAvKiBF
ZGl0aW5nQmVoYXZpb3JUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBF
ZGl0aW5nQmVoYXZpb3JUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0RjJE
MjA1MjEyRUFFN0IzMDA1QzI4NzQgLyogSW5zcGVjdG9yQWdlbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTkwODMsNiArOTA4MSw4IEBACiAJCTdCOTE4NENGMTU3NThFNDIwMDkyQUE5MyAv
KiBVbmRvTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBV
bmRvTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCOTE4NEQwMTU3
NThFNDIwMDkyQUE5MyAvKiBVbmRvTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBVbmRvTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qjkx
ODREMTE1NzU4RTQyMDA5MkFBOTMgLyogVW5kb01hbmFnZXIuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFVuZG9NYW5hZ2VyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M1
MjJENDkxNUI0NzdFODAwOUI3Qzk1IC8qIEluc3BlY3Rvck92ZXJsYXkuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yT3ZlcmxheS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDNTIyRDRBMTVCNDc4QjIwMDlCN0M5NSAvKiBJbnNwZWN0
b3JPdmVybGF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3Rvck92
ZXJsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M2MDEyODA2MDA3OEJCNzBF
MzY3QTk1IC8qIEROU1Jlc29sdmVRdWV1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBETlNSZXNvbHZlUXVldWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3RTMzQ0QwMDEyN0YzNDBEMDBCRThGMTcgLyogUHVyZ2VQcmlvcml0eS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXJnZVByaW9yaXR5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdFMzdFRjJEMTMzOTIwODgwMEIyOTI1MCAvKiBTdWJyZXNvdXJjZUxv
YWRlckNGLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFN1YnJlc291
cmNlTG9hZGVyQ0YuY3BwOyBwYXRoID0gY2YvU3VicmVzb3VyY2VMb2FkZXJDRi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDQ2NCw4ICsxNDQ2NCw2IEBACiAJCQkJNTkxMDJG
QkExNDMyN0QzQjAwM0M5RDA0IC8qIENvbnRlbnRTZWFyY2hVdGlscy5oICovLAogCQkJCTdBQUJB
MjU3MTRCQzYxMzMwMEFBOUExMSAvKiBET01FZGl0b3IuY3BwICovLAogCQkJCTdBQUJBMjU4MTRC
QzYxMzMwMEFBOUExMSAvKiBET01FZGl0b3IuaCAqLywKLQkJCQk0RjE0NDIyNjEzMzlGRDYyMDBF
MEQ2RjggLyogRE9NTm9kZUhpZ2hsaWdodGVyLmNwcCAqLywKLQkJCQk0RjE0NDIyNzEzMzlGRDYy
MDBFMEQ2RjggLyogRE9NTm9kZUhpZ2hsaWdodGVyLmggKi8sCiAJCQkJN0E1NDg4MTYxNEU0MzJB
MTAwNkFFMDVBIC8qIERPTVBhdGNoU3VwcG9ydC5jcHAgKi8sCiAJCQkJN0E1NDg4MTUxNEU0MzJB
MTAwNkFFMDVBIC8qIERPTVBhdGNoU3VwcG9ydC5oICovLAogCQkJCTU5MTNBMjNGMTNENDlFQkEw
MEY1QjA1QyAvKiBJZGVudGlmaWVyc0ZhY3RvcnkuY3BwICovLApAQCAtMTQ1MzcsNiArMTQ1MzUs
OCBAQAogCQkJCTIwRDYyOTI1MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb24uaCAqLywKIAkJCQk3QUE1MUREMzE0ODUwNkE5MDBBRDI3NTIgLyogSW5zcGVjdG9yTWVt
b3J5QWdlbnQuY3BwICovLAogCQkJCTdBQTUxREQ0MTQ4NTA2QTkwMEFEMjc1MiAvKiBJbnNwZWN0
b3JNZW1vcnlBZ2VudC5oICovLAorCQkJCTdDNTIyRDQ5MTVCNDc3RTgwMDlCN0M5NSAvKiBJbnNw
ZWN0b3JPdmVybGF5LmNwcCAqLywKKwkJCQk3QzUyMkQ0QTE1QjQ3OEIyMDA5QjdDOTUgLyogSW5z
cGVjdG9yT3ZlcmxheS5oICovLAogCQkJCTRGNkZERDYyMTM0MURFREQwMDFGOEVFMyAvKiBJbnNw
ZWN0b3JQYWdlQWdlbnQuY3BwICovLAogCQkJCTRGNkZERDYzMTM0MURFREQwMDFGOEVFMyAvKiBJ
bnNwZWN0b3JQYWdlQWdlbnQuaCAqLywKIAkJCQk5RjBENkIyQzEyMUJGRUJBMDA2QzAyODggLyog
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAgKi8sCkBAIC0yMjYxOCw3ICsyMjYxOCw2IEBACiAJ
CQkJODVFNzExRDIwQUM1RDUzNTAwNTMyNzBGIC8qIERPTU5hbWVkTm9kZU1hcEludGVybmFsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NTNCRjREQjBBQkI2QjU1MDA4NjQ3QkIgLyogRE9NTm9kZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODU0MDc1MjYwQUQ2QzY2NzAwNjIwQzU3IC8qIERPTU5vZGVG
aWx0ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTRGMTQ0MjI5MTMzOUZENjIwMEUwRDZGOCAvKiBE
T01Ob2RlSGlnaGxpZ2h0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1QjQ5OEZCMEFEQjM0MDIw
MDkyNUNCQiAvKiBET01Ob2RlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1NTI2QzM3
MEFCMEExN0UwMDAzMDJFQSAvKiBET01Ob2RlSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg1MEI0MUMyMEFEOUU3RTcwMEE2RUQ0RiAvKiBET01Ob2RlSXRlcmF0b3JJbnRlcm5hbC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yMzQ3Nyw2ICsyMzQ3Niw3IEBACiAJCQkJN0FDRDg4RDQxNEMwOEJE
NjAwODRFREQyIC8qIEluc3BlY3RvckluZGV4ZWREQkFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyMEQ2MjkyNzEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3QUE1MURENjE0ODUwNkE5MDBBRDI3NTIgLyogSW5zcGVjdG9y
TWVtb3J5QWdlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDNTIyRDRDMTVCNDc4QjIwMDlCN0M5
NSAvKiBJbnNwZWN0b3JPdmVybGF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk0RjZGREQ2NTEzNDFE
RUREMDAxRjhFRTMgLyogSW5zcGVjdG9yUGFnZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5
RjBENkIyRjEyMUJGRUJBMDA2QzAyODggLyogSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODJBQjE3NzYxMjVDODI2NzAwQzUwNjlEIC8qIEluc3BlY3RvclJlc291
cmNlQWdlbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjYwMjYsNyArMjYwMjYsNiBAQAogCQkJCTg1
QzdGNUMwMEFBRkI3Q0QwMDQwMTRERCAvKiBET01NdXRhdGlvbkV2ZW50Lm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODUxOERENzkwQTlDRjMxQjAwOTFCN0E2IC8qIERPTU5hbWVkTm9kZU1hcC5tbSBp
biBTb3VyY2VzICovLAogCQkJCTg1M0JGNERDMEFCQjZCNTUwMDg2NDdCQiAvKiBET01Ob2RlLm1t
IGluIFNvdXJjZXMgKi8sCi0JCQkJNEYxNDQyMjgxMzM5RkQ2MjAwRTBENkY4IC8qIERPTU5vZGVI
aWdobGlnaHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTUyNkMzODBBQjBBMTdFMDAwMzAy
RUEgLyogRE9NTm9kZUl0ZXJhdG9yLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODVBQ0FBOEUwQTlC
NzU5QzAwNjcxRTkwIC8qIERPTU5vZGVMaXN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODVDQTk2
RUIwQTk2MjRFOTAwNjkwQ0NGIC8qIERPTU5vdGF0aW9uLm1tIGluIFNvdXJjZXMgKi8sCkBAIC0y
NjYyOCw2ICsyNjYyNyw3IEBACiAJCQkJN0FDRDg4RDMxNEMwOEJENjAwODRFREQyIC8qIEluc3Bl
Y3RvckluZGV4ZWREQkFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTIwRDYyOTI2MTI1MzY5
MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJN0FBNTFERDUxNDg1MDZBOTAwQUQyNzUyIC8qIEluc3BlY3Rvck1lbW9yeUFnZW50LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTdDNTIyRDRCMTVCNDc3RTgwMDlCN0M5NSAvKiBJbnNwZWN0
b3JPdmVybGF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRGNkZERDY0MTM0MURFREQwMDFGOEVF
MyAvKiBJbnNwZWN0b3JQYWdlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOUYwRDZCMkUx
MjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODJBQjE3NzUxMjVDODI2NzAwQzUwNjlEIC8qIEluc3BlY3RvclJlc291cmNlQWdl
bnQuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01O
b2RlSGlnaGxpZ2h0ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGM3MTAw
ZDYxYzUyMDgzZjM4MjcxZjJhNzI3NTQ3NTQ2OGVkYjJjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2Rl
SGlnaGxpZ2h0ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTI5ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotCi0jaW5jbHVkZSAiRE9NTm9k
ZUhpZ2hsaWdodGVyLmgiCi0KLSNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRm9udENh
Y2hlLmgiCi0jaW5jbHVkZSAiRm9udEZhbWlseS5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NUeXBlcy5oIgotI2luY2x1ZGUgIk5vZGUuaCIKLSNpbmNsdWRlICJQYWdlLmgi
Ci0jaW5jbHVkZSAiUmFuZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJCb3hNb2RlbE9iamVjdC5oIgot
I2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgotI2luY2x1ZGUg
IlRleHRSdW4uaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIHsKLQotI2lmIE9TKFdJTkRPV1MpCi1zdGF0aWMg
Y29uc3QgdW5zaWduZWQgZm9udEhlaWdodFB4ID0gMTI7Ci0jZWxpZiBPUyhNQUNfT1NfWCkgfHwg
T1MoVU5JWCkKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBmb250SGVpZ2h0UHggPSAxMTsKLSNlbmRp
ZgotCi1jb25zdCBzdGF0aWMgaW50IHJlY3RJbmZsYXRlUHggPSA0OwotY29uc3Qgc3RhdGljIGlu
dCBib3JkZXJXaWR0aFB4ID0gMTsKLWNvbnN0IHN0YXRpYyBpbnQgdG9vbHRpcFBhZGRpbmcgPSA0
OwotCi1jb25zdCBzdGF0aWMgaW50IGFycm93VGlwT2Zmc2V0ID0gMjA7Ci1jb25zdCBzdGF0aWMg
ZmxvYXQgYXJyb3dIZWlnaHQgPSA3OwotY29uc3Qgc3RhdGljIGZsb2F0IGFycm93SGFsZldpZHRo
ID0gNzsKLQotUGF0aCBxdWFkVG9QYXRoKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKLXsKLSAgICBQ
YXRoIHF1YWRQYXRoOwotICAgIHF1YWRQYXRoLm1vdmVUbyhxdWFkLnAxKCkpOwotICAgIHF1YWRQ
YXRoLmFkZExpbmVUbyhxdWFkLnAyKCkpOwotICAgIHF1YWRQYXRoLmFkZExpbmVUbyhxdWFkLnAz
KCkpOwotICAgIHF1YWRQYXRoLmFkZExpbmVUbyhxdWFkLnA0KCkpOwotICAgIHF1YWRQYXRoLmNs
b3NlU3VicGF0aCgpOwotICAgIHJldHVybiBxdWFkUGF0aDsKLX0KLQotdm9pZCBkcmF3T3V0bGlu
ZWRRdWFkKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBj
b25zdCBDb2xvciYgZmlsbENvbG9yLCBjb25zdCBDb2xvciYgb3V0bGluZUNvbG9yKQotewotICAg
IHN0YXRpYyBjb25zdCBpbnQgb3V0bGluZVRoaWNrbmVzcyA9IDI7Ci0KLSAgICBQYXRoIHF1YWRQ
YXRoID0gcXVhZFRvUGF0aChxdWFkKTsKLQotICAgIC8vIENsaXAgb3V0IHRoZSBxdWFkLCB0aGVu
IGRyYXcgd2l0aCBhIDJweCBzdHJva2UgdG8gZ2V0IGEgcGl4ZWwKLSAgICAvLyBvZiBvdXRsaW5l
IChiZWNhdXNlIGluZmxhdGluZyBhIHF1YWQgaXMgaGFyZCkKLSAgICB7Ci0gICAgICAgIGNvbnRl
eHQuc2F2ZSgpOwotICAgICAgICBjb250ZXh0LmNsaXBPdXQocXVhZFBhdGgpOwotCi0gICAgICAg
IGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKG91dGxpbmVUaGlja25lc3MpOwotICAgICAgICBj
b250ZXh0LnNldFN0cm9rZUNvbG9yKG91dGxpbmVDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7
Ci0gICAgICAgIGNvbnRleHQuc3Ryb2tlUGF0aChxdWFkUGF0aCk7Ci0KLSAgICAgICAgY29udGV4
dC5yZXN0b3JlKCk7Ci0gICAgfQotCi0gICAgLy8gTm93IGRvIHRoZSBmaWxsCi0gICAgY29udGV4
dC5zZXRGaWxsQ29sb3IoZmlsbENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICBjb250
ZXh0LmZpbGxQYXRoKHF1YWRQYXRoKTsKLX0KLQotdm9pZCBkcmF3T3V0bGluZWRRdWFkV2l0aENs
aXAoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsIGNvbnN0
IEZsb2F0UXVhZCYgY2xpcFF1YWQsIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IpCi17Ci0gICAgY29u
dGV4dC5zYXZlKCk7Ci0gICAgUGF0aCBjbGlwUXVhZFBhdGggPSBxdWFkVG9QYXRoKGNsaXBRdWFk
KTsKLSAgICBjb250ZXh0LmNsaXBPdXQoY2xpcFF1YWRQYXRoKTsKLSAgICBkcmF3T3V0bGluZWRR
dWFkKGNvbnRleHQsIHF1YWQsIGZpbGxDb2xvciwgQ29sb3I6OnRyYW5zcGFyZW50KTsKLSAgICBj
b250ZXh0LnJlc3RvcmUoKTsKLX0KLQotdm9pZCBkcmF3SGlnaGxpZ2h0Rm9yQm94KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBjb250ZW50UXVhZCwgY29uc3QgRmxv
YXRRdWFkJiBwYWRkaW5nUXVhZCwgY29uc3QgRmxvYXRRdWFkJiBib3JkZXJRdWFkLCBjb25zdCBG
bG9hdFF1YWQmIG1hcmdpblF1YWQsIEhpZ2hsaWdodERhdGEqIGhpZ2hsaWdodERhdGEpCi17Ci0g
ICAgYm9vbCBoYXNNYXJnaW4gPSBoaWdobGlnaHREYXRhLT5tYXJnaW4gIT0gQ29sb3I6OnRyYW5z
cGFyZW50OwotICAgIGJvb2wgaGFzQm9yZGVyID0gaGlnaGxpZ2h0RGF0YS0+Ym9yZGVyICE9IENv
bG9yOjp0cmFuc3BhcmVudDsKLSAgICBib29sIGhhc1BhZGRpbmcgPSBoaWdobGlnaHREYXRhLT5w
YWRkaW5nICE9IENvbG9yOjp0cmFuc3BhcmVudDsKLSAgICBib29sIGhhc0NvbnRlbnQgPSBoaWdo
bGlnaHREYXRhLT5jb250ZW50ICE9IENvbG9yOjp0cmFuc3BhcmVudCB8fCBoaWdobGlnaHREYXRh
LT5jb250ZW50T3V0bGluZSAhPSBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci0KLSAgICBGbG9hdFF1YWQg
Y2xpcFF1YWQ7Ci0gICAgQ29sb3IgY2xpcENvbG9yOwotICAgIGlmIChoYXNNYXJnaW4gJiYgKCFo
YXNCb3JkZXIgfHwgbWFyZ2luUXVhZCAhPSBib3JkZXJRdWFkKSkgewotICAgICAgICBkcmF3T3V0
bGluZWRRdWFkV2l0aENsaXAoY29udGV4dCwgbWFyZ2luUXVhZCwgYm9yZGVyUXVhZCwgaGlnaGxp
Z2h0RGF0YS0+bWFyZ2luKTsKLSAgICAgICAgY2xpcFF1YWQgPSBib3JkZXJRdWFkOwotICAgIH0K
LSAgICBpZiAoaGFzQm9yZGVyICYmICghaGFzUGFkZGluZyB8fCBib3JkZXJRdWFkICE9IHBhZGRp
bmdRdWFkKSkgewotICAgICAgICBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAoY29udGV4dCwgYm9y
ZGVyUXVhZCwgcGFkZGluZ1F1YWQsIGhpZ2hsaWdodERhdGEtPmJvcmRlcik7Ci0gICAgICAgIGNs
aXBRdWFkID0gcGFkZGluZ1F1YWQ7Ci0gICAgfQotICAgIGlmIChoYXNQYWRkaW5nICYmICghaGFz
Q29udGVudCB8fCBwYWRkaW5nUXVhZCAhPSBjb250ZW50UXVhZCkpIHsKLSAgICAgICAgZHJhd091
dGxpbmVkUXVhZFdpdGhDbGlwKGNvbnRleHQsIHBhZGRpbmdRdWFkLCBjb250ZW50UXVhZCwgaGln
aGxpZ2h0RGF0YS0+cGFkZGluZyk7Ci0gICAgICAgIGNsaXBRdWFkID0gY29udGVudFF1YWQ7Ci0g
ICAgfQotICAgIGlmIChoYXNDb250ZW50KQotICAgICAgICBkcmF3T3V0bGluZWRRdWFkKGNvbnRl
eHQsIGNvbnRlbnRRdWFkLCBoaWdobGlnaHREYXRhLT5jb250ZW50LCBoaWdobGlnaHREYXRhLT5j
b250ZW50T3V0bGluZSk7Ci19Ci0KLXZvaWQgZHJhd0hpZ2hsaWdodEZvclNWR1JlbmRlcmVyKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVmVjdG9yPEZsb2F0UXVhZD4mIGFic29sdXRl
UXVhZHMsIEhpZ2hsaWdodERhdGEqIGhpZ2hsaWdodERhdGEpCi17Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBhYnNvbHV0ZVF1YWRzLnNpemUoKTsgKytpKQotICAgICAgICBkcmF3T3V0bGlu
ZWRRdWFkKGNvbnRleHQsIGFic29sdXRlUXVhZHNbaV0sIGhpZ2hsaWdodERhdGEtPmNvbnRlbnQs
IENvbG9yOjp0cmFuc3BhcmVudCk7Ci19Ci0KLWludCBkcmF3U3Vic3RyaW5nKGNvbnN0IFRleHRS
dW4mIGdsb2JhbFRleHRSdW4sIGludCBvZmZzZXQsIGludCBsZW5ndGgsIGNvbnN0IENvbG9yJiB0
ZXh0Q29sb3IsIGNvbnN0IEZvbnQmIGZvbnQsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgTGF5b3V0UmVjdCYgdGl0bGVSZWN0KQotewotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRl
eHRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgY29udGV4dC5kcmF3VGV4dChmb250
LCBnbG9iYWxUZXh0UnVuLCBJbnRQb2ludCh0aXRsZVJlY3QucGl4ZWxTbmFwcGVkWCgpICsgcmVj
dEluZmxhdGVQeCwgdGl0bGVSZWN0LnBpeGVsU25hcHBlZFkoKSArIGZvbnQuZm9udE1ldHJpY3Mo
KS5oZWlnaHQoKSksIG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoKTsKLSAgICByZXR1cm4gb2Zmc2V0
ICsgbGVuZ3RoOwotfQotCi1mbG9hdCBjYWxjdWxhdGVBcnJvd1RpcFgoY29uc3QgTGF5b3V0UmVj
dCYgYW5jaG9yQm94LCBjb25zdCBMYXlvdXRSZWN0JiB0aXRsZVJlY3QpCi17Ci0gICAgY29uc3Qg
c3RhdGljIGludCBhbmNob3JUaXBPZmZzZXRQeCA9IDI7Ci0KLSAgICBpbnQgbWluWCA9IHRpdGxl
UmVjdC54KCkgKyBhcnJvd0hhbGZXaWR0aDsKLSAgICBpbnQgbWF4WCA9IHRpdGxlUmVjdC5tYXhY
KCkgLSBhcnJvd0hhbGZXaWR0aDsKLSAgICBpbnQgYW5jaG9yWCA9IGFuY2hvckJveC54KCk7Ci0g
ICAgaW50IGFuY2hvck1heFggPSBhbmNob3JCb3gubWF4WCgpOwotCi0gICAgaW50IHggPSB0aXRs
ZVJlY3QueCgpICsgYXJyb3dUaXBPZmZzZXQ7IC8vIERlZmF1bHQgdG9vbHRpcCBwb3NpdGlvbi4K
LSAgICBpZiAoeCA8IGFuY2hvclgpCi0gICAgICAgIHggPSBhbmNob3JYICsgYW5jaG9yVGlwT2Zm
c2V0UHg7Ci0gICAgZWxzZSBpZiAoeCA+IGFuY2hvck1heFgpCi0gICAgICAgIHggPSBhbmNob3JN
YXhYIC0gYW5jaG9yVGlwT2Zmc2V0UHg7Ci0KLSAgICBpZiAoeCA8IG1pblgpCi0gICAgICAgIHgg
PSBtaW5YOwotICAgIGVsc2UgaWYgKHggPiBtYXhYKQotICAgICAgICB4ID0gbWF4WDsKLQotICAg
IHJldHVybiB4OwotfQotCi12b2lkIHNldFVwRm9udERlc2NyaXB0aW9uKEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uLCBXZWJDb3JlOjpTZXR0aW5ncyogc2V0dGluZ3MpCi17Ci0jZGVm
aW5lIFRPT0xUSVBfRk9OVF9GQU1JTElFUyhzaXplLCAuLi4pIFwKLXN0YXRpYyBjb25zdCB1bnNp
Z25lZCB0b29sdGlwRm9udEZhY2VTaXplID0gc2l6ZTtcCi1zdGF0aWMgY29uc3QgQXRvbWljU3Ry
aW5nKiB0b29sdGlwRm9udEZhY2Vbc2l6ZV0gPSB7IF9fVkFfQVJHU19fIH07Ci0KLSNpZiBPUyhX
SU5ET1dTKQotVE9PTFRJUF9GT05UX0ZBTUlMSUVTKDIsIG5ldyBBdG9taWNTdHJpbmcoIkNvbnNv
bGFzIiksIG5ldyBBdG9taWNTdHJpbmcoIkx1Y2lkYSBDb25zb2xlIikpCi0jZWxpZiBPUyhNQUNf
T1NfWCkKLVRPT0xUSVBfRk9OVF9GQU1JTElFUygyLCBuZXcgQXRvbWljU3RyaW5nKCJNZW5sbyIp
LCBuZXcgQXRvbWljU3RyaW5nKCJNb25hY28iKSkKLSNlbGlmIE9TKFVOSVgpCi1UT09MVElQX0ZP
TlRfRkFNSUxJRVMoMSwgbmV3IEF0b21pY1N0cmluZygiZGVqYXZ1IHNhbnMgbW9ubyIpKQotI2Vu
ZGlmCi0vLyBJbiB0aGUgZGVmYXVsdCBjYXNlLCB3ZSBnZXQgdGhlIHNldHRpbmdzLXByb3ZpZGVk
IG1vbm9zcGFjZSBmb250LgotCi0jdW5kZWYgVE9PTFRJUF9GT05UX0ZBTUlMSUVTCi0KLSAgICBm
b250RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9kZShzZXR0aW5ncy0+Zm9udFJlbmRlcmluZ01v
ZGUoKSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShmb250SGVpZ2h0UHgp
OwotCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBmaXhlZEZvbnRGYW1pbHkgPSBzZXR0aW5ncy0+
Zml4ZWRGb250RmFtaWx5KCk7Ci0gICAgaWYgKCFmaXhlZEZvbnRGYW1pbHkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlv
bjo6TW9ub3NwYWNlRmFtaWx5KTsKLSAgICAgICAgRm9udEZhbWlseSogY3VycmVudEZhbWlseSA9
IDA7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b29sdGlwRm9udEZhY2VTaXpl
OyArK2kpIHsKLSAgICAgICAgICAgIGlmICghY3VycmVudEZhbWlseSkgewotICAgICAgICAgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNldEZhbWlseSgqdG9vbHRpcEZvbnRG
YWNlW2ldKTsKLSAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5h
cHBlbmRGYW1pbHkoMCk7Ci0gICAgICAgICAgICAgICAgY3VycmVudEZhbWlseSA9ICZmb250RGVz
Y3JpcHRpb24uZmlyc3RGYW1pbHkoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgUmVmUHRyPFNoYXJlZEZvbnRGYW1pbHk+IG5ld0ZhbWlseSA9IFNoYXJlZEZvbnRGYW1p
bHk6OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIG5ld0ZhbWlseS0+c2V0RmFtaWx5KCp0b29s
dGlwRm9udEZhY2VbaV0pOwotICAgICAgICAgICAgICAgIGN1cnJlbnRGYW1pbHktPmFwcGVuZEZh
bWlseShuZXdGYW1pbHkpOwotICAgICAgICAgICAgICAgIGN1cnJlbnRGYW1pbHkgPSBuZXdGYW1p
bHkuZ2V0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgUmVmUHRyPFNoYXJl
ZEZvbnRGYW1pbHk+IG5ld0ZhbWlseSA9IFNoYXJlZEZvbnRGYW1pbHk6OmNyZWF0ZSgpOwotICAg
ICAgICBuZXdGYW1pbHktPnNldEZhbWlseShmaXhlZEZvbnRGYW1pbHkpOwotICAgICAgICBjdXJy
ZW50RmFtaWx5LT5hcHBlbmRGYW1pbHkobmV3RmFtaWx5KTsKLSAgICAgICAgY3VycmVudEZhbWls
eSA9IG5ld0ZhbWlseS5nZXQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgZHJhd0VsZW1lbnRUaXRsZShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIE5vZGUqIG5vZGUsIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIGNvbnN0IEludFJlY3QmIGJvdW5kaW5nQm94LCBjb25zdCBJbnRSZWN0JiBhbmNob3JCb3gs
IGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZVJlY3QsIFdlYkNvcmU6OlNldHRpbmdzKiBzZXR0aW5n
cykKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCBiYWNrZ3JvdW5kQ29sb3IsICgy
NTUsIDI1NSwgMTk0KSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgdGFnQ29sb3Is
ICgxMzYsIDE4LCAxMjgpKTsgLy8gU2FtZSBhcyAud2Via2l0LWh0bWwtdGFnLgotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoQ29sb3IsIGF0dHJDb2xvciwgKDI2LCAyNiwgMTY2KSk7IC8vIFNhbWUg
YXMgLndlYmtpdC1odG1sLWF0dHJpYnV0ZS12YWx1ZS4KLSAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KENvbG9yLCBub3JtYWxDb2xvciwgKENvbG9yOjpibGFjaykpOwotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoQ29sb3IsIHB4QW5kQm9yZGVyQ29sb3IsICgxMjgsIDEyOCwgMTI4KSk7Ci0KLSAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgcHhTdHJpbmcsICgicHgiKSk7Ci0gICAgY29uc3Qg
c3RhdGljIFVDaGFyIHRpbWVzVUNoYXJbXSA9IHsgMHgwMDIwLCAweDAwRDcsIDB4MDAyMCwgMCB9
OwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB0aW1lc1N0cmluZywgKHRpbWVzVUNo
YXIpKTsgLy8gJnRpbWVzOyBzdHJpbmcKLQotICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZv
bnRDYWNoZVB1cmdlUHJldmVudGVyOwotCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19j
YXN0PEVsZW1lbnQqPihub2RlKTsKLSAgICBib29sIGlzWEhUTUwgPSBlbGVtZW50LT5kb2N1bWVu
dCgpLT5pc1hIVE1MRG9jdW1lbnQoKTsKLSAgICBTdHJpbmdCdWlsZGVyIG5vZGVUaXRsZTsKLSAg
ICBub2RlVGl0bGUuYXBwZW5kKGlzWEhUTUwgPyBlbGVtZW50LT5ub2RlTmFtZSgpIDogZWxlbWVu
dC0+bm9kZU5hbWUoKS5sb3dlcigpKTsKLSAgICB1bnNpZ25lZCB0YWdOYW1lTGVuZ3RoID0gbm9k
ZVRpdGxlLmxlbmd0aCgpOwotCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZFZhbHVlID0gZWxl
bWVudC0+Z2V0SWRBdHRyaWJ1dGUoKTsKLSAgICB1bnNpZ25lZCBpZFN0cmluZ0xlbmd0aCA9IDA7
Ci0gICAgU3RyaW5nIGlkU3RyaW5nOwotICAgIGlmICghaWRWYWx1ZS5pc051bGwoKSAmJiAhaWRW
YWx1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgbm9kZVRpdGxlLmFwcGVuZCgiIyIpOwotICAgICAg
ICBub2RlVGl0bGUuYXBwZW5kKGlkVmFsdWUpOwotICAgICAgICBpZFN0cmluZ0xlbmd0aCA9IDEg
KyBpZFZhbHVlLmxlbmd0aCgpOwotICAgIH0KLQotICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiB1
c2VkQ2xhc3NOYW1lczsKLSAgICB1bnNpZ25lZCBjbGFzc2VzU3RyaW5nTGVuZ3RoID0gMDsKLSAg
ICBpZiAoZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBlbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQoKSkg
ewotICAgICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVzU3RyaW5nID0gc3Rh
dGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5jbGFzc05hbWVzKCk7Ci0gICAgICAg
IHNpemVfdCBjbGFzc05hbWVDb3VudCA9IGNsYXNzTmFtZXNTdHJpbmcuc2l6ZSgpOwotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNsYXNzTmFtZUNvdW50OyArK2kpIHsKLSAgICAgICAg
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2xhc3NOYW1lID0gY2xhc3NOYW1lc1N0cmluZ1tpXTsK
LSAgICAgICAgICAgIGlmICh1c2VkQ2xhc3NOYW1lcy5jb250YWlucyhjbGFzc05hbWUpKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdXNlZENsYXNzTmFtZXMuYWRkKGNs
YXNzTmFtZSk7Ci0gICAgICAgICAgICBub2RlVGl0bGUuYXBwZW5kKCIuIik7Ci0gICAgICAgICAg
ICBub2RlVGl0bGUuYXBwZW5kKGNsYXNzTmFtZSk7Ci0gICAgICAgICAgICBjbGFzc2VzU3RyaW5n
TGVuZ3RoICs9IDEgKyBjbGFzc05hbWUubGVuZ3RoKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBSZW5kZXJCb3hNb2RlbE9iamVjdCogbW9kZWxPYmplY3QgPSByZW5kZXJlci0+aXNCb3hNb2Rl
bE9iamVjdCgpID8gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChyZW5kZXJlcikgOiAwOwotCi0gICAg
U3RyaW5nIHdpZHRoTnVtYmVyUGFydCA9ICIgIiArIFN0cmluZzo6bnVtYmVyKG1vZGVsT2JqZWN0
ID8gYWRqdXN0Rm9yQWJzb2x1dGVab29tKG1vZGVsT2JqZWN0LT5waXhlbFNuYXBwZWRPZmZzZXRX
aWR0aCgpLCBtb2RlbE9iamVjdCkgOiBib3VuZGluZ0JveC53aWR0aCgpKTsKLSAgICBub2RlVGl0
bGUuYXBwZW5kKHdpZHRoTnVtYmVyUGFydCk7Ci0gICAgbm9kZVRpdGxlLmFwcGVuZChweFN0cmlu
Zyk7Ci0gICAgbm9kZVRpdGxlLmFwcGVuZCh0aW1lc1N0cmluZyk7Ci0gICAgU3RyaW5nIGhlaWdo
dE51bWJlclBhcnQgPSBTdHJpbmc6Om51bWJlcihtb2RlbE9iamVjdCA/IGFkanVzdEZvckFic29s
dXRlWm9vbShtb2RlbE9iamVjdC0+cGl4ZWxTbmFwcGVkT2Zmc2V0SGVpZ2h0KCksIG1vZGVsT2Jq
ZWN0KSA6IGJvdW5kaW5nQm94LmhlaWdodCgpKTsKLSAgICBub2RlVGl0bGUuYXBwZW5kKGhlaWdo
dE51bWJlclBhcnQpOwotICAgIG5vZGVUaXRsZS5hcHBlbmQocHhTdHJpbmcpOwotCi0gICAgRm9u
dERlc2NyaXB0aW9uIGRlc2M7Ci0gICAgc2V0VXBGb250RGVzY3JpcHRpb24oZGVzYywgc2V0dGlu
Z3MpOwotICAgIEZvbnQgZm9udCA9IEZvbnQoZGVzYywgMCwgMCk7Ci0gICAgZm9udC51cGRhdGUo
MCk7Ci0KLSAgICBUZXh0UnVuIG5vZGVUaXRsZVJ1bihub2RlVGl0bGUudG9TdHJpbmcoKSk7Ci0g
ICAgSW50UG9pbnQgdGl0bGVCYXNlUG9pbnQgPSBJbnRQb2ludChhbmNob3JCb3gueCgpLCBhbmNo
b3JCb3gubWF4WSgpIC0gMSk7Ci0gICAgdGl0bGVCYXNlUG9pbnQubW92ZShyZWN0SW5mbGF0ZVB4
LCByZWN0SW5mbGF0ZVB4KTsKLSAgICBJbnRSZWN0IHRpdGxlUmVjdCA9IGVuY2xvc2luZ0ludFJl
Y3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChub2RlVGl0bGVSdW4sIHRpdGxlQmFzZVBvaW50
LCBmb250SGVpZ2h0UHgpKTsKLSAgICB0aXRsZVJlY3QuaW5mbGF0ZShyZWN0SW5mbGF0ZVB4KTsK
LQotICAgIC8vIFRoZSBpbml0aWFsIG9mZnNldHMgbmVlZGVkIHRvIGNvbXBlbnNhdGUgZm9yIGEg
MXB4LXRoaWNrIGJvcmRlciBzdHJva2UgKHdoaWNoIGlzIG5vdCBhIHBhcnQgb2YgdGhlIHJlY3Rh
bmdsZSkuCi0gICAgaW50IGR4ID0gLWJvcmRlcldpZHRoUHg7Ci0gICAgaW50IGR5ID0gYm9yZGVy
V2lkdGhQeDsKLQotICAgIC8vIElmIHRoZSB0aXAgc3RpY2tzIGJleW9uZCB0aGUgcmlnaHQgb2Yg
dmlzaWJsZVJlY3QsIHJpZ2h0LWFsaWduIHRoZSB0aXAgd2l0aCB0aGUgc2FpZCBib3VuZGFyeS4K
LSAgICBpZiAodGl0bGVSZWN0Lm1heFgoKSArIGR4ID4gdmlzaWJsZVJlY3QubWF4WCgpKQotICAg
ICAgICBkeCA9IHZpc2libGVSZWN0Lm1heFgoKSAtIHRpdGxlUmVjdC5tYXhYKCk7Ci0KLSAgICAv
LyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIGxlZnQgb2YgdmlzaWJsZVJlY3QsIGxlZnQt
YWxpZ24gdGhlIHRpcCB3aXRoIHRoZSBzYWlkIGJvdW5kYXJ5LgotICAgIGlmICh0aXRsZVJlY3Qu
eCgpICsgZHggPCB2aXNpYmxlUmVjdC54KCkpCi0gICAgICAgIGR4ID0gdmlzaWJsZVJlY3QueCgp
IC0gdGl0bGVSZWN0LngoKSAtIGJvcmRlcldpZHRoUHg7Ci0KLSAgICAvLyBJZiB0aGUgdGlwIHN0
aWNrcyBiZXlvbmQgdGhlIGJvdHRvbSBvZiB2aXNpYmxlUmVjdCwgc2hvdyB0aGUgdGlwIGF0IHRv
cCBvZiBib3VuZGluZyBib3guCi0gICAgaWYgKHRpdGxlUmVjdC5tYXhZKCkgKyBkeSA+IHZpc2li
bGVSZWN0Lm1heFkoKSkgewotICAgICAgICBkeSA9IGFuY2hvckJveC55KCkgLSB0aXRsZVJlY3Qu
bWF4WSgpIC0gYm9yZGVyV2lkdGhQeDsKLSAgICAgICAgLy8gSWYgdGhlIHRpcCBzdGlsbCBzdGlj
a3MgYmV5b25kIHRoZSBib3R0b20gb2YgdmlzaWJsZVJlY3QsIGJvdHRvbS1hbGlnbiB0aGUgdGlw
IHdpdGggdGhlIHNhaWQgYm91bmRhcnkuCi0gICAgICAgIGlmICh0aXRsZVJlY3QubWF4WSgpICsg
ZHkgPiB2aXNpYmxlUmVjdC5tYXhZKCkpCi0gICAgICAgICAgICBkeSA9IHZpc2libGVSZWN0Lm1h
eFkoKSAtIHRpdGxlUmVjdC5tYXhZKCk7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIHRpcCBzdGlj
a3MgYmV5b25kIHRoZSB0b3Agb2YgdmlzaWJsZVJlY3QsIHNob3cgdGhlIHRpcCBhdCB0b3Agb2Yg
dmlzaWJsZVJlY3QuCi0gICAgaWYgKHRpdGxlUmVjdC55KCkgKyBkeSA8IHZpc2libGVSZWN0Lnko
KSkKLSAgICAgICAgZHkgPSB2aXNpYmxlUmVjdC55KCkgLSB0aXRsZVJlY3QueSgpICsgYm9yZGVy
V2lkdGhQeDsKLQotICAgIHRpdGxlUmVjdC5tb3ZlKGR4LCBkeSk7Ci0KLSAgICBib29sIGlzQXJy
b3dBdFRvcCA9IHRpdGxlUmVjdC55KCkgPiBhbmNob3JCb3gueSgpOwotICAgIHRpdGxlUmVjdC5t
b3ZlKDAsIHRvb2x0aXBQYWRkaW5nICogKGlzQXJyb3dBdFRvcCA/IDEgOiAtMSkpOwotCi0gICAg
ewotICAgICAgICBmbG9hdCBhcnJvd1RpcFggPSBjYWxjdWxhdGVBcnJvd1RpcFgoYW5jaG9yQm94
LCB0aXRsZVJlY3QpOwotICAgICAgICBpbnQgYXJyb3dCYXNlWSA9IGlzQXJyb3dBdFRvcCA/IHRp
dGxlUmVjdC55KCkgOiB0aXRsZVJlY3QubWF4WSgpOwotICAgICAgICBpbnQgYXJyb3dPcHBvc2l0
ZVkgPSBpc0Fycm93QXRUb3AgPyB0aXRsZVJlY3QubWF4WSgpIDogdGl0bGVSZWN0LnkoKTsKLQot
ICAgICAgICBGbG9hdFBvaW50IHBvaW50c1s4XTsKLSAgICAgICAgcG9pbnRzWzBdID0gRmxvYXRQ
b2ludChhcnJvd1RpcFggLSBhcnJvd0hhbGZXaWR0aCwgYXJyb3dCYXNlWSk7Ci0gICAgICAgIHBv
aW50c1sxXSA9IEZsb2F0UG9pbnQoYXJyb3dUaXBYLCBhcnJvd0Jhc2VZICsgYXJyb3dIZWlnaHQg
KiAoaXNBcnJvd0F0VG9wID8gLTEgOiAxKSk7Ci0gICAgICAgIHBvaW50c1syXSA9IEZsb2F0UG9p
bnQoYXJyb3dUaXBYICsgYXJyb3dIYWxmV2lkdGgsIGFycm93QmFzZVkpOwotICAgICAgICBwb2lu
dHNbM10gPSBGbG9hdFBvaW50KHRpdGxlUmVjdC5tYXhYKCksIGFycm93QmFzZVkpOwotICAgICAg
ICBwb2ludHNbNF0gPSBGbG9hdFBvaW50KHRpdGxlUmVjdC5tYXhYKCksIGFycm93T3Bwb3NpdGVZ
KTsKLSAgICAgICAgcG9pbnRzWzVdID0gRmxvYXRQb2ludCh0aXRsZVJlY3QueCgpLCBhcnJvd09w
cG9zaXRlWSk7Ci0gICAgICAgIHBvaW50c1s2XSA9IEZsb2F0UG9pbnQodGl0bGVSZWN0LngoKSwg
YXJyb3dCYXNlWSk7Ci0gICAgICAgIHBvaW50c1s3XSA9IHBvaW50c1swXTsKLQotICAgICAgICBQ
YXRoIHBhdGg7Ci0gICAgICAgIHBhdGgubW92ZVRvKHBvaW50c1swXSk7Ci0gICAgICAgIGZvciAo
aW50IGkgPSAxOyBpIDwgODsgKytpKQotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8ocG9pbnRz
W2ldKTsKLQotICAgICAgICBjb250ZXh0LnNhdmUoKTsKLSAgICAgICAgY29udGV4dC50cmFuc2xh
dGUoMC41ZiwgMC41Zik7Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IocHhBbmRCb3Jk
ZXJDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgICAgIGNvbnRleHQuc2V0RmlsbENv
bG9yKGJhY2tncm91bmRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgICAgIGNvbnRl
eHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGJvcmRlcldpZHRoUHgpOwotICAgICAgICBjb250ZXh0LmZp
bGxQYXRoKHBhdGgpOwotICAgICAgICBjb250ZXh0LnN0cm9rZVBhdGgocGF0aCk7Ci0gICAgICAg
IGNvbnRleHQucmVzdG9yZSgpOwotICAgIH0KLQotICAgIGludCBjdXJyZW50UG9zID0gMDsKLSAg
ICBjdXJyZW50UG9zID0gZHJhd1N1YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIHRh
Z05hbWVMZW5ndGgsIHRhZ0NvbG9yLCBmb250LCBjb250ZXh0LCB0aXRsZVJlY3QpOwotICAgIGlm
IChpZFN0cmluZ0xlbmd0aCkKLSAgICAgICAgY3VycmVudFBvcyA9IGRyYXdTdWJzdHJpbmcobm9k
ZVRpdGxlUnVuLCBjdXJyZW50UG9zLCBpZFN0cmluZ0xlbmd0aCwgYXR0ckNvbG9yLCBmb250LCBj
b250ZXh0LCB0aXRsZVJlY3QpOwotICAgIGlmIChjbGFzc2VzU3RyaW5nTGVuZ3RoKQotICAgICAg
ICBjdXJyZW50UG9zID0gZHJhd1N1YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIGNs
YXNzZXNTdHJpbmdMZW5ndGgsIGF0dHJDb2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVSZWN0KTsK
LSAgICBjdXJyZW50UG9zID0gZHJhd1N1YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3Ms
IHdpZHRoTnVtYmVyUGFydC5sZW5ndGgoKSwgbm9ybWFsQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRp
dGxlUmVjdCk7Ci0gICAgY3VycmVudFBvcyA9IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBj
dXJyZW50UG9zLCBweFN0cmluZy5sZW5ndGgoKSArIHRpbWVzU3RyaW5nLmxlbmd0aCgpLCBweEFu
ZEJvcmRlckNvbG9yLCBmb250LCBjb250ZXh0LCB0aXRsZVJlY3QpOwotICAgIGN1cnJlbnRQb3Mg
PSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3VycmVudFBvcywgaGVpZ2h0TnVtYmVyUGFy
dC5sZW5ndGgoKSwgbm9ybWFsQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7Ci0gICAg
ZHJhd1N1YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIHB4U3RyaW5nLmxlbmd0aCgp
LCBweEFuZEJvcmRlckNvbG9yLCBmb250LCBjb250ZXh0LCB0aXRsZVJlY3QpOwotfQotCi1zdGF0
aWMgdm9pZCBjb250ZW50c1F1YWRUb1BhZ2UoY29uc3QgRnJhbWVWaWV3KiBtYWluVmlldywgY29u
c3QgRnJhbWVWaWV3KiB2aWV3LCBGbG9hdFF1YWQmIHF1YWQpCi17Ci0gICAgcXVhZC5zZXRQMSh2
aWV3LT5jb250ZW50c1RvUm9vdFZpZXcocm91bmRlZEludFBvaW50KHF1YWQucDEoKSkpKTsKLSAg
ICBxdWFkLnNldFAyKHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhyb3VuZGVkSW50UG9pbnQocXVh
ZC5wMigpKSkpOwotICAgIHF1YWQuc2V0UDModmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHJvdW5k
ZWRJbnRQb2ludChxdWFkLnAzKCkpKSk7Ci0gICAgcXVhZC5zZXRQNCh2aWV3LT5jb250ZW50c1Rv
Um9vdFZpZXcocm91bmRlZEludFBvaW50KHF1YWQucDQoKSkpKTsKLSAgICBxdWFkICs9IG1haW5W
aWV3LT5zY3JvbGxPZmZzZXQoKTsKLX0KLQotc3RhdGljIHZvaWQgZ2V0T3JEcmF3Tm9kZUhpZ2hs
aWdodChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEhpZ2hsaWdodERhdGEqIGhpZ2hsaWdodERh
dGEsIEhpZ2hsaWdodCogaGlnaGxpZ2h0KQotewotICAgIE5vZGUqIG5vZGUgPSBoaWdobGlnaHRE
YXRhLT5ub2RlLmdldCgpOwotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5k
ZXJlcigpOwotICAgIEZyYW1lKiBjb250YWluaW5nRnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5m
cmFtZSgpOwotCi0gICAgaWYgKCFyZW5kZXJlciB8fCAhY29udGFpbmluZ0ZyYW1lKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBGcmFtZVZpZXcqIGNvbnRhaW5pbmdWaWV3ID0gY29udGFpbmluZ0Zy
YW1lLT52aWV3KCk7Ci0gICAgRnJhbWVWaWV3KiBtYWluVmlldyA9IGNvbnRhaW5pbmdGcmFtZS0+
cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpOwotICAgIEludFJlY3QgYm91bmRpbmdCb3ggPSBw
aXhlbFNuYXBwZWRJbnRSZWN0KGNvbnRhaW5pbmdWaWV3LT5jb250ZW50c1RvUm9vdFZpZXcocmVu
ZGVyZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpKTsKLSAgICBib3VuZGluZ0JveC5tb3Zl
KG1haW5WaWV3LT5zY3JvbGxPZmZzZXQoKSk7Ci0gICAgSW50UmVjdCB0aXRsZUFuY2hvckJveCA9
IGJvdW5kaW5nQm94OwotCi0gICAgRmxvYXRSZWN0IHZpc2libGVSZWN0ID0gbWFpblZpZXctPnZp
c2libGVDb250ZW50UmVjdCgpOwotICAgIC8vIERvbid0IHRyYW5zbGF0ZSB0aGUgY29udGV4dCBp
ZiB0aGUgZnJhbWUgaXMgcmVuZGVyZWQgaW4gcGFnZSBjb29yZGluYXRlcy4KLSAgICBpZiAoY29u
dGV4dCAmJiAhbWFpblZpZXctPmRlbGVnYXRlc1Njcm9sbGluZygpKQotICAgICAgICBjb250ZXh0
LT50cmFuc2xhdGUoLXZpc2libGVSZWN0LngoKSwgLXZpc2libGVSZWN0LnkoKSk7Ci0KLSAgICAv
LyBSZW5kZXJTVkdSb290IHNob3VsZCBiZSBoaWdobGlnaHRlZCB0aHJvdWdoIHRoZSBpc0JveCgp
IGNvZGUgcGF0aCwgYWxsIG90aGVyIFNWRyBlbGVtZW50cyBzaG91bGQganVzdCBkdW1wIHRoZWly
IGFic29sdXRlUXVhZHMoKS4KLSNpZiBFTkFCTEUoU1ZHKQotICAgIGJvb2wgaXNTVkdSZW5kZXJl
ciA9IHJlbmRlcmVyLT5ub2RlKCkgJiYgcmVuZGVyZXItPm5vZGUoKS0+aXNTVkdFbGVtZW50KCkg
JiYgIXJlbmRlcmVyLT5pc1NWR1Jvb3QoKTsKLSNlbHNlCi0gICAgYm9vbCBpc1NWR1JlbmRlcmVy
ID0gZmFsc2U7Ci0jZW5kaWYKLQotICAgIGlmIChpc1NWR1JlbmRlcmVyKSB7Ci0gICAgICAgIGhp
Z2hsaWdodC0+dHlwZSA9IEhpZ2hsaWdodFR5cGVSZWN0czsKLSAgICAgICAgcmVuZGVyZXItPmFi
c29sdXRlUXVhZHMoaGlnaGxpZ2h0LT5xdWFkcyk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgaGlnaGxpZ2h0LT5xdWFkcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGNvbnRlbnRz
UXVhZFRvUGFnZShtYWluVmlldywgY29udGFpbmluZ1ZpZXcsIGhpZ2hsaWdodC0+cXVhZHNbaV0p
OwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICAgICAgZHJhd0hpZ2hsaWdodEZvclNW
R1JlbmRlcmVyKCpjb250ZXh0LCBoaWdobGlnaHQtPnF1YWRzLCBoaWdobGlnaHREYXRhKTsKLSAg
ICB9IGVsc2UgaWYgKHJlbmRlcmVyLT5pc0JveCgpIHx8IHJlbmRlcmVyLT5pc1JlbmRlcklubGlu
ZSgpKSB7Ci0gICAgICAgIExheW91dFJlY3QgY29udGVudEJveDsKLSAgICAgICAgTGF5b3V0UmVj
dCBwYWRkaW5nQm94OwotICAgICAgICBMYXlvdXRSZWN0IGJvcmRlckJveDsKLSAgICAgICAgTGF5
b3V0UmVjdCBtYXJnaW5Cb3g7Ci0KLSAgICAgICAgaWYgKHJlbmRlcmVyLT5pc0JveCgpKSB7Ci0g
ICAgICAgICAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKTsK
LQotICAgICAgICAgICAgLy8gUmVuZGVyQm94IHJldHVybnMgdGhlICJwdXJlIiBjb250ZW50IGFy
ZWEgYm94LCBleGNsdXNpdmUgb2YgdGhlIHNjcm9sbGJhcnMgKGlmIHByZXNlbnQpLCB3aGljaCBh
bHNvIGNvdW50IHRvd2FyZHMgdGhlIGNvbnRlbnQgYXJlYSBpbiBDU1MuCi0gICAgICAgICAgICBj
b250ZW50Qm94ID0gcmVuZGVyQm94LT5jb250ZW50Qm94UmVjdCgpOwotICAgICAgICAgICAgY29u
dGVudEJveC5zZXRXaWR0aChjb250ZW50Qm94LndpZHRoKCkgKyByZW5kZXJCb3gtPnZlcnRpY2Fs
U2Nyb2xsYmFyV2lkdGgoKSk7Ci0gICAgICAgICAgICBjb250ZW50Qm94LnNldEhlaWdodChjb250
ZW50Qm94LmhlaWdodCgpICsgcmVuZGVyQm94LT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkp
OwotCi0gICAgICAgICAgICBwYWRkaW5nQm94ID0gTGF5b3V0UmVjdChjb250ZW50Qm94LngoKSAt
IHJlbmRlckJveC0+cGFkZGluZ0xlZnQoKSwgY29udGVudEJveC55KCkgLSByZW5kZXJCb3gtPnBh
ZGRpbmdUb3AoKSwKLSAgICAgICAgICAgICAgICAgICAgY29udGVudEJveC53aWR0aCgpICsgcmVu
ZGVyQm94LT5wYWRkaW5nTGVmdCgpICsgcmVuZGVyQm94LT5wYWRkaW5nUmlnaHQoKSwgY29udGVu
dEJveC5oZWlnaHQoKSArIHJlbmRlckJveC0+cGFkZGluZ1RvcCgpICsgcmVuZGVyQm94LT5wYWRk
aW5nQm90dG9tKCkpOwotICAgICAgICAgICAgYm9yZGVyQm94ID0gTGF5b3V0UmVjdChwYWRkaW5n
Qm94LngoKSAtIHJlbmRlckJveC0+Ym9yZGVyTGVmdCgpLCBwYWRkaW5nQm94LnkoKSAtIHJlbmRl
ckJveC0+Ym9yZGVyVG9wKCksCi0gICAgICAgICAgICAgICAgICAgIHBhZGRpbmdCb3gud2lkdGgo
KSArIHJlbmRlckJveC0+Ym9yZGVyTGVmdCgpICsgcmVuZGVyQm94LT5ib3JkZXJSaWdodCgpLCBw
YWRkaW5nQm94LmhlaWdodCgpICsgcmVuZGVyQm94LT5ib3JkZXJUb3AoKSArIHJlbmRlckJveC0+
Ym9yZGVyQm90dG9tKCkpOwotICAgICAgICAgICAgbWFyZ2luQm94ID0gTGF5b3V0UmVjdChib3Jk
ZXJCb3gueCgpIC0gcmVuZGVyQm94LT5tYXJnaW5MZWZ0KCksIGJvcmRlckJveC55KCkgLSByZW5k
ZXJCb3gtPm1hcmdpblRvcCgpLAotICAgICAgICAgICAgICAgICAgICBib3JkZXJCb3gud2lkdGgo
KSArIHJlbmRlckJveC0+bWFyZ2luV2lkdGgoKSwgYm9yZGVyQm94LmhlaWdodCgpICsgcmVuZGVy
Qm94LT5tYXJnaW5IZWlnaHQoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBSZW5k
ZXJJbmxpbmUqIHJlbmRlcklubGluZSA9IHRvUmVuZGVySW5saW5lKHJlbmRlcmVyKTsKLQotICAg
ICAgICAgICAgLy8gUmVuZGVySW5saW5lJ3MgYm91bmRpbmcgYm94IGluY2x1ZGVzIHBhZGRpbmdz
IGFuZCBib3JkZXJzLCBleGNsdWRlcyBtYXJnaW5zLgotICAgICAgICAgICAgYm9yZGVyQm94ID0g
cmVuZGVySW5saW5lLT5saW5lc0JvdW5kaW5nQm94KCk7Ci0gICAgICAgICAgICBwYWRkaW5nQm94
ID0gTGF5b3V0UmVjdChib3JkZXJCb3gueCgpICsgcmVuZGVySW5saW5lLT5ib3JkZXJMZWZ0KCks
IGJvcmRlckJveC55KCkgKyByZW5kZXJJbmxpbmUtPmJvcmRlclRvcCgpLAotICAgICAgICAgICAg
ICAgICAgICBib3JkZXJCb3gud2lkdGgoKSAtIHJlbmRlcklubGluZS0+Ym9yZGVyTGVmdCgpIC0g
cmVuZGVySW5saW5lLT5ib3JkZXJSaWdodCgpLCBib3JkZXJCb3guaGVpZ2h0KCkgLSByZW5kZXJJ
bmxpbmUtPmJvcmRlclRvcCgpIC0gcmVuZGVySW5saW5lLT5ib3JkZXJCb3R0b20oKSk7Ci0gICAg
ICAgICAgICBjb250ZW50Qm94ID0gTGF5b3V0UmVjdChwYWRkaW5nQm94LngoKSArIHJlbmRlcklu
bGluZS0+cGFkZGluZ0xlZnQoKSwgcGFkZGluZ0JveC55KCkgKyByZW5kZXJJbmxpbmUtPnBhZGRp
bmdUb3AoKSwKLSAgICAgICAgICAgICAgICAgICAgcGFkZGluZ0JveC53aWR0aCgpIC0gcmVuZGVy
SW5saW5lLT5wYWRkaW5nTGVmdCgpIC0gcmVuZGVySW5saW5lLT5wYWRkaW5nUmlnaHQoKSwgcGFk
ZGluZ0JveC5oZWlnaHQoKSAtIHJlbmRlcklubGluZS0+cGFkZGluZ1RvcCgpIC0gcmVuZGVySW5s
aW5lLT5wYWRkaW5nQm90dG9tKCkpOwotICAgICAgICAgICAgLy8gSWdub3JlIG1hcmdpblRvcCBh
bmQgbWFyZ2luQm90dG9tIGZvciBpbmxpbmVzLgotICAgICAgICAgICAgbWFyZ2luQm94ID0gTGF5
b3V0UmVjdChib3JkZXJCb3gueCgpIC0gcmVuZGVySW5saW5lLT5tYXJnaW5MZWZ0KCksIGJvcmRl
ckJveC55KCksCi0gICAgICAgICAgICAgICAgICAgIGJvcmRlckJveC53aWR0aCgpICsgcmVuZGVy
SW5saW5lLT5tYXJnaW5XaWR0aCgpLCBib3JkZXJCb3guaGVpZ2h0KCkpOwotICAgICAgICB9Ci0K
LSAgICAgICAgRmxvYXRRdWFkIGFic0NvbnRlbnRRdWFkID0gcmVuZGVyZXItPmxvY2FsVG9BYnNv
bHV0ZVF1YWQoRmxvYXRSZWN0KGNvbnRlbnRCb3gpKTsKLSAgICAgICAgRmxvYXRRdWFkIGFic1Bh
ZGRpbmdRdWFkID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KHBhZGRp
bmdCb3gpKTsKLSAgICAgICAgRmxvYXRRdWFkIGFic0JvcmRlclF1YWQgPSByZW5kZXJlci0+bG9j
YWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoYm9yZGVyQm94KSk7Ci0gICAgICAgIEZsb2F0UXVh
ZCBhYnNNYXJnaW5RdWFkID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0
KG1hcmdpbkJveCkpOwotCi0gICAgICAgIGNvbnRlbnRzUXVhZFRvUGFnZShtYWluVmlldywgY29u
dGFpbmluZ1ZpZXcsIGFic0NvbnRlbnRRdWFkKTsKLSAgICAgICAgY29udGVudHNRdWFkVG9QYWdl
KG1haW5WaWV3LCBjb250YWluaW5nVmlldywgYWJzUGFkZGluZ1F1YWQpOwotICAgICAgICBjb250
ZW50c1F1YWRUb1BhZ2UobWFpblZpZXcsIGNvbnRhaW5pbmdWaWV3LCBhYnNCb3JkZXJRdWFkKTsK
LSAgICAgICAgY29udGVudHNRdWFkVG9QYWdlKG1haW5WaWV3LCBjb250YWluaW5nVmlldywgYWJz
TWFyZ2luUXVhZCk7Ci0KLSAgICAgICAgdGl0bGVBbmNob3JCb3ggPSBhYnNNYXJnaW5RdWFkLmVu
Y2xvc2luZ0JvdW5kaW5nQm94KCk7Ci0KLSAgICAgICAgaGlnaGxpZ2h0LT50eXBlID0gSGlnaGxp
Z2h0VHlwZU5vZGU7Ci0gICAgICAgIGhpZ2hsaWdodC0+cXVhZHMuYXBwZW5kKGFic01hcmdpblF1
YWQpOwotICAgICAgICBoaWdobGlnaHQtPnF1YWRzLmFwcGVuZChhYnNCb3JkZXJRdWFkKTsKLSAg
ICAgICAgaGlnaGxpZ2h0LT5xdWFkcy5hcHBlbmQoYWJzUGFkZGluZ1F1YWQpOwotICAgICAgICBo
aWdobGlnaHQtPnF1YWRzLmFwcGVuZChhYnNDb250ZW50UXVhZCk7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQpCi0gICAgICAgICAgICBkcmF3SGlnaGxpZ2h0Rm9yQm94KCpjb250ZXh0LCBhYnNDb250
ZW50UXVhZCwgYWJzUGFkZGluZ1F1YWQsIGFic0JvcmRlclF1YWQsIGFic01hcmdpblF1YWQsIGhp
Z2hsaWdodERhdGEpOwotICAgIH0KLQotICAgIC8vIERyYXcgbm9kZSB0aXRsZSBpZiBuZWNlc3Nh
cnkuCi0KLSAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKGNvbnRleHQgJiYgaGlnaGxpZ2h0RGF0YS0+c2hvd0luZm8pCi0gICAgICAgIGRy
YXdFbGVtZW50VGl0bGUoKmNvbnRleHQsIG5vZGUsIHJlbmRlcmVyLCBwaXhlbFNuYXBwZWRJbnRS
ZWN0KGJvdW5kaW5nQm94KSwgcGl4ZWxTbmFwcGVkSW50UmVjdCh0aXRsZUFuY2hvckJveCksIHZp
c2libGVSZWN0LCBjb250YWluaW5nRnJhbWUtPnNldHRpbmdzKCkpOwotfQotCi1zdGF0aWMgdm9p
ZCBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgRG9jdW1l
bnQqIGRvY3VtZW50LCBIaWdobGlnaHREYXRhKiBoaWdobGlnaHREYXRhLCBIaWdobGlnaHQgKmhp
Z2hsaWdodCkKLXsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBG
bG9hdFJlY3QgaGlnaGxpZ2h0UmVjdCgqKGhpZ2hsaWdodERhdGEtPnJlY3QpKTsKLQotICAgIGhp
Z2hsaWdodC0+dHlwZSA9IEhpZ2hsaWdodFR5cGVSZWN0czsKLSAgICBoaWdobGlnaHQtPnF1YWRz
LmFwcGVuZChoaWdobGlnaHRSZWN0KTsKLQotICAgIGlmIChjb250ZXh0KSB7Ci0gICAgICAgIEZy
YW1lVmlldyogdmlldyA9IGRvY3VtZW50LT5mcmFtZSgpLT52aWV3KCk7Ci0gICAgICAgIGlmICgh
dmlldy0+ZGVsZWdhdGVzU2Nyb2xsaW5nKCkpIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCB2aXNp
YmxlUmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOwotICAgICAgICAgICAgY29udGV4
dC0+dHJhbnNsYXRlKC12aXNpYmxlUmVjdC54KCksIC12aXNpYmxlUmVjdC55KCkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZHJhd091dGxpbmVkUXVhZCgqY29udGV4dCwgaGlnaGxpZ2h0UmVjdCwg
aGlnaGxpZ2h0RGF0YS0+Y29udGVudCwgaGlnaGxpZ2h0RGF0YS0+Y29udGVudE91dGxpbmUpOwot
ICAgIH0KLX0KLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLW5hbWVzcGFjZSBET01Ob2Rl
SGlnaGxpZ2h0ZXIgewotCi12b2lkIGRyYXdIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBEb2N1bWVudCogZG9jdW1lbnQsIEhpZ2hsaWdodERhdGEqIGhpZ2hsaWdodERhdGEpCi17
Ci0gICAgaWYgKCFoaWdobGlnaHREYXRhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBIaWdobGln
aHQgaGlnaGxpZ2h0OwotICAgIGlmIChoaWdobGlnaHREYXRhLT5ub2RlKQotICAgICAgICBnZXRP
ckRyYXdOb2RlSGlnaGxpZ2h0KCZjb250ZXh0LCBoaWdobGlnaHREYXRhLCAmaGlnaGxpZ2h0KTsK
LSAgICBlbHNlIGlmIChoaWdobGlnaHREYXRhLT5yZWN0KQotICAgICAgICBnZXRPckRyYXdSZWN0
SGlnaGxpZ2h0KCZjb250ZXh0LCBkb2N1bWVudCwgaGlnaGxpZ2h0RGF0YSwgJmhpZ2hsaWdodCk7
Ci19Ci0KLXZvaWQgZ2V0SGlnaGxpZ2h0KERvY3VtZW50KiBkb2N1bWVudCwgSGlnaGxpZ2h0RGF0
YSogaGlnaGxpZ2h0RGF0YSwgSGlnaGxpZ2h0KiBoaWdobGlnaHQpCi17Ci0gICAgaWYgKCFoaWdo
bGlnaHREYXRhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBoaWdobGlnaHQtPmNvbnRlbnRDb2xv
ciA9IGhpZ2hsaWdodERhdGEtPmNvbnRlbnQ7Ci0gICAgaGlnaGxpZ2h0LT5wYWRkaW5nQ29sb3Ig
PSBoaWdobGlnaHREYXRhLT5wYWRkaW5nOwotICAgIGhpZ2hsaWdodC0+Ym9yZGVyQ29sb3IgPSBo
aWdobGlnaHREYXRhLT5ib3JkZXI7Ci0gICAgaGlnaGxpZ2h0LT5tYXJnaW5Db2xvciA9IGhpZ2hs
aWdodERhdGEtPm1hcmdpbjsKLSAgICBoaWdobGlnaHQtPnR5cGUgPSBIaWdobGlnaHRUeXBlUmVj
dHM7Ci0KLSAgICBpZiAoaGlnaGxpZ2h0RGF0YS0+bm9kZSkKLSAgICAgICAgZ2V0T3JEcmF3Tm9k
ZUhpZ2hsaWdodCgwLCBoaWdobGlnaHREYXRhLCBoaWdobGlnaHQpOwotICAgIGVsc2UgaWYgKGhp
Z2hsaWdodERhdGEtPnJlY3QpCi0gICAgICAgIGdldE9yRHJhd1JlY3RIaWdobGlnaHQoMCwgZG9j
dW1lbnQsIGhpZ2hsaWdodERhdGEsIGhpZ2hsaWdodCk7Ci19Ci0KLXZvaWQgZHJhd091dGxpbmUo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IpCi17Ci0gICAgRmxvYXRSZWN0IG91dGxpbmVSZWN0ID0gcmVjdDsKLSAgICBk
cmF3T3V0bGluZWRRdWFkKGNvbnRleHQsIG91dGxpbmVSZWN0LCBDb2xvcigpLCBjb2xvcik7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIERPTU5vZGVIaWdobGlnaHRlcgotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5oIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBmN2I2ZjAwZjRmZmUwMjU5MTM1NTI1NGRmZTE5M2QwMzA2MmNlM2Q5Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENv
bXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIERPTU5vZGVIaWdobGlnaHRlcl9oCi0jZGVmaW5lIERPTU5vZGVIaWdobGlnaHRl
cl9oCi0KLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgotI2luY2x1
ZGUgIkxheW91dFR5cGVzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBDb2xvcjsKLWNsYXNzIERvY3VtZW50OwotY2xhc3MgRnJhbWVWaWV3Owot
Y2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgTm9kZTsKLQotc3RydWN0IEhpZ2hsaWdodERh
dGEgewotICAgIENvbG9yIGNvbnRlbnQ7Ci0gICAgQ29sb3IgY29udGVudE91dGxpbmU7Ci0gICAg
Q29sb3IgcGFkZGluZzsKLSAgICBDb2xvciBib3JkZXI7Ci0gICAgQ29sb3IgbWFyZ2luOwotICAg
IGJvb2wgc2hvd0luZm87Ci0KLSAgICAvLyBFaXRoZXIgb2YgdGhlc2UgbXVzdCBiZSAwLgotICAg
IFJlZlB0cjxOb2RlPiBub2RlOwotICAgIE93blB0cjxJbnRSZWN0PiByZWN0OwotfTsKLQotZW51
bSBIaWdobGlnaHRUeXBlIHsKLSAgICBIaWdobGlnaHRUeXBlTm9kZSwKLSAgICBIaWdobGlnaHRU
eXBlUmVjdHMsCi19OwotCi1zdHJ1Y3QgSGlnaGxpZ2h0IHsKLSAgICBDb2xvciBjb250ZW50Q29s
b3I7Ci0gICAgQ29sb3IgcGFkZGluZ0NvbG9yOwotICAgIENvbG9yIGJvcmRlckNvbG9yOwotICAg
IENvbG9yIG1hcmdpbkNvbG9yOwotCi0gICAgLy8gV2hlbiB0aGUgdHlwZSBpcyBOb2RlLCB0aGVy
ZSBhcmUgNCBxdWFkcyAobWFyZ2luLCBib3JkZXIsIHBhZGRpbmcsIGNvbnRlbnQpLgotICAgIC8v
IFdoZW4gdGhlIHR5cGUgaXMgUmVjdHMsIHRoaXMgaXMganVzdCBhIGxpc3Qgb2YgcXVhZHMuCi0g
ICAgSGlnaGxpZ2h0VHlwZSB0eXBlOwotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwotfTsK
LQotbmFtZXNwYWNlIERPTU5vZGVIaWdobGlnaHRlciB7Ci0KLXZvaWQgZHJhd0hpZ2hsaWdodChH
cmFwaGljc0NvbnRleHQmLCBEb2N1bWVudCosIEhpZ2hsaWdodERhdGEqKTsKLXZvaWQgZ2V0SGln
aGxpZ2h0KERvY3VtZW50KiwgSGlnaGxpZ2h0RGF0YSosIEhpZ2hsaWdodCopOwotdm9pZCBkcmF3
T3V0bGluZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiwgY29uc3QgQ29sb3Im
KTsKLQotfSAvLyBuYW1lc3BhY2UgRE9NTm9kZUhpZ2hsaWdodGVyCi0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotCi0jZW5kaWYgLy8gRE9NTm9kZUhpZ2hsaWdodGVyX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBbGxJbk9uZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWxsSW5PbmUuY3BwCmluZGV4IDI2YmJhMmFlYzlm
OWQ5YjBlZGQ2YTg5NWU4ODI3YzRlZWYwOGQ3NDIuLjI5NjhhZTkzNDliNTQwNzk2NTUyOTdjMTk2
ZWIwNTI1MTYyZGIzODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JBbGxJbk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckFsbEluT25lLmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkNvbnNvbGVNZXNzYWdl
LmNwcCIKICNpbmNsdWRlICJDb250ZW50U2VhcmNoVXRpbHMuY3BwIgogI2luY2x1ZGUgIkRPTUVk
aXRvci5jcHAiCi0jaW5jbHVkZSAiRE9NTm9kZUhpZ2hsaWdodGVyLmNwcCIKICNpbmNsdWRlICJE
T01QYXRjaFN1cHBvcnQuY3BwIgogI2luY2x1ZGUgIklkZW50aWZpZXJzRmFjdG9yeS5jcHAiCiAj
aW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHQuY3BwIgpAQCAtNTcsNiArNTYsNyBAQAogI2luY2x1ZGUg
Ikluc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uY3BwIgogI2luY2x1ZGUgIkluc3BlY3Rvck1lbW9yeUFnZW50LmNwcCIKKyNpbmNs
dWRlICJJbnNwZWN0b3JPdmVybGF5LmNwcCIKICNpbmNsdWRlICJJbnNwZWN0b3JQYWdlQWdlbnQu
Y3BwIgogI2luY2x1ZGUgIkluc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIgogI2luY2x1ZGUgIklu
c3BlY3RvclJlc291cmNlQWdlbnQuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDA5NWUxY2M1MWIzNTRhOGY4ZTA4MTQ2YTc5
ZWY3MDhkYjdjZDQ5Y2UuLjUzOTczNzYyYjUxMWRlYWM5M2U4YjBmZjkwNjE2YTY5NDEyN2IwOTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5j
cHAKQEAgLTU2LDYgKzU2LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JJbmRleGVkREJBZ2VudC5o
IgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkluc3Bl
Y3Rvck1lbW9yeUFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yT3ZlcmxheS5oIgogI2luY2x1
ZGUgIkluc3BlY3RvclBhZ2VBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclByb2ZpbGVyQWdl
bnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJjZUFnZW50LmgiCkBAIC03OCw2ICs3OSw3
IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwg
SW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDCiAgICAgOiBtX2luc3RydW1lbnRpbmdBZ2VudHMo
YWRvcHRQdHIobmV3IEluc3RydW1lbnRpbmdBZ2VudHMoKSkpCiAgICAgLCBtX2luamVjdGVkU2Ny
aXB0TWFuYWdlcihJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNyZWF0ZUZvclBhZ2UoKSkKICAgICAs
IG1fc3RhdGUoYWRvcHRQdHIobmV3IEluc3BlY3RvclN0YXRlKGluc3BlY3RvckNsaWVudCkpKQor
ICAgICwgbV9vdmVybGF5KEluc3BlY3Rvck92ZXJsYXk6OmNyZWF0ZShwYWdlLCBpbnNwZWN0b3JD
bGllbnQpKQogICAgICwgbV9wYWdlKHBhZ2UpCiAgICAgLCBtX2luc3BlY3RvckNsaWVudChpbnNw
ZWN0b3JDbGllbnQpCiB7CkBAIC04NSwxMiArODcsMTIgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6
SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGluc3BlY3Rv
ckMKICAgICBtX2luc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRQdHIuZ2V0KCk7CiAgICAg
bV9hZ2VudHMuYXBwZW5kKGluc3BlY3RvckFnZW50UHRyLnJlbGVhc2UoKSk7CiAKLSAgICBPd25Q
dHI8SW5zcGVjdG9yUGFnZUFnZW50PiBwYWdlQWdlbnRQdHIoSW5zcGVjdG9yUGFnZUFnZW50Ojpj
cmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBwYWdlLCBtX2luc3BlY3RvckFnZW50
LCBtX3N0YXRlLmdldCgpLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5nZXQoKSwgaW5zcGVjdG9y
Q2xpZW50KSk7CisgICAgT3duUHRyPEluc3BlY3RvclBhZ2VBZ2VudD4gcGFnZUFnZW50UHRyKElu
c3BlY3RvclBhZ2VBZ2VudDo6Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgcGFn
ZSwgbV9pbnNwZWN0b3JBZ2VudCwgbV9zdGF0ZS5nZXQoKSwgbV9pbmplY3RlZFNjcmlwdE1hbmFn
ZXIuZ2V0KCksIGluc3BlY3RvckNsaWVudCwgbV9vdmVybGF5LmdldCgpKSk7CiAgICAgSW5zcGVj
dG9yUGFnZUFnZW50KiBwYWdlQWdlbnQgPSBwYWdlQWdlbnRQdHIuZ2V0KCk7CiAgICAgbV9wYWdl
QWdlbnQgPSBwYWdlQWdlbnRQdHIuZ2V0KCk7CiAgICAgbV9hZ2VudHMuYXBwZW5kKHBhZ2VBZ2Vu
dFB0ci5yZWxlYXNlKCkpOwogCi0gICAgT3duUHRyPEluc3BlY3RvckRPTUFnZW50PiBkb21BZ2Vu
dFB0cihJbnNwZWN0b3JET01BZ2VudDo6Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQo
KSwgcGFnZUFnZW50LCBpbnNwZWN0b3JDbGllbnQsIG1fc3RhdGUuZ2V0KCksIG1faW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLmdldCgpKSk7CisgICAgT3duUHRyPEluc3BlY3RvckRPTUFnZW50PiBkb21B
Z2VudFB0cihJbnNwZWN0b3JET01BZ2VudDo6Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0FnZW50cy5n
ZXQoKSwgcGFnZUFnZW50LCBtX3N0YXRlLmdldCgpLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5n
ZXQoKSwgbV9vdmVybGF5LmdldCgpKSk7CiAgICAgbV9kb21BZ2VudCA9IGRvbUFnZW50UHRyLmdl
dCgpOwogICAgIG1fYWdlbnRzLmFwcGVuZChkb21BZ2VudFB0ci5yZWxlYXNlKCkpOwogCkBAIC0x
MzAsNyArMTMyLDcgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQ
YWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckMKICAgICBtX2FnZW50cy5hcHBl
bmQoY29uc29sZUFnZW50UHRyLnJlbGVhc2UoKSk7CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKLSAgICBPd25QdHI8SW5zcGVjdG9yRGVidWdnZXJBZ2VudD4gZGVidWdnZXJBZ2Vu
dFB0cihQYWdlRGVidWdnZXJBZ2VudDo6Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQo
KSwgbV9zdGF0ZS5nZXQoKSwgcGFnZSwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuZ2V0KCkpKTsK
KyAgICBPd25QdHI8SW5zcGVjdG9yRGVidWdnZXJBZ2VudD4gZGVidWdnZXJBZ2VudFB0cihQYWdl
RGVidWdnZXJBZ2VudDo6Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgbV9zdGF0
ZS5nZXQoKSwgcGFnZSwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuZ2V0KCksIG1fb3ZlcmxheS5n
ZXQoKSkpOwogICAgIG1fZGVidWdnZXJBZ2VudCA9IGRlYnVnZ2VyQWdlbnRQdHIuZ2V0KCk7CiAg
ICAgbV9hZ2VudHMuYXBwZW5kKGRlYnVnZ2VyQWdlbnRQdHIucmVsZWFzZSgpKTsKIApAQCAtMjk0
LDcgKzI5Niw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZXZhbHVhdGVGb3JUZXN0SW5G
cm9udGVuZChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzCiAKIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6ZHJhd0hpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7
Ci0gICAgbV9kb21BZ2VudC0+ZHJhd0hpZ2hsaWdodChjb250ZXh0KTsKKyAgICBtX3BhZ2VBZ2Vu
dC0+ZHJhd0luc3BlY3Rvck92ZXJsYXkoY29udGV4dCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6Z2V0SGlnaGxpZ2h0KEhpZ2hsaWdodCogaGlnaGxpZ2h0KSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggNDczYmI4
ZGUyNmZlYTBhYzcwNDZmNjY0OTc5YWRmY2Q0ZWNhNWJlZC4uMGI1NTgyY2Q5M2ZkOTliZGU4YTEx
MTAzMTJlYjM5MTljMjNmZjUxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5oCkBAIC01MSw2ICs1MSw3IEBAIGNsYXNzIEluc3BlY3RvckRPTUFn
ZW50OwogY2xhc3MgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDsKIGNsYXNzIEluc3BlY3RvckZyb250
ZW5kOwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7CitjbGFzcyBJbnNwZWN0b3JPdmVy
bGF5OwogY2xhc3MgSW5zcGVjdG9yUGFnZUFnZW50OwogY2xhc3MgSW5zcGVjdG9yUHJvZmlsZXJB
Z2VudDsKIGNsYXNzIEluc3BlY3RvclJlc291cmNlQWdlbnQ7CkBAIC0xMTksNiArMTIwLDcgQEAg
cHJpdmF0ZToKICAgICBPd25QdHI8SW5zdHJ1bWVudGluZ0FnZW50cz4gbV9pbnN0cnVtZW50aW5n
QWdlbnRzOwogICAgIE93blB0cjxJbmplY3RlZFNjcmlwdE1hbmFnZXI+IG1faW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyOwogICAgIE93blB0cjxJbnNwZWN0b3JTdGF0ZT4gbV9zdGF0ZTsKKyAgICBPd25Q
dHI8SW5zcGVjdG9yT3ZlcmxheT4gbV9vdmVybGF5OwogCiAgICAgSW5zcGVjdG9yQWdlbnQqIG1f
aW5zcGVjdG9yQWdlbnQ7CiAgICAgSW5zcGVjdG9yRE9NQWdlbnQqIG1fZG9tQWdlbnQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCA5MDc5
NTg5ZTUxY2U4ZjA4ZTUwZTIwNmU0OWExMzI2YmU5NWMzMDEyLi4xYmY3ZTI1YmEyMjI4OTc1OTdh
MjM2Mzk4NzhlYmEwOWM1ODFiMWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTQ3LDcgKzQ3LDYgQEAKICNpbmNsdWRlICJDb29raWUu
aCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIKICNpbmNsdWRlICJET01FZGl0b3IuaCIKLSNpbmNs
dWRlICJET01Ob2RlSGlnaGxpZ2h0ZXIuaCIKICNpbmNsdWRlICJET01QYXRjaFN1cHBvcnQuaCIK
ICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtNjYsOSAr
NjUsOSBAQAogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJZGVudGlmaWVy
c0ZhY3RvcnkuaCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdE1hbmFnZXIuaCIKLSNpbmNsdWRl
ICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgogI2lu
Y2x1ZGUgIkluc3BlY3Rvckhpc3RvcnkuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JPdmVybGF5Lmgi
CiAjaW5jbHVkZSAiSW5zcGVjdG9yUGFnZUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yU3Rh
dGUuaCIKICNpbmNsdWRlICJJbnN0cnVtZW50aW5nQWdlbnRzLmgiCkBAIC0xOTQsMTEgKzE5Mywx
MSBAQCBTdHJpbmcgSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcoY29uc3QgRXhjZXB0
aW9uQ29kZSYgZWMpCiAgICAgcmV0dXJuICIiOwogfQogCi1JbnNwZWN0b3JET01BZ2VudDo6SW5z
cGVjdG9yRE9NQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywg
SW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIEluc3BlY3RvckNsaWVudCogY2xpZW50LCBJ
bnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyKQorSW5zcGVjdG9yRE9NQWdlbnQ6Okluc3BlY3RvckRPTUFnZW50
KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclBhZ2VB
Z2VudCogcGFnZUFnZW50LCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIEluamVjdGVk
U2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JPdmVybGF5KiBv
dmVybGF5KQogICAgIDogSW5zcGVjdG9yQmFzZUFnZW50PEluc3BlY3RvckRPTUFnZW50PigiRE9N
IiwgaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUpCiAgICAgLCBtX3BhZ2VBZ2Vu
dChwYWdlQWdlbnQpCi0gICAgLCBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX2luamVjdGVkU2Ny
aXB0TWFuYWdlcihpbmplY3RlZFNjcmlwdE1hbmFnZXIpCisgICAgLCBtX292ZXJsYXkob3Zlcmxh
eSkKICAgICAsIG1fZnJvbnRlbmQoMCkKICAgICAsIG1fZG9tTGlzdGVuZXIoMCkKICAgICAsIG1f
bGFzdE5vZGVJZCgxKQpAQCAtMTAzNiw3ICsxMDM1LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6aGlnaGxpZ2h0KCkKIHsKICAgICAvLyBUaGlzIG1ldGhvZCByZXF1aXJlcyBtX2hpZ2hsaWdo
dERhdGEgdG8gaGF2ZSBiZWVuIGZpbGxlZCBpbiBieSBpdHMgY2xpZW50LgogICAgIEFTU0VSVCht
X2hpZ2hsaWdodERhdGEpOwotICAgIG1fY2xpZW50LT5oaWdobGlnaHQoKTsKKyAgICBtX292ZXJs
YXktPnNldEhpZ2hsaWdodChtX2RvY3VtZW50LmdldCgpLCBtX2hpZ2hsaWdodERhdGEuZ2V0KCkp
OwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRSZWN0KEVycm9yU3RyaW5n
KiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+KiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIG91dGxp
bmVDb2xvcikKQEAgLTEwNDUsNyArMTA0NCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Omhp
Z2hsaWdodFJlY3QoRXJyb3JTdHJpbmcqLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50CiAg
ICAgbV9oaWdobGlnaHREYXRhLT5yZWN0ID0gYWRvcHRQdHIobmV3IEludFJlY3QoeCwgeSwgd2lk
dGgsIGhlaWdodCkpOwogICAgIG1faGlnaGxpZ2h0RGF0YS0+Y29udGVudCA9IHBhcnNlQ29sb3Io
Y29sb3IpOwogICAgIG1faGlnaGxpZ2h0RGF0YS0+Y29udGVudE91dGxpbmUgPSBwYXJzZUNvbG9y
KG91dGxpbmVDb2xvcik7Ci0gICAgbV9jbGllbnQtPmhpZ2hsaWdodCgpOworICAgIGhpZ2hsaWdo
dCgpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHROb2RlKApAQCAtMTA4
NCw3ICsxMDgzLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlkZUhpZ2hsaWdodChFcnJv
clN0cmluZyopCiAgICAgICAgIG1faGlnaGxpZ2h0RGF0YS0+bm9kZS5jbGVhcigpOwogICAgICAg
ICBtX2hpZ2hsaWdodERhdGEtPnJlY3QuY2xlYXIoKTsKICAgICB9Ci0gICAgbV9jbGllbnQtPmhp
ZGVIaWdobGlnaHQoKTsKKyAgICBoaWdobGlnaHQoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6bW92ZVRvKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgaW50IHRh
cmdldEVsZW1lbnRJZCwgY29uc3QgaW50KiBjb25zdCBhbmNob3JOb2RlSWQsIGludCogbmV3Tm9k
ZUlkKQpAQCAtMTU5OSwyMCArMTU5OCwxMiBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+IEluc3BlY3RvckRPTUFnZW50OjpyZXNvbHZlTm9kZShObwogICAg
IHJldHVybiBpbmplY3RlZFNjcmlwdC53cmFwTm9kZShub2RlLCBvYmplY3RHcm91cCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRyYXdIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAotewotICAgIGlmICghbV9oaWdobGlnaHREYXRhKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBET01Ob2RlSGlnaGxpZ2h0ZXI6OmRyYXdIaWdobGlnaHQoY29udGV4dCwgbV9o
aWdobGlnaHREYXRhLT5ub2RlID8gbV9oaWdobGlnaHREYXRhLT5ub2RlLT5kb2N1bWVudCgpIDog
bV9kb2N1bWVudC5nZXQoKSwgbV9oaWdobGlnaHREYXRhLmdldCgpKTsKLX0KLQogdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6Z2V0SGlnaGxpZ2h0KEhpZ2hsaWdodCogaGlnaGxpZ2h0KSBjb25zdAog
ewogICAgIGlmICghbV9oaWdobGlnaHREYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBET01O
b2RlSGlnaGxpZ2h0ZXI6OmdldEhpZ2hsaWdodChtX2hpZ2hsaWdodERhdGEtPm5vZGUgPyBtX2hp
Z2hsaWdodERhdGEtPm5vZGUtPmRvY3VtZW50KCkgOiBtX2RvY3VtZW50LmdldCgpLCBtX2hpZ2hs
aWdodERhdGEuZ2V0KCksIGhpZ2hsaWdodCk7CisgICAgbV9vdmVybGF5LT5nZXRIaWdobGlnaHQo
bV9oaWdobGlnaHREYXRhLT5ub2RlID8gbV9oaWdobGlnaHREYXRhLT5ub2RlLT5kb2N1bWVudCgp
IDogbV9kb2N1bWVudC5nZXQoKSwgbV9oaWdobGlnaHREYXRhLmdldCgpLCBoaWdobGlnaHQpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5oCmluZGV4IGIwNWFiNTcwZDlmZDFiMDQ4NzA2YTM5M2EyNDY2NTk3
YjQ5NjM5YmYuLjNiM2Y1OWJlNzY4ODY5YjNhODBjMTY3YmU5YmQyNjEyMDUxYTcyN2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC01Niw5ICs1
Niw5IEBAIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEV2ZW50OwogY2xh
c3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgSW5zcGVjdG9yQ2xpZW50OwogY2xhc3MgSW5zcGVj
dG9yRnJvbnRlbmQ7CiBjbGFzcyBJbnNwZWN0b3JIaXN0b3J5OworY2xhc3MgSW5zcGVjdG9yT3Zl
cmxheTsKIGNsYXNzIEluc3BlY3RvclBhZ2VBZ2VudDsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBI
aXRUZXN0UmVzdWx0OwpAQCAtMTAzLDkgKzEwMyw5IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVh
bCB2b2lkIGRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCopID0gMDsKICAgICB9OwogCi0gICAgc3Rh
dGljIFBhc3NPd25QdHI8SW5zcGVjdG9yRE9NQWdlbnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwg
SW5zcGVjdG9yQ2xpZW50KiBjbGllbnQsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwg
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCisgICAgc3RhdGlj
IFBhc3NPd25QdHI8SW5zcGVjdG9yRE9NQWdlbnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgSW5z
cGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVj
dGVkU2NyaXB0TWFuYWdlciwgSW5zcGVjdG9yT3ZlcmxheSogb3ZlcmxheSkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9yRE9NQWdlbnQoaW5zdHJ1bWVudGluZ0Fn
ZW50cywgcGFnZUFnZW50LCBjbGllbnQsIGluc3BlY3RvclN0YXRlLCBpbmplY3RlZFNjcmlwdE1h
bmFnZXIpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JET01BZ2VudChp
bnN0cnVtZW50aW5nQWdlbnRzLCBwYWdlQWdlbnQsIGluc3BlY3RvclN0YXRlLCBpbmplY3RlZFNj
cmlwdE1hbmFnZXIsIG92ZXJsYXkpKTsKICAgICB9CiAKICAgICBzdGF0aWMgU3RyaW5nIHRvRXJy
b3JTdHJpbmcoY29uc3QgRXhjZXB0aW9uQ29kZSYpOwpAQCAtMTg1LDcgKzE4NSw2IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGluc3BlY3QoTm9kZSopOwogICAgIHZvaWQgZm9jdXNOb2RlKCk7CiAKLSAg
ICB2b2lkIGRyYXdIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAgICAgdm9pZCBn
ZXRIaWdobGlnaHQoSGlnaGxpZ2h0KikgY29uc3Q7CiAKICAgICBJbnNwZWN0b3JIaXN0b3J5KiBo
aXN0b3J5KCkgeyByZXR1cm4gbV9oaXN0b3J5LmdldCgpOyB9CkBAIC0yMDUsNyArMjA0LDcgQEAg
cHVibGljOgogICAgIEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50KCkgeyByZXR1cm4gbV9w
YWdlQWdlbnQ7IH0KIAogcHJpdmF0ZToKLSAgICBJbnNwZWN0b3JET01BZ2VudChJbnN0cnVtZW50
aW5nQWdlbnRzKiwgSW5zcGVjdG9yUGFnZUFnZW50KiwgSW5zcGVjdG9yQ2xpZW50KiwgSW5zcGVj
dG9yU3RhdGUqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKKyAgICBJbnNwZWN0b3JET01BZ2Vu
dChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yUGFnZUFnZW50KiwgSW5zcGVjdG9yU3Rh
dGUqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JPdmVybGF5Kik7CiAKICAgICB2
b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkLCBJbnNwZWN0b3JPYmplY3QqIGhp
Z2hsaWdodENvbmZpZyk7CiAgICAgYm9vbCBzZXRIaWdobGlnaHREYXRhRnJvbUNvbmZpZyhJbnNw
ZWN0b3JPYmplY3QqIGhpZ2hsaWdodENvbmZpZyk7CkBAIC0yNDEsOCArMjQwLDggQEAgcHJpdmF0
ZToKICNlbmRpZgogCiAgICAgSW5zcGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKLSAgICBJ
bnNwZWN0b3JDbGllbnQqIG1fY2xpZW50OwogICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciogbV9p
bmplY3RlZFNjcmlwdE1hbmFnZXI7CisgICAgSW5zcGVjdG9yT3ZlcmxheSogbV9vdmVybGF5Owog
ICAgIEluc3BlY3RvckZyb250ZW5kOjpET00qIG1fZnJvbnRlbmQ7CiAgICAgRE9NTGlzdGVuZXIq
IG1fZG9tTGlzdGVuZXI7CiAgICAgTm9kZVRvSWRNYXAgbV9kb2N1bWVudE5vZGVUb0lkTWFwOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQu
Y3BwCmluZGV4IDExODA3YTNmOWU4Nzk4NDBkZWE2MDNiMzY2M2UyMDlhZmNlZDcyYzguLjc1NTdl
N2I4MjNkOWM0ZWU0MTgzYjg2M2M5YWY0YTk5ZDA1OThhZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKQEAgLTM2LDYgKzM2
LDcgQEAKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkluamVjdGVkU2Ny
aXB0TWFuYWdlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yT3ZlcmxheS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclBhZ2VBZ2VudC5oIgogI2lu
Y2x1ZGUgIkluc3BlY3RvclN0YXRlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCkBA
IC02MCwxMCArNjEsMTEgQEAgc3RhdGljIGNvbnN0IGNoYXIgcGF1c2VPbkV4Y2VwdGlvbnNTdGF0
ZVtdID0gInBhdXNlT25FeGNlcHRpb25zU3RhdGUiOwogCiBjb25zdCBjaGFyKiBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpiYWNrdHJhY2VPYmplY3RHcm91cCA9ICJiYWNrdHJhY2Utb2JqZWN0LWdy
b3VwIjsKIAotSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudChJ
bnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSog
aW5zcGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyKQorSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudChJbnN0
cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5z
cGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQogICAgIDogSW5zcGVjdG9yQmFzZUFnZW50PElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ+KCJEZWJ1Z2dlciIsIGluc3RydW1lbnRpbmdBZ2VudHMsIGlu
c3BlY3RvclN0YXRlKQogICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoaW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKQogICAgICwgbV9mcm9udGVuZCgwKQorICAgICwgbV9vdmVybGF5KG92ZXJsYXkp
CiAgICAgLCBtX3BhdXNlZFNjcmlwdFN0YXRlKDApCiAgICAgLCBtX2phdmFTY3JpcHRQYXVzZVNj
aGVkdWxlZChmYWxzZSkKICAgICAsIG1fbGlzdGVuZXIoMCkKQEAgLTEwMyw2ICsxMDUsOCBAQCB2
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoKQogCiAgICAgaWYgKG1fbGlzdGVu
ZXIpCiAgICAgICAgIG1fbGlzdGVuZXItPmRlYnVnZ2VyV2FzRGlzYWJsZWQoKTsKKyAgICBpZiAo
bV9vdmVybGF5KQorICAgICAgICBtX292ZXJsYXktPnNldFNob3VsZFNob3dQYXVzZVdhcm5pbmco
ZmFsc2UpOwogfQogCiBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVuYWJsZWQoKQpAQCAt
NjU3LDYgKzY2MSw4IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGF1c2UoU2Ny
aXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBTY3JpcHRWYWx1CiAgICAgICAgIH0KICAgICB9
CiAKKyAgICBpZiAobV9vdmVybGF5KQorICAgICAgICBtX292ZXJsYXktPnNldFNob3VsZFNob3dQ
YXVzZVdhcm5pbmcodHJ1ZSk7CiAgICAgbV9mcm9udGVuZC0+cGF1c2VkKGN1cnJlbnRDYWxsRnJh
bWVzKCksIG1fYnJlYWtSZWFzb24sIG1fYnJlYWtBdXhEYXRhKTsKICAgICBtX2phdmFTY3JpcHRQ
YXVzZVNjaGVkdWxlZCA9IGZhbHNlOwogCkBAIC02NzEsNiArNjc3LDggQEAgdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSgpCiAgICAgbV9wYXVzZWRTY3JpcHRTdGF0ZSA9
IDA7CiAgICAgbV9jdXJyZW50Q2FsbFN0YWNrID0gU2NyaXB0VmFsdWUoKTsKICAgICBjbGVhckJy
ZWFrRGV0YWlscygpOworICAgIGlmIChtX292ZXJsYXkpCisgICAgICAgIG1fb3ZlcmxheS0+c2V0
U2hvdWxkU2hvd1BhdXNlV2FybmluZyhmYWxzZSk7CiAgICAgbV9mcm9udGVuZC0+cmVzdW1lZCgp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuaAppbmRleCAwOWM5N2QxOTUzZTRiOWIwMDE2MWY4NzRmNDUzMWZiZGVjN2RiNmNkLi5l
NzhlODhmOWQ2MmJhOGY0YmVmMzU4NmRlM2RmYmI0NWYwOTdkNzgxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAgLTUwLDYgKzUw
LDcgQEAgY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogY2xhc3MgSW5zcGVjdG9yRnJvbnRl
bmQ7CiBjbGFzcyBJbnNwZWN0b3JBcnJheTsKIGNsYXNzIEluc3BlY3Rvck9iamVjdDsKK2NsYXNz
IEluc3BlY3Rvck92ZXJsYXk7CiBjbGFzcyBJbnNwZWN0b3JTdGF0ZTsKIGNsYXNzIEluc3BlY3Rv
clZhbHVlOwogY2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsKQEAgLTEyNCw3ICsxMjUsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBTY3JpcHREZWJ1Z1NlcnZlciYgc2NyaXB0RGVidWdTZXJ2ZXIo
KSA9IDA7CiAKIHByb3RlY3RlZDoKLSAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KEluc3RydW1l
bnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciopOwor
ICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3Rv
clN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9yT3ZlcmxheSopOwogCiAg
ICAgdmlydHVhbCB2b2lkIHN0YXJ0TGlzdGVuaW5nU2NyaXB0RGVidWdTZXJ2ZXIoKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIHN0b3BMaXN0ZW5pbmdTY3JpcHREZWJ1Z1NlcnZlcigpID0gMDsKQEAg
LTE1OSw2ICsxNjAsNyBAQCBwcml2YXRlOgogCiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBt
X2luamVjdGVkU2NyaXB0TWFuYWdlcjsKICAgICBJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXIq
IG1fZnJvbnRlbmQ7CisgICAgSW5zcGVjdG9yT3ZlcmxheSogbV9vdmVybGF5OwogICAgIFNjcmlw
dFN0YXRlKiBtX3BhdXNlZFNjcmlwdFN0YXRlOwogICAgIFNjcmlwdFZhbHVlIG1fY3VycmVudENh
bGxTdGFjazsKICAgICBTY3JpcHRzTWFwIG1fc2NyaXB0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZWZiYzFmZmRhZDUyYTBk
OTE5NzY1NWQ2OGRlN2NkNjExMTA1OGE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCkBAIC0wLDAgKzEsNjA0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIklu
c3BlY3Rvck92ZXJsYXkuaCIKKworI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGb250
Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250RmFtaWx5LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCisjaW5j
bHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJSYW5nZS5oIgorI2lu
Y2x1ZGUgIlJlbmRlckJveE1vZGVsT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgi
CisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNs
dWRlICJTdHlsZWRFbGVtZW50LmgiCisjaW5jbHVkZSAiVGV4dFJ1bi5oIgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3Bh
Y2UgeworCisjaWYgT1MoV0lORE9XUykKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBmb250SGVpZ2h0
UHggPSAxMjsKKyNlbGlmIE9TKE1BQ19PU19YKSB8fCBPUyhVTklYKQorc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGZvbnRIZWlnaHRQeCA9IDExOworI2VuZGlmCisKK2NvbnN0IHN0YXRpYyBpbnQgcmVj
dEluZmxhdGVQeCA9IDQ7Citjb25zdCBzdGF0aWMgaW50IGJvcmRlcldpZHRoUHggPSAxOworY29u
c3Qgc3RhdGljIGludCB0b29sdGlwUGFkZGluZyA9IDQ7CisKK2NvbnN0IHN0YXRpYyBpbnQgYXJy
b3dUaXBPZmZzZXQgPSAyMDsKK2NvbnN0IHN0YXRpYyBmbG9hdCBhcnJvd0hlaWdodCA9IDc7Citj
b25zdCBzdGF0aWMgZmxvYXQgYXJyb3dIYWxmV2lkdGggPSA3OworCitQYXRoIHF1YWRUb1BhdGgo
Y29uc3QgRmxvYXRRdWFkJiBxdWFkKQoreworICAgIFBhdGggcXVhZFBhdGg7CisgICAgcXVhZFBh
dGgubW92ZVRvKHF1YWQucDEoKSk7CisgICAgcXVhZFBhdGguYWRkTGluZVRvKHF1YWQucDIoKSk7
CisgICAgcXVhZFBhdGguYWRkTGluZVRvKHF1YWQucDMoKSk7CisgICAgcXVhZFBhdGguYWRkTGlu
ZVRvKHF1YWQucDQoKSk7CisgICAgcXVhZFBhdGguY2xvc2VTdWJwYXRoKCk7CisgICAgcmV0dXJu
IHF1YWRQYXRoOworfQorCit2b2lkIGRyYXdPdXRsaW5lZFF1YWQoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IsIGNv
bnN0IENvbG9yJiBvdXRsaW5lQ29sb3IpCit7CisgICAgc3RhdGljIGNvbnN0IGludCBvdXRsaW5l
VGhpY2tuZXNzID0gMjsKKworICAgIFBhdGggcXVhZFBhdGggPSBxdWFkVG9QYXRoKHF1YWQpOwor
CisgICAgLy8gQ2xpcCBvdXQgdGhlIHF1YWQsIHRoZW4gZHJhdyB3aXRoIGEgMnB4IHN0cm9rZSB0
byBnZXQgYSBwaXhlbAorICAgIC8vIG9mIG91dGxpbmUgKGJlY2F1c2UgaW5mbGF0aW5nIGEgcXVh
ZCBpcyBoYXJkKQorICAgIHsKKyAgICAgICAgY29udGV4dC5zYXZlKCk7CisgICAgICAgIGNvbnRl
eHQuY2xpcE91dChxdWFkUGF0aCk7CisKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25l
c3Mob3V0bGluZVRoaWNrbmVzcyk7CisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3Iob3V0
bGluZUNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAgY29udGV4dC5zdHJva2VQ
YXRoKHF1YWRQYXRoKTsKKworICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsKKyAgICB9CisKKyAg
ICAvLyBOb3cgZG8gdGhlIGZpbGwKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihmaWxsQ29sb3Is
IENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZmlsbFBhdGgocXVhZFBhdGgpOwor
fQorCit2b2lkIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgY29uc3QgRmxvYXRRdWFkJiBjbGlwUXVhZCwgY29u
c3QgQ29sb3ImIGZpbGxDb2xvcikKK3sKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAgICBQYXRoIGNs
aXBRdWFkUGF0aCA9IHF1YWRUb1BhdGgoY2xpcFF1YWQpOworICAgIGNvbnRleHQuY2xpcE91dChj
bGlwUXVhZFBhdGgpOworICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgcXVhZCwgZmlsbENv
bG9yLCBDb2xvcjo6dHJhbnNwYXJlbnQpOworICAgIGNvbnRleHQucmVzdG9yZSgpOworfQorCit2
b2lkIGRyYXdIaWdobGlnaHRGb3JCb3goR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFF1YWQmIGNvbnRlbnRRdWFkLCBjb25zdCBGbG9hdFF1YWQmIHBhZGRpbmdRdWFkLCBjb25z
dCBGbG9hdFF1YWQmIGJvcmRlclF1YWQsIGNvbnN0IEZsb2F0UXVhZCYgbWFyZ2luUXVhZCwgSGln
aGxpZ2h0RGF0YSogaGlnaGxpZ2h0RGF0YSkKK3sKKyAgICBib29sIGhhc01hcmdpbiA9IGhpZ2hs
aWdodERhdGEtPm1hcmdpbiAhPSBDb2xvcjo6dHJhbnNwYXJlbnQ7CisgICAgYm9vbCBoYXNCb3Jk
ZXIgPSBoaWdobGlnaHREYXRhLT5ib3JkZXIgIT0gQ29sb3I6OnRyYW5zcGFyZW50OworICAgIGJv
b2wgaGFzUGFkZGluZyA9IGhpZ2hsaWdodERhdGEtPnBhZGRpbmcgIT0gQ29sb3I6OnRyYW5zcGFy
ZW50OworICAgIGJvb2wgaGFzQ29udGVudCA9IGhpZ2hsaWdodERhdGEtPmNvbnRlbnQgIT0gQ29s
b3I6OnRyYW5zcGFyZW50IHx8IGhpZ2hsaWdodERhdGEtPmNvbnRlbnRPdXRsaW5lICE9IENvbG9y
Ojp0cmFuc3BhcmVudDsKKworICAgIEZsb2F0UXVhZCBjbGlwUXVhZDsKKyAgICBDb2xvciBjbGlw
Q29sb3I7CisgICAgaWYgKGhhc01hcmdpbiAmJiAoIWhhc0JvcmRlciB8fCBtYXJnaW5RdWFkICE9
IGJvcmRlclF1YWQpKSB7CisgICAgICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChjb250ZXh0
LCBtYXJnaW5RdWFkLCBib3JkZXJRdWFkLCBoaWdobGlnaHREYXRhLT5tYXJnaW4pOworICAgICAg
ICBjbGlwUXVhZCA9IGJvcmRlclF1YWQ7CisgICAgfQorICAgIGlmIChoYXNCb3JkZXIgJiYgKCFo
YXNQYWRkaW5nIHx8IGJvcmRlclF1YWQgIT0gcGFkZGluZ1F1YWQpKSB7CisgICAgICAgIGRyYXdP
dXRsaW5lZFF1YWRXaXRoQ2xpcChjb250ZXh0LCBib3JkZXJRdWFkLCBwYWRkaW5nUXVhZCwgaGln
aGxpZ2h0RGF0YS0+Ym9yZGVyKTsKKyAgICAgICAgY2xpcFF1YWQgPSBwYWRkaW5nUXVhZDsKKyAg
ICB9CisgICAgaWYgKGhhc1BhZGRpbmcgJiYgKCFoYXNDb250ZW50IHx8IHBhZGRpbmdRdWFkICE9
IGNvbnRlbnRRdWFkKSkgeworICAgICAgICBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAoY29udGV4
dCwgcGFkZGluZ1F1YWQsIGNvbnRlbnRRdWFkLCBoaWdobGlnaHREYXRhLT5wYWRkaW5nKTsKKyAg
ICAgICAgY2xpcFF1YWQgPSBjb250ZW50UXVhZDsKKyAgICB9CisgICAgaWYgKGhhc0NvbnRlbnQp
CisgICAgICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgY29udGVudFF1YWQsIGhpZ2hsaWdo
dERhdGEtPmNvbnRlbnQsIGhpZ2hsaWdodERhdGEtPmNvbnRlbnRPdXRsaW5lKTsKK30KKwordm9p
ZCBkcmF3SGlnaGxpZ2h0Rm9yU1ZHUmVuZGVyZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBWZWN0b3I8RmxvYXRRdWFkPiYgYWJzb2x1dGVRdWFkcywgSGlnaGxpZ2h0RGF0YSogaGln
aGxpZ2h0RGF0YSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFic29sdXRlUXVhZHMu
c2l6ZSgpOyArK2kpCisgICAgICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgYWJzb2x1dGVR
dWFkc1tpXSwgaGlnaGxpZ2h0RGF0YS0+Y29udGVudCwgQ29sb3I6OnRyYW5zcGFyZW50KTsKK30K
KworaW50IGRyYXdTdWJzdHJpbmcoY29uc3QgVGV4dFJ1biYgZ2xvYmFsVGV4dFJ1biwgaW50IG9m
ZnNldCwgaW50IGxlbmd0aCwgY29uc3QgQ29sb3ImIHRleHRDb2xvciwgY29uc3QgRm9udCYgZm9u
dCwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiB0aXRsZVJlY3Qp
Cit7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodGV4dENvbG9yLCBDb2xvclNwYWNlRGV2aWNl
UkdCKTsKKyAgICBjb250ZXh0LmRyYXdUZXh0KGZvbnQsIGdsb2JhbFRleHRSdW4sIEludFBvaW50
KHRpdGxlUmVjdC5waXhlbFNuYXBwZWRYKCkgKyByZWN0SW5mbGF0ZVB4LCB0aXRsZVJlY3QucGl4
ZWxTbmFwcGVkWSgpICsgZm9udC5mb250TWV0cmljcygpLmhlaWdodCgpKSwgb2Zmc2V0LCBvZmZz
ZXQgKyBsZW5ndGgpOworICAgIHJldHVybiBvZmZzZXQgKyBsZW5ndGg7Cit9CisKK2Zsb2F0IGNh
bGN1bGF0ZUFycm93VGlwWChjb25zdCBMYXlvdXRSZWN0JiBhbmNob3JCb3gsIGNvbnN0IExheW91
dFJlY3QmIHRpdGxlUmVjdCkKK3sKKyAgICBjb25zdCBzdGF0aWMgaW50IGFuY2hvclRpcE9mZnNl
dFB4ID0gMjsKKworICAgIGludCBtaW5YID0gdGl0bGVSZWN0LngoKSArIGFycm93SGFsZldpZHRo
OworICAgIGludCBtYXhYID0gdGl0bGVSZWN0Lm1heFgoKSAtIGFycm93SGFsZldpZHRoOworICAg
IGludCBhbmNob3JYID0gYW5jaG9yQm94LngoKTsKKyAgICBpbnQgYW5jaG9yTWF4WCA9IGFuY2hv
ckJveC5tYXhYKCk7CisKKyAgICBpbnQgeCA9IHRpdGxlUmVjdC54KCkgKyBhcnJvd1RpcE9mZnNl
dDsgLy8gRGVmYXVsdCB0b29sdGlwIHBvc2l0aW9uLgorICAgIGlmICh4IDwgYW5jaG9yWCkKKyAg
ICAgICAgeCA9IGFuY2hvclggKyBhbmNob3JUaXBPZmZzZXRQeDsKKyAgICBlbHNlIGlmICh4ID4g
YW5jaG9yTWF4WCkKKyAgICAgICAgeCA9IGFuY2hvck1heFggLSBhbmNob3JUaXBPZmZzZXRQeDsK
KworICAgIGlmICh4IDwgbWluWCkKKyAgICAgICAgeCA9IG1pblg7CisgICAgZWxzZSBpZiAoeCA+
IG1heFgpCisgICAgICAgIHggPSBtYXhYOworCisgICAgcmV0dXJuIHg7Cit9CisKK3ZvaWQgc2V0
VXBGb250RGVzY3JpcHRpb24oRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFdlYkNv
cmU6OlNldHRpbmdzKiBzZXR0aW5ncykKK3sKKyNkZWZpbmUgVE9PTFRJUF9GT05UX0ZBTUlMSUVT
KHNpemUsIC4uLikgXAorc3RhdGljIGNvbnN0IHVuc2lnbmVkIHRvb2x0aXBGb250RmFjZVNpemUg
PSBzaXplO1wKK3N0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcqIHRvb2x0aXBGb250RmFjZVtzaXpl
XSA9IHsgX19WQV9BUkdTX18gfTsKKworI2lmIE9TKFdJTkRPV1MpCitUT09MVElQX0ZPTlRfRkFN
SUxJRVMoMiwgbmV3IEF0b21pY1N0cmluZygiQ29uc29sYXMiKSwgbmV3IEF0b21pY1N0cmluZygi
THVjaWRhIENvbnNvbGUiKSkKKyNlbGlmIE9TKE1BQ19PU19YKQorVE9PTFRJUF9GT05UX0ZBTUlM
SUVTKDIsIG5ldyBBdG9taWNTdHJpbmcoIk1lbmxvIiksIG5ldyBBdG9taWNTdHJpbmcoIk1vbmFj
byIpKQorI2VsaWYgT1MoVU5JWCkKK1RPT0xUSVBfRk9OVF9GQU1JTElFUygxLCBuZXcgQXRvbWlj
U3RyaW5nKCJkZWphdnUgc2FucyBtb25vIikpCisjZW5kaWYKKy8vIEluIHRoZSBkZWZhdWx0IGNh
c2UsIHdlIGdldCB0aGUgc2V0dGluZ3MtcHJvdmlkZWQgbW9ub3NwYWNlIGZvbnQuCisKKyN1bmRl
ZiBUT09MVElQX0ZPTlRfRkFNSUxJRVMKKworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJp
bmdNb2RlKHNldHRpbmdzLT5mb250UmVuZGVyaW5nTW9kZSgpKTsKKyAgICBmb250RGVzY3JpcHRp
b24uc2V0Q29tcHV0ZWRTaXplKGZvbnRIZWlnaHRQeCk7CisKKyAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGZpeGVkRm9udEZhbWlseSA9IHNldHRpbmdzLT5maXhlZEZvbnRGYW1pbHkoKTsKKyAgICBp
ZiAoIWZpeGVkRm9udEZhbWlseS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHkpOworICAg
ICAgICBGb250RmFtaWx5KiBjdXJyZW50RmFtaWx5ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHRvb2x0aXBGb250RmFjZVNpemU7ICsraSkgeworICAgICAgICAgICAgaWYg
KCFjdXJyZW50RmFtaWx5KSB7CisgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0
RmFtaWx5KCkuc2V0RmFtaWx5KCp0b29sdGlwRm9udEZhY2VbaV0pOworICAgICAgICAgICAgICAg
IGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLmFwcGVuZEZhbWlseSgwKTsKKyAgICAgICAg
ICAgICAgICBjdXJyZW50RmFtaWx5ID0gJmZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8U2hhcmVkRm9udEZh
bWlseT4gbmV3RmFtaWx5ID0gU2hhcmVkRm9udEZhbWlseTo6Y3JlYXRlKCk7CisgICAgICAgICAg
ICAgICAgbmV3RmFtaWx5LT5zZXRGYW1pbHkoKnRvb2x0aXBGb250RmFjZVtpXSk7CisgICAgICAg
ICAgICAgICAgY3VycmVudEZhbWlseS0+YXBwZW5kRmFtaWx5KG5ld0ZhbWlseSk7CisgICAgICAg
ICAgICAgICAgY3VycmVudEZhbWlseSA9IG5ld0ZhbWlseS5nZXQoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBSZWZQdHI8U2hhcmVkRm9udEZhbWlseT4gbmV3RmFtaWx5ID0g
U2hhcmVkRm9udEZhbWlseTo6Y3JlYXRlKCk7CisgICAgICAgIG5ld0ZhbWlseS0+c2V0RmFtaWx5
KGZpeGVkRm9udEZhbWlseSk7CisgICAgICAgIGN1cnJlbnRGYW1pbHktPmFwcGVuZEZhbWlseShu
ZXdGYW1pbHkpOworICAgICAgICBjdXJyZW50RmFtaWx5ID0gbmV3RmFtaWx5LmdldCgpOworICAg
IH0KK30KKwordm9pZCBkcmF3RWxlbWVudFRpdGxlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Tm9kZSogbm9kZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50UmVjdCYgYm91bmRp
bmdCb3gsIGNvbnN0IEludFJlY3QmIGFuY2hvckJveCwgY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxl
UmVjdCwgV2ViQ29yZTo6U2V0dGluZ3MqIHNldHRpbmdzKQoreworICAgIERFRklORV9TVEFUSUNf
TE9DQUwoQ29sb3IsIGJhY2tncm91bmRDb2xvciwgKDI1NSwgMjU1LCAxOTQpKTsKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKENvbG9yLCB0YWdDb2xvciwgKDEzNiwgMTgsIDEyOCkpOyAvLyBTYW1l
IGFzIC53ZWJraXQtaHRtbC10YWcuCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgYXR0
ckNvbG9yLCAoMjYsIDI2LCAxNjYpKTsgLy8gU2FtZSBhcyAud2Via2l0LWh0bWwtYXR0cmlidXRl
LXZhbHVlLgorICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIG5vcm1hbENvbG9yLCAoQ29s
b3I6OmJsYWNrKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgcHhBbmRCb3JkZXJD
b2xvciwgKDEyOCwgMTI4LCAxMjgpKTsKKworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5n
LCBweFN0cmluZywgKCJweCIpKTsKKyAgICBjb25zdCBzdGF0aWMgVUNoYXIgdGltZXNVQ2hhcltd
ID0geyAweDAwMjAsIDB4MDBENywgMHgwMDIwLCAwIH07CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChTdHJpbmcsIHRpbWVzU3RyaW5nLCAodGltZXNVQ2hhcikpOyAvLyAmdGltZXM7IHN0cmluZwor
CisgICAgRm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9udENhY2hlUHVyZ2VQcmV2ZW50ZXI7CisK
KyAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOworICAg
IGJvb2wgaXNYSFRNTCA9IGVsZW1lbnQtPmRvY3VtZW50KCktPmlzWEhUTUxEb2N1bWVudCgpOwor
ICAgIFN0cmluZ0J1aWxkZXIgbm9kZVRpdGxlOworICAgIG5vZGVUaXRsZS5hcHBlbmQoaXNYSFRN
TCA/IGVsZW1lbnQtPm5vZGVOYW1lKCkgOiBlbGVtZW50LT5ub2RlTmFtZSgpLmxvd2VyKCkpOwor
ICAgIHVuc2lnbmVkIHRhZ05hbWVMZW5ndGggPSBub2RlVGl0bGUubGVuZ3RoKCk7CisKKyAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGlkVmFsdWUgPSBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpOwor
ICAgIHVuc2lnbmVkIGlkU3RyaW5nTGVuZ3RoID0gMDsKKyAgICBTdHJpbmcgaWRTdHJpbmc7Cisg
ICAgaWYgKCFpZFZhbHVlLmlzTnVsbCgpICYmICFpZFZhbHVlLmlzRW1wdHkoKSkgeworICAgICAg
ICBub2RlVGl0bGUuYXBwZW5kKCIjIik7CisgICAgICAgIG5vZGVUaXRsZS5hcHBlbmQoaWRWYWx1
ZSk7CisgICAgICAgIGlkU3RyaW5nTGVuZ3RoID0gMSArIGlkVmFsdWUubGVuZ3RoKCk7CisgICAg
fQorCisgICAgSGFzaFNldDxBdG9taWNTdHJpbmc+IHVzZWRDbGFzc05hbWVzOworICAgIHVuc2ln
bmVkIGNsYXNzZXNTdHJpbmdMZW5ndGggPSAwOworICAgIGlmIChlbGVtZW50LT5oYXNDbGFzcygp
ICYmIGVsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpKSB7CisgICAgICAgIGNvbnN0IFNwYWNlU3Bs
aXRTdHJpbmcmIGNsYXNzTmFtZXNTdHJpbmcgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4o
ZWxlbWVudCktPmNsYXNzTmFtZXMoKTsKKyAgICAgICAgc2l6ZV90IGNsYXNzTmFtZUNvdW50ID0g
Y2xhc3NOYW1lc1N0cmluZy5zaXplKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y2xhc3NOYW1lQ291bnQ7ICsraSkgeworICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBj
bGFzc05hbWUgPSBjbGFzc05hbWVzU3RyaW5nW2ldOworICAgICAgICAgICAgaWYgKHVzZWRDbGFz
c05hbWVzLmNvbnRhaW5zKGNsYXNzTmFtZSkpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB1c2VkQ2xhc3NOYW1lcy5hZGQoY2xhc3NOYW1lKTsKKyAgICAgICAgICAgIG5v
ZGVUaXRsZS5hcHBlbmQoIi4iKTsKKyAgICAgICAgICAgIG5vZGVUaXRsZS5hcHBlbmQoY2xhc3NO
YW1lKTsKKyAgICAgICAgICAgIGNsYXNzZXNTdHJpbmdMZW5ndGggKz0gMSArIGNsYXNzTmFtZS5s
ZW5ndGgoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBt
b2RlbE9iamVjdCA9IHJlbmRlcmVyLT5pc0JveE1vZGVsT2JqZWN0KCkgPyB0b1JlbmRlckJveE1v
ZGVsT2JqZWN0KHJlbmRlcmVyKSA6IDA7CisKKyAgICBTdHJpbmcgd2lkdGhOdW1iZXJQYXJ0ID0g
IiAiICsgU3RyaW5nOjpudW1iZXIobW9kZWxPYmplY3QgPyBhZGp1c3RGb3JBYnNvbHV0ZVpvb20o
bW9kZWxPYmplY3QtPnBpeGVsU25hcHBlZE9mZnNldFdpZHRoKCksIG1vZGVsT2JqZWN0KSA6IGJv
dW5kaW5nQm94LndpZHRoKCkpOworICAgIG5vZGVUaXRsZS5hcHBlbmQod2lkdGhOdW1iZXJQYXJ0
KTsKKyAgICBub2RlVGl0bGUuYXBwZW5kKHB4U3RyaW5nKTsKKyAgICBub2RlVGl0bGUuYXBwZW5k
KHRpbWVzU3RyaW5nKTsKKyAgICBTdHJpbmcgaGVpZ2h0TnVtYmVyUGFydCA9IFN0cmluZzo6bnVt
YmVyKG1vZGVsT2JqZWN0ID8gYWRqdXN0Rm9yQWJzb2x1dGVab29tKG1vZGVsT2JqZWN0LT5waXhl
bFNuYXBwZWRPZmZzZXRIZWlnaHQoKSwgbW9kZWxPYmplY3QpIDogYm91bmRpbmdCb3guaGVpZ2h0
KCkpOworICAgIG5vZGVUaXRsZS5hcHBlbmQoaGVpZ2h0TnVtYmVyUGFydCk7CisgICAgbm9kZVRp
dGxlLmFwcGVuZChweFN0cmluZyk7CisKKyAgICBGb250RGVzY3JpcHRpb24gZGVzYzsKKyAgICBz
ZXRVcEZvbnREZXNjcmlwdGlvbihkZXNjLCBzZXR0aW5ncyk7CisgICAgRm9udCBmb250ID0gRm9u
dChkZXNjLCAwLCAwKTsKKyAgICBmb250LnVwZGF0ZSgwKTsKKworICAgIFRleHRSdW4gbm9kZVRp
dGxlUnVuKG5vZGVUaXRsZS50b1N0cmluZygpKTsKKyAgICBJbnRQb2ludCB0aXRsZUJhc2VQb2lu
dCA9IEludFBvaW50KGFuY2hvckJveC54KCksIGFuY2hvckJveC5tYXhZKCkgLSAxKTsKKyAgICB0
aXRsZUJhc2VQb2ludC5tb3ZlKHJlY3RJbmZsYXRlUHgsIHJlY3RJbmZsYXRlUHgpOworICAgIElu
dFJlY3QgdGl0bGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmb250LnNlbGVjdGlvblJlY3RGb3JU
ZXh0KG5vZGVUaXRsZVJ1biwgdGl0bGVCYXNlUG9pbnQsIGZvbnRIZWlnaHRQeCkpOworICAgIHRp
dGxlUmVjdC5pbmZsYXRlKHJlY3RJbmZsYXRlUHgpOworCisgICAgLy8gVGhlIGluaXRpYWwgb2Zm
c2V0cyBuZWVkZWQgdG8gY29tcGVuc2F0ZSBmb3IgYSAxcHgtdGhpY2sgYm9yZGVyIHN0cm9rZSAo
d2hpY2ggaXMgbm90IGEgcGFydCBvZiB0aGUgcmVjdGFuZ2xlKS4KKyAgICBpbnQgZHggPSAtYm9y
ZGVyV2lkdGhQeDsKKyAgICBpbnQgZHkgPSBib3JkZXJXaWR0aFB4OworCisgICAgLy8gSWYgdGhl
IHRpcCBzdGlja3MgYmV5b25kIHRoZSByaWdodCBvZiB2aXNpYmxlUmVjdCwgcmlnaHQtYWxpZ24g
dGhlIHRpcCB3aXRoIHRoZSBzYWlkIGJvdW5kYXJ5LgorICAgIGlmICh0aXRsZVJlY3QubWF4WCgp
ICsgZHggPiB2aXNpYmxlUmVjdC5tYXhYKCkpCisgICAgICAgIGR4ID0gdmlzaWJsZVJlY3QubWF4
WCgpIC0gdGl0bGVSZWN0Lm1heFgoKTsKKworICAgIC8vIElmIHRoZSB0aXAgc3RpY2tzIGJleW9u
ZCB0aGUgbGVmdCBvZiB2aXNpYmxlUmVjdCwgbGVmdC1hbGlnbiB0aGUgdGlwIHdpdGggdGhlIHNh
aWQgYm91bmRhcnkuCisgICAgaWYgKHRpdGxlUmVjdC54KCkgKyBkeCA8IHZpc2libGVSZWN0Lngo
KSkKKyAgICAgICAgZHggPSB2aXNpYmxlUmVjdC54KCkgLSB0aXRsZVJlY3QueCgpIC0gYm9yZGVy
V2lkdGhQeDsKKworICAgIC8vIElmIHRoZSB0aXAgc3RpY2tzIGJleW9uZCB0aGUgYm90dG9tIG9m
IHZpc2libGVSZWN0LCBzaG93IHRoZSB0aXAgYXQgdG9wIG9mIGJvdW5kaW5nIGJveC4KKyAgICBp
ZiAodGl0bGVSZWN0Lm1heFkoKSArIGR5ID4gdmlzaWJsZVJlY3QubWF4WSgpKSB7CisgICAgICAg
IGR5ID0gYW5jaG9yQm94LnkoKSAtIHRpdGxlUmVjdC5tYXhZKCkgLSBib3JkZXJXaWR0aFB4Owor
ICAgICAgICAvLyBJZiB0aGUgdGlwIHN0aWxsIHN0aWNrcyBiZXlvbmQgdGhlIGJvdHRvbSBvZiB2
aXNpYmxlUmVjdCwgYm90dG9tLWFsaWduIHRoZSB0aXAgd2l0aCB0aGUgc2FpZCBib3VuZGFyeS4K
KyAgICAgICAgaWYgKHRpdGxlUmVjdC5tYXhZKCkgKyBkeSA+IHZpc2libGVSZWN0Lm1heFkoKSkK
KyAgICAgICAgICAgIGR5ID0gdmlzaWJsZVJlY3QubWF4WSgpIC0gdGl0bGVSZWN0Lm1heFkoKTsK
KyAgICB9CisKKyAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIHRvcCBvZiB2aXNp
YmxlUmVjdCwgc2hvdyB0aGUgdGlwIGF0IHRvcCBvZiB2aXNpYmxlUmVjdC4KKyAgICBpZiAodGl0
bGVSZWN0LnkoKSArIGR5IDwgdmlzaWJsZVJlY3QueSgpKQorICAgICAgICBkeSA9IHZpc2libGVS
ZWN0LnkoKSAtIHRpdGxlUmVjdC55KCkgKyBib3JkZXJXaWR0aFB4OworCisgICAgdGl0bGVSZWN0
Lm1vdmUoZHgsIGR5KTsKKworICAgIGJvb2wgaXNBcnJvd0F0VG9wID0gdGl0bGVSZWN0LnkoKSA+
IGFuY2hvckJveC55KCk7CisgICAgdGl0bGVSZWN0Lm1vdmUoMCwgdG9vbHRpcFBhZGRpbmcgKiAo
aXNBcnJvd0F0VG9wID8gMSA6IC0xKSk7CisKKyAgICB7CisgICAgICAgIGZsb2F0IGFycm93VGlw
WCA9IGNhbGN1bGF0ZUFycm93VGlwWChhbmNob3JCb3gsIHRpdGxlUmVjdCk7CisgICAgICAgIGlu
dCBhcnJvd0Jhc2VZID0gaXNBcnJvd0F0VG9wID8gdGl0bGVSZWN0LnkoKSA6IHRpdGxlUmVjdC5t
YXhZKCk7CisgICAgICAgIGludCBhcnJvd09wcG9zaXRlWSA9IGlzQXJyb3dBdFRvcCA/IHRpdGxl
UmVjdC5tYXhZKCkgOiB0aXRsZVJlY3QueSgpOworCisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnRz
WzhdOworICAgICAgICBwb2ludHNbMF0gPSBGbG9hdFBvaW50KGFycm93VGlwWCAtIGFycm93SGFs
ZldpZHRoLCBhcnJvd0Jhc2VZKTsKKyAgICAgICAgcG9pbnRzWzFdID0gRmxvYXRQb2ludChhcnJv
d1RpcFgsIGFycm93QmFzZVkgKyBhcnJvd0hlaWdodCAqIChpc0Fycm93QXRUb3AgPyAtMSA6IDEp
KTsKKyAgICAgICAgcG9pbnRzWzJdID0gRmxvYXRQb2ludChhcnJvd1RpcFggKyBhcnJvd0hhbGZX
aWR0aCwgYXJyb3dCYXNlWSk7CisgICAgICAgIHBvaW50c1szXSA9IEZsb2F0UG9pbnQodGl0bGVS
ZWN0Lm1heFgoKSwgYXJyb3dCYXNlWSk7CisgICAgICAgIHBvaW50c1s0XSA9IEZsb2F0UG9pbnQo
dGl0bGVSZWN0Lm1heFgoKSwgYXJyb3dPcHBvc2l0ZVkpOworICAgICAgICBwb2ludHNbNV0gPSBG
bG9hdFBvaW50KHRpdGxlUmVjdC54KCksIGFycm93T3Bwb3NpdGVZKTsKKyAgICAgICAgcG9pbnRz
WzZdID0gRmxvYXRQb2ludCh0aXRsZVJlY3QueCgpLCBhcnJvd0Jhc2VZKTsKKyAgICAgICAgcG9p
bnRzWzddID0gcG9pbnRzWzBdOworCisgICAgICAgIFBhdGggcGF0aDsKKyAgICAgICAgcGF0aC5t
b3ZlVG8ocG9pbnRzWzBdKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCA4OyArK2kpCisg
ICAgICAgICAgICBwYXRoLmFkZExpbmVUbyhwb2ludHNbaV0pOworCisgICAgICAgIGNvbnRleHQu
c2F2ZSgpOworICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLjVmLCAwLjVmKTsKKyAgICAgICAg
Y29udGV4dC5zZXRTdHJva2VDb2xvcihweEFuZEJvcmRlckNvbG9yLCBDb2xvclNwYWNlRGV2aWNl
UkdCKTsKKyAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoYmFja2dyb3VuZENvbG9yLCBDb2xv
clNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoYm9y
ZGVyV2lkdGhQeCk7CisgICAgICAgIGNvbnRleHQuZmlsbFBhdGgocGF0aCk7CisgICAgICAgIGNv
bnRleHQuc3Ryb2tlUGF0aChwYXRoKTsKKyAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7CisgICAg
fQorCisgICAgaW50IGN1cnJlbnRQb3MgPSAwOworICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3Ry
aW5nKG5vZGVUaXRsZVJ1biwgY3VycmVudFBvcywgdGFnTmFtZUxlbmd0aCwgdGFnQ29sb3IsIGZv
bnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7CisgICAgaWYgKGlkU3RyaW5nTGVuZ3RoKQorICAgICAg
ICBjdXJyZW50UG9zID0gZHJhd1N1YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIGlk
U3RyaW5nTGVuZ3RoLCBhdHRyQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7CisgICAg
aWYgKGNsYXNzZXNTdHJpbmdMZW5ndGgpCisgICAgICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3Ry
aW5nKG5vZGVUaXRsZVJ1biwgY3VycmVudFBvcywgY2xhc3Nlc1N0cmluZ0xlbmd0aCwgYXR0ckNv
bG9yLCBmb250LCBjb250ZXh0LCB0aXRsZVJlY3QpOworICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vi
c3RyaW5nKG5vZGVUaXRsZVJ1biwgY3VycmVudFBvcywgd2lkdGhOdW1iZXJQYXJ0Lmxlbmd0aCgp
LCBub3JtYWxDb2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVSZWN0KTsKKyAgICBjdXJyZW50UG9z
ID0gZHJhd1N1YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIHB4U3RyaW5nLmxlbmd0
aCgpICsgdGltZXNTdHJpbmcubGVuZ3RoKCksIHB4QW5kQm9yZGVyQ29sb3IsIGZvbnQsIGNvbnRl
eHQsIHRpdGxlUmVjdCk7CisgICAgY3VycmVudFBvcyA9IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxl
UnVuLCBjdXJyZW50UG9zLCBoZWlnaHROdW1iZXJQYXJ0Lmxlbmd0aCgpLCBub3JtYWxDb2xvciwg
Zm9udCwgY29udGV4dCwgdGl0bGVSZWN0KTsKKyAgICBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1
biwgY3VycmVudFBvcywgcHhTdHJpbmcubGVuZ3RoKCksIHB4QW5kQm9yZGVyQ29sb3IsIGZvbnQs
IGNvbnRleHQsIHRpdGxlUmVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnRlbnRzUXVhZFRvUGFn
ZShjb25zdCBGcmFtZVZpZXcqIG1haW5WaWV3LCBjb25zdCBGcmFtZVZpZXcqIHZpZXcsIEZsb2F0
UXVhZCYgcXVhZCkKK3sKKyAgICBxdWFkLnNldFAxKHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhy
b3VuZGVkSW50UG9pbnQocXVhZC5wMSgpKSkpOworICAgIHF1YWQuc2V0UDIodmlldy0+Y29udGVu
dHNUb1Jvb3RWaWV3KHJvdW5kZWRJbnRQb2ludChxdWFkLnAyKCkpKSk7CisgICAgcXVhZC5zZXRQ
Myh2aWV3LT5jb250ZW50c1RvUm9vdFZpZXcocm91bmRlZEludFBvaW50KHF1YWQucDMoKSkpKTsK
KyAgICBxdWFkLnNldFA0KHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhyb3VuZGVkSW50UG9pbnQo
cXVhZC5wNCgpKSkpOworICAgIHF1YWQgKz0gbWFpblZpZXctPnNjcm9sbE9mZnNldCgpOworfQor
CitzdGF0aWMgdm9pZCBnZXRPckRyYXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgSGlnaGxpZ2h0RGF0YSogaGlnaGxpZ2h0RGF0YSwgSGlnaGxpZ2h0KiBoaWdobGlnaHQp
Cit7CisgICAgTm9kZSogbm9kZSA9IGhpZ2hsaWdodERhdGEtPm5vZGUuZ2V0KCk7CisgICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgRnJhbWUqIGNvbnRh
aW5pbmdGcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7CisKKyAgICBpZiAoIXJlbmRl
cmVyIHx8ICFjb250YWluaW5nRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lVmll
dyogY29udGFpbmluZ1ZpZXcgPSBjb250YWluaW5nRnJhbWUtPnZpZXcoKTsKKyAgICBGcmFtZVZp
ZXcqIG1haW5WaWV3ID0gY29udGFpbmluZ0ZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLT52aWV3
KCk7CisgICAgSW50UmVjdCBib3VuZGluZ0JveCA9IHBpeGVsU25hcHBlZEludFJlY3QoY29udGFp
bmluZ1ZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhyZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0Jv
eFJlY3QoKSkpOworICAgIGJvdW5kaW5nQm94Lm1vdmUobWFpblZpZXctPnNjcm9sbE9mZnNldCgp
KTsKKyAgICBJbnRSZWN0IHRpdGxlQW5jaG9yQm94ID0gYm91bmRpbmdCb3g7CisKKyAgICBGbG9h
dFJlY3QgdmlzaWJsZVJlY3QgPSBtYWluVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAg
Ly8gRG9uJ3QgdHJhbnNsYXRlIHRoZSBjb250ZXh0IGlmIHRoZSBmcmFtZSBpcyByZW5kZXJlZCBp
biBwYWdlIGNvb3JkaW5hdGVzLgorICAgIGlmIChjb250ZXh0ICYmICFtYWluVmlldy0+ZGVsZWdh
dGVzU2Nyb2xsaW5nKCkpCisgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtdmlzaWJsZVJlY3Qu
eCgpLCAtdmlzaWJsZVJlY3QueSgpKTsKKworICAgIC8vIFJlbmRlclNWR1Jvb3Qgc2hvdWxkIGJl
IGhpZ2hsaWdodGVkIHRocm91Z2ggdGhlIGlzQm94KCkgY29kZSBwYXRoLCBhbGwgb3RoZXIgU1ZH
IGVsZW1lbnRzIHNob3VsZCBqdXN0IGR1bXAgdGhlaXIgYWJzb2x1dGVRdWFkcygpLgorI2lmIEVO
QUJMRShTVkcpCisgICAgYm9vbCBpc1NWR1JlbmRlcmVyID0gcmVuZGVyZXItPm5vZGUoKSAmJiBy
ZW5kZXJlci0+bm9kZSgpLT5pc1NWR0VsZW1lbnQoKSAmJiAhcmVuZGVyZXItPmlzU1ZHUm9vdCgp
OworI2Vsc2UKKyAgICBib29sIGlzU1ZHUmVuZGVyZXIgPSBmYWxzZTsKKyNlbmRpZgorCisgICAg
aWYgKGlzU1ZHUmVuZGVyZXIpIHsKKyAgICAgICAgaGlnaGxpZ2h0LT50eXBlID0gSGlnaGxpZ2h0
VHlwZVJlY3RzOworICAgICAgICByZW5kZXJlci0+YWJzb2x1dGVRdWFkcyhoaWdobGlnaHQtPnF1
YWRzKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBoaWdobGlnaHQtPnF1YWRzLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgY29udGVudHNRdWFkVG9QYWdlKG1haW5WaWV3LCBjb250
YWluaW5nVmlldywgaGlnaGxpZ2h0LT5xdWFkc1tpXSk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgICAgICBkcmF3SGlnaGxpZ2h0Rm9yU1ZHUmVuZGVyZXIoKmNvbnRleHQsIGhpZ2hs
aWdodC0+cXVhZHMsIGhpZ2hsaWdodERhdGEpOworICAgIH0gZWxzZSBpZiAocmVuZGVyZXItPmlz
Qm94KCkgfHwgcmVuZGVyZXItPmlzUmVuZGVySW5saW5lKCkpIHsKKyAgICAgICAgTGF5b3V0UmVj
dCBjb250ZW50Qm94OworICAgICAgICBMYXlvdXRSZWN0IHBhZGRpbmdCb3g7CisgICAgICAgIExh
eW91dFJlY3QgYm9yZGVyQm94OworICAgICAgICBMYXlvdXRSZWN0IG1hcmdpbkJveDsKKworICAg
ICAgICBpZiAocmVuZGVyZXItPmlzQm94KCkpIHsKKyAgICAgICAgICAgIFJlbmRlckJveCogcmVu
ZGVyQm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIpOworCisgICAgICAgICAgICAvLyBSZW5kZXJC
b3ggcmV0dXJucyB0aGUgInB1cmUiIGNvbnRlbnQgYXJlYSBib3gsIGV4Y2x1c2l2ZSBvZiB0aGUg
c2Nyb2xsYmFycyAoaWYgcHJlc2VudCksIHdoaWNoIGFsc28gY291bnQgdG93YXJkcyB0aGUgY29u
dGVudCBhcmVhIGluIENTUy4KKyAgICAgICAgICAgIGNvbnRlbnRCb3ggPSByZW5kZXJCb3gtPmNv
bnRlbnRCb3hSZWN0KCk7CisgICAgICAgICAgICBjb250ZW50Qm94LnNldFdpZHRoKGNvbnRlbnRC
b3gud2lkdGgoKSArIHJlbmRlckJveC0+dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpKTsKKyAgICAg
ICAgICAgIGNvbnRlbnRCb3guc2V0SGVpZ2h0KGNvbnRlbnRCb3guaGVpZ2h0KCkgKyByZW5kZXJC
b3gtPmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSk7CisKKyAgICAgICAgICAgIHBhZGRpbmdC
b3ggPSBMYXlvdXRSZWN0KGNvbnRlbnRCb3gueCgpIC0gcmVuZGVyQm94LT5wYWRkaW5nTGVmdCgp
LCBjb250ZW50Qm94LnkoKSAtIHJlbmRlckJveC0+cGFkZGluZ1RvcCgpLAorICAgICAgICAgICAg
ICAgICAgICBjb250ZW50Qm94LndpZHRoKCkgKyByZW5kZXJCb3gtPnBhZGRpbmdMZWZ0KCkgKyBy
ZW5kZXJCb3gtPnBhZGRpbmdSaWdodCgpLCBjb250ZW50Qm94LmhlaWdodCgpICsgcmVuZGVyQm94
LT5wYWRkaW5nVG9wKCkgKyByZW5kZXJCb3gtPnBhZGRpbmdCb3R0b20oKSk7CisgICAgICAgICAg
ICBib3JkZXJCb3ggPSBMYXlvdXRSZWN0KHBhZGRpbmdCb3gueCgpIC0gcmVuZGVyQm94LT5ib3Jk
ZXJMZWZ0KCksIHBhZGRpbmdCb3gueSgpIC0gcmVuZGVyQm94LT5ib3JkZXJUb3AoKSwKKyAgICAg
ICAgICAgICAgICAgICAgcGFkZGluZ0JveC53aWR0aCgpICsgcmVuZGVyQm94LT5ib3JkZXJMZWZ0
KCkgKyByZW5kZXJCb3gtPmJvcmRlclJpZ2h0KCksIHBhZGRpbmdCb3guaGVpZ2h0KCkgKyByZW5k
ZXJCb3gtPmJvcmRlclRvcCgpICsgcmVuZGVyQm94LT5ib3JkZXJCb3R0b20oKSk7CisgICAgICAg
ICAgICBtYXJnaW5Cb3ggPSBMYXlvdXRSZWN0KGJvcmRlckJveC54KCkgLSByZW5kZXJCb3gtPm1h
cmdpbkxlZnQoKSwgYm9yZGVyQm94LnkoKSAtIHJlbmRlckJveC0+bWFyZ2luVG9wKCksCisgICAg
ICAgICAgICAgICAgICAgIGJvcmRlckJveC53aWR0aCgpICsgcmVuZGVyQm94LT5tYXJnaW5XaWR0
aCgpLCBib3JkZXJCb3guaGVpZ2h0KCkgKyByZW5kZXJCb3gtPm1hcmdpbkhlaWdodCgpKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJlbmRlcklubGluZSogcmVuZGVySW5saW5lID0g
dG9SZW5kZXJJbmxpbmUocmVuZGVyZXIpOworCisgICAgICAgICAgICAvLyBSZW5kZXJJbmxpbmUn
cyBib3VuZGluZyBib3ggaW5jbHVkZXMgcGFkZGluZ3MgYW5kIGJvcmRlcnMsIGV4Y2x1ZGVzIG1h
cmdpbnMuCisgICAgICAgICAgICBib3JkZXJCb3ggPSByZW5kZXJJbmxpbmUtPmxpbmVzQm91bmRp
bmdCb3goKTsKKyAgICAgICAgICAgIHBhZGRpbmdCb3ggPSBMYXlvdXRSZWN0KGJvcmRlckJveC54
KCkgKyByZW5kZXJJbmxpbmUtPmJvcmRlckxlZnQoKSwgYm9yZGVyQm94LnkoKSArIHJlbmRlcklu
bGluZS0+Ym9yZGVyVG9wKCksCisgICAgICAgICAgICAgICAgICAgIGJvcmRlckJveC53aWR0aCgp
IC0gcmVuZGVySW5saW5lLT5ib3JkZXJMZWZ0KCkgLSByZW5kZXJJbmxpbmUtPmJvcmRlclJpZ2h0
KCksIGJvcmRlckJveC5oZWlnaHQoKSAtIHJlbmRlcklubGluZS0+Ym9yZGVyVG9wKCkgLSByZW5k
ZXJJbmxpbmUtPmJvcmRlckJvdHRvbSgpKTsKKyAgICAgICAgICAgIGNvbnRlbnRCb3ggPSBMYXlv
dXRSZWN0KHBhZGRpbmdCb3gueCgpICsgcmVuZGVySW5saW5lLT5wYWRkaW5nTGVmdCgpLCBwYWRk
aW5nQm94LnkoKSArIHJlbmRlcklubGluZS0+cGFkZGluZ1RvcCgpLAorICAgICAgICAgICAgICAg
ICAgICBwYWRkaW5nQm94LndpZHRoKCkgLSByZW5kZXJJbmxpbmUtPnBhZGRpbmdMZWZ0KCkgLSBy
ZW5kZXJJbmxpbmUtPnBhZGRpbmdSaWdodCgpLCBwYWRkaW5nQm94LmhlaWdodCgpIC0gcmVuZGVy
SW5saW5lLT5wYWRkaW5nVG9wKCkgLSByZW5kZXJJbmxpbmUtPnBhZGRpbmdCb3R0b20oKSk7Cisg
ICAgICAgICAgICAvLyBJZ25vcmUgbWFyZ2luVG9wIGFuZCBtYXJnaW5Cb3R0b20gZm9yIGlubGlu
ZXMuCisgICAgICAgICAgICBtYXJnaW5Cb3ggPSBMYXlvdXRSZWN0KGJvcmRlckJveC54KCkgLSBy
ZW5kZXJJbmxpbmUtPm1hcmdpbkxlZnQoKSwgYm9yZGVyQm94LnkoKSwKKyAgICAgICAgICAgICAg
ICAgICAgYm9yZGVyQm94LndpZHRoKCkgKyByZW5kZXJJbmxpbmUtPm1hcmdpbldpZHRoKCksIGJv
cmRlckJveC5oZWlnaHQoKSk7CisgICAgICAgIH0KKworICAgICAgICBGbG9hdFF1YWQgYWJzQ29u
dGVudFF1YWQgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoY29udGVu
dEJveCkpOworICAgICAgICBGbG9hdFF1YWQgYWJzUGFkZGluZ1F1YWQgPSByZW5kZXJlci0+bG9j
YWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QocGFkZGluZ0JveCkpOworICAgICAgICBGbG9hdFF1
YWQgYWJzQm9yZGVyUXVhZCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVj
dChib3JkZXJCb3gpKTsKKyAgICAgICAgRmxvYXRRdWFkIGFic01hcmdpblF1YWQgPSByZW5kZXJl
ci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QobWFyZ2luQm94KSk7CisKKyAgICAgICAg
Y29udGVudHNRdWFkVG9QYWdlKG1haW5WaWV3LCBjb250YWluaW5nVmlldywgYWJzQ29udGVudFF1
YWQpOworICAgICAgICBjb250ZW50c1F1YWRUb1BhZ2UobWFpblZpZXcsIGNvbnRhaW5pbmdWaWV3
LCBhYnNQYWRkaW5nUXVhZCk7CisgICAgICAgIGNvbnRlbnRzUXVhZFRvUGFnZShtYWluVmlldywg
Y29udGFpbmluZ1ZpZXcsIGFic0JvcmRlclF1YWQpOworICAgICAgICBjb250ZW50c1F1YWRUb1Bh
Z2UobWFpblZpZXcsIGNvbnRhaW5pbmdWaWV3LCBhYnNNYXJnaW5RdWFkKTsKKworICAgICAgICB0
aXRsZUFuY2hvckJveCA9IGFic01hcmdpblF1YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKwor
ICAgICAgICBoaWdobGlnaHQtPnR5cGUgPSBIaWdobGlnaHRUeXBlTm9kZTsKKyAgICAgICAgaGln
aGxpZ2h0LT5xdWFkcy5hcHBlbmQoYWJzTWFyZ2luUXVhZCk7CisgICAgICAgIGhpZ2hsaWdodC0+
cXVhZHMuYXBwZW5kKGFic0JvcmRlclF1YWQpOworICAgICAgICBoaWdobGlnaHQtPnF1YWRzLmFw
cGVuZChhYnNQYWRkaW5nUXVhZCk7CisgICAgICAgIGhpZ2hsaWdodC0+cXVhZHMuYXBwZW5kKGFi
c0NvbnRlbnRRdWFkKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgICAgIGRyYXdI
aWdobGlnaHRGb3JCb3goKmNvbnRleHQsIGFic0NvbnRlbnRRdWFkLCBhYnNQYWRkaW5nUXVhZCwg
YWJzQm9yZGVyUXVhZCwgYWJzTWFyZ2luUXVhZCwgaGlnaGxpZ2h0RGF0YSk7CisgICAgfQorCisg
ICAgLy8gRHJhdyBub2RlIHRpdGxlIGlmIG5lY2Vzc2FyeS4KKworICAgIGlmICghbm9kZS0+aXNF
bGVtZW50Tm9kZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoY29udGV4dCAmJiBoaWdo
bGlnaHREYXRhLT5zaG93SW5mbykKKyAgICAgICAgZHJhd0VsZW1lbnRUaXRsZSgqY29udGV4dCwg
bm9kZSwgcmVuZGVyZXIsIHBpeGVsU25hcHBlZEludFJlY3QoYm91bmRpbmdCb3gpLCBwaXhlbFNu
YXBwZWRJbnRSZWN0KHRpdGxlQW5jaG9yQm94KSwgdmlzaWJsZVJlY3QsIGNvbnRhaW5pbmdGcmFt
ZS0+c2V0dGluZ3MoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGdldE9yRHJhd1JlY3RIaWdobGlnaHQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBEb2N1bWVudCogZG9jdW1lbnQsIEhpZ2hsaWdodERh
dGEqIGhpZ2hsaWdodERhdGEsIEhpZ2hsaWdodCAqaGlnaGxpZ2h0KQoreworICAgIGlmICghZG9j
dW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIEZsb2F0UmVjdCBoaWdobGlnaHRSZWN0KCoo
aGlnaGxpZ2h0RGF0YS0+cmVjdCkpOworCisgICAgaGlnaGxpZ2h0LT50eXBlID0gSGlnaGxpZ2h0
VHlwZVJlY3RzOworICAgIGhpZ2hsaWdodC0+cXVhZHMuYXBwZW5kKGhpZ2hsaWdodFJlY3QpOwor
CisgICAgaWYgKGNvbnRleHQpIHsKKyAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gZG9jdW1lbnQt
PmZyYW1lKCktPnZpZXcoKTsKKyAgICAgICAgaWYgKCF2aWV3LT5kZWxlZ2F0ZXNTY3JvbGxpbmco
KSkgeworICAgICAgICAgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0ID0gdmlldy0+dmlzaWJsZUNv
bnRlbnRSZWN0KCk7CisgICAgICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoLXZpc2libGVSZWN0
LngoKSwgLXZpc2libGVSZWN0LnkoKSk7CisgICAgICAgIH0KKworICAgICAgICBkcmF3T3V0bGlu
ZWRRdWFkKCpjb250ZXh0LCBoaWdobGlnaHRSZWN0LCBoaWdobGlnaHREYXRhLT5jb250ZW50LCBo
aWdobGlnaHREYXRhLT5jb250ZW50T3V0bGluZSk7CisgICAgfQorfQorCit9IC8vIGFub255bW91
cyBuYW1lc3BhY2UKKworSW5zcGVjdG9yT3ZlcmxheTo6SW5zcGVjdG9yT3ZlcmxheShQYWdlKiBw
YWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fcGFnZShwYWdlKQorICAgICwg
bV9jbGllbnQoY2xpZW50KQorICAgICwgbV9zaG91bGRTaG93UGF1c2VXYXJuaW5nKGZhbHNlKQor
ICAgICwgbV9kb2N1bWVudCgwKQorICAgICwgbV9oaWdobGlnaHREYXRhKDApCit7Cit9CisKK3Zv
aWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7Cisg
ICAgaWYgKG1faGlnaGxpZ2h0RGF0YSkKKyAgICAgICAgZHJhd0hpZ2hsaWdodChjb250ZXh0KTsK
KyAgICBlbHNlIGlmIChtX3Nob3VsZFNob3dQYXVzZVdhcm5pbmcpCisgICAgICAgIGRyYXdQYXVz
ZVdhcm5pbmcoY29udGV4dCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd091dGxp
bmUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCit7CisgICAgRmxvYXRSZWN0IG91dGxpbmVSZWN0ID0gcmVjdDsKKyAg
ICBkcmF3T3V0bGluZWRRdWFkKGNvbnRleHQsIG91dGxpbmVSZWN0LCBDb2xvcigpLCBjb2xvcik7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6Z2V0SGlnaGxpZ2h0KERvY3VtZW50KiBkb2N1
bWVudCwgSGlnaGxpZ2h0RGF0YSogaGlnaGxpZ2h0RGF0YSwgSGlnaGxpZ2h0KiBoaWdobGlnaHQp
Cit7CisgICAgaWYgKCFoaWdobGlnaHREYXRhKQorICAgICAgICByZXR1cm47CisKKyAgICBoaWdo
bGlnaHQtPmNvbnRlbnRDb2xvciA9IGhpZ2hsaWdodERhdGEtPmNvbnRlbnQ7CisgICAgaGlnaGxp
Z2h0LT5wYWRkaW5nQ29sb3IgPSBoaWdobGlnaHREYXRhLT5wYWRkaW5nOworICAgIGhpZ2hsaWdo
dC0+Ym9yZGVyQ29sb3IgPSBoaWdobGlnaHREYXRhLT5ib3JkZXI7CisgICAgaGlnaGxpZ2h0LT5t
YXJnaW5Db2xvciA9IGhpZ2hsaWdodERhdGEtPm1hcmdpbjsKKyAgICBoaWdobGlnaHQtPnR5cGUg
PSBIaWdobGlnaHRUeXBlUmVjdHM7CisKKyAgICBpZiAoaGlnaGxpZ2h0RGF0YS0+bm9kZSkKKyAg
ICAgICAgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdodCgwLCBoaWdobGlnaHREYXRhLCBoaWdobGlnaHQp
OworICAgIGVsc2UgaWYgKGhpZ2hsaWdodERhdGEtPnJlY3QpCisgICAgICAgIGdldE9yRHJhd1Jl
Y3RIaWdobGlnaHQoMCwgZG9jdW1lbnQsIGhpZ2hsaWdodERhdGEsIGhpZ2hsaWdodCk7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6c2V0SGlnaGxpZ2h0KERvY3VtZW50KiBkb2N1bWVudCwg
SGlnaGxpZ2h0RGF0YSogaGlnaGxpZ2h0RGF0YSkKK3sKKyAgICBpZiAoZG9jdW1lbnQgJiYgaGln
aGxpZ2h0RGF0YSAmJiAoaGlnaGxpZ2h0RGF0YS0+bm9kZSB8fCBoaWdobGlnaHREYXRhLT5yZWN0
KSkgeworICAgICAgICBtX2RvY3VtZW50ID0gaGlnaGxpZ2h0RGF0YS0+bm9kZSA/IGhpZ2hsaWdo
dERhdGEtPm5vZGUtPmRvY3VtZW50KCkgOiBkb2N1bWVudDsKKyAgICAgICAgbV9oaWdobGlnaHRE
YXRhID0gaGlnaGxpZ2h0RGF0YTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2RvY3VtZW50ID0g
MDsKKyAgICAgICAgbV9oaWdobGlnaHREYXRhID0gMDsKKyAgICB9CisgICAgdXBkYXRlKCk7Cit9
CisKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6c2V0U2hvdWxkU2hvd1BhdXNlV2FybmluZyhib29s
IHNob3VsZFNob3dQYXVzZVdhcm5pbmcpCit7CisgICAgbV9zaG91bGRTaG93UGF1c2VXYXJuaW5n
ID0gc2hvdWxkU2hvd1BhdXNlV2FybmluZzsKKyAgICB1cGRhdGUoKTsKK30KKwordm9pZCBJbnNw
ZWN0b3JPdmVybGF5Ojp1cGRhdGUoKQoreworICAgIGlmICghbV9jbGllbnQpIAorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKG1faGlnaGxpZ2h0RGF0YSB8fCBtX3Nob3VsZFNob3dQYXVzZVdhcm5p
bmcpCisgICAgICAgIG1fY2xpZW50LT5oaWdobGlnaHQoKTsKKyAgICBlbHNlCisgICAgICAgIG1f
Y2xpZW50LT5oaWRlSGlnaGxpZ2h0KCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJh
d0hpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKCFtX2hpZ2hs
aWdodERhdGEpCisgICAgICAgIHJldHVybjsKKworICAgIEhpZ2hsaWdodCBoaWdobGlnaHQ7Cisg
ICAgaWYgKG1faGlnaGxpZ2h0RGF0YS0+bm9kZSkKKyAgICAgICAgZ2V0T3JEcmF3Tm9kZUhpZ2hs
aWdodCgmY29udGV4dCwgbV9oaWdobGlnaHREYXRhLCAmaGlnaGxpZ2h0KTsKKyAgICBlbHNlIGlm
IChtX2hpZ2hsaWdodERhdGEtPnJlY3QpCisgICAgICAgIGdldE9yRHJhd1JlY3RIaWdobGlnaHQo
JmNvbnRleHQsIG1fZG9jdW1lbnQsIG1faGlnaGxpZ2h0RGF0YSwgJmhpZ2hsaWdodCk7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd1BhdXNlV2FybmluZyhHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgYmFja2dyb3VuZENv
bG9yLCAoMCwgMCwgMCwgMzEpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCB0ZXh0
QmFja2dyb3VuZENvbG9yLCAoMjU1LCAyNTUsIDE5NCkpOworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoQ29sb3IsIGJvcmRlckNvbG9yLCAoMTI4LCAxMjgsIDEyOCkpOworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoaW50LCBmb250SGVpZ2h0LCAoMjQpKTsKKworICAgIEZyYW1lKiBmcmFtZSA9IG1f
cGFnZS0+bWFpbkZyYW1lKCk7CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZnJhbWUtPnNldHRp
bmdzKCk7CisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IGZyYW1lLT52aWV3KCktPnZpc2libGVD
b250ZW50UmVjdCgpOworCisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoYmFja2dyb3VuZENvbG9y
LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdSZWN0KHZpc2libGVSZWN0
KTsKKworICAgIEZvbnREZXNjcmlwdGlvbiBkZXNjOworICAgIHNldFVwRm9udERlc2NyaXB0aW9u
KGRlc2MsIHNldHRpbmdzKTsKKyAgICBkZXNjLnNldENvbXB1dGVkU2l6ZShmb250SGVpZ2h0KTsK
KyAgICBGb250IGZvbnQgPSBGb250KGRlc2MsIDAsIDApOworICAgIGZvbnQudXBkYXRlKDApOwor
CisgICAgU3RyaW5nIHRleHQgPSAiVGhlIGRlYnVnZ2VyIGlzIHBhdXNlZC4iOworICAgIFRleHRS
dW4gdGV4dFJ1bih0ZXh0KTsKKyAgICBJbnRSZWN0IHRpdGxlUmVjdCA9IGVuY2xvc2luZ0ludFJl
Y3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBJbnRQb2ludCgpLCBmb250SGVp
Z2h0KSk7CisgICAgdGl0bGVSZWN0LmluZmxhdGUocmVjdEluZmxhdGVQeCk7CisgICAgdGl0bGVS
ZWN0LnNldExvY2F0aW9uKEludFBvaW50KHZpc2libGVSZWN0LndpZHRoKCkgLyAyIC0gdGl0bGVS
ZWN0LndpZHRoKCkgLyAyLCAwKSk7CisKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0ZXh0QmFj
a2dyb3VuZENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LnNldFN0cm9r
ZUNvbG9yKGJvcmRlckNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRy
YXdSZWN0KHRpdGxlUmVjdCk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNr
LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdUZXh0KGZvbnQsIHRleHRS
dW4sIEludFBvaW50KHRpdGxlUmVjdC54KCkgKyByZWN0SW5mbGF0ZVB4LCB0aXRsZVJlY3QueSgp
ICsgZm9udEhlaWdodCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvck92ZXJsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JP
dmVybGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNTFiYjg4OGVjNjY2YjQ5MzIyYWRiYmQ0NDE2MTM1ODA0ZmE0
MTIzOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JPdmVybGF5LmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluc3BlY3Rvck92ZXJsYXlf
aAorI2RlZmluZSBJbnNwZWN0b3JPdmVybGF5X2gKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5j
bHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKworI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQ29sb3I7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEZyYW1lVmlldzsKK2Ns
YXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEluc3BlY3RvckNsaWVudDsKK2NsYXNzIEludFJl
Y3Q7CitjbGFzcyBJbnRTaXplOworY2xhc3MgTm9kZTsKK2NsYXNzIFBhZ2U7CisKK3N0cnVjdCBI
aWdobGlnaHREYXRhIHsKKyAgICBDb2xvciBjb250ZW50OworICAgIENvbG9yIGNvbnRlbnRPdXRs
aW5lOworICAgIENvbG9yIHBhZGRpbmc7CisgICAgQ29sb3IgYm9yZGVyOworICAgIENvbG9yIG1h
cmdpbjsKKyAgICBib29sIHNob3dJbmZvOworCisgICAgLy8gRWl0aGVyIG9mIHRoZXNlIG11c3Qg
YmUgMC4KKyAgICBSZWZQdHI8Tm9kZT4gbm9kZTsKKyAgICBPd25QdHI8SW50UmVjdD4gcmVjdDsK
K307CisKK2VudW0gSGlnaGxpZ2h0VHlwZSB7CisgICAgSGlnaGxpZ2h0VHlwZU5vZGUsCisgICAg
SGlnaGxpZ2h0VHlwZVJlY3RzLAorfTsKKworc3RydWN0IEhpZ2hsaWdodCB7CisgICAgQ29sb3Ig
Y29udGVudENvbG9yOworICAgIENvbG9yIHBhZGRpbmdDb2xvcjsKKyAgICBDb2xvciBib3JkZXJD
b2xvcjsKKyAgICBDb2xvciBtYXJnaW5Db2xvcjsKKworICAgIC8vIFdoZW4gdGhlIHR5cGUgaXMg
Tm9kZSwgdGhlcmUgYXJlIDQgcXVhZHMgKG1hcmdpbiwgYm9yZGVyLCBwYWRkaW5nLCBjb250ZW50
KS4KKyAgICAvLyBXaGVuIHRoZSB0eXBlIGlzIFJlY3RzLCB0aGlzIGlzIGp1c3QgYSBsaXN0IG9m
IHF1YWRzLgorICAgIEhpZ2hsaWdodFR5cGUgdHlwZTsKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiBx
dWFkczsKK307CisKK2NsYXNzIEluc3BlY3Rvck92ZXJsYXkgeworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzT3duUHRyPEluc3BlY3Rvck92ZXJsYXk+IGNyZWF0ZShQYWdlKiBwYWdlLCBJbnNwZWN0
b3JDbGllbnQqIGNsaWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5z
cGVjdG9yT3ZlcmxheShwYWdlLCBjbGllbnQpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkcmF3
KEdyYXBoaWNzQ29udGV4dCYpOworICAgIHZvaWQgZHJhd091dGxpbmUoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBnZXRIaWdobGln
aHQoRG9jdW1lbnQqLCBIaWdobGlnaHREYXRhKiwgSGlnaGxpZ2h0Kik7CisgICAgCisgICAgdm9p
ZCBzZXRIaWdobGlnaHQoRG9jdW1lbnQqLCBIaWdobGlnaHREYXRhKik7CisgICAgdm9pZCBzZXRT
aG91bGRTaG93UGF1c2VXYXJuaW5nKGJvb2wpOworCitwcml2YXRlOgorICAgIEluc3BlY3Rvck92
ZXJsYXkoUGFnZSosIEluc3BlY3RvckNsaWVudCopOworCisgICAgdm9pZCB1cGRhdGUoKTsKKyAg
ICB2b2lkIGRyYXdIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0Jik7CisgICAgdm9pZCBkcmF3UGF1
c2VXYXJuaW5nKEdyYXBoaWNzQ29udGV4dCYpOworCisgICAgUGFnZSogbV9wYWdlOworICAgIElu
c3BlY3RvckNsaWVudCogbV9jbGllbnQ7CisgICAgYm9vbCBtX3Nob3VsZFNob3dQYXVzZVdhcm5p
bmc7CisgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CisgICAgSGlnaGxpZ2h0RGF0YSogbV9oaWdo
bGlnaHREYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisKKyNlbmRpZiAvLyBE
T01Ob2RlSGlnaGxpZ2h0ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUGFnZUFnZW50LmNwcAppbmRleCBlZjM0NTM3ZjBlMTE4ZmI1ZTBjYjg4Y2EyZmFiNWUzZWY2
MGEzNTc3Li45ODVjYmY1M2U1MmE5NjM1MWY4OWYxZjY0MWJmNzljY2I1Njk4YjgxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcApAQCAtNDQs
MTIgKzQ0LDEyIEBACiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiQ29va2llSmFyLmgi
CiAjaW5jbHVkZSAiRE9NSW1wbGVtZW50YXRpb24uaCIKLSNpbmNsdWRlICJET01Ob2RlSGlnaGxp
Z2h0ZXIuaCIKICNpbmNsdWRlICJET01QYXRjaFN1cHBvcnQuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNs
dWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNp
bmNsdWRlICJJZGVudGlmaWVyc0ZhY3RvcnkuaCIKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRl
ICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgogI2lu
Y2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIkluc3BlY3Rvck92
ZXJsYXkuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JTdGF0ZS5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
clZhbHVlcy5oIgogI2luY2x1ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIKQEAgLTIyMyw5ICsy
MjQsOSBAQCBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6c2hhcmVkQnVmZmVyQ29udGVudChQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyLCBjbwogICAgIHJldHVybiBkZWNvZGVTaGFyZWRC
dWZmZXIoYnVmZmVyLCB0ZXh0RW5jb2RpbmdOYW1lLCByZXN1bHQpOwogfQogCi1QYXNzT3duUHRy
PEluc3BlY3RvclBhZ2VBZ2VudD4gSW5zcGVjdG9yUGFnZUFnZW50OjpjcmVhdGUoSW5zdHJ1bWVu
dGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgUGFnZSogcGFnZSwgSW5zcGVjdG9yQWdl
bnQqIGluc3BlY3RvckFnZW50LCBJbnNwZWN0b3JTdGF0ZSogc3RhdGUsIEluamVjdGVkU2NyaXB0
TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkK
K1Bhc3NPd25QdHI8SW5zcGVjdG9yUGFnZUFnZW50PiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNyZWF0
ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYWdlKiBwYWdlLCBJ
bnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIEluc3BlY3RvclN0YXRlKiBzdGF0ZSwgSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIEluc3BlY3RvckNsaWVu
dCogY2xpZW50LCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQogewotICAgIHJldHVybiBhZG9w
dFB0cihuZXcgSW5zcGVjdG9yUGFnZUFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIHBhZ2UsIGlu
c3BlY3RvckFnZW50LCBzdGF0ZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBjbGllbnQpKTsKKyAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IEluc3BlY3RvclBhZ2VBZ2VudChpbnN0cnVtZW50aW5nQWdl
bnRzLCBwYWdlLCBpbnNwZWN0b3JBZ2VudCwgc3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdlciwg
Y2xpZW50LCBvdmVybGF5KSk7CiB9CiAKIC8vIHN0YXRpYwpAQCAtMzA4LDEzICszMDksMTQgQEAg
VHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZTo6RW51bSBJbnNwZWN0b3JQYWdlQWdlbnQ6
OmNhY2hlZFJlc291cmNlVHlwZUpzb24KICAgICByZXR1cm4gcmVzb3VyY2VUeXBlSnNvbihjYWNo
ZWRSZXNvdXJjZVR5cGUoY2FjaGVkUmVzb3VyY2UpKTsKIH0KIAotSW5zcGVjdG9yUGFnZUFnZW50
OjpJbnNwZWN0b3JQYWdlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cywgUGFnZSogcGFnZSwgSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBJbnNwZWN0
b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKK0luc3BlY3RvclBhZ2VBZ2Vu
dDo6SW5zcGVjdG9yUGFnZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdB
Z2VudHMsIFBhZ2UqIHBhZ2UsIEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgSW5zcGVj
dG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVk
U2NyaXB0TWFuYWdlciwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQsIEluc3BlY3Rvck92ZXJsYXkq
IG92ZXJsYXkpCiAgICAgOiBJbnNwZWN0b3JCYXNlQWdlbnQ8SW5zcGVjdG9yUGFnZUFnZW50Pigi
UGFnZSIsIGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlKQogICAgICwgbV9wYWdl
KHBhZ2UpCiAgICAgLCBtX2luc3BlY3RvckFnZW50KGluc3BlY3RvckFnZW50KQogICAgICwgbV9p
bmplY3RlZFNjcmlwdE1hbmFnZXIoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQogICAgICwgbV9jbGll
bnQoY2xpZW50KQogICAgICwgbV9mcm9udGVuZCgwKQorICAgICwgbV9vdmVybGF5KG92ZXJsYXkp
CiAgICAgLCBtX2xhc3RTY3JpcHRJZGVudGlmaWVyKDApCiAgICAgLCBtX2xhc3RQYWludENvbnRl
eHQoMCkKICAgICAsIG1fZGlkTG9hZEV2ZW50RmlyZShmYWxzZSkKQEAgLTg0Myw2ICs4NDUsMTEg
QEAgRG9jdW1lbnRMb2FkZXIqIEluc3BlY3RvclBhZ2VBZ2VudDo6YXNzZXJ0RG9jdW1lbnRMb2Fk
ZXIoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW4KICAgICByZXR1cm4gZG9jdW1lbnRMb2FkZXI7CiB9
CiAKK3ZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkcmF3SW5zcGVjdG9yT3ZlcmxheShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgbV9vdmVybGF5LT5kcmF3KGNvbnRleHQpOworfQor
CiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6bG9hZGVyRGV0YWNoZWRGcm9tRnJhbWUoRG9jdW1l
bnRMb2FkZXIqIGxvYWRlcikKIHsKICAgICBIYXNoTWFwPERvY3VtZW50TG9hZGVyKiwgU3RyaW5n
Pjo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2xvYWRlclRvSWRlbnRpZmllci5maW5kKGxvYWRlcik7
CkBAIC04ODUsNyArODkyLDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZFBhaW50KCkK
ICAgICAgICAgQ29sb3IoMCwgMCwgMHhGRiwgMHgzRiksCiAgICAgfTsKIAotICAgIERPTU5vZGVI
aWdobGlnaHRlcjo6ZHJhd091dGxpbmUoKm1fbGFzdFBhaW50Q29udGV4dCwgbV9sYXN0UGFpbnRS
ZWN0LCBjb2xvcnNbY29sb3JTZWxlY3RvcisrICUgV1RGX0FSUkFZX0xFTkdUSChjb2xvcnMpXSk7
CisgICAgbV9vdmVybGF5LT5kcmF3T3V0bGluZSgqbV9sYXN0UGFpbnRDb250ZXh0LCBtX2xhc3RQ
YWludFJlY3QsIGNvbG9yc1tjb2xvclNlbGVjdG9yKysgJSBXVEZfQVJSQVlfTEVOR1RIKGNvbG9y
cyldKTsKIAogICAgIG1fbGFzdFBhaW50Q29udGV4dCA9IDA7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKaW5kZXggOTY0YmM4NWZjNjM2NDhhZjM4
ZjJkYzEyZmM4M2Y3OTcxYjkzYTY2My4uNzk4NTA4YTk2ODVlNmU2Y2I0NGQwYWIzMGZlNTEzNzcx
MGZjYTdmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBh
Z2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdl
bnQuaApAQCAtNDgsMTEgKzQ4LDEzIEBAIGNsYXNzIERPTVdyYXBwZXJXb3JsZDsKIGNsYXNzIERv
Y3VtZW50TG9hZGVyOwogY2xhc3MgRnJhbWU7CiBjbGFzcyBGcm9udGVuZDsKK2NsYXNzIEdyYXBo
aWNzQ29udGV4dDsKIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKIGNsYXNzIEluc3BlY3Rv
ckFnZW50OwogY2xhc3MgSW5zcGVjdG9yQXJyYXk7CiBjbGFzcyBJbnNwZWN0b3JDbGllbnQ7CiBj
bGFzcyBJbnNwZWN0b3JPYmplY3Q7CitjbGFzcyBJbnNwZWN0b3JPdmVybGF5OwogY2xhc3MgSW5z
cGVjdG9yU3RhdGU7CiBjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzOwogY2xhc3MgS1VSTDsKQEAg
LTc3LDcgKzc5LDcgQEAgcHVibGljOgogICAgICAgICBPdGhlclJlc291cmNlCiAgICAgfTsKIAot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3RvclBhZ2VBZ2VudD4gY3JlYXRlKEluc3RydW1l
bnRpbmdBZ2VudHMqLCBQYWdlKiwgSW5zcGVjdG9yQWdlbnQqLCBJbnNwZWN0b3JTdGF0ZSosIElu
amVjdGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3RvckNsaWVudCopOworICAgIHN0YXRpYyBQYXNz
T3duUHRyPEluc3BlY3RvclBhZ2VBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqLCBQ
YWdlKiwgSW5zcGVjdG9yQWdlbnQqLCBJbnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFu
YWdlciosIEluc3BlY3RvckNsaWVudCosIEluc3BlY3Rvck92ZXJsYXkqKTsKIAogICAgIHN0YXRp
YyBib29sIGNhY2hlZFJlc291cmNlQ29udGVudChDYWNoZWRSZXNvdXJjZSosIFN0cmluZyogcmVz
dWx0LCBib29sKiBiYXNlNjRFbmNvZGVkKTsKICAgICBzdGF0aWMgYm9vbCBzaGFyZWRCdWZmZXJD
b250ZW50KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2Rp
bmdOYW1lLCBib29sIHdpdGhCYXNlNjRFbmNvZGUsIFN0cmluZyogcmVzdWx0KTsKQEAgLTEzNSw5
ICsxMzcsMTAgQEAgcHVibGljOgogICAgIFN0cmluZyBsb2FkZXJJZChEb2N1bWVudExvYWRlciop
OwogICAgIEZyYW1lKiBhc3NlcnRGcmFtZShFcnJvclN0cmluZyosIFN0cmluZyBmcmFtZUlkKTsK
ICAgICBzdGF0aWMgRG9jdW1lbnRMb2FkZXIqIGFzc2VydERvY3VtZW50TG9hZGVyKEVycm9yU3Ry
aW5nKiwgRnJhbWUqKTsKKyAgICB2b2lkIGRyYXdJbnNwZWN0b3JPdmVybGF5KEdyYXBoaWNzQ29u
dGV4dCYpOwogCiBwcml2YXRlOgotICAgIEluc3BlY3RvclBhZ2VBZ2VudChJbnN0cnVtZW50aW5n
QWdlbnRzKiwgUGFnZSosIEluc3BlY3RvckFnZW50KiwgSW5zcGVjdG9yU3RhdGUqLCBJbmplY3Rl
ZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JDbGllbnQqKTsKKyAgICBJbnNwZWN0b3JQYWdlQWdl
bnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIFBhZ2UqLCBJbnNwZWN0b3JBZ2VudCosIEluc3BlY3Rv
clN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9yQ2xpZW50KiwgSW5zcGVj
dG9yT3ZlcmxheSopOwogICAgIHZvaWQgdXBkYXRlVmlld01ldHJpY3MoaW50LCBpbnQsIGRvdWJs
ZSwgYm9vbCk7CiAKICAgICBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZT4gYnVp
bGRPYmplY3RGb3JGcmFtZShGcmFtZSopOwpAQCAtMTQ3LDYgKzE1MCw3IEBAIHByaXZhdGU6CiAg
ICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKICAgICBJ
bnNwZWN0b3JDbGllbnQqIG1fY2xpZW50OwogICAgIEluc3BlY3RvckZyb250ZW5kOjpQYWdlKiBt
X2Zyb250ZW5kOworICAgIEluc3BlY3Rvck92ZXJsYXkqIG1fb3ZlcmxheTsKICAgICBsb25nIG1f
bGFzdFNjcmlwdElkZW50aWZpZXI7CiAgICAgU3RyaW5nIG1fcGVuZGluZ1NjcmlwdFRvRXZhbHVh
dGVPbkxvYWRPbmNlOwogICAgIFN0cmluZyBtX3NjcmlwdFRvRXZhbHVhdGVPbkxvYWRPbmNlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAKaW5kZXgg
YTU4NmVkZjNmZDQxMDhjOWQwNzkyYzBiZGZlYmUxZTgzZmFmZjg2YS4uYzFlNjI3NTNkMjE5ZGFh
OTYwMDc5MGI2NWJiNzE4Yzg0M2Y4Y2Y5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCkBAIC00MCwxMyArNDAsMTMgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1QYXNzT3duUHRyPFBhZ2VEZWJ1Z2dlckFnZW50PiBQYWdlRGVidWdnZXJB
Z2VudDo6Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIElu
c3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgUGFnZSogaW5zcGVjdGVkUGFnZSwgSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCitQYXNzT3duUHRyPFBhZ2VE
ZWJ1Z2dlckFnZW50PiBQYWdlRGVidWdnZXJBZ2VudDo6Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2Vu
dHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwg
UGFnZSogaW5zcGVjdGVkUGFnZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlw
dE1hbmFnZXIsIEluc3BlY3Rvck92ZXJsYXkqIG92ZXJsYXkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBQYWdlRGVidWdnZXJBZ2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnNwZWN0b3JT
dGF0ZSwgaW5zcGVjdGVkUGFnZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKSk7CisgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBQYWdlRGVidWdnZXJBZ2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnNw
ZWN0b3JTdGF0ZSwgaW5zcGVjdGVkUGFnZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBvdmVybGF5
KSk7CiB9CiAKLVBhZ2VEZWJ1Z2dlckFnZW50OjpQYWdlRGVidWdnZXJBZ2VudChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9y
U3RhdGUsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKQotICAgIDogSW5zcGVjdG9yRGVidWdnZXJBZ2VudChpbnN0cnVtZW50
aW5nQWdlbnRzLCBpbnNwZWN0b3JTdGF0ZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQorUGFnZURl
YnVnZ2VyQWdlbnQ6OlBhZ2VEZWJ1Z2dlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3Ry
dW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgUGFnZSogaW5z
cGVjdGVkUGFnZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIs
IEluc3BlY3Rvck92ZXJsYXkqIG92ZXJsYXkpCisgICAgOiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
KGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlLCBpbmplY3RlZFNjcmlwdE1hbmFn
ZXIsIG92ZXJsYXkpCiAgICAgLCBtX2luc3BlY3RlZFBhZ2UoaW5zcGVjdGVkUGFnZSkKIHsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5o
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmgKaW5kZXggOWRi
ZDUxM2Y5ZjFhMjhiYjk4NDI0OTEzNTc4MTQ4NmM3M2MzMjYxOC4uMDZmMTc3NzgxODdjYTAzMTE3
YWVhMGE0ODY2MmM0NjJmMDU1MWE1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1Bh
Z2VEZWJ1Z2dlckFnZW50LmgKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3MgUGFnZURlYnVnZ2VyQWdl
bnQgOiBwdWJsaWMgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoUGFnZURlYnVnZ2VyQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFBhZ2VEZWJ1Z2dlckFnZW50PiBjcmVhdGUo
SW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclN0YXRlKiwgUGFnZSosIEluamVjdGVkU2Ny
aXB0TWFuYWdlciopOworICAgIHN0YXRpYyBQYXNzT3duUHRyPFBhZ2VEZWJ1Z2dlckFnZW50PiBj
cmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclN0YXRlKiwgUGFnZSosIEluamVj
dGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3Rvck92ZXJsYXkqKTsKICAgICB2aXJ0dWFsIH5QYWdl
RGVidWdnZXJBZ2VudCgpOwogCiBwcml2YXRlOgpAQCAtNTYsNyArNTYsNyBAQCBwcml2YXRlOgog
CiAgICAgdmlydHVhbCBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JT
dHJpbmcqLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCk7CiAKLSAgICBQYWdlRGVidWdn
ZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yU3RhdGUqLCBQYWdlKiwgSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyKik7CisgICAgUGFnZURlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGlu
Z0FnZW50cyosIEluc3BlY3RvclN0YXRlKiwgUGFnZSosIEluamVjdGVkU2NyaXB0TWFuYWdlcios
IEluc3BlY3Rvck92ZXJsYXkqKTsKICAgICBQYWdlKiBjb25zdCBtX2luc3BlY3RlZFBhZ2U7CiB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyRGVidWdnZXJB
Z2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyRGVidWdnZXJBZ2VudC5j
cHAKaW5kZXggYzc1YWY0YTZlNGMwZjRlOTk2ZjM1ZDhhM2E3ODkxNjE1MzE3MTYyZi4uMTU4OWZj
MzBmNDU2NGQ5M2UyN2JmMjdlYWI1NTc1ZDRiNjA2YTUxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL1dvcmtlckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcApAQCAtODYsNyArODYsNyBAQCBQ
YXNzT3duUHRyPFdvcmtlckRlYnVnZ2VyQWdlbnQ+IFdvcmtlckRlYnVnZ2VyQWdlbnQ6OmNyZWF0
ZShJbnN0cnVtZW50aW5nQWdlbnRzKgogfQogCiBXb3JrZXJEZWJ1Z2dlckFnZW50OjpXb3JrZXJE
ZWJ1Z2dlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIElu
c3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgV29ya2VyQ29udGV4dCogaW5zcGVjdGVkV29y
a2VyQ29udGV4dCwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIp
Ci0gICAgOiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3Bl
Y3RvclN0YXRlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCisgICAgOiBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlLCBpbmplY3RlZFNjcmlw
dE1hbmFnZXIsIDApCiAgICAgLCBtX3NjcmlwdERlYnVnU2VydmVyKGluc3BlY3RlZFdvcmtlckNv
bnRleHQpCiAgICAgLCBtX2luc3BlY3RlZFdvcmtlckNvbnRleHQoaW5zcGVjdGVkV29ya2VyQ29u
dGV4dCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCAxODgxNzU5Mzcw
NTUwYWUxZTQ3N2EzZTE1ZThhYWVjZGEzNmQwZjMxLi5kNDZlNDY2NWNjMTY0Yjc5Zjc4MTBlZDJh
YWMxNTYzODA5MTkwMDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0z
MCw3ICszMCw2IEBACiAjaW5jbHVkZSAiQ2xpZW50UmVjdC5oIgogI2luY2x1ZGUgIkNsaWVudFJl
Y3RMaXN0LmgiCiAjaW5jbHVkZSAiQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmgiCi0jaW5jbHVk
ZSAiRE9NTm9kZUhpZ2hsaWdodGVyLmgiCiAjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXIuaCIKQEAgLTQ5LDYg
KzQ4LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yQ291bnRlcnMuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIK
KyNpbmNsdWRlICJJbnNwZWN0b3JPdmVybGF5LmgiCiAjaW5jbHVkZSAiSW5zdHJ1bWVudGluZ0Fn
ZW50cy5oIgogI2luY2x1ZGUgIkludGVybmFsU2V0dGluZ3MuaCIKICNpbmNsdWRlICJJbnRSZWN0
LmgiCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152558</attachid>
            <date>2012-07-16 10:25:55 -0700</date>
            <delta_ts>2012-07-16 11:15:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90880-20120716212553.patch</filename>
            <type>text/plain</type>
            <size>32458</size>
            <attacher name="Sergey Rogulenko">rogulenko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTZiZmVjMmM0ZGZkYTI1
NmYwZDlhM2U2Zjc4NzllYmY2YjVkNzY1ZC4uN2Q5M2RkMmRlN2U2ZjMyYzEyZTc5NDc2MGNhNTAz
MzhmNTA0MWMxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDEyLTA3LTE2ICBTZXJn
ZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogYWRkaW5nIHBhdXNlIGljb24gZm9yIEphdmFTY3JpcHQgZGVidWdnaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg4MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yZWQgRE9NTm9k
ZUhpZ2hsaWdodGVyIGludG8gSW5zcGVjdG9yT3ZlcmxheSBjbGFzcyBhbmQgYWRkZWQgYSBmZWF0
dXJlIHRvIHNob3cgYSAicGF1c2UiIHNjcmVlbiB3aGVuCisgICAgICAgIHRoZSBKYXZhc2NyaXB0
IGRlYnVnZ2VyIGlzIHBhdXNlZC4KKworICAgICAgICAqIGluc3BlY3Rvci9ET01Ob2RlSGlnaGxp
Z2h0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6SW5zcGVjdG9y
T3ZlcmxheSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdPdXRsaW5lKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmdldEhpZ2hsaWdodCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JPdmVybGF5OjpzZXRIaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpzZXRTaG91bGRTaG93UGF1c2VX
YXJuaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OnVwZGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3SGlnaGxpZ2h0KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdQYXVzZVdhcm5pbmcpOgorICAgICAg
ICAqIGluc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoSW5zcGVjdG9yT3ZlcmxheSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JP
dmVybGF5OjpjcmVhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNv
bnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZHJhd0hp
Z2hsaWdodCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRPTUFnZW50OjpoaWdobGlnaHRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRP
TUFnZW50OjpoaWRlSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFn
ZW50OjpnZXRIaWdobGlnaHQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01B
Z2VudDo6Y3JlYXRlKToKKyAgICAgICAgKEluc3BlY3RvckRPTUFnZW50KToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpc2FibGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGF1c2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ29udGludWUpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKEluc3BlY3RvckRlYnVnZ2VyQWdlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpJbnNwZWN0b3JQ
YWdlQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpkcmF3SW5z
cGVjdG9yT3ZlcmxheSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclBhZ2VBZ2VudDo6ZGlkUGFpbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JQYWdlQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGluc3BlY3Rvci9Q
YWdlRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlRGVidWdnZXJBZ2Vu
dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50OjpQYWdlRGVi
dWdnZXJBZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50Lmg6Cisg
ICAgICAgIChQYWdlRGVidWdnZXJBZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL1dvcmtlckRl
YnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyRGVidWdnZXJBZ2VudDo6
V29ya2VyRGVidWdnZXJBZ2VudCk6CisKIDIwMTItMDctMTUgIENhcmxvcyBHYXJjaWEgQ2FtcG9z
ICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCBtYWtlIGRp
c3RjaGVjay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGln
aGxpZ2h0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRl
ci5jcHAKaW5kZXggZTRjNzEwMGQ2MWM1MjA4M2YzODI3MWYyYTcyNzU0NzU0NjhlZGIyYy4uYTJi
NzYwMGQxNDczMTFkMWE2ZmMwY2QzZGNhZWYyODY1Nzc1ZDU2ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAKQEAgLTM5LDYgKzM5LDcgQEAK
ICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCiAj
aW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSYW5nZS5oIgpA
QCAtNDg1LDIxICs0ODYsMzAgQEAgc3RhdGljIHZvaWQgZ2V0T3JEcmF3UmVjdEhpZ2hsaWdodChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIERvY3VtZW50KiBkb2N1bWVudCwKIAogfSAvLyBhbm9u
eW1vdXMgbmFtZXNwYWNlCiAKLW5hbWVzcGFjZSBET01Ob2RlSGlnaGxpZ2h0ZXIgeworSW5zcGVj
dG9yT3ZlcmxheTo6SW5zcGVjdG9yT3ZlcmxheShQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQq
IGNsaWVudCkKKyAgICA6IG1fcGFnZShwYWdlKQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAg
ICwgbV9zaG91bGRTaG93UGF1c2VXYXJuaW5nKGZhbHNlKQorICAgICwgbV9kb2N1bWVudCgwKQor
ICAgICwgbV9oaWdobGlnaHREYXRhKDApCit7Cit9CiAKLXZvaWQgZHJhd0hpZ2hsaWdodChHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIERvY3VtZW50KiBkb2N1bWVudCwgSGlnaGxpZ2h0RGF0YSog
aGlnaGxpZ2h0RGF0YSkKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpCiB7Ci0gICAgaWYgKCFoaWdobGlnaHREYXRhKQotICAgICAgICByZXR1cm47
CisgICAgaWYgKG1faGlnaGxpZ2h0RGF0YSkKKyAgICAgICAgZHJhd0hpZ2hsaWdodChjb250ZXh0
KTsKKyAgICBlbHNlIGlmIChtX3Nob3VsZFNob3dQYXVzZVdhcm5pbmcpCisgICAgICAgIGRyYXdQ
YXVzZVdhcm5pbmcoY29udGV4dCk7Cit9CiAKLSAgICBIaWdobGlnaHQgaGlnaGxpZ2h0OwotICAg
IGlmIChoaWdobGlnaHREYXRhLT5ub2RlKQotICAgICAgICBnZXRPckRyYXdOb2RlSGlnaGxpZ2h0
KCZjb250ZXh0LCBoaWdobGlnaHREYXRhLCAmaGlnaGxpZ2h0KTsKLSAgICBlbHNlIGlmIChoaWdo
bGlnaHREYXRhLT5yZWN0KQotICAgICAgICBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0KCZjb250ZXh0
LCBkb2N1bWVudCwgaGlnaGxpZ2h0RGF0YSwgJmhpZ2hsaWdodCk7Cit2b2lkIEluc3BlY3Rvck92
ZXJsYXk6OmRyYXdPdXRsaW5lKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIEZsb2F0UmVjdCBvdXRsaW5l
UmVjdCA9IHJlY3Q7CisgICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBvdXRsaW5lUmVjdCwg
Q29sb3IoKSwgY29sb3IpOwogfQogCi12b2lkIGdldEhpZ2hsaWdodChEb2N1bWVudCogZG9jdW1l
bnQsIEhpZ2hsaWdodERhdGEqIGhpZ2hsaWdodERhdGEsIEhpZ2hsaWdodCogaGlnaGxpZ2h0KQor
dm9pZCBJbnNwZWN0b3JPdmVybGF5OjpnZXRIaWdobGlnaHQoRG9jdW1lbnQqIGRvY3VtZW50LCBI
aWdobGlnaHREYXRhKiBoaWdobGlnaHREYXRhLCBIaWdobGlnaHQqIGhpZ2hsaWdodCkKIHsKICAg
ICBpZiAoIWhpZ2hsaWdodERhdGEpCiAgICAgICAgIHJldHVybjsKQEAgLTUxNiwxMyArNTI2LDc4
IEBAIHZvaWQgZ2V0SGlnaGxpZ2h0KERvY3VtZW50KiBkb2N1bWVudCwgSGlnaGxpZ2h0RGF0YSog
aGlnaGxpZ2h0RGF0YSwgSGlnaGxpZ2h0KiBoCiAgICAgICAgIGdldE9yRHJhd1JlY3RIaWdobGln
aHQoMCwgZG9jdW1lbnQsIGhpZ2hsaWdodERhdGEsIGhpZ2hsaWdodCk7CiB9CiAKLXZvaWQgZHJh
d091dGxpbmUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnNldEhpZ2hsaWdo
dChEb2N1bWVudCogZG9jdW1lbnQsIEhpZ2hsaWdodERhdGEqIGhpZ2hsaWdodERhdGEpCiB7Ci0g
ICAgRmxvYXRSZWN0IG91dGxpbmVSZWN0ID0gcmVjdDsKLSAgICBkcmF3T3V0bGluZWRRdWFkKGNv
bnRleHQsIG91dGxpbmVSZWN0LCBDb2xvcigpLCBjb2xvcik7CisgICAgaWYgKGRvY3VtZW50ICYm
IGhpZ2hsaWdodERhdGEgJiYgKGhpZ2hsaWdodERhdGEtPm5vZGUgfHwgaGlnaGxpZ2h0RGF0YS0+
cmVjdCkpIHsKKyAgICAgICAgbV9kb2N1bWVudCA9IGhpZ2hsaWdodERhdGEtPm5vZGUgPyBoaWdo
bGlnaHREYXRhLT5ub2RlLT5kb2N1bWVudCgpIDogZG9jdW1lbnQ7CisgICAgICAgIG1faGlnaGxp
Z2h0RGF0YSA9IGhpZ2hsaWdodERhdGE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9kb2N1bWVu
dCA9IDA7CisgICAgICAgIG1faGlnaGxpZ2h0RGF0YSA9IDA7CisgICAgfQorICAgIHVwZGF0ZSgp
OworfQorCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnNldFNob3VsZFNob3dQYXVzZVdhcm5pbmco
Ym9vbCBzaG91bGRTaG93UGF1c2VXYXJuaW5nKQoreworICAgIG1fc2hvdWxkU2hvd1BhdXNlV2Fy
bmluZyA9IHNob3VsZFNob3dQYXVzZVdhcm5pbmc7CisgICAgdXBkYXRlKCk7CiB9CiAKLX0gLy8g
bmFtZXNwYWNlIERPTU5vZGVIaWdobGlnaHRlcgordm9pZCBJbnNwZWN0b3JPdmVybGF5Ojp1cGRh
dGUoKQoreworICAgIGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9o
aWdobGlnaHREYXRhIHx8IG1fc2hvdWxkU2hvd1BhdXNlV2FybmluZykKKyAgICAgICAgbV9jbGll
bnQtPmhpZ2hsaWdodCgpOworICAgIGVsc2UKKyAgICAgICAgbV9jbGllbnQtPmhpZGVIaWdobGln
aHQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3SGlnaGxpZ2h0KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKK3sKKyAgICBpZiAoIW1faGlnaGxpZ2h0RGF0YSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgSGlnaGxpZ2h0IGhpZ2hsaWdodDsKKyAgICBpZiAobV9oaWdobGlnaHRE
YXRhLT5ub2RlKQorICAgICAgICBnZXRPckRyYXdOb2RlSGlnaGxpZ2h0KCZjb250ZXh0LCBtX2hp
Z2hsaWdodERhdGEsICZoaWdobGlnaHQpOworICAgIGVsc2UgaWYgKG1faGlnaGxpZ2h0RGF0YS0+
cmVjdCkKKyAgICAgICAgZ2V0T3JEcmF3UmVjdEhpZ2hsaWdodCgmY29udGV4dCwgbV9kb2N1bWVu
dCwgbV9oaWdobGlnaHREYXRhLCAmaGlnaGxpZ2h0KTsKK30KKwordm9pZCBJbnNwZWN0b3JPdmVy
bGF5OjpkcmF3UGF1c2VXYXJuaW5nKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCBiYWNrZ3JvdW5kQ29sb3IsICgwLCAwLCAwLCAzMSkp
OworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIHRleHRCYWNrZ3JvdW5kQ29sb3IsICgy
NTUsIDI1NSwgMTk0KSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgYm9yZGVyQ29s
b3IsICgxMjgsIDEyOCwgMTI4KSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChpbnQsIGZvbnRI
ZWlnaHQsICgyNCkpOworCisgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5tYWluRnJhbWUoKTsK
KyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsKKyAgICBJbnRSZWN0
IHZpc2libGVSZWN0ID0gZnJhbWUtPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisKKyAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihiYWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VS
R0IpOworICAgIGNvbnRleHQuZHJhd1JlY3QodmlzaWJsZVJlY3QpOworCisgICAgRm9udERlc2Ny
aXB0aW9uIGRlc2M7CisgICAgc2V0VXBGb250RGVzY3JpcHRpb24oZGVzYywgc2V0dGluZ3MpOwor
ICAgIGRlc2Muc2V0Q29tcHV0ZWRTaXplKGZvbnRIZWlnaHQpOworICAgIEZvbnQgZm9udCA9IEZv
bnQoZGVzYywgMCwgMCk7CisgICAgZm9udC51cGRhdGUoMCk7CisKKyAgICBTdHJpbmcgdGV4dCA9
ICJUaGUgZGVidWdnZXIgaXMgcGF1c2VkLiI7CisgICAgVGV4dFJ1biB0ZXh0UnVuKHRleHQpOwor
ICAgIEludFJlY3QgdGl0bGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmb250LnNlbGVjdGlvblJl
Y3RGb3JUZXh0KHRleHRSdW4sIEludFBvaW50KCksIGZvbnRIZWlnaHQpKTsKKyAgICB0aXRsZVJl
Y3QuaW5mbGF0ZShyZWN0SW5mbGF0ZVB4KTsKKyAgICB0aXRsZVJlY3Quc2V0TG9jYXRpb24oSW50
UG9pbnQodmlzaWJsZVJlY3Qud2lkdGgoKSAvIDIgLSB0aXRsZVJlY3Qud2lkdGgoKSAvIDIsIDAp
KTsKKworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRleHRCYWNrZ3JvdW5kQ29sb3IsIENvbG9y
U3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoYm9yZGVyQ29sb3Is
IENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJhd1JlY3QodGl0bGVSZWN0KTsK
KyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VS
R0IpOworICAgIGNvbnRleHQuZHJhd1RleHQoZm9udCwgdGV4dFJ1biwgSW50UG9pbnQodGl0bGVS
ZWN0LngoKSArIHJlY3RJbmZsYXRlUHgsIHRpdGxlUmVjdC55KCkgKyBmb250SGVpZ2h0KSk7Cit9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0RPTU5vZGVIaWdobGlnaHRlci5oCmluZGV4IGY3YjZmMDBmNGZmZTAyNTkxMzU1MjU0ZGZlMTkz
ZDAzMDYyY2UzZDkuLmYzMTZjZTU0ODBkOGI4ZDdlOWJmNWU3M2FkMTlkMDRjYmY1YTliNzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmgKQEAgLTM0
LDYgKzM0LDcgQEAKICNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgogCiAjaW5jbHVkZSA8d3RmL093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNDMsNyArNDQsMTEgQEAgY2xhc3Mg
Q29sb3I7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEZyYW1lVmlldzsKIGNsYXNzIEdyYXBoaWNz
Q29udGV4dDsKK2NsYXNzIEluc3BlY3RvckNsaWVudDsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBJ
bnRTaXplOwogY2xhc3MgTm9kZTsKK2NsYXNzIFBhZ2U7CiAKIHN0cnVjdCBIaWdobGlnaHREYXRh
IHsKICAgICBDb2xvciBjb250ZW50OwpAQCAtNzUsMTMgKzgwLDMzIEBAIHN0cnVjdCBIaWdobGln
aHQgewogICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwogfTsKIAotbmFtZXNwYWNlIERPTU5v
ZGVIaWdobGlnaHRlciB7CitjbGFzcyBJbnNwZWN0b3JPdmVybGF5IHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JPdmVybGF5PiBjcmVhdGUoUGFnZSogcGFnZSwgSW5z
cGVjdG9yQ2xpZW50KiBjbGllbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IEluc3BlY3Rvck92ZXJsYXkocGFnZSwgY2xpZW50KSk7CisgICAgfQogCi12b2lkIGRyYXdIaWdo
bGlnaHQoR3JhcGhpY3NDb250ZXh0JiwgRG9jdW1lbnQqLCBIaWdobGlnaHREYXRhKik7Ci12b2lk
IGdldEhpZ2hsaWdodChEb2N1bWVudCosIEhpZ2hsaWdodERhdGEqLCBIaWdobGlnaHQqKTsKLXZv
aWQgZHJhd091dGxpbmUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0
IENvbG9yJik7CisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYpOworICAgIHZvaWQgZHJh
d091dGxpbmUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IENvbG9y
Jik7CisgICAgdm9pZCBnZXRIaWdobGlnaHQoRG9jdW1lbnQqLCBIaWdobGlnaHREYXRhKiwgSGln
aGxpZ2h0Kik7CiAKLX0gLy8gbmFtZXNwYWNlIERPTU5vZGVIaWdobGlnaHRlcgorICAgIHZvaWQg
c2V0SGlnaGxpZ2h0KERvY3VtZW50KiwgSGlnaGxpZ2h0RGF0YSopOworICAgIHZvaWQgc2V0U2hv
dWxkU2hvd1BhdXNlV2FybmluZyhib29sKTsKKworcHJpdmF0ZToKKyAgICBJbnNwZWN0b3JPdmVy
bGF5KFBhZ2UqLCBJbnNwZWN0b3JDbGllbnQqKTsKKworICAgIHZvaWQgdXBkYXRlKCk7CisgICAg
dm9pZCBkcmF3SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYpOworICAgIHZvaWQgZHJhd1BhdXNl
V2FybmluZyhHcmFwaGljc0NvbnRleHQmKTsKKworICAgIFBhZ2UqIG1fcGFnZTsKKyAgICBJbnNw
ZWN0b3JDbGllbnQqIG1fY2xpZW50OworICAgIGJvb2wgbV9zaG91bGRTaG93UGF1c2VXYXJuaW5n
OworICAgIERvY3VtZW50KiBtX2RvY3VtZW50OworICAgIEhpZ2hsaWdodERhdGEqIG1faGlnaGxp
Z2h0RGF0YTsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDA5NWUxY2M1MWIz
NTRhOGY4ZTA4MTQ2YTc5ZWY3MDhkYjdjZDQ5Y2UuLmJiN2E4ZTM3OWQ3OTFiYzgxOWUwMjg1ZGRj
NDhlZDEyODg3MWM4NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkluc3BlY3Rv
ckNvbnRyb2xsZXIuaCIKIAorI2luY2x1ZGUgIkRPTU5vZGVIaWdobGlnaHRlci5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSWRl
bnRpZmllcnNGYWN0b3J5LmgiCkBAIC03OCw2ICs3OSw3IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6
Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0
b3JDCiAgICAgOiBtX2luc3RydW1lbnRpbmdBZ2VudHMoYWRvcHRQdHIobmV3IEluc3RydW1lbnRp
bmdBZ2VudHMoKSkpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlcihJbmplY3RlZFNjcmlw
dE1hbmFnZXI6OmNyZWF0ZUZvclBhZ2UoKSkKICAgICAsIG1fc3RhdGUoYWRvcHRQdHIobmV3IElu
c3BlY3RvclN0YXRlKGluc3BlY3RvckNsaWVudCkpKQorICAgICwgbV9vdmVybGF5KEluc3BlY3Rv
ck92ZXJsYXk6OmNyZWF0ZShwYWdlLCBpbnNwZWN0b3JDbGllbnQpKQogICAgICwgbV9wYWdlKHBh
Z2UpCiAgICAgLCBtX2luc3BlY3RvckNsaWVudChpbnNwZWN0b3JDbGllbnQpCiB7CkBAIC04NSwx
MiArODcsMTIgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdl
KiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckMKICAgICBtX2luc3BlY3RvckFnZW50
ID0gaW5zcGVjdG9yQWdlbnRQdHIuZ2V0KCk7CiAgICAgbV9hZ2VudHMuYXBwZW5kKGluc3BlY3Rv
ckFnZW50UHRyLnJlbGVhc2UoKSk7CiAKLSAgICBPd25QdHI8SW5zcGVjdG9yUGFnZUFnZW50PiBw
YWdlQWdlbnRQdHIoSW5zcGVjdG9yUGFnZUFnZW50OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdl
bnRzLmdldCgpLCBwYWdlLCBtX2luc3BlY3RvckFnZW50LCBtX3N0YXRlLmdldCgpLCBtX2luamVj
dGVkU2NyaXB0TWFuYWdlci5nZXQoKSwgaW5zcGVjdG9yQ2xpZW50KSk7CisgICAgT3duUHRyPElu
c3BlY3RvclBhZ2VBZ2VudD4gcGFnZUFnZW50UHRyKEluc3BlY3RvclBhZ2VBZ2VudDo6Y3JlYXRl
KG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgcGFnZSwgbV9pbnNwZWN0b3JBZ2VudCwgbV9z
dGF0ZS5nZXQoKSwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuZ2V0KCksIGluc3BlY3RvckNsaWVu
dCwgbV9vdmVybGF5LmdldCgpKSk7CiAgICAgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQg
PSBwYWdlQWdlbnRQdHIuZ2V0KCk7CiAgICAgbV9wYWdlQWdlbnQgPSBwYWdlQWdlbnRQdHIuZ2V0
KCk7CiAgICAgbV9hZ2VudHMuYXBwZW5kKHBhZ2VBZ2VudFB0ci5yZWxlYXNlKCkpOwogCi0gICAg
T3duUHRyPEluc3BlY3RvckRPTUFnZW50PiBkb21BZ2VudFB0cihJbnNwZWN0b3JET01BZ2VudDo6
Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgcGFnZUFnZW50LCBpbnNwZWN0b3JD
bGllbnQsIG1fc3RhdGUuZ2V0KCksIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpKSk7Cisg
ICAgT3duUHRyPEluc3BlY3RvckRPTUFnZW50PiBkb21BZ2VudFB0cihJbnNwZWN0b3JET01BZ2Vu
dDo6Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgcGFnZUFnZW50LCBtX3N0YXRl
LmdldCgpLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5nZXQoKSwgbV9vdmVybGF5LmdldCgpKSk7
CiAgICAgbV9kb21BZ2VudCA9IGRvbUFnZW50UHRyLmdldCgpOwogICAgIG1fYWdlbnRzLmFwcGVu
ZChkb21BZ2VudFB0ci5yZWxlYXNlKCkpOwogCkBAIC0xMzAsNyArMTMyLDcgQEAgSW5zcGVjdG9y
Q29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGll
bnQqIGluc3BlY3RvckMKICAgICBtX2FnZW50cy5hcHBlbmQoY29uc29sZUFnZW50UHRyLnJlbGVh
c2UoKSk7CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICBPd25QdHI8SW5z
cGVjdG9yRGVidWdnZXJBZ2VudD4gZGVidWdnZXJBZ2VudFB0cihQYWdlRGVidWdnZXJBZ2VudDo6
Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgbV9zdGF0ZS5nZXQoKSwgcGFnZSwg
bV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuZ2V0KCkpKTsKKyAgICBPd25QdHI8SW5zcGVjdG9yRGVi
dWdnZXJBZ2VudD4gZGVidWdnZXJBZ2VudFB0cihQYWdlRGVidWdnZXJBZ2VudDo6Y3JlYXRlKG1f
aW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgbV9zdGF0ZS5nZXQoKSwgcGFnZSwgbV9pbmplY3Rl
ZFNjcmlwdE1hbmFnZXIuZ2V0KCksIG1fb3ZlcmxheS5nZXQoKSkpOwogICAgIG1fZGVidWdnZXJB
Z2VudCA9IGRlYnVnZ2VyQWdlbnRQdHIuZ2V0KCk7CiAgICAgbV9hZ2VudHMuYXBwZW5kKGRlYnVn
Z2VyQWdlbnRQdHIucmVsZWFzZSgpKTsKIApAQCAtMjk0LDcgKzI5Niw3IEBAIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChsb25nIGNhbGxJZCwgY29u
c3QgU3RyaW5nJiBzCiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZHJhd0hpZ2hsaWdodChH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7Ci0gICAgbV9kb21BZ2VudC0+ZHJhd0hp
Z2hsaWdodChjb250ZXh0KTsKKyAgICBtX3BhZ2VBZ2VudC0+ZHJhd0luc3BlY3Rvck92ZXJsYXko
Y29udGV4dCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0SGlnaGxpZ2h0KEhp
Z2hsaWdodCogaGlnaGxpZ2h0KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggNDczYmI4ZGUyNmZlYTBhYzcwNDZmNjY0OTc5YWRm
Y2Q0ZWNhNWJlZC4uMGI1NTgyY2Q5M2ZkOTliZGU4YTExMTAzMTJlYjM5MTljMjNmZjUxMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC01
MSw2ICs1MSw3IEBAIGNsYXNzIEluc3BlY3RvckRPTUFnZW50OwogY2xhc3MgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kOwogY2xhc3MgSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQ7CitjbGFzcyBJbnNwZWN0b3JPdmVybGF5OwogY2xhc3MgSW5zcGVjdG9yUGFn
ZUFnZW50OwogY2xhc3MgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDsKIGNsYXNzIEluc3BlY3RvclJl
c291cmNlQWdlbnQ7CkBAIC0xMTksNiArMTIwLDcgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8SW5z
dHJ1bWVudGluZ0FnZW50cz4gbV9pbnN0cnVtZW50aW5nQWdlbnRzOwogICAgIE93blB0cjxJbmpl
Y3RlZFNjcmlwdE1hbmFnZXI+IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogICAgIE93blB0cjxJ
bnNwZWN0b3JTdGF0ZT4gbV9zdGF0ZTsKKyAgICBPd25QdHI8SW5zcGVjdG9yT3ZlcmxheT4gbV9v
dmVybGF5OwogCiAgICAgSW5zcGVjdG9yQWdlbnQqIG1faW5zcGVjdG9yQWdlbnQ7CiAgICAgSW5z
cGVjdG9yRE9NQWdlbnQqIG1fZG9tQWdlbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCA5MDc5NTg5ZTUxY2U4ZjA4ZTUwZTIwNmU0OWEx
MzI2YmU5NWMzMDEyLi5jZjUyYWFlMzE4OTllMzU0MWJjOTZkYmJlMjA3MGZkNDE1M2ExNmE4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAg
LTY2LDcgKzY2LDYgQEAKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSWRl
bnRpZmllcnNGYWN0b3J5LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmgiCi0j
aW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JIaXN0b3J5LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUGFn
ZUFnZW50LmgiCkBAIC0xOTQsMTEgKzE5MywxMSBAQCBTdHJpbmcgSW5zcGVjdG9yRE9NQWdlbnQ6
OnRvRXJyb3JTdHJpbmcoY29uc3QgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgcmV0dXJuICIiOwog
fQogCi1JbnNwZWN0b3JET01BZ2VudDo6SW5zcGVjdG9yRE9NQWdlbnQoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQs
IEluc3BlY3RvckNsaWVudCogY2xpZW50LCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUs
IEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQorSW5zcGVjdG9y
RE9NQWdlbnQ6Okluc3BlY3RvckRPTUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1l
bnRpbmdBZ2VudHMsIEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBJbnNwZWN0b3JTdGF0
ZSogaW5zcGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQogICAgIDogSW5zcGVjdG9yQmFzZUFn
ZW50PEluc3BlY3RvckRPTUFnZW50PigiRE9NIiwgaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVj
dG9yU3RhdGUpCiAgICAgLCBtX3BhZ2VBZ2VudChwYWdlQWdlbnQpCi0gICAgLCBtX2NsaWVudChj
bGllbnQpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlcihpbmplY3RlZFNjcmlwdE1hbmFn
ZXIpCisgICAgLCBtX292ZXJsYXkob3ZlcmxheSkKICAgICAsIG1fZnJvbnRlbmQoMCkKICAgICAs
IG1fZG9tTGlzdGVuZXIoMCkKICAgICAsIG1fbGFzdE5vZGVJZCgxKQpAQCAtMTAzNiw3ICsxMDM1
LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0KCkKIHsKICAgICAvLyBUaGlz
IG1ldGhvZCByZXF1aXJlcyBtX2hpZ2hsaWdodERhdGEgdG8gaGF2ZSBiZWVuIGZpbGxlZCBpbiBi
eSBpdHMgY2xpZW50LgogICAgIEFTU0VSVChtX2hpZ2hsaWdodERhdGEpOwotICAgIG1fY2xpZW50
LT5oaWdobGlnaHQoKTsKKyAgICBtX292ZXJsYXktPnNldEhpZ2hsaWdodChtX2RvY3VtZW50Lmdl
dCgpLCBtX2hpZ2hsaWdodERhdGEuZ2V0KCkpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpoaWdobGlnaHRSZWN0KEVycm9yU3RyaW5nKiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBjb2xvciwgY29uc3QgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4qIG91dGxpbmVDb2xvcikKQEAgLTEwNDUsNyArMTA0NCw3IEBA
IHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFJlY3QoRXJyb3JTdHJpbmcqLCBpbnQg
eCwgaW50IHksIGludCB3aWR0aCwgaW50CiAgICAgbV9oaWdobGlnaHREYXRhLT5yZWN0ID0gYWRv
cHRQdHIobmV3IEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwogICAgIG1faGlnaGxpZ2h0
RGF0YS0+Y29udGVudCA9IHBhcnNlQ29sb3IoY29sb3IpOwogICAgIG1faGlnaGxpZ2h0RGF0YS0+
Y29udGVudE91dGxpbmUgPSBwYXJzZUNvbG9yKG91dGxpbmVDb2xvcik7Ci0gICAgbV9jbGllbnQt
PmhpZ2hsaWdodCgpOworICAgIGhpZ2hsaWdodCgpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpoaWdobGlnaHROb2RlKApAQCAtMTA4NCw3ICsxMDgzLDcgQEAgdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6aGlkZUhpZ2hsaWdodChFcnJvclN0cmluZyopCiAgICAgICAgIG1faGlnaGxpZ2h0
RGF0YS0+bm9kZS5jbGVhcigpOwogICAgICAgICBtX2hpZ2hsaWdodERhdGEtPnJlY3QuY2xlYXIo
KTsKICAgICB9Ci0gICAgbV9jbGllbnQtPmhpZGVIaWdobGlnaHQoKTsKKyAgICBoaWdobGlnaHQo
KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6bW92ZVRvKEVycm9yU3RyaW5nKiBlcnJv
clN0cmluZywgaW50IG5vZGVJZCwgaW50IHRhcmdldEVsZW1lbnRJZCwgY29uc3QgaW50KiBjb25z
dCBhbmNob3JOb2RlSWQsIGludCogbmV3Tm9kZUlkKQpAQCAtMTU5OSwyMCArMTU5OCwxMiBAQCBQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IEluc3BlY3RvckRP
TUFnZW50OjpyZXNvbHZlTm9kZShObwogICAgIHJldHVybiBpbmplY3RlZFNjcmlwdC53cmFwTm9k
ZShub2RlLCBvYmplY3RHcm91cCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRyYXdI
aWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGlmICghbV9o
aWdobGlnaHREYXRhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBET01Ob2RlSGlnaGxpZ2h0ZXI6
OmRyYXdIaWdobGlnaHQoY29udGV4dCwgbV9oaWdobGlnaHREYXRhLT5ub2RlID8gbV9oaWdobGln
aHREYXRhLT5ub2RlLT5kb2N1bWVudCgpIDogbV9kb2N1bWVudC5nZXQoKSwgbV9oaWdobGlnaHRE
YXRhLmdldCgpKTsKLX0KLQogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0SGlnaGxpZ2h0KEhp
Z2hsaWdodCogaGlnaGxpZ2h0KSBjb25zdAogewogICAgIGlmICghbV9oaWdobGlnaHREYXRhKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBET01Ob2RlSGlnaGxpZ2h0ZXI6OmdldEhpZ2hsaWdodCht
X2hpZ2hsaWdodERhdGEtPm5vZGUgPyBtX2hpZ2hsaWdodERhdGEtPm5vZGUtPmRvY3VtZW50KCkg
OiBtX2RvY3VtZW50LmdldCgpLCBtX2hpZ2hsaWdodERhdGEuZ2V0KCksIGhpZ2hsaWdodCk7Cisg
ICAgbV9vdmVybGF5LT5nZXRIaWdobGlnaHQobV9oaWdobGlnaHREYXRhLT5ub2RlID8gbV9oaWdo
bGlnaHREYXRhLT5ub2RlLT5kb2N1bWVudCgpIDogbV9kb2N1bWVudC5nZXQoKSwgbV9oaWdobGln
aHREYXRhLmdldCgpLCBoaWdobGlnaHQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCmluZGV4IGIwNWFi
NTcwZDlmZDFiMDQ4NzA2YTM5M2EyNDY2NTk3YjQ5NjM5YmYuLjNiM2Y1OWJlNzY4ODY5YjNhODBj
MTY3YmU5YmQyNjEyMDUxYTcyN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01BZ2VudC5oCkBAIC01Niw5ICs1Niw5IEBAIGNsYXNzIERvY3VtZW50OwogY2xhc3Mg
RWxlbWVudDsKIGNsYXNzIEV2ZW50OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgSW5z
cGVjdG9yQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CiBjbGFzcyBJbnNwZWN0b3JI
aXN0b3J5OworY2xhc3MgSW5zcGVjdG9yT3ZlcmxheTsKIGNsYXNzIEluc3BlY3RvclBhZ2VBZ2Vu
dDsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBIaXRUZXN0UmVzdWx0OwpAQCAtMTAzLDkgKzEwMyw5
IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZE1vZGlmeURPTUF0dHIoRWxlbWVu
dCopID0gMDsKICAgICB9OwogCi0gICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yRE9NQWdl
bnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNw
ZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQsIEluc3Bl
Y3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3Rl
ZFNjcmlwdE1hbmFnZXIpCisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yRE9NQWdlbnQ+
IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0
b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBJ
bmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgSW5zcGVjdG9yT3Zl
cmxheSogb3ZlcmxheSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5zcGVj
dG9yRE9NQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgcGFnZUFnZW50LCBjbGllbnQsIGluc3Bl
Y3RvclN0YXRlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBJbnNwZWN0b3JET01BZ2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBwYWdlQWdlbnQs
IGluc3BlY3RvclN0YXRlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIG92ZXJsYXkpKTsKICAgICB9
CiAKICAgICBzdGF0aWMgU3RyaW5nIHRvRXJyb3JTdHJpbmcoY29uc3QgRXhjZXB0aW9uQ29kZSYp
OwpAQCAtMTg1LDcgKzE4NSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGluc3BlY3QoTm9kZSopOwog
ICAgIHZvaWQgZm9jdXNOb2RlKCk7CiAKLSAgICB2b2lkIGRyYXdIaWdobGlnaHQoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Q7CiAgICAgdm9pZCBnZXRIaWdobGlnaHQoSGlnaGxpZ2h0KikgY29uc3Q7
CiAKICAgICBJbnNwZWN0b3JIaXN0b3J5KiBoaXN0b3J5KCkgeyByZXR1cm4gbV9oaXN0b3J5Lmdl
dCgpOyB9CkBAIC0yMDUsNyArMjA0LDcgQEAgcHVibGljOgogICAgIEluc3BlY3RvclBhZ2VBZ2Vu
dCogcGFnZUFnZW50KCkgeyByZXR1cm4gbV9wYWdlQWdlbnQ7IH0KIAogcHJpdmF0ZToKLSAgICBJ
bnNwZWN0b3JET01BZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yUGFnZUFnZW50
KiwgSW5zcGVjdG9yQ2xpZW50KiwgSW5zcGVjdG9yU3RhdGUqLCBJbmplY3RlZFNjcmlwdE1hbmFn
ZXIqKTsKKyAgICBJbnNwZWN0b3JET01BZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVj
dG9yUGFnZUFnZW50KiwgSW5zcGVjdG9yU3RhdGUqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJ
bnNwZWN0b3JPdmVybGF5Kik7CiAKICAgICB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBl
bmFibGVkLCBJbnNwZWN0b3JPYmplY3QqIGhpZ2hsaWdodENvbmZpZyk7CiAgICAgYm9vbCBzZXRI
aWdobGlnaHREYXRhRnJvbUNvbmZpZyhJbnNwZWN0b3JPYmplY3QqIGhpZ2hsaWdodENvbmZpZyk7
CkBAIC0yNDEsOCArMjQwLDggQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgSW5zcGVjdG9yUGFn
ZUFnZW50KiBtX3BhZ2VBZ2VudDsKLSAgICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50OwogICAg
IEluamVjdGVkU2NyaXB0TWFuYWdlciogbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CisgICAgSW5z
cGVjdG9yT3ZlcmxheSogbV9vdmVybGF5OwogICAgIEluc3BlY3RvckZyb250ZW5kOjpET00qIG1f
ZnJvbnRlbmQ7CiAgICAgRE9NTGlzdGVuZXIqIG1fZG9tTGlzdGVuZXI7CiAgICAgTm9kZVRvSWRN
YXAgbV9kb2N1bWVudE5vZGVUb0lkTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDExODA3YTNmOWU4Nzk4NDBkZWE2
MDNiMzY2M2UyMDlhZmNlZDcyYzguLjg1ODkxM2YxNTk1ZmM2ODE3ZWE0ZjEwZDI4OGNiZjJhZWM0
MjZkYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1
Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50LmgiCiAKICNpbmNsdWRlICJDb250ZW50U2VhcmNoVXRpbHMuaCIKKyNpbmNsdWRl
ICJET01Ob2RlSGlnaGxpZ2h0ZXIuaCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdC5oIgogI2lu
Y2x1ZGUgIkluamVjdGVkU2NyaXB0TWFuYWdlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250
ZW5kLmgiCkBAIC02MCwxMCArNjEsMTEgQEAgc3RhdGljIGNvbnN0IGNoYXIgcGF1c2VPbkV4Y2Vw
dGlvbnNTdGF0ZVtdID0gInBhdXNlT25FeGNlcHRpb25zU3RhdGUiOwogCiBjb25zdCBjaGFyKiBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpiYWNrdHJhY2VPYmplY3RHcm91cCA9ICJiYWNrdHJhY2Ut
b2JqZWN0LWdyb3VwIjsKIAotSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yRGVidWdn
ZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0
b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyKQorSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yRGVidWdnZXJB
Z2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JT
dGF0ZSogaW5zcGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyLCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQogICAgIDogSW5zcGVjdG9yQmFz
ZUFnZW50PEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+KCJEZWJ1Z2dlciIsIGluc3RydW1lbnRpbmdB
Z2VudHMsIGluc3BlY3RvclN0YXRlKQogICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoaW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyKQogICAgICwgbV9mcm9udGVuZCgwKQorICAgICwgbV9vdmVybGF5
KG92ZXJsYXkpCiAgICAgLCBtX3BhdXNlZFNjcmlwdFN0YXRlKDApCiAgICAgLCBtX2phdmFTY3Jp
cHRQYXVzZVNjaGVkdWxlZChmYWxzZSkKICAgICAsIG1fbGlzdGVuZXIoMCkKQEAgLTEwMyw2ICsx
MDUsOCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoKQogCiAgICAgaWYg
KG1fbGlzdGVuZXIpCiAgICAgICAgIG1fbGlzdGVuZXItPmRlYnVnZ2VyV2FzRGlzYWJsZWQoKTsK
KyAgICBpZiAobV9vdmVybGF5KQorICAgICAgICBtX292ZXJsYXktPnNldFNob3VsZFNob3dQYXVz
ZVdhcm5pbmcoZmFsc2UpOwogfQogCiBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVuYWJs
ZWQoKQpAQCAtNjU3LDYgKzY2MSw4IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlk
UGF1c2UoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBTY3JpcHRWYWx1CiAgICAgICAg
IH0KICAgICB9CiAKKyAgICBpZiAobV9vdmVybGF5KQorICAgICAgICBtX292ZXJsYXktPnNldFNo
b3VsZFNob3dQYXVzZVdhcm5pbmcodHJ1ZSk7CiAgICAgbV9mcm9udGVuZC0+cGF1c2VkKGN1cnJl
bnRDYWxsRnJhbWVzKCksIG1fYnJlYWtSZWFzb24sIG1fYnJlYWtBdXhEYXRhKTsKICAgICBtX2ph
dmFTY3JpcHRQYXVzZVNjaGVkdWxlZCA9IGZhbHNlOwogCkBAIC02NzEsNiArNjc3LDggQEAgdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSgpCiAgICAgbV9wYXVzZWRTY3Jp
cHRTdGF0ZSA9IDA7CiAgICAgbV9jdXJyZW50Q2FsbFN0YWNrID0gU2NyaXB0VmFsdWUoKTsKICAg
ICBjbGVhckJyZWFrRGV0YWlscygpOworICAgIGlmIChtX292ZXJsYXkpCisgICAgICAgIG1fb3Zl
cmxheS0+c2V0U2hvdWxkU2hvd1BhdXNlV2FybmluZyhmYWxzZSk7CiAgICAgbV9mcm9udGVuZC0+
cmVzdW1lZCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuaAppbmRleCAwOWM5N2QxOTUzZTRiOWIwMDE2MWY4NzRmNDUzMWZiZGVj
N2RiNmNkLi5lNzhlODhmOWQ2MmJhOGY0YmVmMzU4NmRlM2RmYmI0NWYwOTdkNzgxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAg
LTUwLDYgKzUwLDcgQEAgY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogY2xhc3MgSW5zcGVj
dG9yRnJvbnRlbmQ7CiBjbGFzcyBJbnNwZWN0b3JBcnJheTsKIGNsYXNzIEluc3BlY3Rvck9iamVj
dDsKK2NsYXNzIEluc3BlY3Rvck92ZXJsYXk7CiBjbGFzcyBJbnNwZWN0b3JTdGF0ZTsKIGNsYXNz
IEluc3BlY3RvclZhbHVlOwogY2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsKQEAgLTEyNCw3ICsx
MjUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTY3JpcHREZWJ1Z1NlcnZlciYgc2NyaXB0RGVi
dWdTZXJ2ZXIoKSA9IDA7CiAKIHByb3RlY3RlZDoKLSAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFu
YWdlciopOworICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyos
IEluc3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9yT3Zlcmxh
eSopOwogCiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0TGlzdGVuaW5nU2NyaXB0RGVidWdTZXJ2ZXIo
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN0b3BMaXN0ZW5pbmdTY3JpcHREZWJ1Z1NlcnZlcigp
ID0gMDsKQEAgLTE1OSw2ICsxNjAsNyBAQCBwcml2YXRlOgogCiAgICAgSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyKiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKICAgICBJbnNwZWN0b3JGcm9udGVuZDo6
RGVidWdnZXIqIG1fZnJvbnRlbmQ7CisgICAgSW5zcGVjdG9yT3ZlcmxheSogbV9vdmVybGF5Owog
ICAgIFNjcmlwdFN0YXRlKiBtX3BhdXNlZFNjcmlwdFN0YXRlOwogICAgIFNjcmlwdFZhbHVlIG1f
Y3VycmVudENhbGxTdGFjazsKICAgICBTY3JpcHRzTWFwIG1fc2NyaXB0czsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKaW5kZXggZWYzNDUzN2Yw
ZTExOGZiNWUwY2I4OGNhMmZhYjVlM2VmNjBhMzU3Ny4uZDcxNTgzMGZmNzljZGJjNjk3M2EwOGZm
MGZhNmY1N2M4Yjc3MTVjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclBhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclBhZ2VBZ2VudC5jcHAKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlICJEb2N1bWVudExv
YWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllcnNGYWN0b3J5
LmgiCkBAIC0yMjMsOSArMjI0LDkgQEAgYm9vbCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNoYXJlZEJ1
ZmZlckNvbnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciwgY28KICAgICByZXR1
cm4gZGVjb2RlU2hhcmVkQnVmZmVyKGJ1ZmZlciwgdGV4dEVuY29kaW5nTmFtZSwgcmVzdWx0KTsK
IH0KIAotUGFzc093blB0cjxJbnNwZWN0b3JQYWdlQWdlbnQ+IEluc3BlY3RvclBhZ2VBZ2VudDo6
Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIFBhZ2UqIHBh
Z2UsIEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgSW5zcGVjdG9yU3RhdGUqIHN0YXRl
LCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgSW5zcGVjdG9y
Q2xpZW50KiBjbGllbnQpCitQYXNzT3duUHRyPEluc3BlY3RvclBhZ2VBZ2VudD4gSW5zcGVjdG9y
UGFnZUFnZW50OjpjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cywgUGFnZSogcGFnZSwgSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBJbnNwZWN0b3JT
dGF0ZSogc3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCwgSW5zcGVjdG9yT3ZlcmxheSogb3ZlcmxheSkKIHsK
LSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEluc3BlY3RvclBhZ2VBZ2VudChpbnN0cnVtZW50aW5n
QWdlbnRzLCBwYWdlLCBpbnNwZWN0b3JBZ2VudCwgc3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdl
ciwgY2xpZW50KSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JQYWdlQWdlbnQo
aW5zdHJ1bWVudGluZ0FnZW50cywgcGFnZSwgaW5zcGVjdG9yQWdlbnQsIHN0YXRlLCBpbmplY3Rl
ZFNjcmlwdE1hbmFnZXIsIGNsaWVudCwgb3ZlcmxheSkpOwogfQogCiAvLyBzdGF0aWMKQEAgLTMw
OCwxMyArMzA5LDE0IEBAIFR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkVudW0gSW5z
cGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5cGVKc29uCiAgICAgcmV0dXJuIHJlc291
cmNlVHlwZUpzb24oY2FjaGVkUmVzb3VyY2VUeXBlKGNhY2hlZFJlc291cmNlKSk7CiB9CiAKLUlu
c3BlY3RvclBhZ2VBZ2VudDo6SW5zcGVjdG9yUGFnZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMq
IGluc3RydW1lbnRpbmdBZ2VudHMsIFBhZ2UqIHBhZ2UsIEluc3BlY3RvckFnZW50KiBpbnNwZWN0
b3JBZ2VudCwgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBJbmplY3RlZFNjcmlwdE1h
bmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCitJ
bnNwZWN0b3JQYWdlQWdlbnQ6Okluc3BlY3RvclBhZ2VBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYWdlKiBwYWdlLCBJbnNwZWN0b3JBZ2VudCogaW5zcGVj
dG9yQWdlbnQsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIEluc3BlY3RvckNsaWVudCogY2xpZW50LCBJ
bnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQogICAgIDogSW5zcGVjdG9yQmFzZUFnZW50PEluc3Bl
Y3RvclBhZ2VBZ2VudD4oIlBhZ2UiLCBpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnNwZWN0b3JTdGF0
ZSkKICAgICAsIG1fcGFnZShwYWdlKQogICAgICwgbV9pbnNwZWN0b3JBZ2VudChpbnNwZWN0b3JB
Z2VudCkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKGluamVjdGVkU2NyaXB0TWFuYWdl
cikKICAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fZnJvbnRlbmQoMCkKKyAgICAsIG1f
b3ZlcmxheShvdmVybGF5KQogICAgICwgbV9sYXN0U2NyaXB0SWRlbnRpZmllcigwKQogICAgICwg
bV9sYXN0UGFpbnRDb250ZXh0KDApCiAgICAgLCBtX2RpZExvYWRFdmVudEZpcmUoZmFsc2UpCkBA
IC04NDMsNiArODQ1LDExIEBAIERvY3VtZW50TG9hZGVyKiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFz
c2VydERvY3VtZW50TG9hZGVyKEVycm9yU3RyaW5nKiBlcnJvclN0cmluCiAgICAgcmV0dXJuIGRv
Y3VtZW50TG9hZGVyOwogfQogCit2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZHJhd0luc3BlY3Rv
ck92ZXJsYXkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIG1fb3ZlcmxheS0+ZHJh
dyhjb250ZXh0KTsKK30KKwogdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmxvYWRlckRldGFjaGVk
RnJvbUZyYW1lKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiB7CiAgICAgSGFzaE1hcDxEb2N1bWVu
dExvYWRlciosIFN0cmluZz46Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9sb2FkZXJUb0lkZW50aWZp
ZXIuZmluZChsb2FkZXIpOwpAQCAtODg1LDcgKzg5Miw3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFn
ZW50OjpkaWRQYWludCgpCiAgICAgICAgIENvbG9yKDAsIDAsIDB4RkYsIDB4M0YpLAogICAgIH07
CiAKLSAgICBET01Ob2RlSGlnaGxpZ2h0ZXI6OmRyYXdPdXRsaW5lKCptX2xhc3RQYWludENvbnRl
eHQsIG1fbGFzdFBhaW50UmVjdCwgY29sb3JzW2NvbG9yU2VsZWN0b3IrKyAlIFdURl9BUlJBWV9M
RU5HVEgoY29sb3JzKV0pOworICAgIG1fb3ZlcmxheS0+ZHJhd091dGxpbmUoKm1fbGFzdFBhaW50
Q29udGV4dCwgbV9sYXN0UGFpbnRSZWN0LCBjb2xvcnNbY29sb3JTZWxlY3RvcisrICUgV1RGX0FS
UkFZX0xFTkdUSChjb2xvcnMpXSk7CiAKICAgICBtX2xhc3RQYWludENvbnRleHQgPSAwOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5o
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCmluZGV4IDk2
NGJjODVmYzYzNjQ4YWYzOGYyZGMxMmZjODNmNzk3MWI5M2E2NjMuLjc5ODUwOGE5Njg1ZTZlNmNi
NDRkMGFiMzBmZTUxMzc3MTBmY2E3ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUGFnZUFnZW50LmgKQEAgLTQ4LDExICs0OCwxMyBAQCBjbGFzcyBET01XcmFwcGVy
V29ybGQ7CiBjbGFzcyBEb2N1bWVudExvYWRlcjsKIGNsYXNzIEZyYW1lOwogY2xhc3MgRnJvbnRl
bmQ7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBJbmplY3RlZFNjcmlwdE1hbmFnZXI7
CiBjbGFzcyBJbnNwZWN0b3JBZ2VudDsKIGNsYXNzIEluc3BlY3RvckFycmF5OwogY2xhc3MgSW5z
cGVjdG9yQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9yT2JqZWN0OworY2xhc3MgSW5zcGVjdG9yT3Zl
cmxheTsKIGNsYXNzIEluc3BlY3RvclN0YXRlOwogY2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsK
IGNsYXNzIEtVUkw7CkBAIC03Nyw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICAgICAgT3RoZXJSZXNv
dXJjZQogICAgIH07CiAKLSAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JQYWdlQWdlbnQ+
IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiwgUGFnZSosIEluc3BlY3RvckFnZW50KiwgSW5z
cGVjdG9yU3RhdGUqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JDbGllbnQqKTsK
KyAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JQYWdlQWdlbnQ+IGNyZWF0ZShJbnN0cnVt
ZW50aW5nQWdlbnRzKiwgUGFnZSosIEluc3BlY3RvckFnZW50KiwgSW5zcGVjdG9yU3RhdGUqLCBJ
bmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JDbGllbnQqLCBJbnNwZWN0b3JPdmVybGF5
Kik7CiAKICAgICBzdGF0aWMgYm9vbCBjYWNoZWRSZXNvdXJjZUNvbnRlbnQoQ2FjaGVkUmVzb3Vy
Y2UqLCBTdHJpbmcqIHJlc3VsdCwgYm9vbCogYmFzZTY0RW5jb2RlZCk7CiAgICAgc3RhdGljIGJv
b2wgc2hhcmVkQnVmZmVyQ29udGVudChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIGNvbnN0IFN0
cmluZyYgdGV4dEVuY29kaW5nTmFtZSwgYm9vbCB3aXRoQmFzZTY0RW5jb2RlLCBTdHJpbmcqIHJl
c3VsdCk7CkBAIC0xMzUsOSArMTM3LDEwIEBAIHB1YmxpYzoKICAgICBTdHJpbmcgbG9hZGVySWQo
RG9jdW1lbnRMb2FkZXIqKTsKICAgICBGcmFtZSogYXNzZXJ0RnJhbWUoRXJyb3JTdHJpbmcqLCBT
dHJpbmcgZnJhbWVJZCk7CiAgICAgc3RhdGljIERvY3VtZW50TG9hZGVyKiBhc3NlcnREb2N1bWVu
dExvYWRlcihFcnJvclN0cmluZyosIEZyYW1lKik7CisgICAgdm9pZCBkcmF3SW5zcGVjdG9yT3Zl
cmxheShHcmFwaGljc0NvbnRleHQmKTsKIAogcHJpdmF0ZToKLSAgICBJbnNwZWN0b3JQYWdlQWdl
bnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIFBhZ2UqLCBJbnNwZWN0b3JBZ2VudCosIEluc3BlY3Rv
clN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9yQ2xpZW50Kik7CisgICAg
SW5zcGVjdG9yUGFnZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBQYWdlKiwgSW5zcGVjdG9y
QWdlbnQqLCBJbnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3Rv
ckNsaWVudCosIEluc3BlY3Rvck92ZXJsYXkqKTsKICAgICB2b2lkIHVwZGF0ZVZpZXdNZXRyaWNz
KGludCwgaW50LCBkb3VibGUsIGJvb2wpOwogCiAgICAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
UGFnZTo6RnJhbWU+IGJ1aWxkT2JqZWN0Rm9yRnJhbWUoRnJhbWUqKTsKQEAgLTE0Nyw2ICsxNTAs
NyBAQCBwcml2YXRlOgogICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciogbV9pbmplY3RlZFNjcmlw
dE1hbmFnZXI7CiAgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKICAgICBJbnNwZWN0b3JG
cm9udGVuZDo6UGFnZSogbV9mcm9udGVuZDsKKyAgICBJbnNwZWN0b3JPdmVybGF5KiBtX292ZXJs
YXk7CiAgICAgbG9uZyBtX2xhc3RTY3JpcHRJZGVudGlmaWVyOwogICAgIFN0cmluZyBtX3BlbmRp
bmdTY3JpcHRUb0V2YWx1YXRlT25Mb2FkT25jZTsKICAgICBTdHJpbmcgbV9zY3JpcHRUb0V2YWx1
YXRlT25Mb2FkT25jZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdl
RGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2Vy
QWdlbnQuY3BwCmluZGV4IGE1ODZlZGYzZmQ0MTA4YzlkMDc5MmMwYmRmZWJlMWU4M2ZhZmY4NmEu
LmMxZTYyNzUzZDIxOWRhYTk2MDA3OTBiNjViYjcxOGM4NDNmOGNmOWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcApAQCAtNDAsMTMgKzQwLDEz
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2Vu
dD4gUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGluc3Bl
Y3RlZFBhZ2UsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQor
UGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2VudD4gUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShJ
bnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSog
aW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIEluamVjdGVkU2NyaXB0TWFuYWdl
ciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQogewot
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGFnZURlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0Fn
ZW50cywgaW5zcGVjdG9yU3RhdGUsIGluc3BlY3RlZFBhZ2UsIGluamVjdGVkU2NyaXB0TWFuYWdl
cikpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGFnZURlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVu
dGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUsIGluc3BlY3RlZFBhZ2UsIGluamVjdGVkU2NyaXB0
TWFuYWdlciwgb3ZlcmxheSkpOwogfQogCi1QYWdlRGVidWdnZXJBZ2VudDo6UGFnZURlYnVnZ2Vy
QWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9y
U3RhdGUqIGluc3BlY3RvclN0YXRlLCBQYWdlKiBpbnNwZWN0ZWRQYWdlLCBJbmplY3RlZFNjcmlw
dE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlcikKLSAgICA6IEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUsIGluamVjdGVkU2NyaXB0
TWFuYWdlcikKK1BhZ2VEZWJ1Z2dlckFnZW50OjpQYWdlRGVidWdnZXJBZ2VudChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9y
U3RhdGUsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQorICAgIDogSW5zcGVj
dG9yRGVidWdnZXJBZ2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnNwZWN0b3JTdGF0ZSwgaW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLCBvdmVybGF5KQogICAgICwgbV9pbnNwZWN0ZWRQYWdlKGluc3Bl
Y3RlZFBhZ2UpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFn
ZURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJB
Z2VudC5oCmluZGV4IDlkYmQ1MTNmOWYxYTI4YmI5ODQyNDkxMzU3ODE0ODZjNzNjMzI2MTguLjA2
ZjE3Nzc4MTg3Y2EwMzExN2FlYTBhNDg2NjJjNDYyZjA1NTFhNTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oCkBAIC00NCw3ICs0NCw3IEBAIGNsYXNz
IFBhZ2VEZWJ1Z2dlckFnZW50IDogcHVibGljIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQgewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VEZWJ1Z2dlckFnZW50KTsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxQYWdlRGVidWdn
ZXJBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0ZSosIFBh
Z2UqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxQYWdl
RGVidWdnZXJBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0
ZSosIFBhZ2UqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JPdmVybGF5Kik7CiAg
ICAgdmlydHVhbCB+UGFnZURlYnVnZ2VyQWdlbnQoKTsKIAogcHJpdmF0ZToKQEAgLTU2LDcgKzU2
LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3Jp
cHRGb3JFdmFsKEVycm9yU3RyaW5nKiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpOwog
Ci0gICAgUGFnZURlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclN0
YXRlKiwgUGFnZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciopOworICAgIFBhZ2VEZWJ1Z2dlckFn
ZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0ZSosIFBhZ2UqLCBJbmplY3Rl
ZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JPdmVybGF5Kik7CiAgICAgUGFnZSogY29uc3QgbV9p
bnNwZWN0ZWRQYWdlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L1dvcmtlckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtl
ckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGM3NWFmNGE2ZTRjMGY0ZTk5NmYzNWQ4YTNhNzg5MTYx
NTMxNzE2MmYuLjE1ODlmYzMwZjQ1NjRkOTNlMjdiZjI3ZWFiNTU3NWQ0YjYwNmE1MTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyRGVidWdnZXJBZ2VudC5jcHAKQEAg
LTg2LDcgKzg2LDcgQEAgUGFzc093blB0cjxXb3JrZXJEZWJ1Z2dlckFnZW50PiBXb3JrZXJEZWJ1
Z2dlckFnZW50OjpjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyoKIH0KIAogV29ya2VyRGVidWdn
ZXJBZ2VudDo6V29ya2VyRGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIFdvcmtlckNvbnRl
eHQqIGluc3BlY3RlZFdvcmtlckNvbnRleHQsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKQotICAgIDogSW5zcGVjdG9yRGVidWdnZXJBZ2VudChpbnN0cnVtZW50
aW5nQWdlbnRzLCBpbnNwZWN0b3JTdGF0ZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQorICAgIDog
SW5zcGVjdG9yRGVidWdnZXJBZ2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnNwZWN0b3JTdGF0
ZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCAwKQogICAgICwgbV9zY3JpcHREZWJ1Z1NlcnZlcihp
bnNwZWN0ZWRXb3JrZXJDb250ZXh0KQogICAgICwgbV9pbnNwZWN0ZWRXb3JrZXJDb250ZXh0KGlu
c3BlY3RlZFdvcmtlckNvbnRleHQpCiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152567</attachid>
            <date>2012-07-16 11:16:09 -0700</date>
            <delta_ts>2012-07-17 05:29:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90880-20120716221608.patch</filename>
            <type>text/plain</type>
            <size>31791</size>
            <attacher name="Sergey Rogulenko">rogulenko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTZiZmVjMmM0ZGZkYTI1
NmYwZDlhM2U2Zjc4NzllYmY2YjVkNzY1ZC4uYWE0MWQyMjM3YTY1NGQ0NjMwZTdhZDg0NGM5NzRl
ZjE4ZTViMTQzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDEyLTA3LTE2ICBTZXJn
ZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogYWRkaW5nIHBhdXNlIGljb24gZm9yIEphdmFTY3JpcHQgZGVidWdnaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg4MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yZWQgRE9NTm9k
ZUhpZ2hsaWdodGVyIGludG8gSW5zcGVjdG9yT3ZlcmxheSBjbGFzcyBhbmQgYWRkZWQgYSBmZWF0
dXJlIHRvIHNob3cgYSAicGF1c2UiIHNjcmVlbiB3aGVuCisgICAgICAgIHRoZSBKYXZhc2NyaXB0
IGRlYnVnZ2VyIGlzIHBhdXNlZC4KKworICAgICAgICAqIGluc3BlY3Rvci9ET01Ob2RlSGlnaGxp
Z2h0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6SW5zcGVjdG9y
T3ZlcmxheSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdPdXRsaW5lKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmdldEhpZ2hsaWdodCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JPdmVybGF5OjpzZXRIaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpzZXRTaG91bGRTaG93UGF1c2VX
YXJuaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OnVwZGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3SGlnaGxpZ2h0KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdQYXVzZVdhcm5pbmcpOgorICAgICAg
ICAqIGluc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoSW5zcGVjdG9yT3ZlcmxheSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JP
dmVybGF5OjpjcmVhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNv
bnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZHJhd0hp
Z2hsaWdodCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRPTUFnZW50OjpoaWdobGlnaHRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRP
TUFnZW50OjpoaWRlSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFn
ZW50OjpnZXRIaWdobGlnaHQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01B
Z2VudDo6Y3JlYXRlKToKKyAgICAgICAgKEluc3BlY3RvckRPTUFnZW50KToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpc2FibGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGF1c2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ29udGludWUpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKEluc3BlY3RvckRlYnVnZ2VyQWdlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpJbnNwZWN0b3JQ
YWdlQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpkaWRQYWlu
dCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgICogaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50OjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZURlYnVnZ2VyQWdlbnQ6OlBhZ2VEZWJ1Z2dlckFnZW50KToKKyAgICAgICAgKiBp
bnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKFBhZ2VEZWJ1Z2dlckFnZW50
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvV29ya2VyRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJEZWJ1Z2dlckFnZW50OjpXb3JrZXJEZWJ1Z2dlckFnZW50KToKKwog
MjAxMi0wNy0xNSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZC4gRml4IG1ha2UgZGlzdGNoZWNrLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcAppbmRleCBlNGM3MTAwZDYxYzUy
MDgzZjM4MjcxZjJhNzI3NTQ3NTQ2OGVkYjJjLi45MTU2MWY4NDk4ZWRmOWU1MmY4OTllZGExNzMz
MmNhZmJmOWIwMmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9k
ZUhpZ2hsaWdodGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhp
Z2hsaWdodGVyLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIK
KyNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVk
ZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCkBAIC00ODUsMjEgKzQ4NiwzMCBAQCBzdGF0
aWMgdm9pZCBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
RG9jdW1lbnQqIGRvY3VtZW50LAogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAotbmFtZXNw
YWNlIERPTU5vZGVIaWdobGlnaHRlciB7CitJbnNwZWN0b3JPdmVybGF5OjpJbnNwZWN0b3JPdmVy
bGF5KFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQorICAgIDogbV9wYWdlKHBh
Z2UpCisgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX3Nob3VsZFNob3dQYXVzZVdhcm5p
bmcoZmFsc2UpCisgICAgLCBtX2RvY3VtZW50KDApCisgICAgLCBtX2hpZ2hsaWdodERhdGEoMCkK
K3sKK30KIAotdm9pZCBkcmF3SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgRG9j
dW1lbnQqIGRvY3VtZW50LCBIaWdobGlnaHREYXRhKiBoaWdobGlnaHREYXRhKQordm9pZCBJbnNw
ZWN0b3JPdmVybGF5OjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBpZiAo
IWhpZ2hsaWdodERhdGEpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAobV9oaWdobGlnaHREYXRh
KQorICAgICAgICBkcmF3SGlnaGxpZ2h0KGNvbnRleHQpOworICAgIGVsc2UgaWYgKG1fc2hvdWxk
U2hvd1BhdXNlV2FybmluZykKKyAgICAgICAgZHJhd1BhdXNlV2FybmluZyhjb250ZXh0KTsKK30K
IAotICAgIEhpZ2hsaWdodCBoaWdobGlnaHQ7Ci0gICAgaWYgKGhpZ2hsaWdodERhdGEtPm5vZGUp
Ci0gICAgICAgIGdldE9yRHJhd05vZGVIaWdobGlnaHQoJmNvbnRleHQsIGhpZ2hsaWdodERhdGEs
ICZoaWdobGlnaHQpOwotICAgIGVsc2UgaWYgKGhpZ2hsaWdodERhdGEtPnJlY3QpCi0gICAgICAg
IGdldE9yRHJhd1JlY3RIaWdobGlnaHQoJmNvbnRleHQsIGRvY3VtZW50LCBoaWdobGlnaHREYXRh
LCAmaGlnaGxpZ2h0KTsKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd091dGxpbmUoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYg
Y29sb3IpCit7CisgICAgRmxvYXRSZWN0IG91dGxpbmVSZWN0ID0gcmVjdDsKKyAgICBkcmF3T3V0
bGluZWRRdWFkKGNvbnRleHQsIG91dGxpbmVSZWN0LCBDb2xvcigpLCBjb2xvcik7CiB9CiAKLXZv
aWQgZ2V0SGlnaGxpZ2h0KERvY3VtZW50KiBkb2N1bWVudCwgSGlnaGxpZ2h0RGF0YSogaGlnaGxp
Z2h0RGF0YSwgSGlnaGxpZ2h0KiBoaWdobGlnaHQpCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6Omdl
dEhpZ2hsaWdodChEb2N1bWVudCogZG9jdW1lbnQsIEhpZ2hsaWdodERhdGEqIGhpZ2hsaWdodERh
dGEsIEhpZ2hsaWdodCogaGlnaGxpZ2h0KQogewogICAgIGlmICghaGlnaGxpZ2h0RGF0YSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtNTE2LDEzICs1MjYsNzggQEAgdm9pZCBnZXRIaWdobGlnaHQoRG9j
dW1lbnQqIGRvY3VtZW50LCBIaWdobGlnaHREYXRhKiBoaWdobGlnaHREYXRhLCBIaWdobGlnaHQq
IGgKICAgICAgICAgZ2V0T3JEcmF3UmVjdEhpZ2hsaWdodCgwLCBkb2N1bWVudCwgaGlnaGxpZ2h0
RGF0YSwgaGlnaGxpZ2h0KTsKIH0KIAotdm9pZCBkcmF3T3V0bGluZShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3Zv
aWQgSW5zcGVjdG9yT3ZlcmxheTo6c2V0SGlnaGxpZ2h0KERvY3VtZW50KiBkb2N1bWVudCwgSGln
aGxpZ2h0RGF0YSogaGlnaGxpZ2h0RGF0YSkKIHsKLSAgICBGbG9hdFJlY3Qgb3V0bGluZVJlY3Qg
PSByZWN0OwotICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgb3V0bGluZVJlY3QsIENvbG9y
KCksIGNvbG9yKTsKKyAgICBpZiAoZG9jdW1lbnQgJiYgaGlnaGxpZ2h0RGF0YSAmJiAoaGlnaGxp
Z2h0RGF0YS0+bm9kZSB8fCBoaWdobGlnaHREYXRhLT5yZWN0KSkgeworICAgICAgICBtX2RvY3Vt
ZW50ID0gaGlnaGxpZ2h0RGF0YS0+bm9kZSA/IGhpZ2hsaWdodERhdGEtPm5vZGUtPmRvY3VtZW50
KCkgOiBkb2N1bWVudDsKKyAgICAgICAgbV9oaWdobGlnaHREYXRhID0gaGlnaGxpZ2h0RGF0YTsK
KyAgICB9IGVsc2UgeworICAgICAgICBtX2RvY3VtZW50ID0gMDsKKyAgICAgICAgbV9oaWdobGln
aHREYXRhID0gMDsKKyAgICB9CisgICAgdXBkYXRlKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yT3Zl
cmxheTo6c2V0U2hvdWxkU2hvd1BhdXNlV2FybmluZyhib29sIHNob3VsZFNob3dQYXVzZVdhcm5p
bmcpCit7CisgICAgbV9zaG91bGRTaG93UGF1c2VXYXJuaW5nID0gc2hvdWxkU2hvd1BhdXNlV2Fy
bmluZzsKKyAgICB1cGRhdGUoKTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgRE9NTm9kZUhpZ2hsaWdo
dGVyCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnVwZGF0ZSgpCit7CisgICAgaWYgKCFtX2NsaWVu
dCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2hpZ2hsaWdodERhdGEgfHwgbV9zaG91bGRT
aG93UGF1c2VXYXJuaW5nKQorICAgICAgICBtX2NsaWVudC0+aGlnaGxpZ2h0KCk7CisgICAgZWxz
ZQorICAgICAgICBtX2NsaWVudC0+aGlkZUhpZ2hsaWdodCgpOworfQorCit2b2lkIEluc3BlY3Rv
ck92ZXJsYXk6OmRyYXdIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAg
IGlmICghbV9oaWdobGlnaHREYXRhKQorICAgICAgICByZXR1cm47CisKKyAgICBIaWdobGlnaHQg
aGlnaGxpZ2h0OworICAgIGlmIChtX2hpZ2hsaWdodERhdGEtPm5vZGUpCisgICAgICAgIGdldE9y
RHJhd05vZGVIaWdobGlnaHQoJmNvbnRleHQsIG1faGlnaGxpZ2h0RGF0YSwgJmhpZ2hsaWdodCk7
CisgICAgZWxzZSBpZiAobV9oaWdobGlnaHREYXRhLT5yZWN0KQorICAgICAgICBnZXRPckRyYXdS
ZWN0SGlnaGxpZ2h0KCZjb250ZXh0LCBtX2RvY3VtZW50LCBtX2hpZ2hsaWdodERhdGEsICZoaWdo
bGlnaHQpOworfQorCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdQYXVzZVdhcm5pbmcoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3Is
IGJhY2tncm91bmRDb2xvciwgKDAsIDAsIDAsIDMxKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChDb2xvciwgdGV4dEJhY2tncm91bmRDb2xvciwgKDI1NSwgMjU1LCAxOTQpKTsKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKENvbG9yLCBib3JkZXJDb2xvciwgKDEyOCwgMTI4LCAxMjgpKTsKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKGludCwgZm9udEhlaWdodCwgKDI0KSk7CisKKyAgICBGcmFt
ZSogZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpOworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9
IGZyYW1lLT5zZXR0aW5ncygpOworICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSBmcmFtZS0+dmll
dygpLT52aXNpYmxlQ29udGVudFJlY3QoKTsKKworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGJh
Y2tncm91bmRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5kcmF3UmVj
dCh2aXNpYmxlUmVjdCk7CisKKyAgICBGb250RGVzY3JpcHRpb24gZGVzYzsKKyAgICBzZXRVcEZv
bnREZXNjcmlwdGlvbihkZXNjLCBzZXR0aW5ncyk7CisgICAgZGVzYy5zZXRDb21wdXRlZFNpemUo
Zm9udEhlaWdodCk7CisgICAgRm9udCBmb250ID0gRm9udChkZXNjLCAwLCAwKTsKKyAgICBmb250
LnVwZGF0ZSgwKTsKKworICAgIFN0cmluZyB0ZXh0ID0gIlBhdXNlZCBpbiBkZWJ1Z2dlci4iOwor
ICAgIFRleHRSdW4gdGV4dFJ1bih0ZXh0KTsKKyAgICBJbnRSZWN0IHRpdGxlUmVjdCA9IGVuY2xv
c2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBJbnRQb2ludCgp
LCBmb250SGVpZ2h0KSk7CisgICAgdGl0bGVSZWN0LmluZmxhdGUocmVjdEluZmxhdGVQeCk7Cisg
ICAgdGl0bGVSZWN0LnNldExvY2F0aW9uKEludFBvaW50KHZpc2libGVSZWN0LndpZHRoKCkgLyAy
IC0gdGl0bGVSZWN0LndpZHRoKCkgLyAyLCAwKSk7CisKKyAgICBjb250ZXh0LnNldEZpbGxDb2xv
cih0ZXh0QmFja2dyb3VuZENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0
LnNldFN0cm9rZUNvbG9yKGJvcmRlckNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBj
b250ZXh0LmRyYXdSZWN0KHRpdGxlUmVjdCk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29s
b3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdUZXh0KGZv
bnQsIHRleHRSdW4sIEludFBvaW50KHRpdGxlUmVjdC54KCkgKyByZWN0SW5mbGF0ZVB4LCB0aXRs
ZVJlY3QueSgpICsgZm9udEhlaWdodCkpOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaAppbmRleCBm
N2I2ZjAwZjRmZmUwMjU5MTM1NTI1NGRmZTE5M2QwMzA2MmNlM2Q5Li5mMzE2Y2U1NDgwZDhiOGQ3
ZTliZjVlNzNhZDE5ZDA0Y2JmNWE5YjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0RPTU5vZGVIaWdobGlnaHRlci5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiTGF5b3V0
VHlwZXMuaCIKIAogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKQEAgLTQzLDcgKzQ0LDExIEBAIGNsYXNzIENvbG9yOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFz
cyBGcmFtZVZpZXc7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBJbnNwZWN0b3JDbGll
bnQ7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgSW50U2l6ZTsKIGNsYXNzIE5vZGU7CitjbGFzcyBQ
YWdlOwogCiBzdHJ1Y3QgSGlnaGxpZ2h0RGF0YSB7CiAgICAgQ29sb3IgY29udGVudDsKQEAgLTc1
LDEzICs4MCwzMyBAQCBzdHJ1Y3QgSGlnaGxpZ2h0IHsKICAgICBWZWN0b3I8RmxvYXRRdWFkPiBx
dWFkczsKIH07CiAKLW5hbWVzcGFjZSBET01Ob2RlSGlnaGxpZ2h0ZXIgeworY2xhc3MgSW5zcGVj
dG9yT3ZlcmxheSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yT3Zl
cmxheT4gY3JlYXRlKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JPdmVybGF5KHBhZ2UsIGNsaWVu
dCkpOworICAgIH0KIAotdm9pZCBkcmF3SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYsIERvY3Vt
ZW50KiwgSGlnaGxpZ2h0RGF0YSopOwotdm9pZCBnZXRIaWdobGlnaHQoRG9jdW1lbnQqLCBIaWdo
bGlnaHREYXRhKiwgSGlnaGxpZ2h0Kik7Ci12b2lkIGRyYXdPdXRsaW5lKEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IExheW91dFJlY3QmLCBjb25zdCBDb2xvciYpOworICAgIHZvaWQgZHJhdyhHcmFw
aGljc0NvbnRleHQmKTsKKyAgICB2b2lkIGRyYXdPdXRsaW5lKEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IExheW91dFJlY3QmLCBjb25zdCBDb2xvciYpOworICAgIHZvaWQgZ2V0SGlnaGxpZ2h0KERv
Y3VtZW50KiwgSGlnaGxpZ2h0RGF0YSosIEhpZ2hsaWdodCopOwogCi19IC8vIG5hbWVzcGFjZSBE
T01Ob2RlSGlnaGxpZ2h0ZXIKKyAgICB2b2lkIHNldEhpZ2hsaWdodChEb2N1bWVudCosIEhpZ2hs
aWdodERhdGEqKTsKKyAgICB2b2lkIHNldFNob3VsZFNob3dQYXVzZVdhcm5pbmcoYm9vbCk7CisK
K3ByaXZhdGU6CisgICAgSW5zcGVjdG9yT3ZlcmxheShQYWdlKiwgSW5zcGVjdG9yQ2xpZW50Kik7
CisKKyAgICB2b2lkIHVwZGF0ZSgpOworICAgIHZvaWQgZHJhd0hpZ2hsaWdodChHcmFwaGljc0Nv
bnRleHQmKTsKKyAgICB2b2lkIGRyYXdQYXVzZVdhcm5pbmcoR3JhcGhpY3NDb250ZXh0Jik7CisK
KyAgICBQYWdlKiBtX3BhZ2U7CisgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKKyAgICBi
b29sIG1fc2hvdWxkU2hvd1BhdXNlV2FybmluZzsKKyAgICBEb2N1bWVudCogbV9kb2N1bWVudDsK
KyAgICBIaWdobGlnaHREYXRhKiBtX2hpZ2hsaWdodERhdGE7Cit9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmNwcAppbmRleCAwOTVlMWNjNTFiMzU0YThmOGUwODE0NmE3OWVmNzA4ZGI3Y2Q0OWNl
Li5jNjZkZTBjMjZiYTc1YTFkOWE1MjdhMDA3ZTRmNjVlZTViMjQ3NjUwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0zNCw2ICsz
NCw3IEBACiAKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAKKyNpbmNsdWRlICJE
T01Ob2RlSGlnaGxpZ2h0ZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIklkZW50aWZpZXJzRmFjdG9yeS5oIgpAQCAtNzgsNiAr
NzksNyBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBh
Z2UsIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQwogICAgIDogbV9pbnN0cnVtZW50aW5nQWdl
bnRzKGFkb3B0UHRyKG5ldyBJbnN0cnVtZW50aW5nQWdlbnRzKCkpKQogICAgICwgbV9pbmplY3Rl
ZFNjcmlwdE1hbmFnZXIoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjcmVhdGVGb3JQYWdlKCkpCiAg
ICAgLCBtX3N0YXRlKGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JTdGF0ZShpbnNwZWN0b3JDbGllbnQp
KSkKKyAgICAsIG1fb3ZlcmxheShJbnNwZWN0b3JPdmVybGF5OjpjcmVhdGUocGFnZSwgaW5zcGVj
dG9yQ2xpZW50KSkKICAgICAsIG1fcGFnZShwYWdlKQogICAgICwgbV9pbnNwZWN0b3JDbGllbnQo
aW5zcGVjdG9yQ2xpZW50KQogewpAQCAtODUsMTIgKzg3LDEyIEBAIEluc3BlY3RvckNvbnRyb2xs
ZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBpbnNw
ZWN0b3JDCiAgICAgbV9pbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50UHRyLmdldCgpOwog
ICAgIG1fYWdlbnRzLmFwcGVuZChpbnNwZWN0b3JBZ2VudFB0ci5yZWxlYXNlKCkpOwogCi0gICAg
T3duUHRyPEluc3BlY3RvclBhZ2VBZ2VudD4gcGFnZUFnZW50UHRyKEluc3BlY3RvclBhZ2VBZ2Vu
dDo6Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgcGFnZSwgbV9pbnNwZWN0b3JB
Z2VudCwgbV9zdGF0ZS5nZXQoKSwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuZ2V0KCksIGluc3Bl
Y3RvckNsaWVudCkpOworICAgIE93blB0cjxJbnNwZWN0b3JQYWdlQWdlbnQ+IHBhZ2VBZ2VudFB0
cihJbnNwZWN0b3JQYWdlQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCks
IHBhZ2UsIG1faW5zcGVjdG9yQWdlbnQsIG1fc3RhdGUuZ2V0KCksIG1faW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmdldCgpLCBpbnNwZWN0b3JDbGllbnQsIG1fb3ZlcmxheS5nZXQoKSkpOwogICAgIElu
c3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50ID0gcGFnZUFnZW50UHRyLmdldCgpOwogICAgIG1f
cGFnZUFnZW50ID0gcGFnZUFnZW50UHRyLmdldCgpOwogICAgIG1fYWdlbnRzLmFwcGVuZChwYWdl
QWdlbnRQdHIucmVsZWFzZSgpKTsKIAotICAgIE93blB0cjxJbnNwZWN0b3JET01BZ2VudD4gZG9t
QWdlbnRQdHIoSW5zcGVjdG9yRE9NQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMu
Z2V0KCksIHBhZ2VBZ2VudCwgaW5zcGVjdG9yQ2xpZW50LCBtX3N0YXRlLmdldCgpLCBtX2luamVj
dGVkU2NyaXB0TWFuYWdlci5nZXQoKSkpOworICAgIE93blB0cjxJbnNwZWN0b3JET01BZ2VudD4g
ZG9tQWdlbnRQdHIoSW5zcGVjdG9yRE9NQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2Vu
dHMuZ2V0KCksIHBhZ2VBZ2VudCwgbV9zdGF0ZS5nZXQoKSwgbV9pbmplY3RlZFNjcmlwdE1hbmFn
ZXIuZ2V0KCksIG1fb3ZlcmxheS5nZXQoKSkpOwogICAgIG1fZG9tQWdlbnQgPSBkb21BZ2VudFB0
ci5nZXQoKTsKICAgICBtX2FnZW50cy5hcHBlbmQoZG9tQWdlbnRQdHIucmVsZWFzZSgpKTsKIApA
QCAtMTMwLDcgKzEzMiw3IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xs
ZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDCiAgICAgbV9hZ2VudHMu
YXBwZW5kKGNvbnNvbGVBZ2VudFB0ci5yZWxlYXNlKCkpOwogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCi0gICAgT3duUHRyPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+IGRlYnVnZ2Vy
QWdlbnRQdHIoUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMu
Z2V0KCksIG1fc3RhdGUuZ2V0KCksIHBhZ2UsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgp
KSk7CisgICAgT3duUHRyPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+IGRlYnVnZ2VyQWdlbnRQdHIo
UGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1f
c3RhdGUuZ2V0KCksIHBhZ2UsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpLCBtX292ZXJs
YXkuZ2V0KCkpKTsKICAgICBtX2RlYnVnZ2VyQWdlbnQgPSBkZWJ1Z2dlckFnZW50UHRyLmdldCgp
OwogICAgIG1fYWdlbnRzLmFwcGVuZChkZWJ1Z2dlckFnZW50UHRyLnJlbGVhc2UoKSk7CiAKQEAg
LTI5NCw3ICsyOTYsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmV2YWx1YXRlRm9yVGVz
dEluRnJvbnRlbmQobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgcwogCiB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OmRyYXdIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAogewotICAgIG1fZG9tQWdlbnQtPmRyYXdIaWdobGlnaHQoY29udGV4dCk7CisgICAgbV9vdmVy
bGF5LT5kcmF3KGNvbnRleHQpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldEhp
Z2hsaWdodChIaWdobGlnaHQqIGhpZ2hsaWdodCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDQ3M2JiOGRlMjZmZWEwYWM3MDQ2
ZjY2NDk3OWFkZmNkNGVjYTViZWQuLjBiNTU4MmNkOTNmZDk5YmRlOGExMTEwMzEyZWIzOTE5YzIz
ZmY1MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuaApAQCAtNTEsNiArNTEsNyBAQCBjbGFzcyBJbnNwZWN0b3JET01BZ2VudDsKIGNsYXNzIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKIGNsYXNzIElu
c3BlY3RvckZyb250ZW5kQ2xpZW50OworY2xhc3MgSW5zcGVjdG9yT3ZlcmxheTsKIGNsYXNzIElu
c3BlY3RvclBhZ2VBZ2VudDsKIGNsYXNzIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ7CiBjbGFzcyBJ
bnNwZWN0b3JSZXNvdXJjZUFnZW50OwpAQCAtMTE5LDYgKzEyMCw3IEBAIHByaXZhdGU6CiAgICAg
T3duUHRyPEluc3RydW1lbnRpbmdBZ2VudHM+IG1faW5zdHJ1bWVudGluZ0FnZW50czsKICAgICBP
d25QdHI8SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyPiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKICAg
ICBPd25QdHI8SW5zcGVjdG9yU3RhdGU+IG1fc3RhdGU7CisgICAgT3duUHRyPEluc3BlY3Rvck92
ZXJsYXk+IG1fb3ZlcmxheTsKIAogICAgIEluc3BlY3RvckFnZW50KiBtX2luc3BlY3RvckFnZW50
OwogICAgIEluc3BlY3RvckRPTUFnZW50KiBtX2RvbUFnZW50OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggOTA3OTU4OWU1MWNlOGYwOGU1
MGUyMDZlNDlhMTMyNmJlOTVjMzAxMi4uY2Y1MmFhZTMxODk5ZTM1NDFiYzk2ZGJiZTIwNzBmZDQx
NTNhMTZhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuY3BwCkBAIC02Niw3ICs2Niw2IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2lu
Y2x1ZGUgIklkZW50aWZpZXJzRmFjdG9yeS5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0TWFu
YWdlci5oIgotI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
ckZyb250ZW5kLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySGlzdG9yeS5oIgogI2luY2x1ZGUgIklu
c3BlY3RvclBhZ2VBZ2VudC5oIgpAQCAtMTk0LDExICsxOTMsMTEgQEAgU3RyaW5nIEluc3BlY3Rv
ckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKGNvbnN0IEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHJl
dHVybiAiIjsKIH0KIAotSW5zcGVjdG9yRE9NQWdlbnQ6Okluc3BlY3RvckRPTUFnZW50KEluc3Ry
dW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclBhZ2VBZ2VudCog
cGFnZUFnZW50LCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCwgSW5zcGVjdG9yU3RhdGUqIGluc3Bl
Y3RvclN0YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlcikK
K0luc3BlY3RvckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2VudChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgSW5z
cGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVj
dGVkU2NyaXB0TWFuYWdlciwgSW5zcGVjdG9yT3ZlcmxheSogb3ZlcmxheSkKICAgICA6IEluc3Bl
Y3RvckJhc2VBZ2VudDxJbnNwZWN0b3JET01BZ2VudD4oIkRPTSIsIGluc3RydW1lbnRpbmdBZ2Vu
dHMsIGluc3BlY3RvclN0YXRlKQogICAgICwgbV9wYWdlQWdlbnQocGFnZUFnZW50KQotICAgICwg
bV9jbGllbnQoY2xpZW50KQogICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoaW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyKQorICAgICwgbV9vdmVybGF5KG92ZXJsYXkpCiAgICAgLCBtX2Zyb250ZW5k
KDApCiAgICAgLCBtX2RvbUxpc3RlbmVyKDApCiAgICAgLCBtX2xhc3ROb2RlSWQoMSkKQEAgLTEw
MzYsNyArMTAzNSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodCgpCiB7CiAg
ICAgLy8gVGhpcyBtZXRob2QgcmVxdWlyZXMgbV9oaWdobGlnaHREYXRhIHRvIGhhdmUgYmVlbiBm
aWxsZWQgaW4gYnkgaXRzIGNsaWVudC4KICAgICBBU1NFUlQobV9oaWdobGlnaHREYXRhKTsKLSAg
ICBtX2NsaWVudC0+aGlnaGxpZ2h0KCk7CisgICAgbV9vdmVybGF5LT5zZXRIaWdobGlnaHQobV9k
b2N1bWVudC5nZXQoKSwgbV9oaWdobGlnaHREYXRhLmdldCgpKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6aGlnaGxpZ2h0UmVjdChFcnJvclN0cmluZyosIGludCB4LCBpbnQgeSwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogY29sb3Is
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBvdXRsaW5lQ29sb3IpCkBAIC0xMDQ1LDcg
KzEwNDQsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRSZWN0KEVycm9yU3Ry
aW5nKiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludAogICAgIG1faGlnaGxpZ2h0RGF0YS0+
cmVjdCA9IGFkb3B0UHRyKG5ldyBJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKICAgICBt
X2hpZ2hsaWdodERhdGEtPmNvbnRlbnQgPSBwYXJzZUNvbG9yKGNvbG9yKTsKICAgICBtX2hpZ2hs
aWdodERhdGEtPmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb2xvcihvdXRsaW5lQ29sb3IpOwotICAg
IG1fY2xpZW50LT5oaWdobGlnaHQoKTsKKyAgICBoaWdobGlnaHQoKTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Tm9kZSgKQEAgLTEwODQsNyArMTA4Myw3IEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmhpZGVIaWdobGlnaHQoRXJyb3JTdHJpbmcqKQogICAgICAgICBt
X2hpZ2hsaWdodERhdGEtPm5vZGUuY2xlYXIoKTsKICAgICAgICAgbV9oaWdobGlnaHREYXRhLT5y
ZWN0LmNsZWFyKCk7CiAgICAgfQotICAgIG1fY2xpZW50LT5oaWRlSGlnaGxpZ2h0KCk7CisgICAg
aGlnaGxpZ2h0KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Om1vdmVUbyhFcnJvclN0
cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGludCB0YXJnZXRFbGVtZW50SWQsIGNvbnN0
IGludCogY29uc3QgYW5jaG9yTm9kZUlkLCBpbnQqIG5ld05vZGVJZCkKQEAgLTE1OTksMjAgKzE1
OTgsMTIgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJ
bnNwZWN0b3JET01BZ2VudDo6cmVzb2x2ZU5vZGUoTm8KICAgICByZXR1cm4gaW5qZWN0ZWRTY3Jp
cHQud3JhcE5vZGUobm9kZSwgb2JqZWN0R3JvdXApOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpkcmF3SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAg
ICBpZiAoIW1faGlnaGxpZ2h0RGF0YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRE9NTm9kZUhp
Z2hsaWdodGVyOjpkcmF3SGlnaGxpZ2h0KGNvbnRleHQsIG1faGlnaGxpZ2h0RGF0YS0+bm9kZSA/
IG1faGlnaGxpZ2h0RGF0YS0+bm9kZS0+ZG9jdW1lbnQoKSA6IG1fZG9jdW1lbnQuZ2V0KCksIG1f
aGlnaGxpZ2h0RGF0YS5nZXQoKSk7Ci19Ci0KIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEhp
Z2hsaWdodChIaWdobGlnaHQqIGhpZ2hsaWdodCkgY29uc3QKIHsKICAgICBpZiAoIW1faGlnaGxp
Z2h0RGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRE9NTm9kZUhpZ2hsaWdodGVyOjpnZXRI
aWdobGlnaHQobV9oaWdobGlnaHREYXRhLT5ub2RlID8gbV9oaWdobGlnaHREYXRhLT5ub2RlLT5k
b2N1bWVudCgpIDogbV9kb2N1bWVudC5nZXQoKSwgbV9oaWdobGlnaHREYXRhLmdldCgpLCBoaWdo
bGlnaHQpOworICAgIG1fb3ZlcmxheS0+Z2V0SGlnaGxpZ2h0KG1faGlnaGxpZ2h0RGF0YS0+bm9k
ZSA/IG1faGlnaGxpZ2h0RGF0YS0+bm9kZS0+ZG9jdW1lbnQoKSA6IG1fZG9jdW1lbnQuZ2V0KCks
IG1faGlnaGxpZ2h0RGF0YS5nZXQoKSwgaGlnaGxpZ2h0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaApp
bmRleCBiMDVhYjU3MGQ5ZmQxYjA0ODcwNmEzOTNhMjQ2NjU5N2I0OTYzOWJmLi4zYjNmNTliZTc2
ODg2OWIzYTgwYzE2N2JlOWJkMjYxMjA1MWE3MjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaApAQCAtNTYsOSArNTYsOSBAQCBjbGFzcyBEb2N1bWVu
dDsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBFdmVudDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsK
LWNsYXNzIEluc3BlY3RvckNsaWVudDsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kOwogY2xhc3Mg
SW5zcGVjdG9ySGlzdG9yeTsKK2NsYXNzIEluc3BlY3Rvck92ZXJsYXk7CiBjbGFzcyBJbnNwZWN0
b3JQYWdlQWdlbnQ7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgSGl0VGVzdFJlc3VsdDsKQEAgLTEw
Myw5ICsxMDMsOSBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRNb2RpZnlET01B
dHRyKEVsZW1lbnQqKSA9IDA7CiAgICAgfTsKIAotICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3Bl
Y3RvckRPTUFnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cywgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIEluc3BlY3RvckNsaWVudCogY2xp
ZW50LCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdl
ciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3Rv
ckRPTUFnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cywgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0
b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIElu
c3BlY3Rvck92ZXJsYXkqIG92ZXJsYXkpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IEluc3BlY3RvckRPTUFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIHBhZ2VBZ2VudCwgY2xp
ZW50LCBpbnNwZWN0b3JTdGF0ZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9yRE9NQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywg
cGFnZUFnZW50LCBpbnNwZWN0b3JTdGF0ZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBvdmVybGF5
KSk7CiAgICAgfQogCiAgICAgc3RhdGljIFN0cmluZyB0b0Vycm9yU3RyaW5nKGNvbnN0IEV4Y2Vw
dGlvbkNvZGUmKTsKQEAgLTE4NSw3ICsxODUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnNwZWN0
KE5vZGUqKTsKICAgICB2b2lkIGZvY3VzTm9kZSgpOwogCi0gICAgdm9pZCBkcmF3SGlnaGxpZ2h0
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogICAgIHZvaWQgZ2V0SGlnaGxpZ2h0KEhpZ2hsaWdo
dCopIGNvbnN0OwogCiAgICAgSW5zcGVjdG9ySGlzdG9yeSogaGlzdG9yeSgpIHsgcmV0dXJuIG1f
aGlzdG9yeS5nZXQoKTsgfQpAQCAtMjA1LDcgKzIwNCw3IEBAIHB1YmxpYzoKICAgICBJbnNwZWN0
b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCgpIHsgcmV0dXJuIG1fcGFnZUFnZW50OyB9CiAKIHByaXZh
dGU6Ci0gICAgSW5zcGVjdG9yRE9NQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3Rv
clBhZ2VBZ2VudCosIEluc3BlY3RvckNsaWVudCosIEluc3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyKik7CisgICAgSW5zcGVjdG9yRE9NQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50
cyosIEluc3BlY3RvclBhZ2VBZ2VudCosIEluc3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyKiwgSW5zcGVjdG9yT3ZlcmxheSopOwogCiAgICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JO
b2RlKGJvb2wgZW5hYmxlZCwgSW5zcGVjdG9yT2JqZWN0KiBoaWdobGlnaHRDb25maWcpOwogICAg
IGJvb2wgc2V0SGlnaGxpZ2h0RGF0YUZyb21Db25maWcoSW5zcGVjdG9yT2JqZWN0KiBoaWdobGln
aHRDb25maWcpOwpAQCAtMjQxLDggKzI0MCw4IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIElu
c3BlY3RvclBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7Ci0gICAgSW5zcGVjdG9yQ2xpZW50KiBtX2Ns
aWVudDsKICAgICBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
OworICAgIEluc3BlY3Rvck92ZXJsYXkqIG1fb3ZlcmxheTsKICAgICBJbnNwZWN0b3JGcm9udGVu
ZDo6RE9NKiBtX2Zyb250ZW5kOwogICAgIERPTUxpc3RlbmVyKiBtX2RvbUxpc3RlbmVyOwogICAg
IE5vZGVUb0lkTWFwIG1fZG9jdW1lbnROb2RlVG9JZE1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCAxMTgwN2EzZjll
ODc5ODQwZGVhNjAzYjM2NjNlMjA5YWZjZWQ3MmM4Li44NTg5MTNmMTU5NWZjNjgxN2VhNGYxMGQy
ODhjYmYyYWVjNDI2ZGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSW5z
cGVjdG9yRGVidWdnZXJBZ2VudC5oIgogCiAjaW5jbHVkZSAiQ29udGVudFNlYXJjaFV0aWxzLmgi
CisjaW5jbHVkZSAiRE9NTm9kZUhpZ2hsaWdodGVyLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3Jp
cHQuaCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdE1hbmFnZXIuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JGcm9udGVuZC5oIgpAQCAtNjAsMTAgKzYxLDExIEBAIHN0YXRpYyBjb25zdCBjaGFyIHBh
dXNlT25FeGNlcHRpb25zU3RhdGVbXSA9ICJwYXVzZU9uRXhjZXB0aW9uc1N0YXRlIjsKIAogY29u
c3QgY2hhciogSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YmFja3RyYWNlT2JqZWN0R3JvdXAgPSAi
YmFja3RyYWNlLW9iamVjdC1ncm91cCI7CiAKLUluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cywgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIq
IGluamVjdGVkU2NyaXB0TWFuYWdlcikKK0luc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywg
SW5zcGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGlu
amVjdGVkU2NyaXB0TWFuYWdlciwgSW5zcGVjdG9yT3ZlcmxheSogb3ZlcmxheSkKICAgICA6IElu
c3BlY3RvckJhc2VBZ2VudDxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50PigiRGVidWdnZXIiLCBpbnN0
cnVtZW50aW5nQWdlbnRzLCBpbnNwZWN0b3JTdGF0ZSkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyKGluamVjdGVkU2NyaXB0TWFuYWdlcikKICAgICAsIG1fZnJvbnRlbmQoMCkKKyAgICAs
IG1fb3ZlcmxheShvdmVybGF5KQogICAgICwgbV9wYXVzZWRTY3JpcHRTdGF0ZSgwKQogICAgICwg
bV9qYXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQoZmFsc2UpCiAgICAgLCBtX2xpc3RlbmVyKDApCkBA
IC0xMDMsNiArMTA1LDggQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKCkK
IAogICAgIGlmIChtX2xpc3RlbmVyKQogICAgICAgICBtX2xpc3RlbmVyLT5kZWJ1Z2dlcldhc0Rp
c2FibGVkKCk7CisgICAgaWYgKG1fb3ZlcmxheSkKKyAgICAgICAgbV9vdmVybGF5LT5zZXRTaG91
bGRTaG93UGF1c2VXYXJuaW5nKGZhbHNlKTsKIH0KIAogYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjplbmFibGVkKCkKQEAgLTY1Nyw2ICs2NjEsOCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmRpZFBhdXNlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgU2NyaXB0VmFs
dQogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKG1fb3ZlcmxheSkKKyAgICAgICAgbV9vdmVy
bGF5LT5zZXRTaG91bGRTaG93UGF1c2VXYXJuaW5nKHRydWUpOwogICAgIG1fZnJvbnRlbmQtPnBh
dXNlZChjdXJyZW50Q2FsbEZyYW1lcygpLCBtX2JyZWFrUmVhc29uLCBtX2JyZWFrQXV4RGF0YSk7
CiAgICAgbV9qYXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQgPSBmYWxzZTsKIApAQCAtNjcxLDYgKzY3
Nyw4IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ29udGludWUoKQogICAgIG1f
cGF1c2VkU2NyaXB0U3RhdGUgPSAwOwogICAgIG1fY3VycmVudENhbGxTdGFjayA9IFNjcmlwdFZh
bHVlKCk7CiAgICAgY2xlYXJCcmVha0RldGFpbHMoKTsKKyAgICBpZiAobV9vdmVybGF5KQorICAg
ICAgICBtX292ZXJsYXktPnNldFNob3VsZFNob3dQYXVzZVdhcm5pbmcoZmFsc2UpOwogICAgIG1f
ZnJvbnRlbmQtPnJlc3VtZWQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKaW5kZXggMDljOTdkMTk1M2U0YjliMDAxNjFmODc0
ZjQ1MzFmYmRlYzdkYjZjZC4uZTc4ZTg4ZjlkNjJiYThmNGJlZjM1ODZkZTNkZmJiNDVmMDk3ZDc4
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJB
Z2VudC5oCkBAIC01MCw2ICs1MCw3IEBAIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKIGNs
YXNzIEluc3BlY3RvckZyb250ZW5kOwogY2xhc3MgSW5zcGVjdG9yQXJyYXk7CiBjbGFzcyBJbnNw
ZWN0b3JPYmplY3Q7CitjbGFzcyBJbnNwZWN0b3JPdmVybGF5OwogY2xhc3MgSW5zcGVjdG9yU3Rh
dGU7CiBjbGFzcyBJbnNwZWN0b3JWYWx1ZTsKIGNsYXNzIEluc3RydW1lbnRpbmdBZ2VudHM7CkBA
IC0xMjQsNyArMTI1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU2NyaXB0RGVidWdTZXJ2ZXIm
IHNjcmlwdERlYnVnU2VydmVyKCkgPSAwOwogCiBwcm90ZWN0ZWQ6Ci0gICAgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yU3RhdGUqLCBJbmplY3Rl
ZFNjcmlwdE1hbmFnZXIqKTsKKyAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KEluc3RydW1lbnRp
bmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciosIEluc3Bl
Y3Rvck92ZXJsYXkqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzdGFydExpc3RlbmluZ1NjcmlwdERl
YnVnU2VydmVyKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzdG9wTGlzdGVuaW5nU2NyaXB0RGVi
dWdTZXJ2ZXIoKSA9IDA7CkBAIC0xNTksNiArMTYwLDcgQEAgcHJpdmF0ZToKIAogICAgIEluamVj
dGVkU2NyaXB0TWFuYWdlciogbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CiAgICAgSW5zcGVjdG9y
RnJvbnRlbmQ6OkRlYnVnZ2VyKiBtX2Zyb250ZW5kOworICAgIEluc3BlY3Rvck92ZXJsYXkqIG1f
b3ZlcmxheTsKICAgICBTY3JpcHRTdGF0ZSogbV9wYXVzZWRTY3JpcHRTdGF0ZTsKICAgICBTY3Jp
cHRWYWx1ZSBtX2N1cnJlbnRDYWxsU3RhY2s7CiAgICAgU2NyaXB0c01hcCBtX3NjcmlwdHM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4
IGVmMzQ1MzdmMGUxMThmYjVlMGNiODhjYTJmYWI1ZTNlZjYwYTM1NzcuLjZhMGE0MDJhYjFkMDU5
Mjg3NjExZjAyNjY1NmRjNTY4YmEyMzBkYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAi
RG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93
bmVyRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIklkZW50aWZp
ZXJzRmFjdG9yeS5oIgpAQCAtMjIzLDkgKzIyNCw5IEBAIGJvb2wgSW5zcGVjdG9yUGFnZUFnZW50
OjpzaGFyZWRCdWZmZXJDb250ZW50KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIsIGNv
CiAgICAgcmV0dXJuIGRlY29kZVNoYXJlZEJ1ZmZlcihidWZmZXIsIHRleHRFbmNvZGluZ05hbWUs
IHJlc3VsdCk7CiB9CiAKLVBhc3NPd25QdHI8SW5zcGVjdG9yUGFnZUFnZW50PiBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
LCBQYWdlKiBwYWdlLCBJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIEluc3BlY3RvclN0
YXRlKiBzdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIs
IEluc3BlY3RvckNsaWVudCogY2xpZW50KQorUGFzc093blB0cjxJbnNwZWN0b3JQYWdlQWdlbnQ+
IEluc3BlY3RvclBhZ2VBZ2VudDo6Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1l
bnRpbmdBZ2VudHMsIFBhZ2UqIHBhZ2UsIEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwg
SW5zcGVjdG9yU3RhdGUqIHN0YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2Ny
aXB0TWFuYWdlciwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQsIEluc3BlY3Rvck92ZXJsYXkqIG92
ZXJsYXkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JQYWdlQWdlbnQoaW5z
dHJ1bWVudGluZ0FnZW50cywgcGFnZSwgaW5zcGVjdG9yQWdlbnQsIHN0YXRlLCBpbmplY3RlZFNj
cmlwdE1hbmFnZXIsIGNsaWVudCkpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9y
UGFnZUFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIHBhZ2UsIGluc3BlY3RvckFnZW50LCBzdGF0
ZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBjbGllbnQsIG92ZXJsYXkpKTsKIH0KIAogLy8gc3Rh
dGljCkBAIC0zMDgsMTMgKzMwOSwxNCBAQCBUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBl
OjpFbnVtIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlSnNvbgogICAgIHJl
dHVybiByZXNvdXJjZVR5cGVKc29uKGNhY2hlZFJlc291cmNlVHlwZShjYWNoZWRSZXNvdXJjZSkp
OwogfQogCi1JbnNwZWN0b3JQYWdlQWdlbnQ6Okluc3BlY3RvclBhZ2VBZ2VudChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYWdlKiBwYWdlLCBJbnNwZWN0b3JBZ2Vu
dCogaW5zcGVjdG9yQWdlbnQsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIEluc3BlY3RvckNsaWVudCog
Y2xpZW50KQorSW5zcGVjdG9yUGFnZUFnZW50OjpJbnNwZWN0b3JQYWdlQWdlbnQoSW5zdHJ1bWVu
dGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgUGFnZSogcGFnZSwgSW5zcGVjdG9yQWdl
bnQqIGluc3BlY3RvckFnZW50LCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIEluamVj
dGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JDbGllbnQq
IGNsaWVudCwgSW5zcGVjdG9yT3ZlcmxheSogb3ZlcmxheSkKICAgICA6IEluc3BlY3RvckJhc2VB
Z2VudDxJbnNwZWN0b3JQYWdlQWdlbnQ+KCJQYWdlIiwgaW5zdHJ1bWVudGluZ0FnZW50cywgaW5z
cGVjdG9yU3RhdGUpCiAgICAgLCBtX3BhZ2UocGFnZSkKICAgICAsIG1faW5zcGVjdG9yQWdlbnQo
aW5zcGVjdG9yQWdlbnQpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlcihpbmplY3RlZFNj
cmlwdE1hbmFnZXIpCiAgICAgLCBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX2Zyb250ZW5kKDAp
CisgICAgLCBtX292ZXJsYXkob3ZlcmxheSkKICAgICAsIG1fbGFzdFNjcmlwdElkZW50aWZpZXIo
MCkKICAgICAsIG1fbGFzdFBhaW50Q29udGV4dCgwKQogICAgICwgbV9kaWRMb2FkRXZlbnRGaXJl
KGZhbHNlKQpAQCAtODg1LDcgKzg4Nyw3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkaWRQ
YWludCgpCiAgICAgICAgIENvbG9yKDAsIDAsIDB4RkYsIDB4M0YpLAogICAgIH07CiAKLSAgICBE
T01Ob2RlSGlnaGxpZ2h0ZXI6OmRyYXdPdXRsaW5lKCptX2xhc3RQYWludENvbnRleHQsIG1fbGFz
dFBhaW50UmVjdCwgY29sb3JzW2NvbG9yU2VsZWN0b3IrKyAlIFdURl9BUlJBWV9MRU5HVEgoY29s
b3JzKV0pOworICAgIG1fb3ZlcmxheS0+ZHJhd091dGxpbmUoKm1fbGFzdFBhaW50Q29udGV4dCwg
bV9sYXN0UGFpbnRSZWN0LCBjb2xvcnNbY29sb3JTZWxlY3RvcisrICUgV1RGX0FSUkFZX0xFTkdU
SChjb2xvcnMpXSk7CiAKICAgICBtX2xhc3RQYWludENvbnRleHQgPSAwOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCmluZGV4IDk2NGJjODVmYzYz
NjQ4YWYzOGYyZGMxMmZjODNmNzk3MWI5M2E2NjMuLjNmNTQ1OTgxMDQ3OTAxYjY1YmFkNWY3MTU4
NjYwNWM3ODNjNWUxZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JQYWdlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UGFnZUFnZW50LmgKQEAgLTQ4LDExICs0OCwxMyBAQCBjbGFzcyBET01XcmFwcGVyV29ybGQ7CiBj
bGFzcyBEb2N1bWVudExvYWRlcjsKIGNsYXNzIEZyYW1lOwogY2xhc3MgRnJvbnRlbmQ7CitjbGFz
cyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBJbmplY3RlZFNjcmlwdE1hbmFnZXI7CiBjbGFzcyBJ
bnNwZWN0b3JBZ2VudDsKIGNsYXNzIEluc3BlY3RvckFycmF5OwogY2xhc3MgSW5zcGVjdG9yQ2xp
ZW50OwogY2xhc3MgSW5zcGVjdG9yT2JqZWN0OworY2xhc3MgSW5zcGVjdG9yT3ZlcmxheTsKIGNs
YXNzIEluc3BlY3RvclN0YXRlOwogY2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsKIGNsYXNzIEtV
Ukw7CkBAIC03Nyw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICAgICAgT3RoZXJSZXNvdXJjZQogICAg
IH07CiAKLSAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JQYWdlQWdlbnQ+IGNyZWF0ZShJ
bnN0cnVtZW50aW5nQWdlbnRzKiwgUGFnZSosIEluc3BlY3RvckFnZW50KiwgSW5zcGVjdG9yU3Rh
dGUqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JDbGllbnQqKTsKKyAgICBzdGF0
aWMgUGFzc093blB0cjxJbnNwZWN0b3JQYWdlQWdlbnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdl
bnRzKiwgUGFnZSosIEluc3BlY3RvckFnZW50KiwgSW5zcGVjdG9yU3RhdGUqLCBJbmplY3RlZFNj
cmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JDbGllbnQqLCBJbnNwZWN0b3JPdmVybGF5Kik7CiAKICAg
ICBzdGF0aWMgYm9vbCBjYWNoZWRSZXNvdXJjZUNvbnRlbnQoQ2FjaGVkUmVzb3VyY2UqLCBTdHJp
bmcqIHJlc3VsdCwgYm9vbCogYmFzZTY0RW5jb2RlZCk7CiAgICAgc3RhdGljIGJvb2wgc2hhcmVk
QnVmZmVyQ29udGVudChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIGNvbnN0IFN0cmluZyYgdGV4
dEVuY29kaW5nTmFtZSwgYm9vbCB3aXRoQmFzZTY0RW5jb2RlLCBTdHJpbmcqIHJlc3VsdCk7CkBA
IC0xMzcsNyArMTM5LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBEb2N1bWVudExvYWRlciogYXNz
ZXJ0RG9jdW1lbnRMb2FkZXIoRXJyb3JTdHJpbmcqLCBGcmFtZSopOwogCiBwcml2YXRlOgotICAg
IEluc3BlY3RvclBhZ2VBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgUGFnZSosIEluc3BlY3Rv
ckFnZW50KiwgSW5zcGVjdG9yU3RhdGUqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0
b3JDbGllbnQqKTsKKyAgICBJbnNwZWN0b3JQYWdlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyos
IFBhZ2UqLCBJbnNwZWN0b3JBZ2VudCosIEluc3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyKiwgSW5zcGVjdG9yQ2xpZW50KiwgSW5zcGVjdG9yT3ZlcmxheSopOwogICAgIHZvaWQg
dXBkYXRlVmlld01ldHJpY3MoaW50LCBpbnQsIGRvdWJsZSwgYm9vbCk7CiAKICAgICBQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZT4gYnVpbGRPYmplY3RGb3JGcmFtZShGcmFtZSop
OwpAQCAtMTQ3LDYgKzE0OSw3IEBAIHByaXZhdGU6CiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
KiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKICAgICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50
OwogICAgIEluc3BlY3RvckZyb250ZW5kOjpQYWdlKiBtX2Zyb250ZW5kOworICAgIEluc3BlY3Rv
ck92ZXJsYXkqIG1fb3ZlcmxheTsKICAgICBsb25nIG1fbGFzdFNjcmlwdElkZW50aWZpZXI7CiAg
ICAgU3RyaW5nIG1fcGVuZGluZ1NjcmlwdFRvRXZhbHVhdGVPbkxvYWRPbmNlOwogICAgIFN0cmlu
ZyBtX3NjcmlwdFRvRXZhbHVhdGVPbkxvYWRPbmNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggYTU4NmVkZjNmZDQxMDhjOWQwNzkyYzBi
ZGZlYmUxZTgzZmFmZjg2YS4uYzFlNjI3NTNkMjE5ZGFhOTYwMDc5MGI2NWJiNzE4Yzg0M2Y4Y2Y5
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3Bw
CkBAIC00MCwxMyArNDAsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRy
PFBhZ2VEZWJ1Z2dlckFnZW50PiBQYWdlRGVidWdnZXJBZ2VudDo6Y3JlYXRlKEluc3RydW1lbnRp
bmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JT
dGF0ZSwgUGFnZSogaW5zcGVjdGVkUGFnZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3Rl
ZFNjcmlwdE1hbmFnZXIpCitQYXNzT3duUHRyPFBhZ2VEZWJ1Z2dlckFnZW50PiBQYWdlRGVidWdn
ZXJBZ2VudDo6Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMs
IEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgUGFnZSogaW5zcGVjdGVkUGFnZSwgSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIEluc3BlY3Rvck92ZXJs
YXkqIG92ZXJsYXkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQYWdlRGVidWdnZXJBZ2Vu
dChpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnNwZWN0b3JTdGF0ZSwgaW5zcGVjdGVkUGFnZSwgaW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQYWdlRGVidWdn
ZXJBZ2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnNwZWN0b3JTdGF0ZSwgaW5zcGVjdGVkUGFn
ZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBvdmVybGF5KSk7CiB9CiAKLVBhZ2VEZWJ1Z2dlckFn
ZW50OjpQYWdlRGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGluc3BlY3RlZFBh
Z2UsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQotICAgIDog
SW5zcGVjdG9yRGVidWdnZXJBZ2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnNwZWN0b3JTdGF0
ZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQorUGFnZURlYnVnZ2VyQWdlbnQ6OlBhZ2VEZWJ1Z2dl
ckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3Rv
clN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgUGFnZSogaW5zcGVjdGVkUGFnZSwgSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIEluc3BlY3Rvck92ZXJsYXkqIG92ZXJs
YXkpCisgICAgOiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIGlu
c3BlY3RvclN0YXRlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIG92ZXJsYXkpCiAgICAgLCBtX2lu
c3BlY3RlZFBhZ2UoaW5zcGVjdGVkUGFnZSkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmgKaW5kZXggOWRiZDUxM2Y5ZjFhMjhiYjk4NDI0OTEzNTc4
MTQ4NmM3M2MzMjYxOC4uMDZmMTc3NzgxODdjYTAzMTE3YWVhMGE0ODY2MmM0NjJmMDU1MWE1NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmgKQEAgLTQ0
LDcgKzQ0LDcgQEAgY2xhc3MgUGFnZURlYnVnZ2VyQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFnZURlYnVnZ2VyQWdlbnQp
OwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
T3duUHRyPFBhZ2VEZWJ1Z2dlckFnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyosIElu
c3BlY3RvclN0YXRlKiwgUGFnZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciopOworICAgIHN0YXRp
YyBQYXNzT3duUHRyPFBhZ2VEZWJ1Z2dlckFnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50
cyosIEluc3BlY3RvclN0YXRlKiwgUGFnZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciosIEluc3Bl
Y3Rvck92ZXJsYXkqKTsKICAgICB2aXJ0dWFsIH5QYWdlRGVidWdnZXJBZ2VudCgpOwogCiBwcml2
YXRlOgpAQCAtNTYsNyArNTYsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBJbmplY3RlZFNj
cmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcqLCBjb25zdCBpbnQqIGV4ZWN1
dGlvbkNvbnRleHRJZCk7CiAKLSAgICBQYWdlRGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdl
bnRzKiwgSW5zcGVjdG9yU3RhdGUqLCBQYWdlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKik7Cisg
ICAgUGFnZURlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclN0YXRl
KiwgUGFnZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3Rvck92ZXJsYXkqKTsKICAg
ICBQYWdlKiBjb25zdCBtX2luc3BlY3RlZFBhZ2U7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvV29ya2VyRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggYzc1YWY0YTZlNGMwZjRl
OTk2ZjM1ZDhhM2E3ODkxNjE1MzE3MTYyZi4uMTU4OWZjMzBmNDU2NGQ5M2UyN2JmMjdlYWI1NTc1
ZDRiNjA2YTUxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckRl
YnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJEZWJ1
Z2dlckFnZW50LmNwcApAQCAtODYsNyArODYsNyBAQCBQYXNzT3duUHRyPFdvcmtlckRlYnVnZ2Vy
QWdlbnQ+IFdvcmtlckRlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKgog
fQogCiBXb3JrZXJEZWJ1Z2dlckFnZW50OjpXb3JrZXJEZWJ1Z2dlckFnZW50KEluc3RydW1lbnRp
bmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JT
dGF0ZSwgV29ya2VyQ29udGV4dCogaW5zcGVjdGVkV29ya2VyQ29udGV4dCwgSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCi0gICAgOiBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlLCBpbmplY3RlZFNjcmlw
dE1hbmFnZXIpCisgICAgOiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KGluc3RydW1lbnRpbmdBZ2Vu
dHMsIGluc3BlY3RvclN0YXRlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIDApCiAgICAgLCBtX3Nj
cmlwdERlYnVnU2VydmVyKGluc3BlY3RlZFdvcmtlckNvbnRleHQpCiAgICAgLCBtX2luc3BlY3Rl
ZFdvcmtlckNvbnRleHQoaW5zcGVjdGVkV29ya2VyQ29udGV4dCkKIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152744</attachid>
            <date>2012-07-17 05:29:29 -0700</date>
            <delta_ts>2012-07-17 10:46:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90880-20120717162927.patch</filename>
            <type>text/plain</type>
            <size>29223</size>
            <attacher name="Sergey Rogulenko">rogulenko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyODMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTFjMzNhZjAyNzQ3ODdk
NGJiMzJjZWM1YWQ1OTExMDdhNTY1NmNhMS4uMTFiNjNjZTZlMDJiZDczMTE5ZDY4MWVlZjQ4YzJh
NzM1OGNjNWZiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDEyLTA3LTE3ICBTZXJn
ZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogYWRkaW5nIHBhdXNlIGljb24gZm9yIEphdmFTY3JpcHQgZGVidWdnaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg4MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yZWQgRE9NTm9k
ZUhpZ2hsaWdodGVyIGludG8gSW5zcGVjdG9yT3ZlcmxheSBjbGFzcyBhbmQgYWRkZWQgYSBmZWF0
dXJlIHRvIHNob3cgYSAicGF1c2UiIHNjcmVlbiB3aGVuCisgICAgICAgIHRoZSBKYXZhc2NyaXB0
IGRlYnVnZ2VyIGlzIHBhdXNlZC4KKworICAgICAgICAqIGluc3BlY3Rvci9ET01Ob2RlSGlnaGxp
Z2h0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6SW5zcGVjdG9y
T3ZlcmxheSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpwYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3T3V0bGluZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpnZXRIaWdobGlnaHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6c2V0SGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6c2V0SXNQYXVzZWRJbkRlYnVn
Z2VyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OnVwZGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3SGlnaGxpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdJc1BhdXNlZEluRGVidWdnZXIpOgorICAg
ICAgICAqIGluc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoSW5zcGVjdG9yT3ZlcmxheSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JPdmVybGF5OjpjcmVhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3Rv
ckNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZHJh
d0hpZ2hsaWdodCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2VudCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRPTUFnZW50OjpoaWdobGlnaHRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRPTUFnZW50OjpoaWRlSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRP
TUFnZW50OjpnZXRIaWdobGlnaHQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JE
T01BZ2VudDo6Y3JlYXRlKToKKyAgICAgICAgKEluc3BlY3RvckRPTUFnZW50KToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAoSW5zcGVjdG9y
RGVidWdnZXJBZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6Okluc3BlY3RvclBhZ2VBZ2VudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZFBhaW50KToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlRGVi
dWdnZXJBZ2VudDo6UGFnZURlYnVnZ2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZURl
YnVnZ2VyQWdlbnQ6OmRpc2FibGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlRGVidWdnZXJBZ2VudDo6ZGlkUGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZURlYnVnZ2VyQWdlbnQ6OmRpZENvbnRpbnVlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvUGFnZURl
YnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUGFnZURlYnVnZ2Vy
QWdlbnQpOgorCiAyMDEyLTA3LTE3ICBLd2FuZyBZdWwgU2VvICA8c2t5dWxAY29tcGFueTEwMC5u
ZXQ+CiAKICAgICAgICAgImluIGJvZHkiIGluc2VydGlvbiBtb2RlLCAiYW55IG90aGVyIGVuZCB0
YWciIHN0ZXAgMi4xIGlzIHVwZGF0ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RP
TU5vZGVIaWdobGlnaHRlci5jcHAKaW5kZXggZTRjNzEwMGQ2MWM1MjA4M2YzODI3MWYyYTcyNzU0
NzU0NjhlZGIyYy4uYzVhZWRkNzc0NWViYWU5MjljMmI1ZmYyMzM2ZDg4NjU1NmZmYmUzZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAKQEAg
LTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiSW5zcGVj
dG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNs
dWRlICJSYW5nZS5oIgpAQCAtNDg1LDIxICs0ODYsMzAgQEAgc3RhdGljIHZvaWQgZ2V0T3JEcmF3
UmVjdEhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIERvY3VtZW50KiBkb2N1bWVu
dCwKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLW5hbWVzcGFjZSBET01Ob2RlSGlnaGxp
Z2h0ZXIgeworSW5zcGVjdG9yT3ZlcmxheTo6SW5zcGVjdG9yT3ZlcmxheShQYWdlKiBwYWdlLCBJ
bnNwZWN0b3JDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fcGFnZShwYWdlKQorICAgICwgbV9jbGll
bnQoY2xpZW50KQorICAgICwgbV9pc1BhdXNlZEluRGVidWdnZXIoZmFsc2UpCisgICAgLCBtX2Rv
Y3VtZW50KDApCisgICAgLCBtX2hpZ2hsaWdodERhdGEoMCkKK3sKK30KIAotdm9pZCBkcmF3SGln
aGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgRG9jdW1lbnQqIGRvY3VtZW50LCBIaWdo
bGlnaHREYXRhKiBoaWdobGlnaHREYXRhKQordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpwYWludChH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgaWYgKCFoaWdobGlnaHREYXRhKQotICAg
ICAgICByZXR1cm47CisgICAgaWYgKG1faGlnaGxpZ2h0RGF0YSkKKyAgICAgICAgZHJhd0hpZ2hs
aWdodChjb250ZXh0KTsKKyAgICBpZiAobV9pc1BhdXNlZEluRGVidWdnZXIpCisgICAgICAgIGRy
YXdJc1BhdXNlZEluRGVidWdnZXIoY29udGV4dCk7Cit9CiAKLSAgICBIaWdobGlnaHQgaGlnaGxp
Z2h0OwotICAgIGlmIChoaWdobGlnaHREYXRhLT5ub2RlKQotICAgICAgICBnZXRPckRyYXdOb2Rl
SGlnaGxpZ2h0KCZjb250ZXh0LCBoaWdobGlnaHREYXRhLCAmaGlnaGxpZ2h0KTsKLSAgICBlbHNl
IGlmIChoaWdobGlnaHREYXRhLT5yZWN0KQotICAgICAgICBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0
KCZjb250ZXh0LCBkb2N1bWVudCwgaGlnaGxpZ2h0RGF0YSwgJmhpZ2hsaWdodCk7Cit2b2lkIElu
c3BlY3Rvck92ZXJsYXk6OmRyYXdPdXRsaW5lKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgTGF5b3V0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIEZsb2F0UmVj
dCBvdXRsaW5lUmVjdCA9IHJlY3Q7CisgICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBvdXRs
aW5lUmVjdCwgQ29sb3IoKSwgY29sb3IpOwogfQogCi12b2lkIGdldEhpZ2hsaWdodChEb2N1bWVu
dCogZG9jdW1lbnQsIEhpZ2hsaWdodERhdGEqIGhpZ2hsaWdodERhdGEsIEhpZ2hsaWdodCogaGln
aGxpZ2h0KQordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpnZXRIaWdobGlnaHQoRG9jdW1lbnQqIGRv
Y3VtZW50LCBIaWdobGlnaHREYXRhKiBoaWdobGlnaHREYXRhLCBIaWdobGlnaHQqIGhpZ2hsaWdo
dCkKIHsKICAgICBpZiAoIWhpZ2hsaWdodERhdGEpCiAgICAgICAgIHJldHVybjsKQEAgLTUxNiwx
MyArNTI2LDc4IEBAIHZvaWQgZ2V0SGlnaGxpZ2h0KERvY3VtZW50KiBkb2N1bWVudCwgSGlnaGxp
Z2h0RGF0YSogaGlnaGxpZ2h0RGF0YSwgSGlnaGxpZ2h0KiBoCiAgICAgICAgIGdldE9yRHJhd1Jl
Y3RIaWdobGlnaHQoMCwgZG9jdW1lbnQsIGhpZ2hsaWdodERhdGEsIGhpZ2hsaWdodCk7CiB9CiAK
LXZvaWQgZHJhd091dGxpbmUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRS
ZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnNl
dEhpZ2hsaWdodChEb2N1bWVudCogZG9jdW1lbnQsIEhpZ2hsaWdodERhdGEqIGhpZ2hsaWdodERh
dGEpCiB7Ci0gICAgRmxvYXRSZWN0IG91dGxpbmVSZWN0ID0gcmVjdDsKLSAgICBkcmF3T3V0bGlu
ZWRRdWFkKGNvbnRleHQsIG91dGxpbmVSZWN0LCBDb2xvcigpLCBjb2xvcik7CisgICAgaWYgKGRv
Y3VtZW50ICYmIGhpZ2hsaWdodERhdGEgJiYgKGhpZ2hsaWdodERhdGEtPm5vZGUgfHwgaGlnaGxp
Z2h0RGF0YS0+cmVjdCkpIHsKKyAgICAgICAgbV9kb2N1bWVudCA9IGhpZ2hsaWdodERhdGEtPm5v
ZGUgPyBoaWdobGlnaHREYXRhLT5ub2RlLT5kb2N1bWVudCgpIDogZG9jdW1lbnQ7CisgICAgICAg
IG1faGlnaGxpZ2h0RGF0YSA9IGhpZ2hsaWdodERhdGE7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
bV9kb2N1bWVudCA9IDA7CisgICAgICAgIG1faGlnaGxpZ2h0RGF0YSA9IDA7CisgICAgfQorICAg
IHVwZGF0ZSgpOworfQorCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnNldElzUGF1c2VkSW5EZWJ1
Z2dlcihib29sIGZsYWcpCit7CisgICAgbV9pc1BhdXNlZEluRGVidWdnZXIgPSBmbGFnOworICAg
IHVwZGF0ZSgpOwogfQogCi19IC8vIG5hbWVzcGFjZSBET01Ob2RlSGlnaGxpZ2h0ZXIKK3ZvaWQg
SW5zcGVjdG9yT3ZlcmxheTo6dXBkYXRlKCkKK3sKKyAgICBpZiAoIW1fY2xpZW50KQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKG1faGlnaGxpZ2h0RGF0YSB8fCBtX2lzUGF1c2VkSW5EZWJ1Z2dl
cikKKyAgICAgICAgbV9jbGllbnQtPmhpZ2hsaWdodCgpOworICAgIGVsc2UKKyAgICAgICAgbV9j
bGllbnQtPmhpZGVIaWdobGlnaHQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3
SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBpZiAoIW1faGlnaGxp
Z2h0RGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSGlnaGxpZ2h0IGhpZ2hsaWdodDsKKyAg
ICBpZiAobV9oaWdobGlnaHREYXRhLT5ub2RlKQorICAgICAgICBnZXRPckRyYXdOb2RlSGlnaGxp
Z2h0KCZjb250ZXh0LCBtX2hpZ2hsaWdodERhdGEsICZoaWdobGlnaHQpOworICAgIGVsc2UgaWYg
KG1faGlnaGxpZ2h0RGF0YS0+cmVjdCkKKyAgICAgICAgZ2V0T3JEcmF3UmVjdEhpZ2hsaWdodCgm
Y29udGV4dCwgbV9kb2N1bWVudCwgbV9oaWdobGlnaHREYXRhLCAmaGlnaGxpZ2h0KTsKK30KKwor
dm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3SXNQYXVzZWRJbkRlYnVnZ2VyKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCBiYWNrZ3Jv
dW5kQ29sb3IsICgwLCAwLCAwLCAzMSkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3Is
IHRleHRCYWNrZ3JvdW5kQ29sb3IsICgyNTUsIDI1NSwgMTk0KSk7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChDb2xvciwgYm9yZGVyQ29sb3IsICgxMjgsIDEyOCwgMTI4KSk7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChpbnQsIGZvbnRIZWlnaHQsICgyNCkpOworCisgICAgRnJhbWUqIGZyYW1l
ID0gbV9wYWdlLT5tYWluRnJhbWUoKTsKKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBmcmFtZS0+
c2V0dGluZ3MoKTsKKyAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gZnJhbWUtPnZpZXcoKS0+dmlz
aWJsZUNvbnRlbnRSZWN0KCk7CisKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihiYWNrZ3JvdW5k
Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJhd1JlY3QodmlzaWJs
ZVJlY3QpOworCisgICAgRm9udERlc2NyaXB0aW9uIGRlc2M7CisgICAgc2V0VXBGb250RGVzY3Jp
cHRpb24oZGVzYywgc2V0dGluZ3MpOworICAgIGRlc2Muc2V0Q29tcHV0ZWRTaXplKGZvbnRIZWln
aHQpOworICAgIEZvbnQgZm9udCA9IEZvbnQoZGVzYywgMCwgMCk7CisgICAgZm9udC51cGRhdGUo
MCk7CisKKyAgICBTdHJpbmcgdGV4dCA9ICJQYXVzZWQgaW4gZGVidWdnZXIuIjsKKyAgICBUZXh0
UnVuIHRleHRSdW4odGV4dCk7CisgICAgSW50UmVjdCB0aXRsZVJlY3QgPSBlbmNsb3NpbmdJbnRS
ZWN0KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQodGV4dFJ1biwgSW50UG9pbnQoKSwgZm9udEhl
aWdodCkpOworICAgIHRpdGxlUmVjdC5pbmZsYXRlKHJlY3RJbmZsYXRlUHgpOworICAgIHRpdGxl
UmVjdC5zZXRMb2NhdGlvbihJbnRQb2ludCh2aXNpYmxlUmVjdC53aWR0aCgpIC8gMiAtIHRpdGxl
UmVjdC53aWR0aCgpIC8gMiwgMCkpOworCisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodGV4dEJh
Y2tncm91bmRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5zZXRTdHJv
a2VDb2xvcihib3JkZXJDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5k
cmF3UmVjdCh0aXRsZVJlY3QpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjpibGFj
aywgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5kcmF3VGV4dChmb250LCB0ZXh0
UnVuLCBJbnRQb2ludCh0aXRsZVJlY3QueCgpICsgcmVjdEluZmxhdGVQeCwgdGl0bGVSZWN0Lnko
KSArIGZvbnRIZWlnaHQpKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmgKaW5kZXggZjdiNmYwMGY0
ZmZlMDI1OTEzNTUyNTRkZmUxOTNkMDMwNjJjZTNkOS4uNTBhNjgyMDI1MzgxYjc4MzBiZTJhNGE0
MWRlNmRkNmI3MTRlNGEzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RP
TU5vZGVIaWdobGlnaHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2Rl
SGlnaGxpZ2h0ZXIuaApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkxheW91dFR5cGVzLmgi
CiAKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC00
Myw3ICs0NCwxMSBAQCBjbGFzcyBDb2xvcjsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRnJhbWVW
aWV3OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgSW5zcGVjdG9yQ2xpZW50OworY2xh
c3MgSW50UmVjdDsKK2NsYXNzIEludFNpemU7CiBjbGFzcyBOb2RlOworY2xhc3MgUGFnZTsKIAog
c3RydWN0IEhpZ2hsaWdodERhdGEgewogICAgIENvbG9yIGNvbnRlbnQ7CkBAIC03NSwxMyArODAs
MzMgQEAgc3RydWN0IEhpZ2hsaWdodCB7CiAgICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CiB9
OwogCi1uYW1lc3BhY2UgRE9NTm9kZUhpZ2hsaWdodGVyIHsKK2NsYXNzIEluc3BlY3Rvck92ZXJs
YXkgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3Rvck92ZXJsYXk+IGNy
ZWF0ZShQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9yT3ZlcmxheShwYWdlLCBjbGllbnQpKTsKKyAg
ICB9CiAKLXZvaWQgZHJhd0hpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmLCBEb2N1bWVudCosIEhp
Z2hsaWdodERhdGEqKTsKLXZvaWQgZ2V0SGlnaGxpZ2h0KERvY3VtZW50KiwgSGlnaGxpZ2h0RGF0
YSosIEhpZ2hsaWdodCopOwotdm9pZCBkcmF3T3V0bGluZShHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBMYXlvdXRSZWN0JiwgY29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29u
dGV4dCYpOworICAgIHZvaWQgZHJhd091dGxpbmUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5
b3V0UmVjdCYsIGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBnZXRIaWdobGlnaHQoRG9jdW1lbnQq
LCBIaWdobGlnaHREYXRhKiwgSGlnaGxpZ2h0Kik7CiAKLX0gLy8gbmFtZXNwYWNlIERPTU5vZGVI
aWdobGlnaHRlcgorICAgIHZvaWQgc2V0SGlnaGxpZ2h0KERvY3VtZW50KiwgSGlnaGxpZ2h0RGF0
YSopOworICAgIHZvaWQgc2V0SXNQYXVzZWRJbkRlYnVnZ2VyKGJvb2wpOworCitwcml2YXRlOgor
ICAgIEluc3BlY3Rvck92ZXJsYXkoUGFnZSosIEluc3BlY3RvckNsaWVudCopOworCisgICAgdm9p
ZCB1cGRhdGUoKTsKKyAgICB2b2lkIGRyYXdIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0Jik7Cisg
ICAgdm9pZCBkcmF3SXNQYXVzZWRJbkRlYnVnZ2VyKEdyYXBoaWNzQ29udGV4dCYpOworCisgICAg
UGFnZSogbV9wYWdlOworICAgIEluc3BlY3RvckNsaWVudCogbV9jbGllbnQ7CisgICAgYm9vbCBt
X2lzUGF1c2VkSW5EZWJ1Z2dlcjsKKyAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKKyAgICBIaWdo
bGlnaHREYXRhKiBtX2hpZ2hsaWdodERhdGE7Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cAppbmRleCAwOTVlMWNjNTFiMzU0YThmOGUwODE0NmE3OWVmNzA4ZGI3Y2Q0OWNlLi5hYThlZjA1
OTYwOGJiYjMxZDQ3YWY1ODRiNTJjMzNmYTg3MTVlMjQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAK
ICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAKKyNpbmNsdWRlICJET01Ob2RlSGln
aGxpZ2h0ZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIklkZW50aWZpZXJzRmFjdG9yeS5oIgpAQCAtNzgsNiArNzksNyBAQCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3Bl
Y3RvckNsaWVudCogaW5zcGVjdG9yQwogICAgIDogbV9pbnN0cnVtZW50aW5nQWdlbnRzKGFkb3B0
UHRyKG5ldyBJbnN0cnVtZW50aW5nQWdlbnRzKCkpKQogICAgICwgbV9pbmplY3RlZFNjcmlwdE1h
bmFnZXIoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjcmVhdGVGb3JQYWdlKCkpCiAgICAgLCBtX3N0
YXRlKGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JTdGF0ZShpbnNwZWN0b3JDbGllbnQpKSkKKyAgICAs
IG1fb3ZlcmxheShJbnNwZWN0b3JPdmVybGF5OjpjcmVhdGUocGFnZSwgaW5zcGVjdG9yQ2xpZW50
KSkKICAgICAsIG1fcGFnZShwYWdlKQogICAgICwgbV9pbnNwZWN0b3JDbGllbnQoaW5zcGVjdG9y
Q2xpZW50KQogewpAQCAtODUsMTIgKzg3LDEyIEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3Bl
Y3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDCiAg
ICAgbV9pbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50UHRyLmdldCgpOwogICAgIG1fYWdl
bnRzLmFwcGVuZChpbnNwZWN0b3JBZ2VudFB0ci5yZWxlYXNlKCkpOwogCi0gICAgT3duUHRyPElu
c3BlY3RvclBhZ2VBZ2VudD4gcGFnZUFnZW50UHRyKEluc3BlY3RvclBhZ2VBZ2VudDo6Y3JlYXRl
KG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgcGFnZSwgbV9pbnNwZWN0b3JBZ2VudCwgbV9z
dGF0ZS5nZXQoKSwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuZ2V0KCksIGluc3BlY3RvckNsaWVu
dCkpOworICAgIE93blB0cjxJbnNwZWN0b3JQYWdlQWdlbnQ+IHBhZ2VBZ2VudFB0cihJbnNwZWN0
b3JQYWdlQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIHBhZ2UsIG1f
aW5zcGVjdG9yQWdlbnQsIG1fc3RhdGUuZ2V0KCksIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdl
dCgpLCBpbnNwZWN0b3JDbGllbnQsIG1fb3ZlcmxheS5nZXQoKSkpOwogICAgIEluc3BlY3RvclBh
Z2VBZ2VudCogcGFnZUFnZW50ID0gcGFnZUFnZW50UHRyLmdldCgpOwogICAgIG1fcGFnZUFnZW50
ID0gcGFnZUFnZW50UHRyLmdldCgpOwogICAgIG1fYWdlbnRzLmFwcGVuZChwYWdlQWdlbnRQdHIu
cmVsZWFzZSgpKTsKIAotICAgIE93blB0cjxJbnNwZWN0b3JET01BZ2VudD4gZG9tQWdlbnRQdHIo
SW5zcGVjdG9yRE9NQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIHBh
Z2VBZ2VudCwgaW5zcGVjdG9yQ2xpZW50LCBtX3N0YXRlLmdldCgpLCBtX2luamVjdGVkU2NyaXB0
TWFuYWdlci5nZXQoKSkpOworICAgIE93blB0cjxJbnNwZWN0b3JET01BZ2VudD4gZG9tQWdlbnRQ
dHIoSW5zcGVjdG9yRE9NQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCks
IHBhZ2VBZ2VudCwgbV9zdGF0ZS5nZXQoKSwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuZ2V0KCks
IG1fb3ZlcmxheS5nZXQoKSkpOwogICAgIG1fZG9tQWdlbnQgPSBkb21BZ2VudFB0ci5nZXQoKTsK
ICAgICBtX2FnZW50cy5hcHBlbmQoZG9tQWdlbnRQdHIucmVsZWFzZSgpKTsKIApAQCAtMTMwLDcg
KzEzMiw3IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSog
cGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDCiAgICAgbV9hZ2VudHMuYXBwZW5kKGNv
bnNvbGVBZ2VudFB0ci5yZWxlYXNlKCkpOwogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCi0gICAgT3duUHRyPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+IGRlYnVnZ2VyQWdlbnRQdHIo
UGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1f
c3RhdGUuZ2V0KCksIHBhZ2UsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpKSk7CisgICAg
T3duUHRyPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+IGRlYnVnZ2VyQWdlbnRQdHIoUGFnZURlYnVn
Z2VyQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1fc3RhdGUuZ2V0
KCksIHBhZ2UsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpLCBtX292ZXJsYXkuZ2V0KCkp
KTsKICAgICBtX2RlYnVnZ2VyQWdlbnQgPSBkZWJ1Z2dlckFnZW50UHRyLmdldCgpOwogICAgIG1f
YWdlbnRzLmFwcGVuZChkZWJ1Z2dlckFnZW50UHRyLnJlbGVhc2UoKSk7CiAKQEAgLTI5NCw3ICsy
OTYsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmV2YWx1YXRlRm9yVGVzdEluRnJvbnRl
bmQobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgcwogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmRyYXdIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewotICAg
IG1fZG9tQWdlbnQtPmRyYXdIaWdobGlnaHQoY29udGV4dCk7CisgICAgbV9vdmVybGF5LT5wYWlu
dChjb250ZXh0KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRIaWdobGlnaHQo
SGlnaGxpZ2h0KiBoaWdobGlnaHQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCA0NzNiYjhkZTI2ZmVhMGFjNzA0NmY2NjQ5Nzlh
ZGZjZDRlY2E1YmVkLi4wYjU1ODJjZDkzZmQ5OWJkZThhMTExMDMxMmViMzkxOWMyM2ZmNTEzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAg
LTUxLDYgKzUxLDcgQEAgY2xhc3MgSW5zcGVjdG9yRE9NQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CiBjbGFzcyBJbnNwZWN0b3JG
cm9udGVuZENsaWVudDsKK2NsYXNzIEluc3BlY3Rvck92ZXJsYXk7CiBjbGFzcyBJbnNwZWN0b3JQ
YWdlQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JQcm9maWxlckFnZW50OwogY2xhc3MgSW5zcGVjdG9y
UmVzb3VyY2VBZ2VudDsKQEAgLTExOSw2ICsxMjAsNyBAQCBwcml2YXRlOgogICAgIE93blB0cjxJ
bnN0cnVtZW50aW5nQWdlbnRzPiBtX2luc3RydW1lbnRpbmdBZ2VudHM7CiAgICAgT3duUHRyPElu
amVjdGVkU2NyaXB0TWFuYWdlcj4gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CiAgICAgT3duUHRy
PEluc3BlY3RvclN0YXRlPiBtX3N0YXRlOworICAgIE93blB0cjxJbnNwZWN0b3JPdmVybGF5PiBt
X292ZXJsYXk7CiAKICAgICBJbnNwZWN0b3JBZ2VudCogbV9pbnNwZWN0b3JBZ2VudDsKICAgICBJ
bnNwZWN0b3JET01BZ2VudCogbV9kb21BZ2VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IDkwNzk1ODllNTFjZThmMDhlNTBlMjA2ZTQ5
YTEzMjZiZTk1YzMwMTIuLmNmNTJhYWUzMTg5OWUzNTQxYmM5NmRiYmUyMDcwZmQ0MTUzYTE2YTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApA
QCAtNjYsNyArNjYsNiBAQAogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJ
ZGVudGlmaWVyc0ZhY3RvcnkuaCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdE1hbmFnZXIuaCIK
LSNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVu
ZC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckhpc3RvcnkuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JQ
YWdlQWdlbnQuaCIKQEAgLTE5NCwxMSArMTkzLDExIEBAIFN0cmluZyBJbnNwZWN0b3JET01BZ2Vu
dDo6dG9FcnJvclN0cmluZyhjb25zdCBFeGNlcHRpb25Db2RlJiBlYykKICAgICByZXR1cm4gIiI7
CiB9CiAKLUluc3BlY3RvckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2VudChJbnN0cnVtZW50aW5n
QWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2Vu
dCwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0
ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCitJbnNwZWN0
b3JET01BZ2VudDo6SW5zcGVjdG9yRE9NQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1
bWVudGluZ0FnZW50cywgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIEluc3BlY3RvclN0
YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlw
dE1hbmFnZXIsIEluc3BlY3Rvck92ZXJsYXkqIG92ZXJsYXkpCiAgICAgOiBJbnNwZWN0b3JCYXNl
QWdlbnQ8SW5zcGVjdG9yRE9NQWdlbnQ+KCJET00iLCBpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnNw
ZWN0b3JTdGF0ZSkKICAgICAsIG1fcGFnZUFnZW50KHBhZ2VBZ2VudCkKLSAgICAsIG1fY2xpZW50
KGNsaWVudCkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKGluamVjdGVkU2NyaXB0TWFu
YWdlcikKKyAgICAsIG1fb3ZlcmxheShvdmVybGF5KQogICAgICwgbV9mcm9udGVuZCgwKQogICAg
ICwgbV9kb21MaXN0ZW5lcigwKQogICAgICwgbV9sYXN0Tm9kZUlkKDEpCkBAIC0xMDM2LDcgKzEw
MzUsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHQoKQogewogICAgIC8vIFRo
aXMgbWV0aG9kIHJlcXVpcmVzIG1faGlnaGxpZ2h0RGF0YSB0byBoYXZlIGJlZW4gZmlsbGVkIGlu
IGJ5IGl0cyBjbGllbnQuCiAgICAgQVNTRVJUKG1faGlnaGxpZ2h0RGF0YSk7Ci0gICAgbV9jbGll
bnQtPmhpZ2hsaWdodCgpOworICAgIG1fb3ZlcmxheS0+c2V0SGlnaGxpZ2h0KG1fZG9jdW1lbnQu
Z2V0KCksIG1faGlnaGxpZ2h0RGF0YS5nZXQoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmhpZ2hsaWdodFJlY3QoRXJyb3JTdHJpbmcqLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwg
aW50IGhlaWdodCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGNvbG9yLCBjb25zdCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogb3V0bGluZUNvbG9yKQpAQCAtMTA0NSw3ICsxMDQ0LDcg
QEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0UmVjdChFcnJvclN0cmluZyosIGlu
dCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQKICAgICBtX2hpZ2hsaWdodERhdGEtPnJlY3QgPSBh
ZG9wdFB0cihuZXcgSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CiAgICAgbV9oaWdobGln
aHREYXRhLT5jb250ZW50ID0gcGFyc2VDb2xvcihjb2xvcik7CiAgICAgbV9oaWdobGlnaHREYXRh
LT5jb250ZW50T3V0bGluZSA9IHBhcnNlQ29sb3Iob3V0bGluZUNvbG9yKTsKLSAgICBtX2NsaWVu
dC0+aGlnaGxpZ2h0KCk7CisgICAgaGlnaGxpZ2h0KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OmhpZ2hsaWdodE5vZGUoCkBAIC0xMDg0LDcgKzEwODMsNyBAQCB2b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpoaWRlSGlnaGxpZ2h0KEVycm9yU3RyaW5nKikKICAgICAgICAgbV9oaWdobGln
aHREYXRhLT5ub2RlLmNsZWFyKCk7CiAgICAgICAgIG1faGlnaGxpZ2h0RGF0YS0+cmVjdC5jbGVh
cigpOwogICAgIH0KLSAgICBtX2NsaWVudC0+aGlkZUhpZ2hsaWdodCgpOworICAgIGhpZ2hsaWdo
dCgpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojptb3ZlVG8oRXJyb3JTdHJpbmcqIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBpbnQgdGFyZ2V0RWxlbWVudElkLCBjb25zdCBpbnQqIGNv
bnN0IGFuY2hvck5vZGVJZCwgaW50KiBuZXdOb2RlSWQpCkBAIC0xNTk5LDIwICsxNTk4LDEyIEBA
IFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5zcGVjdG9y
RE9NQWdlbnQ6OnJlc29sdmVOb2RlKE5vCiAgICAgcmV0dXJuIGluamVjdGVkU2NyaXB0LndyYXBO
b2RlKG5vZGUsIG9iamVjdEdyb3VwKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZHJh
d0hpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X2hpZ2hsaWdodERhdGEpCi0gICAgICAgIHJldHVybjsKLQotICAgIERPTU5vZGVIaWdobGlnaHRl
cjo6ZHJhd0hpZ2hsaWdodChjb250ZXh0LCBtX2hpZ2hsaWdodERhdGEtPm5vZGUgPyBtX2hpZ2hs
aWdodERhdGEtPm5vZGUtPmRvY3VtZW50KCkgOiBtX2RvY3VtZW50LmdldCgpLCBtX2hpZ2hsaWdo
dERhdGEuZ2V0KCkpOwotfQotCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRIaWdobGlnaHQo
SGlnaGxpZ2h0KiBoaWdobGlnaHQpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2hpZ2hsaWdodERhdGEp
CiAgICAgICAgIHJldHVybjsKIAotICAgIERPTU5vZGVIaWdobGlnaHRlcjo6Z2V0SGlnaGxpZ2h0
KG1faGlnaGxpZ2h0RGF0YS0+bm9kZSA/IG1faGlnaGxpZ2h0RGF0YS0+bm9kZS0+ZG9jdW1lbnQo
KSA6IG1fZG9jdW1lbnQuZ2V0KCksIG1faGlnaGxpZ2h0RGF0YS5nZXQoKSwgaGlnaGxpZ2h0KTsK
KyAgICBtX292ZXJsYXktPmdldEhpZ2hsaWdodChtX2hpZ2hsaWdodERhdGEtPm5vZGUgPyBtX2hp
Z2hsaWdodERhdGEtPm5vZGUtPmRvY3VtZW50KCkgOiBtX2RvY3VtZW50LmdldCgpLCBtX2hpZ2hs
aWdodERhdGEuZ2V0KCksIGhpZ2hsaWdodCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5o
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggYjA1
YWI1NzBkOWZkMWIwNDg3MDZhMzkzYTI0NjY1OTdiNDk2MzliZi4uM2IzZjU5YmU3Njg4NjliM2E4
MGMxNjdiZTliZDI2MTIwNTFhNzI3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTUFnZW50LmgKQEAgLTU2LDkgKzU2LDkgQEAgY2xhc3MgRG9jdW1lbnQ7CiBjbGFz
cyBFbGVtZW50OwogY2xhc3MgRXZlbnQ7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBJ
bnNwZWN0b3JDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKIGNsYXNzIEluc3BlY3Rv
ckhpc3Rvcnk7CitjbGFzcyBJbnNwZWN0b3JPdmVybGF5OwogY2xhc3MgSW5zcGVjdG9yUGFnZUFn
ZW50OwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CkBAIC0xMDMsOSArMTAz
LDkgQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkTW9kaWZ5RE9NQXR0cihFbGVt
ZW50KikgPSAwOwogICAgIH07CiAKLSAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JET01B
Z2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIElu
c3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCwgSW5z
cGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVj
dGVkU2NyaXB0TWFuYWdlcikKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JET01BZ2Vu
dD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3Bl
Y3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUs
IEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JP
dmVybGF5KiBvdmVybGF5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNw
ZWN0b3JET01BZ2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBwYWdlQWdlbnQsIGNsaWVudCwgaW5z
cGVjdG9yU3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdlcikpOworICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IEluc3BlY3RvckRPTUFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIHBhZ2VBZ2Vu
dCwgaW5zcGVjdG9yU3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdlciwgb3ZlcmxheSkpOwogICAg
IH0KIAogICAgIHN0YXRpYyBTdHJpbmcgdG9FcnJvclN0cmluZyhjb25zdCBFeGNlcHRpb25Db2Rl
Jik7CkBAIC0xODUsNyArMTg1LDYgQEAgcHVibGljOgogICAgIHZvaWQgaW5zcGVjdChOb2RlKik7
CiAgICAgdm9pZCBmb2N1c05vZGUoKTsKIAotICAgIHZvaWQgZHJhd0hpZ2hsaWdodChHcmFwaGlj
c0NvbnRleHQmKSBjb25zdDsKICAgICB2b2lkIGdldEhpZ2hsaWdodChIaWdobGlnaHQqKSBjb25z
dDsKIAogICAgIEluc3BlY3Rvckhpc3RvcnkqIGhpc3RvcnkoKSB7IHJldHVybiBtX2hpc3Rvcnku
Z2V0KCk7IH0KQEAgLTIwNSw3ICsyMDQsNyBAQCBwdWJsaWM6CiAgICAgSW5zcGVjdG9yUGFnZUFn
ZW50KiBwYWdlQWdlbnQoKSB7IHJldHVybiBtX3BhZ2VBZ2VudDsgfQogCiBwcml2YXRlOgotICAg
IEluc3BlY3RvckRPTUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JQYWdlQWdl
bnQqLCBJbnNwZWN0b3JDbGllbnQqLCBJbnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFu
YWdlciopOworICAgIEluc3BlY3RvckRPTUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNw
ZWN0b3JQYWdlQWdlbnQqLCBJbnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlcios
IEluc3BlY3Rvck92ZXJsYXkqKTsKIAogICAgIHZvaWQgc2V0U2VhcmNoaW5nRm9yTm9kZShib29s
IGVuYWJsZWQsIEluc3BlY3Rvck9iamVjdCogaGlnaGxpZ2h0Q29uZmlnKTsKICAgICBib29sIHNl
dEhpZ2hsaWdodERhdGFGcm9tQ29uZmlnKEluc3BlY3Rvck9iamVjdCogaGlnaGxpZ2h0Q29uZmln
KTsKQEAgLTI0MSw4ICsyNDAsOCBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBJbnNwZWN0b3JQ
YWdlQWdlbnQqIG1fcGFnZUFnZW50OwotICAgIEluc3BlY3RvckNsaWVudCogbV9jbGllbnQ7CiAg
ICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKKyAgICBJ
bnNwZWN0b3JPdmVybGF5KiBtX292ZXJsYXk7CiAgICAgSW5zcGVjdG9yRnJvbnRlbmQ6OkRPTSog
bV9mcm9udGVuZDsKICAgICBET01MaXN0ZW5lciogbV9kb21MaXN0ZW5lcjsKICAgICBOb2RlVG9J
ZE1hcCBtX2RvY3VtZW50Tm9kZVRvSWRNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAppbmRleCAwOWM5N2QxOTUzZTRiOWIwMDE2MWY4
NzRmNDUzMWZiZGVjN2RiNmNkLi5iMmU3OWFkN2VmMWZlODM4MjJmZTUzMDE4ODk0ZjQyNzFiNDJj
YmJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50LmgKQEAgLTEzMywxNyArMTMzLDE4IEBAIHByb3RlY3RlZDoKICAgICBJbmplY3RlZFNj
cmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlcigpIHsgcmV0dXJuIG1faW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyOyB9CiAgICAgdmlydHVhbCBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlw
dEZvckV2YWwoRXJyb3JTdHJpbmcqLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgPSAw
OwogCisgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUGF1
c2UoU2NyaXB0U3RhdGUqLCBjb25zdCBTY3JpcHRWYWx1ZSYgY2FsbEZyYW1lcywgY29uc3QgU2Ny
aXB0VmFsdWUmIGV4Y2VwdGlvbik7CisgICAgdmlydHVhbCB2b2lkIGRpZENvbnRpbnVlKCk7CisK
IHByaXZhdGU6CiAgICAgdm9pZCBlbmFibGUoKTsKLSAgICB2b2lkIGRpc2FibGUoKTsKICAgICBi
b29sIGVuYWJsZWQoKTsKIAogICAgIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVC
dWlsZGVyOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPiA+IGN1cnJlbnRDYWxsRnJhbWVzKCk7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgY29u
c3QgU2NyaXB0Jik7CiAgICAgdmlydHVhbCB2b2lkIGZhaWxlZFRvUGFyc2VTb3VyY2UoY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGZpcnN0TGluZSwgaW50IGVycm9y
TGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRQ
YXVzZShTY3JpcHRTdGF0ZSosIGNvbnN0IFNjcmlwdFZhbHVlJiBjYWxsRnJhbWVzLCBjb25zdCBT
Y3JpcHRWYWx1ZSYgZXhjZXB0aW9uKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ29udGludWUoKTsK
IAogICAgIHZvaWQgc2V0UGF1c2VPbkV4Y2VwdGlvbnNJbXBsKEVycm9yU3RyaW5nKiwgaW50KTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcApp
bmRleCBlZjM0NTM3ZjBlMTE4ZmI1ZTBjYjg4Y2EyZmFiNWUzZWY2MGEzNTc3Li45Njc2ZDEzOGU4
NTZmZjk1MDk2YmMyZTA0ODY0YTE4ZWRkZTgyYzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcApAQCAtMjIzLDkgKzIyMyw5IEBAIGJvb2wg
SW5zcGVjdG9yUGFnZUFnZW50OjpzaGFyZWRCdWZmZXJDb250ZW50KFBhc3NSZWZQdHI8U2hhcmVk
QnVmZmVyPiBidWZmZXIsIGNvCiAgICAgcmV0dXJuIGRlY29kZVNoYXJlZEJ1ZmZlcihidWZmZXIs
IHRleHRFbmNvZGluZ05hbWUsIHJlc3VsdCk7CiB9CiAKLVBhc3NPd25QdHI8SW5zcGVjdG9yUGFn
ZUFnZW50PiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBp
bnN0cnVtZW50aW5nQWdlbnRzLCBQYWdlKiBwYWdlLCBJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9y
QWdlbnQsIEluc3BlY3RvclN0YXRlKiBzdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmpl
Y3RlZFNjcmlwdE1hbmFnZXIsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQorUGFzc093blB0cjxJ
bnNwZWN0b3JQYWdlQWdlbnQ+IEluc3BlY3RvclBhZ2VBZ2VudDo6Y3JlYXRlKEluc3RydW1lbnRp
bmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIFBhZ2UqIHBhZ2UsIEluc3BlY3RvckFnZW50
KiBpbnNwZWN0b3JBZ2VudCwgSW5zcGVjdG9yU3RhdGUqIHN0YXRlLCBJbmplY3RlZFNjcmlwdE1h
bmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQsIElu
c3BlY3Rvck92ZXJsYXkqIG92ZXJsYXkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNw
ZWN0b3JQYWdlQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgcGFnZSwgaW5zcGVjdG9yQWdlbnQs
IHN0YXRlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIGNsaWVudCkpOworICAgIHJldHVybiBhZG9w
dFB0cihuZXcgSW5zcGVjdG9yUGFnZUFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIHBhZ2UsIGlu
c3BlY3RvckFnZW50LCBzdGF0ZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBjbGllbnQsIG92ZXJs
YXkpKTsKIH0KIAogLy8gc3RhdGljCkBAIC0zMDgsMTMgKzMwOCwxNCBAQCBUeXBlQnVpbGRlcjo6
UGFnZTo6UmVzb3VyY2VUeXBlOjpFbnVtIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3Vy
Y2VUeXBlSnNvbgogICAgIHJldHVybiByZXNvdXJjZVR5cGVKc29uKGNhY2hlZFJlc291cmNlVHlw
ZShjYWNoZWRSZXNvdXJjZSkpOwogfQogCi1JbnNwZWN0b3JQYWdlQWdlbnQ6Okluc3BlY3RvclBh
Z2VBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYWdlKiBw
YWdlLCBJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIEluc3BlY3RvclN0YXRlKiBpbnNw
ZWN0b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIs
IEluc3BlY3RvckNsaWVudCogY2xpZW50KQorSW5zcGVjdG9yUGFnZUFnZW50OjpJbnNwZWN0b3JQ
YWdlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgUGFnZSog
cGFnZSwgSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBJbnNwZWN0b3JTdGF0ZSogaW5z
cGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCwgSW5zcGVjdG9yT3ZlcmxheSogb3ZlcmxheSkKICAg
ICA6IEluc3BlY3RvckJhc2VBZ2VudDxJbnNwZWN0b3JQYWdlQWdlbnQ+KCJQYWdlIiwgaW5zdHJ1
bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUpCiAgICAgLCBtX3BhZ2UocGFnZSkKICAgICAs
IG1faW5zcGVjdG9yQWdlbnQoaW5zcGVjdG9yQWdlbnQpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0
TWFuYWdlcihpbmplY3RlZFNjcmlwdE1hbmFnZXIpCiAgICAgLCBtX2NsaWVudChjbGllbnQpCiAg
ICAgLCBtX2Zyb250ZW5kKDApCisgICAgLCBtX292ZXJsYXkob3ZlcmxheSkKICAgICAsIG1fbGFz
dFNjcmlwdElkZW50aWZpZXIoMCkKICAgICAsIG1fbGFzdFBhaW50Q29udGV4dCgwKQogICAgICwg
bV9kaWRMb2FkRXZlbnRGaXJlKGZhbHNlKQpAQCAtODg1LDcgKzg4Niw3IEBAIHZvaWQgSW5zcGVj
dG9yUGFnZUFnZW50OjpkaWRQYWludCgpCiAgICAgICAgIENvbG9yKDAsIDAsIDB4RkYsIDB4M0Yp
LAogICAgIH07CiAKLSAgICBET01Ob2RlSGlnaGxpZ2h0ZXI6OmRyYXdPdXRsaW5lKCptX2xhc3RQ
YWludENvbnRleHQsIG1fbGFzdFBhaW50UmVjdCwgY29sb3JzW2NvbG9yU2VsZWN0b3IrKyAlIFdU
Rl9BUlJBWV9MRU5HVEgoY29sb3JzKV0pOworICAgIG1fb3ZlcmxheS0+ZHJhd091dGxpbmUoKm1f
bGFzdFBhaW50Q29udGV4dCwgbV9sYXN0UGFpbnRSZWN0LCBjb2xvcnNbY29sb3JTZWxlY3Rvcisr
ICUgV1RGX0FSUkFZX0xFTkdUSChjb2xvcnMpXSk7CiAKICAgICBtX2xhc3RQYWludENvbnRleHQg
PSAwOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBh
Z2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5o
CmluZGV4IDk2NGJjODVmYzYzNjQ4YWYzOGYyZGMxMmZjODNmNzk3MWI5M2E2NjMuLmMzYjlhNmQy
ZjQ1YmVlMmI3M2ZjMTA5OGI2NTJhYmFjYWIyYWY5ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKQEAgLTUzLDYgKzUzLDcgQEAgY2xhc3MgSW5z
cGVjdG9yQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JBcnJheTsKIGNsYXNzIEluc3BlY3RvckNsaWVu
dDsKIGNsYXNzIEluc3BlY3Rvck9iamVjdDsKK2NsYXNzIEluc3BlY3Rvck92ZXJsYXk7CiBjbGFz
cyBJbnNwZWN0b3JTdGF0ZTsKIGNsYXNzIEluc3RydW1lbnRpbmdBZ2VudHM7CiBjbGFzcyBLVVJM
OwpAQCAtNzcsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgICAgIE90aGVyUmVzb3VyY2UKICAgICB9
OwogCi0gICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yUGFnZUFnZW50PiBjcmVhdGUoSW5z
dHJ1bWVudGluZ0FnZW50cyosIFBhZ2UqLCBJbnNwZWN0b3JBZ2VudCosIEluc3BlY3RvclN0YXRl
KiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9yQ2xpZW50Kik7CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8SW5zcGVjdG9yUGFnZUFnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50
cyosIFBhZ2UqLCBJbnNwZWN0b3JBZ2VudCosIEluc3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKiwgSW5zcGVjdG9yQ2xpZW50KiwgSW5zcGVjdG9yT3ZlcmxheSopOwogCiAgICAg
c3RhdGljIGJvb2wgY2FjaGVkUmVzb3VyY2VDb250ZW50KENhY2hlZFJlc291cmNlKiwgU3RyaW5n
KiByZXN1bHQsIGJvb2wqIGJhc2U2NEVuY29kZWQpOwogICAgIHN0YXRpYyBib29sIHNoYXJlZEJ1
ZmZlckNvbnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBjb25zdCBTdHJpbmcmIHRleHRF
bmNvZGluZ05hbWUsIGJvb2wgd2l0aEJhc2U2NEVuY29kZSwgU3RyaW5nKiByZXN1bHQpOwpAQCAt
MTM3LDcgKzEzOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRG9jdW1lbnRMb2FkZXIqIGFzc2Vy
dERvY3VtZW50TG9hZGVyKEVycm9yU3RyaW5nKiwgRnJhbWUqKTsKIAogcHJpdmF0ZToKLSAgICBJ
bnNwZWN0b3JQYWdlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIFBhZ2UqLCBJbnNwZWN0b3JB
Z2VudCosIEluc3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9y
Q2xpZW50Kik7CisgICAgSW5zcGVjdG9yUGFnZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBQ
YWdlKiwgSW5zcGVjdG9yQWdlbnQqLCBJbnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFu
YWdlciosIEluc3BlY3RvckNsaWVudCosIEluc3BlY3Rvck92ZXJsYXkqKTsKICAgICB2b2lkIHVw
ZGF0ZVZpZXdNZXRyaWNzKGludCwgaW50LCBkb3VibGUsIGJvb2wpOwogCiAgICAgUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWU+IGJ1aWxkT2JqZWN0Rm9yRnJhbWUoRnJhbWUqKTsK
QEAgLTE0Nyw2ICsxNDgsNyBAQCBwcml2YXRlOgogICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciog
bV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CiAgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsK
ICAgICBJbnNwZWN0b3JGcm9udGVuZDo6UGFnZSogbV9mcm9udGVuZDsKKyAgICBJbnNwZWN0b3JP
dmVybGF5KiBtX292ZXJsYXk7CiAgICAgbG9uZyBtX2xhc3RTY3JpcHRJZGVudGlmaWVyOwogICAg
IFN0cmluZyBtX3BlbmRpbmdTY3JpcHRUb0V2YWx1YXRlT25Mb2FkT25jZTsKICAgICBTdHJpbmcg
bV9zY3JpcHRUb0V2YWx1YXRlT25Mb2FkT25jZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGE1ODZlZGYzZmQ0MTA4YzlkMDc5MmMwYmRm
ZWJlMWU4M2ZhZmY4NmEuLmUxMzNiZjBkMDMwMTE5OTFiZjk3MzczNjVjNWNlMGQwYmNiYzA0ZjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcApA
QCAtMzUsMTkgKzM1LDIxIEBACiAjaW5jbHVkZSAiUGFnZURlYnVnZ2VyQWdlbnQuaCIKIAogI2lu
Y2x1ZGUgIkNvbnNvbGUuaCIKKyNpbmNsdWRlICJET01Ob2RlSGlnaGxpZ2h0ZXIuaCIKICNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZVNjcmlwdERlYnVnU2VydmVyLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2VudD4gUGFnZURlYnVn
Z2VyQWdlbnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
LCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIElu
amVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQorUGFzc093blB0cjxQ
YWdlRGVidWdnZXJBZ2VudD4gUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5n
QWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3Rh
dGUsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQogewotICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgUGFnZURlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVj
dG9yU3RhdGUsIGluc3BlY3RlZFBhZ2UsIGluamVjdGVkU2NyaXB0TWFuYWdlcikpOworICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgUGFnZURlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywg
aW5zcGVjdG9yU3RhdGUsIGluc3BlY3RlZFBhZ2UsIGluamVjdGVkU2NyaXB0TWFuYWdlciwgb3Zl
cmxheSkpOwogfQogCi1QYWdlRGVidWdnZXJBZ2VudDo6UGFnZURlYnVnZ2VyQWdlbnQoSW5zdHJ1
bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yU3RhdGUqIGluc3Bl
Y3RvclN0YXRlLCBQYWdlKiBpbnNwZWN0ZWRQYWdlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGlu
amVjdGVkU2NyaXB0TWFuYWdlcikKK1BhZ2VEZWJ1Z2dlckFnZW50OjpQYWdlRGVidWdnZXJBZ2Vu
dChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0
ZSogaW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIEluamVjdGVkU2NyaXB0TWFu
YWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQog
ICAgIDogSW5zcGVjdG9yRGVidWdnZXJBZ2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnNwZWN0
b3JTdGF0ZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQogICAgICwgbV9pbnNwZWN0ZWRQYWdlKGlu
c3BlY3RlZFBhZ2UpCisgICAgLCBtX292ZXJsYXkob3ZlcmxheSkKIHsKIH0KIApAQCAtOTIsNiAr
OTQsMjMgQEAgSW5qZWN0ZWRTY3JpcHQgUGFnZURlYnVnZ2VyQWdlbnQ6OmluamVjdGVkU2NyaXB0
Rm9yRXZhbChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcKICAgICByZXR1cm4gaW5qZWN0ZWRTY3Jp
cHQ7CiB9CiAKK3ZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoKQoreworICAgIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoKTsKKyAgICBtX292ZXJsYXktPnNldElzUGF1c2Vk
SW5EZWJ1Z2dlcihmYWxzZSk7Cit9CisKK3ZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNl
KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgU2NyaXB0VmFsdWUmIGNhbGxGcmFtZXMs
IGNvbnN0IFNjcmlwdFZhbHVlJiBleGNlcHRpb24pCit7CisgICAgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6ZGlkUGF1c2Uoc2NyaXB0U3RhdGUsIGNhbGxGcmFtZXMsIGV4Y2VwdGlvbik7CisgICAg
bV9vdmVybGF5LT5zZXRJc1BhdXNlZEluRGVidWdnZXIodHJ1ZSk7Cit9CisgCit2b2lkIFBhZ2VE
ZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSgpCit7CisgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6ZGlkQ29udGludWUoKTsKKyAgICBtX292ZXJsYXktPnNldElzUGF1c2VkSW5EZWJ1Z2dlcihm
YWxzZSk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuaAppbmRleCA5ZGJkNTEzZjlmMWEyOGJiOTg0MjQ5
MTM1NzgxNDg2YzczYzMyNjE4Li5kOTBmZGViODJhZWM4ZTIxNzE5YjU3YzQ5MzVlMTUwZmFkYjZk
ZWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdl
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuaApA
QCAtMzcsNiArMzcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEluc3BlY3Rv
ck92ZXJsYXk7CiBjbGFzcyBQYWdlOwogY2xhc3MgUGFnZVNjcmlwdERlYnVnU2VydmVyOwogCkBA
IC00NCw3ICs0NSw3IEBAIGNsYXNzIFBhZ2VEZWJ1Z2dlckFnZW50IDogcHVibGljIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VEZWJ1Z2dlckFn
ZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMq
LCBJbnNwZWN0b3JTdGF0ZSosIFBhZ2UqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKKyAgICBz
dGF0aWMgUGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdB
Z2VudHMqLCBJbnNwZWN0b3JTdGF0ZSosIFBhZ2UqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJ
bnNwZWN0b3JPdmVybGF5Kik7CiAgICAgdmlydHVhbCB+UGFnZURlYnVnZ2VyQWdlbnQoKTsKIAog
cHJpdmF0ZToKQEAgLTU2LDggKzU3LDEzIEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIEluamVj
dGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyosIGNvbnN0IGludCog
ZXhlY3V0aW9uQ29udGV4dElkKTsKIAotICAgIFBhZ2VEZWJ1Z2dlckFnZW50KEluc3RydW1lbnRp
bmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0ZSosIFBhZ2UqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZSgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRQYXVz
ZShTY3JpcHRTdGF0ZSosIGNvbnN0IFNjcmlwdFZhbHVlJiBjYWxsRnJhbWVzLCBjb25zdCBTY3Jp
cHRWYWx1ZSYgZXhjZXB0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29udGludWUoKTsKKwor
ICAgIFBhZ2VEZWJ1Z2dlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0
ZSosIFBhZ2UqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JPdmVybGF5Kik7CiAg
ICAgUGFnZSogY29uc3QgbV9pbnNwZWN0ZWRQYWdlOworICAgIEluc3BlY3Rvck92ZXJsYXkqIG1f
b3ZlcmxheTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152783</attachid>
            <date>2012-07-17 10:47:04 -0700</date>
            <delta_ts>2012-07-17 10:56:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90880-20120717214702.patch</filename>
            <type>text/plain</type>
            <size>41386</size>
            <attacher name="Sergey Rogulenko">rogulenko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyODUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGYyMGFjNzQ5YzU1ODgz
OGNiOWZkYTNjMTE0ZTVkN2ViYTYyYmM0OC4uOWRiYjczNzU5YzQyNzQ2ODljMjBiMDBlZDI5Mjc5
NDgwZDM1MjViYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0IEBACisyMDEyLTA3LTE3ICBTZXJn
ZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogYWRkaW5nIHBhdXNlIGljb24gZm9yIEphdmFTY3JpcHQgZGVidWdnaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg4MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yZWQgRE9NTm9k
ZUhpZ2hsaWdodGVyIGludG8gSW5zcGVjdG9yT3ZlcmxheSBjbGFzcyBhbmQgYWRkZWQgYSBmZWF0
dXJlIHRvIHNob3cgYSAicGF1c2UiIHNjcmVlbiB3aGVuCisgICAgICAgIHRoZSBKYXZhc2NyaXB0
IGRlYnVnZ2VyIGlzIHBhdXNlZC4KKworICAgICAgICAqIGluc3BlY3Rvci9ET01Ob2RlSGlnaGxp
Z2h0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6SW5zcGVjdG9y
T3ZlcmxheSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpwYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3T3V0bGluZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpnZXRIaWdobGlnaHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6c2V0UGF1c2VkSW5EZWJ1Z2dlcik6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpoaWRlSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6aGlnaGxpZ2h0Tm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpoaWdobGlnaHRSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmhpZ2hsaWdodEZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OnNldEhpZ2hsaWdodERhdGFGcm9tQ29uZmln
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmhpZ2hsaWdodGVkTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5Ojp1cGRhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0hpZ2hsaWdodCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3UGF1c2VkSW5EZWJ1Z2dlcik6CisgICAgICAgICog
aW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChJbnNwZWN0b3JPdmVybGF5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJs
YXk6OmNyZWF0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJv
bGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkcmF3SGlnaGxp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmhpZ2hsaWdodGVk
Tm9kZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoSW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6Okluc3BlY3RvckRPTUFnZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojp+SW5zcGVjdG9yRE9NQWdlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmhhbmRsZU1vdXNlUHJlc3MpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpzZXRTZWFyY2hpbmdG
b3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHROb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRGcmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6aGlkZUhpZ2hsaWdodCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpjcmVhdGUpOgorICAgICAg
ICAoSW5zcGVjdG9yRE9NQWdlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1
Z2dlckFnZW50Lmg6CisgICAgICAgIChJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclBhZ2VBZ2VudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBh
Z2VBZ2VudDo6SW5zcGVjdG9yUGFnZUFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clBhZ2VBZ2VudDo6ZGlkUGFpbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdl
QWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGluc3BlY3Rvci9QYWdlRGVi
dWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlRGVidWdnZXJBZ2VudDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50OjpQYWdlRGVidWdnZXJB
Z2VudCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlRGVidWdnZXJBZ2VudDo6ZGlzYWJsZSk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50Ojpk
aWRQYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlRGVidWdnZXJBZ2VudDo6ZGlkQ29udGlu
dWUpOgorICAgICAgICAqIGluc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChQYWdlRGVidWdnZXJBZ2VudCk6CisKIDIwMTItMDctMTcgIEhh
bnMgTXVsbGVyICA8aG11bGxlckBhZG9iZS5jb20+CiAKICAgICAgICAgUmVuYW1lIENTUyBFeGNs
dXNpb25zIENTU1dyYXBTaGFwZSBjbGFzcyBwcm9wZXJ0aWVzIHRvIG1hdGNoIEV4Y2x1c2lvbiBz
aGFwZSBmdW5jdGlvbiBwYXJhbWV0ZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9E
T01Ob2RlSGlnaGxpZ2h0ZXIuY3BwCmluZGV4IGU0YzcxMDBkNjFjNTIwODNmMzgyNzFmMmE3Mjc1
NDc1NDY4ZWRiMmMuLmI2NDA4YjM3M2ZkMTUyMjhhNzMyZjFiNDhkMGExZWM4NmMxNmZiODkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwCkBA
IC0zOSw2ICszOSw4IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgorI2luY2x1ZGUgIkhUTUxG
cmFtZU93bmVyRWxlbWVudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgogI2luY2x1
ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKQEAgLTY4
LDYgKzcwLDQwIEBAIGNvbnN0IHN0YXRpYyBpbnQgYXJyb3dUaXBPZmZzZXQgPSAyMDsKIGNvbnN0
IHN0YXRpYyBmbG9hdCBhcnJvd0hlaWdodCA9IDc7CiBjb25zdCBzdGF0aWMgZmxvYXQgYXJyb3dI
YWxmV2lkdGggPSA3OwogCitzdGF0aWMgQ29sb3IgcGFyc2VDb2xvcihjb25zdCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiogY29sb3JPYmplY3QpCit7CisgICAgaWYgKCFjb2xvck9iamVjdCB8fCAh
KCpjb2xvck9iamVjdCkpCisgICAgICAgIHJldHVybiBDb2xvcjo6dHJhbnNwYXJlbnQ7CisKKyAg
ICBpbnQgcjsKKyAgICBpbnQgZzsKKyAgICBpbnQgYjsKKyAgICBib29sIHN1Y2Nlc3MgPSAoKmNv
bG9yT2JqZWN0KS0+Z2V0TnVtYmVyKCJyIiwgJnIpOworICAgIHN1Y2Nlc3MgfD0gKCpjb2xvck9i
amVjdCktPmdldE51bWJlcigiZyIsICZnKTsKKyAgICBzdWNjZXNzIHw9ICgqY29sb3JPYmplY3Qp
LT5nZXROdW1iZXIoImIiLCAmYik7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm4g
Q29sb3I6OnRyYW5zcGFyZW50OworCisgICAgZG91YmxlIGE7CisgICAgc3VjY2VzcyA9ICgqY29s
b3JPYmplY3QpLT5nZXROdW1iZXIoImEiLCAmYSk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAg
ICByZXR1cm4gQ29sb3IociwgZywgYik7CisKKyAgICAvLyBDbGFtcCBhbHBoYSB0byB0aGUgWzAu
LjFdIHJhbmdlLgorICAgIGlmIChhIDwgMCkKKyAgICAgICAgYSA9IDA7CisgICAgZWxzZSBpZiAo
YSA+IDEpCisgICAgICAgIGEgPSAxOworCisgICAgcmV0dXJuIENvbG9yKHIsIGcsIGIsIHN0YXRp
Y19jYXN0PGludD4oYSAqIDI1NSkpOworfQorCitzdGF0aWMgQ29sb3IgcGFyc2VDb25maWdDb2xv
cihjb25zdCBTdHJpbmcmIGZpZWxkTmFtZSwgSW5zcGVjdG9yT2JqZWN0KiBjb25maWdPYmplY3Qp
Cit7CisgICAgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY29sb3JPYmplY3QgPSBjb25m
aWdPYmplY3QtPmdldE9iamVjdChmaWVsZE5hbWUpOworICAgIHJldHVybiBwYXJzZUNvbG9yKCZj
b2xvck9iamVjdCk7Cit9CisKIFBhdGggcXVhZFRvUGF0aChjb25zdCBGbG9hdFF1YWQmIHF1YWQp
CiB7CiAgICAgUGF0aCBxdWFkUGF0aDsKQEAgLTQ2Miw5ICs0OTgsOSBAQCBzdGF0aWMgdm9pZCBn
ZXRPckRyYXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgSGlnaGxpZ2h0
RGF0YSogaGlnaAogICAgICAgICBkcmF3RWxlbWVudFRpdGxlKCpjb250ZXh0LCBub2RlLCByZW5k
ZXJlciwgcGl4ZWxTbmFwcGVkSW50UmVjdChib3VuZGluZ0JveCksIHBpeGVsU25hcHBlZEludFJl
Y3QodGl0bGVBbmNob3JCb3gpLCB2aXNpYmxlUmVjdCwgY29udGFpbmluZ0ZyYW1lLT5zZXR0aW5n
cygpKTsKIH0KIAotc3RhdGljIHZvaWQgZ2V0T3JEcmF3UmVjdEhpZ2hsaWdodChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIERvY3VtZW50KiBkb2N1bWVudCwgSGlnaGxpZ2h0RGF0YSogaGlnaGxp
Z2h0RGF0YSwgSGlnaGxpZ2h0ICpoaWdobGlnaHQpCitzdGF0aWMgdm9pZCBnZXRPckRyYXdSZWN0
SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUGFnZSogcGFnZSwgSGlnaGxpZ2h0
RGF0YSogaGlnaGxpZ2h0RGF0YSwgSGlnaGxpZ2h0ICpoaWdobGlnaHQpCiB7Ci0gICAgaWYgKCFk
b2N1bWVudCkKKyAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIAogICAgIEZsb2F0UmVj
dCBoaWdobGlnaHRSZWN0KCooaGlnaGxpZ2h0RGF0YS0+cmVjdCkpOwpAQCAtNDczLDcgKzUwOSw3
IEBAIHN0YXRpYyB2b2lkIGdldE9yRHJhd1JlY3RIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBEb2N1bWVudCogZG9jdW1lbnQsCiAgICAgaGlnaGxpZ2h0LT5xdWFkcy5hcHBlbmQo
aGlnaGxpZ2h0UmVjdCk7CiAKICAgICBpZiAoY29udGV4dCkgewotICAgICAgICBGcmFtZVZpZXcq
IHZpZXcgPSBkb2N1bWVudC0+ZnJhbWUoKS0+dmlldygpOworICAgICAgICBGcmFtZVZpZXcqIHZp
ZXcgPSBwYWdlLT5tYWluRnJhbWUoKS0+dmlldygpOwogICAgICAgICBpZiAoIXZpZXctPmRlbGVn
YXRlc1Njcm9sbGluZygpKSB7CiAgICAgICAgICAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QgPSB2
aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKICAgICAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0
ZSgtdmlzaWJsZVJlY3QueCgpLCAtdmlzaWJsZVJlY3QueSgpKTsKQEAgLTQ4NSw0NCArNTIxLDE2
NSBAQCBzdGF0aWMgdm9pZCBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgRG9jdW1lbnQqIGRvY3VtZW50LAogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UK
IAotbmFtZXNwYWNlIERPTU5vZGVIaWdobGlnaHRlciB7CitJbnNwZWN0b3JPdmVybGF5OjpJbnNw
ZWN0b3JPdmVybGF5KFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQorICAgIDog
bV9wYWdlKHBhZ2UpCisgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX3BhdXNlZEluRGVi
dWdnZXIoZmFsc2UpCit7Cit9CiAKLXZvaWQgZHJhd0hpZ2hsaWdodChHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIERvY3VtZW50KiBkb2N1bWVudCwgSGlnaGxpZ2h0RGF0YSogaGlnaGxpZ2h0RGF0
YSkKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KQogewotICAgIGlmICghaGlnaGxpZ2h0RGF0YSkKLSAgICAgICAgcmV0dXJuOworICAgIGRyYXdQ
YXVzZWRJbkRlYnVnZ2VyKGNvbnRleHQpOworICAgIGRyYXdIaWdobGlnaHQoY29udGV4dCk7Cit9
CiAKLSAgICBIaWdobGlnaHQgaGlnaGxpZ2h0OwotICAgIGlmIChoaWdobGlnaHREYXRhLT5ub2Rl
KQotICAgICAgICBnZXRPckRyYXdOb2RlSGlnaGxpZ2h0KCZjb250ZXh0LCBoaWdobGlnaHREYXRh
LCAmaGlnaGxpZ2h0KTsKLSAgICBlbHNlIGlmIChoaWdobGlnaHREYXRhLT5yZWN0KQotICAgICAg
ICBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0KCZjb250ZXh0LCBkb2N1bWVudCwgaGlnaGxpZ2h0RGF0
YSwgJmhpZ2hsaWdodCk7Cit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdPdXRsaW5lKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQoreworICAgIEZsb2F0UmVjdCBvdXRsaW5lUmVjdCA9IHJlY3Q7CisgICAgZHJhd091
dGxpbmVkUXVhZChjb250ZXh0LCBvdXRsaW5lUmVjdCwgQ29sb3IoKSwgY29sb3IpOwogfQogCi12
b2lkIGdldEhpZ2hsaWdodChEb2N1bWVudCogZG9jdW1lbnQsIEhpZ2hsaWdodERhdGEqIGhpZ2hs
aWdodERhdGEsIEhpZ2hsaWdodCogaGlnaGxpZ2h0KQordm9pZCBJbnNwZWN0b3JPdmVybGF5Ojpn
ZXRIaWdobGlnaHQoSGlnaGxpZ2h0KiBoaWdobGlnaHQpIGNvbnN0CiB7Ci0gICAgaWYgKCFoaWdo
bGlnaHREYXRhKQorICAgIGlmICghbV9oaWdobGlnaHREYXRhKQogICAgICAgICByZXR1cm47CiAK
LSAgICBoaWdobGlnaHQtPmNvbnRlbnRDb2xvciA9IGhpZ2hsaWdodERhdGEtPmNvbnRlbnQ7Ci0g
ICAgaGlnaGxpZ2h0LT5wYWRkaW5nQ29sb3IgPSBoaWdobGlnaHREYXRhLT5wYWRkaW5nOwotICAg
IGhpZ2hsaWdodC0+Ym9yZGVyQ29sb3IgPSBoaWdobGlnaHREYXRhLT5ib3JkZXI7Ci0gICAgaGln
aGxpZ2h0LT5tYXJnaW5Db2xvciA9IGhpZ2hsaWdodERhdGEtPm1hcmdpbjsKKyAgICBoaWdobGln
aHQtPmNvbnRlbnRDb2xvciA9IG1faGlnaGxpZ2h0RGF0YS0+Y29udGVudDsKKyAgICBoaWdobGln
aHQtPnBhZGRpbmdDb2xvciA9IG1faGlnaGxpZ2h0RGF0YS0+cGFkZGluZzsKKyAgICBoaWdobGln
aHQtPmJvcmRlckNvbG9yID0gbV9oaWdobGlnaHREYXRhLT5ib3JkZXI7CisgICAgaGlnaGxpZ2h0
LT5tYXJnaW5Db2xvciA9IG1faGlnaGxpZ2h0RGF0YS0+bWFyZ2luOwogICAgIGhpZ2hsaWdodC0+
dHlwZSA9IEhpZ2hsaWdodFR5cGVSZWN0czsKIAotICAgIGlmIChoaWdobGlnaHREYXRhLT5ub2Rl
KQotICAgICAgICBnZXRPckRyYXdOb2RlSGlnaGxpZ2h0KDAsIGhpZ2hsaWdodERhdGEsIGhpZ2hs
aWdodCk7Ci0gICAgZWxzZSBpZiAoaGlnaGxpZ2h0RGF0YS0+cmVjdCkKLSAgICAgICAgZ2V0T3JE
cmF3UmVjdEhpZ2hsaWdodCgwLCBkb2N1bWVudCwgaGlnaGxpZ2h0RGF0YSwgaGlnaGxpZ2h0KTsK
KyAgICBpZiAobV9oaWdobGlnaHREYXRhLT5ub2RlKQorICAgICAgICBnZXRPckRyYXdOb2RlSGln
aGxpZ2h0KDAsIG1faGlnaGxpZ2h0RGF0YS5nZXQoKSwgaGlnaGxpZ2h0KTsKKyAgICBlbHNlIGlm
IChtX2hpZ2hsaWdodERhdGEtPnJlY3QpCisgICAgICAgIGdldE9yRHJhd1JlY3RIaWdobGlnaHQo
MCwgbV9wYWdlLCBtX2hpZ2hsaWdodERhdGEuZ2V0KCksIGhpZ2hsaWdodCk7CiB9CiAKLXZvaWQg
ZHJhd091dGxpbmUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnNldFBhdXNl
ZEluRGVidWdnZXIoYm9vbCBmbGFnKQogewotICAgIEZsb2F0UmVjdCBvdXRsaW5lUmVjdCA9IHJl
Y3Q7Ci0gICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBvdXRsaW5lUmVjdCwgQ29sb3IoKSwg
Y29sb3IpOworICAgIG1fcGF1c2VkSW5EZWJ1Z2dlciA9IGZsYWc7CisgICAgdXBkYXRlKCk7CiB9
CiAKLX0gLy8gbmFtZXNwYWNlIERPTU5vZGVIaWdobGlnaHRlcgordm9pZCBJbnNwZWN0b3JPdmVy
bGF5OjpoaWRlSGlnaGxpZ2h0KCkKK3sKKyAgICBpZiAobV9oaWdobGlnaHREYXRhKSB7CisgICAg
ICAgIG1faGlnaGxpZ2h0RGF0YS0+cmVjdC5jbGVhcigpOworICAgICAgICBtX2hpZ2hsaWdodERh
dGEtPm5vZGUuY2xlYXIoKTsKKyAgICB9CisgICAgbV9oaWdobGlnaHREYXRhLmNsZWFyKCk7Cisg
ICAgdXBkYXRlKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6aGlnaGxpZ2h0Tm9kZShO
b2RlKiBub2RlKQoreworICAgIGlmIChtX2hpZ2hsaWdodERhdGEpCisgICAgICAgIG1faGlnaGxp
Z2h0RGF0YS0+bm9kZSA9IG5vZGU7CisgICAgdXBkYXRlKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
T3ZlcmxheTo6aGlnaGxpZ2h0UmVjdChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdo
dCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0Piogb3V0bGluZUNvbG9yKQoreworICAgIG1faGlnaGxpZ2h0RGF0YSA9IGFk
b3B0UHRyKG5ldyBIaWdobGlnaHREYXRhKCkpOworICAgIG1faGlnaGxpZ2h0RGF0YS0+cmVjdCA9
IGFkb3B0UHRyKG5ldyBJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKKyAgICBtX2hpZ2hs
aWdodERhdGEtPmNvbnRlbnQgPSBwYXJzZUNvbG9yKGNvbG9yKTsKKyAgICBtX2hpZ2hsaWdodERh
dGEtPmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb2xvcihvdXRsaW5lQ29sb3IpOworICAgIHVwZGF0
ZSgpOworfQorCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmhpZ2hsaWdodEZyYW1lKEZyYW1lKiBm
cmFtZSwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGNvbG9yLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0Piogb3V0bGluZUNvbG9yKQoreworICAgIG1faGlnaGxpZ2h0RGF0YSA9
IGFkb3B0UHRyKG5ldyBIaWdobGlnaHREYXRhKCkpOworICAgIG1faGlnaGxpZ2h0RGF0YS0+bm9k
ZSA9IGZyYW1lLT5vd25lckVsZW1lbnQoKTsKKyAgICBtX2hpZ2hsaWdodERhdGEtPnNob3dJbmZv
ID0gdHJ1ZTsgLy8gQWx3YXlzIHNob3cgdG9vbHRpcHMgZm9yIGZyYW1lcy4KKyAgICBtX2hpZ2hs
aWdodERhdGEtPmNvbnRlbnQgPSBwYXJzZUNvbG9yKGNvbG9yKTsKKyAgICBtX2hpZ2hsaWdodERh
dGEtPmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb2xvcihvdXRsaW5lQ29sb3IpOworICAgIHVwZGF0
ZSgpOworfQorCitib29sIEluc3BlY3Rvck92ZXJsYXk6OnNldEhpZ2hsaWdodERhdGFGcm9tQ29u
ZmlnKEluc3BlY3Rvck9iamVjdCogaGlnaGxpZ2h0Q29uZmlnKQoreworICAgIGlmICghaGlnaGxp
Z2h0Q29uZmlnKSB7CisgICAgICAgIG1faGlnaGxpZ2h0RGF0YS5jbGVhcigpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9oaWdobGlnaHREYXRhID0gYWRvcHRQdHIobmV3
IEhpZ2hsaWdodERhdGEoKSk7CisgICAgYm9vbCBzaG93SW5mbyA9IGZhbHNlOyAvLyBEZWZhdWx0
OiBmYWxzZSAoZG8gbm90IHNob3cgYSB0b29sdGlwKS4KKyAgICBoaWdobGlnaHRDb25maWctPmdl
dEJvb2xlYW4oInNob3dJbmZvIiwgJnNob3dJbmZvKTsKKyAgICBtX2hpZ2hsaWdodERhdGEtPnNo
b3dJbmZvID0gc2hvd0luZm87CisgICAgbV9oaWdobGlnaHREYXRhLT5jb250ZW50ID0gcGFyc2VD
b25maWdDb2xvcigiY29udGVudENvbG9yIiwgaGlnaGxpZ2h0Q29uZmlnKTsKKyAgICBtX2hpZ2hs
aWdodERhdGEtPmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb25maWdDb2xvcigiY29udGVudE91dGxp
bmVDb2xvciIsIGhpZ2hsaWdodENvbmZpZyk7CisgICAgbV9oaWdobGlnaHREYXRhLT5wYWRkaW5n
ID0gcGFyc2VDb25maWdDb2xvcigicGFkZGluZ0NvbG9yIiwgaGlnaGxpZ2h0Q29uZmlnKTsKKyAg
ICBtX2hpZ2hsaWdodERhdGEtPmJvcmRlciA9IHBhcnNlQ29uZmlnQ29sb3IoImJvcmRlckNvbG9y
IiwgaGlnaGxpZ2h0Q29uZmlnKTsKKyAgICBtX2hpZ2hsaWdodERhdGEtPm1hcmdpbiA9IHBhcnNl
Q29uZmlnQ29sb3IoIm1hcmdpbkNvbG9yIiwgaGlnaGxpZ2h0Q29uZmlnKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworTm9kZSogSW5zcGVjdG9yT3ZlcmxheTo6aGlnaGxpZ2h0ZWROb2RlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9oaWdobGlnaHREYXRhID8gbV9oaWdobGlnaHREYXRhLT5ub2Rl
LmdldCgpIDogMDsKK30KKwordm9pZCBJbnNwZWN0b3JPdmVybGF5Ojp1cGRhdGUoKQoreworICAg
IGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9oaWdobGlnaHREYXRh
IHx8IG1fcGF1c2VkSW5EZWJ1Z2dlcikKKyAgICAgICAgbV9jbGllbnQtPmhpZ2hsaWdodCgpOwor
ICAgIGVsc2UKKyAgICAgICAgbV9jbGllbnQtPmhpZGVIaWdobGlnaHQoKTsKK30KKwordm9pZCBJ
bnNwZWN0b3JPdmVybGF5OjpkcmF3SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkK
K3sKKyAgICBpZiAoIW1faGlnaGxpZ2h0RGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSGln
aGxpZ2h0IGhpZ2hsaWdodDsKKyAgICBpZiAobV9oaWdobGlnaHREYXRhLT5ub2RlKQorICAgICAg
ICBnZXRPckRyYXdOb2RlSGlnaGxpZ2h0KCZjb250ZXh0LCBtX2hpZ2hsaWdodERhdGEuZ2V0KCks
ICZoaWdobGlnaHQpOworICAgIGVsc2UgaWYgKG1faGlnaGxpZ2h0RGF0YS0+cmVjdCkKKyAgICAg
ICAgZ2V0T3JEcmF3UmVjdEhpZ2hsaWdodCgmY29udGV4dCwgbV9wYWdlLCBtX2hpZ2hsaWdodERh
dGEuZ2V0KCksICZoaWdobGlnaHQpOworfQorCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdQ
YXVzZWRJbkRlYnVnZ2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBpZiAoIW1f
cGF1c2VkSW5EZWJ1Z2dlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChDb2xvciwgYmFja2dyb3VuZENvbG9yLCAoMCwgMCwgMCwgMzEpKTsKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKENvbG9yLCB0ZXh0QmFja2dyb3VuZENvbG9yLCAoMjU1LCAyNTUsIDE5NCkp
OworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIGJvcmRlckNvbG9yLCAoMTI4LCAxMjgs
IDEyOCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoaW50LCBmb250SGVpZ2h0LCAoMjQpKTsK
KworICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCk7CisgICAgU2V0dGluZ3Mq
IHNldHRpbmdzID0gZnJhbWUtPnNldHRpbmdzKCk7CisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9
IGZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpOworCisgICAgY29udGV4dC5zZXRG
aWxsQ29sb3IoYmFja2dyb3VuZENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250
ZXh0LmRyYXdSZWN0KHZpc2libGVSZWN0KTsKKworICAgIEZvbnREZXNjcmlwdGlvbiBkZXNjOwor
ICAgIHNldFVwRm9udERlc2NyaXB0aW9uKGRlc2MsIHNldHRpbmdzKTsKKyAgICBkZXNjLnNldENv
bXB1dGVkU2l6ZShmb250SGVpZ2h0KTsKKyAgICBGb250IGZvbnQgPSBGb250KGRlc2MsIDAsIDAp
OworICAgIGZvbnQudXBkYXRlKDApOworCisgICAgU3RyaW5nIHRleHQgPSAiUGF1c2VkIGluIGRl
YnVnZ2VyLiI7CisgICAgVGV4dFJ1biB0ZXh0UnVuKHRleHQpOworICAgIEludFJlY3QgdGl0bGVS
ZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4s
IEludFBvaW50KCksIGZvbnRIZWlnaHQpKTsKKyAgICB0aXRsZVJlY3QuaW5mbGF0ZShyZWN0SW5m
bGF0ZVB4KTsKKyAgICB0aXRsZVJlY3Quc2V0TG9jYXRpb24oSW50UG9pbnQodmlzaWJsZVJlY3Qu
d2lkdGgoKSAvIDIgLSB0aXRsZVJlY3Qud2lkdGgoKSAvIDIsIDApKTsKKworICAgIGNvbnRleHQu
c2V0RmlsbENvbG9yKHRleHRCYWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwor
ICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoYm9yZGVyQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VS
R0IpOworICAgIGNvbnRleHQuZHJhd1JlY3QodGl0bGVSZWN0KTsKKyAgICBjb250ZXh0LnNldEZp
bGxDb2xvcihDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQu
ZHJhd1RleHQoZm9udCwgdGV4dFJ1biwgSW50UG9pbnQodGl0bGVSZWN0LngoKSArIHJlY3RJbmZs
YXRlUHgsIHRpdGxlUmVjdC55KCkgKyBmb250SGVpZ2h0KSk7Cit9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVI
aWdobGlnaHRlci5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRl
ci5oCmluZGV4IGY3YjZmMDBmNGZmZTAyNTkxMzU1MjU0ZGZlMTkzZDAzMDYyY2UzZDkuLjkxNjc2
YThjNjM4OTE1YzQyOGZlNGNhNDQ1ZWRlNTdkYTFiMDBkYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmgKQEAgLTMyLDggKzMyLDEwIEBACiAjaW5j
bHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJMYXlvdXRU
eXBlcy5oIgorI2luY2x1ZGUgIk5vZGUuaCIKIAogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTQxLDkgKzQzLDE1IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgQ29sb3I7CiBjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEZyYW1lOwogY2xhc3Mg
RnJhbWVWaWV3OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgSW5zcGVjdG9yQ2xpZW50
OworY2xhc3MgSW5zcGVjdG9yT2JqZWN0OworY2xhc3MgSW50UmVjdDsKK2NsYXNzIEludFNpemU7
CiBjbGFzcyBOb2RlOworY2xhc3MgUGFnZTsKIAogc3RydWN0IEhpZ2hsaWdodERhdGEgewogICAg
IENvbG9yIGNvbnRlbnQ7CkBAIC03NSwxMyArODMsMzkgQEAgc3RydWN0IEhpZ2hsaWdodCB7CiAg
ICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CiB9OwogCi1uYW1lc3BhY2UgRE9NTm9kZUhpZ2hs
aWdodGVyIHsKK2NsYXNzIEluc3BlY3Rvck92ZXJsYXkgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzT3duUHRyPEluc3BlY3Rvck92ZXJsYXk+IGNyZWF0ZShQYWdlKiBwYWdlLCBJbnNwZWN0b3JD
bGllbnQqIGNsaWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5zcGVj
dG9yT3ZlcmxheShwYWdlLCBjbGllbnQpKTsKKyAgICB9CiAKLXZvaWQgZHJhd0hpZ2hsaWdodChH
cmFwaGljc0NvbnRleHQmLCBEb2N1bWVudCosIEhpZ2hsaWdodERhdGEqKTsKLXZvaWQgZ2V0SGln
aGxpZ2h0KERvY3VtZW50KiwgSGlnaGxpZ2h0RGF0YSosIEhpZ2hsaWdodCopOwotdm9pZCBkcmF3
T3V0bGluZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiwgY29uc3QgQ29sb3Im
KTsKKyAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYpOworICAgIHZvaWQgZHJhd091dGxp
bmUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IENvbG9yJik7Cisg
ICAgdm9pZCBnZXRIaWdobGlnaHQoSGlnaGxpZ2h0KikgY29uc3Q7CiAKLX0gLy8gbmFtZXNwYWNl
IERPTU5vZGVIaWdobGlnaHRlcgorICAgIHZvaWQgc2V0UGF1c2VkSW5EZWJ1Z2dlcihib29sKTsK
KworICAgIHZvaWQgaGlkZUhpZ2hsaWdodCgpOworICAgIHZvaWQgaGlnaGxpZ2h0Tm9kZShOb2Rl
Kik7CisgICAgdm9pZCBoaWdobGlnaHRSZWN0KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogY29sb3IsIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+KiBvdXRsaW5lQ29sb3IpOworICAgIHZvaWQgaGlnaGxpZ2h0RnJh
bWUoRnJhbWUqLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogY29sb3IsIGNvbnN0IFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBvdXRsaW5lQ29sb3IpOworICAgIGJvb2wgc2V0SGlnaGxp
Z2h0RGF0YUZyb21Db25maWcoSW5zcGVjdG9yT2JqZWN0KiBoaWdobGlnaHRDb25maWcpOworCisg
ICAgTm9kZSogaGlnaGxpZ2h0ZWROb2RlKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgSW5zcGVj
dG9yT3ZlcmxheShQYWdlKiwgSW5zcGVjdG9yQ2xpZW50Kik7CisKKyAgICB2b2lkIHVwZGF0ZSgp
OworICAgIHZvaWQgZHJhd0hpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmKTsKKyAgICB2b2lkIGRy
YXdQYXVzZWRJbkRlYnVnZ2VyKEdyYXBoaWNzQ29udGV4dCYpOworCisgICAgUGFnZSogbV9wYWdl
OworICAgIEluc3BlY3RvckNsaWVudCogbV9jbGllbnQ7CisgICAgYm9vbCBtX3BhdXNlZEluRGVi
dWdnZXI7CisgICAgT3duUHRyPEhpZ2hsaWdodERhdGE+IG1faGlnaGxpZ2h0RGF0YTsKK307CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDkxMmJiYWFkNjJmM2RiYTQ1NmZmM2RjMGE3
Y2M1N2YxODcxMjUyNzMuLmNkODgxNjRiOGVhYmVlYzgwNDI0OGJmZjFiZjFkYmM2NTI1NGUxNWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5j
cHAKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIK
IAorI2luY2x1ZGUgIkRPTU5vZGVIaWdobGlnaHRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllcnNGYWN0b3J5
LmgiCkBAIC03OCw2ICs3OSw3IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRy
b2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDCiAgICAgOiBtX2lu
c3RydW1lbnRpbmdBZ2VudHMoYWRvcHRQdHIobmV3IEluc3RydW1lbnRpbmdBZ2VudHMoKSkpCiAg
ICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlcihJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNyZWF0
ZUZvclBhZ2UoKSkKICAgICAsIG1fc3RhdGUoYWRvcHRQdHIobmV3IEluc3BlY3RvclN0YXRlKGlu
c3BlY3RvckNsaWVudCkpKQorICAgICwgbV9vdmVybGF5KEluc3BlY3Rvck92ZXJsYXk6OmNyZWF0
ZShwYWdlLCBpbnNwZWN0b3JDbGllbnQpKQogICAgICwgbV9wYWdlKHBhZ2UpCiAgICAgLCBtX2lu
c3BlY3RvckNsaWVudChpbnNwZWN0b3JDbGllbnQpCiB7CkBAIC04NSwxMiArODcsMTIgQEAgSW5z
cGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0
b3JDbGllbnQqIGluc3BlY3RvckMKICAgICBtX2luc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdl
bnRQdHIuZ2V0KCk7CiAgICAgbV9hZ2VudHMuYXBwZW5kKGluc3BlY3RvckFnZW50UHRyLnJlbGVh
c2UoKSk7CiAKLSAgICBPd25QdHI8SW5zcGVjdG9yUGFnZUFnZW50PiBwYWdlQWdlbnRQdHIoSW5z
cGVjdG9yUGFnZUFnZW50OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBwYWdl
LCBtX2luc3BlY3RvckFnZW50LCBtX3N0YXRlLmdldCgpLCBtX2luamVjdGVkU2NyaXB0TWFuYWdl
ci5nZXQoKSwgaW5zcGVjdG9yQ2xpZW50KSk7CisgICAgT3duUHRyPEluc3BlY3RvclBhZ2VBZ2Vu
dD4gcGFnZUFnZW50UHRyKEluc3BlY3RvclBhZ2VBZ2VudDo6Y3JlYXRlKG1faW5zdHJ1bWVudGlu
Z0FnZW50cy5nZXQoKSwgcGFnZSwgbV9pbnNwZWN0b3JBZ2VudCwgbV9zdGF0ZS5nZXQoKSwgbV9p
bmplY3RlZFNjcmlwdE1hbmFnZXIuZ2V0KCksIGluc3BlY3RvckNsaWVudCwgbV9vdmVybGF5Lmdl
dCgpKSk7CiAgICAgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQgPSBwYWdlQWdlbnRQdHIu
Z2V0KCk7CiAgICAgbV9wYWdlQWdlbnQgPSBwYWdlQWdlbnRQdHIuZ2V0KCk7CiAgICAgbV9hZ2Vu
dHMuYXBwZW5kKHBhZ2VBZ2VudFB0ci5yZWxlYXNlKCkpOwogCi0gICAgT3duUHRyPEluc3BlY3Rv
ckRPTUFnZW50PiBkb21BZ2VudFB0cihJbnNwZWN0b3JET01BZ2VudDo6Y3JlYXRlKG1faW5zdHJ1
bWVudGluZ0FnZW50cy5nZXQoKSwgcGFnZUFnZW50LCBpbnNwZWN0b3JDbGllbnQsIG1fc3RhdGUu
Z2V0KCksIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpKSk7CisgICAgT3duUHRyPEluc3Bl
Y3RvckRPTUFnZW50PiBkb21BZ2VudFB0cihJbnNwZWN0b3JET01BZ2VudDo6Y3JlYXRlKG1faW5z
dHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgcGFnZUFnZW50LCBtX3N0YXRlLmdldCgpLCBtX2luamVj
dGVkU2NyaXB0TWFuYWdlci5nZXQoKSwgbV9vdmVybGF5LmdldCgpKSk7CiAgICAgbV9kb21BZ2Vu
dCA9IGRvbUFnZW50UHRyLmdldCgpOwogICAgIG1fYWdlbnRzLmFwcGVuZChkb21BZ2VudFB0ci5y
ZWxlYXNlKCkpOwogCkBAIC0xMzAsNyArMTMyLDcgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5z
cGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckMK
ICAgICBtX2FnZW50cy5hcHBlbmQoY29uc29sZUFnZW50UHRyLnJlbGVhc2UoKSk7CiAKICNpZiBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICBPd25QdHI8SW5zcGVjdG9yRGVidWdnZXJB
Z2VudD4gZGVidWdnZXJBZ2VudFB0cihQYWdlRGVidWdnZXJBZ2VudDo6Y3JlYXRlKG1faW5zdHJ1
bWVudGluZ0FnZW50cy5nZXQoKSwgbV9zdGF0ZS5nZXQoKSwgcGFnZSwgbV9pbmplY3RlZFNjcmlw
dE1hbmFnZXIuZ2V0KCkpKTsKKyAgICBPd25QdHI8SW5zcGVjdG9yRGVidWdnZXJBZ2VudD4gZGVi
dWdnZXJBZ2VudFB0cihQYWdlRGVidWdnZXJBZ2VudDo6Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy5nZXQoKSwgbV9zdGF0ZS5nZXQoKSwgcGFnZSwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIu
Z2V0KCksIG1fb3ZlcmxheS5nZXQoKSkpOwogICAgIG1fZGVidWdnZXJBZ2VudCA9IGRlYnVnZ2Vy
QWdlbnRQdHIuZ2V0KCk7CiAgICAgbV9hZ2VudHMuYXBwZW5kKGRlYnVnZ2VyQWdlbnRQdHIucmVs
ZWFzZSgpKTsKIApAQCAtMjk3LDcgKzI5OSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzCiAK
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZHJhd0hpZ2hsaWdodChHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0CiB7Ci0gICAgbV9kb21BZ2VudC0+ZHJhd0hpZ2hsaWdodChjb250ZXh0
KTsKKyAgICBtX292ZXJsYXktPnBhaW50KGNvbnRleHQpOwogfQogCiB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OmdldEhpZ2hsaWdodChIaWdobGlnaHQqIGhpZ2hsaWdodCkgY29uc3QKQEAgLTM0
NCw3ICszNDYsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmhpZGVIaWdobGlnaHQoKQog
CiBOb2RlKiBJbnNwZWN0b3JDb250cm9sbGVyOjpoaWdobGlnaHRlZE5vZGUoKSBjb25zdAogewot
ICAgIHJldHVybiBtX2RvbUFnZW50LT5oaWdobGlnaHRlZE5vZGUoKTsKKyAgICByZXR1cm4gbV9v
dmVybGF5LT5oaWdobGlnaHRlZE5vZGUoKTsKIH0KIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RF
QlVHR0VSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmgKaW5kZXggYjdlMWNiZmQ4NDE3MTM0NDVhNzY4ZWM0NmJkOTkxZWZjNzRmN2U5Ni4uOTA5OTZl
NWU5NGEzODk1OGU4ODFlZWIxMGI5OTc5OTJkNzQ4NjZmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC01Miw2ICs1Miw3IEBAIGNsYXNz
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKIGNsYXNz
IEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2xpZW50
OworY2xhc3MgSW5zcGVjdG9yT3ZlcmxheTsKIGNsYXNzIEluc3BlY3RvclBhZ2VBZ2VudDsKIGNs
YXNzIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JSZXNvdXJjZUFnZW50
OwpAQCAtMTIwLDYgKzEyMSw3IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPEluc3RydW1lbnRpbmdB
Z2VudHM+IG1faW5zdHJ1bWVudGluZ0FnZW50czsKICAgICBPd25QdHI8SW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyPiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKICAgICBPd25QdHI8SW5zcGVjdG9yU3Rh
dGU+IG1fc3RhdGU7CisgICAgT3duUHRyPEluc3BlY3Rvck92ZXJsYXk+IG1fb3ZlcmxheTsKIAog
ICAgIEluc3BlY3RvckFnZW50KiBtX2luc3BlY3RvckFnZW50OwogICAgIEluc3BlY3RvckRPTUFn
ZW50KiBtX2RvbUFnZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5jcHAKaW5kZXggOTA3OTU4OWU1MWNlOGYwOGU1MGUyMDZlNDlhMTMyNmJlOTVjMzAx
Mi4uMjY2MmVkMDc2NzM3YWJjYTJmNjc2MWVlNmUzNzdhNDhlYjM4MDcyMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC02Niw3ICs2Niw2
IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIklkZW50aWZpZXJzRmFj
dG9yeS5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0TWFuYWdlci5oIgotI2luY2x1ZGUgIklu
c3BlY3RvckNsaWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9ySGlzdG9yeS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclBhZ2VBZ2VudC5oIgpA
QCAtMTE0LDQwICsxMTMsNiBAQCBzdGF0aWMgY29uc3QgY2hhciB0b3VjaEV2ZW50RW11bGF0aW9u
RW5hYmxlZFtdID0gInRvdWNoRXZlbnRFbXVsYXRpb25FbmFibGVkIjsKIHN0YXRpYyBjb25zdCBz
aXplX3QgbWF4VGV4dFNpemUgPSAxMDAwMDsKIHN0YXRpYyBjb25zdCBVQ2hhciBlbGxpcHNpc1VD
aGFyW10gPSB7IDB4MjAyNiwgMCB9OwogCi1zdGF0aWMgQ29sb3IgcGFyc2VDb2xvcihjb25zdCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogY29sb3JPYmplY3QpCi17Ci0gICAgaWYgKCFjb2xvck9i
amVjdCB8fCAhKCpjb2xvck9iamVjdCkpCi0gICAgICAgIHJldHVybiBDb2xvcjo6dHJhbnNwYXJl
bnQ7Ci0KLSAgICBpbnQgcjsKLSAgICBpbnQgZzsKLSAgICBpbnQgYjsKLSAgICBib29sIHN1Y2Nl
c3MgPSAoKmNvbG9yT2JqZWN0KS0+Z2V0TnVtYmVyKCJyIiwgJnIpOwotICAgIHN1Y2Nlc3MgfD0g
KCpjb2xvck9iamVjdCktPmdldE51bWJlcigiZyIsICZnKTsKLSAgICBzdWNjZXNzIHw9ICgqY29s
b3JPYmplY3QpLT5nZXROdW1iZXIoImIiLCAmYik7Ci0gICAgaWYgKCFzdWNjZXNzKQotICAgICAg
ICByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50OwotCi0gICAgZG91YmxlIGE7Ci0gICAgc3VjY2Vz
cyA9ICgqY29sb3JPYmplY3QpLT5nZXROdW1iZXIoImEiLCAmYSk7Ci0gICAgaWYgKCFzdWNjZXNz
KQotICAgICAgICByZXR1cm4gQ29sb3IociwgZywgYik7Ci0KLSAgICAvLyBDbGFtcCBhbHBoYSB0
byB0aGUgWzAuLjFdIHJhbmdlLgotICAgIGlmIChhIDwgMCkKLSAgICAgICAgYSA9IDA7Ci0gICAg
ZWxzZSBpZiAoYSA+IDEpCi0gICAgICAgIGEgPSAxOwotCi0gICAgcmV0dXJuIENvbG9yKHIsIGcs
IGIsIHN0YXRpY19jYXN0PGludD4oYSAqIDI1NSkpOwotfQotCi1zdGF0aWMgQ29sb3IgcGFyc2VD
b25maWdDb2xvcihjb25zdCBTdHJpbmcmIGZpZWxkTmFtZSwgSW5zcGVjdG9yT2JqZWN0KiBjb25m
aWdPYmplY3QpCi17Ci0gICAgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY29sb3JPYmpl
Y3QgPSBjb25maWdPYmplY3QtPmdldE9iamVjdChmaWVsZE5hbWUpOwotICAgIHJldHVybiBwYXJz
ZUNvbG9yKCZjb2xvck9iamVjdCk7Ci19Ci0KIGNsYXNzIFJldmFsaWRhdGVTdHlsZUF0dHJpYnV0
ZVRhc2sgewogcHVibGljOgogICAgIFJldmFsaWRhdGVTdHlsZUF0dHJpYnV0ZVRhc2soSW5zcGVj
dG9yRE9NQWdlbnQqKTsKQEAgLTE5NCwxMSArMTU5LDExIEBAIFN0cmluZyBJbnNwZWN0b3JET01B
Z2VudDo6dG9FcnJvclN0cmluZyhjb25zdCBFeGNlcHRpb25Db2RlJiBlYykKICAgICByZXR1cm4g
IiI7CiB9CiAKLUluc3BlY3RvckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2VudChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VB
Z2VudCwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JT
dGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCitJbnNw
ZWN0b3JET01BZ2VudDo6SW5zcGVjdG9yRE9NQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5z
dHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIEluc3BlY3Rv
clN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNj
cmlwdE1hbmFnZXIsIEluc3BlY3Rvck92ZXJsYXkqIG92ZXJsYXkpCiAgICAgOiBJbnNwZWN0b3JC
YXNlQWdlbnQ8SW5zcGVjdG9yRE9NQWdlbnQ+KCJET00iLCBpbnN0cnVtZW50aW5nQWdlbnRzLCBp
bnNwZWN0b3JTdGF0ZSkKICAgICAsIG1fcGFnZUFnZW50KHBhZ2VBZ2VudCkKLSAgICAsIG1fY2xp
ZW50KGNsaWVudCkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKGluamVjdGVkU2NyaXB0
TWFuYWdlcikKKyAgICAsIG1fb3ZlcmxheShvdmVybGF5KQogICAgICwgbV9mcm9udGVuZCgwKQog
ICAgICwgbV9kb21MaXN0ZW5lcigwKQogICAgICwgbV9sYXN0Tm9kZUlkKDEpCkBAIC0yMTAsNyAr
MTc1LDYgQEAgSW5zcGVjdG9yRE9NQWdlbnQ6Okluc3BlY3RvckRPTUFnZW50KEluc3RydW1lbnRp
bmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEkKIEluc3BlY3RvckRPTUFnZW50Ojp+SW5z
cGVjdG9yRE9NQWdlbnQoKQogewogICAgIHJlc2V0KCk7Ci0gICAgQVNTRVJUKCFtX2hpZ2hsaWdo
dERhdGEgfHwgKCFtX2hpZ2hsaWdodERhdGEtPm5vZGUgJiYgIW1faGlnaGxpZ2h0RGF0YS0+cmVj
dCkpOwogICAgIEFTU0VSVCghbV9zZWFyY2hpbmdGb3JOb2RlKTsKIH0KIApAQCAtMjcwLDExICsy
MzQsNiBAQCBWZWN0b3I8RG9jdW1lbnQqPiBJbnNwZWN0b3JET01BZ2VudDo6ZG9jdW1lbnRzKCkK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1Ob2RlKiBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxp
Z2h0ZWROb2RlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9oaWdobGlnaHREYXRhID8gbV9oaWdo
bGlnaHREYXRhLT5ub2RlLmdldCgpIDogMDsKLX0KLQogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
cmVzZXQoKQogewogICAgIGlmIChtX2hpc3RvcnkpCkBAIC05MzgsMTAgKzg5Nyw4IEBAIGJvb2wg
SW5zcGVjdG9yRE9NQWdlbnQ6OmhhbmRsZU1vdXNlUHJlc3MoKQogICAgIGlmICghbV9zZWFyY2hp
bmdGb3JOb2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9oaWdobGlnaHRE
YXRhICYmIG1faGlnaGxpZ2h0RGF0YS0+bm9kZSkgewotICAgICAgICBSZWZQdHI8Tm9kZT4gbm9k
ZSA9IG1faGlnaGxpZ2h0RGF0YS0+bm9kZTsKLSAgICAgICAgaW5zcGVjdChub2RlLmdldCgpKTsK
LSAgICB9CisgICAgaWYgKE5vZGUqIG5vZGUgPSBtX292ZXJsYXktPmhpZ2hsaWdodGVkTm9kZSgp
KQorICAgICAgICBpbnNwZWN0KG5vZGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC05ODIs
MTYgKzkzOSwxNCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpmb2N1c05vZGUoKQogCiB2b2lk
IEluc3BlY3RvckRPTUFnZW50Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIHVuc2lnbmVkKQogewotICAgIGlmICghbV9zZWFyY2hpbmdGb3JOb2Rl
IHx8ICFtX2hpZ2hsaWdodERhdGEpCisgICAgaWYgKCFtX3NlYXJjaGluZ0Zvck5vZGUpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIE5vZGUqIG5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CiAgICAg
d2hpbGUgKG5vZGUgJiYgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUpCiAgICAg
ICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKG5vZGUpIHsKLSAgICAgICAg
bV9oaWdobGlnaHREYXRhLT5ub2RlID0gbm9kZTsKLSAgICAgICAgaGlnaGxpZ2h0KCk7Ci0gICAg
fQorICAgIGlmIChub2RlKQorICAgICAgICBtX292ZXJsYXktPmhpZ2hsaWdodE5vZGUobm9kZSk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBl
bmFibGVkLCBJbnNwZWN0b3JPYmplY3QqIGhpZ2hsaWdodENvbmZpZykKQEAgLTEwMDAsMTEgKzk1
NSwxMCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wg
ZW5hYmxlZCwgSW5zcGVjdG9yT2JqZWN0KiBoaWdobAogICAgICAgICByZXR1cm47CiAgICAgbV9z
ZWFyY2hpbmdGb3JOb2RlID0gZW5hYmxlZDsKICAgICBpZiAoZW5hYmxlZCkKLSAgICAgICAgc2V0
SGlnaGxpZ2h0RGF0YUZyb21Db25maWcoaGlnaGxpZ2h0Q29uZmlnKTsKKyAgICAgICAgbV9vdmVy
bGF5LT5zZXRIaWdobGlnaHREYXRhRnJvbUNvbmZpZyhoaWdobGlnaHRDb25maWcpOwogICAgIGVs
c2UgewogICAgICAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgICAgICAgaGlkZUhpZ2hsaWdodCgm
ZXJyb3IpOwotICAgICAgICBtX2hpZ2hsaWdodERhdGEuY2xlYXIoKTsKICAgICB9CiB9CiAKQEAg
LTEwMTMsMzkgKzk2Nyw5IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEluc3BlY3RNb2Rl
RW5hYmxlZChFcnJvclN0cmluZyosIGJvb2wgZW5hYmxlZCwgY29uc3QKICAgICBzZXRTZWFyY2hp
bmdGb3JOb2RlKGVuYWJsZWQsIGhpZ2hsaWdodENvbmZpZyA/IGhpZ2hsaWdodENvbmZpZy0+Z2V0
KCkgOiAwKTsKIH0KIAotYm9vbCBJbnNwZWN0b3JET01BZ2VudDo6c2V0SGlnaGxpZ2h0RGF0YUZy
b21Db25maWcoSW5zcGVjdG9yT2JqZWN0KiBoaWdobGlnaHRDb25maWcpCi17Ci0gICAgaWYgKCFo
aWdobGlnaHRDb25maWcpIHsKLSAgICAgICAgbV9oaWdobGlnaHREYXRhLmNsZWFyKCk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtX2hpZ2hsaWdodERhdGEgPSBhZG9wdFB0
cihuZXcgSGlnaGxpZ2h0RGF0YSgpKTsKLSAgICBib29sIHNob3dJbmZvID0gZmFsc2U7IC8vIERl
ZmF1bHQ6IGZhbHNlIChkbyBub3Qgc2hvdyBhIHRvb2x0aXApLgotICAgIGhpZ2hsaWdodENvbmZp
Zy0+Z2V0Qm9vbGVhbigic2hvd0luZm8iLCAmc2hvd0luZm8pOwotICAgIG1faGlnaGxpZ2h0RGF0
YS0+c2hvd0luZm8gPSBzaG93SW5mbzsKLSAgICBtX2hpZ2hsaWdodERhdGEtPmNvbnRlbnQgPSBw
YXJzZUNvbmZpZ0NvbG9yKCJjb250ZW50Q29sb3IiLCBoaWdobGlnaHRDb25maWcpOwotICAgIG1f
aGlnaGxpZ2h0RGF0YS0+Y29udGVudE91dGxpbmUgPSBwYXJzZUNvbmZpZ0NvbG9yKCJjb250ZW50
T3V0bGluZUNvbG9yIiwgaGlnaGxpZ2h0Q29uZmlnKTsKLSAgICBtX2hpZ2hsaWdodERhdGEtPnBh
ZGRpbmcgPSBwYXJzZUNvbmZpZ0NvbG9yKCJwYWRkaW5nQ29sb3IiLCBoaWdobGlnaHRDb25maWcp
OwotICAgIG1faGlnaGxpZ2h0RGF0YS0+Ym9yZGVyID0gcGFyc2VDb25maWdDb2xvcigiYm9yZGVy
Q29sb3IiLCBoaWdobGlnaHRDb25maWcpOwotICAgIG1faGlnaGxpZ2h0RGF0YS0+bWFyZ2luID0g
cGFyc2VDb25maWdDb2xvcigibWFyZ2luQ29sb3IiLCBoaWdobGlnaHRDb25maWcpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHQoKQotewot
ICAgIC8vIFRoaXMgbWV0aG9kIHJlcXVpcmVzIG1faGlnaGxpZ2h0RGF0YSB0byBoYXZlIGJlZW4g
ZmlsbGVkIGluIGJ5IGl0cyBjbGllbnQuCi0gICAgQVNTRVJUKG1faGlnaGxpZ2h0RGF0YSk7Ci0g
ICAgbV9jbGllbnQtPmhpZ2hsaWdodCgpOwotfQotCiB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpo
aWdobGlnaHRSZWN0KEVycm9yU3RyaW5nKiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBjb2xvciwgY29uc3QgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4qIG91dGxpbmVDb2xvcikKIHsKLSAgICBtX2hpZ2hsaWdodERhdGEg
PSBhZG9wdFB0cihuZXcgSGlnaGxpZ2h0RGF0YSgpKTsKLSAgICBtX2hpZ2hsaWdodERhdGEtPnJl
Y3QgPSBhZG9wdFB0cihuZXcgSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7Ci0gICAgbV9o
aWdobGlnaHREYXRhLT5jb250ZW50ID0gcGFyc2VDb2xvcihjb2xvcik7Ci0gICAgbV9oaWdobGln
aHREYXRhLT5jb250ZW50T3V0bGluZSA9IHBhcnNlQ29sb3Iob3V0bGluZUNvbG9yKTsKLSAgICBt
X2NsaWVudC0+aGlnaGxpZ2h0KCk7CisgICAgbV9vdmVybGF5LT5oaWdobGlnaHRSZWN0KHgsIHks
IHdpZHRoLCBoZWlnaHQsIGNvbG9yLCBvdXRsaW5lQ29sb3IpOwogfQogCiB2b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpoaWdobGlnaHROb2RlKApAQCAtMTA1MywxMiArOTc3LDkgQEAgdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Tm9kZSgKICAgICBpbnQgbm9kZUlkLAogICAgIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBoaWdobGlnaHRDb25maWcpCiB7Ci0gICAgaWYgKE5v
ZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKSkgewotICAgICAgICBpZiAoc2V0SGlnaGxpZ2h0
RGF0YUZyb21Db25maWcoaGlnaGxpZ2h0Q29uZmlnLmdldCgpKSkgewotICAgICAgICAgICAgbV9o
aWdobGlnaHREYXRhLT5ub2RlID0gbm9kZTsKLSAgICAgICAgICAgIGhpZ2hsaWdodCgpOwotICAg
ICAgICB9Ci0gICAgfQorICAgIGlmIChOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCkpCisg
ICAgICAgIGlmIChtX292ZXJsYXktPnNldEhpZ2hsaWdodERhdGFGcm9tQ29uZmlnKGhpZ2hsaWdo
dENvbmZpZy5nZXQoKSkpCisgICAgICAgICAgICBtX292ZXJsYXktPmhpZ2hsaWdodE5vZGUobm9k
ZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodEZyYW1lKApAQCAtMTA2
OCwyMyArOTg5LDEzIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodEZyYW1lKAog
ICAgIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBvdXRsaW5lQ29sb3IpCiB7CiAgICAg
RnJhbWUqIGZyYW1lID0gbV9wYWdlQWdlbnQtPmZyYW1lRm9ySWQoZnJhbWVJZCk7Ci0gICAgaWYg
KGZyYW1lICYmIGZyYW1lLT5vd25lckVsZW1lbnQoKSkgewotICAgICAgICBtX2hpZ2hsaWdodERh
dGEgPSBhZG9wdFB0cihuZXcgSGlnaGxpZ2h0RGF0YSgpKTsKLSAgICAgICAgbV9oaWdobGlnaHRE
YXRhLT5ub2RlID0gZnJhbWUtPm93bmVyRWxlbWVudCgpOwotICAgICAgICBtX2hpZ2hsaWdodERh
dGEtPnNob3dJbmZvID0gdHJ1ZTsgLy8gQWx3YXlzIHNob3cgdG9vbHRpcHMgZm9yIGZyYW1lcy4K
LSAgICAgICAgbV9oaWdobGlnaHREYXRhLT5jb250ZW50ID0gcGFyc2VDb2xvcihjb2xvcik7Ci0g
ICAgICAgIG1faGlnaGxpZ2h0RGF0YS0+Y29udGVudE91dGxpbmUgPSBwYXJzZUNvbG9yKG91dGxp
bmVDb2xvcik7Ci0gICAgICAgIGhpZ2hsaWdodCgpOwotICAgIH0KKyAgICBpZiAoZnJhbWUgJiYg
ZnJhbWUtPm93bmVyRWxlbWVudCgpKQorICAgICAgICBtX292ZXJsYXktPmhpZ2hsaWdodEZyYW1l
KGZyYW1lLCBjb2xvciwgb3V0bGluZUNvbG9yKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6aGlkZUhpZ2hsaWdodChFcnJvclN0cmluZyopCiB7Ci0gICAgaWYgKG1faGlnaGxpZ2h0RGF0
YSkgewotICAgICAgICBtX2hpZ2hsaWdodERhdGEtPm5vZGUuY2xlYXIoKTsKLSAgICAgICAgbV9o
aWdobGlnaHREYXRhLT5yZWN0LmNsZWFyKCk7Ci0gICAgfQotICAgIG1fY2xpZW50LT5oaWRlSGln
aGxpZ2h0KCk7CisgICAgbV9vdmVybGF5LT5oaWRlSGlnaGxpZ2h0KCk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6Om1vdmVUbyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2Rl
SWQsIGludCB0YXJnZXRFbGVtZW50SWQsIGNvbnN0IGludCogY29uc3QgYW5jaG9yTm9kZUlkLCBp
bnQqIG5ld05vZGVJZCkKQEAgLTE1OTksMjIgKzE1MTAsNiBAQCBQYXNzUmVmUHRyPFR5cGVCdWls
ZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IEluc3BlY3RvckRPTUFnZW50OjpyZXNvbHZlTm9k
ZShObwogICAgIHJldHVybiBpbmplY3RlZFNjcmlwdC53cmFwTm9kZShub2RlLCBvYmplY3RHcm91
cCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRyYXdIaWdobGlnaHQoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGlmICghbV9oaWdobGlnaHREYXRhKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBET01Ob2RlSGlnaGxpZ2h0ZXI6OmRyYXdIaWdobGlnaHQoY29u
dGV4dCwgbV9oaWdobGlnaHREYXRhLT5ub2RlID8gbV9oaWdobGlnaHREYXRhLT5ub2RlLT5kb2N1
bWVudCgpIDogbV9kb2N1bWVudC5nZXQoKSwgbV9oaWdobGlnaHREYXRhLmdldCgpKTsKLX0KLQot
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0SGlnaGxpZ2h0KEhpZ2hsaWdodCogaGlnaGxpZ2h0
KSBjb25zdAotewotICAgIGlmICghbV9oaWdobGlnaHREYXRhKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBET01Ob2RlSGlnaGxpZ2h0ZXI6OmdldEhpZ2hsaWdodChtX2hpZ2hsaWdodERhdGEtPm5v
ZGUgPyBtX2hpZ2hsaWdodERhdGEtPm5vZGUtPmRvY3VtZW50KCkgOiBtX2RvY3VtZW50LmdldCgp
LCBtX2hpZ2hsaWdodERhdGEuZ2V0KCksIGhpZ2hsaWdodCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCmluZGV4IGIwNWFiNTcwZDlmZDFiMDQ4NzA2
YTM5M2EyNDY2NTk3YjQ5NjM5YmYuLjg2ZTU2ZGQ0YmNlZjhlM2NiYmQ1NmJmMDRkNTk2ZWIzZTA4
OTJkNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5o
CkBAIC01Niw5ICs1Niw5IEBAIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRWxlbWVudDsKIGNsYXNz
IEV2ZW50OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgSW5zcGVjdG9yQ2xpZW50Owog
Y2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CiBjbGFzcyBJbnNwZWN0b3JIaXN0b3J5OworY2xhc3Mg
SW5zcGVjdG9yT3ZlcmxheTsKIGNsYXNzIEluc3BlY3RvclBhZ2VBZ2VudDsKIGNsYXNzIEludFJl
Y3Q7CiBjbGFzcyBIaXRUZXN0UmVzdWx0OwpAQCAtMTAzLDkgKzEwMyw5IEBAIHB1YmxpYzoKICAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCopID0gMDsKICAgICB9
OwogCi0gICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yRE9NQWdlbnQ+IGNyZWF0ZShJbnN0
cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JQYWdlQWdlbnQq
IHBhZ2VBZ2VudCwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQsIEluc3BlY3RvclN0YXRlKiBpbnNw
ZWN0b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIp
CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yRE9NQWdlbnQ+IGNyZWF0ZShJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JQYWdlQWdlbnQqIHBh
Z2VBZ2VudCwgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBJbmplY3RlZFNjcmlwdE1h
bmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgSW5zcGVjdG9yT3ZlcmxheSogb3ZlcmxheSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9yRE9NQWdlbnQoaW5z
dHJ1bWVudGluZ0FnZW50cywgcGFnZUFnZW50LCBjbGllbnQsIGluc3BlY3RvclN0YXRlLCBpbmpl
Y3RlZFNjcmlwdE1hbmFnZXIpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNwZWN0
b3JET01BZ2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBwYWdlQWdlbnQsIGluc3BlY3RvclN0YXRl
LCBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIG92ZXJsYXkpKTsKICAgICB9CiAKICAgICBzdGF0aWMg
U3RyaW5nIHRvRXJyb3JTdHJpbmcoY29uc3QgRXhjZXB0aW9uQ29kZSYpOwpAQCAtMTUxLDggKzE1
MSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVkbyhFcnJvclN0cmluZyopOwogICAg
IHZpcnR1YWwgdm9pZCBtYXJrVW5kb2FibGVTdGF0ZShFcnJvclN0cmluZyopOwogCi0gICAgTm9k
ZSogaGlnaGxpZ2h0ZWROb2RlKCkgY29uc3Q7Ci0KICAgICB2b2lkIGdldEV2ZW50TGlzdGVuZXJz
KE5vZGUqLCBWZWN0b3I8RXZlbnRMaXN0ZW5lckluZm8+JiBsaXN0ZW5lcnNBcnJheSwgYm9vbCBp
bmNsdWRlQW5jZXN0b3JzKTsKIAogICAgIC8vIE1ldGhvZHMgY2FsbGVkIGZyb20gdGhlIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi4KQEAgLTE4NSw5ICsxODMsNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBpbnNwZWN0KE5vZGUqKTsKICAgICB2b2lkIGZvY3VzTm9kZSgpOwogCi0gICAgdm9pZCBkcmF3
SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotICAgIHZvaWQgZ2V0SGlnaGxpZ2h0
KEhpZ2hsaWdodCopIGNvbnN0OwotCiAgICAgSW5zcGVjdG9ySGlzdG9yeSogaGlzdG9yeSgpIHsg
cmV0dXJuIG1faGlzdG9yeS5nZXQoKTsgfQogCiAgICAgLy8gV2UgcmVwcmVzZW50IGVtYmVkZGVk
IGRvbXMgYXMgYSBwYXJ0IG9mIHRoZSBzYW1lIGhpZXJhcmNoeS4gSGVuY2Ugd2UgdHJlYXQgY2hp
bGRyZW4gb2YgZnJhbWUgb3duZXJzIGRpZmZlcmVudGx5LgpAQCAtMjA1LDExICsyMDAsOSBAQCBw
dWJsaWM6CiAgICAgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQoKSB7IHJldHVybiBtX3Bh
Z2VBZ2VudDsgfQogCiBwcml2YXRlOgotICAgIEluc3BlY3RvckRPTUFnZW50KEluc3RydW1lbnRp
bmdBZ2VudHMqLCBJbnNwZWN0b3JQYWdlQWdlbnQqLCBJbnNwZWN0b3JDbGllbnQqLCBJbnNwZWN0
b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciopOworICAgIEluc3BlY3RvckRPTUFnZW50
KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JQYWdlQWdlbnQqLCBJbnNwZWN0b3JTdGF0
ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3Rvck92ZXJsYXkqKTsKIAogICAgIHZv
aWQgc2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQsIEluc3BlY3Rvck9iamVjdCogaGln
aGxpZ2h0Q29uZmlnKTsKLSAgICBib29sIHNldEhpZ2hsaWdodERhdGFGcm9tQ29uZmlnKEluc3Bl
Y3Rvck9iamVjdCogaGlnaGxpZ2h0Q29uZmlnKTsKLSAgICB2b2lkIGhpZ2hsaWdodCgpOwogCiAg
ICAgLy8gTm9kZS1yZWxhdGVkIG1ldGhvZHMuCiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxO
b2RlPiwgaW50PiBOb2RlVG9JZE1hcDsKQEAgLTI0MSw4ICsyMzQsOCBAQCBwcml2YXRlOgogI2Vu
ZGlmCiAKICAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIG1fcGFnZUFnZW50OwotICAgIEluc3BlY3Rv
ckNsaWVudCogbV9jbGllbnQ7CiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2luamVjdGVk
U2NyaXB0TWFuYWdlcjsKKyAgICBJbnNwZWN0b3JPdmVybGF5KiBtX292ZXJsYXk7CiAgICAgSW5z
cGVjdG9yRnJvbnRlbmQ6OkRPTSogbV9mcm9udGVuZDsKICAgICBET01MaXN0ZW5lciogbV9kb21M
aXN0ZW5lcjsKICAgICBOb2RlVG9JZE1hcCBtX2RvY3VtZW50Tm9kZVRvSWRNYXA7CkBAIC0yNTYs
NyArMjQ5LDYgQEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8
UmVmUHRyPE5vZGU+ID4gPiBTZWFyY2hSZXN1bHRzOwogICAgIFNlYXJjaFJlc3VsdHMgbV9zZWFy
Y2hSZXN1bHRzOwogICAgIE93blB0cjxSZXZhbGlkYXRlU3R5bGVBdHRyaWJ1dGVUYXNrPiBtX3Jl
dmFsaWRhdGVTdHlsZUF0dHJUYXNrOwotICAgIE93blB0cjxIaWdobGlnaHREYXRhPiBtX2hpZ2hs
aWdodERhdGE7CiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZVRvRm9jdXM7CiAgICAgYm9vbCBtX3Nl
YXJjaGluZ0Zvck5vZGU7CiAgICAgT3duUHRyPEluc3BlY3Rvckhpc3Rvcnk+IG1faGlzdG9yeTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5o
CmluZGV4IDA5Yzk3ZDE5NTNlNGI5YjAwMTYxZjg3NGY0NTMxZmJkZWM3ZGI2Y2QuLmIyZTc5YWQ3
ZWYxZmU4MzgyMmZlNTMwMTg4OTRmNDI3MWI0MmNiYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaApAQCAtMTMzLDE3ICsxMzMsMTgg
QEAgcHJvdGVjdGVkOgogICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyKCkgeyByZXR1cm4gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7IH0KICAgICB2aXJ0dWFs
IEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyosIGNvbnN0
IGludCogZXhlY3V0aW9uQ29udGV4dElkKSA9IDA7CiAKKyAgICB2aXJ0dWFsIHZvaWQgZGlzYWJs
ZSgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRQYXVzZShTY3JpcHRTdGF0ZSosIGNvbnN0IFNjcmlw
dFZhbHVlJiBjYWxsRnJhbWVzLCBjb25zdCBTY3JpcHRWYWx1ZSYgZXhjZXB0aW9uKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkQ29udGludWUoKTsKKwogcHJpdmF0ZToKICAgICB2b2lkIGVuYWJsZSgp
OwotICAgIHZvaWQgZGlzYWJsZSgpOwogICAgIGJvb2wgZW5hYmxlZCgpOwogCiAgICAgUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+
ID4gY3VycmVudENhbGxGcmFtZXMoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRQYXJzZVNvdXJj
ZShjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBTY3JpcHQmKTsKICAgICB2aXJ0dWFsIHZv
aWQgZmFpbGVkVG9QYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBk
YXRhLCBpbnQgZmlyc3RMaW5lLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVz
c2FnZSk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFBhdXNlKFNjcmlwdFN0YXRlKiwgY29uc3QgU2Ny
aXB0VmFsdWUmIGNhbGxGcmFtZXMsIGNvbnN0IFNjcmlwdFZhbHVlJiBleGNlcHRpb24pOwotICAg
IHZpcnR1YWwgdm9pZCBkaWRDb250aW51ZSgpOwogCiAgICAgdm9pZCBzZXRQYXVzZU9uRXhjZXB0
aW9uc0ltcGwoRXJyb3JTdHJpbmcqLCBpbnQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4IGVmMzQ1MzdmMGUxMThmYjVlMGNiODhj
YTJmYWI1ZTNlZjYwYTM1NzcuLjk2NzZkMTM4ZTg1NmZmOTUwOTZiYzJlMDQ4NjRhMThlZGRlODJj
NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdl
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQu
Y3BwCkBAIC0yMjMsOSArMjIzLDkgQEAgYm9vbCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNoYXJlZEJ1
ZmZlckNvbnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciwgY28KICAgICByZXR1
cm4gZGVjb2RlU2hhcmVkQnVmZmVyKGJ1ZmZlciwgdGV4dEVuY29kaW5nTmFtZSwgcmVzdWx0KTsK
IH0KIAotUGFzc093blB0cjxJbnNwZWN0b3JQYWdlQWdlbnQ+IEluc3BlY3RvclBhZ2VBZ2VudDo6
Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIFBhZ2UqIHBh
Z2UsIEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgSW5zcGVjdG9yU3RhdGUqIHN0YXRl
LCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgSW5zcGVjdG9y
Q2xpZW50KiBjbGllbnQpCitQYXNzT3duUHRyPEluc3BlY3RvclBhZ2VBZ2VudD4gSW5zcGVjdG9y
UGFnZUFnZW50OjpjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cywgUGFnZSogcGFnZSwgSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBJbnNwZWN0b3JT
dGF0ZSogc3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCwgSW5zcGVjdG9yT3ZlcmxheSogb3ZlcmxheSkKIHsK
LSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEluc3BlY3RvclBhZ2VBZ2VudChpbnN0cnVtZW50aW5n
QWdlbnRzLCBwYWdlLCBpbnNwZWN0b3JBZ2VudCwgc3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdl
ciwgY2xpZW50KSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JQYWdlQWdlbnQo
aW5zdHJ1bWVudGluZ0FnZW50cywgcGFnZSwgaW5zcGVjdG9yQWdlbnQsIHN0YXRlLCBpbmplY3Rl
ZFNjcmlwdE1hbmFnZXIsIGNsaWVudCwgb3ZlcmxheSkpOwogfQogCiAvLyBzdGF0aWMKQEAgLTMw
OCwxMyArMzA4LDE0IEBAIFR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkVudW0gSW5z
cGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5cGVKc29uCiAgICAgcmV0dXJuIHJlc291
cmNlVHlwZUpzb24oY2FjaGVkUmVzb3VyY2VUeXBlKGNhY2hlZFJlc291cmNlKSk7CiB9CiAKLUlu
c3BlY3RvclBhZ2VBZ2VudDo6SW5zcGVjdG9yUGFnZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMq
IGluc3RydW1lbnRpbmdBZ2VudHMsIFBhZ2UqIHBhZ2UsIEluc3BlY3RvckFnZW50KiBpbnNwZWN0
b3JBZ2VudCwgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBJbmplY3RlZFNjcmlwdE1h
bmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCitJ
bnNwZWN0b3JQYWdlQWdlbnQ6Okluc3BlY3RvclBhZ2VBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYWdlKiBwYWdlLCBJbnNwZWN0b3JBZ2VudCogaW5zcGVj
dG9yQWdlbnQsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIEluc3BlY3RvckNsaWVudCogY2xpZW50LCBJ
bnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQogICAgIDogSW5zcGVjdG9yQmFzZUFnZW50PEluc3Bl
Y3RvclBhZ2VBZ2VudD4oIlBhZ2UiLCBpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnNwZWN0b3JTdGF0
ZSkKICAgICAsIG1fcGFnZShwYWdlKQogICAgICwgbV9pbnNwZWN0b3JBZ2VudChpbnNwZWN0b3JB
Z2VudCkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKGluamVjdGVkU2NyaXB0TWFuYWdl
cikKICAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fZnJvbnRlbmQoMCkKKyAgICAsIG1f
b3ZlcmxheShvdmVybGF5KQogICAgICwgbV9sYXN0U2NyaXB0SWRlbnRpZmllcigwKQogICAgICwg
bV9sYXN0UGFpbnRDb250ZXh0KDApCiAgICAgLCBtX2RpZExvYWRFdmVudEZpcmUoZmFsc2UpCkBA
IC04ODUsNyArODg2LDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZFBhaW50KCkKICAg
ICAgICAgQ29sb3IoMCwgMCwgMHhGRiwgMHgzRiksCiAgICAgfTsKIAotICAgIERPTU5vZGVIaWdo
bGlnaHRlcjo6ZHJhd091dGxpbmUoKm1fbGFzdFBhaW50Q29udGV4dCwgbV9sYXN0UGFpbnRSZWN0
LCBjb2xvcnNbY29sb3JTZWxlY3RvcisrICUgV1RGX0FSUkFZX0xFTkdUSChjb2xvcnMpXSk7Cisg
ICAgbV9vdmVybGF5LT5kcmF3T3V0bGluZSgqbV9sYXN0UGFpbnRDb250ZXh0LCBtX2xhc3RQYWlu
dFJlY3QsIGNvbG9yc1tjb2xvclNlbGVjdG9yKysgJSBXVEZfQVJSQVlfTEVOR1RIKGNvbG9ycyld
KTsKIAogICAgIG1fbGFzdFBhaW50Q29udGV4dCA9IDA7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKaW5kZXggOTY0YmM4NWZjNjM2NDhhZjM4ZjJk
YzEyZmM4M2Y3OTcxYjkzYTY2My4uYzNiOWE2ZDJmNDViZWUyYjczZmMxMDk4YjY1MmFiYWNhYjJh
ZjlmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VB
Z2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQu
aApAQCAtNTMsNiArNTMsNyBAQCBjbGFzcyBJbnNwZWN0b3JBZ2VudDsKIGNsYXNzIEluc3BlY3Rv
ckFycmF5OwogY2xhc3MgSW5zcGVjdG9yQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9yT2JqZWN0Owor
Y2xhc3MgSW5zcGVjdG9yT3ZlcmxheTsKIGNsYXNzIEluc3BlY3RvclN0YXRlOwogY2xhc3MgSW5z
dHJ1bWVudGluZ0FnZW50czsKIGNsYXNzIEtVUkw7CkBAIC03Nyw3ICs3OCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgT3RoZXJSZXNvdXJjZQogICAgIH07CiAKLSAgICBzdGF0aWMgUGFzc093blB0cjxJ
bnNwZWN0b3JQYWdlQWdlbnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiwgUGFnZSosIElu
c3BlY3RvckFnZW50KiwgSW5zcGVjdG9yU3RhdGUqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJ
bnNwZWN0b3JDbGllbnQqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JQYWdlQWdl
bnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiwgUGFnZSosIEluc3BlY3RvckFnZW50Kiwg
SW5zcGVjdG9yU3RhdGUqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JDbGllbnQq
LCBJbnNwZWN0b3JPdmVybGF5Kik7CiAKICAgICBzdGF0aWMgYm9vbCBjYWNoZWRSZXNvdXJjZUNv
bnRlbnQoQ2FjaGVkUmVzb3VyY2UqLCBTdHJpbmcqIHJlc3VsdCwgYm9vbCogYmFzZTY0RW5jb2Rl
ZCk7CiAgICAgc3RhdGljIGJvb2wgc2hhcmVkQnVmZmVyQ29udGVudChQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4sIGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwgYm9vbCB3aXRoQmFzZTY0
RW5jb2RlLCBTdHJpbmcqIHJlc3VsdCk7CkBAIC0xMzcsNyArMTM4LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBEb2N1bWVudExvYWRlciogYXNzZXJ0RG9jdW1lbnRMb2FkZXIoRXJyb3JTdHJpbmcq
LCBGcmFtZSopOwogCiBwcml2YXRlOgotICAgIEluc3BlY3RvclBhZ2VBZ2VudChJbnN0cnVtZW50
aW5nQWdlbnRzKiwgUGFnZSosIEluc3BlY3RvckFnZW50KiwgSW5zcGVjdG9yU3RhdGUqLCBJbmpl
Y3RlZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JDbGllbnQqKTsKKyAgICBJbnNwZWN0b3JQYWdl
QWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIFBhZ2UqLCBJbnNwZWN0b3JBZ2VudCosIEluc3Bl
Y3RvclN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9yQ2xpZW50KiwgSW5z
cGVjdG9yT3ZlcmxheSopOwogICAgIHZvaWQgdXBkYXRlVmlld01ldHJpY3MoaW50LCBpbnQsIGRv
dWJsZSwgYm9vbCk7CiAKICAgICBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZT4g
YnVpbGRPYmplY3RGb3JGcmFtZShGcmFtZSopOwpAQCAtMTQ3LDYgKzE0OCw3IEBAIHByaXZhdGU6
CiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKICAg
ICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50OwogICAgIEluc3BlY3RvckZyb250ZW5kOjpQYWdl
KiBtX2Zyb250ZW5kOworICAgIEluc3BlY3Rvck92ZXJsYXkqIG1fb3ZlcmxheTsKICAgICBsb25n
IG1fbGFzdFNjcmlwdElkZW50aWZpZXI7CiAgICAgU3RyaW5nIG1fcGVuZGluZ1NjcmlwdFRvRXZh
bHVhdGVPbkxvYWRPbmNlOwogICAgIFN0cmluZyBtX3NjcmlwdFRvRXZhbHVhdGVPbkxvYWRPbmNl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAKaW5k
ZXggYTU4NmVkZjNmZDQxMDhjOWQwNzkyYzBiZGZlYmUxZTgzZmFmZjg2YS4uNGI0NTkyYTIzMzhk
MWJjNzM2NTYxZTRkMzA2YTI2MTQ1NTAyODA0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCkBAIC0zNSwxOSArMzUsMjEgQEAKICNpbmNsdWRl
ICJQYWdlRGVidWdnZXJBZ2VudC5oIgogCiAjaW5jbHVkZSAiQ29uc29sZS5oIgorI2luY2x1ZGUg
IkRPTU5vZGVIaWdobGlnaHRlci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdl
U2NyaXB0RGVidWdTZXJ2ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRy
PFBhZ2VEZWJ1Z2dlckFnZW50PiBQYWdlRGVidWdnZXJBZ2VudDo6Y3JlYXRlKEluc3RydW1lbnRp
bmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JT
dGF0ZSwgUGFnZSogaW5zcGVjdGVkUGFnZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3Rl
ZFNjcmlwdE1hbmFnZXIpCitQYXNzT3duUHRyPFBhZ2VEZWJ1Z2dlckFnZW50PiBQYWdlRGVidWdn
ZXJBZ2VudDo6Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMs
IEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgUGFnZSogaW5zcGVjdGVkUGFnZSwgSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIEluc3BlY3Rvck92ZXJs
YXkqIG92ZXJsYXkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQYWdlRGVidWdnZXJBZ2Vu
dChpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnNwZWN0b3JTdGF0ZSwgaW5zcGVjdGVkUGFnZSwgaW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQYWdlRGVidWdn
ZXJBZ2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnNwZWN0b3JTdGF0ZSwgaW5zcGVjdGVkUGFn
ZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBvdmVybGF5KSk7CiB9CiAKLVBhZ2VEZWJ1Z2dlckFn
ZW50OjpQYWdlRGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGluc3BlY3RlZFBh
Z2UsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQorUGFnZURl
YnVnZ2VyQWdlbnQ6OlBhZ2VEZWJ1Z2dlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3Ry
dW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgUGFnZSogaW5z
cGVjdGVkUGFnZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIs
IEluc3BlY3Rvck92ZXJsYXkqIG92ZXJsYXkpCiAgICAgOiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
KGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlLCBpbmplY3RlZFNjcmlwdE1hbmFn
ZXIpCiAgICAgLCBtX2luc3BlY3RlZFBhZ2UoaW5zcGVjdGVkUGFnZSkKKyAgICAsIG1fb3Zlcmxh
eShvdmVybGF5KQogewogfQogCkBAIC05Miw2ICs5NCwyMyBAQCBJbmplY3RlZFNjcmlwdCBQYWdl
RGVidWdnZXJBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nKiBlcnJvclN0
cmluZwogICAgIHJldHVybiBpbmplY3RlZFNjcmlwdDsKIH0KIAordm9pZCBQYWdlRGVidWdnZXJB
Z2VudDo6ZGlzYWJsZSgpCit7CisgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJsZSgp
OworICAgIG1fb3ZlcmxheS0+c2V0UGF1c2VkSW5EZWJ1Z2dlcihmYWxzZSk7Cit9CisKK3ZvaWQg
UGFnZURlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29u
c3QgU2NyaXB0VmFsdWUmIGNhbGxGcmFtZXMsIGNvbnN0IFNjcmlwdFZhbHVlJiBleGNlcHRpb24p
Cit7CisgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGF1c2Uoc2NyaXB0U3RhdGUsIGNh
bGxGcmFtZXMsIGV4Y2VwdGlvbik7CisgICAgbV9vdmVybGF5LT5zZXRQYXVzZWRJbkRlYnVnZ2Vy
KHRydWUpOworfQorCit2b2lkIFBhZ2VEZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSgpCit7Cisg
ICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ29udGludWUoKTsKKyAgICBtX292ZXJsYXkt
PnNldFBhdXNlZEluRGVidWdnZXIoZmFsc2UpOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2Vu
dC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmgKaW5kZXgg
OWRiZDUxM2Y5ZjFhMjhiYjk4NDI0OTEzNTc4MTQ4NmM3M2MzMjYxOC4uZDkwZmRlYjgyYWVjOGUy
MTcxOWI1N2M0OTM1ZTE1MGZhZGI2ZGVlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L1BhZ2VEZWJ1Z2dlckFnZW50LmgKQEAgLTM3LDYgKzM3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitjbGFzcyBJbnNwZWN0b3JPdmVybGF5OwogY2xhc3MgUGFnZTsKIGNsYXNzIFBhZ2VT
Y3JpcHREZWJ1Z1NlcnZlcjsKIApAQCAtNDQsNyArNDUsNyBAQCBjbGFzcyBQYWdlRGVidWdnZXJB
Z2VudCA6IHB1YmxpYyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShQYWdlRGVidWdnZXJBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8UGFnZURlYnVnZ2VyQWdlbnQ+IGNyZWF0
ZShJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yU3RhdGUqLCBQYWdlKiwgSW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyKik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8UGFnZURlYnVnZ2VyQWdlbnQ+
IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yU3RhdGUqLCBQYWdlKiwgSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9yT3ZlcmxheSopOwogICAgIHZpcnR1YWwgflBh
Z2VEZWJ1Z2dlckFnZW50KCk7CiAKIHByaXZhdGU6CkBAIC01Niw4ICs1NywxMyBAQCBwcml2YXRl
OgogCiAgICAgdmlydHVhbCBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJy
b3JTdHJpbmcqLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCk7CiAKLSAgICBQYWdlRGVi
dWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yU3RhdGUqLCBQYWdlKiwg
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKik7CisgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkUGF1c2UoU2NyaXB0U3RhdGUqLCBjb25zdCBTY3JpcHRWYWx1ZSYg
Y2FsbEZyYW1lcywgY29uc3QgU2NyaXB0VmFsdWUmIGV4Y2VwdGlvbik7CisgICAgdmlydHVhbCB2
b2lkIGRpZENvbnRpbnVlKCk7CisKKyAgICBQYWdlRGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5n
QWdlbnRzKiwgSW5zcGVjdG9yU3RhdGUqLCBQYWdlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwg
SW5zcGVjdG9yT3ZlcmxheSopOwogICAgIFBhZ2UqIGNvbnN0IG1faW5zcGVjdGVkUGFnZTsKKyAg
ICBJbnNwZWN0b3JPdmVybGF5KiBtX292ZXJsYXk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152787</attachid>
            <date>2012-07-17 10:56:32 -0700</date>
            <delta_ts>2012-07-18 03:11:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90880-20120717215631.patch</filename>
            <type>text/plain</type>
            <size>41581</size>
            <attacher name="Sergey Rogulenko">rogulenko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyODU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGYyMGFjNzQ5YzU1ODgz
OGNiOWZkYTNjMTE0ZTVkN2ViYTYyYmM0OC4uNzQ5YzE0MWM2MmQwMmYxOTBmODExZDIzNDc3Yzdk
OTA0ZDI4N2M1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1IEBACisyMDEyLTA3LTE3ICBTZXJn
ZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogYWRkaW5nIHBhdXNlIGljb24gZm9yIEphdmFTY3JpcHQgZGVidWdnaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg4MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yZWQgRE9NTm9k
ZUhpZ2hsaWdodGVyIGludG8gSW5zcGVjdG9yT3ZlcmxheSBjbGFzcyBhbmQgYWRkZWQgYSBmZWF0
dXJlIHRvIHNob3cgYSAicGF1c2UiIHNjcmVlbiB3aGVuCisgICAgICAgIHRoZSBKYXZhc2NyaXB0
IGRlYnVnZ2VyIGlzIHBhdXNlZC4KKworICAgICAgICAqIGluc3BlY3Rvci9ET01Ob2RlSGlnaGxp
Z2h0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6SW5zcGVjdG9y
T3ZlcmxheSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpwYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3T3V0bGluZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpnZXRIaWdobGlnaHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6c2V0UGF1c2VkSW5EZWJ1Z2dlcik6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpoaWRlSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6aGlnaGxpZ2h0Tm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpoaWdobGlnaHRSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmhpZ2hsaWdodEZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OnNldEhpZ2hsaWdodERhdGFGcm9tQ29uZmln
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmhpZ2hsaWdodGVkTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5Ojp1cGRhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0hpZ2hsaWdodCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3UGF1c2VkSW5EZWJ1Z2dlcik6CisgICAgICAgICog
aW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChJbnNwZWN0b3JPdmVybGF5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJs
YXk6OmNyZWF0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJv
bGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkcmF3SGlnaGxp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmdldEhpZ2hsaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpoaWdobGlnaHRlZE5v
ZGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKEluc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2VudCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6fkluc3BlY3RvckRPTUFnZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpoYW5kbGVNb3VzZVByZXNzKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0U2VhcmNoaW5nRm9y
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0UmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Tm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0RnJhbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmhpZGVIaWdobGlnaHQpOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Y3JlYXRlKToKKyAgICAgICAg
KEluc3BlY3RvckRPTUFnZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudC5oOgorICAgICAgICAoSW5zcGVjdG9yRGVidWdnZXJBZ2VudCk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JQYWdlQWdlbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdl
QWdlbnQ6Okluc3BlY3RvclBhZ2VBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmRpZFBhaW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFn
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvUGFnZURlYnVn
Z2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlRGVidWdnZXJBZ2VudDo6UGFnZURlYnVnZ2VyQWdl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZURlYnVnZ2VyQWdlbnQ6OmRpc2FibGUpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlRGVidWdnZXJBZ2VudDo6ZGlk
UGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZURlYnVnZ2VyQWdlbnQ6OmRpZENvbnRpbnVl
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoUGFnZURlYnVnZ2VyQWdlbnQpOgorCiAyMDEyLTA3LTE3ICBIYW5z
IE11bGxlciAgPGhtdWxsZXJAYWRvYmUuY29tPgogCiAgICAgICAgIFJlbmFtZSBDU1MgRXhjbHVz
aW9ucyBDU1NXcmFwU2hhcGUgY2xhc3MgcHJvcGVydGllcyB0byBtYXRjaCBFeGNsdXNpb24gc2hh
cGUgZnVuY3Rpb24gcGFyYW1ldGVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9N
Tm9kZUhpZ2hsaWdodGVyLmNwcAppbmRleCBlNGM3MTAwZDYxYzUyMDgzZjM4MjcxZjJhNzI3NTQ3
NTQ2OGVkYjJjLi5iNjQwOGIzNzNmZDE1MjI4YTczMmYxYjQ4ZDBhMWVjODZjMTZmYjg5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcApAQCAt
MzksNiArMzksOCBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKyNpbmNsdWRlICJIVE1MRnJh
bWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRl
ICJOb2RlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCkBAIC02OCw2
ICs3MCw0MCBAQCBjb25zdCBzdGF0aWMgaW50IGFycm93VGlwT2Zmc2V0ID0gMjA7CiBjb25zdCBz
dGF0aWMgZmxvYXQgYXJyb3dIZWlnaHQgPSA3OwogY29uc3Qgc3RhdGljIGZsb2F0IGFycm93SGFs
ZldpZHRoID0gNzsKIAorc3RhdGljIENvbG9yIHBhcnNlQ29sb3IoY29uc3QgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4qIGNvbG9yT2JqZWN0KQoreworICAgIGlmICghY29sb3JPYmplY3QgfHwgISgq
Y29sb3JPYmplY3QpKQorICAgICAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50OworCisgICAg
aW50IHI7CisgICAgaW50IGc7CisgICAgaW50IGI7CisgICAgYm9vbCBzdWNjZXNzID0gKCpjb2xv
ck9iamVjdCktPmdldE51bWJlcigiciIsICZyKTsKKyAgICBzdWNjZXNzIHw9ICgqY29sb3JPYmpl
Y3QpLT5nZXROdW1iZXIoImciLCAmZyk7CisgICAgc3VjY2VzcyB8PSAoKmNvbG9yT2JqZWN0KS0+
Z2V0TnVtYmVyKCJiIiwgJmIpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIENv
bG9yOjp0cmFuc3BhcmVudDsKKworICAgIGRvdWJsZSBhOworICAgIHN1Y2Nlc3MgPSAoKmNvbG9y
T2JqZWN0KS0+Z2V0TnVtYmVyKCJhIiwgJmEpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAg
cmV0dXJuIENvbG9yKHIsIGcsIGIpOworCisgICAgLy8gQ2xhbXAgYWxwaGEgdG8gdGhlIFswLi4x
XSByYW5nZS4KKyAgICBpZiAoYSA8IDApCisgICAgICAgIGEgPSAwOworICAgIGVsc2UgaWYgKGEg
PiAxKQorICAgICAgICBhID0gMTsKKworICAgIHJldHVybiBDb2xvcihyLCBnLCBiLCBzdGF0aWNf
Y2FzdDxpbnQ+KGEgKiAyNTUpKTsKK30KKworc3RhdGljIENvbG9yIHBhcnNlQ29uZmlnQ29sb3Io
Y29uc3QgU3RyaW5nJiBmaWVsZE5hbWUsIEluc3BlY3Rvck9iamVjdCogY29uZmlnT2JqZWN0KQor
eworICAgIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNvbG9yT2JqZWN0ID0gY29uZmln
T2JqZWN0LT5nZXRPYmplY3QoZmllbGROYW1lKTsKKyAgICByZXR1cm4gcGFyc2VDb2xvcigmY29s
b3JPYmplY3QpOworfQorCiBQYXRoIHF1YWRUb1BhdGgoY29uc3QgRmxvYXRRdWFkJiBxdWFkKQog
ewogICAgIFBhdGggcXVhZFBhdGg7CkBAIC00NjIsOSArNDk4LDkgQEAgc3RhdGljIHZvaWQgZ2V0
T3JEcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEhpZ2hsaWdodERh
dGEqIGhpZ2gKICAgICAgICAgZHJhd0VsZW1lbnRUaXRsZSgqY29udGV4dCwgbm9kZSwgcmVuZGVy
ZXIsIHBpeGVsU25hcHBlZEludFJlY3QoYm91bmRpbmdCb3gpLCBwaXhlbFNuYXBwZWRJbnRSZWN0
KHRpdGxlQW5jaG9yQm94KSwgdmlzaWJsZVJlY3QsIGNvbnRhaW5pbmdGcmFtZS0+c2V0dGluZ3Mo
KSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldE9yRHJhd1JlY3RIaWdobGlnaHQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBEb2N1bWVudCogZG9jdW1lbnQsIEhpZ2hsaWdodERhdGEqIGhpZ2hsaWdo
dERhdGEsIEhpZ2hsaWdodCAqaGlnaGxpZ2h0KQorc3RhdGljIHZvaWQgZ2V0T3JEcmF3UmVjdEhp
Z2hsaWdodChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFBhZ2UqIHBhZ2UsIEhpZ2hsaWdodERh
dGEqIGhpZ2hsaWdodERhdGEsIEhpZ2hsaWdodCAqaGlnaGxpZ2h0KQogewotICAgIGlmICghZG9j
dW1lbnQpCisgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBGbG9hdFJlY3Qg
aGlnaGxpZ2h0UmVjdCgqKGhpZ2hsaWdodERhdGEtPnJlY3QpKTsKQEAgLTQ3Myw3ICs1MDksNyBA
QCBzdGF0aWMgdm9pZCBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgRG9jdW1lbnQqIGRvY3VtZW50LAogICAgIGhpZ2hsaWdodC0+cXVhZHMuYXBwZW5kKGhp
Z2hsaWdodFJlY3QpOwogCiAgICAgaWYgKGNvbnRleHQpIHsKLSAgICAgICAgRnJhbWVWaWV3KiB2
aWV3ID0gZG9jdW1lbnQtPmZyYW1lKCktPnZpZXcoKTsKKyAgICAgICAgRnJhbWVWaWV3KiB2aWV3
ID0gcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKICAgICAgICAgaWYgKCF2aWV3LT5kZWxlZ2F0
ZXNTY3JvbGxpbmcoKSkgewogICAgICAgICAgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0ID0gdmll
dy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUo
LXZpc2libGVSZWN0LngoKSwgLXZpc2libGVSZWN0LnkoKSk7CkBAIC00ODUsNDQgKzUyMSwxNjUg
QEAgc3RhdGljIHZvaWQgZ2V0T3JEcmF3UmVjdEhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIERvY3VtZW50KiBkb2N1bWVudCwKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAK
LW5hbWVzcGFjZSBET01Ob2RlSGlnaGxpZ2h0ZXIgeworSW5zcGVjdG9yT3ZlcmxheTo6SW5zcGVj
dG9yT3ZlcmxheShQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKKyAgICA6IG1f
cGFnZShwYWdlKQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9wYXVzZWRJbkRlYnVn
Z2VyKGZhbHNlKQoreworfQogCi12b2lkIGRyYXdIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBEb2N1bWVudCogZG9jdW1lbnQsIEhpZ2hsaWdodERhdGEqIGhpZ2hsaWdodERhdGEp
Cit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkK
IHsKLSAgICBpZiAoIWhpZ2hsaWdodERhdGEpCi0gICAgICAgIHJldHVybjsKKyAgICBkcmF3UGF1
c2VkSW5EZWJ1Z2dlcihjb250ZXh0KTsKKyAgICBkcmF3SGlnaGxpZ2h0KGNvbnRleHQpOworfQog
Ci0gICAgSGlnaGxpZ2h0IGhpZ2hsaWdodDsKLSAgICBpZiAoaGlnaGxpZ2h0RGF0YS0+bm9kZSkK
LSAgICAgICAgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdodCgmY29udGV4dCwgaGlnaGxpZ2h0RGF0YSwg
JmhpZ2hsaWdodCk7Ci0gICAgZWxzZSBpZiAoaGlnaGxpZ2h0RGF0YS0+cmVjdCkKLSAgICAgICAg
Z2V0T3JEcmF3UmVjdEhpZ2hsaWdodCgmY29udGV4dCwgZG9jdW1lbnQsIGhpZ2hsaWdodERhdGEs
ICZoaWdobGlnaHQpOwordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3T3V0bGluZShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvcikKK3sKKyAgICBGbG9hdFJlY3Qgb3V0bGluZVJlY3QgPSByZWN0OworICAgIGRyYXdPdXRs
aW5lZFF1YWQoY29udGV4dCwgb3V0bGluZVJlY3QsIENvbG9yKCksIGNvbG9yKTsKIH0KIAotdm9p
ZCBnZXRIaWdobGlnaHQoRG9jdW1lbnQqIGRvY3VtZW50LCBIaWdobGlnaHREYXRhKiBoaWdobGln
aHREYXRhLCBIaWdobGlnaHQqIGhpZ2hsaWdodCkKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6Z2V0
SGlnaGxpZ2h0KEhpZ2hsaWdodCogaGlnaGxpZ2h0KSBjb25zdAogewotICAgIGlmICghaGlnaGxp
Z2h0RGF0YSkKKyAgICBpZiAoIW1faGlnaGxpZ2h0RGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaGlnaGxpZ2h0LT5jb250ZW50Q29sb3IgPSBoaWdobGlnaHREYXRhLT5jb250ZW50OwotICAg
IGhpZ2hsaWdodC0+cGFkZGluZ0NvbG9yID0gaGlnaGxpZ2h0RGF0YS0+cGFkZGluZzsKLSAgICBo
aWdobGlnaHQtPmJvcmRlckNvbG9yID0gaGlnaGxpZ2h0RGF0YS0+Ym9yZGVyOwotICAgIGhpZ2hs
aWdodC0+bWFyZ2luQ29sb3IgPSBoaWdobGlnaHREYXRhLT5tYXJnaW47CisgICAgaGlnaGxpZ2h0
LT5jb250ZW50Q29sb3IgPSBtX2hpZ2hsaWdodERhdGEtPmNvbnRlbnQ7CisgICAgaGlnaGxpZ2h0
LT5wYWRkaW5nQ29sb3IgPSBtX2hpZ2hsaWdodERhdGEtPnBhZGRpbmc7CisgICAgaGlnaGxpZ2h0
LT5ib3JkZXJDb2xvciA9IG1faGlnaGxpZ2h0RGF0YS0+Ym9yZGVyOworICAgIGhpZ2hsaWdodC0+
bWFyZ2luQ29sb3IgPSBtX2hpZ2hsaWdodERhdGEtPm1hcmdpbjsKICAgICBoaWdobGlnaHQtPnR5
cGUgPSBIaWdobGlnaHRUeXBlUmVjdHM7CiAKLSAgICBpZiAoaGlnaGxpZ2h0RGF0YS0+bm9kZSkK
LSAgICAgICAgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdodCgwLCBoaWdobGlnaHREYXRhLCBoaWdobGln
aHQpOwotICAgIGVsc2UgaWYgKGhpZ2hsaWdodERhdGEtPnJlY3QpCi0gICAgICAgIGdldE9yRHJh
d1JlY3RIaWdobGlnaHQoMCwgZG9jdW1lbnQsIGhpZ2hsaWdodERhdGEsIGhpZ2hsaWdodCk7Cisg
ICAgaWYgKG1faGlnaGxpZ2h0RGF0YS0+bm9kZSkKKyAgICAgICAgZ2V0T3JEcmF3Tm9kZUhpZ2hs
aWdodCgwLCBtX2hpZ2hsaWdodERhdGEuZ2V0KCksIGhpZ2hsaWdodCk7CisgICAgZWxzZSBpZiAo
bV9oaWdobGlnaHREYXRhLT5yZWN0KQorICAgICAgICBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0KDAs
IG1fcGFnZSwgbV9oaWdobGlnaHREYXRhLmdldCgpLCBoaWdobGlnaHQpOwogfQogCi12b2lkIGRy
YXdPdXRsaW5lKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpzZXRQYXVzZWRJ
bkRlYnVnZ2VyKGJvb2wgZmxhZykKIHsKLSAgICBGbG9hdFJlY3Qgb3V0bGluZVJlY3QgPSByZWN0
OwotICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgb3V0bGluZVJlY3QsIENvbG9yKCksIGNv
bG9yKTsKKyAgICBtX3BhdXNlZEluRGVidWdnZXIgPSBmbGFnOworICAgIHVwZGF0ZSgpOwogfQog
Ci19IC8vIG5hbWVzcGFjZSBET01Ob2RlSGlnaGxpZ2h0ZXIKK3ZvaWQgSW5zcGVjdG9yT3Zlcmxh
eTo6aGlkZUhpZ2hsaWdodCgpCit7CisgICAgaWYgKG1faGlnaGxpZ2h0RGF0YSkgeworICAgICAg
ICBtX2hpZ2hsaWdodERhdGEtPnJlY3QuY2xlYXIoKTsKKyAgICAgICAgbV9oaWdobGlnaHREYXRh
LT5ub2RlLmNsZWFyKCk7CisgICAgfQorICAgIG1faGlnaGxpZ2h0RGF0YS5jbGVhcigpOworICAg
IHVwZGF0ZSgpOworfQorCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmhpZ2hsaWdodE5vZGUoTm9k
ZSogbm9kZSkKK3sKKyAgICBpZiAobV9oaWdobGlnaHREYXRhKQorICAgICAgICBtX2hpZ2hsaWdo
dERhdGEtPm5vZGUgPSBub2RlOworICAgIHVwZGF0ZSgpOworfQorCit2b2lkIEluc3BlY3Rvck92
ZXJsYXk6OmhpZ2hsaWdodFJlY3QoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQs
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4qIG91dGxpbmVDb2xvcikKK3sKKyAgICBtX2hpZ2hsaWdodERhdGEgPSBhZG9w
dFB0cihuZXcgSGlnaGxpZ2h0RGF0YSgpKTsKKyAgICBtX2hpZ2hsaWdodERhdGEtPnJlY3QgPSBh
ZG9wdFB0cihuZXcgSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CisgICAgbV9oaWdobGln
aHREYXRhLT5jb250ZW50ID0gcGFyc2VDb2xvcihjb2xvcik7CisgICAgbV9oaWdobGlnaHREYXRh
LT5jb250ZW50T3V0bGluZSA9IHBhcnNlQ29sb3Iob3V0bGluZUNvbG9yKTsKKyAgICB1cGRhdGUo
KTsKK30KKwordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpoaWdobGlnaHRGcmFtZShGcmFtZSogZnJh
bWUsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBjb2xvciwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4qIG91dGxpbmVDb2xvcikKK3sKKyAgICBtX2hpZ2hsaWdodERhdGEgPSBh
ZG9wdFB0cihuZXcgSGlnaGxpZ2h0RGF0YSgpKTsKKyAgICBtX2hpZ2hsaWdodERhdGEtPm5vZGUg
PSBmcmFtZS0+b3duZXJFbGVtZW50KCk7CisgICAgbV9oaWdobGlnaHREYXRhLT5zaG93SW5mbyA9
IHRydWU7IC8vIEFsd2F5cyBzaG93IHRvb2x0aXBzIGZvciBmcmFtZXMuCisgICAgbV9oaWdobGln
aHREYXRhLT5jb250ZW50ID0gcGFyc2VDb2xvcihjb2xvcik7CisgICAgbV9oaWdobGlnaHREYXRh
LT5jb250ZW50T3V0bGluZSA9IHBhcnNlQ29sb3Iob3V0bGluZUNvbG9yKTsKKyAgICB1cGRhdGUo
KTsKK30KKworYm9vbCBJbnNwZWN0b3JPdmVybGF5OjpzZXRIaWdobGlnaHREYXRhRnJvbUNvbmZp
ZyhJbnNwZWN0b3JPYmplY3QqIGhpZ2hsaWdodENvbmZpZykKK3sKKyAgICBpZiAoIWhpZ2hsaWdo
dENvbmZpZykgeworICAgICAgICBtX2hpZ2hsaWdodERhdGEuY2xlYXIoKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIG1faGlnaGxpZ2h0RGF0YSA9IGFkb3B0UHRyKG5ldyBI
aWdobGlnaHREYXRhKCkpOworICAgIGJvb2wgc2hvd0luZm8gPSBmYWxzZTsgLy8gRGVmYXVsdDog
ZmFsc2UgKGRvIG5vdCBzaG93IGEgdG9vbHRpcCkuCisgICAgaGlnaGxpZ2h0Q29uZmlnLT5nZXRC
b29sZWFuKCJzaG93SW5mbyIsICZzaG93SW5mbyk7CisgICAgbV9oaWdobGlnaHREYXRhLT5zaG93
SW5mbyA9IHNob3dJbmZvOworICAgIG1faGlnaGxpZ2h0RGF0YS0+Y29udGVudCA9IHBhcnNlQ29u
ZmlnQ29sb3IoImNvbnRlbnRDb2xvciIsIGhpZ2hsaWdodENvbmZpZyk7CisgICAgbV9oaWdobGln
aHREYXRhLT5jb250ZW50T3V0bGluZSA9IHBhcnNlQ29uZmlnQ29sb3IoImNvbnRlbnRPdXRsaW5l
Q29sb3IiLCBoaWdobGlnaHRDb25maWcpOworICAgIG1faGlnaGxpZ2h0RGF0YS0+cGFkZGluZyA9
IHBhcnNlQ29uZmlnQ29sb3IoInBhZGRpbmdDb2xvciIsIGhpZ2hsaWdodENvbmZpZyk7CisgICAg
bV9oaWdobGlnaHREYXRhLT5ib3JkZXIgPSBwYXJzZUNvbmZpZ0NvbG9yKCJib3JkZXJDb2xvciIs
IGhpZ2hsaWdodENvbmZpZyk7CisgICAgbV9oaWdobGlnaHREYXRhLT5tYXJnaW4gPSBwYXJzZUNv
bmZpZ0NvbG9yKCJtYXJnaW5Db2xvciIsIGhpZ2hsaWdodENvbmZpZyk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK05vZGUqIEluc3BlY3Rvck92ZXJsYXk6OmhpZ2hsaWdodGVkTm9kZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1faGlnaGxpZ2h0RGF0YSA/IG1faGlnaGxpZ2h0RGF0YS0+bm9kZS5n
ZXQoKSA6IDA7Cit9CisKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6dXBkYXRlKCkKK3sKKyAgICBp
ZiAoIW1fY2xpZW50KQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1faGlnaGxpZ2h0RGF0YSB8
fCBtX3BhdXNlZEluRGVidWdnZXIpCisgICAgICAgIG1fY2xpZW50LT5oaWdobGlnaHQoKTsKKyAg
ICBlbHNlCisgICAgICAgIG1fY2xpZW50LT5oaWRlSGlnaGxpZ2h0KCk7Cit9CisKK3ZvaWQgSW5z
cGVjdG9yT3ZlcmxheTo6ZHJhd0hpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7
CisgICAgaWYgKCFtX2hpZ2hsaWdodERhdGEpCisgICAgICAgIHJldHVybjsKKworICAgIEhpZ2hs
aWdodCBoaWdobGlnaHQ7CisgICAgaWYgKG1faGlnaGxpZ2h0RGF0YS0+bm9kZSkKKyAgICAgICAg
Z2V0T3JEcmF3Tm9kZUhpZ2hsaWdodCgmY29udGV4dCwgbV9oaWdobGlnaHREYXRhLmdldCgpLCAm
aGlnaGxpZ2h0KTsKKyAgICBlbHNlIGlmIChtX2hpZ2hsaWdodERhdGEtPnJlY3QpCisgICAgICAg
IGdldE9yRHJhd1JlY3RIaWdobGlnaHQoJmNvbnRleHQsIG1fcGFnZSwgbV9oaWdobGlnaHREYXRh
LmdldCgpLCAmaGlnaGxpZ2h0KTsKK30KKwordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3UGF1
c2VkSW5EZWJ1Z2dlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKCFtX3Bh
dXNlZEluRGVidWdnZXIpCisgICAgICAgIHJldHVybjsKKworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoQ29sb3IsIGJhY2tncm91bmRDb2xvciwgKDAsIDAsIDAsIDMxKSk7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChDb2xvciwgdGV4dEJhY2tncm91bmRDb2xvciwgKDI1NSwgMjU1LCAxOTQpKTsK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCBib3JkZXJDb2xvciwgKDEyOCwgMTI4LCAx
MjgpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGludCwgZm9udEhlaWdodCwgKDI0KSk7CisK
KyAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpOworICAgIFNldHRpbmdzKiBz
ZXR0aW5ncyA9IGZyYW1lLT5zZXR0aW5ncygpOworICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSBm
cmFtZS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoKTsKKworICAgIGNvbnRleHQuc2V0Rmls
bENvbG9yKGJhY2tncm91bmRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4
dC5kcmF3UmVjdCh2aXNpYmxlUmVjdCk7CisKKyAgICBGb250RGVzY3JpcHRpb24gZGVzYzsKKyAg
ICBzZXRVcEZvbnREZXNjcmlwdGlvbihkZXNjLCBzZXR0aW5ncyk7CisgICAgZGVzYy5zZXRDb21w
dXRlZFNpemUoZm9udEhlaWdodCk7CisgICAgRm9udCBmb250ID0gRm9udChkZXNjLCAwLCAwKTsK
KyAgICBmb250LnVwZGF0ZSgwKTsKKworICAgIFN0cmluZyB0ZXh0ID0gIlBhdXNlZCBpbiBkZWJ1
Z2dlci4iOworICAgIFRleHRSdW4gdGV4dFJ1bih0ZXh0KTsKKyAgICBJbnRSZWN0IHRpdGxlUmVj
dCA9IGVuY2xvc2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBJ
bnRQb2ludCgpLCBmb250SGVpZ2h0KSk7CisgICAgdGl0bGVSZWN0LmluZmxhdGUocmVjdEluZmxh
dGVQeCk7CisgICAgdGl0bGVSZWN0LnNldExvY2F0aW9uKEludFBvaW50KHZpc2libGVSZWN0Lndp
ZHRoKCkgLyAyIC0gdGl0bGVSZWN0LndpZHRoKCkgLyAyLCAwKSk7CisKKyAgICBjb250ZXh0LnNl
dEZpbGxDb2xvcih0ZXh0QmFja2dyb3VuZENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAg
ICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGJvcmRlckNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdC
KTsKKyAgICBjb250ZXh0LmRyYXdSZWN0KHRpdGxlUmVjdCk7CisgICAgY29udGV4dC5zZXRGaWxs
Q29sb3IoQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRy
YXdUZXh0KGZvbnQsIHRleHRSdW4sIEludFBvaW50KHRpdGxlUmVjdC54KCkgKyByZWN0SW5mbGF0
ZVB4LCB0aXRsZVJlY3QueSgpICsgZm9udEhlaWdodCkpOworfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGln
aGxpZ2h0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIu
aAppbmRleCBmN2I2ZjAwZjRmZmUwMjU5MTM1NTI1NGRmZTE5M2QwMzA2MmNlM2Q5Li45MTY3NmE4
YzYzODkxNWM0MjhmZTRjYTQ0NWVkZTU3ZGExYjAwZGE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5oCkBAIC0zMiw4ICszMiwxMCBAQAogI2luY2x1
ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiTGF5b3V0VHlw
ZXMuaCIKKyNpbmNsdWRlICJOb2RlLmgiCiAKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC00MSw5ICs0MywxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIENvbG9yOwogY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBGcmFtZTsKIGNsYXNzIEZy
YW1lVmlldzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEluc3BlY3RvckNsaWVudDsK
K2NsYXNzIEluc3BlY3Rvck9iamVjdDsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBJbnRTaXplOwog
Y2xhc3MgTm9kZTsKK2NsYXNzIFBhZ2U7CiAKIHN0cnVjdCBIaWdobGlnaHREYXRhIHsKICAgICBD
b2xvciBjb250ZW50OwpAQCAtNzUsMTMgKzgzLDM5IEBAIHN0cnVjdCBIaWdobGlnaHQgewogICAg
IFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwogfTsKIAotbmFtZXNwYWNlIERPTU5vZGVIaWdobGln
aHRlciB7CitjbGFzcyBJbnNwZWN0b3JPdmVybGF5IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c093blB0cjxJbnNwZWN0b3JPdmVybGF5PiBjcmVhdGUoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xp
ZW50KiBjbGllbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEluc3BlY3Rv
ck92ZXJsYXkocGFnZSwgY2xpZW50KSk7CisgICAgfQogCi12b2lkIGRyYXdIaWdobGlnaHQoR3Jh
cGhpY3NDb250ZXh0JiwgRG9jdW1lbnQqLCBIaWdobGlnaHREYXRhKik7Ci12b2lkIGdldEhpZ2hs
aWdodChEb2N1bWVudCosIEhpZ2hsaWdodERhdGEqLCBIaWdobGlnaHQqKTsKLXZvaWQgZHJhd091
dGxpbmUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IENvbG9yJik7
CisgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmKTsKKyAgICB2b2lkIGRyYXdPdXRsaW5l
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3QmLCBjb25zdCBDb2xvciYpOworICAg
IHZvaWQgZ2V0SGlnaGxpZ2h0KEhpZ2hsaWdodCopIGNvbnN0OwogCi19IC8vIG5hbWVzcGFjZSBE
T01Ob2RlSGlnaGxpZ2h0ZXIKKyAgICB2b2lkIHNldFBhdXNlZEluRGVidWdnZXIoYm9vbCk7CisK
KyAgICB2b2lkIGhpZGVIaWdobGlnaHQoKTsKKyAgICB2b2lkIGhpZ2hsaWdodE5vZGUoTm9kZSop
OworICAgIHZvaWQgaGlnaGxpZ2h0UmVjdChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhl
aWdodCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGNvbG9yLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0Piogb3V0bGluZUNvbG9yKTsKKyAgICB2b2lkIGhpZ2hsaWdodEZyYW1l
KEZyYW1lKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGNvbG9yLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0Piogb3V0bGluZUNvbG9yKTsKKyAgICBib29sIHNldEhpZ2hsaWdo
dERhdGFGcm9tQ29uZmlnKEluc3BlY3Rvck9iamVjdCogaGlnaGxpZ2h0Q29uZmlnKTsKKworICAg
IE5vZGUqIGhpZ2hsaWdodGVkTm9kZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIEluc3BlY3Rv
ck92ZXJsYXkoUGFnZSosIEluc3BlY3RvckNsaWVudCopOworCisgICAgdm9pZCB1cGRhdGUoKTsK
KyAgICB2b2lkIGRyYXdIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0Jik7CisgICAgdm9pZCBkcmF3
UGF1c2VkSW5EZWJ1Z2dlcihHcmFwaGljc0NvbnRleHQmKTsKKworICAgIFBhZ2UqIG1fcGFnZTsK
KyAgICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50OworICAgIGJvb2wgbV9wYXVzZWRJbkRlYnVn
Z2VyOworICAgIE93blB0cjxIaWdobGlnaHREYXRhPiBtX2hpZ2hsaWdodERhdGE7Cit9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCA5MTJiYmFhZDYyZjNkYmE0NTZmZjNkYzBhN2Nj
NTdmMTg3MTI1MjczLi5jM2Y5ZjA4YjMzOWRiYWMxYjY3MjA5MDc5NGE3NTQ5YjAwMzgyODhjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
CkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAK
KyNpbmNsdWRlICJET01Ob2RlSGlnaGxpZ2h0ZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIklkZW50aWZpZXJzRmFjdG9yeS5o
IgpAQCAtNzgsNiArNzksNyBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9s
bGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQwogICAgIDogbV9pbnN0
cnVtZW50aW5nQWdlbnRzKGFkb3B0UHRyKG5ldyBJbnN0cnVtZW50aW5nQWdlbnRzKCkpKQogICAg
ICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjcmVhdGVG
b3JQYWdlKCkpCiAgICAgLCBtX3N0YXRlKGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JTdGF0ZShpbnNw
ZWN0b3JDbGllbnQpKSkKKyAgICAsIG1fb3ZlcmxheShJbnNwZWN0b3JPdmVybGF5OjpjcmVhdGUo
cGFnZSwgaW5zcGVjdG9yQ2xpZW50KSkKICAgICAsIG1fcGFnZShwYWdlKQogICAgICwgbV9pbnNw
ZWN0b3JDbGllbnQoaW5zcGVjdG9yQ2xpZW50KQogewpAQCAtODUsMTIgKzg3LDEyIEBAIEluc3Bl
Y3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9y
Q2xpZW50KiBpbnNwZWN0b3JDCiAgICAgbV9pbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50
UHRyLmdldCgpOwogICAgIG1fYWdlbnRzLmFwcGVuZChpbnNwZWN0b3JBZ2VudFB0ci5yZWxlYXNl
KCkpOwogCi0gICAgT3duUHRyPEluc3BlY3RvclBhZ2VBZ2VudD4gcGFnZUFnZW50UHRyKEluc3Bl
Y3RvclBhZ2VBZ2VudDo6Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgcGFnZSwg
bV9pbnNwZWN0b3JBZ2VudCwgbV9zdGF0ZS5nZXQoKSwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIu
Z2V0KCksIGluc3BlY3RvckNsaWVudCkpOworICAgIE93blB0cjxJbnNwZWN0b3JQYWdlQWdlbnQ+
IHBhZ2VBZ2VudFB0cihJbnNwZWN0b3JQYWdlQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdB
Z2VudHMuZ2V0KCksIHBhZ2UsIG1faW5zcGVjdG9yQWdlbnQsIG1fc3RhdGUuZ2V0KCksIG1faW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpLCBpbnNwZWN0b3JDbGllbnQsIG1fb3ZlcmxheS5nZXQo
KSkpOwogICAgIEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50ID0gcGFnZUFnZW50UHRyLmdl
dCgpOwogICAgIG1fcGFnZUFnZW50ID0gcGFnZUFnZW50UHRyLmdldCgpOwogICAgIG1fYWdlbnRz
LmFwcGVuZChwYWdlQWdlbnRQdHIucmVsZWFzZSgpKTsKIAotICAgIE93blB0cjxJbnNwZWN0b3JE
T01BZ2VudD4gZG9tQWdlbnRQdHIoSW5zcGVjdG9yRE9NQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1l
bnRpbmdBZ2VudHMuZ2V0KCksIHBhZ2VBZ2VudCwgaW5zcGVjdG9yQ2xpZW50LCBtX3N0YXRlLmdl
dCgpLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5nZXQoKSkpOworICAgIE93blB0cjxJbnNwZWN0
b3JET01BZ2VudD4gZG9tQWdlbnRQdHIoSW5zcGVjdG9yRE9NQWdlbnQ6OmNyZWF0ZShtX2luc3Ry
dW1lbnRpbmdBZ2VudHMuZ2V0KCksIHBhZ2VBZ2VudCwgbV9zdGF0ZS5nZXQoKSwgbV9pbmplY3Rl
ZFNjcmlwdE1hbmFnZXIuZ2V0KCksIG1fb3ZlcmxheS5nZXQoKSkpOwogICAgIG1fZG9tQWdlbnQg
PSBkb21BZ2VudFB0ci5nZXQoKTsKICAgICBtX2FnZW50cy5hcHBlbmQoZG9tQWdlbnRQdHIucmVs
ZWFzZSgpKTsKIApAQCAtMTMwLDcgKzEzMiw3IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3Bl
Y3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDCiAg
ICAgbV9hZ2VudHMuYXBwZW5kKGNvbnNvbGVBZ2VudFB0ci5yZWxlYXNlKCkpOwogCiAjaWYgRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgT3duUHRyPEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ+IGRlYnVnZ2VyQWdlbnRQdHIoUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1l
bnRpbmdBZ2VudHMuZ2V0KCksIG1fc3RhdGUuZ2V0KCksIHBhZ2UsIG1faW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmdldCgpKSk7CisgICAgT3duUHRyPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+IGRlYnVn
Z2VyQWdlbnRQdHIoUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2Vu
dHMuZ2V0KCksIG1fc3RhdGUuZ2V0KCksIHBhZ2UsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdl
dCgpLCBtX292ZXJsYXkuZ2V0KCkpKTsKICAgICBtX2RlYnVnZ2VyQWdlbnQgPSBkZWJ1Z2dlckFn
ZW50UHRyLmdldCgpOwogICAgIG1fYWdlbnRzLmFwcGVuZChkZWJ1Z2dlckFnZW50UHRyLnJlbGVh
c2UoKSk7CiAKQEAgLTI5NywxMiArMjk5LDEyIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzCiAK
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZHJhd0hpZ2hsaWdodChHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0CiB7Ci0gICAgbV9kb21BZ2VudC0+ZHJhd0hpZ2hsaWdodChjb250ZXh0
KTsKKyAgICBtX292ZXJsYXktPnBhaW50KGNvbnRleHQpOwogfQogCiB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OmdldEhpZ2hsaWdodChIaWdobGlnaHQqIGhpZ2hsaWdodCkgY29uc3QKIHsKLSAg
ICBtX2RvbUFnZW50LT5nZXRIaWdobGlnaHQoaGlnaGxpZ2h0KTsKKyAgICBtX292ZXJsYXktPmdl
dEhpZ2hsaWdodChoaWdobGlnaHQpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Omlu
c3BlY3QoTm9kZSogbm9kZSkKQEAgLTM0NCw3ICszNDYsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmhpZGVIaWdobGlnaHQoKQogCiBOb2RlKiBJbnNwZWN0b3JDb250cm9sbGVyOjpoaWdo
bGlnaHRlZE5vZGUoKSBjb25zdAogewotICAgIHJldHVybiBtX2RvbUFnZW50LT5oaWdobGlnaHRl
ZE5vZGUoKTsKKyAgICByZXR1cm4gbV9vdmVybGF5LT5oaWdobGlnaHRlZE5vZGUoKTsKIH0KIAog
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggYjdlMWNiZmQ4NDE3MTM0NDVhNzY4ZWM0
NmJkOTkxZWZjNzRmN2U5Ni4uOTA5OTZlNWU5NGEzODk1OGU4ODFlZWIxMGI5OTc5OTJkNzQ4NjZm
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5o
CkBAIC01Miw2ICs1Miw3IEBAIGNsYXNzIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ7CiBjbGFzcyBJ
bnNwZWN0b3JGcm9udGVuZDsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKIGNsYXNz
IEluc3BlY3RvckZyb250ZW5kQ2xpZW50OworY2xhc3MgSW5zcGVjdG9yT3ZlcmxheTsKIGNsYXNz
IEluc3BlY3RvclBhZ2VBZ2VudDsKIGNsYXNzIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ7CiBjbGFz
cyBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OwpAQCAtMTIwLDYgKzEyMSw3IEBAIHByaXZhdGU6CiAg
ICAgT3duUHRyPEluc3RydW1lbnRpbmdBZ2VudHM+IG1faW5zdHJ1bWVudGluZ0FnZW50czsKICAg
ICBPd25QdHI8SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyPiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsK
ICAgICBPd25QdHI8SW5zcGVjdG9yU3RhdGU+IG1fc3RhdGU7CisgICAgT3duUHRyPEluc3BlY3Rv
ck92ZXJsYXk+IG1fb3ZlcmxheTsKIAogICAgIEluc3BlY3RvckFnZW50KiBtX2luc3BlY3RvckFn
ZW50OwogICAgIEluc3BlY3RvckRPTUFnZW50KiBtX2RvbUFnZW50OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggOTA3OTU4OWU1MWNlOGYw
OGU1MGUyMDZlNDlhMTMyNmJlOTVjMzAxMi4uMjY2MmVkMDc2NzM3YWJjYTJmNjc2MWVlNmUzNzdh
NDhlYjM4MDcyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9N
QWdlbnQuY3BwCkBAIC02Niw3ICs2Niw2IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgog
I2luY2x1ZGUgIklkZW50aWZpZXJzRmFjdG9yeS5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0
TWFuYWdlci5oIgotI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgogI2luY2x1ZGUgIkluc3Bl
Y3RvckZyb250ZW5kLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySGlzdG9yeS5oIgogI2luY2x1ZGUg
Ikluc3BlY3RvclBhZ2VBZ2VudC5oIgpAQCAtMTE0LDQwICsxMTMsNiBAQCBzdGF0aWMgY29uc3Qg
Y2hhciB0b3VjaEV2ZW50RW11bGF0aW9uRW5hYmxlZFtdID0gInRvdWNoRXZlbnRFbXVsYXRpb25F
bmFibGVkIjsKIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4VGV4dFNpemUgPSAxMDAwMDsKIHN0YXRp
YyBjb25zdCBVQ2hhciBlbGxpcHNpc1VDaGFyW10gPSB7IDB4MjAyNiwgMCB9OwogCi1zdGF0aWMg
Q29sb3IgcGFyc2VDb2xvcihjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogY29sb3JPYmpl
Y3QpCi17Ci0gICAgaWYgKCFjb2xvck9iamVjdCB8fCAhKCpjb2xvck9iamVjdCkpCi0gICAgICAg
IHJldHVybiBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci0KLSAgICBpbnQgcjsKLSAgICBpbnQgZzsKLSAg
ICBpbnQgYjsKLSAgICBib29sIHN1Y2Nlc3MgPSAoKmNvbG9yT2JqZWN0KS0+Z2V0TnVtYmVyKCJy
IiwgJnIpOwotICAgIHN1Y2Nlc3MgfD0gKCpjb2xvck9iamVjdCktPmdldE51bWJlcigiZyIsICZn
KTsKLSAgICBzdWNjZXNzIHw9ICgqY29sb3JPYmplY3QpLT5nZXROdW1iZXIoImIiLCAmYik7Ci0g
ICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50OwotCi0g
ICAgZG91YmxlIGE7Ci0gICAgc3VjY2VzcyA9ICgqY29sb3JPYmplY3QpLT5nZXROdW1iZXIoImEi
LCAmYSk7Ci0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1cm4gQ29sb3IociwgZywgYik7
Ci0KLSAgICAvLyBDbGFtcCBhbHBoYSB0byB0aGUgWzAuLjFdIHJhbmdlLgotICAgIGlmIChhIDwg
MCkKLSAgICAgICAgYSA9IDA7Ci0gICAgZWxzZSBpZiAoYSA+IDEpCi0gICAgICAgIGEgPSAxOwot
Ci0gICAgcmV0dXJuIENvbG9yKHIsIGcsIGIsIHN0YXRpY19jYXN0PGludD4oYSAqIDI1NSkpOwot
fQotCi1zdGF0aWMgQ29sb3IgcGFyc2VDb25maWdDb2xvcihjb25zdCBTdHJpbmcmIGZpZWxkTmFt
ZSwgSW5zcGVjdG9yT2JqZWN0KiBjb25maWdPYmplY3QpCi17Ci0gICAgY29uc3QgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gY29sb3JPYmplY3QgPSBjb25maWdPYmplY3QtPmdldE9iamVjdChmaWVs
ZE5hbWUpOwotICAgIHJldHVybiBwYXJzZUNvbG9yKCZjb2xvck9iamVjdCk7Ci19Ci0KIGNsYXNz
IFJldmFsaWRhdGVTdHlsZUF0dHJpYnV0ZVRhc2sgewogcHVibGljOgogICAgIFJldmFsaWRhdGVT
dHlsZUF0dHJpYnV0ZVRhc2soSW5zcGVjdG9yRE9NQWdlbnQqKTsKQEAgLTE5NCwxMSArMTU5LDEx
IEBAIFN0cmluZyBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhjb25zdCBFeGNlcHRp
b25Db2RlJiBlYykKICAgICByZXR1cm4gIiI7CiB9CiAKLUluc3BlY3RvckRPTUFnZW50OjpJbnNw
ZWN0b3JET01BZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJ
bnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQsIElu
c3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmpl
Y3RlZFNjcmlwdE1hbmFnZXIpCitJbnNwZWN0b3JET01BZ2VudDo6SW5zcGVjdG9yRE9NQWdlbnQo
SW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yUGFnZUFn
ZW50KiBwYWdlQWdlbnQsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIEluc3BlY3Rvck92ZXJsYXkqIG92
ZXJsYXkpCiAgICAgOiBJbnNwZWN0b3JCYXNlQWdlbnQ8SW5zcGVjdG9yRE9NQWdlbnQ+KCJET00i
LCBpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnNwZWN0b3JTdGF0ZSkKICAgICAsIG1fcGFnZUFnZW50
KHBhZ2VBZ2VudCkKLSAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1faW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKGluamVjdGVkU2NyaXB0TWFuYWdlcikKKyAgICAsIG1fb3ZlcmxheShvdmVybGF5
KQogICAgICwgbV9mcm9udGVuZCgwKQogICAgICwgbV9kb21MaXN0ZW5lcigwKQogICAgICwgbV9s
YXN0Tm9kZUlkKDEpCkBAIC0yMTAsNyArMTc1LDYgQEAgSW5zcGVjdG9yRE9NQWdlbnQ6Okluc3Bl
Y3RvckRPTUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEkK
IEluc3BlY3RvckRPTUFnZW50Ojp+SW5zcGVjdG9yRE9NQWdlbnQoKQogewogICAgIHJlc2V0KCk7
Ci0gICAgQVNTRVJUKCFtX2hpZ2hsaWdodERhdGEgfHwgKCFtX2hpZ2hsaWdodERhdGEtPm5vZGUg
JiYgIW1faGlnaGxpZ2h0RGF0YS0+cmVjdCkpOwogICAgIEFTU0VSVCghbV9zZWFyY2hpbmdGb3JO
b2RlKTsKIH0KIApAQCAtMjcwLDExICsyMzQsNiBAQCBWZWN0b3I8RG9jdW1lbnQqPiBJbnNwZWN0
b3JET01BZ2VudDo6ZG9jdW1lbnRzKCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1Ob2RlKiBJ
bnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0ZWROb2RlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9oaWdobGlnaHREYXRhID8gbV9oaWdobGlnaHREYXRhLT5ub2RlLmdldCgpIDogMDsKLX0KLQog
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVzZXQoKQogewogICAgIGlmIChtX2hpc3RvcnkpCkBA
IC05MzgsMTAgKzg5Nyw4IEBAIGJvb2wgSW5zcGVjdG9yRE9NQWdlbnQ6OmhhbmRsZU1vdXNlUHJl
c3MoKQogICAgIGlmICghbV9zZWFyY2hpbmdGb3JOb2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBpZiAobV9oaWdobGlnaHREYXRhICYmIG1faGlnaGxpZ2h0RGF0YS0+bm9kZSkgewot
ICAgICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IG1faGlnaGxpZ2h0RGF0YS0+bm9kZTsKLSAgICAg
ICAgaW5zcGVjdChub2RlLmdldCgpKTsKLSAgICB9CisgICAgaWYgKE5vZGUqIG5vZGUgPSBtX292
ZXJsYXktPmhpZ2hsaWdodGVkTm9kZSgpKQorICAgICAgICBpbnNwZWN0KG5vZGUpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkBAIC05ODIsMTYgKzkzOSwxNCBAQCB2b2lkIEluc3BlY3RvckRPTUFn
ZW50Ojpmb2N1c05vZGUoKQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojptb3VzZURpZE1vdmVP
dmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIHVuc2lnbmVkKQogewotICAg
IGlmICghbV9zZWFyY2hpbmdGb3JOb2RlIHx8ICFtX2hpZ2hsaWdodERhdGEpCisgICAgaWYgKCFt
X3NlYXJjaGluZ0Zvck5vZGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIE5vZGUqIG5vZGUgPSBy
ZXN1bHQuaW5uZXJOb2RlKCk7CiAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZS0+bm9kZVR5cGUoKSA9
PSBOb2RlOjpURVhUX05PREUpCiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0g
ICAgaWYgKG5vZGUpIHsKLSAgICAgICAgbV9oaWdobGlnaHREYXRhLT5ub2RlID0gbm9kZTsKLSAg
ICAgICAgaGlnaGxpZ2h0KCk7Ci0gICAgfQorICAgIGlmIChub2RlKQorICAgICAgICBtX292ZXJs
YXktPmhpZ2hsaWdodE5vZGUobm9kZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNl
dFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkLCBJbnNwZWN0b3JPYmplY3QqIGhpZ2hsaWdo
dENvbmZpZykKQEAgLTEwMDAsMTEgKzk1NSwxMCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpz
ZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCwgSW5zcGVjdG9yT2JqZWN0KiBoaWdobAog
ICAgICAgICByZXR1cm47CiAgICAgbV9zZWFyY2hpbmdGb3JOb2RlID0gZW5hYmxlZDsKICAgICBp
ZiAoZW5hYmxlZCkKLSAgICAgICAgc2V0SGlnaGxpZ2h0RGF0YUZyb21Db25maWcoaGlnaGxpZ2h0
Q29uZmlnKTsKKyAgICAgICAgbV9vdmVybGF5LT5zZXRIaWdobGlnaHREYXRhRnJvbUNvbmZpZyho
aWdobGlnaHRDb25maWcpOwogICAgIGVsc2UgewogICAgICAgICBFcnJvclN0cmluZyBlcnJvcjsK
ICAgICAgICAgaGlkZUhpZ2hsaWdodCgmZXJyb3IpOwotICAgICAgICBtX2hpZ2hsaWdodERhdGEu
Y2xlYXIoKTsKICAgICB9CiB9CiAKQEAgLTEwMTMsMzkgKzk2Nyw5IEBAIHZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmluZyosIGJvb2wgZW5hYmxl
ZCwgY29uc3QKICAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVuYWJsZWQsIGhpZ2hsaWdodENvbmZp
ZyA/IGhpZ2hsaWdodENvbmZpZy0+Z2V0KCkgOiAwKTsKIH0KIAotYm9vbCBJbnNwZWN0b3JET01B
Z2VudDo6c2V0SGlnaGxpZ2h0RGF0YUZyb21Db25maWcoSW5zcGVjdG9yT2JqZWN0KiBoaWdobGln
aHRDb25maWcpCi17Ci0gICAgaWYgKCFoaWdobGlnaHRDb25maWcpIHsKLSAgICAgICAgbV9oaWdo
bGlnaHREYXRhLmNsZWFyKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBt
X2hpZ2hsaWdodERhdGEgPSBhZG9wdFB0cihuZXcgSGlnaGxpZ2h0RGF0YSgpKTsKLSAgICBib29s
IHNob3dJbmZvID0gZmFsc2U7IC8vIERlZmF1bHQ6IGZhbHNlIChkbyBub3Qgc2hvdyBhIHRvb2x0
aXApLgotICAgIGhpZ2hsaWdodENvbmZpZy0+Z2V0Qm9vbGVhbigic2hvd0luZm8iLCAmc2hvd0lu
Zm8pOwotICAgIG1faGlnaGxpZ2h0RGF0YS0+c2hvd0luZm8gPSBzaG93SW5mbzsKLSAgICBtX2hp
Z2hsaWdodERhdGEtPmNvbnRlbnQgPSBwYXJzZUNvbmZpZ0NvbG9yKCJjb250ZW50Q29sb3IiLCBo
aWdobGlnaHRDb25maWcpOwotICAgIG1faGlnaGxpZ2h0RGF0YS0+Y29udGVudE91dGxpbmUgPSBw
YXJzZUNvbmZpZ0NvbG9yKCJjb250ZW50T3V0bGluZUNvbG9yIiwgaGlnaGxpZ2h0Q29uZmlnKTsK
LSAgICBtX2hpZ2hsaWdodERhdGEtPnBhZGRpbmcgPSBwYXJzZUNvbmZpZ0NvbG9yKCJwYWRkaW5n
Q29sb3IiLCBoaWdobGlnaHRDb25maWcpOwotICAgIG1faGlnaGxpZ2h0RGF0YS0+Ym9yZGVyID0g
cGFyc2VDb25maWdDb2xvcigiYm9yZGVyQ29sb3IiLCBoaWdobGlnaHRDb25maWcpOwotICAgIG1f
aGlnaGxpZ2h0RGF0YS0+bWFyZ2luID0gcGFyc2VDb25maWdDb2xvcigibWFyZ2luQ29sb3IiLCBo
aWdobGlnaHRDb25maWcpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEluc3BlY3RvckRP
TUFnZW50OjpoaWdobGlnaHQoKQotewotICAgIC8vIFRoaXMgbWV0aG9kIHJlcXVpcmVzIG1faGln
aGxpZ2h0RGF0YSB0byBoYXZlIGJlZW4gZmlsbGVkIGluIGJ5IGl0cyBjbGllbnQuCi0gICAgQVNT
RVJUKG1faGlnaGxpZ2h0RGF0YSk7Ci0gICAgbV9jbGllbnQtPmhpZ2hsaWdodCgpOwotfQotCiB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRSZWN0KEVycm9yU3RyaW5nKiwgaW50IHgs
IGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+KiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIG91dGxpbmVDb2xvcikK
IHsKLSAgICBtX2hpZ2hsaWdodERhdGEgPSBhZG9wdFB0cihuZXcgSGlnaGxpZ2h0RGF0YSgpKTsK
LSAgICBtX2hpZ2hsaWdodERhdGEtPnJlY3QgPSBhZG9wdFB0cihuZXcgSW50UmVjdCh4LCB5LCB3
aWR0aCwgaGVpZ2h0KSk7Ci0gICAgbV9oaWdobGlnaHREYXRhLT5jb250ZW50ID0gcGFyc2VDb2xv
cihjb2xvcik7Ci0gICAgbV9oaWdobGlnaHREYXRhLT5jb250ZW50T3V0bGluZSA9IHBhcnNlQ29s
b3Iob3V0bGluZUNvbG9yKTsKLSAgICBtX2NsaWVudC0+aGlnaGxpZ2h0KCk7CisgICAgbV9vdmVy
bGF5LT5oaWdobGlnaHRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQsIGNvbG9yLCBvdXRsaW5lQ29s
b3IpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHROb2RlKApAQCAtMTA1
MywxMiArOTc3LDkgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Tm9kZSgKICAg
ICBpbnQgbm9kZUlkLAogICAgIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBoaWdobGln
aHRDb25maWcpCiB7Ci0gICAgaWYgKE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKSkgewot
ICAgICAgICBpZiAoc2V0SGlnaGxpZ2h0RGF0YUZyb21Db25maWcoaGlnaGxpZ2h0Q29uZmlnLmdl
dCgpKSkgewotICAgICAgICAgICAgbV9oaWdobGlnaHREYXRhLT5ub2RlID0gbm9kZTsKLSAgICAg
ICAgICAgIGhpZ2hsaWdodCgpOwotICAgICAgICB9Ci0gICAgfQorICAgIGlmIChOb2RlKiBub2Rl
ID0gbm9kZUZvcklkKG5vZGVJZCkpCisgICAgICAgIGlmIChtX292ZXJsYXktPnNldEhpZ2hsaWdo
dERhdGFGcm9tQ29uZmlnKGhpZ2hsaWdodENvbmZpZy5nZXQoKSkpCisgICAgICAgICAgICBtX292
ZXJsYXktPmhpZ2hsaWdodE5vZGUobm9kZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OmhpZ2hsaWdodEZyYW1lKApAQCAtMTA2OCwyMyArOTg5LDEzIEBAIHZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OmhpZ2hsaWdodEZyYW1lKAogICAgIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
KiBvdXRsaW5lQ29sb3IpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlQWdlbnQtPmZyYW1l
Rm9ySWQoZnJhbWVJZCk7Ci0gICAgaWYgKGZyYW1lICYmIGZyYW1lLT5vd25lckVsZW1lbnQoKSkg
ewotICAgICAgICBtX2hpZ2hsaWdodERhdGEgPSBhZG9wdFB0cihuZXcgSGlnaGxpZ2h0RGF0YSgp
KTsKLSAgICAgICAgbV9oaWdobGlnaHREYXRhLT5ub2RlID0gZnJhbWUtPm93bmVyRWxlbWVudCgp
OwotICAgICAgICBtX2hpZ2hsaWdodERhdGEtPnNob3dJbmZvID0gdHJ1ZTsgLy8gQWx3YXlzIHNo
b3cgdG9vbHRpcHMgZm9yIGZyYW1lcy4KLSAgICAgICAgbV9oaWdobGlnaHREYXRhLT5jb250ZW50
ID0gcGFyc2VDb2xvcihjb2xvcik7Ci0gICAgICAgIG1faGlnaGxpZ2h0RGF0YS0+Y29udGVudE91
dGxpbmUgPSBwYXJzZUNvbG9yKG91dGxpbmVDb2xvcik7Ci0gICAgICAgIGhpZ2hsaWdodCgpOwot
ICAgIH0KKyAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPm93bmVyRWxlbWVudCgpKQorICAgICAgICBt
X292ZXJsYXktPmhpZ2hsaWdodEZyYW1lKGZyYW1lLCBjb2xvciwgb3V0bGluZUNvbG9yKTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlkZUhpZ2hsaWdodChFcnJvclN0cmluZyopCiB7
Ci0gICAgaWYgKG1faGlnaGxpZ2h0RGF0YSkgewotICAgICAgICBtX2hpZ2hsaWdodERhdGEtPm5v
ZGUuY2xlYXIoKTsKLSAgICAgICAgbV9oaWdobGlnaHREYXRhLT5yZWN0LmNsZWFyKCk7Ci0gICAg
fQotICAgIG1fY2xpZW50LT5oaWRlSGlnaGxpZ2h0KCk7CisgICAgbV9vdmVybGF5LT5oaWRlSGln
aGxpZ2h0KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Om1vdmVUbyhFcnJvclN0cmlu
ZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGludCB0YXJnZXRFbGVtZW50SWQsIGNvbnN0IGlu
dCogY29uc3QgYW5jaG9yTm9kZUlkLCBpbnQqIG5ld05vZGVJZCkKQEAgLTE1OTksMjIgKzE1MTAs
NiBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IEluc3Bl
Y3RvckRPTUFnZW50OjpyZXNvbHZlTm9kZShObwogICAgIHJldHVybiBpbmplY3RlZFNjcmlwdC53
cmFwTm9kZShub2RlLCBvYmplY3RHcm91cCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OmRyYXdIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGlm
ICghbV9oaWdobGlnaHREYXRhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBET01Ob2RlSGlnaGxp
Z2h0ZXI6OmRyYXdIaWdobGlnaHQoY29udGV4dCwgbV9oaWdobGlnaHREYXRhLT5ub2RlID8gbV9o
aWdobGlnaHREYXRhLT5ub2RlLT5kb2N1bWVudCgpIDogbV9kb2N1bWVudC5nZXQoKSwgbV9oaWdo
bGlnaHREYXRhLmdldCgpKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0SGlnaGxp
Z2h0KEhpZ2hsaWdodCogaGlnaGxpZ2h0KSBjb25zdAotewotICAgIGlmICghbV9oaWdobGlnaHRE
YXRhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBET01Ob2RlSGlnaGxpZ2h0ZXI6OmdldEhpZ2hs
aWdodChtX2hpZ2hsaWdodERhdGEtPm5vZGUgPyBtX2hpZ2hsaWdodERhdGEtPm5vZGUtPmRvY3Vt
ZW50KCkgOiBtX2RvY3VtZW50LmdldCgpLCBtX2hpZ2hsaWdodERhdGEuZ2V0KCksIGhpZ2hsaWdo
dCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9N
QWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCmlu
ZGV4IGIwNWFiNTcwZDlmZDFiMDQ4NzA2YTM5M2EyNDY2NTk3YjQ5NjM5YmYuLjg2ZTU2ZGQ0YmNl
ZjhlM2NiYmQ1NmJmMDRkNTk2ZWIzZTA4OTJkNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC01Niw5ICs1Niw5IEBAIGNsYXNzIERvY3VtZW50
OwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEV2ZW50OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0Owot
Y2xhc3MgSW5zcGVjdG9yQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CiBjbGFzcyBJ
bnNwZWN0b3JIaXN0b3J5OworY2xhc3MgSW5zcGVjdG9yT3ZlcmxheTsKIGNsYXNzIEluc3BlY3Rv
clBhZ2VBZ2VudDsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBIaXRUZXN0UmVzdWx0OwpAQCAtMTAz
LDkgKzEwMyw5IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZE1vZGlmeURPTUF0
dHIoRWxlbWVudCopID0gMDsKICAgICB9OwogCi0gICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVj
dG9yRE9NQWdlbnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdl
bnRzLCBJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgSW5zcGVjdG9yQ2xpZW50KiBjbGll
bnQsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
KiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9y
RE9NQWdlbnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
LCBJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3Rv
clN0YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgSW5z
cGVjdG9yT3ZlcmxheSogb3ZlcmxheSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgSW5zcGVjdG9yRE9NQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgcGFnZUFnZW50LCBjbGll
bnQsIGluc3BlY3RvclN0YXRlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JET01BZ2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBw
YWdlQWdlbnQsIGluc3BlY3RvclN0YXRlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIG92ZXJsYXkp
KTsKICAgICB9CiAKICAgICBzdGF0aWMgU3RyaW5nIHRvRXJyb3JTdHJpbmcoY29uc3QgRXhjZXB0
aW9uQ29kZSYpOwpAQCAtMTUxLDggKzE1MSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
cmVkbyhFcnJvclN0cmluZyopOwogICAgIHZpcnR1YWwgdm9pZCBtYXJrVW5kb2FibGVTdGF0ZShF
cnJvclN0cmluZyopOwogCi0gICAgTm9kZSogaGlnaGxpZ2h0ZWROb2RlKCkgY29uc3Q7Ci0KICAg
ICB2b2lkIGdldEV2ZW50TGlzdGVuZXJzKE5vZGUqLCBWZWN0b3I8RXZlbnRMaXN0ZW5lckluZm8+
JiBsaXN0ZW5lcnNBcnJheSwgYm9vbCBpbmNsdWRlQW5jZXN0b3JzKTsKIAogICAgIC8vIE1ldGhv
ZHMgY2FsbGVkIGZyb20gdGhlIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi4KQEAgLTE4NSw5ICsx
ODMsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnNwZWN0KE5vZGUqKTsKICAgICB2b2lkIGZvY3Vz
Tm9kZSgpOwogCi0gICAgdm9pZCBkcmF3SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
OwotICAgIHZvaWQgZ2V0SGlnaGxpZ2h0KEhpZ2hsaWdodCopIGNvbnN0OwotCiAgICAgSW5zcGVj
dG9ySGlzdG9yeSogaGlzdG9yeSgpIHsgcmV0dXJuIG1faGlzdG9yeS5nZXQoKTsgfQogCiAgICAg
Ly8gV2UgcmVwcmVzZW50IGVtYmVkZGVkIGRvbXMgYXMgYSBwYXJ0IG9mIHRoZSBzYW1lIGhpZXJh
cmNoeS4gSGVuY2Ugd2UgdHJlYXQgY2hpbGRyZW4gb2YgZnJhbWUgb3duZXJzIGRpZmZlcmVudGx5
LgpAQCAtMjA1LDExICsyMDAsOSBAQCBwdWJsaWM6CiAgICAgSW5zcGVjdG9yUGFnZUFnZW50KiBw
YWdlQWdlbnQoKSB7IHJldHVybiBtX3BhZ2VBZ2VudDsgfQogCiBwcml2YXRlOgotICAgIEluc3Bl
Y3RvckRPTUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JQYWdlQWdlbnQqLCBJ
bnNwZWN0b3JDbGllbnQqLCBJbnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciop
OworICAgIEluc3BlY3RvckRPTUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JQ
YWdlQWdlbnQqLCBJbnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciosIEluc3Bl
Y3Rvck92ZXJsYXkqKTsKIAogICAgIHZvaWQgc2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJs
ZWQsIEluc3BlY3Rvck9iamVjdCogaGlnaGxpZ2h0Q29uZmlnKTsKLSAgICBib29sIHNldEhpZ2hs
aWdodERhdGFGcm9tQ29uZmlnKEluc3BlY3Rvck9iamVjdCogaGlnaGxpZ2h0Q29uZmlnKTsKLSAg
ICB2b2lkIGhpZ2hsaWdodCgpOwogCiAgICAgLy8gTm9kZS1yZWxhdGVkIG1ldGhvZHMuCiAgICAg
dHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxOb2RlPiwgaW50PiBOb2RlVG9JZE1hcDsKQEAgLTI0MSw4
ICsyMzQsOCBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIG1f
cGFnZUFnZW50OwotICAgIEluc3BlY3RvckNsaWVudCogbV9jbGllbnQ7CiAgICAgSW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyKiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKKyAgICBJbnNwZWN0b3JPdmVy
bGF5KiBtX292ZXJsYXk7CiAgICAgSW5zcGVjdG9yRnJvbnRlbmQ6OkRPTSogbV9mcm9udGVuZDsK
ICAgICBET01MaXN0ZW5lciogbV9kb21MaXN0ZW5lcjsKICAgICBOb2RlVG9JZE1hcCBtX2RvY3Vt
ZW50Tm9kZVRvSWRNYXA7CkBAIC0yNTYsNyArMjQ5LDYgQEAgcHJpdmF0ZToKICAgICB0eXBlZGVm
IEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gPiBTZWFyY2hSZXN1bHRzOwog
ICAgIFNlYXJjaFJlc3VsdHMgbV9zZWFyY2hSZXN1bHRzOwogICAgIE93blB0cjxSZXZhbGlkYXRl
U3R5bGVBdHRyaWJ1dGVUYXNrPiBtX3JldmFsaWRhdGVTdHlsZUF0dHJUYXNrOwotICAgIE93blB0
cjxIaWdobGlnaHREYXRhPiBtX2hpZ2hsaWdodERhdGE7CiAgICAgUmVmUHRyPE5vZGU+IG1fbm9k
ZVRvRm9jdXM7CiAgICAgYm9vbCBtX3NlYXJjaGluZ0Zvck5vZGU7CiAgICAgT3duUHRyPEluc3Bl
Y3Rvckhpc3Rvcnk+IG1faGlzdG9yeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCmluZGV4IDA5Yzk3ZDE5NTNlNGI5YjAwMTYxZjg3NGY0
NTMxZmJkZWM3ZGI2Y2QuLmIyZTc5YWQ3ZWYxZmU4MzgyMmZlNTMwMTg4OTRmNDI3MWI0MmNiYmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuaApAQCAtMTMzLDE3ICsxMzMsMTggQEAgcHJvdGVjdGVkOgogICAgIEluamVjdGVkU2NyaXB0
TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCkgeyByZXR1cm4gbV9pbmplY3RlZFNjcmlw
dE1hbmFnZXI7IH0KICAgICB2aXJ0dWFsIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9y
RXZhbChFcnJvclN0cmluZyosIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKSA9IDA7CiAK
KyAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZSgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRQYXVzZShT
Y3JpcHRTdGF0ZSosIGNvbnN0IFNjcmlwdFZhbHVlJiBjYWxsRnJhbWVzLCBjb25zdCBTY3JpcHRW
YWx1ZSYgZXhjZXB0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29udGludWUoKTsKKwogcHJp
dmF0ZToKICAgICB2b2lkIGVuYWJsZSgpOwotICAgIHZvaWQgZGlzYWJsZSgpOwogICAgIGJvb2wg
ZW5hYmxlZCgpOwogCiAgICAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxk
ZXI6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+ID4gY3VycmVudENhbGxGcmFtZXMoKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBkaWRQYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBT
Y3JpcHQmKTsKICAgICB2aXJ0dWFsIHZvaWQgZmFpbGVkVG9QYXJzZVNvdXJjZShjb25zdCBTdHJp
bmcmIHVybCwgY29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgZmlyc3RMaW5lLCBpbnQgZXJyb3JMaW5l
LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFBhdXNl
KFNjcmlwdFN0YXRlKiwgY29uc3QgU2NyaXB0VmFsdWUmIGNhbGxGcmFtZXMsIGNvbnN0IFNjcmlw
dFZhbHVlJiBleGNlcHRpb24pOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDb250aW51ZSgpOwogCiAg
ICAgdm9pZCBzZXRQYXVzZU9uRXhjZXB0aW9uc0ltcGwoRXJyb3JTdHJpbmcqLCBpbnQpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4
IGVmMzQ1MzdmMGUxMThmYjVlMGNiODhjYTJmYWI1ZTNlZjYwYTM1NzcuLjk2NzZkMTM4ZTg1NmZm
OTUwOTZiYzJlMDQ4NjRhMThlZGRlODJjNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCkBAIC0yMjMsOSArMjIzLDkgQEAgYm9vbCBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OnNoYXJlZEJ1ZmZlckNvbnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+IGJ1ZmZlciwgY28KICAgICByZXR1cm4gZGVjb2RlU2hhcmVkQnVmZmVyKGJ1ZmZlciwgdGV4
dEVuY29kaW5nTmFtZSwgcmVzdWx0KTsKIH0KIAotUGFzc093blB0cjxJbnNwZWN0b3JQYWdlQWdl
bnQ+IEluc3BlY3RvclBhZ2VBZ2VudDo6Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3Ry
dW1lbnRpbmdBZ2VudHMsIFBhZ2UqIHBhZ2UsIEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2Vu
dCwgSW5zcGVjdG9yU3RhdGUqIHN0YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVk
U2NyaXB0TWFuYWdlciwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCitQYXNzT3duUHRyPEluc3Bl
Y3RvclBhZ2VBZ2VudD4gSW5zcGVjdG9yUGFnZUFnZW50OjpjcmVhdGUoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgUGFnZSogcGFnZSwgSW5zcGVjdG9yQWdlbnQqIGlu
c3BlY3RvckFnZW50LCBJbnNwZWN0b3JTdGF0ZSogc3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdl
ciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCwgSW5zcGVj
dG9yT3ZlcmxheSogb3ZlcmxheSkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEluc3BlY3Rv
clBhZ2VBZ2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBwYWdlLCBpbnNwZWN0b3JBZ2VudCwgc3Rh
dGUsIGluamVjdGVkU2NyaXB0TWFuYWdlciwgY2xpZW50KSk7CisgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBJbnNwZWN0b3JQYWdlQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgcGFnZSwgaW5zcGVj
dG9yQWdlbnQsIHN0YXRlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIGNsaWVudCwgb3ZlcmxheSkp
OwogfQogCiAvLyBzdGF0aWMKQEAgLTMwOCwxMyArMzA4LDE0IEBAIFR5cGVCdWlsZGVyOjpQYWdl
OjpSZXNvdXJjZVR5cGU6OkVudW0gSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5
cGVKc29uCiAgICAgcmV0dXJuIHJlc291cmNlVHlwZUpzb24oY2FjaGVkUmVzb3VyY2VUeXBlKGNh
Y2hlZFJlc291cmNlKSk7CiB9CiAKLUluc3BlY3RvclBhZ2VBZ2VudDo6SW5zcGVjdG9yUGFnZUFn
ZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIFBhZ2UqIHBhZ2Us
IEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3Rv
clN0YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgSW5z
cGVjdG9yQ2xpZW50KiBjbGllbnQpCitJbnNwZWN0b3JQYWdlQWdlbnQ6Okluc3BlY3RvclBhZ2VB
Z2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYWdlKiBwYWdl
LCBJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0
b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIElu
c3BlY3RvckNsaWVudCogY2xpZW50LCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQogICAgIDog
SW5zcGVjdG9yQmFzZUFnZW50PEluc3BlY3RvclBhZ2VBZ2VudD4oIlBhZ2UiLCBpbnN0cnVtZW50
aW5nQWdlbnRzLCBpbnNwZWN0b3JTdGF0ZSkKICAgICAsIG1fcGFnZShwYWdlKQogICAgICwgbV9p
bnNwZWN0b3JBZ2VudChpbnNwZWN0b3JBZ2VudCkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyKGluamVjdGVkU2NyaXB0TWFuYWdlcikKICAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAs
IG1fZnJvbnRlbmQoMCkKKyAgICAsIG1fb3ZlcmxheShvdmVybGF5KQogICAgICwgbV9sYXN0U2Ny
aXB0SWRlbnRpZmllcigwKQogICAgICwgbV9sYXN0UGFpbnRDb250ZXh0KDApCiAgICAgLCBtX2Rp
ZExvYWRFdmVudEZpcmUoZmFsc2UpCkBAIC04ODUsNyArODg2LDcgQEAgdm9pZCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmRpZFBhaW50KCkKICAgICAgICAgQ29sb3IoMCwgMCwgMHhGRiwgMHgzRiksCiAg
ICAgfTsKIAotICAgIERPTU5vZGVIaWdobGlnaHRlcjo6ZHJhd091dGxpbmUoKm1fbGFzdFBhaW50
Q29udGV4dCwgbV9sYXN0UGFpbnRSZWN0LCBjb2xvcnNbY29sb3JTZWxlY3RvcisrICUgV1RGX0FS
UkFZX0xFTkdUSChjb2xvcnMpXSk7CisgICAgbV9vdmVybGF5LT5kcmF3T3V0bGluZSgqbV9sYXN0
UGFpbnRDb250ZXh0LCBtX2xhc3RQYWludFJlY3QsIGNvbG9yc1tjb2xvclNlbGVjdG9yKysgJSBX
VEZfQVJSQVlfTEVOR1RIKGNvbG9ycyldKTsKIAogICAgIG1fbGFzdFBhaW50Q29udGV4dCA9IDA7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFn
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKaW5k
ZXggOTY0YmM4NWZjNjM2NDhhZjM4ZjJkYzEyZmM4M2Y3OTcxYjkzYTY2My4uYzNiOWE2ZDJmNDVi
ZWUyYjczZmMxMDk4YjY1MmFiYWNhYjJhZjlmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaApAQCAtNTMsNiArNTMsNyBAQCBjbGFzcyBJbnNwZWN0
b3JBZ2VudDsKIGNsYXNzIEluc3BlY3RvckFycmF5OwogY2xhc3MgSW5zcGVjdG9yQ2xpZW50Owog
Y2xhc3MgSW5zcGVjdG9yT2JqZWN0OworY2xhc3MgSW5zcGVjdG9yT3ZlcmxheTsKIGNsYXNzIElu
c3BlY3RvclN0YXRlOwogY2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsKIGNsYXNzIEtVUkw7CkBA
IC03Nyw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICAgICAgT3RoZXJSZXNvdXJjZQogICAgIH07CiAK
LSAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JQYWdlQWdlbnQ+IGNyZWF0ZShJbnN0cnVt
ZW50aW5nQWdlbnRzKiwgUGFnZSosIEluc3BlY3RvckFnZW50KiwgSW5zcGVjdG9yU3RhdGUqLCBJ
bmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JDbGllbnQqKTsKKyAgICBzdGF0aWMgUGFz
c093blB0cjxJbnNwZWN0b3JQYWdlQWdlbnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiwg
UGFnZSosIEluc3BlY3RvckFnZW50KiwgSW5zcGVjdG9yU3RhdGUqLCBJbmplY3RlZFNjcmlwdE1h
bmFnZXIqLCBJbnNwZWN0b3JDbGllbnQqLCBJbnNwZWN0b3JPdmVybGF5Kik7CiAKICAgICBzdGF0
aWMgYm9vbCBjYWNoZWRSZXNvdXJjZUNvbnRlbnQoQ2FjaGVkUmVzb3VyY2UqLCBTdHJpbmcqIHJl
c3VsdCwgYm9vbCogYmFzZTY0RW5jb2RlZCk7CiAgICAgc3RhdGljIGJvb2wgc2hhcmVkQnVmZmVy
Q29udGVudChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIGNvbnN0IFN0cmluZyYgdGV4dEVuY29k
aW5nTmFtZSwgYm9vbCB3aXRoQmFzZTY0RW5jb2RlLCBTdHJpbmcqIHJlc3VsdCk7CkBAIC0xMzcs
NyArMTM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBEb2N1bWVudExvYWRlciogYXNzZXJ0RG9j
dW1lbnRMb2FkZXIoRXJyb3JTdHJpbmcqLCBGcmFtZSopOwogCiBwcml2YXRlOgotICAgIEluc3Bl
Y3RvclBhZ2VBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgUGFnZSosIEluc3BlY3RvckFnZW50
KiwgSW5zcGVjdG9yU3RhdGUqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JDbGll
bnQqKTsKKyAgICBJbnNwZWN0b3JQYWdlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIFBhZ2Uq
LCBJbnNwZWN0b3JBZ2VudCosIEluc3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
KiwgSW5zcGVjdG9yQ2xpZW50KiwgSW5zcGVjdG9yT3ZlcmxheSopOwogICAgIHZvaWQgdXBkYXRl
Vmlld01ldHJpY3MoaW50LCBpbnQsIGRvdWJsZSwgYm9vbCk7CiAKICAgICBQYXNzUmVmUHRyPFR5
cGVCdWlsZGVyOjpQYWdlOjpGcmFtZT4gYnVpbGRPYmplY3RGb3JGcmFtZShGcmFtZSopOwpAQCAt
MTQ3LDYgKzE0OCw3IEBAIHByaXZhdGU6CiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2lu
amVjdGVkU2NyaXB0TWFuYWdlcjsKICAgICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50OwogICAg
IEluc3BlY3RvckZyb250ZW5kOjpQYWdlKiBtX2Zyb250ZW5kOworICAgIEluc3BlY3Rvck92ZXJs
YXkqIG1fb3ZlcmxheTsKICAgICBsb25nIG1fbGFzdFNjcmlwdElkZW50aWZpZXI7CiAgICAgU3Ry
aW5nIG1fcGVuZGluZ1NjcmlwdFRvRXZhbHVhdGVPbkxvYWRPbmNlOwogICAgIFN0cmluZyBtX3Nj
cmlwdFRvRXZhbHVhdGVPbkxvYWRPbmNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Q
YWdlRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggYTU4NmVkZjNmZDQxMDhjOWQwNzkyYzBiZGZlYmUx
ZTgzZmFmZjg2YS4uNGI0NTkyYTIzMzhkMWJjNzM2NTYxZTRkMzA2YTI2MTQ1NTAyODA0ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCkBAIC0z
NSwxOSArMzUsMjEgQEAKICNpbmNsdWRlICJQYWdlRGVidWdnZXJBZ2VudC5oIgogCiAjaW5jbHVk
ZSAiQ29uc29sZS5oIgorI2luY2x1ZGUgIkRPTU5vZGVIaWdobGlnaHRlci5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlU2NyaXB0RGVidWdTZXJ2ZXIuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1QYXNzT3duUHRyPFBhZ2VEZWJ1Z2dlckFnZW50PiBQYWdlRGVidWdnZXJB
Z2VudDo6Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIElu
c3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgUGFnZSogaW5zcGVjdGVkUGFnZSwgSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCitQYXNzT3duUHRyPFBhZ2VE
ZWJ1Z2dlckFnZW50PiBQYWdlRGVidWdnZXJBZ2VudDo6Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2Vu
dHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwg
UGFnZSogaW5zcGVjdGVkUGFnZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlw
dE1hbmFnZXIsIEluc3BlY3Rvck92ZXJsYXkqIG92ZXJsYXkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBQYWdlRGVidWdnZXJBZ2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnNwZWN0b3JT
dGF0ZSwgaW5zcGVjdGVkUGFnZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKSk7CisgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBQYWdlRGVidWdnZXJBZ2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnNw
ZWN0b3JTdGF0ZSwgaW5zcGVjdGVkUGFnZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBvdmVybGF5
KSk7CiB9CiAKLVBhZ2VEZWJ1Z2dlckFnZW50OjpQYWdlRGVidWdnZXJBZ2VudChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9y
U3RhdGUsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKQorUGFnZURlYnVnZ2VyQWdlbnQ6OlBhZ2VEZWJ1Z2dlckFnZW50KElu
c3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclN0YXRlKiBp
bnNwZWN0b3JTdGF0ZSwgUGFnZSogaW5zcGVjdGVkUGFnZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
KiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIEluc3BlY3Rvck92ZXJsYXkqIG92ZXJsYXkpCiAgICAg
OiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0
YXRlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCiAgICAgLCBtX2luc3BlY3RlZFBhZ2UoaW5zcGVj
dGVkUGFnZSkKKyAgICAsIG1fb3ZlcmxheShvdmVybGF5KQogewogfQogCkBAIC05Miw2ICs5NCwy
MyBAQCBJbmplY3RlZFNjcmlwdCBQYWdlRGVidWdnZXJBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JF
dmFsKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZwogICAgIHJldHVybiBpbmplY3RlZFNjcmlwdDsK
IH0KIAordm9pZCBQYWdlRGVidWdnZXJBZ2VudDo6ZGlzYWJsZSgpCit7CisgICAgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6ZGlzYWJsZSgpOworICAgIG1fb3ZlcmxheS0+c2V0UGF1c2VkSW5EZWJ1
Z2dlcihmYWxzZSk7Cit9CisKK3ZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKFNjcmlw
dFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgU2NyaXB0VmFsdWUmIGNhbGxGcmFtZXMsIGNvbnN0
IFNjcmlwdFZhbHVlJiBleGNlcHRpb24pCit7CisgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
ZGlkUGF1c2Uoc2NyaXB0U3RhdGUsIGNhbGxGcmFtZXMsIGV4Y2VwdGlvbik7CisgICAgbV9vdmVy
bGF5LT5zZXRQYXVzZWRJbkRlYnVnZ2VyKHRydWUpOworfQorCit2b2lkIFBhZ2VEZWJ1Z2dlckFn
ZW50OjpkaWRDb250aW51ZSgpCit7CisgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ29u
dGludWUoKTsKKyAgICBtX292ZXJsYXktPnNldFBhdXNlZEluRGVidWdnZXIoZmFsc2UpOworfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1Bh
Z2VEZWJ1Z2dlckFnZW50LmgKaW5kZXggOWRiZDUxM2Y5ZjFhMjhiYjk4NDI0OTEzNTc4MTQ4NmM3
M2MzMjYxOC4uZDkwZmRlYjgyYWVjOGUyMTcxOWI1N2M0OTM1ZTE1MGZhZGI2ZGVlZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmgKQEAgLTM3LDYgKzM3
LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbnNwZWN0b3JPdmVybGF5Owog
Y2xhc3MgUGFnZTsKIGNsYXNzIFBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjsKIApAQCAtNDQsNyArNDUs
NyBAQCBjbGFzcyBQYWdlRGVidWdnZXJBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYWdlRGVidWdnZXJBZ2VudCk7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8
UGFnZURlYnVnZ2VyQWdlbnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9y
U3RhdGUqLCBQYWdlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKik7CisgICAgc3RhdGljIFBhc3NP
d25QdHI8UGFnZURlYnVnZ2VyQWdlbnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5z
cGVjdG9yU3RhdGUqLCBQYWdlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9yT3Zl
cmxheSopOwogICAgIHZpcnR1YWwgflBhZ2VEZWJ1Z2dlckFnZW50KCk7CiAKIHByaXZhdGU6CkBA
IC01Niw4ICs1NywxMyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBJbmplY3RlZFNjcmlwdCBp
bmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcqLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNv
bnRleHRJZCk7CiAKLSAgICBQYWdlRGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwg
SW5zcGVjdG9yU3RhdGUqLCBQYWdlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKik7CisgICAgdmly
dHVhbCB2b2lkIGRpc2FibGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUGF1c2UoU2NyaXB0U3Rh
dGUqLCBjb25zdCBTY3JpcHRWYWx1ZSYgY2FsbEZyYW1lcywgY29uc3QgU2NyaXB0VmFsdWUmIGV4
Y2VwdGlvbik7CisgICAgdmlydHVhbCB2b2lkIGRpZENvbnRpbnVlKCk7CisKKyAgICBQYWdlRGVi
dWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yU3RhdGUqLCBQYWdlKiwg
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9yT3ZlcmxheSopOwogICAgIFBhZ2UqIGNv
bnN0IG1faW5zcGVjdGVkUGFnZTsKKyAgICBJbnNwZWN0b3JPdmVybGF5KiBtX292ZXJsYXk7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152976</attachid>
            <date>2012-07-18 03:11:21 -0700</date>
            <delta_ts>2012-07-18 05:23:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90880-20120718141119.patch</filename>
            <type>text/plain</type>
            <size>38957</size>
            <attacher name="Sergey Rogulenko">rogulenko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyODU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGYyMGFjNzQ5YzU1ODgz
OGNiOWZkYTNjMTE0ZTVkN2ViYTYyYmM0OC4uNDc1YzI2YjY2NTI1YzE5MTRiNWIyZDIzYzNiOTcx
YjI4NGQzMjk0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1IEBACisyMDEyLTA3LTE4ICBTZXJn
ZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogYWRkaW5nIHBhdXNlIGljb24gZm9yIEphdmFTY3JpcHQgZGVidWdnaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg4MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yZWQgRE9NTm9k
ZUhpZ2hsaWdodGVyIGludG8gSW5zcGVjdG9yT3ZlcmxheSBjbGFzcyBhbmQgYWRkZWQgYSBmZWF0
dXJlIHRvIHNob3cgYSAicGF1c2UiIHNjcmVlbiB3aGVuCisgICAgICAgIHRoZSBKYXZhc2NyaXB0
IGRlYnVnZ2VyIGlzIHBhdXNlZC4KKworICAgICAgICAqIGluc3BlY3Rvci9ET01Ob2RlSGlnaGxp
Z2h0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6SW5zcGVjdG9y
T3ZlcmxheSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpwYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3T3V0bGluZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpnZXRIaWdobGlnaHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6c2V0UGF1c2VkSW5EZWJ1Z2dlcik6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmhpZGVIaWdobGln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6aGlnaGxpZ2h0Tm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpzZXRIaWdobGlnaHREYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmNsZWFySGlnaGxpZ2h0RGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpoaWdobGlnaHRlZE5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6dXBkYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdIaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yT3ZlcmxheTo6ZHJhd1BhdXNlZEluRGVidWdnZXIpOgorICAgICAgICAqIGlu
c3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoSW5zcGVjdG9yT3ZlcmxheSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5
OjpjcmVhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZHJhd0hpZ2hsaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRIaWdobGlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aGlnaGxpZ2h0ZWROb2Rl
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChJbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6Okluc3BlY3RvckRPTUFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRPTUFnZW50Ojp+SW5zcGVjdG9yRE9NQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRE9NQWdlbnQ6OmhhbmRsZU1vdXNlUHJlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRE9NQWdlbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRPTUFnZW50OjpzZXRTZWFyY2hpbmdGb3JOb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckRPTUFnZW50OjpzZXRIaWdobGlnaHREYXRhRnJvbUNvbmZpZyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHROb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRGcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6aGlkZUhpZ2hsaWdodCk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpjcmVhdGUpOgorICAgICAgICAoSW5zcGVj
dG9yRE9NQWdlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
Lmg6CisgICAgICAgIChJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBh
Z2VBZ2VudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6
SW5zcGVjdG9yUGFnZUFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2Vu
dDo6ZGlkUGFpbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGluc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2Vu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlRGVidWdnZXJBZ2VudDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50OjpQYWdlRGVidWdnZXJBZ2VudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlRGVidWdnZXJBZ2VudDo6ZGlzYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZSk6
CisgICAgICAgIChXZWJDb3JlOjpQYWdlRGVidWdnZXJBZ2VudDo6ZGlkQ29udGludWUpOgorICAg
ICAgICAqIGluc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChQYWdlRGVidWdnZXJBZ2VudCk6CisKIDIwMTItMDctMTcgIEhhbnMgTXVsbGVy
ICA8aG11bGxlckBhZG9iZS5jb20+CiAKICAgICAgICAgUmVuYW1lIENTUyBFeGNsdXNpb25zIENT
U1dyYXBTaGFwZSBjbGFzcyBwcm9wZXJ0aWVzIHRvIG1hdGNoIEV4Y2x1c2lvbiBzaGFwZSBmdW5j
dGlvbiBwYXJhbWV0ZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9N
Tm9kZUhpZ2hsaWdodGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGln
aGxpZ2h0ZXIuY3BwCmluZGV4IGU0YzcxMDBkNjFjNTIwODNmMzgyNzFmMmE3Mjc1NDc1NDY4ZWRi
MmMuLmE3ZDIyZDE5YWNkZDlmNzM2NjM1ODg0OGMzZmYwMzdmM2ZhZDk0YTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwCkBAIC0zOSw2ICsz
OSw3IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNsaWVu
dC5oIgogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmFu
Z2UuaCIKQEAgLTQ2Miw5ICs0NjMsOSBAQCBzdGF0aWMgdm9pZCBnZXRPckRyYXdOb2RlSGlnaGxp
Z2h0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgSGlnaGxpZ2h0RGF0YSogaGlnaAogICAgICAg
ICBkcmF3RWxlbWVudFRpdGxlKCpjb250ZXh0LCBub2RlLCByZW5kZXJlciwgcGl4ZWxTbmFwcGVk
SW50UmVjdChib3VuZGluZ0JveCksIHBpeGVsU25hcHBlZEludFJlY3QodGl0bGVBbmNob3JCb3gp
LCB2aXNpYmxlUmVjdCwgY29udGFpbmluZ0ZyYW1lLT5zZXR0aW5ncygpKTsKIH0KIAotc3RhdGlj
IHZvaWQgZ2V0T3JEcmF3UmVjdEhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIERv
Y3VtZW50KiBkb2N1bWVudCwgSGlnaGxpZ2h0RGF0YSogaGlnaGxpZ2h0RGF0YSwgSGlnaGxpZ2h0
ICpoaWdobGlnaHQpCitzdGF0aWMgdm9pZCBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgUGFnZSogcGFnZSwgSGlnaGxpZ2h0RGF0YSogaGlnaGxpZ2h0RGF0
YSwgSGlnaGxpZ2h0ICpoaWdobGlnaHQpCiB7Ci0gICAgaWYgKCFkb2N1bWVudCkKKyAgICBpZiAo
IXBhZ2UpCiAgICAgICAgIHJldHVybjsKIAogICAgIEZsb2F0UmVjdCBoaWdobGlnaHRSZWN0KCoo
aGlnaGxpZ2h0RGF0YS0+cmVjdCkpOwpAQCAtNDczLDcgKzQ3NCw3IEBAIHN0YXRpYyB2b2lkIGdl
dE9yRHJhd1JlY3RIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBEb2N1bWVudCog
ZG9jdW1lbnQsCiAgICAgaGlnaGxpZ2h0LT5xdWFkcy5hcHBlbmQoaGlnaGxpZ2h0UmVjdCk7CiAK
ICAgICBpZiAoY29udGV4dCkgewotICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSBkb2N1bWVudC0+
ZnJhbWUoKS0+dmlldygpOworICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSBwYWdlLT5tYWluRnJh
bWUoKS0+dmlldygpOwogICAgICAgICBpZiAoIXZpZXctPmRlbGVnYXRlc1Njcm9sbGluZygpKSB7
CiAgICAgICAgICAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVu
dFJlY3QoKTsKICAgICAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtdmlzaWJsZVJlY3QueCgp
LCAtdmlzaWJsZVJlY3QueSgpKTsKQEAgLTQ4NSw0NCArNDg2LDEzOCBAQCBzdGF0aWMgdm9pZCBn
ZXRPckRyYXdSZWN0SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgRG9jdW1lbnQq
IGRvY3VtZW50LAogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAotbmFtZXNwYWNlIERPTU5v
ZGVIaWdobGlnaHRlciB7CitJbnNwZWN0b3JPdmVybGF5OjpJbnNwZWN0b3JPdmVybGF5KFBhZ2Uq
IHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQorICAgIDogbV9wYWdlKHBhZ2UpCisgICAg
LCBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX3BhdXNlZEluRGVidWdnZXIoZmFsc2UpCit7Cit9
CiAKLXZvaWQgZHJhd0hpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIERvY3VtZW50
KiBkb2N1bWVudCwgSGlnaGxpZ2h0RGF0YSogaGlnaGxpZ2h0RGF0YSkKK3ZvaWQgSW5zcGVjdG9y
T3ZlcmxheTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIGlmICghaGln
aGxpZ2h0RGF0YSkKLSAgICAgICAgcmV0dXJuOworICAgIGRyYXdQYXVzZWRJbkRlYnVnZ2VyKGNv
bnRleHQpOworICAgIGRyYXdIaWdobGlnaHQoY29udGV4dCk7Cit9CiAKLSAgICBIaWdobGlnaHQg
aGlnaGxpZ2h0OwotICAgIGlmIChoaWdobGlnaHREYXRhLT5ub2RlKQotICAgICAgICBnZXRPckRy
YXdOb2RlSGlnaGxpZ2h0KCZjb250ZXh0LCBoaWdobGlnaHREYXRhLCAmaGlnaGxpZ2h0KTsKLSAg
ICBlbHNlIGlmIChoaWdobGlnaHREYXRhLT5yZWN0KQotICAgICAgICBnZXRPckRyYXdSZWN0SGln
aGxpZ2h0KCZjb250ZXh0LCBkb2N1bWVudCwgaGlnaGxpZ2h0RGF0YSwgJmhpZ2hsaWdodCk7Cit2
b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdPdXRsaW5lKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIEZs
b2F0UmVjdCBvdXRsaW5lUmVjdCA9IHJlY3Q7CisgICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0
LCBvdXRsaW5lUmVjdCwgQ29sb3IoKSwgY29sb3IpOwogfQogCi12b2lkIGdldEhpZ2hsaWdodChE
b2N1bWVudCogZG9jdW1lbnQsIEhpZ2hsaWdodERhdGEqIGhpZ2hsaWdodERhdGEsIEhpZ2hsaWdo
dCogaGlnaGxpZ2h0KQordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpnZXRIaWdobGlnaHQoSGlnaGxp
Z2h0KiBoaWdobGlnaHQpIGNvbnN0CiB7Ci0gICAgaWYgKCFoaWdobGlnaHREYXRhKQorICAgIGlm
ICghbV9oaWdobGlnaHREYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBoaWdobGlnaHQtPmNv
bnRlbnRDb2xvciA9IGhpZ2hsaWdodERhdGEtPmNvbnRlbnQ7Ci0gICAgaGlnaGxpZ2h0LT5wYWRk
aW5nQ29sb3IgPSBoaWdobGlnaHREYXRhLT5wYWRkaW5nOwotICAgIGhpZ2hsaWdodC0+Ym9yZGVy
Q29sb3IgPSBoaWdobGlnaHREYXRhLT5ib3JkZXI7Ci0gICAgaGlnaGxpZ2h0LT5tYXJnaW5Db2xv
ciA9IGhpZ2hsaWdodERhdGEtPm1hcmdpbjsKKyAgICBoaWdobGlnaHQtPmNvbnRlbnRDb2xvciA9
IG1faGlnaGxpZ2h0RGF0YS0+Y29udGVudDsKKyAgICBoaWdobGlnaHQtPnBhZGRpbmdDb2xvciA9
IG1faGlnaGxpZ2h0RGF0YS0+cGFkZGluZzsKKyAgICBoaWdobGlnaHQtPmJvcmRlckNvbG9yID0g
bV9oaWdobGlnaHREYXRhLT5ib3JkZXI7CisgICAgaGlnaGxpZ2h0LT5tYXJnaW5Db2xvciA9IG1f
aGlnaGxpZ2h0RGF0YS0+bWFyZ2luOwogICAgIGhpZ2hsaWdodC0+dHlwZSA9IEhpZ2hsaWdodFR5
cGVSZWN0czsKIAotICAgIGlmIChoaWdobGlnaHREYXRhLT5ub2RlKQotICAgICAgICBnZXRPckRy
YXdOb2RlSGlnaGxpZ2h0KDAsIGhpZ2hsaWdodERhdGEsIGhpZ2hsaWdodCk7Ci0gICAgZWxzZSBp
ZiAoaGlnaGxpZ2h0RGF0YS0+cmVjdCkKLSAgICAgICAgZ2V0T3JEcmF3UmVjdEhpZ2hsaWdodCgw
LCBkb2N1bWVudCwgaGlnaGxpZ2h0RGF0YSwgaGlnaGxpZ2h0KTsKKyAgICBpZiAobV9oaWdobGln
aHREYXRhLT5ub2RlKQorICAgICAgICBnZXRPckRyYXdOb2RlSGlnaGxpZ2h0KDAsIG1faGlnaGxp
Z2h0RGF0YS5nZXQoKSwgaGlnaGxpZ2h0KTsKKyAgICBlbHNlIGlmIChtX2hpZ2hsaWdodERhdGEt
PnJlY3QpCisgICAgICAgIGdldE9yRHJhd1JlY3RIaWdobGlnaHQoMCwgbV9wYWdlLCBtX2hpZ2hs
aWdodERhdGEuZ2V0KCksIGhpZ2hsaWdodCk7CiB9CiAKLXZvaWQgZHJhd091dGxpbmUoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYg
Y29sb3IpCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnNldFBhdXNlZEluRGVidWdnZXIoYm9vbCBm
bGFnKQogewotICAgIEZsb2F0UmVjdCBvdXRsaW5lUmVjdCA9IHJlY3Q7Ci0gICAgZHJhd091dGxp
bmVkUXVhZChjb250ZXh0LCBvdXRsaW5lUmVjdCwgQ29sb3IoKSwgY29sb3IpOworICAgIG1fcGF1
c2VkSW5EZWJ1Z2dlciA9IGZsYWc7CisgICAgdXBkYXRlKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
T3ZlcmxheTo6aGlkZUhpZ2hsaWdodCgpCit7CisgICAgaWYgKG1faGlnaGxpZ2h0RGF0YSkgewor
ICAgICAgICBtX2hpZ2hsaWdodERhdGEtPnJlY3QuY2xlYXIoKTsKKyAgICAgICAgbV9oaWdobGln
aHREYXRhLT5ub2RlLmNsZWFyKCk7CisgICAgfQorICAgIHVwZGF0ZSgpOworfQorCit2b2lkIElu
c3BlY3Rvck92ZXJsYXk6OmhpZ2hsaWdodE5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAobV9o
aWdobGlnaHREYXRhKQorICAgICAgICBtX2hpZ2hsaWdodERhdGEtPm5vZGUgPSBub2RlOworICAg
IHVwZGF0ZSgpOworfQorCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnNldEhpZ2hsaWdodERhdGEo
UGFzc093blB0cjxIaWdobGlnaHREYXRhPiBoaWdobGlnaHREYXRhKQoreworICAgIG1faGlnaGxp
Z2h0RGF0YSA9IGhpZ2hsaWdodERhdGE7CisgICAgdXBkYXRlKCk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yT3ZlcmxheTo6Y2xlYXJIaWdobGlnaHREYXRhKCkKK3sKKyAgICBtX2hpZ2hsaWdodERhdGEu
Y2xlYXIoKTsKKyAgICB1cGRhdGUoKTsKK30KKworTm9kZSogSW5zcGVjdG9yT3ZlcmxheTo6aGln
aGxpZ2h0ZWROb2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9oaWdobGlnaHREYXRhID8gbV9o
aWdobGlnaHREYXRhLT5ub2RlLmdldCgpIDogMDsKIH0KIAotfSAvLyBuYW1lc3BhY2UgRE9NTm9k
ZUhpZ2hsaWdodGVyCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnVwZGF0ZSgpCit7CisgICAgaWYg
KCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2hpZ2hsaWdodERhdGEgfHwg
bV9wYXVzZWRJbkRlYnVnZ2VyKQorICAgICAgICBtX2NsaWVudC0+aGlnaGxpZ2h0KCk7CisgICAg
ZWxzZQorICAgICAgICBtX2NsaWVudC0+aGlkZUhpZ2hsaWdodCgpOworfQorCit2b2lkIEluc3Bl
Y3Rvck92ZXJsYXk6OmRyYXdIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQorewor
ICAgIGlmICghbV9oaWdobGlnaHREYXRhIHx8ICghbV9oaWdobGlnaHREYXRhLT5yZWN0ICYmICFt
X2hpZ2hsaWdodERhdGEtPm5vZGUpKQorICAgICAgICByZXR1cm47CisKKyAgICBIaWdobGlnaHQg
aGlnaGxpZ2h0OworICAgIGlmIChtX2hpZ2hsaWdodERhdGEtPm5vZGUpCisgICAgICAgIGdldE9y
RHJhd05vZGVIaWdobGlnaHQoJmNvbnRleHQsIG1faGlnaGxpZ2h0RGF0YS5nZXQoKSwgJmhpZ2hs
aWdodCk7CisgICAgZWxzZSBpZiAobV9oaWdobGlnaHREYXRhLT5yZWN0KQorICAgICAgICBnZXRP
ckRyYXdSZWN0SGlnaGxpZ2h0KCZjb250ZXh0LCBtX3BhZ2UsIG1faGlnaGxpZ2h0RGF0YS5nZXQo
KSwgJmhpZ2hsaWdodCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd1BhdXNlZElu
RGVidWdnZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIGlmICghbV9wYXVzZWRJ
bkRlYnVnZ2VyKQorICAgICAgICByZXR1cm47CisKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENv
bG9yLCBiYWNrZ3JvdW5kQ29sb3IsICgwLCAwLCAwLCAzMSkpOworICAgIERFRklORV9TVEFUSUNf
TE9DQUwoQ29sb3IsIHRleHRCYWNrZ3JvdW5kQ29sb3IsICgyNTUsIDI1NSwgMTk0KSk7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgYm9yZGVyQ29sb3IsICgxMjgsIDEyOCwgMTI4KSk7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChpbnQsIGZvbnRIZWlnaHQsICgyNCkpOworCisgICAg
RnJhbWUqIGZyYW1lID0gbV9wYWdlLT5tYWluRnJhbWUoKTsKKyAgICBTZXR0aW5ncyogc2V0dGlu
Z3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsKKyAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gZnJhbWUt
PnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisKKyAgICBjb250ZXh0LnNldEZpbGxDb2xv
cihiYWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJh
d1JlY3QodmlzaWJsZVJlY3QpOworCisgICAgRm9udERlc2NyaXB0aW9uIGRlc2M7CisgICAgc2V0
VXBGb250RGVzY3JpcHRpb24oZGVzYywgc2V0dGluZ3MpOworICAgIGRlc2Muc2V0Q29tcHV0ZWRT
aXplKGZvbnRIZWlnaHQpOworICAgIEZvbnQgZm9udCA9IEZvbnQoZGVzYywgMCwgMCk7CisgICAg
Zm9udC51cGRhdGUoMCk7CisKKyAgICBTdHJpbmcgdGV4dCA9ICJQYXVzZWQgaW4gZGVidWdnZXIu
IjsKKyAgICBUZXh0UnVuIHRleHRSdW4odGV4dCk7CisgICAgSW50UmVjdCB0aXRsZVJlY3QgPSBl
bmNsb3NpbmdJbnRSZWN0KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQodGV4dFJ1biwgSW50UG9p
bnQoKSwgZm9udEhlaWdodCkpOworICAgIHRpdGxlUmVjdC5pbmZsYXRlKHJlY3RJbmZsYXRlUHgp
OworICAgIHRpdGxlUmVjdC5zZXRMb2NhdGlvbihJbnRQb2ludCh2aXNpYmxlUmVjdC53aWR0aCgp
IC8gMiAtIHRpdGxlUmVjdC53aWR0aCgpIC8gMiwgMCkpOworCisgICAgY29udGV4dC5zZXRGaWxs
Q29sb3IodGV4dEJhY2tncm91bmRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29u
dGV4dC5zZXRTdHJva2VDb2xvcihib3JkZXJDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Cisg
ICAgY29udGV4dC5kcmF3UmVjdCh0aXRsZVJlY3QpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9y
KENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5kcmF3VGV4
dChmb250LCB0ZXh0UnVuLCBJbnRQb2ludCh0aXRsZVJlY3QueCgpICsgcmVjdEluZmxhdGVQeCwg
dGl0bGVSZWN0LnkoKSArIGZvbnRIZWlnaHQpKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdo
dGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmgKaW5k
ZXggZjdiNmYwMGY0ZmZlMDI1OTEzNTUyNTRkZmUxOTNkMDMwNjJjZTNkOS4uZmVhNjE2NWUxYTI1
M2FmMzI5NThmNjU1YzUwZWFjMzUzNjc4OWNmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaApAQCAtMzIsMTggKzMyLDIxIEBACiAjaW5jbHVkZSAi
Q29sb3IuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJMYXlvdXRUeXBlcy5o
IgorI2luY2x1ZGUgIk5vZGUuaCIKIAogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29sb3I7Ci1jbGFz
cyBEb2N1bWVudDsKLWNsYXNzIEZyYW1lVmlldzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2Ns
YXNzIEluc3BlY3RvckNsaWVudDsKK2NsYXNzIEludFJlY3Q7CiBjbGFzcyBOb2RlOworY2xhc3Mg
UGFnZTsKIAogc3RydWN0IEhpZ2hsaWdodERhdGEgewogICAgIENvbG9yIGNvbnRlbnQ7CkBAIC03
NSwxMyArNzgsMzggQEAgc3RydWN0IEhpZ2hsaWdodCB7CiAgICAgVmVjdG9yPEZsb2F0UXVhZD4g
cXVhZHM7CiB9OwogCi1uYW1lc3BhY2UgRE9NTm9kZUhpZ2hsaWdodGVyIHsKK2NsYXNzIEluc3Bl
Y3Rvck92ZXJsYXkgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3Rvck92
ZXJsYXk+IGNyZWF0ZShQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9yT3ZlcmxheShwYWdlLCBjbGll
bnQpKTsKKyAgICB9CiAKLXZvaWQgZHJhd0hpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmLCBEb2N1
bWVudCosIEhpZ2hsaWdodERhdGEqKTsKLXZvaWQgZ2V0SGlnaGxpZ2h0KERvY3VtZW50KiwgSGln
aGxpZ2h0RGF0YSosIEhpZ2hsaWdodCopOwotdm9pZCBkcmF3T3V0bGluZShHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBMYXlvdXRSZWN0JiwgY29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIHBhaW50KEdy
YXBoaWNzQ29udGV4dCYpOworICAgIHZvaWQgZHJhd091dGxpbmUoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBnZXRIaWdobGlnaHQo
SGlnaGxpZ2h0KikgY29uc3Q7CiAKLX0gLy8gbmFtZXNwYWNlIERPTU5vZGVIaWdobGlnaHRlcgor
ICAgIHZvaWQgc2V0UGF1c2VkSW5EZWJ1Z2dlcihib29sKTsKKworICAgIHZvaWQgaGlkZUhpZ2hs
aWdodCgpOworICAgIHZvaWQgaGlnaGxpZ2h0Tm9kZShOb2RlKik7CisgICAgdm9pZCBzZXRIaWdo
bGlnaHREYXRhKFBhc3NPd25QdHI8SGlnaGxpZ2h0RGF0YT4pOworICAgIHZvaWQgY2xlYXJIaWdo
bGlnaHREYXRhKCk7CisKKyAgICBOb2RlKiBoaWdobGlnaHRlZE5vZGUoKSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICBJbnNwZWN0b3JPdmVybGF5KFBhZ2UqLCBJbnNwZWN0b3JDbGllbnQqKTsKKwor
ICAgIHZvaWQgdXBkYXRlKCk7CisgICAgdm9pZCBkcmF3SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4
dCYpOworICAgIHZvaWQgZHJhd1BhdXNlZEluRGVidWdnZXIoR3JhcGhpY3NDb250ZXh0Jik7CisK
KyAgICBQYWdlKiBtX3BhZ2U7CisgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKKyAgICBi
b29sIG1fcGF1c2VkSW5EZWJ1Z2dlcjsKKyAgICBPd25QdHI8SGlnaGxpZ2h0RGF0YT4gbV9oaWdo
bGlnaHREYXRhOworfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggOTEyYmJhYWQ2
MmYzZGJhNDU2ZmYzZGMwYTdjYzU3ZjE4NzEyNTI3My4uYzNmOWYwOGIzMzlkYmFjMWI2NzIwOTA3
OTRhNzU0OWIwMDM4Mjg4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMzQsNiArMzQsNyBAQAogCiAjaW5jbHVkZSAiSW5zcGVj
dG9yQ29udHJvbGxlci5oIgogCisjaW5jbHVkZSAiRE9NTm9kZUhpZ2hsaWdodGVyLmgiCiAjaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJ
ZGVudGlmaWVyc0ZhY3RvcnkuaCIKQEAgLTc4LDYgKzc5LDcgQEAgSW5zcGVjdG9yQ29udHJvbGxl
cjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGluc3Bl
Y3RvckMKICAgICA6IG1faW5zdHJ1bWVudGluZ0FnZW50cyhhZG9wdFB0cihuZXcgSW5zdHJ1bWVu
dGluZ0FnZW50cygpKSkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKEluamVjdGVkU2Ny
aXB0TWFuYWdlcjo6Y3JlYXRlRm9yUGFnZSgpKQogICAgICwgbV9zdGF0ZShhZG9wdFB0cihuZXcg
SW5zcGVjdG9yU3RhdGUoaW5zcGVjdG9yQ2xpZW50KSkpCisgICAgLCBtX292ZXJsYXkoSW5zcGVj
dG9yT3ZlcmxheTo6Y3JlYXRlKHBhZ2UsIGluc3BlY3RvckNsaWVudCkpCiAgICAgLCBtX3BhZ2Uo
cGFnZSkKICAgICAsIG1faW5zcGVjdG9yQ2xpZW50KGluc3BlY3RvckNsaWVudCkKIHsKQEAgLTg1
LDEyICs4NywxMiBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBh
Z2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQwogICAgIG1faW5zcGVjdG9yQWdl
bnQgPSBpbnNwZWN0b3JBZ2VudFB0ci5nZXQoKTsKICAgICBtX2FnZW50cy5hcHBlbmQoaW5zcGVj
dG9yQWdlbnRQdHIucmVsZWFzZSgpKTsKIAotICAgIE93blB0cjxJbnNwZWN0b3JQYWdlQWdlbnQ+
IHBhZ2VBZ2VudFB0cihJbnNwZWN0b3JQYWdlQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdB
Z2VudHMuZ2V0KCksIHBhZ2UsIG1faW5zcGVjdG9yQWdlbnQsIG1fc3RhdGUuZ2V0KCksIG1faW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpLCBpbnNwZWN0b3JDbGllbnQpKTsKKyAgICBPd25QdHI8
SW5zcGVjdG9yUGFnZUFnZW50PiBwYWdlQWdlbnRQdHIoSW5zcGVjdG9yUGFnZUFnZW50OjpjcmVh
dGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBwYWdlLCBtX2luc3BlY3RvckFnZW50LCBt
X3N0YXRlLmdldCgpLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5nZXQoKSwgaW5zcGVjdG9yQ2xp
ZW50LCBtX292ZXJsYXkuZ2V0KCkpKTsKICAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2Vu
dCA9IHBhZ2VBZ2VudFB0ci5nZXQoKTsKICAgICBtX3BhZ2VBZ2VudCA9IHBhZ2VBZ2VudFB0ci5n
ZXQoKTsKICAgICBtX2FnZW50cy5hcHBlbmQocGFnZUFnZW50UHRyLnJlbGVhc2UoKSk7CiAKLSAg
ICBPd25QdHI8SW5zcGVjdG9yRE9NQWdlbnQ+IGRvbUFnZW50UHRyKEluc3BlY3RvckRPTUFnZW50
OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBwYWdlQWdlbnQsIGluc3BlY3Rv
ckNsaWVudCwgbV9zdGF0ZS5nZXQoKSwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuZ2V0KCkpKTsK
KyAgICBPd25QdHI8SW5zcGVjdG9yRE9NQWdlbnQ+IGRvbUFnZW50UHRyKEluc3BlY3RvckRPTUFn
ZW50OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBwYWdlQWdlbnQsIG1fc3Rh
dGUuZ2V0KCksIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpLCBtX292ZXJsYXkuZ2V0KCkp
KTsKICAgICBtX2RvbUFnZW50ID0gZG9tQWdlbnRQdHIuZ2V0KCk7CiAgICAgbV9hZ2VudHMuYXBw
ZW5kKGRvbUFnZW50UHRyLnJlbGVhc2UoKSk7CiAKQEAgLTEzMCw3ICsxMzIsNyBAQCBJbnNwZWN0
b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNs
aWVudCogaW5zcGVjdG9yQwogICAgIG1fYWdlbnRzLmFwcGVuZChjb25zb2xlQWdlbnRQdHIucmVs
ZWFzZSgpKTsKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIE93blB0cjxJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50PiBkZWJ1Z2dlckFnZW50UHRyKFBhZ2VEZWJ1Z2dlckFnZW50
OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBtX3N0YXRlLmdldCgpLCBwYWdl
LCBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5nZXQoKSkpOworICAgIE93blB0cjxJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50PiBkZWJ1Z2dlckFnZW50UHRyKFBhZ2VEZWJ1Z2dlckFnZW50OjpjcmVhdGUo
bV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBtX3N0YXRlLmdldCgpLCBwYWdlLCBtX2luamVj
dGVkU2NyaXB0TWFuYWdlci5nZXQoKSwgbV9vdmVybGF5LmdldCgpKSk7CiAgICAgbV9kZWJ1Z2dl
ckFnZW50ID0gZGVidWdnZXJBZ2VudFB0ci5nZXQoKTsKICAgICBtX2FnZW50cy5hcHBlbmQoZGVi
dWdnZXJBZ2VudFB0ci5yZWxlYXNlKCkpOwogCkBAIC0yOTcsMTIgKzI5OSwxMiBAQCB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQobG9uZyBjYWxsSWQs
IGNvbnN0IFN0cmluZyYgcwogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRyYXdIaWdobGln
aHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewotICAgIG1fZG9tQWdlbnQtPmRy
YXdIaWdobGlnaHQoY29udGV4dCk7CisgICAgbV9vdmVybGF5LT5wYWludChjb250ZXh0KTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRIaWdobGlnaHQoSGlnaGxpZ2h0KiBoaWdo
bGlnaHQpIGNvbnN0CiB7Ci0gICAgbV9kb21BZ2VudC0+Z2V0SGlnaGxpZ2h0KGhpZ2hsaWdodCk7
CisgICAgbV9vdmVybGF5LT5nZXRIaWdobGlnaHQoaGlnaGxpZ2h0KTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjppbnNwZWN0KE5vZGUqIG5vZGUpCkBAIC0zNDQsNyArMzQ2LDcgQEAg
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpoaWRlSGlnaGxpZ2h0KCkKIAogTm9kZSogSW5zcGVj
dG9yQ29udHJvbGxlcjo6aGlnaGxpZ2h0ZWROb2RlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9k
b21BZ2VudC0+aGlnaGxpZ2h0ZWROb2RlKCk7CisgICAgcmV0dXJuIG1fb3ZlcmxheS0+aGlnaGxp
Z2h0ZWROb2RlKCk7CiB9CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IGI3ZTFj
YmZkODQxNzEzNDQ1YTc2OGVjNDZiZDk5MWVmYzc0ZjdlOTYuLjkwOTk2ZTVlOTRhMzg5NThlODgx
ZWViMTBiOTk3OTkyZDc0ODY2ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuaApAQCAtNTIsNiArNTIsNyBAQCBjbGFzcyBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWw7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVudDsKK2NsYXNzIEluc3Bl
Y3Rvck92ZXJsYXk7CiBjbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JQ
cm9maWxlckFnZW50OwogY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDsKQEAgLTEyMCw2ICsx
MjEsNyBAQCBwcml2YXRlOgogICAgIE93blB0cjxJbnN0cnVtZW50aW5nQWdlbnRzPiBtX2luc3Ry
dW1lbnRpbmdBZ2VudHM7CiAgICAgT3duUHRyPEluamVjdGVkU2NyaXB0TWFuYWdlcj4gbV9pbmpl
Y3RlZFNjcmlwdE1hbmFnZXI7CiAgICAgT3duUHRyPEluc3BlY3RvclN0YXRlPiBtX3N0YXRlOwor
ICAgIE93blB0cjxJbnNwZWN0b3JPdmVybGF5PiBtX292ZXJsYXk7CiAKICAgICBJbnNwZWN0b3JB
Z2VudCogbV9pbnNwZWN0b3JBZ2VudDsKICAgICBJbnNwZWN0b3JET01BZ2VudCogbV9kb21BZ2Vu
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmlu
ZGV4IDkwNzk1ODllNTFjZThmMDhlNTBlMjA2ZTQ5YTEzMjZiZTk1YzMwMTIuLjFlYTgyMGIzNWUx
NmY1MzE0ZWFhYzU0YjEzNzQzMjlkOGQyN2Y3MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtNjYsNyArNjYsNiBAQAogI2luY2x1ZGUg
IkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJZGVudGlmaWVyc0ZhY3RvcnkuaCIKICNpbmNs
dWRlICJJbmplY3RlZFNjcmlwdE1hbmFnZXIuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckhp
c3RvcnkuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JQYWdlQWdlbnQuaCIKQEAgLTE5NCwxMSArMTkz
LDExIEBAIFN0cmluZyBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhjb25zdCBFeGNl
cHRpb25Db2RlJiBlYykKICAgICByZXR1cm4gIiI7CiB9CiAKLUluc3BlY3RvckRPTUFnZW50OjpJ
bnNwZWN0b3JET01BZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
LCBJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQs
IEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBp
bmplY3RlZFNjcmlwdE1hbmFnZXIpCitJbnNwZWN0b3JET01BZ2VudDo6SW5zcGVjdG9yRE9NQWdl
bnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yUGFn
ZUFnZW50KiBwYWdlQWdlbnQsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIEluc3BlY3Rvck92ZXJsYXkq
IG92ZXJsYXkpCiAgICAgOiBJbnNwZWN0b3JCYXNlQWdlbnQ8SW5zcGVjdG9yRE9NQWdlbnQ+KCJE
T00iLCBpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnNwZWN0b3JTdGF0ZSkKICAgICAsIG1fcGFnZUFn
ZW50KHBhZ2VBZ2VudCkKLSAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1faW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyKGluamVjdGVkU2NyaXB0TWFuYWdlcikKKyAgICAsIG1fb3ZlcmxheShvdmVy
bGF5KQogICAgICwgbV9mcm9udGVuZCgwKQogICAgICwgbV9kb21MaXN0ZW5lcigwKQogICAgICwg
bV9sYXN0Tm9kZUlkKDEpCkBAIC0yMTAsNyArMjA5LDYgQEAgSW5zcGVjdG9yRE9NQWdlbnQ6Oklu
c3BlY3RvckRPTUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMs
IEkKIEluc3BlY3RvckRPTUFnZW50Ojp+SW5zcGVjdG9yRE9NQWdlbnQoKQogewogICAgIHJlc2V0
KCk7Ci0gICAgQVNTRVJUKCFtX2hpZ2hsaWdodERhdGEgfHwgKCFtX2hpZ2hsaWdodERhdGEtPm5v
ZGUgJiYgIW1faGlnaGxpZ2h0RGF0YS0+cmVjdCkpOwogICAgIEFTU0VSVCghbV9zZWFyY2hpbmdG
b3JOb2RlKTsKIH0KIApAQCAtMjcwLDExICsyNjgsNiBAQCBWZWN0b3I8RG9jdW1lbnQqPiBJbnNw
ZWN0b3JET01BZ2VudDo6ZG9jdW1lbnRzKCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1Ob2Rl
KiBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0ZWROb2RlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9oaWdobGlnaHREYXRhID8gbV9oaWdobGlnaHREYXRhLT5ub2RlLmdldCgpIDogMDsKLX0K
LQogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVzZXQoKQogewogICAgIGlmIChtX2hpc3Rvcnkp
CkBAIC05MzgsMTEgKzkzMSwxMSBAQCBib29sIEluc3BlY3RvckRPTUFnZW50OjpoYW5kbGVNb3Vz
ZVByZXNzKCkKICAgICBpZiAoIW1fc2VhcmNoaW5nRm9yTm9kZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgaWYgKG1faGlnaGxpZ2h0RGF0YSAmJiBtX2hpZ2hsaWdodERhdGEtPm5vZGUp
IHsKLSAgICAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBtX2hpZ2hsaWdodERhdGEtPm5vZGU7Ci0g
ICAgICAgIGluc3BlY3Qobm9kZS5nZXQoKSk7CisgICAgaWYgKE5vZGUqIG5vZGUgPSBtX292ZXJs
YXktPmhpZ2hsaWdodGVkTm9kZSgpKSB7CisgICAgICAgIGluc3BlY3Qobm9kZSk7CisgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Omluc3BlY3QoTm9kZSogbm9kZSkKQEAgLTk4
MiwxNiArOTc1LDE0IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmZvY3VzTm9kZSgpCiAKIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQpCiB7Ci0gICAgaWYgKCFtX3NlYXJjaGluZ0Zvck5v
ZGUgfHwgIW1faGlnaGxpZ2h0RGF0YSkKKyAgICBpZiAoIW1fc2VhcmNoaW5nRm9yTm9kZSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgTm9kZSogbm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKICAg
ICB3aGlsZSAobm9kZSAmJiBub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OlRFWFRfTk9ERSkKICAg
ICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKLSAgICBpZiAobm9kZSkgewotICAgICAg
ICBtX2hpZ2hsaWdodERhdGEtPm5vZGUgPSBub2RlOwotICAgICAgICBoaWdobGlnaHQoKTsKLSAg
ICB9CisgICAgaWYgKG5vZGUpCisgICAgICAgIG1fb3ZlcmxheS0+aGlnaGxpZ2h0Tm9kZShub2Rl
KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0U2VhcmNoaW5nRm9yTm9kZShib29s
IGVuYWJsZWQsIEluc3BlY3Rvck9iamVjdCogaGlnaGxpZ2h0Q29uZmlnKQpAQCAtMTAwNCw0OCAr
OTk1LDQyIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFNlYXJjaGluZ0Zvck5vZGUoYm9v
bCBlbmFibGVkLCBJbnNwZWN0b3JPYmplY3QqIGhpZ2hsCiAgICAgZWxzZSB7CiAgICAgICAgIEVy
cm9yU3RyaW5nIGVycm9yOwogICAgICAgICBoaWRlSGlnaGxpZ2h0KCZlcnJvcik7Ci0gICAgICAg
IG1faGlnaGxpZ2h0RGF0YS5jbGVhcigpOworICAgICAgICBtX292ZXJsYXktPmNsZWFySGlnaGxp
Z2h0RGF0YSgpOwogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVj
dE1vZGVFbmFibGVkKEVycm9yU3RyaW5nKiwgYm9vbCBlbmFibGVkLCBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiogaGlnaGxpZ2h0Q29uZmlnKQotewotICAgIHNldFNlYXJjaGluZ0Zvck5v
ZGUoZW5hYmxlZCwgaGlnaGxpZ2h0Q29uZmlnID8gaGlnaGxpZ2h0Q29uZmlnLT5nZXQoKSA6IDAp
OwotfQotCiBib29sIEluc3BlY3RvckRPTUFnZW50OjpzZXRIaWdobGlnaHREYXRhRnJvbUNvbmZp
ZyhJbnNwZWN0b3JPYmplY3QqIGhpZ2hsaWdodENvbmZpZykKIHsKICAgICBpZiAoIWhpZ2hsaWdo
dENvbmZpZykgewotICAgICAgICBtX2hpZ2hsaWdodERhdGEuY2xlYXIoKTsKKyAgICAgICAgbV9v
dmVybGF5LT5jbGVhckhpZ2hsaWdodERhdGEoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAotICAgIG1faGlnaGxpZ2h0RGF0YSA9IGFkb3B0UHRyKG5ldyBIaWdobGlnaHREYXRhKCkp
OworICAgIEhpZ2hsaWdodERhdGEqIGhpZ2hsaWdodERhdGEgPSBuZXcgSGlnaGxpZ2h0RGF0YSgp
OwogICAgIGJvb2wgc2hvd0luZm8gPSBmYWxzZTsgLy8gRGVmYXVsdDogZmFsc2UgKGRvIG5vdCBz
aG93IGEgdG9vbHRpcCkuCiAgICAgaGlnaGxpZ2h0Q29uZmlnLT5nZXRCb29sZWFuKCJzaG93SW5m
byIsICZzaG93SW5mbyk7Ci0gICAgbV9oaWdobGlnaHREYXRhLT5zaG93SW5mbyA9IHNob3dJbmZv
OwotICAgIG1faGlnaGxpZ2h0RGF0YS0+Y29udGVudCA9IHBhcnNlQ29uZmlnQ29sb3IoImNvbnRl
bnRDb2xvciIsIGhpZ2hsaWdodENvbmZpZyk7Ci0gICAgbV9oaWdobGlnaHREYXRhLT5jb250ZW50
T3V0bGluZSA9IHBhcnNlQ29uZmlnQ29sb3IoImNvbnRlbnRPdXRsaW5lQ29sb3IiLCBoaWdobGln
aHRDb25maWcpOwotICAgIG1faGlnaGxpZ2h0RGF0YS0+cGFkZGluZyA9IHBhcnNlQ29uZmlnQ29s
b3IoInBhZGRpbmdDb2xvciIsIGhpZ2hsaWdodENvbmZpZyk7Ci0gICAgbV9oaWdobGlnaHREYXRh
LT5ib3JkZXIgPSBwYXJzZUNvbmZpZ0NvbG9yKCJib3JkZXJDb2xvciIsIGhpZ2hsaWdodENvbmZp
Zyk7Ci0gICAgbV9oaWdobGlnaHREYXRhLT5tYXJnaW4gPSBwYXJzZUNvbmZpZ0NvbG9yKCJtYXJn
aW5Db2xvciIsIGhpZ2hsaWdodENvbmZpZyk7CisgICAgaGlnaGxpZ2h0RGF0YS0+c2hvd0luZm8g
PSBzaG93SW5mbzsKKyAgICBoaWdobGlnaHREYXRhLT5jb250ZW50ID0gcGFyc2VDb25maWdDb2xv
cigiY29udGVudENvbG9yIiwgaGlnaGxpZ2h0Q29uZmlnKTsKKyAgICBoaWdobGlnaHREYXRhLT5j
b250ZW50T3V0bGluZSA9IHBhcnNlQ29uZmlnQ29sb3IoImNvbnRlbnRPdXRsaW5lQ29sb3IiLCBo
aWdobGlnaHRDb25maWcpOworICAgIGhpZ2hsaWdodERhdGEtPnBhZGRpbmcgPSBwYXJzZUNvbmZp
Z0NvbG9yKCJwYWRkaW5nQ29sb3IiLCBoaWdobGlnaHRDb25maWcpOworICAgIGhpZ2hsaWdodERh
dGEtPmJvcmRlciA9IHBhcnNlQ29uZmlnQ29sb3IoImJvcmRlckNvbG9yIiwgaGlnaGxpZ2h0Q29u
ZmlnKTsKKyAgICBoaWdobGlnaHREYXRhLT5tYXJnaW4gPSBwYXJzZUNvbmZpZ0NvbG9yKCJtYXJn
aW5Db2xvciIsIGhpZ2hsaWdodENvbmZpZyk7CisgICAgbV9vdmVybGF5LT5zZXRIaWdobGlnaHRE
YXRhKGFkb3B0UHRyKGhpZ2hsaWdodERhdGEpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0KCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OnNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmluZyosIGJvb2wgZW5hYmxlZCwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGhpZ2hsaWdodENvbmZpZykKIHsKLSAgICAvLyBUaGlz
IG1ldGhvZCByZXF1aXJlcyBtX2hpZ2hsaWdodERhdGEgdG8gaGF2ZSBiZWVuIGZpbGxlZCBpbiBi
eSBpdHMgY2xpZW50LgotICAgIEFTU0VSVChtX2hpZ2hsaWdodERhdGEpOwotICAgIG1fY2xpZW50
LT5oaWdobGlnaHQoKTsKKyAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVuYWJsZWQsIGhpZ2hsaWdo
dENvbmZpZyA/IGhpZ2hsaWdodENvbmZpZy0+Z2V0KCkgOiAwKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6aGlnaGxpZ2h0UmVjdChFcnJvclN0cmluZyosIGludCB4LCBpbnQgeSwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogY29sb3Is
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBvdXRsaW5lQ29sb3IpCiB7Ci0gICAgbV9o
aWdobGlnaHREYXRhID0gYWRvcHRQdHIobmV3IEhpZ2hsaWdodERhdGEoKSk7Ci0gICAgbV9oaWdo
bGlnaHREYXRhLT5yZWN0ID0gYWRvcHRQdHIobmV3IEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdo
dCkpOwotICAgIG1faGlnaGxpZ2h0RGF0YS0+Y29udGVudCA9IHBhcnNlQ29sb3IoY29sb3IpOwot
ICAgIG1faGlnaGxpZ2h0RGF0YS0+Y29udGVudE91dGxpbmUgPSBwYXJzZUNvbG9yKG91dGxpbmVD
b2xvcik7Ci0gICAgbV9jbGllbnQtPmhpZ2hsaWdodCgpOworICAgIEhpZ2hsaWdodERhdGEqIGhp
Z2hsaWdodERhdGEgPSBuZXcgSGlnaGxpZ2h0RGF0YSgpOworICAgIGhpZ2hsaWdodERhdGEtPnJl
Y3QgPSBhZG9wdFB0cihuZXcgSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CisgICAgaGln
aGxpZ2h0RGF0YS0+Y29udGVudCA9IHBhcnNlQ29sb3IoY29sb3IpOworICAgIGhpZ2hsaWdodERh
dGEtPmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb2xvcihvdXRsaW5lQ29sb3IpOworICAgIG1fb3Zl
cmxheS0+c2V0SGlnaGxpZ2h0RGF0YShhZG9wdFB0cihoaWdobGlnaHREYXRhKSk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodE5vZGUoCkBAIC0xMDUzLDEyICsxMDM4LDkg
QEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Tm9kZSgKICAgICBpbnQgbm9kZUlk
LAogICAgIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBoaWdobGlnaHRDb25maWcpCiB7
Ci0gICAgaWYgKE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKSkgewotICAgICAgICBpZiAo
c2V0SGlnaGxpZ2h0RGF0YUZyb21Db25maWcoaGlnaGxpZ2h0Q29uZmlnLmdldCgpKSkgewotICAg
ICAgICAgICAgbV9oaWdobGlnaHREYXRhLT5ub2RlID0gbm9kZTsKLSAgICAgICAgICAgIGhpZ2hs
aWdodCgpOwotICAgICAgICB9Ci0gICAgfQorICAgIGlmIChOb2RlKiBub2RlID0gbm9kZUZvcklk
KG5vZGVJZCkpCisgICAgICAgIGlmIChzZXRIaWdobGlnaHREYXRhRnJvbUNvbmZpZyhoaWdobGln
aHRDb25maWcuZ2V0KCkpKQorICAgICAgICAgICAgbV9vdmVybGF5LT5oaWdobGlnaHROb2RlKG5v
ZGUpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRGcmFtZSgKQEAgLTEw
NjksMjIgKzEwNTEsMTggQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0RnJhbWUo
CiB7CiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlQWdlbnQtPmZyYW1lRm9ySWQoZnJhbWVJZCk7
CiAgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5vd25lckVsZW1lbnQoKSkgewotICAgICAgICBtX2hp
Z2hsaWdodERhdGEgPSBhZG9wdFB0cihuZXcgSGlnaGxpZ2h0RGF0YSgpKTsKLSAgICAgICAgbV9o
aWdobGlnaHREYXRhLT5ub2RlID0gZnJhbWUtPm93bmVyRWxlbWVudCgpOwotICAgICAgICBtX2hp
Z2hsaWdodERhdGEtPnNob3dJbmZvID0gdHJ1ZTsgLy8gQWx3YXlzIHNob3cgdG9vbHRpcHMgZm9y
IGZyYW1lcy4KLSAgICAgICAgbV9oaWdobGlnaHREYXRhLT5jb250ZW50ID0gcGFyc2VDb2xvcihj
b2xvcik7Ci0gICAgICAgIG1faGlnaGxpZ2h0RGF0YS0+Y29udGVudE91dGxpbmUgPSBwYXJzZUNv
bG9yKG91dGxpbmVDb2xvcik7Ci0gICAgICAgIGhpZ2hsaWdodCgpOworICAgICAgICBIaWdobGln
aHREYXRhKiBoaWdobGlnaHREYXRhID0gbmV3IEhpZ2hsaWdodERhdGEoKTsKKyAgICAgICAgaGln
aGxpZ2h0RGF0YS0+bm9kZSA9IGZyYW1lLT5vd25lckVsZW1lbnQoKTsKKyAgICAgICAgaGlnaGxp
Z2h0RGF0YS0+c2hvd0luZm8gPSB0cnVlOyAvLyBBbHdheXMgc2hvdyB0b29sdGlwcyBmb3IgZnJh
bWVzLgorICAgICAgICBoaWdobGlnaHREYXRhLT5jb250ZW50ID0gcGFyc2VDb2xvcihjb2xvcik7
CisgICAgICAgIGhpZ2hsaWdodERhdGEtPmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb2xvcihvdXRs
aW5lQ29sb3IpOworICAgICAgICBtX292ZXJsYXktPnNldEhpZ2hsaWdodERhdGEoYWRvcHRQdHIo
aGlnaGxpZ2h0RGF0YSkpOwogICAgIH0KIH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlk
ZUhpZ2hsaWdodChFcnJvclN0cmluZyopCiB7Ci0gICAgaWYgKG1faGlnaGxpZ2h0RGF0YSkgewot
ICAgICAgICBtX2hpZ2hsaWdodERhdGEtPm5vZGUuY2xlYXIoKTsKLSAgICAgICAgbV9oaWdobGln
aHREYXRhLT5yZWN0LmNsZWFyKCk7Ci0gICAgfQotICAgIG1fY2xpZW50LT5oaWRlSGlnaGxpZ2h0
KCk7CisgICAgbV9vdmVybGF5LT5oaWRlSGlnaGxpZ2h0KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6Om1vdmVUbyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGlu
dCB0YXJnZXRFbGVtZW50SWQsIGNvbnN0IGludCogY29uc3QgYW5jaG9yTm9kZUlkLCBpbnQqIG5l
d05vZGVJZCkKQEAgLTE1OTksMjIgKzE1NzcsNiBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+IEluc3BlY3RvckRPTUFnZW50OjpyZXNvbHZlTm9kZShObwog
ICAgIHJldHVybiBpbmplY3RlZFNjcmlwdC53cmFwTm9kZShub2RlLCBvYmplY3RHcm91cCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRyYXdIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAotewotICAgIGlmICghbV9oaWdobGlnaHREYXRhKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBET01Ob2RlSGlnaGxpZ2h0ZXI6OmRyYXdIaWdobGlnaHQoY29udGV4dCwg
bV9oaWdobGlnaHREYXRhLT5ub2RlID8gbV9oaWdobGlnaHREYXRhLT5ub2RlLT5kb2N1bWVudCgp
IDogbV9kb2N1bWVudC5nZXQoKSwgbV9oaWdobGlnaHREYXRhLmdldCgpKTsKLX0KLQotdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6Z2V0SGlnaGxpZ2h0KEhpZ2hsaWdodCogaGlnaGxpZ2h0KSBjb25z
dAotewotICAgIGlmICghbV9oaWdobGlnaHREYXRhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBE
T01Ob2RlSGlnaGxpZ2h0ZXI6OmdldEhpZ2hsaWdodChtX2hpZ2hsaWdodERhdGEtPm5vZGUgPyBt
X2hpZ2hsaWdodERhdGEtPm5vZGUtPmRvY3VtZW50KCkgOiBtX2RvY3VtZW50LmdldCgpLCBtX2hp
Z2hsaWdodERhdGEuZ2V0KCksIGhpZ2hsaWdodCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCmluZGV4IGIwNWFiNTcwZDlmZDFiMDQ4NzA2YTM5M2Ey
NDY2NTk3YjQ5NjM5YmYuLjkxMDYyMzAzMWNlODc4ZTE0ODY4YTU0MzE5OGI4NGUwY2Q5NjJkZmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC01
NSwxMiArNTUsMTAgQEAgY2xhc3MgRE9NRWRpdG9yOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBF
bGVtZW50OwogY2xhc3MgRXZlbnQ7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBJbnNw
ZWN0b3JDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKIGNsYXNzIEluc3BlY3Rvckhp
c3Rvcnk7CitjbGFzcyBJbnNwZWN0b3JPdmVybGF5OwogY2xhc3MgSW5zcGVjdG9yUGFnZUFnZW50
OwotY2xhc3MgSW50UmVjdDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBIVE1MRWxlbWVu
dDsKIGNsYXNzIEluc3BlY3RvclN0YXRlOwpAQCAtNzEsOSArNjksNiBAQCBjbGFzcyBSZXZhbGlk
YXRlU3R5bGVBdHRyaWJ1dGVUYXNrOwogY2xhc3MgU2NyaXB0VmFsdWU7CiBjbGFzcyBTaGFkb3dS
b290OwogCi1zdHJ1Y3QgSGlnaGxpZ2h0Owotc3RydWN0IEhpZ2hsaWdodERhdGE7Ci0KIHR5cGVk
ZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKQEAgLTEwMyw5
ICs5OCw5IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZE1vZGlmeURPTUF0dHIo
RWxlbWVudCopID0gMDsKICAgICB9OwogCi0gICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9y
RE9NQWdlbnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
LCBJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQs
IEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBp
bmplY3RlZFNjcmlwdE1hbmFnZXIpCisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yRE9N
QWdlbnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJ
bnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3RvclN0
YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgSW5zcGVj
dG9yT3ZlcmxheSogb3ZlcmxheSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
SW5zcGVjdG9yRE9NQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgcGFnZUFnZW50LCBjbGllbnQs
IGluc3BlY3RvclN0YXRlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIpKTsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JET01BZ2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBwYWdl
QWdlbnQsIGluc3BlY3RvclN0YXRlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIG92ZXJsYXkpKTsK
ICAgICB9CiAKICAgICBzdGF0aWMgU3RyaW5nIHRvRXJyb3JTdHJpbmcoY29uc3QgRXhjZXB0aW9u
Q29kZSYpOwpAQCAtMTUxLDggKzE0Niw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVk
byhFcnJvclN0cmluZyopOwogICAgIHZpcnR1YWwgdm9pZCBtYXJrVW5kb2FibGVTdGF0ZShFcnJv
clN0cmluZyopOwogCi0gICAgTm9kZSogaGlnaGxpZ2h0ZWROb2RlKCkgY29uc3Q7Ci0KICAgICB2
b2lkIGdldEV2ZW50TGlzdGVuZXJzKE5vZGUqLCBWZWN0b3I8RXZlbnRMaXN0ZW5lckluZm8+JiBs
aXN0ZW5lcnNBcnJheSwgYm9vbCBpbmNsdWRlQW5jZXN0b3JzKTsKIAogICAgIC8vIE1ldGhvZHMg
Y2FsbGVkIGZyb20gdGhlIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi4KQEAgLTE4NSw5ICsxNzgs
NiBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnNwZWN0KE5vZGUqKTsKICAgICB2b2lkIGZvY3VzTm9k
ZSgpOwogCi0gICAgdm9pZCBkcmF3SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Owot
ICAgIHZvaWQgZ2V0SGlnaGxpZ2h0KEhpZ2hsaWdodCopIGNvbnN0OwotCiAgICAgSW5zcGVjdG9y
SGlzdG9yeSogaGlzdG9yeSgpIHsgcmV0dXJuIG1faGlzdG9yeS5nZXQoKTsgfQogCiAgICAgLy8g
V2UgcmVwcmVzZW50IGVtYmVkZGVkIGRvbXMgYXMgYSBwYXJ0IG9mIHRoZSBzYW1lIGhpZXJhcmNo
eS4gSGVuY2Ugd2UgdHJlYXQgY2hpbGRyZW4gb2YgZnJhbWUgb3duZXJzIGRpZmZlcmVudGx5LgpA
QCAtMjA1LDExICsxOTUsMTAgQEAgcHVibGljOgogICAgIEluc3BlY3RvclBhZ2VBZ2VudCogcGFn
ZUFnZW50KCkgeyByZXR1cm4gbV9wYWdlQWdlbnQ7IH0KIAogcHJpdmF0ZToKLSAgICBJbnNwZWN0
b3JET01BZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yUGFnZUFnZW50KiwgSW5z
cGVjdG9yQ2xpZW50KiwgSW5zcGVjdG9yU3RhdGUqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqKTsK
KyAgICBJbnNwZWN0b3JET01BZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yUGFn
ZUFnZW50KiwgSW5zcGVjdG9yU3RhdGUqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0
b3JPdmVybGF5Kik7CiAKICAgICB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVk
LCBJbnNwZWN0b3JPYmplY3QqIGhpZ2hsaWdodENvbmZpZyk7CiAgICAgYm9vbCBzZXRIaWdobGln
aHREYXRhRnJvbUNvbmZpZyhJbnNwZWN0b3JPYmplY3QqIGhpZ2hsaWdodENvbmZpZyk7Ci0gICAg
dm9pZCBoaWdobGlnaHQoKTsKIAogICAgIC8vIE5vZGUtcmVsYXRlZCBtZXRob2RzLgogICAgIHR5
cGVkZWYgSGFzaE1hcDxSZWZQdHI8Tm9kZT4sIGludD4gTm9kZVRvSWRNYXA7CkBAIC0yNDEsOCAr
MjMwLDggQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgSW5zcGVjdG9yUGFnZUFnZW50KiBtX3Bh
Z2VBZ2VudDsKLSAgICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50OwogICAgIEluamVjdGVkU2Ny
aXB0TWFuYWdlciogbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CisgICAgSW5zcGVjdG9yT3Zlcmxh
eSogbV9vdmVybGF5OwogICAgIEluc3BlY3RvckZyb250ZW5kOjpET00qIG1fZnJvbnRlbmQ7CiAg
ICAgRE9NTGlzdGVuZXIqIG1fZG9tTGlzdGVuZXI7CiAgICAgTm9kZVRvSWRNYXAgbV9kb2N1bWVu
dE5vZGVUb0lkTWFwOwpAQCAtMjU2LDcgKzI0NSw2IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBI
YXNoTWFwPFN0cmluZywgVmVjdG9yPFJlZlB0cjxOb2RlPiA+ID4gU2VhcmNoUmVzdWx0czsKICAg
ICBTZWFyY2hSZXN1bHRzIG1fc2VhcmNoUmVzdWx0czsKICAgICBPd25QdHI8UmV2YWxpZGF0ZVN0
eWxlQXR0cmlidXRlVGFzaz4gbV9yZXZhbGlkYXRlU3R5bGVBdHRyVGFzazsKLSAgICBPd25QdHI8
SGlnaGxpZ2h0RGF0YT4gbV9oaWdobGlnaHREYXRhOwogICAgIFJlZlB0cjxOb2RlPiBtX25vZGVU
b0ZvY3VzOwogICAgIGJvb2wgbV9zZWFyY2hpbmdGb3JOb2RlOwogICAgIE93blB0cjxJbnNwZWN0
b3JIaXN0b3J5PiBtX2hpc3Rvcnk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRlYnVnZ2VyQWdlbnQuaAppbmRleCAwOWM5N2QxOTUzZTRiOWIwMDE2MWY4NzRmNDUz
MWZiZGVjN2RiNmNkLi5iMmU3OWFkN2VmMWZlODM4MjJmZTUzMDE4ODk0ZjQyNzFiNDJjYmJhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmgKQEAgLTEzMywxNyArMTMzLDE4IEBAIHByb3RlY3RlZDoKICAgICBJbmplY3RlZFNjcmlwdE1h
bmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlcigpIHsgcmV0dXJuIG1faW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyOyB9CiAgICAgdmlydHVhbCBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2
YWwoRXJyb3JTdHJpbmcqLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgPSAwOwogCisg
ICAgdmlydHVhbCB2b2lkIGRpc2FibGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUGF1c2UoU2Ny
aXB0U3RhdGUqLCBjb25zdCBTY3JpcHRWYWx1ZSYgY2FsbEZyYW1lcywgY29uc3QgU2NyaXB0VmFs
dWUmIGV4Y2VwdGlvbik7CisgICAgdmlydHVhbCB2b2lkIGRpZENvbnRpbnVlKCk7CisKIHByaXZh
dGU6CiAgICAgdm9pZCBlbmFibGUoKTsKLSAgICB2b2lkIGRpc2FibGUoKTsKICAgICBib29sIGVu
YWJsZWQoKTsKIAogICAgIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVy
OjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPiA+IGN1cnJlbnRDYWxsRnJhbWVzKCk7CiAKICAgICB2aXJ0
dWFsIHZvaWQgZGlkUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgY29uc3QgU2Ny
aXB0Jik7CiAgICAgdmlydHVhbCB2b2lkIGZhaWxlZFRvUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5n
JiB1cmwsIGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGZpcnN0TGluZSwgaW50IGVycm9yTGluZSwg
Y29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRQYXVzZShT
Y3JpcHRTdGF0ZSosIGNvbnN0IFNjcmlwdFZhbHVlJiBjYWxsRnJhbWVzLCBjb25zdCBTY3JpcHRW
YWx1ZSYgZXhjZXB0aW9uKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ29udGludWUoKTsKIAogICAg
IHZvaWQgc2V0UGF1c2VPbkV4Y2VwdGlvbnNJbXBsKEVycm9yU3RyaW5nKiwgaW50KTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAppbmRleCBl
ZjM0NTM3ZjBlMTE4ZmI1ZTBjYjg4Y2EyZmFiNWUzZWY2MGEzNTc3Li45Njc2ZDEzOGU4NTZmZjk1
MDk2YmMyZTA0ODY0YTE4ZWRkZTgyYzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcApAQCAtMjIzLDkgKzIyMyw5IEBAIGJvb2wgSW5zcGVj
dG9yUGFnZUFnZW50OjpzaGFyZWRCdWZmZXJDb250ZW50KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVy
PiBidWZmZXIsIGNvCiAgICAgcmV0dXJuIGRlY29kZVNoYXJlZEJ1ZmZlcihidWZmZXIsIHRleHRF
bmNvZGluZ05hbWUsIHJlc3VsdCk7CiB9CiAKLVBhc3NPd25QdHI8SW5zcGVjdG9yUGFnZUFnZW50
PiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzLCBQYWdlKiBwYWdlLCBJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQs
IEluc3BlY3RvclN0YXRlKiBzdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNj
cmlwdE1hbmFnZXIsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQorUGFzc093blB0cjxJbnNwZWN0
b3JQYWdlQWdlbnQ+IEluc3BlY3RvclBhZ2VBZ2VudDo6Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2Vu
dHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIFBhZ2UqIHBhZ2UsIEluc3BlY3RvckFnZW50KiBpbnNw
ZWN0b3JBZ2VudCwgSW5zcGVjdG9yU3RhdGUqIHN0YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIq
IGluamVjdGVkU2NyaXB0TWFuYWdlciwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQsIEluc3BlY3Rv
ck92ZXJsYXkqIG92ZXJsYXkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JQ
YWdlQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgcGFnZSwgaW5zcGVjdG9yQWdlbnQsIHN0YXRl
LCBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIGNsaWVudCkpOworICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgSW5zcGVjdG9yUGFnZUFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIHBhZ2UsIGluc3BlY3Rv
ckFnZW50LCBzdGF0ZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBjbGllbnQsIG92ZXJsYXkpKTsK
IH0KIAogLy8gc3RhdGljCkBAIC0zMDgsMTMgKzMwOCwxNCBAQCBUeXBlQnVpbGRlcjo6UGFnZTo6
UmVzb3VyY2VUeXBlOjpFbnVtIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBl
SnNvbgogICAgIHJldHVybiByZXNvdXJjZVR5cGVKc29uKGNhY2hlZFJlc291cmNlVHlwZShjYWNo
ZWRSZXNvdXJjZSkpOwogfQogCi1JbnNwZWN0b3JQYWdlQWdlbnQ6Okluc3BlY3RvclBhZ2VBZ2Vu
dChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYWdlKiBwYWdlLCBJ
bnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JT
dGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIEluc3Bl
Y3RvckNsaWVudCogY2xpZW50KQorSW5zcGVjdG9yUGFnZUFnZW50OjpJbnNwZWN0b3JQYWdlQWdl
bnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgUGFnZSogcGFnZSwg
SW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9y
U3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNw
ZWN0b3JDbGllbnQqIGNsaWVudCwgSW5zcGVjdG9yT3ZlcmxheSogb3ZlcmxheSkKICAgICA6IElu
c3BlY3RvckJhc2VBZ2VudDxJbnNwZWN0b3JQYWdlQWdlbnQ+KCJQYWdlIiwgaW5zdHJ1bWVudGlu
Z0FnZW50cywgaW5zcGVjdG9yU3RhdGUpCiAgICAgLCBtX3BhZ2UocGFnZSkKICAgICAsIG1faW5z
cGVjdG9yQWdlbnQoaW5zcGVjdG9yQWdlbnQpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdl
cihpbmplY3RlZFNjcmlwdE1hbmFnZXIpCiAgICAgLCBtX2NsaWVudChjbGllbnQpCiAgICAgLCBt
X2Zyb250ZW5kKDApCisgICAgLCBtX292ZXJsYXkob3ZlcmxheSkKICAgICAsIG1fbGFzdFNjcmlw
dElkZW50aWZpZXIoMCkKICAgICAsIG1fbGFzdFBhaW50Q29udGV4dCgwKQogICAgICwgbV9kaWRM
b2FkRXZlbnRGaXJlKGZhbHNlKQpAQCAtODg1LDcgKzg4Niw3IEBAIHZvaWQgSW5zcGVjdG9yUGFn
ZUFnZW50OjpkaWRQYWludCgpCiAgICAgICAgIENvbG9yKDAsIDAsIDB4RkYsIDB4M0YpLAogICAg
IH07CiAKLSAgICBET01Ob2RlSGlnaGxpZ2h0ZXI6OmRyYXdPdXRsaW5lKCptX2xhc3RQYWludENv
bnRleHQsIG1fbGFzdFBhaW50UmVjdCwgY29sb3JzW2NvbG9yU2VsZWN0b3IrKyAlIFdURl9BUlJB
WV9MRU5HVEgoY29sb3JzKV0pOworICAgIG1fb3ZlcmxheS0+ZHJhd091dGxpbmUoKm1fbGFzdFBh
aW50Q29udGV4dCwgbV9sYXN0UGFpbnRSZWN0LCBjb2xvcnNbY29sb3JTZWxlY3RvcisrICUgV1RG
X0FSUkFZX0xFTkdUSChjb2xvcnMpXSk7CiAKICAgICBtX2xhc3RQYWludENvbnRleHQgPSAwOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2Vu
dC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCmluZGV4
IDk2NGJjODVmYzYzNjQ4YWYzOGYyZGMxMmZjODNmNzk3MWI5M2E2NjMuLmMzYjlhNmQyZjQ1YmVl
MmI3M2ZjMTA5OGI2NTJhYmFjYWIyYWY5ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKQEAgLTUzLDYgKzUzLDcgQEAgY2xhc3MgSW5zcGVjdG9y
QWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JBcnJheTsKIGNsYXNzIEluc3BlY3RvckNsaWVudDsKIGNs
YXNzIEluc3BlY3Rvck9iamVjdDsKK2NsYXNzIEluc3BlY3Rvck92ZXJsYXk7CiBjbGFzcyBJbnNw
ZWN0b3JTdGF0ZTsKIGNsYXNzIEluc3RydW1lbnRpbmdBZ2VudHM7CiBjbGFzcyBLVVJMOwpAQCAt
NzcsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgICAgIE90aGVyUmVzb3VyY2UKICAgICB9OwogCi0g
ICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yUGFnZUFnZW50PiBjcmVhdGUoSW5zdHJ1bWVu
dGluZ0FnZW50cyosIFBhZ2UqLCBJbnNwZWN0b3JBZ2VudCosIEluc3BlY3RvclN0YXRlKiwgSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9yQ2xpZW50Kik7CisgICAgc3RhdGljIFBhc3NP
d25QdHI8SW5zcGVjdG9yUGFnZUFnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyosIFBh
Z2UqLCBJbnNwZWN0b3JBZ2VudCosIEluc3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyKiwgSW5zcGVjdG9yQ2xpZW50KiwgSW5zcGVjdG9yT3ZlcmxheSopOwogCiAgICAgc3RhdGlj
IGJvb2wgY2FjaGVkUmVzb3VyY2VDb250ZW50KENhY2hlZFJlc291cmNlKiwgU3RyaW5nKiByZXN1
bHQsIGJvb2wqIGJhc2U2NEVuY29kZWQpOwogICAgIHN0YXRpYyBib29sIHNoYXJlZEJ1ZmZlckNv
bnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGlu
Z05hbWUsIGJvb2wgd2l0aEJhc2U2NEVuY29kZSwgU3RyaW5nKiByZXN1bHQpOwpAQCAtMTM3LDcg
KzEzOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRG9jdW1lbnRMb2FkZXIqIGFzc2VydERvY3Vt
ZW50TG9hZGVyKEVycm9yU3RyaW5nKiwgRnJhbWUqKTsKIAogcHJpdmF0ZToKLSAgICBJbnNwZWN0
b3JQYWdlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIFBhZ2UqLCBJbnNwZWN0b3JBZ2VudCos
IEluc3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9yQ2xpZW50
Kik7CisgICAgSW5zcGVjdG9yUGFnZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBQYWdlKiwg
SW5zcGVjdG9yQWdlbnQqLCBJbnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlcios
IEluc3BlY3RvckNsaWVudCosIEluc3BlY3Rvck92ZXJsYXkqKTsKICAgICB2b2lkIHVwZGF0ZVZp
ZXdNZXRyaWNzKGludCwgaW50LCBkb3VibGUsIGJvb2wpOwogCiAgICAgUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6UGFnZTo6RnJhbWU+IGJ1aWxkT2JqZWN0Rm9yRnJhbWUoRnJhbWUqKTsKQEAgLTE0
Nyw2ICsxNDgsNyBAQCBwcml2YXRlOgogICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciogbV9pbmpl
Y3RlZFNjcmlwdE1hbmFnZXI7CiAgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKICAgICBJ
bnNwZWN0b3JGcm9udGVuZDo6UGFnZSogbV9mcm9udGVuZDsKKyAgICBJbnNwZWN0b3JPdmVybGF5
KiBtX292ZXJsYXk7CiAgICAgbG9uZyBtX2xhc3RTY3JpcHRJZGVudGlmaWVyOwogICAgIFN0cmlu
ZyBtX3BlbmRpbmdTY3JpcHRUb0V2YWx1YXRlT25Mb2FkT25jZTsKICAgICBTdHJpbmcgbV9zY3Jp
cHRUb0V2YWx1YXRlT25Mb2FkT25jZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFn
ZURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGE1ODZlZGYzZmQ0MTA4YzlkMDc5MmMwYmRmZWJlMWU4
M2ZhZmY4NmEuLjRiNDU5MmEyMzM4ZDFiYzczNjU2MWU0ZDMwNmEyNjE0NTUwMjgwNGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcApAQCAtMzUs
MTkgKzM1LDIxIEBACiAjaW5jbHVkZSAiUGFnZURlYnVnZ2VyQWdlbnQuaCIKIAogI2luY2x1ZGUg
IkNvbnNvbGUuaCIKKyNpbmNsdWRlICJET01Ob2RlSGlnaGxpZ2h0ZXIuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCiAjaW5jbHVkZSAiUGFnZVNjcmlwdERlYnVnU2VydmVyLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotUGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2VudD4gUGFnZURlYnVnZ2VyQWdl
bnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNw
ZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIEluamVjdGVk
U2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQorUGFzc093blB0cjxQYWdlRGVi
dWdnZXJBZ2VudD4gUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIFBh
Z2UqIGluc3BlY3RlZFBhZ2UsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQogewotICAgIHJldHVybiBhZG9wdFB0
cihuZXcgUGFnZURlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3Rh
dGUsIGluc3BlY3RlZFBhZ2UsIGluamVjdGVkU2NyaXB0TWFuYWdlcikpOworICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgUGFnZURlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVj
dG9yU3RhdGUsIGluc3BlY3RlZFBhZ2UsIGluamVjdGVkU2NyaXB0TWFuYWdlciwgb3ZlcmxheSkp
OwogfQogCi1QYWdlRGVidWdnZXJBZ2VudDo6UGFnZURlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGlu
Z0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3RvclN0
YXRlLCBQYWdlKiBpbnNwZWN0ZWRQYWdlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVk
U2NyaXB0TWFuYWdlcikKK1BhZ2VEZWJ1Z2dlckFnZW50OjpQYWdlRGVidWdnZXJBZ2VudChJbnN0
cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5z
cGVjdG9yU3RhdGUsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIEluamVjdGVkU2NyaXB0TWFuYWdlciog
aW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQogICAgIDog
SW5zcGVjdG9yRGVidWdnZXJBZ2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnNwZWN0b3JTdGF0
ZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQogICAgICwgbV9pbnNwZWN0ZWRQYWdlKGluc3BlY3Rl
ZFBhZ2UpCisgICAgLCBtX292ZXJsYXkob3ZlcmxheSkKIHsKIH0KIApAQCAtOTIsNiArOTQsMjMg
QEAgSW5qZWN0ZWRTY3JpcHQgUGFnZURlYnVnZ2VyQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZh
bChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcKICAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHQ7CiB9
CiAKK3ZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoKQoreworICAgIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmRpc2FibGUoKTsKKyAgICBtX292ZXJsYXktPnNldFBhdXNlZEluRGVidWdn
ZXIoZmFsc2UpOworfQorCit2b2lkIFBhZ2VEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZShTY3JpcHRT
dGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IFNjcmlwdFZhbHVlJiBjYWxsRnJhbWVzLCBjb25zdCBT
Y3JpcHRWYWx1ZSYgZXhjZXB0aW9uKQoreworICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRp
ZFBhdXNlKHNjcmlwdFN0YXRlLCBjYWxsRnJhbWVzLCBleGNlcHRpb24pOworICAgIG1fb3Zlcmxh
eS0+c2V0UGF1c2VkSW5EZWJ1Z2dlcih0cnVlKTsKK30KKwordm9pZCBQYWdlRGVidWdnZXJBZ2Vu
dDo6ZGlkQ29udGludWUoKQoreworICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZENvbnRp
bnVlKCk7CisgICAgbV9vdmVybGF5LT5zZXRQYXVzZWRJbkRlYnVnZ2VyKGZhbHNlKTsKK30KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdl
RGVidWdnZXJBZ2VudC5oCmluZGV4IDlkYmQ1MTNmOWYxYTI4YmI5ODQyNDkxMzU3ODE0ODZjNzNj
MzI2MTguLmQ5MGZkZWI4MmFlYzhlMjE3MTliNTdjNDkzNWUxNTBmYWRiNmRlZWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oCkBAIC0zNyw2ICszNyw3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSW5zcGVjdG9yT3ZlcmxheTsKIGNs
YXNzIFBhZ2U7CiBjbGFzcyBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI7CiAKQEAgLTQ0LDcgKzQ1LDcg
QEAgY2xhc3MgUGFnZURlYnVnZ2VyQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFnZURlYnVnZ2VyQWdlbnQpOwogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFBh
Z2VEZWJ1Z2dlckFnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclN0
YXRlKiwgUGFnZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciopOworICAgIHN0YXRpYyBQYXNzT3du
UHRyPFBhZ2VEZWJ1Z2dlckFnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3Bl
Y3RvclN0YXRlKiwgUGFnZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3Rvck92ZXJs
YXkqKTsKICAgICB2aXJ0dWFsIH5QYWdlRGVidWdnZXJBZ2VudCgpOwogCiBwcml2YXRlOgpAQCAt
NTYsOCArNTcsMTMgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgSW5qZWN0ZWRTY3JpcHQgaW5q
ZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nKiwgY29uc3QgaW50KiBleGVjdXRpb25Db250
ZXh0SWQpOwogCi0gICAgUGFnZURlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIElu
c3BlY3RvclN0YXRlKiwgUGFnZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciopOworICAgIHZpcnR1
YWwgdm9pZCBkaXNhYmxlKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFBhdXNlKFNjcmlwdFN0YXRl
KiwgY29uc3QgU2NyaXB0VmFsdWUmIGNhbGxGcmFtZXMsIGNvbnN0IFNjcmlwdFZhbHVlJiBleGNl
cHRpb24pOworICAgIHZpcnR1YWwgdm9pZCBkaWRDb250aW51ZSgpOworCisgICAgUGFnZURlYnVn
Z2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclN0YXRlKiwgUGFnZSosIElu
amVjdGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3Rvck92ZXJsYXkqKTsKICAgICBQYWdlKiBjb25z
dCBtX2luc3BlY3RlZFBhZ2U7CisgICAgSW5zcGVjdG9yT3ZlcmxheSogbV9vdmVybGF5OwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152994</attachid>
            <date>2012-07-18 05:24:01 -0700</date>
            <delta_ts>2012-07-18 06:31:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90880-20120718162359.patch</filename>
            <type>text/plain</type>
            <size>38918</size>
            <attacher name="Sergey Rogulenko">rogulenko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyOTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGM1NjYwMTI3YmZkOTBj
MzVhYmIzNDYwZGI3OTk3NDJmM2JkMjVkOS4uNjA5NzQ5OTFkYzk4OWMyYWZjMzExNzYyYTg0ODRm
MjEzMzE1NmNhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1IEBACisyMDEyLTA3LTE4ICBTZXJn
ZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogYWRkaW5nIHBhdXNlIGljb24gZm9yIEphdmFTY3JpcHQgZGVidWdnaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg4MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yZWQgRE9NTm9k
ZUhpZ2hsaWdodGVyIGludG8gSW5zcGVjdG9yT3ZlcmxheSBjbGFzcyBhbmQgYWRkZWQgYSBmZWF0
dXJlIHRvIHNob3cgYSAicGF1c2UiIHNjcmVlbiB3aGVuCisgICAgICAgIHRoZSBKYXZhc2NyaXB0
IGRlYnVnZ2VyIGlzIHBhdXNlZC4KKworICAgICAgICAqIGluc3BlY3Rvci9ET01Ob2RlSGlnaGxp
Z2h0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6SW5zcGVjdG9y
T3ZlcmxheSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpwYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3T3V0bGluZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpnZXRIaWdobGlnaHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6c2V0UGF1c2VkSW5EZWJ1Z2dlcik6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpoaWRlSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6aGlnaGxpZ2h0Tm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpzZXRIaWdobGlnaHREYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmNsZWFySGlnaGxpZ2h0RGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpoaWdobGlnaHRlZE5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6dXBkYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdIaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yT3ZlcmxheTo6ZHJhd1BhdXNlZEluRGVidWdnZXIpOgorICAgICAgICAqIGlu
c3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoSW5zcGVjdG9yT3ZlcmxheSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5
OjpjcmVhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZHJhd0hpZ2hsaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRIaWdobGlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aGlnaGxpZ2h0ZWROb2Rl
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChJbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6Okluc3BlY3RvckRPTUFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRPTUFnZW50Ojp+SW5zcGVjdG9yRE9NQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRE9NQWdlbnQ6OmhhbmRsZU1vdXNlUHJlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRE9NQWdlbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRPTUFnZW50OjpzZXRTZWFyY2hpbmdGb3JOb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckRPTUFnZW50OjpzZXRIaWdobGlnaHREYXRhRnJvbUNvbmZpZyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHROb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRGcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6aGlkZUhpZ2hsaWdodCk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpjcmVhdGUpOgorICAgICAgICAoSW5zcGVj
dG9yRE9NQWdlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
Lmg6CisgICAgICAgIChJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBh
Z2VBZ2VudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6
SW5zcGVjdG9yUGFnZUFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2Vu
dDo6ZGlkUGFpbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGluc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2Vu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlRGVidWdnZXJBZ2VudDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50OjpQYWdlRGVidWdnZXJBZ2VudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlRGVidWdnZXJBZ2VudDo6ZGlzYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZSk6
CisgICAgICAgIChXZWJDb3JlOjpQYWdlRGVidWdnZXJBZ2VudDo6ZGlkQ29udGludWUpOgorICAg
ICAgICAqIGluc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChQYWdlRGVidWdnZXJBZ2VudCk6CisKIDIwMTItMDctMTggIFlvc2hpZnVtaSBJ
bm91ZSAgPHlvc2luQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OKHIxMTc3Mzgp
IFtGb3Jtc10gRGVmYXVsdCBzdGVwIGJhc2Ugc2hvdWxkIGJlIDAgKD0xOTcwLTAxKSBmb3IgaW5w
dXQgdHlwZSBtb250aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5v
ZGVIaWdobGlnaHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hs
aWdodGVyLmNwcAppbmRleCBlNGM3MTAwZDYxYzUyMDgzZjM4MjcxZjJhNzI3NTQ3NTQ2OGVkYjJj
Li45Y2M2ZjZlMDBiY2NjNGFiZGYzZWRhMzgzMjcwMGFiZDFjOGJiY2RiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcApAQCAtMzksNiArMzks
NyBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQu
aCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJhbmdl
LmgiCkBAIC00NjIsOSArNDYzLDkgQEAgc3RhdGljIHZvaWQgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdo
dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEhpZ2hsaWdodERhdGEqIGhpZ2gKICAgICAgICAg
ZHJhd0VsZW1lbnRUaXRsZSgqY29udGV4dCwgbm9kZSwgcmVuZGVyZXIsIHBpeGVsU25hcHBlZElu
dFJlY3QoYm91bmRpbmdCb3gpLCBwaXhlbFNuYXBwZWRJbnRSZWN0KHRpdGxlQW5jaG9yQm94KSwg
dmlzaWJsZVJlY3QsIGNvbnRhaW5pbmdGcmFtZS0+c2V0dGluZ3MoKSk7CiB9CiAKLXN0YXRpYyB2
b2lkIGdldE9yRHJhd1JlY3RIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBEb2N1
bWVudCogZG9jdW1lbnQsIEhpZ2hsaWdodERhdGEqIGhpZ2hsaWdodERhdGEsIEhpZ2hsaWdodCAq
aGlnaGxpZ2h0KQorc3RhdGljIHZvaWQgZ2V0T3JEcmF3UmVjdEhpZ2hsaWdodChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIFBhZ2UqIHBhZ2UsIEhpZ2hsaWdodERhdGEqIGhpZ2hsaWdodERhdGEs
IEhpZ2hsaWdodCAqaGlnaGxpZ2h0KQogewotICAgIGlmICghZG9jdW1lbnQpCisgICAgaWYgKCFw
YWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBGbG9hdFJlY3QgaGlnaGxpZ2h0UmVjdCgqKGhp
Z2hsaWdodERhdGEtPnJlY3QpKTsKQEAgLTQ3Myw3ICs0NzQsNyBAQCBzdGF0aWMgdm9pZCBnZXRP
ckRyYXdSZWN0SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgRG9jdW1lbnQqIGRv
Y3VtZW50LAogICAgIGhpZ2hsaWdodC0+cXVhZHMuYXBwZW5kKGhpZ2hsaWdodFJlY3QpOwogCiAg
ICAgaWYgKGNvbnRleHQpIHsKLSAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gZG9jdW1lbnQtPmZy
YW1lKCktPnZpZXcoKTsKKyAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gcGFnZS0+bWFpbkZyYW1l
KCktPnZpZXcoKTsKICAgICAgICAgaWYgKCF2aWV3LT5kZWxlZ2F0ZXNTY3JvbGxpbmcoKSkgewog
ICAgICAgICAgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRS
ZWN0KCk7CiAgICAgICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoLXZpc2libGVSZWN0LngoKSwg
LXZpc2libGVSZWN0LnkoKSk7CkBAIC00ODUsNDQgKzQ4NiwxMzYgQEAgc3RhdGljIHZvaWQgZ2V0
T3JEcmF3UmVjdEhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIERvY3VtZW50KiBk
b2N1bWVudCwKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLW5hbWVzcGFjZSBET01Ob2Rl
SGlnaGxpZ2h0ZXIgeworSW5zcGVjdG9yT3ZlcmxheTo6SW5zcGVjdG9yT3ZlcmxheShQYWdlKiBw
YWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fcGFnZShwYWdlKQorICAgICwg
bV9jbGllbnQoY2xpZW50KQorICAgICwgbV9wYXVzZWRJbkRlYnVnZ2VyKGZhbHNlKQoreworfQog
Ci12b2lkIGRyYXdIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBEb2N1bWVudCog
ZG9jdW1lbnQsIEhpZ2hsaWdodERhdGEqIGhpZ2hsaWdodERhdGEpCit2b2lkIEluc3BlY3Rvck92
ZXJsYXk6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBpZiAoIWhpZ2hs
aWdodERhdGEpCi0gICAgICAgIHJldHVybjsKKyAgICBkcmF3UGF1c2VkSW5EZWJ1Z2dlcihjb250
ZXh0KTsKKyAgICBkcmF3SGlnaGxpZ2h0KGNvbnRleHQpOworfQogCi0gICAgSGlnaGxpZ2h0IGhp
Z2hsaWdodDsKLSAgICBpZiAoaGlnaGxpZ2h0RGF0YS0+bm9kZSkKLSAgICAgICAgZ2V0T3JEcmF3
Tm9kZUhpZ2hsaWdodCgmY29udGV4dCwgaGlnaGxpZ2h0RGF0YSwgJmhpZ2hsaWdodCk7Ci0gICAg
ZWxzZSBpZiAoaGlnaGxpZ2h0RGF0YS0+cmVjdCkKLSAgICAgICAgZ2V0T3JEcmF3UmVjdEhpZ2hs
aWdodCgmY29udGV4dCwgZG9jdW1lbnQsIGhpZ2hsaWdodERhdGEsICZoaWdobGlnaHQpOwordm9p
ZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3T3V0bGluZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IExheW91dFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBGbG9h
dFJlY3Qgb3V0bGluZVJlY3QgPSByZWN0OworICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwg
b3V0bGluZVJlY3QsIENvbG9yKCksIGNvbG9yKTsKIH0KIAotdm9pZCBnZXRIaWdobGlnaHQoRG9j
dW1lbnQqIGRvY3VtZW50LCBIaWdobGlnaHREYXRhKiBoaWdobGlnaHREYXRhLCBIaWdobGlnaHQq
IGhpZ2hsaWdodCkKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6Z2V0SGlnaGxpZ2h0KEhpZ2hsaWdo
dCogaGlnaGxpZ2h0KSBjb25zdAogewotICAgIGlmICghaGlnaGxpZ2h0RGF0YSkKKyAgICBpZiAo
IW1faGlnaGxpZ2h0RGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaGlnaGxpZ2h0LT5jb250
ZW50Q29sb3IgPSBoaWdobGlnaHREYXRhLT5jb250ZW50OwotICAgIGhpZ2hsaWdodC0+cGFkZGlu
Z0NvbG9yID0gaGlnaGxpZ2h0RGF0YS0+cGFkZGluZzsKLSAgICBoaWdobGlnaHQtPmJvcmRlckNv
bG9yID0gaGlnaGxpZ2h0RGF0YS0+Ym9yZGVyOwotICAgIGhpZ2hsaWdodC0+bWFyZ2luQ29sb3Ig
PSBoaWdobGlnaHREYXRhLT5tYXJnaW47CisgICAgaGlnaGxpZ2h0LT5jb250ZW50Q29sb3IgPSBt
X2hpZ2hsaWdodERhdGEtPmNvbnRlbnQ7CisgICAgaGlnaGxpZ2h0LT5wYWRkaW5nQ29sb3IgPSBt
X2hpZ2hsaWdodERhdGEtPnBhZGRpbmc7CisgICAgaGlnaGxpZ2h0LT5ib3JkZXJDb2xvciA9IG1f
aGlnaGxpZ2h0RGF0YS0+Ym9yZGVyOworICAgIGhpZ2hsaWdodC0+bWFyZ2luQ29sb3IgPSBtX2hp
Z2hsaWdodERhdGEtPm1hcmdpbjsKICAgICBoaWdobGlnaHQtPnR5cGUgPSBIaWdobGlnaHRUeXBl
UmVjdHM7CiAKLSAgICBpZiAoaGlnaGxpZ2h0RGF0YS0+bm9kZSkKLSAgICAgICAgZ2V0T3JEcmF3
Tm9kZUhpZ2hsaWdodCgwLCBoaWdobGlnaHREYXRhLCBoaWdobGlnaHQpOwotICAgIGVsc2UgaWYg
KGhpZ2hsaWdodERhdGEtPnJlY3QpCi0gICAgICAgIGdldE9yRHJhd1JlY3RIaWdobGlnaHQoMCwg
ZG9jdW1lbnQsIGhpZ2hsaWdodERhdGEsIGhpZ2hsaWdodCk7CisgICAgaWYgKG1faGlnaGxpZ2h0
RGF0YS0+bm9kZSkKKyAgICAgICAgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdodCgwLCBtX2hpZ2hsaWdo
dERhdGEuZ2V0KCksIGhpZ2hsaWdodCk7CisgICAgZWxzZSBpZiAobV9oaWdobGlnaHREYXRhLT5y
ZWN0KQorICAgICAgICBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0KDAsIG1fcGFnZSwgbV9oaWdobGln
aHREYXRhLmdldCgpLCBoaWdobGlnaHQpOwogfQogCi12b2lkIGRyYXdPdXRsaW5lKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpzZXRQYXVzZWRJbkRlYnVnZ2VyKGJvb2wgZmxh
ZykKIHsKLSAgICBGbG9hdFJlY3Qgb3V0bGluZVJlY3QgPSByZWN0OwotICAgIGRyYXdPdXRsaW5l
ZFF1YWQoY29udGV4dCwgb3V0bGluZVJlY3QsIENvbG9yKCksIGNvbG9yKTsKKyAgICBtX3BhdXNl
ZEluRGVidWdnZXIgPSBmbGFnOworICAgIHVwZGF0ZSgpOwogfQogCi19IC8vIG5hbWVzcGFjZSBE
T01Ob2RlSGlnaGxpZ2h0ZXIKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6aGlkZUhpZ2hsaWdodCgp
Cit7CisgICAgaWYgKG1faGlnaGxpZ2h0RGF0YSkgeworICAgICAgICBtX2hpZ2hsaWdodERhdGEt
PnJlY3QuY2xlYXIoKTsKKyAgICAgICAgbV9oaWdobGlnaHREYXRhLT5ub2RlLmNsZWFyKCk7Cisg
ICAgfQorICAgIHVwZGF0ZSgpOworfQorCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmhpZ2hsaWdo
dE5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAobV9oaWdobGlnaHREYXRhKQorICAgICAgICBt
X2hpZ2hsaWdodERhdGEtPm5vZGUgPSBub2RlOworICAgIHVwZGF0ZSgpOworfQorCit2b2lkIElu
c3BlY3Rvck92ZXJsYXk6OnNldEhpZ2hsaWdodERhdGEoUGFzc093blB0cjxIaWdobGlnaHREYXRh
PiBoaWdobGlnaHREYXRhKQoreworICAgIG1faGlnaGxpZ2h0RGF0YSA9IGhpZ2hsaWdodERhdGE7
CisgICAgdXBkYXRlKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6Y2xlYXJIaWdobGln
aHREYXRhKCkKK3sKKyAgICBtX2hpZ2hsaWdodERhdGEuY2xlYXIoKTsKKyAgICB1cGRhdGUoKTsK
K30KKworTm9kZSogSW5zcGVjdG9yT3ZlcmxheTo6aGlnaGxpZ2h0ZWROb2RlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9oaWdobGlnaHREYXRhID8gbV9oaWdobGlnaHREYXRhLT5ub2RlLmdldCgp
IDogMDsKK30KKwordm9pZCBJbnNwZWN0b3JPdmVybGF5Ojp1cGRhdGUoKQoreworICAgIGlmICht
X2hpZ2hsaWdodERhdGEgfHwgbV9wYXVzZWRJbkRlYnVnZ2VyKQorICAgICAgICBtX2NsaWVudC0+
aGlnaGxpZ2h0KCk7CisgICAgZWxzZQorICAgICAgICBtX2NsaWVudC0+aGlkZUhpZ2hsaWdodCgp
OworfQorCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdIaWdobGlnaHQoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQoreworICAgIGlmICghbV9oaWdobGlnaHREYXRhIHx8ICghbV9oaWdobGln
aHREYXRhLT5yZWN0ICYmICFtX2hpZ2hsaWdodERhdGEtPm5vZGUpKQorICAgICAgICByZXR1cm47
CisKKyAgICBIaWdobGlnaHQgaGlnaGxpZ2h0OworICAgIGlmIChtX2hpZ2hsaWdodERhdGEtPm5v
ZGUpCisgICAgICAgIGdldE9yRHJhd05vZGVIaWdobGlnaHQoJmNvbnRleHQsIG1faGlnaGxpZ2h0
RGF0YS5nZXQoKSwgJmhpZ2hsaWdodCk7CisgICAgZWxzZSBpZiAobV9oaWdobGlnaHREYXRhLT5y
ZWN0KQorICAgICAgICBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0KCZjb250ZXh0LCBtX3BhZ2UsIG1f
aGlnaGxpZ2h0RGF0YS5nZXQoKSwgJmhpZ2hsaWdodCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yT3Zl
cmxheTo6ZHJhd1BhdXNlZEluRGVidWdnZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQorewor
ICAgIGlmICghbV9wYXVzZWRJbkRlYnVnZ2VyKQorICAgICAgICByZXR1cm47CisKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKENvbG9yLCBiYWNrZ3JvdW5kQ29sb3IsICgwLCAwLCAwLCAzMSkpOwor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIHRleHRCYWNrZ3JvdW5kQ29sb3IsICgyNTUs
IDI1NSwgMTk0KSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgYm9yZGVyQ29sb3Is
ICgxMjgsIDEyOCwgMTI4KSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChpbnQsIGZvbnRIZWln
aHQsICgyNCkpOworCisgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5tYWluRnJhbWUoKTsKKyAg
ICBTZXR0aW5ncyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsKKyAgICBJbnRSZWN0IHZp
c2libGVSZWN0ID0gZnJhbWUtPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisKKyAgICBj
b250ZXh0LnNldEZpbGxDb2xvcihiYWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0Ip
OworICAgIGNvbnRleHQuZHJhd1JlY3QodmlzaWJsZVJlY3QpOworCisgICAgRm9udERlc2NyaXB0
aW9uIGRlc2M7CisgICAgc2V0VXBGb250RGVzY3JpcHRpb24oZGVzYywgc2V0dGluZ3MpOworICAg
IGRlc2Muc2V0Q29tcHV0ZWRTaXplKGZvbnRIZWlnaHQpOworICAgIEZvbnQgZm9udCA9IEZvbnQo
ZGVzYywgMCwgMCk7CisgICAgZm9udC51cGRhdGUoMCk7CisKKyAgICBTdHJpbmcgdGV4dCA9ICJQ
YXVzZWQgaW4gZGVidWdnZXIuIjsKKyAgICBUZXh0UnVuIHRleHRSdW4odGV4dCk7CisgICAgSW50
UmVjdCB0aXRsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRl
eHQodGV4dFJ1biwgSW50UG9pbnQoKSwgZm9udEhlaWdodCkpOworICAgIHRpdGxlUmVjdC5pbmZs
YXRlKHJlY3RJbmZsYXRlUHgpOworICAgIHRpdGxlUmVjdC5zZXRMb2NhdGlvbihJbnRQb2ludCh2
aXNpYmxlUmVjdC53aWR0aCgpIC8gMiAtIHRpdGxlUmVjdC53aWR0aCgpIC8gMiwgMCkpOworCisg
ICAgY29udGV4dC5zZXRGaWxsQ29sb3IodGV4dEJhY2tncm91bmRDb2xvciwgQ29sb3JTcGFjZURl
dmljZVJHQik7CisgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihib3JkZXJDb2xvciwgQ29sb3JT
cGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5kcmF3UmVjdCh0aXRsZVJlY3QpOworICAgIGNv
bnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURldmljZVJHQik7Cisg
ICAgY29udGV4dC5kcmF3VGV4dChmb250LCB0ZXh0UnVuLCBJbnRQb2ludCh0aXRsZVJlY3QueCgp
ICsgcmVjdEluZmxhdGVQeCwgdGl0bGVSZWN0LnkoKSArIGZvbnRIZWlnaHQpKTsKK30KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9k
ZUhpZ2hsaWdodGVyLmgKaW5kZXggZjdiNmYwMGY0ZmZlMDI1OTEzNTUyNTRkZmUxOTNkMDMwNjJj
ZTNkOS4uZmVhNjE2NWUxYTI1M2FmMzI5NThmNjU1YzUwZWFjMzUzNjc4OWNmNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaApAQCAtMzIsMTggKzMy
LDIxIEBACiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNs
dWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIk5vZGUuaCIKIAogI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgQ29sb3I7Ci1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIEZyYW1lVmlldzsKIGNsYXNzIEdy
YXBoaWNzQ29udGV4dDsKK2NsYXNzIEluc3BlY3RvckNsaWVudDsKK2NsYXNzIEludFJlY3Q7CiBj
bGFzcyBOb2RlOworY2xhc3MgUGFnZTsKIAogc3RydWN0IEhpZ2hsaWdodERhdGEgewogICAgIENv
bG9yIGNvbnRlbnQ7CkBAIC03NSwxMyArNzgsMzggQEAgc3RydWN0IEhpZ2hsaWdodCB7CiAgICAg
VmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CiB9OwogCi1uYW1lc3BhY2UgRE9NTm9kZUhpZ2hsaWdo
dGVyIHsKK2NsYXNzIEluc3BlY3Rvck92ZXJsYXkgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
T3duUHRyPEluc3BlY3Rvck92ZXJsYXk+IGNyZWF0ZShQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGll
bnQqIGNsaWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9y
T3ZlcmxheShwYWdlLCBjbGllbnQpKTsKKyAgICB9CiAKLXZvaWQgZHJhd0hpZ2hsaWdodChHcmFw
aGljc0NvbnRleHQmLCBEb2N1bWVudCosIEhpZ2hsaWdodERhdGEqKTsKLXZvaWQgZ2V0SGlnaGxp
Z2h0KERvY3VtZW50KiwgSGlnaGxpZ2h0RGF0YSosIEhpZ2hsaWdodCopOwotdm9pZCBkcmF3T3V0
bGluZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiwgY29uc3QgQ29sb3ImKTsK
KyAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYpOworICAgIHZvaWQgZHJhd091dGxpbmUo
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IENvbG9yJik7CisgICAg
dm9pZCBnZXRIaWdobGlnaHQoSGlnaGxpZ2h0KikgY29uc3Q7CiAKLX0gLy8gbmFtZXNwYWNlIERP
TU5vZGVIaWdobGlnaHRlcgorICAgIHZvaWQgc2V0UGF1c2VkSW5EZWJ1Z2dlcihib29sKTsKKwor
ICAgIHZvaWQgaGlkZUhpZ2hsaWdodCgpOworICAgIHZvaWQgaGlnaGxpZ2h0Tm9kZShOb2RlKik7
CisgICAgdm9pZCBzZXRIaWdobGlnaHREYXRhKFBhc3NPd25QdHI8SGlnaGxpZ2h0RGF0YT4pOwor
ICAgIHZvaWQgY2xlYXJIaWdobGlnaHREYXRhKCk7CisKKyAgICBOb2RlKiBoaWdobGlnaHRlZE5v
ZGUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBJbnNwZWN0b3JPdmVybGF5KFBhZ2UqLCBJbnNw
ZWN0b3JDbGllbnQqKTsKKworICAgIHZvaWQgdXBkYXRlKCk7CisgICAgdm9pZCBkcmF3SGlnaGxp
Z2h0KEdyYXBoaWNzQ29udGV4dCYpOworICAgIHZvaWQgZHJhd1BhdXNlZEluRGVidWdnZXIoR3Jh
cGhpY3NDb250ZXh0Jik7CisKKyAgICBQYWdlKiBtX3BhZ2U7CisgICAgSW5zcGVjdG9yQ2xpZW50
KiBtX2NsaWVudDsKKyAgICBib29sIG1fcGF1c2VkSW5EZWJ1Z2dlcjsKKyAgICBPd25QdHI8SGln
aGxpZ2h0RGF0YT4gbV9oaWdobGlnaHREYXRhOworfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5j
cHAKaW5kZXggOTEyYmJhYWQ2MmYzZGJhNDU2ZmYzZGMwYTdjYzU3ZjE4NzEyNTI3My4uYzNmOWYw
OGIzMzlkYmFjMWI2NzIwOTA3OTRhNzU0OWIwMDM4Mjg4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMzQsNiArMzQsNyBAQAog
CiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogCisjaW5jbHVkZSAiRE9NTm9kZUhp
Z2hsaWdodGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJJZGVudGlmaWVyc0ZhY3RvcnkuaCIKQEAgLTc4LDYgKzc5LDcgQEAg
SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNw
ZWN0b3JDbGllbnQqIGluc3BlY3RvckMKICAgICA6IG1faW5zdHJ1bWVudGluZ0FnZW50cyhhZG9w
dFB0cihuZXcgSW5zdHJ1bWVudGluZ0FnZW50cygpKSkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyKEluamVjdGVkU2NyaXB0TWFuYWdlcjo6Y3JlYXRlRm9yUGFnZSgpKQogICAgICwgbV9z
dGF0ZShhZG9wdFB0cihuZXcgSW5zcGVjdG9yU3RhdGUoaW5zcGVjdG9yQ2xpZW50KSkpCisgICAg
LCBtX292ZXJsYXkoSW5zcGVjdG9yT3ZlcmxheTo6Y3JlYXRlKHBhZ2UsIGluc3BlY3RvckNsaWVu
dCkpCiAgICAgLCBtX3BhZ2UocGFnZSkKICAgICAsIG1faW5zcGVjdG9yQ2xpZW50KGluc3BlY3Rv
ckNsaWVudCkKIHsKQEAgLTg1LDEyICs4NywxMiBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNw
ZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQwog
ICAgIG1faW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudFB0ci5nZXQoKTsKICAgICBtX2Fn
ZW50cy5hcHBlbmQoaW5zcGVjdG9yQWdlbnRQdHIucmVsZWFzZSgpKTsKIAotICAgIE93blB0cjxJ
bnNwZWN0b3JQYWdlQWdlbnQ+IHBhZ2VBZ2VudFB0cihJbnNwZWN0b3JQYWdlQWdlbnQ6OmNyZWF0
ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIHBhZ2UsIG1faW5zcGVjdG9yQWdlbnQsIG1f
c3RhdGUuZ2V0KCksIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpLCBpbnNwZWN0b3JDbGll
bnQpKTsKKyAgICBPd25QdHI8SW5zcGVjdG9yUGFnZUFnZW50PiBwYWdlQWdlbnRQdHIoSW5zcGVj
dG9yUGFnZUFnZW50OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBwYWdlLCBt
X2luc3BlY3RvckFnZW50LCBtX3N0YXRlLmdldCgpLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5n
ZXQoKSwgaW5zcGVjdG9yQ2xpZW50LCBtX292ZXJsYXkuZ2V0KCkpKTsKICAgICBJbnNwZWN0b3JQ
YWdlQWdlbnQqIHBhZ2VBZ2VudCA9IHBhZ2VBZ2VudFB0ci5nZXQoKTsKICAgICBtX3BhZ2VBZ2Vu
dCA9IHBhZ2VBZ2VudFB0ci5nZXQoKTsKICAgICBtX2FnZW50cy5hcHBlbmQocGFnZUFnZW50UHRy
LnJlbGVhc2UoKSk7CiAKLSAgICBPd25QdHI8SW5zcGVjdG9yRE9NQWdlbnQ+IGRvbUFnZW50UHRy
KEluc3BlY3RvckRPTUFnZW50OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBw
YWdlQWdlbnQsIGluc3BlY3RvckNsaWVudCwgbV9zdGF0ZS5nZXQoKSwgbV9pbmplY3RlZFNjcmlw
dE1hbmFnZXIuZ2V0KCkpKTsKKyAgICBPd25QdHI8SW5zcGVjdG9yRE9NQWdlbnQ+IGRvbUFnZW50
UHRyKEluc3BlY3RvckRPTUFnZW50OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgp
LCBwYWdlQWdlbnQsIG1fc3RhdGUuZ2V0KCksIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgp
LCBtX292ZXJsYXkuZ2V0KCkpKTsKICAgICBtX2RvbUFnZW50ID0gZG9tQWdlbnRQdHIuZ2V0KCk7
CiAgICAgbV9hZ2VudHMuYXBwZW5kKGRvbUFnZW50UHRyLnJlbGVhc2UoKSk7CiAKQEAgLTEzMCw3
ICsxMzIsNyBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2Uq
IHBhZ2UsIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQwogICAgIG1fYWdlbnRzLmFwcGVuZChj
b25zb2xlQWdlbnRQdHIucmVsZWFzZSgpKTsKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQotICAgIE93blB0cjxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50PiBkZWJ1Z2dlckFnZW50UHRy
KFBhZ2VEZWJ1Z2dlckFnZW50OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBt
X3N0YXRlLmdldCgpLCBwYWdlLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5nZXQoKSkpOworICAg
IE93blB0cjxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50PiBkZWJ1Z2dlckFnZW50UHRyKFBhZ2VEZWJ1
Z2dlckFnZW50OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBtX3N0YXRlLmdl
dCgpLCBwYWdlLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5nZXQoKSwgbV9vdmVybGF5LmdldCgp
KSk7CiAgICAgbV9kZWJ1Z2dlckFnZW50ID0gZGVidWdnZXJBZ2VudFB0ci5nZXQoKTsKICAgICBt
X2FnZW50cy5hcHBlbmQoZGVidWdnZXJBZ2VudFB0ci5yZWxlYXNlKCkpOwogCkBAIC0yOTcsMTIg
KzI5OSwxMiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmV2YWx1YXRlRm9yVGVzdEluRnJv
bnRlbmQobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgcwogCiB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmRyYXdIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewot
ICAgIG1fZG9tQWdlbnQtPmRyYXdIaWdobGlnaHQoY29udGV4dCk7CisgICAgbV9vdmVybGF5LT5w
YWludChjb250ZXh0KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRIaWdobGln
aHQoSGlnaGxpZ2h0KiBoaWdobGlnaHQpIGNvbnN0CiB7Ci0gICAgbV9kb21BZ2VudC0+Z2V0SGln
aGxpZ2h0KGhpZ2hsaWdodCk7CisgICAgbV9vdmVybGF5LT5nZXRIaWdobGlnaHQoaGlnaGxpZ2h0
KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0KE5vZGUqIG5vZGUpCkBA
IC0zNDQsNyArMzQ2LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpoaWRlSGlnaGxpZ2h0
KCkKIAogTm9kZSogSW5zcGVjdG9yQ29udHJvbGxlcjo6aGlnaGxpZ2h0ZWROb2RlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9kb21BZ2VudC0+aGlnaGxpZ2h0ZWROb2RlKCk7CisgICAgcmV0dXJu
IG1fb3ZlcmxheS0+aGlnaGxpZ2h0ZWROb2RlKCk7CiB9CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5oCmluZGV4IGI3ZTFjYmZkODQxNzEzNDQ1YTc2OGVjNDZiZDk5MWVmYzc0ZjdlOTYuLjkw
OTk2ZTVlOTRhMzg5NThlODgxZWViMTBiOTk3OTkyZDc0ODY2ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtNTIsNiArNTIsNyBAQCBj
bGFzcyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CiBj
bGFzcyBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENs
aWVudDsKK2NsYXNzIEluc3BlY3Rvck92ZXJsYXk7CiBjbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7
CiBjbGFzcyBJbnNwZWN0b3JQcm9maWxlckFnZW50OwogY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2VB
Z2VudDsKQEAgLTEyMCw2ICsxMjEsNyBAQCBwcml2YXRlOgogICAgIE93blB0cjxJbnN0cnVtZW50
aW5nQWdlbnRzPiBtX2luc3RydW1lbnRpbmdBZ2VudHM7CiAgICAgT3duUHRyPEluamVjdGVkU2Ny
aXB0TWFuYWdlcj4gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CiAgICAgT3duUHRyPEluc3BlY3Rv
clN0YXRlPiBtX3N0YXRlOworICAgIE93blB0cjxJbnNwZWN0b3JPdmVybGF5PiBtX292ZXJsYXk7
CiAKICAgICBJbnNwZWN0b3JBZ2VudCogbV9pbnNwZWN0b3JBZ2VudDsKICAgICBJbnNwZWN0b3JE
T01BZ2VudCogbV9kb21BZ2VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NQWdlbnQuY3BwCmluZGV4IDkwNzk1ODllNTFjZThmMDhlNTBlMjA2ZTQ5YTEzMjZiZTk1
YzMwMTIuLjFlYTgyMGIzNWUxNmY1MzE0ZWFhYzU0YjEzNzQzMjlkOGQyN2Y3MWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtNjYsNyAr
NjYsNiBAQAogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJZGVudGlmaWVy
c0ZhY3RvcnkuaCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdE1hbmFnZXIuaCIKLSNpbmNsdWRl
ICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgogI2lu
Y2x1ZGUgIkluc3BlY3Rvckhpc3RvcnkuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JQYWdlQWdlbnQu
aCIKQEAgLTE5NCwxMSArMTkzLDExIEBAIFN0cmluZyBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJv
clN0cmluZyhjb25zdCBFeGNlcHRpb25Db2RlJiBlYykKICAgICByZXR1cm4gIiI7CiB9CiAKLUlu
c3BlY3RvckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBp
bnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgSW5zcGVj
dG9yQ2xpZW50KiBjbGllbnQsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCitJbnNwZWN0b3JET01BZ2Vu
dDo6SW5zcGVjdG9yRE9NQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cywgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIEluc3BlY3RvclN0YXRlKiBpbnNw
ZWN0b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIs
IEluc3BlY3Rvck92ZXJsYXkqIG92ZXJsYXkpCiAgICAgOiBJbnNwZWN0b3JCYXNlQWdlbnQ8SW5z
cGVjdG9yRE9NQWdlbnQ+KCJET00iLCBpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnNwZWN0b3JTdGF0
ZSkKICAgICAsIG1fcGFnZUFnZW50KHBhZ2VBZ2VudCkKLSAgICAsIG1fY2xpZW50KGNsaWVudCkK
ICAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKGluamVjdGVkU2NyaXB0TWFuYWdlcikKKyAg
ICAsIG1fb3ZlcmxheShvdmVybGF5KQogICAgICwgbV9mcm9udGVuZCgwKQogICAgICwgbV9kb21M
aXN0ZW5lcigwKQogICAgICwgbV9sYXN0Tm9kZUlkKDEpCkBAIC0yMTAsNyArMjA5LDYgQEAgSW5z
cGVjdG9yRE9NQWdlbnQ6Okluc3BlY3RvckRPTUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGlu
c3RydW1lbnRpbmdBZ2VudHMsIEkKIEluc3BlY3RvckRPTUFnZW50Ojp+SW5zcGVjdG9yRE9NQWdl
bnQoKQogewogICAgIHJlc2V0KCk7Ci0gICAgQVNTRVJUKCFtX2hpZ2hsaWdodERhdGEgfHwgKCFt
X2hpZ2hsaWdodERhdGEtPm5vZGUgJiYgIW1faGlnaGxpZ2h0RGF0YS0+cmVjdCkpOwogICAgIEFT
U0VSVCghbV9zZWFyY2hpbmdGb3JOb2RlKTsKIH0KIApAQCAtMjcwLDExICsyNjgsNiBAQCBWZWN0
b3I8RG9jdW1lbnQqPiBJbnNwZWN0b3JET01BZ2VudDo6ZG9jdW1lbnRzKCkKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1Ob2RlKiBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0ZWROb2RlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9oaWdobGlnaHREYXRhID8gbV9oaWdobGlnaHREYXRhLT5u
b2RlLmdldCgpIDogMDsKLX0KLQogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVzZXQoKQogewog
ICAgIGlmIChtX2hpc3RvcnkpCkBAIC05MzgsMTEgKzkzMSwxMSBAQCBib29sIEluc3BlY3RvckRP
TUFnZW50OjpoYW5kbGVNb3VzZVByZXNzKCkKICAgICBpZiAoIW1fc2VhcmNoaW5nRm9yTm9kZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1faGlnaGxpZ2h0RGF0YSAmJiBtX2hp
Z2hsaWdodERhdGEtPm5vZGUpIHsKLSAgICAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBtX2hpZ2hs
aWdodERhdGEtPm5vZGU7Ci0gICAgICAgIGluc3BlY3Qobm9kZS5nZXQoKSk7CisgICAgaWYgKE5v
ZGUqIG5vZGUgPSBtX292ZXJsYXktPmhpZ2hsaWdodGVkTm9kZSgpKSB7CisgICAgICAgIGluc3Bl
Y3Qobm9kZSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Omluc3BlY3Qo
Tm9kZSogbm9kZSkKQEAgLTk4MiwxNiArOTc1LDE0IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OmZvY3VzTm9kZSgpCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Om1vdXNlRGlkTW92ZU92ZXJF
bGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQpCiB7Ci0gICAgaWYg
KCFtX3NlYXJjaGluZ0Zvck5vZGUgfHwgIW1faGlnaGxpZ2h0RGF0YSkKKyAgICBpZiAoIW1fc2Vh
cmNoaW5nRm9yTm9kZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTm9kZSogbm9kZSA9IHJlc3Vs
dC5pbm5lck5vZGUoKTsKICAgICB3aGlsZSAobm9kZSAmJiBub2RlLT5ub2RlVHlwZSgpID09IE5v
ZGU6OlRFWFRfTk9ERSkKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKLSAgICBp
ZiAobm9kZSkgewotICAgICAgICBtX2hpZ2hsaWdodERhdGEtPm5vZGUgPSBub2RlOwotICAgICAg
ICBoaWdobGlnaHQoKTsKLSAgICB9CisgICAgaWYgKG5vZGUpCisgICAgICAgIG1fb3ZlcmxheS0+
aGlnaGxpZ2h0Tm9kZShub2RlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0U2Vh
cmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQsIEluc3BlY3Rvck9iamVjdCogaGlnaGxpZ2h0Q29u
ZmlnKQpAQCAtMTAwNCw0OCArOTk1LDQyIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFNl
YXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkLCBJbnNwZWN0b3JPYmplY3QqIGhpZ2hsCiAgICAg
ZWxzZSB7CiAgICAgICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgICAgICBoaWRlSGlnaGxpZ2h0
KCZlcnJvcik7Ci0gICAgICAgIG1faGlnaGxpZ2h0RGF0YS5jbGVhcigpOworICAgICAgICBtX292
ZXJsYXktPmNsZWFySGlnaGxpZ2h0RGF0YSgpOwogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5nKiwgYm9vbCBlbmFibGVk
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogaGlnaGxpZ2h0Q29uZmlnKQotewotICAg
IHNldFNlYXJjaGluZ0Zvck5vZGUoZW5hYmxlZCwgaGlnaGxpZ2h0Q29uZmlnID8gaGlnaGxpZ2h0
Q29uZmlnLT5nZXQoKSA6IDApOwotfQotCiBib29sIEluc3BlY3RvckRPTUFnZW50OjpzZXRIaWdo
bGlnaHREYXRhRnJvbUNvbmZpZyhJbnNwZWN0b3JPYmplY3QqIGhpZ2hsaWdodENvbmZpZykKIHsK
ICAgICBpZiAoIWhpZ2hsaWdodENvbmZpZykgewotICAgICAgICBtX2hpZ2hsaWdodERhdGEuY2xl
YXIoKTsKKyAgICAgICAgbV9vdmVybGF5LT5jbGVhckhpZ2hsaWdodERhdGEoKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG1faGlnaGxpZ2h0RGF0YSA9IGFkb3B0UHRyKG5l
dyBIaWdobGlnaHREYXRhKCkpOworICAgIEhpZ2hsaWdodERhdGEqIGhpZ2hsaWdodERhdGEgPSBu
ZXcgSGlnaGxpZ2h0RGF0YSgpOwogICAgIGJvb2wgc2hvd0luZm8gPSBmYWxzZTsgLy8gRGVmYXVs
dDogZmFsc2UgKGRvIG5vdCBzaG93IGEgdG9vbHRpcCkuCiAgICAgaGlnaGxpZ2h0Q29uZmlnLT5n
ZXRCb29sZWFuKCJzaG93SW5mbyIsICZzaG93SW5mbyk7Ci0gICAgbV9oaWdobGlnaHREYXRhLT5z
aG93SW5mbyA9IHNob3dJbmZvOwotICAgIG1faGlnaGxpZ2h0RGF0YS0+Y29udGVudCA9IHBhcnNl
Q29uZmlnQ29sb3IoImNvbnRlbnRDb2xvciIsIGhpZ2hsaWdodENvbmZpZyk7Ci0gICAgbV9oaWdo
bGlnaHREYXRhLT5jb250ZW50T3V0bGluZSA9IHBhcnNlQ29uZmlnQ29sb3IoImNvbnRlbnRPdXRs
aW5lQ29sb3IiLCBoaWdobGlnaHRDb25maWcpOwotICAgIG1faGlnaGxpZ2h0RGF0YS0+cGFkZGlu
ZyA9IHBhcnNlQ29uZmlnQ29sb3IoInBhZGRpbmdDb2xvciIsIGhpZ2hsaWdodENvbmZpZyk7Ci0g
ICAgbV9oaWdobGlnaHREYXRhLT5ib3JkZXIgPSBwYXJzZUNvbmZpZ0NvbG9yKCJib3JkZXJDb2xv
ciIsIGhpZ2hsaWdodENvbmZpZyk7Ci0gICAgbV9oaWdobGlnaHREYXRhLT5tYXJnaW4gPSBwYXJz
ZUNvbmZpZ0NvbG9yKCJtYXJnaW5Db2xvciIsIGhpZ2hsaWdodENvbmZpZyk7CisgICAgaGlnaGxp
Z2h0RGF0YS0+c2hvd0luZm8gPSBzaG93SW5mbzsKKyAgICBoaWdobGlnaHREYXRhLT5jb250ZW50
ID0gcGFyc2VDb25maWdDb2xvcigiY29udGVudENvbG9yIiwgaGlnaGxpZ2h0Q29uZmlnKTsKKyAg
ICBoaWdobGlnaHREYXRhLT5jb250ZW50T3V0bGluZSA9IHBhcnNlQ29uZmlnQ29sb3IoImNvbnRl
bnRPdXRsaW5lQ29sb3IiLCBoaWdobGlnaHRDb25maWcpOworICAgIGhpZ2hsaWdodERhdGEtPnBh
ZGRpbmcgPSBwYXJzZUNvbmZpZ0NvbG9yKCJwYWRkaW5nQ29sb3IiLCBoaWdobGlnaHRDb25maWcp
OworICAgIGhpZ2hsaWdodERhdGEtPmJvcmRlciA9IHBhcnNlQ29uZmlnQ29sb3IoImJvcmRlckNv
bG9yIiwgaGlnaGxpZ2h0Q29uZmlnKTsKKyAgICBoaWdobGlnaHREYXRhLT5tYXJnaW4gPSBwYXJz
ZUNvbmZpZ0NvbG9yKCJtYXJnaW5Db2xvciIsIGhpZ2hsaWdodENvbmZpZyk7CisgICAgbV9vdmVy
bGF5LT5zZXRIaWdobGlnaHREYXRhKGFkb3B0UHRyKGhpZ2hsaWdodERhdGEpKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0KCkKK3ZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmluZyosIGJv
b2wgZW5hYmxlZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGhpZ2hsaWdodENvbmZp
ZykKIHsKLSAgICAvLyBUaGlzIG1ldGhvZCByZXF1aXJlcyBtX2hpZ2hsaWdodERhdGEgdG8gaGF2
ZSBiZWVuIGZpbGxlZCBpbiBieSBpdHMgY2xpZW50LgotICAgIEFTU0VSVChtX2hpZ2hsaWdodERh
dGEpOwotICAgIG1fY2xpZW50LT5oaWdobGlnaHQoKTsKKyAgICBzZXRTZWFyY2hpbmdGb3JOb2Rl
KGVuYWJsZWQsIGhpZ2hsaWdodENvbmZpZyA/IGhpZ2hsaWdodENvbmZpZy0+Z2V0KCkgOiAwKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0UmVjdChFcnJvclN0cmluZyos
IGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiogY29sb3IsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBvdXRsaW5l
Q29sb3IpCiB7Ci0gICAgbV9oaWdobGlnaHREYXRhID0gYWRvcHRQdHIobmV3IEhpZ2hsaWdodERh
dGEoKSk7Ci0gICAgbV9oaWdobGlnaHREYXRhLT5yZWN0ID0gYWRvcHRQdHIobmV3IEludFJlY3Qo
eCwgeSwgd2lkdGgsIGhlaWdodCkpOwotICAgIG1faGlnaGxpZ2h0RGF0YS0+Y29udGVudCA9IHBh
cnNlQ29sb3IoY29sb3IpOwotICAgIG1faGlnaGxpZ2h0RGF0YS0+Y29udGVudE91dGxpbmUgPSBw
YXJzZUNvbG9yKG91dGxpbmVDb2xvcik7Ci0gICAgbV9jbGllbnQtPmhpZ2hsaWdodCgpOworICAg
IEhpZ2hsaWdodERhdGEqIGhpZ2hsaWdodERhdGEgPSBuZXcgSGlnaGxpZ2h0RGF0YSgpOworICAg
IGhpZ2hsaWdodERhdGEtPnJlY3QgPSBhZG9wdFB0cihuZXcgSW50UmVjdCh4LCB5LCB3aWR0aCwg
aGVpZ2h0KSk7CisgICAgaGlnaGxpZ2h0RGF0YS0+Y29udGVudCA9IHBhcnNlQ29sb3IoY29sb3Ip
OworICAgIGhpZ2hsaWdodERhdGEtPmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb2xvcihvdXRsaW5l
Q29sb3IpOworICAgIG1fb3ZlcmxheS0+c2V0SGlnaGxpZ2h0RGF0YShhZG9wdFB0cihoaWdobGln
aHREYXRhKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodE5vZGUoCkBA
IC0xMDUzLDEyICsxMDM4LDkgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Tm9k
ZSgKICAgICBpbnQgbm9kZUlkLAogICAgIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBo
aWdobGlnaHRDb25maWcpCiB7Ci0gICAgaWYgKE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlk
KSkgewotICAgICAgICBpZiAoc2V0SGlnaGxpZ2h0RGF0YUZyb21Db25maWcoaGlnaGxpZ2h0Q29u
ZmlnLmdldCgpKSkgewotICAgICAgICAgICAgbV9oaWdobGlnaHREYXRhLT5ub2RlID0gbm9kZTsK
LSAgICAgICAgICAgIGhpZ2hsaWdodCgpOwotICAgICAgICB9Ci0gICAgfQorICAgIGlmIChOb2Rl
KiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCkpCisgICAgICAgIGlmIChzZXRIaWdobGlnaHREYXRh
RnJvbUNvbmZpZyhoaWdobGlnaHRDb25maWcuZ2V0KCkpKQorICAgICAgICAgICAgbV9vdmVybGF5
LT5oaWdobGlnaHROb2RlKG5vZGUpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdo
bGlnaHRGcmFtZSgKQEAgLTEwNjksMjIgKzEwNTEsMTggQEAgdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6aGlnaGxpZ2h0RnJhbWUoCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlQWdlbnQtPmZy
YW1lRm9ySWQoZnJhbWVJZCk7CiAgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5vd25lckVsZW1lbnQo
KSkgewotICAgICAgICBtX2hpZ2hsaWdodERhdGEgPSBhZG9wdFB0cihuZXcgSGlnaGxpZ2h0RGF0
YSgpKTsKLSAgICAgICAgbV9oaWdobGlnaHREYXRhLT5ub2RlID0gZnJhbWUtPm93bmVyRWxlbWVu
dCgpOwotICAgICAgICBtX2hpZ2hsaWdodERhdGEtPnNob3dJbmZvID0gdHJ1ZTsgLy8gQWx3YXlz
IHNob3cgdG9vbHRpcHMgZm9yIGZyYW1lcy4KLSAgICAgICAgbV9oaWdobGlnaHREYXRhLT5jb250
ZW50ID0gcGFyc2VDb2xvcihjb2xvcik7Ci0gICAgICAgIG1faGlnaGxpZ2h0RGF0YS0+Y29udGVu
dE91dGxpbmUgPSBwYXJzZUNvbG9yKG91dGxpbmVDb2xvcik7Ci0gICAgICAgIGhpZ2hsaWdodCgp
OworICAgICAgICBIaWdobGlnaHREYXRhKiBoaWdobGlnaHREYXRhID0gbmV3IEhpZ2hsaWdodERh
dGEoKTsKKyAgICAgICAgaGlnaGxpZ2h0RGF0YS0+bm9kZSA9IGZyYW1lLT5vd25lckVsZW1lbnQo
KTsKKyAgICAgICAgaGlnaGxpZ2h0RGF0YS0+c2hvd0luZm8gPSB0cnVlOyAvLyBBbHdheXMgc2hv
dyB0b29sdGlwcyBmb3IgZnJhbWVzLgorICAgICAgICBoaWdobGlnaHREYXRhLT5jb250ZW50ID0g
cGFyc2VDb2xvcihjb2xvcik7CisgICAgICAgIGhpZ2hsaWdodERhdGEtPmNvbnRlbnRPdXRsaW5l
ID0gcGFyc2VDb2xvcihvdXRsaW5lQ29sb3IpOworICAgICAgICBtX292ZXJsYXktPnNldEhpZ2hs
aWdodERhdGEoYWRvcHRQdHIoaGlnaGxpZ2h0RGF0YSkpOwogICAgIH0KIH0KIAogdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6aGlkZUhpZ2hsaWdodChFcnJvclN0cmluZyopCiB7Ci0gICAgaWYgKG1f
aGlnaGxpZ2h0RGF0YSkgewotICAgICAgICBtX2hpZ2hsaWdodERhdGEtPm5vZGUuY2xlYXIoKTsK
LSAgICAgICAgbV9oaWdobGlnaHREYXRhLT5yZWN0LmNsZWFyKCk7Ci0gICAgfQotICAgIG1fY2xp
ZW50LT5oaWRlSGlnaGxpZ2h0KCk7CisgICAgbV9vdmVybGF5LT5oaWRlSGlnaGxpZ2h0KCk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Om1vdmVUbyhFcnJvclN0cmluZyogZXJyb3JTdHJp
bmcsIGludCBub2RlSWQsIGludCB0YXJnZXRFbGVtZW50SWQsIGNvbnN0IGludCogY29uc3QgYW5j
aG9yTm9kZUlkLCBpbnQqIG5ld05vZGVJZCkKQEAgLTE1OTksMjIgKzE1NzcsNiBAQCBQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IEluc3BlY3RvckRPTUFnZW50
OjpyZXNvbHZlTm9kZShObwogICAgIHJldHVybiBpbmplY3RlZFNjcmlwdC53cmFwTm9kZShub2Rl
LCBvYmplY3RHcm91cCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRyYXdIaWdobGln
aHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGlmICghbV9oaWdobGln
aHREYXRhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBET01Ob2RlSGlnaGxpZ2h0ZXI6OmRyYXdI
aWdobGlnaHQoY29udGV4dCwgbV9oaWdobGlnaHREYXRhLT5ub2RlID8gbV9oaWdobGlnaHREYXRh
LT5ub2RlLT5kb2N1bWVudCgpIDogbV9kb2N1bWVudC5nZXQoKSwgbV9oaWdobGlnaHREYXRhLmdl
dCgpKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0SGlnaGxpZ2h0KEhpZ2hsaWdo
dCogaGlnaGxpZ2h0KSBjb25zdAotewotICAgIGlmICghbV9oaWdobGlnaHREYXRhKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBET01Ob2RlSGlnaGxpZ2h0ZXI6OmdldEhpZ2hsaWdodChtX2hpZ2hs
aWdodERhdGEtPm5vZGUgPyBtX2hpZ2hsaWdodERhdGEtPm5vZGUtPmRvY3VtZW50KCkgOiBtX2Rv
Y3VtZW50LmdldCgpLCBtX2hpZ2hsaWdodERhdGEuZ2V0KCksIGhpZ2hsaWdodCk7Ci19Ci0KIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCmluZGV4IGIwNWFiNTcw
ZDlmZDFiMDQ4NzA2YTM5M2EyNDY2NTk3YjQ5NjM5YmYuLjkxMDYyMzAzMWNlODc4ZTE0ODY4YTU0
MzE5OGI4NGUwY2Q5NjJkZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5oCkBAIC01NSwxMiArNTUsMTAgQEAgY2xhc3MgRE9NRWRpdG9yOwogY2xhc3Mg
RG9jdW1lbnQ7CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgRXZlbnQ7Ci1jbGFzcyBHcmFwaGljc0Nv
bnRleHQ7Ci1jbGFzcyBJbnNwZWN0b3JDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsK
IGNsYXNzIEluc3BlY3Rvckhpc3Rvcnk7CitjbGFzcyBJbnNwZWN0b3JPdmVybGF5OwogY2xhc3Mg
SW5zcGVjdG9yUGFnZUFnZW50OwotY2xhc3MgSW50UmVjdDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7
CiBjbGFzcyBIVE1MRWxlbWVudDsKIGNsYXNzIEluc3BlY3RvclN0YXRlOwpAQCAtNzEsOSArNjks
NiBAQCBjbGFzcyBSZXZhbGlkYXRlU3R5bGVBdHRyaWJ1dGVUYXNrOwogY2xhc3MgU2NyaXB0VmFs
dWU7CiBjbGFzcyBTaGFkb3dSb290OwogCi1zdHJ1Y3QgSGlnaGxpZ2h0Owotc3RydWN0IEhpZ2hs
aWdodERhdGE7Ci0KIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUikKQEAgLTEwMyw5ICs5OCw5IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB2b2lk
IGRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCopID0gMDsKICAgICB9OwogCi0gICAgc3RhdGljIFBh
c3NPd25QdHI8SW5zcGVjdG9yRE9NQWdlbnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBp
bnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgSW5zcGVj
dG9yQ2xpZW50KiBjbGllbnQsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCisgICAgc3RhdGljIFBhc3NP
d25QdHI8SW5zcGVjdG9yRE9NQWdlbnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgSW5zcGVjdG9y
U3RhdGUqIGluc3BlY3RvclN0YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2Ny
aXB0TWFuYWdlciwgSW5zcGVjdG9yT3ZlcmxheSogb3ZlcmxheSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9yRE9NQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywg
cGFnZUFnZW50LCBjbGllbnQsIGluc3BlY3RvclN0YXRlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JET01BZ2VudChpbnN0cnVt
ZW50aW5nQWdlbnRzLCBwYWdlQWdlbnQsIGluc3BlY3RvclN0YXRlLCBpbmplY3RlZFNjcmlwdE1h
bmFnZXIsIG92ZXJsYXkpKTsKICAgICB9CiAKICAgICBzdGF0aWMgU3RyaW5nIHRvRXJyb3JTdHJp
bmcoY29uc3QgRXhjZXB0aW9uQ29kZSYpOwpAQCAtMTUxLDggKzE0Niw2IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgcmVkbyhFcnJvclN0cmluZyopOwogICAgIHZpcnR1YWwgdm9pZCBtYXJr
VW5kb2FibGVTdGF0ZShFcnJvclN0cmluZyopOwogCi0gICAgTm9kZSogaGlnaGxpZ2h0ZWROb2Rl
KCkgY29uc3Q7Ci0KICAgICB2b2lkIGdldEV2ZW50TGlzdGVuZXJzKE5vZGUqLCBWZWN0b3I8RXZl
bnRMaXN0ZW5lckluZm8+JiBsaXN0ZW5lcnNBcnJheSwgYm9vbCBpbmNsdWRlQW5jZXN0b3JzKTsK
IAogICAgIC8vIE1ldGhvZHMgY2FsbGVkIGZyb20gdGhlIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bi4KQEAgLTE4NSw5ICsxNzgsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnNwZWN0KE5vZGUqKTsK
ICAgICB2b2lkIGZvY3VzTm9kZSgpOwogCi0gICAgdm9pZCBkcmF3SGlnaGxpZ2h0KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0OwotICAgIHZvaWQgZ2V0SGlnaGxpZ2h0KEhpZ2hsaWdodCopIGNvbnN0
OwotCiAgICAgSW5zcGVjdG9ySGlzdG9yeSogaGlzdG9yeSgpIHsgcmV0dXJuIG1faGlzdG9yeS5n
ZXQoKTsgfQogCiAgICAgLy8gV2UgcmVwcmVzZW50IGVtYmVkZGVkIGRvbXMgYXMgYSBwYXJ0IG9m
IHRoZSBzYW1lIGhpZXJhcmNoeS4gSGVuY2Ugd2UgdHJlYXQgY2hpbGRyZW4gb2YgZnJhbWUgb3du
ZXJzIGRpZmZlcmVudGx5LgpAQCAtMjA1LDExICsxOTUsMTAgQEAgcHVibGljOgogICAgIEluc3Bl
Y3RvclBhZ2VBZ2VudCogcGFnZUFnZW50KCkgeyByZXR1cm4gbV9wYWdlQWdlbnQ7IH0KIAogcHJp
dmF0ZToKLSAgICBJbnNwZWN0b3JET01BZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVj
dG9yUGFnZUFnZW50KiwgSW5zcGVjdG9yQ2xpZW50KiwgSW5zcGVjdG9yU3RhdGUqLCBJbmplY3Rl
ZFNjcmlwdE1hbmFnZXIqKTsKKyAgICBJbnNwZWN0b3JET01BZ2VudChJbnN0cnVtZW50aW5nQWdl
bnRzKiwgSW5zcGVjdG9yUGFnZUFnZW50KiwgSW5zcGVjdG9yU3RhdGUqLCBJbmplY3RlZFNjcmlw
dE1hbmFnZXIqLCBJbnNwZWN0b3JPdmVybGF5Kik7CiAKICAgICB2b2lkIHNldFNlYXJjaGluZ0Zv
ck5vZGUoYm9vbCBlbmFibGVkLCBJbnNwZWN0b3JPYmplY3QqIGhpZ2hsaWdodENvbmZpZyk7CiAg
ICAgYm9vbCBzZXRIaWdobGlnaHREYXRhRnJvbUNvbmZpZyhJbnNwZWN0b3JPYmplY3QqIGhpZ2hs
aWdodENvbmZpZyk7Ci0gICAgdm9pZCBoaWdobGlnaHQoKTsKIAogICAgIC8vIE5vZGUtcmVsYXRl
ZCBtZXRob2RzLgogICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8Tm9kZT4sIGludD4gTm9kZVRv
SWRNYXA7CkBAIC0yNDEsOCArMjMwLDggQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgSW5zcGVj
dG9yUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKLSAgICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50
OwogICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciogbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7Cisg
ICAgSW5zcGVjdG9yT3ZlcmxheSogbV9vdmVybGF5OwogICAgIEluc3BlY3RvckZyb250ZW5kOjpE
T00qIG1fZnJvbnRlbmQ7CiAgICAgRE9NTGlzdGVuZXIqIG1fZG9tTGlzdGVuZXI7CiAgICAgTm9k
ZVRvSWRNYXAgbV9kb2N1bWVudE5vZGVUb0lkTWFwOwpAQCAtMjU2LDcgKzI0NSw2IEBAIHByaXZh
dGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFJlZlB0cjxOb2RlPiA+ID4g
U2VhcmNoUmVzdWx0czsKICAgICBTZWFyY2hSZXN1bHRzIG1fc2VhcmNoUmVzdWx0czsKICAgICBP
d25QdHI8UmV2YWxpZGF0ZVN0eWxlQXR0cmlidXRlVGFzaz4gbV9yZXZhbGlkYXRlU3R5bGVBdHRy
VGFzazsKLSAgICBPd25QdHI8SGlnaGxpZ2h0RGF0YT4gbV9oaWdobGlnaHREYXRhOwogICAgIFJl
ZlB0cjxOb2RlPiBtX25vZGVUb0ZvY3VzOwogICAgIGJvb2wgbV9zZWFyY2hpbmdGb3JOb2RlOwog
ICAgIE93blB0cjxJbnNwZWN0b3JIaXN0b3J5PiBtX2hpc3Rvcnk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAppbmRleCAwOWM5N2QxOTUz
ZTRiOWIwMDE2MWY4NzRmNDUzMWZiZGVjN2RiNmNkLi5iMmU3OWFkN2VmMWZlODM4MjJmZTUzMDE4
ODk0ZjQyNzFiNDJjYmJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAgLTEzMywxNyArMTMzLDE4IEBAIHByb3RlY3RlZDoKICAg
ICBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlcigpIHsgcmV0dXJu
IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOyB9CiAgICAgdmlydHVhbCBJbmplY3RlZFNjcmlwdCBp
bmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcqLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNv
bnRleHRJZCkgPSAwOwogCisgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkUGF1c2UoU2NyaXB0U3RhdGUqLCBjb25zdCBTY3JpcHRWYWx1ZSYgY2FsbEZyYW1l
cywgY29uc3QgU2NyaXB0VmFsdWUmIGV4Y2VwdGlvbik7CisgICAgdmlydHVhbCB2b2lkIGRpZENv
bnRpbnVlKCk7CisKIHByaXZhdGU6CiAgICAgdm9pZCBlbmFibGUoKTsKLSAgICB2b2lkIGRpc2Fi
bGUoKTsKICAgICBib29sIGVuYWJsZWQoKTsKIAogICAgIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
OkFycmF5PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPiA+IGN1cnJlbnRDYWxsRnJh
bWVzKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiBz
Y3JpcHRJZCwgY29uc3QgU2NyaXB0Jik7CiAgICAgdmlydHVhbCB2b2lkIGZhaWxlZFRvUGFyc2VT
b3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGZpcnN0TGlu
ZSwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwotICAgIHZpcnR1
YWwgdm9pZCBkaWRQYXVzZShTY3JpcHRTdGF0ZSosIGNvbnN0IFNjcmlwdFZhbHVlJiBjYWxsRnJh
bWVzLCBjb25zdCBTY3JpcHRWYWx1ZSYgZXhjZXB0aW9uKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlk
Q29udGludWUoKTsKIAogICAgIHZvaWQgc2V0UGF1c2VPbkV4Y2VwdGlvbnNJbXBsKEVycm9yU3Ry
aW5nKiwgaW50KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclBhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFn
ZUFnZW50LmNwcAppbmRleCBlZjM0NTM3ZjBlMTE4ZmI1ZTBjYjg4Y2EyZmFiNWUzZWY2MGEzNTc3
Li45Njc2ZDEzOGU4NTZmZjk1MDk2YmMyZTA0ODY0YTE4ZWRkZTgyYzYyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcApAQCAtMjIzLDkgKzIy
Myw5IEBAIGJvb2wgSW5zcGVjdG9yUGFnZUFnZW50OjpzaGFyZWRCdWZmZXJDb250ZW50KFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIsIGNvCiAgICAgcmV0dXJuIGRlY29kZVNoYXJlZEJ1
ZmZlcihidWZmZXIsIHRleHRFbmNvZGluZ05hbWUsIHJlc3VsdCk7CiB9CiAKLVBhc3NPd25QdHI8
SW5zcGVjdG9yUGFnZUFnZW50PiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNyZWF0ZShJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYWdlKiBwYWdlLCBJbnNwZWN0b3JBZ2Vu
dCogaW5zcGVjdG9yQWdlbnQsIEluc3BlY3RvclN0YXRlKiBzdGF0ZSwgSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQor
UGFzc093blB0cjxJbnNwZWN0b3JQYWdlQWdlbnQ+IEluc3BlY3RvclBhZ2VBZ2VudDo6Y3JlYXRl
KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIFBhZ2UqIHBhZ2UsIElu
c3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgSW5zcGVjdG9yU3RhdGUqIHN0YXRlLCBJbmpl
Y3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgSW5zcGVjdG9yQ2xpZW50
KiBjbGllbnQsIEluc3BlY3Rvck92ZXJsYXkqIG92ZXJsYXkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBJbnNwZWN0b3JQYWdlQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgcGFnZSwgaW5z
cGVjdG9yQWdlbnQsIHN0YXRlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIGNsaWVudCkpOworICAg
IHJldHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9yUGFnZUFnZW50KGluc3RydW1lbnRpbmdBZ2Vu
dHMsIHBhZ2UsIGluc3BlY3RvckFnZW50LCBzdGF0ZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBj
bGllbnQsIG92ZXJsYXkpKTsKIH0KIAogLy8gc3RhdGljCkBAIC0zMDgsMTMgKzMwOCwxNCBAQCBU
eXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBlOjpFbnVtIEluc3BlY3RvclBhZ2VBZ2VudDo6
Y2FjaGVkUmVzb3VyY2VUeXBlSnNvbgogICAgIHJldHVybiByZXNvdXJjZVR5cGVKc29uKGNhY2hl
ZFJlc291cmNlVHlwZShjYWNoZWRSZXNvdXJjZSkpOwogfQogCi1JbnNwZWN0b3JQYWdlQWdlbnQ6
Okluc3BlY3RvclBhZ2VBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdl
bnRzLCBQYWdlKiBwYWdlLCBJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIEluc3BlY3Rv
clN0YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNj
cmlwdE1hbmFnZXIsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQorSW5zcGVjdG9yUGFnZUFnZW50
OjpJbnNwZWN0b3JQYWdlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cywgUGFnZSogcGFnZSwgSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBJbnNwZWN0
b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCwgSW5zcGVjdG9yT3ZlcmxheSog
b3ZlcmxheSkKICAgICA6IEluc3BlY3RvckJhc2VBZ2VudDxJbnNwZWN0b3JQYWdlQWdlbnQ+KCJQ
YWdlIiwgaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUpCiAgICAgLCBtX3BhZ2Uo
cGFnZSkKICAgICAsIG1faW5zcGVjdG9yQWdlbnQoaW5zcGVjdG9yQWdlbnQpCiAgICAgLCBtX2lu
amVjdGVkU2NyaXB0TWFuYWdlcihpbmplY3RlZFNjcmlwdE1hbmFnZXIpCiAgICAgLCBtX2NsaWVu
dChjbGllbnQpCiAgICAgLCBtX2Zyb250ZW5kKDApCisgICAgLCBtX292ZXJsYXkob3ZlcmxheSkK
ICAgICAsIG1fbGFzdFNjcmlwdElkZW50aWZpZXIoMCkKICAgICAsIG1fbGFzdFBhaW50Q29udGV4
dCgwKQogICAgICwgbV9kaWRMb2FkRXZlbnRGaXJlKGZhbHNlKQpAQCAtODg1LDcgKzg4Niw3IEBA
IHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkaWRQYWludCgpCiAgICAgICAgIENvbG9yKDAsIDAs
IDB4RkYsIDB4M0YpLAogICAgIH07CiAKLSAgICBET01Ob2RlSGlnaGxpZ2h0ZXI6OmRyYXdPdXRs
aW5lKCptX2xhc3RQYWludENvbnRleHQsIG1fbGFzdFBhaW50UmVjdCwgY29sb3JzW2NvbG9yU2Vs
ZWN0b3IrKyAlIFdURl9BUlJBWV9MRU5HVEgoY29sb3JzKV0pOworICAgIG1fb3ZlcmxheS0+ZHJh
d091dGxpbmUoKm1fbGFzdFBhaW50Q29udGV4dCwgbV9sYXN0UGFpbnRSZWN0LCBjb2xvcnNbY29s
b3JTZWxlY3RvcisrICUgV1RGX0FSUkFZX0xFTkdUSChjb2xvcnMpXSk7CiAKICAgICBtX2xhc3RQ
YWludENvbnRleHQgPSAwOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclBhZ2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clBhZ2VBZ2VudC5oCmluZGV4IDk2NGJjODVmYzYzNjQ4YWYzOGYyZGMxMmZjODNmNzk3MWI5M2E2
NjMuLmMzYjlhNmQyZjQ1YmVlMmI3M2ZjMTA5OGI2NTJhYmFjYWIyYWY5ZjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKQEAgLTUzLDYgKzUzLDcg
QEAgY2xhc3MgSW5zcGVjdG9yQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JBcnJheTsKIGNsYXNzIElu
c3BlY3RvckNsaWVudDsKIGNsYXNzIEluc3BlY3Rvck9iamVjdDsKK2NsYXNzIEluc3BlY3Rvck92
ZXJsYXk7CiBjbGFzcyBJbnNwZWN0b3JTdGF0ZTsKIGNsYXNzIEluc3RydW1lbnRpbmdBZ2VudHM7
CiBjbGFzcyBLVVJMOwpAQCAtNzcsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgICAgIE90aGVyUmVz
b3VyY2UKICAgICB9OwogCi0gICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yUGFnZUFnZW50
PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyosIFBhZ2UqLCBJbnNwZWN0b3JBZ2VudCosIElu
c3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9yQ2xpZW50Kik7
CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yUGFnZUFnZW50PiBjcmVhdGUoSW5zdHJ1
bWVudGluZ0FnZW50cyosIFBhZ2UqLCBJbnNwZWN0b3JBZ2VudCosIEluc3BlY3RvclN0YXRlKiwg
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9yQ2xpZW50KiwgSW5zcGVjdG9yT3Zlcmxh
eSopOwogCiAgICAgc3RhdGljIGJvb2wgY2FjaGVkUmVzb3VyY2VDb250ZW50KENhY2hlZFJlc291
cmNlKiwgU3RyaW5nKiByZXN1bHQsIGJvb2wqIGJhc2U2NEVuY29kZWQpOwogICAgIHN0YXRpYyBi
b29sIHNoYXJlZEJ1ZmZlckNvbnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBjb25zdCBT
dHJpbmcmIHRleHRFbmNvZGluZ05hbWUsIGJvb2wgd2l0aEJhc2U2NEVuY29kZSwgU3RyaW5nKiBy
ZXN1bHQpOwpAQCAtMTM3LDcgKzEzOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRG9jdW1lbnRM
b2FkZXIqIGFzc2VydERvY3VtZW50TG9hZGVyKEVycm9yU3RyaW5nKiwgRnJhbWUqKTsKIAogcHJp
dmF0ZToKLSAgICBJbnNwZWN0b3JQYWdlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIFBhZ2Uq
LCBJbnNwZWN0b3JBZ2VudCosIEluc3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
KiwgSW5zcGVjdG9yQ2xpZW50Kik7CisgICAgSW5zcGVjdG9yUGFnZUFnZW50KEluc3RydW1lbnRp
bmdBZ2VudHMqLCBQYWdlKiwgSW5zcGVjdG9yQWdlbnQqLCBJbnNwZWN0b3JTdGF0ZSosIEluamVj
dGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3RvckNsaWVudCosIEluc3BlY3Rvck92ZXJsYXkqKTsK
ICAgICB2b2lkIHVwZGF0ZVZpZXdNZXRyaWNzKGludCwgaW50LCBkb3VibGUsIGJvb2wpOwogCiAg
ICAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWU+IGJ1aWxkT2JqZWN0Rm9yRnJh
bWUoRnJhbWUqKTsKQEAgLTE0Nyw2ICsxNDgsNyBAQCBwcml2YXRlOgogICAgIEluamVjdGVkU2Ny
aXB0TWFuYWdlciogbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CiAgICAgSW5zcGVjdG9yQ2xpZW50
KiBtX2NsaWVudDsKICAgICBJbnNwZWN0b3JGcm9udGVuZDo6UGFnZSogbV9mcm9udGVuZDsKKyAg
ICBJbnNwZWN0b3JPdmVybGF5KiBtX292ZXJsYXk7CiAgICAgbG9uZyBtX2xhc3RTY3JpcHRJZGVu
dGlmaWVyOwogICAgIFN0cmluZyBtX3BlbmRpbmdTY3JpcHRUb0V2YWx1YXRlT25Mb2FkT25jZTsK
ICAgICBTdHJpbmcgbV9zY3JpcHRUb0V2YWx1YXRlT25Mb2FkT25jZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGE1ODZlZGYzZmQ0MTA4
YzlkMDc5MmMwYmRmZWJlMWU4M2ZhZmY4NmEuLjRiNDU5MmEyMzM4ZDFiYzczNjU2MWU0ZDMwNmEy
NjE0NTUwMjgwNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVi
dWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dl
ckFnZW50LmNwcApAQCAtMzUsMTkgKzM1LDIxIEBACiAjaW5jbHVkZSAiUGFnZURlYnVnZ2VyQWdl
bnQuaCIKIAogI2luY2x1ZGUgIkNvbnNvbGUuaCIKKyNpbmNsdWRlICJET01Ob2RlSGlnaGxpZ2h0
ZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZVNjcmlwdERlYnVnU2VydmVy
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2Vu
dD4gUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGluc3Bl
Y3RlZFBhZ2UsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQor
UGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2VudD4gUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShJ
bnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JTdGF0ZSog
aW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIEluamVjdGVkU2NyaXB0TWFuYWdl
ciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQogewot
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGFnZURlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0Fn
ZW50cywgaW5zcGVjdG9yU3RhdGUsIGluc3BlY3RlZFBhZ2UsIGluamVjdGVkU2NyaXB0TWFuYWdl
cikpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGFnZURlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVu
dGluZ0FnZW50cywgaW5zcGVjdG9yU3RhdGUsIGluc3BlY3RlZFBhZ2UsIGluamVjdGVkU2NyaXB0
TWFuYWdlciwgb3ZlcmxheSkpOwogfQogCi1QYWdlRGVidWdnZXJBZ2VudDo6UGFnZURlYnVnZ2Vy
QWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9y
U3RhdGUqIGluc3BlY3RvclN0YXRlLCBQYWdlKiBpbnNwZWN0ZWRQYWdlLCBJbmplY3RlZFNjcmlw
dE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlcikKK1BhZ2VEZWJ1Z2dlckFnZW50OjpQYWdl
RGVidWdnZXJBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJ
bnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIEluamVj
dGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JPdmVybGF5
KiBvdmVybGF5KQogICAgIDogSW5zcGVjdG9yRGVidWdnZXJBZ2VudChpbnN0cnVtZW50aW5nQWdl
bnRzLCBpbnNwZWN0b3JTdGF0ZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQogICAgICwgbV9pbnNw
ZWN0ZWRQYWdlKGluc3BlY3RlZFBhZ2UpCisgICAgLCBtX292ZXJsYXkob3ZlcmxheSkKIHsKIH0K
IApAQCAtOTIsNiArOTQsMjMgQEAgSW5qZWN0ZWRTY3JpcHQgUGFnZURlYnVnZ2VyQWdlbnQ6Omlu
amVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcKICAgICByZXR1cm4g
aW5qZWN0ZWRTY3JpcHQ7CiB9CiAKK3ZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoKQor
eworICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoKTsKKyAgICBtX292ZXJsYXkt
PnNldFBhdXNlZEluRGVidWdnZXIoZmFsc2UpOworfQorCit2b2lkIFBhZ2VEZWJ1Z2dlckFnZW50
OjpkaWRQYXVzZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IFNjcmlwdFZhbHVlJiBj
YWxsRnJhbWVzLCBjb25zdCBTY3JpcHRWYWx1ZSYgZXhjZXB0aW9uKQoreworICAgIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKHNjcmlwdFN0YXRlLCBjYWxsRnJhbWVzLCBleGNlcHRp
b24pOworICAgIG1fb3ZlcmxheS0+c2V0UGF1c2VkSW5EZWJ1Z2dlcih0cnVlKTsKK30KKwordm9p
ZCBQYWdlRGVidWdnZXJBZ2VudDo6ZGlkQ29udGludWUoKQoreworICAgIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmRpZENvbnRpbnVlKCk7CisgICAgbV9vdmVybGF5LT5zZXRQYXVzZWRJbkRlYnVn
Z2VyKGZhbHNlKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oCmluZGV4IDlkYmQ1MTNmOWYxYTI4YmI5
ODQyNDkxMzU3ODE0ODZjNzNjMzI2MTguLmQ5MGZkZWI4MmFlYzhlMjE3MTliNTdjNDkzNWUxNTBm
YWRiNmRlZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdn
ZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2Vu
dC5oCkBAIC0zNyw2ICszNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSW5z
cGVjdG9yT3ZlcmxheTsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI7
CiAKQEAgLTQ0LDcgKzQ1LDcgQEAgY2xhc3MgUGFnZURlYnVnZ2VyQWdlbnQgOiBwdWJsaWMgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFnZURlYnVn
Z2VyQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0
YXRpYyBQYXNzT3duUHRyPFBhZ2VEZWJ1Z2dlckFnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0Fn
ZW50cyosIEluc3BlY3RvclN0YXRlKiwgUGFnZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciopOwor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPFBhZ2VEZWJ1Z2dlckFnZW50PiBjcmVhdGUoSW5zdHJ1bWVu
dGluZ0FnZW50cyosIEluc3BlY3RvclN0YXRlKiwgUGFnZSosIEluamVjdGVkU2NyaXB0TWFuYWdl
ciosIEluc3BlY3Rvck92ZXJsYXkqKTsKICAgICB2aXJ0dWFsIH5QYWdlRGVidWdnZXJBZ2VudCgp
OwogCiBwcml2YXRlOgpAQCAtNTYsOCArNTcsMTMgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwg
SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nKiwgY29uc3Qg
aW50KiBleGVjdXRpb25Db250ZXh0SWQpOwogCi0gICAgUGFnZURlYnVnZ2VyQWdlbnQoSW5zdHJ1
bWVudGluZ0FnZW50cyosIEluc3BlY3RvclN0YXRlKiwgUGFnZSosIEluamVjdGVkU2NyaXB0TWFu
YWdlciopOworICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKCk7CisgICAgdmlydHVhbCB2b2lkIGRp
ZFBhdXNlKFNjcmlwdFN0YXRlKiwgY29uc3QgU2NyaXB0VmFsdWUmIGNhbGxGcmFtZXMsIGNvbnN0
IFNjcmlwdFZhbHVlJiBleGNlcHRpb24pOworICAgIHZpcnR1YWwgdm9pZCBkaWRDb250aW51ZSgp
OworCisgICAgUGFnZURlYnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3Rv
clN0YXRlKiwgUGFnZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3Rvck92ZXJsYXkq
KTsKICAgICBQYWdlKiBjb25zdCBtX2luc3BlY3RlZFBhZ2U7CisgICAgSW5zcGVjdG9yT3Zlcmxh
eSogbV9vdmVybGF5OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153003</attachid>
            <date>2012-07-18 06:31:22 -0700</date>
            <delta_ts>2012-07-18 09:26:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90880-20120718173120.patch</filename>
            <type>text/plain</type>
            <size>39030</size>
            <attacher name="Sergey Rogulenko">rogulenko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyOTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTk5MjJiMTZlNTcxMzQ5
NGM2M2FjYmU3ODkxZmEwY2U2NDRmM2IyNi4uOGY4NmE1MGU0YTQwYzUyZDUzMzVjYTFlNTdkY2Y3
ZWU4ZjdmY2ZjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1IEBACisyMDEyLTA3LTE4ICBTZXJn
ZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogYWRkaW5nIHBhdXNlIGljb24gZm9yIEphdmFTY3JpcHQgZGVidWdnaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg4MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yZWQgRE9NTm9k
ZUhpZ2hsaWdodGVyIGludG8gSW5zcGVjdG9yT3ZlcmxheSBjbGFzcyBhbmQgYWRkZWQgYSBmZWF0
dXJlIHRvIHNob3cgYSAicGF1c2UiIHNjcmVlbiB3aGVuCisgICAgICAgIHRoZSBKYXZhc2NyaXB0
IGRlYnVnZ2VyIGlzIHBhdXNlZC4KKworICAgICAgICAqIGluc3BlY3Rvci9ET01Ob2RlSGlnaGxp
Z2h0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6SW5zcGVjdG9y
T3ZlcmxheSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpwYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3T3V0bGluZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpnZXRIaWdobGlnaHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6c2V0UGF1c2VkSW5EZWJ1Z2dlcik6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpoaWRlSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6aGlnaGxpZ2h0Tm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpzZXRIaWdobGlnaHREYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmNsZWFySGlnaGxpZ2h0RGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpoaWdobGlnaHRlZE5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6dXBkYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdIaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yT3ZlcmxheTo6ZHJhd1BhdXNlZEluRGVidWdnZXIpOgorICAgICAgICAqIGlu
c3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoSW5zcGVjdG9yT3ZlcmxheSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5
OjpjcmVhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZHJhd0hpZ2hsaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRIaWdobGlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aGlnaGxpZ2h0ZWROb2Rl
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChJbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6Okluc3BlY3RvckRPTUFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRPTUFnZW50Ojp+SW5zcGVjdG9yRE9NQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRE9NQWdlbnQ6OmhhbmRsZU1vdXNlUHJlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRE9NQWdlbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRPTUFnZW50OjpzZXRTZWFyY2hpbmdGb3JOb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckRPTUFnZW50OjpzZXRIaWdobGlnaHREYXRhRnJvbUNvbmZpZyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHROb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRGcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6aGlkZUhpZ2hsaWdodCk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpjcmVhdGUpOgorICAgICAgICAoSW5zcGVj
dG9yRE9NQWdlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
Lmg6CisgICAgICAgIChJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBh
Z2VBZ2VudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6
SW5zcGVjdG9yUGFnZUFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2Vu
dDo6ZGlkUGFpbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGluc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2Vu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlRGVidWdnZXJBZ2VudDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50OjpQYWdlRGVidWdnZXJBZ2VudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlRGVidWdnZXJBZ2VudDo6ZGlzYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZSk6
CisgICAgICAgIChXZWJDb3JlOjpQYWdlRGVidWdnZXJBZ2VudDo6ZGlkQ29udGludWUpOgorICAg
ICAgICAqIGluc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChQYWdlRGVidWdnZXJBZ2VudCk6CisKIDIwMTItMDctMTggIFNpbW9uIEhhdXNt
YW5uICA8c2ltb24uaGF1c21hbm5Abm9raWEuY29tPgogCiAgICAgICAgIFtBTkdMRV0gT24gUVQs
IHVzZSBCaXNvbiBhbmQgRmxleCBkdXJpbmcgQU5HTEUgYnVpbGQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAKaW5kZXggZTRjNzEwMGQ2MWM1MjA4
M2YzODI3MWYyYTcyNzU0NzU0NjhlZGIyYy4uYjAyMmRhYWE3NWM0YjdkZWM5ZjkzYTg1ODQ4YTgz
YTYzYTE5Mjk0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVI
aWdobGlnaHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdo
bGlnaHRlci5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCisj
aW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKICNpbmNsdWRlICJSYW5nZS5oIgpAQCAtNDYyLDkgKzQ2Myw5IEBAIHN0YXRpYyB2
b2lkIGdldE9yRHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBIaWdo
bGlnaHREYXRhKiBoaWdoCiAgICAgICAgIGRyYXdFbGVtZW50VGl0bGUoKmNvbnRleHQsIG5vZGUs
IHJlbmRlcmVyLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGJvdW5kaW5nQm94KSwgcGl4ZWxTbmFwcGVk
SW50UmVjdCh0aXRsZUFuY2hvckJveCksIHZpc2libGVSZWN0LCBjb250YWluaW5nRnJhbWUtPnNl
dHRpbmdzKCkpOwogfQogCi1zdGF0aWMgdm9pZCBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgRG9jdW1lbnQqIGRvY3VtZW50LCBIaWdobGlnaHREYXRhKiBo
aWdobGlnaHREYXRhLCBIaWdobGlnaHQgKmhpZ2hsaWdodCkKK3N0YXRpYyB2b2lkIGdldE9yRHJh
d1JlY3RIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBQYWdlKiBwYWdlLCBIaWdo
bGlnaHREYXRhKiBoaWdobGlnaHREYXRhLCBIaWdobGlnaHQgKmhpZ2hsaWdodCkKIHsKLSAgICBp
ZiAoIWRvY3VtZW50KQorICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRmxv
YXRSZWN0IGhpZ2hsaWdodFJlY3QoKihoaWdobGlnaHREYXRhLT5yZWN0KSk7CkBAIC00NzMsNyAr
NDc0LDcgQEAgc3RhdGljIHZvaWQgZ2V0T3JEcmF3UmVjdEhpZ2hsaWdodChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIERvY3VtZW50KiBkb2N1bWVudCwKICAgICBoaWdobGlnaHQtPnF1YWRzLmFw
cGVuZChoaWdobGlnaHRSZWN0KTsKIAogICAgIGlmIChjb250ZXh0KSB7Ci0gICAgICAgIEZyYW1l
VmlldyogdmlldyA9IGRvY3VtZW50LT5mcmFtZSgpLT52aWV3KCk7CisgICAgICAgIEZyYW1lVmll
dyogdmlldyA9IHBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCk7CiAgICAgICAgIGlmICghdmlldy0+
ZGVsZWdhdGVzU2Nyb2xsaW5nKCkpIHsKICAgICAgICAgICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVj
dCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOwogICAgICAgICAgICAgY29udGV4dC0+dHJh
bnNsYXRlKC12aXNpYmxlUmVjdC54KCksIC12aXNpYmxlUmVjdC55KCkpOwpAQCAtNDg1LDQ0ICs0
ODYsMTM3IEBAIHN0YXRpYyB2b2lkIGdldE9yRHJhd1JlY3RIaWdobGlnaHQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBEb2N1bWVudCogZG9jdW1lbnQsCiAKIH0gLy8gYW5vbnltb3VzIG5hbWVz
cGFjZQogCi1uYW1lc3BhY2UgRE9NTm9kZUhpZ2hsaWdodGVyIHsKK0luc3BlY3Rvck92ZXJsYXk6
Okluc3BlY3Rvck92ZXJsYXkoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCisg
ICAgOiBtX3BhZ2UocGFnZSkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fcGF1c2Vk
SW5EZWJ1Z2dlcihmYWxzZSkKK3sKK30KIAotdm9pZCBkcmF3SGlnaGxpZ2h0KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgRG9jdW1lbnQqIGRvY3VtZW50LCBIaWdobGlnaHREYXRhKiBoaWdobGln
aHREYXRhKQordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpwYWludChHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCiB7Ci0gICAgaWYgKCFoaWdobGlnaHREYXRhKQotICAgICAgICByZXR1cm47CisgICAg
ZHJhd1BhdXNlZEluRGVidWdnZXIoY29udGV4dCk7CisgICAgZHJhd0hpZ2hsaWdodChjb250ZXh0
KTsKK30KIAotICAgIEhpZ2hsaWdodCBoaWdobGlnaHQ7Ci0gICAgaWYgKGhpZ2hsaWdodERhdGEt
Pm5vZGUpCi0gICAgICAgIGdldE9yRHJhd05vZGVIaWdobGlnaHQoJmNvbnRleHQsIGhpZ2hsaWdo
dERhdGEsICZoaWdobGlnaHQpOwotICAgIGVsc2UgaWYgKGhpZ2hsaWdodERhdGEtPnJlY3QpCi0g
ICAgICAgIGdldE9yRHJhd1JlY3RIaWdobGlnaHQoJmNvbnRleHQsIGRvY3VtZW50LCBoaWdobGln
aHREYXRhLCAmaGlnaGxpZ2h0KTsKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd091dGxpbmUo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IpCit7CisgICAgRmxvYXRSZWN0IG91dGxpbmVSZWN0ID0gcmVjdDsKKyAgICBk
cmF3T3V0bGluZWRRdWFkKGNvbnRleHQsIG91dGxpbmVSZWN0LCBDb2xvcigpLCBjb2xvcik7CiB9
CiAKLXZvaWQgZ2V0SGlnaGxpZ2h0KERvY3VtZW50KiBkb2N1bWVudCwgSGlnaGxpZ2h0RGF0YSog
aGlnaGxpZ2h0RGF0YSwgSGlnaGxpZ2h0KiBoaWdobGlnaHQpCit2b2lkIEluc3BlY3Rvck92ZXJs
YXk6OmdldEhpZ2hsaWdodChIaWdobGlnaHQqIGhpZ2hsaWdodCkgY29uc3QKIHsKLSAgICBpZiAo
IWhpZ2hsaWdodERhdGEpCisgICAgaWYgKCFtX2hpZ2hsaWdodERhdGEpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGhpZ2hsaWdodC0+Y29udGVudENvbG9yID0gaGlnaGxpZ2h0RGF0YS0+Y29udGVu
dDsKLSAgICBoaWdobGlnaHQtPnBhZGRpbmdDb2xvciA9IGhpZ2hsaWdodERhdGEtPnBhZGRpbmc7
Ci0gICAgaGlnaGxpZ2h0LT5ib3JkZXJDb2xvciA9IGhpZ2hsaWdodERhdGEtPmJvcmRlcjsKLSAg
ICBoaWdobGlnaHQtPm1hcmdpbkNvbG9yID0gaGlnaGxpZ2h0RGF0YS0+bWFyZ2luOworICAgIGhp
Z2hsaWdodC0+Y29udGVudENvbG9yID0gbV9oaWdobGlnaHREYXRhLT5jb250ZW50OworICAgIGhp
Z2hsaWdodC0+cGFkZGluZ0NvbG9yID0gbV9oaWdobGlnaHREYXRhLT5wYWRkaW5nOworICAgIGhp
Z2hsaWdodC0+Ym9yZGVyQ29sb3IgPSBtX2hpZ2hsaWdodERhdGEtPmJvcmRlcjsKKyAgICBoaWdo
bGlnaHQtPm1hcmdpbkNvbG9yID0gbV9oaWdobGlnaHREYXRhLT5tYXJnaW47CiAgICAgaGlnaGxp
Z2h0LT50eXBlID0gSGlnaGxpZ2h0VHlwZVJlY3RzOwogCi0gICAgaWYgKGhpZ2hsaWdodERhdGEt
Pm5vZGUpCi0gICAgICAgIGdldE9yRHJhd05vZGVIaWdobGlnaHQoMCwgaGlnaGxpZ2h0RGF0YSwg
aGlnaGxpZ2h0KTsKLSAgICBlbHNlIGlmIChoaWdobGlnaHREYXRhLT5yZWN0KQotICAgICAgICBn
ZXRPckRyYXdSZWN0SGlnaGxpZ2h0KDAsIGRvY3VtZW50LCBoaWdobGlnaHREYXRhLCBoaWdobGln
aHQpOworICAgIGlmIChtX2hpZ2hsaWdodERhdGEtPm5vZGUpCisgICAgICAgIGdldE9yRHJhd05v
ZGVIaWdobGlnaHQoMCwgbV9oaWdobGlnaHREYXRhLmdldCgpLCBoaWdobGlnaHQpOworICAgIGVs
c2UgaWYgKG1faGlnaGxpZ2h0RGF0YS0+cmVjdCkKKyAgICAgICAgZ2V0T3JEcmF3UmVjdEhpZ2hs
aWdodCgwLCBtX3BhZ2UsIG1faGlnaGxpZ2h0RGF0YS5nZXQoKSwgaGlnaGxpZ2h0KTsKIH0KIAot
dm9pZCBkcmF3T3V0bGluZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6c2V0
UGF1c2VkSW5EZWJ1Z2dlcihib29sIGZsYWcpCiB7Ci0gICAgRmxvYXRSZWN0IG91dGxpbmVSZWN0
ID0gcmVjdDsKLSAgICBkcmF3T3V0bGluZWRRdWFkKGNvbnRleHQsIG91dGxpbmVSZWN0LCBDb2xv
cigpLCBjb2xvcik7CisgICAgbV9wYXVzZWRJbkRlYnVnZ2VyID0gZmxhZzsKKyAgICB1cGRhdGUo
KTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgRE9NTm9kZUhpZ2hsaWdodGVyCit2b2lkIEluc3BlY3Rv
ck92ZXJsYXk6OmhpZGVIaWdobGlnaHQoKQoreworICAgIGlmIChtX2hpZ2hsaWdodERhdGEpIHsK
KyAgICAgICAgLy8gRklYTUU6IENsZWFyIGVudGlyZSBoaWdobGlnaHQgZGF0YSBoZXJlLCBzdG9y
ZSBjb25maWcgdXBvbiBzZXRJbnNwZWN0TW9kZUVuYWJsZWQKKyAgICAgICAgbV9oaWdobGlnaHRE
YXRhLT5yZWN0LmNsZWFyKCk7CisgICAgICAgIG1faGlnaGxpZ2h0RGF0YS0+bm9kZS5jbGVhcigp
OworICAgIH0KKyAgICB1cGRhdGUoKTsKK30KKwordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpoaWdo
bGlnaHROb2RlKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKG1faGlnaGxpZ2h0RGF0YSkKKyAgICAg
ICAgbV9oaWdobGlnaHREYXRhLT5ub2RlID0gbm9kZTsKKyAgICB1cGRhdGUoKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JPdmVybGF5OjpzZXRIaWdobGlnaHREYXRhKFBhc3NPd25QdHI8SGlnaGxpZ2h0
RGF0YT4gaGlnaGxpZ2h0RGF0YSkKK3sKKyAgICBtX2hpZ2hsaWdodERhdGEgPSBoaWdobGlnaHRE
YXRhOworICAgIHVwZGF0ZSgpOworfQorCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmNsZWFySGln
aGxpZ2h0RGF0YSgpCit7CisgICAgbV9oaWdobGlnaHREYXRhLmNsZWFyKCk7CisgICAgdXBkYXRl
KCk7Cit9CisKK05vZGUqIEluc3BlY3Rvck92ZXJsYXk6OmhpZ2hsaWdodGVkTm9kZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1faGlnaGxpZ2h0RGF0YSA/IG1faGlnaGxpZ2h0RGF0YS0+bm9kZS5n
ZXQoKSA6IDA7Cit9CisKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6dXBkYXRlKCkKK3sKKyAgICBp
ZiAobV9oaWdobGlnaHREYXRhIHx8IG1fcGF1c2VkSW5EZWJ1Z2dlcikKKyAgICAgICAgbV9jbGll
bnQtPmhpZ2hsaWdodCgpOworICAgIGVsc2UKKyAgICAgICAgbV9jbGllbnQtPmhpZGVIaWdobGln
aHQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3SGlnaGxpZ2h0KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKK3sKKyAgICBpZiAoIW1faGlnaGxpZ2h0RGF0YSB8fCAoIW1faGln
aGxpZ2h0RGF0YS0+cmVjdCAmJiAhbV9oaWdobGlnaHREYXRhLT5ub2RlKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgSGlnaGxpZ2h0IGhpZ2hsaWdodDsKKyAgICBpZiAobV9oaWdobGlnaHREYXRh
LT5ub2RlKQorICAgICAgICBnZXRPckRyYXdOb2RlSGlnaGxpZ2h0KCZjb250ZXh0LCBtX2hpZ2hs
aWdodERhdGEuZ2V0KCksICZoaWdobGlnaHQpOworICAgIGVsc2UgaWYgKG1faGlnaGxpZ2h0RGF0
YS0+cmVjdCkKKyAgICAgICAgZ2V0T3JEcmF3UmVjdEhpZ2hsaWdodCgmY29udGV4dCwgbV9wYWdl
LCBtX2hpZ2hsaWdodERhdGEuZ2V0KCksICZoaWdobGlnaHQpOworfQorCit2b2lkIEluc3BlY3Rv
ck92ZXJsYXk6OmRyYXdQYXVzZWRJbkRlYnVnZ2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkK
K3sKKyAgICBpZiAoIW1fcGF1c2VkSW5EZWJ1Z2dlcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgYmFja2dyb3VuZENvbG9yLCAoMCwgMCwgMCwgMzEp
KTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCB0ZXh0QmFja2dyb3VuZENvbG9yLCAo
MjU1LCAyNTUsIDE5NCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIGJvcmRlckNv
bG9yLCAoMTI4LCAxMjgsIDEyOCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoaW50LCBmb250
SGVpZ2h0LCAoMjQpKTsKKworICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCk7
CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZnJhbWUtPnNldHRpbmdzKCk7CisgICAgSW50UmVj
dCB2aXNpYmxlUmVjdCA9IGZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpOworCisg
ICAgY29udGV4dC5zZXRGaWxsQ29sb3IoYmFja2dyb3VuZENvbG9yLCBDb2xvclNwYWNlRGV2aWNl
UkdCKTsKKyAgICBjb250ZXh0LmRyYXdSZWN0KHZpc2libGVSZWN0KTsKKworICAgIEZvbnREZXNj
cmlwdGlvbiBkZXNjOworICAgIHNldFVwRm9udERlc2NyaXB0aW9uKGRlc2MsIHNldHRpbmdzKTsK
KyAgICBkZXNjLnNldENvbXB1dGVkU2l6ZShmb250SGVpZ2h0KTsKKyAgICBGb250IGZvbnQgPSBG
b250KGRlc2MsIDAsIDApOworICAgIGZvbnQudXBkYXRlKDApOworCisgICAgU3RyaW5nIHRleHQg
PSAiUGF1c2VkIGluIGRlYnVnZ2VyLiI7CisgICAgVGV4dFJ1biB0ZXh0UnVuKHRleHQpOworICAg
IEludFJlY3QgdGl0bGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmb250LnNlbGVjdGlvblJlY3RG
b3JUZXh0KHRleHRSdW4sIEludFBvaW50KCksIGZvbnRIZWlnaHQpKTsKKyAgICB0aXRsZVJlY3Qu
aW5mbGF0ZShyZWN0SW5mbGF0ZVB4KTsKKyAgICB0aXRsZVJlY3Quc2V0TG9jYXRpb24oSW50UG9p
bnQodmlzaWJsZVJlY3Qud2lkdGgoKSAvIDIgLSB0aXRsZVJlY3Qud2lkdGgoKSAvIDIsIDApKTsK
KworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRleHRCYWNrZ3JvdW5kQ29sb3IsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoYm9yZGVyQ29sb3IsIENv
bG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJhd1JlY3QodGl0bGVSZWN0KTsKKyAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0Ip
OworICAgIGNvbnRleHQuZHJhd1RleHQoZm9udCwgdGV4dFJ1biwgSW50UG9pbnQodGl0bGVSZWN0
LngoKSArIHJlY3RJbmZsYXRlUHgsIHRpdGxlUmVjdC55KCkgKyBmb250SGVpZ2h0KSk7Cit9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RP
TU5vZGVIaWdobGlnaHRlci5oCmluZGV4IGY3YjZmMDBmNGZmZTAyNTkxMzU1MjU0ZGZlMTkzZDAz
MDYyY2UzZDkuLmZlYTYxNjVlMWEyNTNhZjMyOTU4ZjY1NWM1MGVhYzM1MzY3ODljZjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmgKQEAgLTMyLDE4
ICszMiwyMSBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAj
aW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNsdWRlICJOb2RlLmgiCiAKICNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIENvbG9yOwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBGcmFtZVZpZXc7CiBjbGFz
cyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBJbnNwZWN0b3JDbGllbnQ7CitjbGFzcyBJbnRSZWN0
OwogY2xhc3MgTm9kZTsKK2NsYXNzIFBhZ2U7CiAKIHN0cnVjdCBIaWdobGlnaHREYXRhIHsKICAg
ICBDb2xvciBjb250ZW50OwpAQCAtNzUsMTMgKzc4LDM4IEBAIHN0cnVjdCBIaWdobGlnaHQgewog
ICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwogfTsKIAotbmFtZXNwYWNlIERPTU5vZGVIaWdo
bGlnaHRlciB7CitjbGFzcyBJbnNwZWN0b3JPdmVybGF5IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxJbnNwZWN0b3JPdmVybGF5PiBjcmVhdGUoUGFnZSogcGFnZSwgSW5zcGVjdG9y
Q2xpZW50KiBjbGllbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEluc3Bl
Y3Rvck92ZXJsYXkocGFnZSwgY2xpZW50KSk7CisgICAgfQogCi12b2lkIGRyYXdIaWdobGlnaHQo
R3JhcGhpY3NDb250ZXh0JiwgRG9jdW1lbnQqLCBIaWdobGlnaHREYXRhKik7Ci12b2lkIGdldEhp
Z2hsaWdodChEb2N1bWVudCosIEhpZ2hsaWdodERhdGEqLCBIaWdobGlnaHQqKTsKLXZvaWQgZHJh
d091dGxpbmUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IENvbG9y
Jik7CisgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmKTsKKyAgICB2b2lkIGRyYXdPdXRs
aW5lKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3QmLCBjb25zdCBDb2xvciYpOwor
ICAgIHZvaWQgZ2V0SGlnaGxpZ2h0KEhpZ2hsaWdodCopIGNvbnN0OwogCi19IC8vIG5hbWVzcGFj
ZSBET01Ob2RlSGlnaGxpZ2h0ZXIKKyAgICB2b2lkIHNldFBhdXNlZEluRGVidWdnZXIoYm9vbCk7
CisKKyAgICB2b2lkIGhpZGVIaWdobGlnaHQoKTsKKyAgICB2b2lkIGhpZ2hsaWdodE5vZGUoTm9k
ZSopOworICAgIHZvaWQgc2V0SGlnaGxpZ2h0RGF0YShQYXNzT3duUHRyPEhpZ2hsaWdodERhdGE+
KTsKKyAgICB2b2lkIGNsZWFySGlnaGxpZ2h0RGF0YSgpOworCisgICAgTm9kZSogaGlnaGxpZ2h0
ZWROb2RlKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yT3ZlcmxheShQYWdlKiwg
SW5zcGVjdG9yQ2xpZW50Kik7CisKKyAgICB2b2lkIHVwZGF0ZSgpOworICAgIHZvaWQgZHJhd0hp
Z2hsaWdodChHcmFwaGljc0NvbnRleHQmKTsKKyAgICB2b2lkIGRyYXdQYXVzZWRJbkRlYnVnZ2Vy
KEdyYXBoaWNzQ29udGV4dCYpOworCisgICAgUGFnZSogbV9wYWdlOworICAgIEluc3BlY3RvckNs
aWVudCogbV9jbGllbnQ7CisgICAgYm9vbCBtX3BhdXNlZEluRGVidWdnZXI7CisgICAgT3duUHRy
PEhpZ2hsaWdodERhdGE+IG1faGlnaGxpZ2h0RGF0YTsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuY3BwCmluZGV4IDkxMmJiYWFkNjJmM2RiYTQ1NmZmM2RjMGE3Y2M1N2YxODcxMjUyNzMuLmMz
ZjlmMDhiMzM5ZGJhYzFiNjcyMDkwNzk0YTc1NDliMDAzODI4OGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTM0LDYgKzM0LDcg
QEAKIAogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKIAorI2luY2x1ZGUgIkRPTU5v
ZGVIaWdobGlnaHRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllcnNGYWN0b3J5LmgiCkBAIC03OCw2ICs3OSw3
IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwg
SW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDCiAgICAgOiBtX2luc3RydW1lbnRpbmdBZ2VudHMo
YWRvcHRQdHIobmV3IEluc3RydW1lbnRpbmdBZ2VudHMoKSkpCiAgICAgLCBtX2luamVjdGVkU2Ny
aXB0TWFuYWdlcihJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNyZWF0ZUZvclBhZ2UoKSkKICAgICAs
IG1fc3RhdGUoYWRvcHRQdHIobmV3IEluc3BlY3RvclN0YXRlKGluc3BlY3RvckNsaWVudCkpKQor
ICAgICwgbV9vdmVybGF5KEluc3BlY3Rvck92ZXJsYXk6OmNyZWF0ZShwYWdlLCBpbnNwZWN0b3JD
bGllbnQpKQogICAgICwgbV9wYWdlKHBhZ2UpCiAgICAgLCBtX2luc3BlY3RvckNsaWVudChpbnNw
ZWN0b3JDbGllbnQpCiB7CkBAIC04NSwxMiArODcsMTIgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6
SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGluc3BlY3Rv
ckMKICAgICBtX2luc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRQdHIuZ2V0KCk7CiAgICAg
bV9hZ2VudHMuYXBwZW5kKGluc3BlY3RvckFnZW50UHRyLnJlbGVhc2UoKSk7CiAKLSAgICBPd25Q
dHI8SW5zcGVjdG9yUGFnZUFnZW50PiBwYWdlQWdlbnRQdHIoSW5zcGVjdG9yUGFnZUFnZW50Ojpj
cmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBwYWdlLCBtX2luc3BlY3RvckFnZW50
LCBtX3N0YXRlLmdldCgpLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5nZXQoKSwgaW5zcGVjdG9y
Q2xpZW50KSk7CisgICAgT3duUHRyPEluc3BlY3RvclBhZ2VBZ2VudD4gcGFnZUFnZW50UHRyKElu
c3BlY3RvclBhZ2VBZ2VudDo6Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgcGFn
ZSwgbV9pbnNwZWN0b3JBZ2VudCwgbV9zdGF0ZS5nZXQoKSwgbV9pbmplY3RlZFNjcmlwdE1hbmFn
ZXIuZ2V0KCksIGluc3BlY3RvckNsaWVudCwgbV9vdmVybGF5LmdldCgpKSk7CiAgICAgSW5zcGVj
dG9yUGFnZUFnZW50KiBwYWdlQWdlbnQgPSBwYWdlQWdlbnRQdHIuZ2V0KCk7CiAgICAgbV9wYWdl
QWdlbnQgPSBwYWdlQWdlbnRQdHIuZ2V0KCk7CiAgICAgbV9hZ2VudHMuYXBwZW5kKHBhZ2VBZ2Vu
dFB0ci5yZWxlYXNlKCkpOwogCi0gICAgT3duUHRyPEluc3BlY3RvckRPTUFnZW50PiBkb21BZ2Vu
dFB0cihJbnNwZWN0b3JET01BZ2VudDo6Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQo
KSwgcGFnZUFnZW50LCBpbnNwZWN0b3JDbGllbnQsIG1fc3RhdGUuZ2V0KCksIG1faW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLmdldCgpKSk7CisgICAgT3duUHRyPEluc3BlY3RvckRPTUFnZW50PiBkb21B
Z2VudFB0cihJbnNwZWN0b3JET01BZ2VudDo6Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0FnZW50cy5n
ZXQoKSwgcGFnZUFnZW50LCBtX3N0YXRlLmdldCgpLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5n
ZXQoKSwgbV9vdmVybGF5LmdldCgpKSk7CiAgICAgbV9kb21BZ2VudCA9IGRvbUFnZW50UHRyLmdl
dCgpOwogICAgIG1fYWdlbnRzLmFwcGVuZChkb21BZ2VudFB0ci5yZWxlYXNlKCkpOwogCkBAIC0x
MzAsNyArMTMyLDcgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQ
YWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckMKICAgICBtX2FnZW50cy5hcHBl
bmQoY29uc29sZUFnZW50UHRyLnJlbGVhc2UoKSk7CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKLSAgICBPd25QdHI8SW5zcGVjdG9yRGVidWdnZXJBZ2VudD4gZGVidWdnZXJBZ2Vu
dFB0cihQYWdlRGVidWdnZXJBZ2VudDo6Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQo
KSwgbV9zdGF0ZS5nZXQoKSwgcGFnZSwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuZ2V0KCkpKTsK
KyAgICBPd25QdHI8SW5zcGVjdG9yRGVidWdnZXJBZ2VudD4gZGVidWdnZXJBZ2VudFB0cihQYWdl
RGVidWdnZXJBZ2VudDo6Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgbV9zdGF0
ZS5nZXQoKSwgcGFnZSwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuZ2V0KCksIG1fb3ZlcmxheS5n
ZXQoKSkpOwogICAgIG1fZGVidWdnZXJBZ2VudCA9IGRlYnVnZ2VyQWdlbnRQdHIuZ2V0KCk7CiAg
ICAgbV9hZ2VudHMuYXBwZW5kKGRlYnVnZ2VyQWdlbnRQdHIucmVsZWFzZSgpKTsKIApAQCAtMjk3
LDEyICsyOTksMTIgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpldmFsdWF0ZUZvclRlc3RJ
bkZyb250ZW5kKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHMKIAogdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpkcmF3SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
IHsKLSAgICBtX2RvbUFnZW50LT5kcmF3SGlnaGxpZ2h0KGNvbnRleHQpOworICAgIG1fb3Zlcmxh
eS0+cGFpbnQoY29udGV4dCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0SGln
aGxpZ2h0KEhpZ2hsaWdodCogaGlnaGxpZ2h0KSBjb25zdAogewotICAgIG1fZG9tQWdlbnQtPmdl
dEhpZ2hsaWdodChoaWdobGlnaHQpOworICAgIG1fb3ZlcmxheS0+Z2V0SGlnaGxpZ2h0KGhpZ2hs
aWdodCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdChOb2RlKiBub2Rl
KQpAQCAtMzQ0LDcgKzM0Niw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aGlkZUhpZ2hs
aWdodCgpCiAKIE5vZGUqIEluc3BlY3RvckNvbnRyb2xsZXI6OmhpZ2hsaWdodGVkTm9kZSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1fZG9tQWdlbnQtPmhpZ2hsaWdodGVkTm9kZSgpOworICAgIHJl
dHVybiBtX292ZXJsYXktPmhpZ2hsaWdodGVkTm9kZSgpOwogfQogCiAjaWYgRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuaAppbmRleCBiN2UxY2JmZDg0MTcxMzQ0NWE3NjhlYzQ2YmQ5OTFlZmM3NGY3ZTk2
Li45MDk5NmU1ZTk0YTM4OTU4ZTg4MWVlYjEwYjk5Nzk5MmQ3NDg2NmY0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTUyLDYgKzUyLDcg
QEAgY2xhc3MgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5k
OwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogY2xhc3MgSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ7CitjbGFzcyBJbnNwZWN0b3JPdmVybGF5OwogY2xhc3MgSW5zcGVjdG9yUGFnZUFn
ZW50OwogY2xhc3MgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDsKIGNsYXNzIEluc3BlY3RvclJlc291
cmNlQWdlbnQ7CkBAIC0xMjAsNiArMTIxLDcgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8SW5zdHJ1
bWVudGluZ0FnZW50cz4gbV9pbnN0cnVtZW50aW5nQWdlbnRzOwogICAgIE93blB0cjxJbmplY3Rl
ZFNjcmlwdE1hbmFnZXI+IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogICAgIE93blB0cjxJbnNw
ZWN0b3JTdGF0ZT4gbV9zdGF0ZTsKKyAgICBPd25QdHI8SW5zcGVjdG9yT3ZlcmxheT4gbV9vdmVy
bGF5OwogCiAgICAgSW5zcGVjdG9yQWdlbnQqIG1faW5zcGVjdG9yQWdlbnQ7CiAgICAgSW5zcGVj
dG9yRE9NQWdlbnQqIG1fZG9tQWdlbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTUFnZW50LmNwcAppbmRleCA5MDc5NTg5ZTUxY2U4ZjA4ZTUwZTIwNmU0OWExMzI2
YmU5NWMzMDEyLi5hNWEyNmJjMTcyMzhmYzlmM2E5Y2E2YjE0N2I5OTVjMjdjNjMxNzIxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTY2
LDcgKzY2LDYgQEAKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSWRlbnRp
ZmllcnNGYWN0b3J5LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmgiCi0jaW5j
bHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JIaXN0b3J5LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUGFnZUFn
ZW50LmgiCkBAIC0xOTQsMTEgKzE5MywxMSBAQCBTdHJpbmcgSW5zcGVjdG9yRE9NQWdlbnQ6OnRv
RXJyb3JTdHJpbmcoY29uc3QgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgcmV0dXJuICIiOwogfQog
Ci1JbnNwZWN0b3JET01BZ2VudDo6SW5zcGVjdG9yRE9NQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50
cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIElu
c3BlY3RvckNsaWVudCogY2xpZW50LCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIElu
amVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQorSW5zcGVjdG9yRE9N
QWdlbnQ6Okluc3BlY3RvckRPTUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRp
bmdBZ2VudHMsIEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBJbnNwZWN0b3JTdGF0ZSog
aW5zcGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyLCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQogICAgIDogSW5zcGVjdG9yQmFzZUFnZW50
PEluc3BlY3RvckRPTUFnZW50PigiRE9NIiwgaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zcGVjdG9y
U3RhdGUpCiAgICAgLCBtX3BhZ2VBZ2VudChwYWdlQWdlbnQpCi0gICAgLCBtX2NsaWVudChjbGll
bnQpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlcihpbmplY3RlZFNjcmlwdE1hbmFnZXIp
CisgICAgLCBtX292ZXJsYXkob3ZlcmxheSkKICAgICAsIG1fZnJvbnRlbmQoMCkKICAgICAsIG1f
ZG9tTGlzdGVuZXIoMCkKICAgICAsIG1fbGFzdE5vZGVJZCgxKQpAQCAtMjEwLDcgKzIwOSw2IEBA
IEluc3BlY3RvckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2VudChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJCiBJbnNwZWN0b3JET01BZ2VudDo6fkluc3BlY3RvckRP
TUFnZW50KCkKIHsKICAgICByZXNldCgpOwotICAgIEFTU0VSVCghbV9oaWdobGlnaHREYXRhIHx8
ICghbV9oaWdobGlnaHREYXRhLT5ub2RlICYmICFtX2hpZ2hsaWdodERhdGEtPnJlY3QpKTsKICAg
ICBBU1NFUlQoIW1fc2VhcmNoaW5nRm9yTm9kZSk7CiB9CiAKQEAgLTI3MCwxMSArMjY4LDYgQEAg
VmVjdG9yPERvY3VtZW50Kj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmRvY3VtZW50cygpCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodGVkTm9k
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faGlnaGxpZ2h0RGF0YSA/IG1faGlnaGxpZ2h0RGF0
YS0+bm9kZS5nZXQoKSA6IDA7Ci19Ci0KIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlc2V0KCkK
IHsKICAgICBpZiAobV9oaXN0b3J5KQpAQCAtOTM4LDExICs5MzEsMTEgQEAgYm9vbCBJbnNwZWN0
b3JET01BZ2VudDo6aGFuZGxlTW91c2VQcmVzcygpCiAgICAgaWYgKCFtX3NlYXJjaGluZ0Zvck5v
ZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX2hpZ2hsaWdodERhdGEgJiYg
bV9oaWdobGlnaHREYXRhLT5ub2RlKSB7Ci0gICAgICAgIFJlZlB0cjxOb2RlPiBub2RlID0gbV9o
aWdobGlnaHREYXRhLT5ub2RlOwotICAgICAgICBpbnNwZWN0KG5vZGUuZ2V0KCkpOworICAgIGlm
IChOb2RlKiBub2RlID0gbV9vdmVybGF5LT5oaWdobGlnaHRlZE5vZGUoKSkgeworICAgICAgICBp
bnNwZWN0KG5vZGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjppbnNw
ZWN0KE5vZGUqIG5vZGUpCkBAIC05ODIsMTYgKzk3NSwxNCBAQCB2b2lkIEluc3BlY3RvckRPTUFn
ZW50Ojpmb2N1c05vZGUoKQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojptb3VzZURpZE1vdmVP
dmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIHVuc2lnbmVkKQogewotICAg
IGlmICghbV9zZWFyY2hpbmdGb3JOb2RlIHx8ICFtX2hpZ2hsaWdodERhdGEpCisgICAgaWYgKCFt
X3NlYXJjaGluZ0Zvck5vZGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIE5vZGUqIG5vZGUgPSBy
ZXN1bHQuaW5uZXJOb2RlKCk7CiAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZS0+bm9kZVR5cGUoKSA9
PSBOb2RlOjpURVhUX05PREUpCiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0g
ICAgaWYgKG5vZGUpIHsKLSAgICAgICAgbV9oaWdobGlnaHREYXRhLT5ub2RlID0gbm9kZTsKLSAg
ICAgICAgaGlnaGxpZ2h0KCk7Ci0gICAgfQorICAgIGlmIChub2RlKQorICAgICAgICBtX292ZXJs
YXktPmhpZ2hsaWdodE5vZGUobm9kZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNl
dFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkLCBJbnNwZWN0b3JPYmplY3QqIGhpZ2hsaWdo
dENvbmZpZykKQEAgLTEwMDQsNDggKzk5NSw0MiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpz
ZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCwgSW5zcGVjdG9yT2JqZWN0KiBoaWdobAog
ICAgIGVsc2UgewogICAgICAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgICAgICAgaGlkZUhpZ2hs
aWdodCgmZXJyb3IpOwotICAgICAgICBtX2hpZ2hsaWdodERhdGEuY2xlYXIoKTsKKyAgICAgICAg
bV9vdmVybGF5LT5jbGVhckhpZ2hsaWdodERhdGEoKTsKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OnNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmluZyosIGJvb2wgZW5h
YmxlZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGhpZ2hsaWdodENvbmZpZykKLXsK
LSAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVuYWJsZWQsIGhpZ2hsaWdodENvbmZpZyA/IGhpZ2hs
aWdodENvbmZpZy0+Z2V0KCkgOiAwKTsKLX0KLQogYm9vbCBJbnNwZWN0b3JET01BZ2VudDo6c2V0
SGlnaGxpZ2h0RGF0YUZyb21Db25maWcoSW5zcGVjdG9yT2JqZWN0KiBoaWdobGlnaHRDb25maWcp
CiB7CiAgICAgaWYgKCFoaWdobGlnaHRDb25maWcpIHsKLSAgICAgICAgbV9oaWdobGlnaHREYXRh
LmNsZWFyKCk7CisgICAgICAgIG1fb3ZlcmxheS0+Y2xlYXJIaWdobGlnaHREYXRhKCk7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBtX2hpZ2hsaWdodERhdGEgPSBhZG9wdFB0
cihuZXcgSGlnaGxpZ2h0RGF0YSgpKTsKKyAgICBPd25QdHI8SGlnaGxpZ2h0RGF0YT4gaGlnaGxp
Z2h0RGF0YSA9IGFkb3B0UHRyKG5ldyBIaWdobGlnaHREYXRhKCkpOwogICAgIGJvb2wgc2hvd0lu
Zm8gPSBmYWxzZTsgLy8gRGVmYXVsdDogZmFsc2UgKGRvIG5vdCBzaG93IGEgdG9vbHRpcCkuCiAg
ICAgaGlnaGxpZ2h0Q29uZmlnLT5nZXRCb29sZWFuKCJzaG93SW5mbyIsICZzaG93SW5mbyk7Ci0g
ICAgbV9oaWdobGlnaHREYXRhLT5zaG93SW5mbyA9IHNob3dJbmZvOwotICAgIG1faGlnaGxpZ2h0
RGF0YS0+Y29udGVudCA9IHBhcnNlQ29uZmlnQ29sb3IoImNvbnRlbnRDb2xvciIsIGhpZ2hsaWdo
dENvbmZpZyk7Ci0gICAgbV9oaWdobGlnaHREYXRhLT5jb250ZW50T3V0bGluZSA9IHBhcnNlQ29u
ZmlnQ29sb3IoImNvbnRlbnRPdXRsaW5lQ29sb3IiLCBoaWdobGlnaHRDb25maWcpOwotICAgIG1f
aGlnaGxpZ2h0RGF0YS0+cGFkZGluZyA9IHBhcnNlQ29uZmlnQ29sb3IoInBhZGRpbmdDb2xvciIs
IGhpZ2hsaWdodENvbmZpZyk7Ci0gICAgbV9oaWdobGlnaHREYXRhLT5ib3JkZXIgPSBwYXJzZUNv
bmZpZ0NvbG9yKCJib3JkZXJDb2xvciIsIGhpZ2hsaWdodENvbmZpZyk7Ci0gICAgbV9oaWdobGln
aHREYXRhLT5tYXJnaW4gPSBwYXJzZUNvbmZpZ0NvbG9yKCJtYXJnaW5Db2xvciIsIGhpZ2hsaWdo
dENvbmZpZyk7CisgICAgaGlnaGxpZ2h0RGF0YS0+c2hvd0luZm8gPSBzaG93SW5mbzsKKyAgICBo
aWdobGlnaHREYXRhLT5jb250ZW50ID0gcGFyc2VDb25maWdDb2xvcigiY29udGVudENvbG9yIiwg
aGlnaGxpZ2h0Q29uZmlnKTsKKyAgICBoaWdobGlnaHREYXRhLT5jb250ZW50T3V0bGluZSA9IHBh
cnNlQ29uZmlnQ29sb3IoImNvbnRlbnRPdXRsaW5lQ29sb3IiLCBoaWdobGlnaHRDb25maWcpOwor
ICAgIGhpZ2hsaWdodERhdGEtPnBhZGRpbmcgPSBwYXJzZUNvbmZpZ0NvbG9yKCJwYWRkaW5nQ29s
b3IiLCBoaWdobGlnaHRDb25maWcpOworICAgIGhpZ2hsaWdodERhdGEtPmJvcmRlciA9IHBhcnNl
Q29uZmlnQ29sb3IoImJvcmRlckNvbG9yIiwgaGlnaGxpZ2h0Q29uZmlnKTsKKyAgICBoaWdobGln
aHREYXRhLT5tYXJnaW4gPSBwYXJzZUNvbmZpZ0NvbG9yKCJtYXJnaW5Db2xvciIsIGhpZ2hsaWdo
dENvbmZpZyk7CisgICAgbV9vdmVybGF5LT5zZXRIaWdobGlnaHREYXRhKGhpZ2hsaWdodERhdGEu
cmVsZWFzZSgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6aGlnaGxpZ2h0KCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEluc3BlY3RNb2RlRW5h
YmxlZChFcnJvclN0cmluZyosIGJvb2wgZW5hYmxlZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4qIGhpZ2hsaWdodENvbmZpZykKIHsKLSAgICAvLyBUaGlzIG1ldGhvZCByZXF1aXJlcyBt
X2hpZ2hsaWdodERhdGEgdG8gaGF2ZSBiZWVuIGZpbGxlZCBpbiBieSBpdHMgY2xpZW50LgotICAg
IEFTU0VSVChtX2hpZ2hsaWdodERhdGEpOwotICAgIG1fY2xpZW50LT5oaWdobGlnaHQoKTsKKyAg
ICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVuYWJsZWQsIGhpZ2hsaWdodENvbmZpZyA/IGhpZ2hsaWdo
dENvbmZpZy0+Z2V0KCkgOiAwKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxp
Z2h0UmVjdChFcnJvclN0cmluZyosIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogY29sb3IsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+KiBvdXRsaW5lQ29sb3IpCiB7Ci0gICAgbV9oaWdobGlnaHREYXRhID0gYWRv
cHRQdHIobmV3IEhpZ2hsaWdodERhdGEoKSk7Ci0gICAgbV9oaWdobGlnaHREYXRhLT5yZWN0ID0g
YWRvcHRQdHIobmV3IEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwotICAgIG1faGlnaGxp
Z2h0RGF0YS0+Y29udGVudCA9IHBhcnNlQ29sb3IoY29sb3IpOwotICAgIG1faGlnaGxpZ2h0RGF0
YS0+Y29udGVudE91dGxpbmUgPSBwYXJzZUNvbG9yKG91dGxpbmVDb2xvcik7Ci0gICAgbV9jbGll
bnQtPmhpZ2hsaWdodCgpOworICAgIE93blB0cjxIaWdobGlnaHREYXRhPiBoaWdobGlnaHREYXRh
ID0gYWRvcHRQdHIobmV3IEhpZ2hsaWdodERhdGEoKSk7CisgICAgaGlnaGxpZ2h0RGF0YS0+cmVj
dCA9IGFkb3B0UHRyKG5ldyBJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKKyAgICBoaWdo
bGlnaHREYXRhLT5jb250ZW50ID0gcGFyc2VDb2xvcihjb2xvcik7CisgICAgaGlnaGxpZ2h0RGF0
YS0+Y29udGVudE91dGxpbmUgPSBwYXJzZUNvbG9yKG91dGxpbmVDb2xvcik7CisgICAgbV9vdmVy
bGF5LT5zZXRIaWdobGlnaHREYXRhKGhpZ2hsaWdodERhdGEucmVsZWFzZSgpKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Tm9kZSgKQEAgLTEwNTMsMTIgKzEwMzgsOSBA
QCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHROb2RlKAogICAgIGludCBub2RlSWQs
CiAgICAgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGhpZ2hsaWdodENvbmZpZykKIHsK
LSAgICBpZiAoTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpKSB7Ci0gICAgICAgIGlmIChz
ZXRIaWdobGlnaHREYXRhRnJvbUNvbmZpZyhoaWdobGlnaHRDb25maWcuZ2V0KCkpKSB7Ci0gICAg
ICAgICAgICBtX2hpZ2hsaWdodERhdGEtPm5vZGUgPSBub2RlOwotICAgICAgICAgICAgaGlnaGxp
Z2h0KCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKE5vZGUqIG5vZGUgPSBub2RlRm9ySWQo
bm9kZUlkKSkKKyAgICAgICAgaWYgKHNldEhpZ2hsaWdodERhdGFGcm9tQ29uZmlnKGhpZ2hsaWdo
dENvbmZpZy5nZXQoKSkpCisgICAgICAgICAgICBtX292ZXJsYXktPmhpZ2hsaWdodE5vZGUobm9k
ZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodEZyYW1lKApAQCAtMTA2
OSwyMiArMTA1MSwxOCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRGcmFtZSgK
IHsKICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2VBZ2VudC0+ZnJhbWVGb3JJZChmcmFtZUlkKTsK
ICAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPm93bmVyRWxlbWVudCgpKSB7Ci0gICAgICAgIG1faGln
aGxpZ2h0RGF0YSA9IGFkb3B0UHRyKG5ldyBIaWdobGlnaHREYXRhKCkpOwotICAgICAgICBtX2hp
Z2hsaWdodERhdGEtPm5vZGUgPSBmcmFtZS0+b3duZXJFbGVtZW50KCk7Ci0gICAgICAgIG1faGln
aGxpZ2h0RGF0YS0+c2hvd0luZm8gPSB0cnVlOyAvLyBBbHdheXMgc2hvdyB0b29sdGlwcyBmb3Ig
ZnJhbWVzLgotICAgICAgICBtX2hpZ2hsaWdodERhdGEtPmNvbnRlbnQgPSBwYXJzZUNvbG9yKGNv
bG9yKTsKLSAgICAgICAgbV9oaWdobGlnaHREYXRhLT5jb250ZW50T3V0bGluZSA9IHBhcnNlQ29s
b3Iob3V0bGluZUNvbG9yKTsKLSAgICAgICAgaGlnaGxpZ2h0KCk7CisgICAgICAgIE93blB0cjxI
aWdobGlnaHREYXRhPiBoaWdobGlnaHREYXRhID0gYWRvcHRQdHIobmV3IEhpZ2hsaWdodERhdGEo
KSk7CisgICAgICAgIGhpZ2hsaWdodERhdGEtPm5vZGUgPSBmcmFtZS0+b3duZXJFbGVtZW50KCk7
CisgICAgICAgIGhpZ2hsaWdodERhdGEtPnNob3dJbmZvID0gdHJ1ZTsgLy8gQWx3YXlzIHNob3cg
dG9vbHRpcHMgZm9yIGZyYW1lcy4KKyAgICAgICAgaGlnaGxpZ2h0RGF0YS0+Y29udGVudCA9IHBh
cnNlQ29sb3IoY29sb3IpOworICAgICAgICBoaWdobGlnaHREYXRhLT5jb250ZW50T3V0bGluZSA9
IHBhcnNlQ29sb3Iob3V0bGluZUNvbG9yKTsKKyAgICAgICAgbV9vdmVybGF5LT5zZXRIaWdobGln
aHREYXRhKGhpZ2hsaWdodERhdGEucmVsZWFzZSgpKTsKICAgICB9CiB9CiAKIHZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmhpZGVIaWdobGlnaHQoRXJyb3JTdHJpbmcqKQogewotICAgIGlmIChtX2hp
Z2hsaWdodERhdGEpIHsKLSAgICAgICAgbV9oaWdobGlnaHREYXRhLT5ub2RlLmNsZWFyKCk7Ci0g
ICAgICAgIG1faGlnaGxpZ2h0RGF0YS0+cmVjdC5jbGVhcigpOwotICAgIH0KLSAgICBtX2NsaWVu
dC0+aGlkZUhpZ2hsaWdodCgpOworICAgIG1fb3ZlcmxheS0+aGlkZUhpZ2hsaWdodCgpOwogfQog
CiB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojptb3ZlVG8oRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5n
LCBpbnQgbm9kZUlkLCBpbnQgdGFyZ2V0RWxlbWVudElkLCBjb25zdCBpbnQqIGNvbnN0IGFuY2hv
ck5vZGVJZCwgaW50KiBuZXdOb2RlSWQpCkBAIC0xNTk5LDIyICsxNTc3LDYgQEAgUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbnNwZWN0b3JET01BZ2VudDo6
cmVzb2x2ZU5vZGUoTm8KICAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHQud3JhcE5vZGUobm9kZSwg
b2JqZWN0R3JvdXApOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpkcmF3SGlnaGxpZ2h0
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBpZiAoIW1faGlnaGxpZ2h0
RGF0YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRE9NTm9kZUhpZ2hsaWdodGVyOjpkcmF3SGln
aGxpZ2h0KGNvbnRleHQsIG1faGlnaGxpZ2h0RGF0YS0+bm9kZSA/IG1faGlnaGxpZ2h0RGF0YS0+
bm9kZS0+ZG9jdW1lbnQoKSA6IG1fZG9jdW1lbnQuZ2V0KCksIG1faGlnaGxpZ2h0RGF0YS5nZXQo
KSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEhpZ2hsaWdodChIaWdobGlnaHQq
IGhpZ2hsaWdodCkgY29uc3QKLXsKLSAgICBpZiAoIW1faGlnaGxpZ2h0RGF0YSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgRE9NTm9kZUhpZ2hsaWdodGVyOjpnZXRIaWdobGlnaHQobV9oaWdobGln
aHREYXRhLT5ub2RlID8gbV9oaWdobGlnaHREYXRhLT5ub2RlLT5kb2N1bWVudCgpIDogbV9kb2N1
bWVudC5nZXQoKSwgbV9oaWdobGlnaHREYXRhLmdldCgpLCBoaWdobGlnaHQpOwotfQotCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCBiMDVhYjU3MGQ5
ZmQxYjA0ODcwNmEzOTNhMjQ2NjU5N2I0OTYzOWJmLi45MTA2MjMwMzFjZTg3OGUxNDg2OGE1NDMx
OThiODRlMGNkOTYyZGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuaApAQCAtNTUsMTIgKzU1LDEwIEBAIGNsYXNzIERPTUVkaXRvcjsKIGNsYXNzIERv
Y3VtZW50OwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEV2ZW50OwotY2xhc3MgR3JhcGhpY3NDb250
ZXh0OwotY2xhc3MgSW5zcGVjdG9yQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CiBj
bGFzcyBJbnNwZWN0b3JIaXN0b3J5OworY2xhc3MgSW5zcGVjdG9yT3ZlcmxheTsKIGNsYXNzIElu
c3BlY3RvclBhZ2VBZ2VudDsKLWNsYXNzIEludFJlY3Q7CiBjbGFzcyBIaXRUZXN0UmVzdWx0Owog
Y2xhc3MgSFRNTEVsZW1lbnQ7CiBjbGFzcyBJbnNwZWN0b3JTdGF0ZTsKQEAgLTcxLDkgKzY5LDYg
QEAgY2xhc3MgUmV2YWxpZGF0ZVN0eWxlQXR0cmlidXRlVGFzazsKIGNsYXNzIFNjcmlwdFZhbHVl
OwogY2xhc3MgU2hhZG93Um9vdDsKIAotc3RydWN0IEhpZ2hsaWdodDsKLXN0cnVjdCBIaWdobGln
aHREYXRhOwotCiB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAogI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCkBAIC0xMDMsOSArOTgsOSBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRNb2RpZnlET01BdHRyKEVsZW1lbnQqKSA9IDA7CiAgICAgfTsKIAotICAgIHN0YXRpYyBQYXNz
T3duUHRyPEluc3BlY3RvckRPTUFnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5z
dHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIEluc3BlY3Rv
ckNsaWVudCogY2xpZW50LCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIEluamVjdGVk
U2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQorICAgIHN0YXRpYyBQYXNzT3du
UHRyPEluc3BlY3RvckRPTUFnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1
bWVudGluZ0FnZW50cywgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIEluc3BlY3RvclN0
YXRlKiBpbnNwZWN0b3JTdGF0ZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlw
dE1hbmFnZXIsIEluc3BlY3Rvck92ZXJsYXkqIG92ZXJsYXkpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IEluc3BlY3RvckRPTUFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIHBh
Z2VBZ2VudCwgY2xpZW50LCBpbnNwZWN0b3JTdGF0ZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKSk7
CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9yRE9NQWdlbnQoaW5zdHJ1bWVu
dGluZ0FnZW50cywgcGFnZUFnZW50LCBpbnNwZWN0b3JTdGF0ZSwgaW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyLCBvdmVybGF5KSk7CiAgICAgfQogCiAgICAgc3RhdGljIFN0cmluZyB0b0Vycm9yU3RyaW5n
KGNvbnN0IEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTE1MSw4ICsxNDYsNiBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHJlZG8oRXJyb3JTdHJpbmcqKTsKICAgICB2aXJ0dWFsIHZvaWQgbWFya1Vu
ZG9hYmxlU3RhdGUoRXJyb3JTdHJpbmcqKTsKIAotICAgIE5vZGUqIGhpZ2hsaWdodGVkTm9kZSgp
IGNvbnN0OwotCiAgICAgdm9pZCBnZXRFdmVudExpc3RlbmVycyhOb2RlKiwgVmVjdG9yPEV2ZW50
TGlzdGVuZXJJbmZvPiYgbGlzdGVuZXJzQXJyYXksIGJvb2wgaW5jbHVkZUFuY2VzdG9ycyk7CiAK
ICAgICAvLyBNZXRob2RzIGNhbGxlZCBmcm9tIHRoZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24u
CkBAIC0xODUsOSArMTc4LDYgQEAgcHVibGljOgogICAgIHZvaWQgaW5zcGVjdChOb2RlKik7CiAg
ICAgdm9pZCBmb2N1c05vZGUoKTsKIAotICAgIHZvaWQgZHJhd0hpZ2hsaWdodChHcmFwaGljc0Nv
bnRleHQmKSBjb25zdDsKLSAgICB2b2lkIGdldEhpZ2hsaWdodChIaWdobGlnaHQqKSBjb25zdDsK
LQogICAgIEluc3BlY3Rvckhpc3RvcnkqIGhpc3RvcnkoKSB7IHJldHVybiBtX2hpc3RvcnkuZ2V0
KCk7IH0KIAogICAgIC8vIFdlIHJlcHJlc2VudCBlbWJlZGRlZCBkb21zIGFzIGEgcGFydCBvZiB0
aGUgc2FtZSBoaWVyYXJjaHkuIEhlbmNlIHdlIHRyZWF0IGNoaWxkcmVuIG9mIGZyYW1lIG93bmVy
cyBkaWZmZXJlbnRseS4KQEAgLTIwNSwxMSArMTk1LDEwIEBAIHB1YmxpYzoKICAgICBJbnNwZWN0
b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCgpIHsgcmV0dXJuIG1fcGFnZUFnZW50OyB9CiAKIHByaXZh
dGU6Ci0gICAgSW5zcGVjdG9yRE9NQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3Rv
clBhZ2VBZ2VudCosIEluc3BlY3RvckNsaWVudCosIEluc3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyKik7CisgICAgSW5zcGVjdG9yRE9NQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50
cyosIEluc3BlY3RvclBhZ2VBZ2VudCosIEluc3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyKiwgSW5zcGVjdG9yT3ZlcmxheSopOwogCiAgICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JO
b2RlKGJvb2wgZW5hYmxlZCwgSW5zcGVjdG9yT2JqZWN0KiBoaWdobGlnaHRDb25maWcpOwogICAg
IGJvb2wgc2V0SGlnaGxpZ2h0RGF0YUZyb21Db25maWcoSW5zcGVjdG9yT2JqZWN0KiBoaWdobGln
aHRDb25maWcpOwotICAgIHZvaWQgaGlnaGxpZ2h0KCk7CiAKICAgICAvLyBOb2RlLXJlbGF0ZWQg
bWV0aG9kcy4KICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPE5vZGU+LCBpbnQ+IE5vZGVUb0lk
TWFwOwpAQCAtMjQxLDggKzIzMCw4IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIEluc3BlY3Rv
clBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7Ci0gICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsK
ICAgICBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOworICAg
IEluc3BlY3Rvck92ZXJsYXkqIG1fb3ZlcmxheTsKICAgICBJbnNwZWN0b3JGcm9udGVuZDo6RE9N
KiBtX2Zyb250ZW5kOwogICAgIERPTUxpc3RlbmVyKiBtX2RvbUxpc3RlbmVyOwogICAgIE5vZGVU
b0lkTWFwIG1fZG9jdW1lbnROb2RlVG9JZE1hcDsKQEAgLTI1Niw3ICsyNDUsNiBAQCBwcml2YXRl
OgogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiA+IFNl
YXJjaFJlc3VsdHM7CiAgICAgU2VhcmNoUmVzdWx0cyBtX3NlYXJjaFJlc3VsdHM7CiAgICAgT3du
UHRyPFJldmFsaWRhdGVTdHlsZUF0dHJpYnV0ZVRhc2s+IG1fcmV2YWxpZGF0ZVN0eWxlQXR0clRh
c2s7Ci0gICAgT3duUHRyPEhpZ2hsaWdodERhdGE+IG1faGlnaGxpZ2h0RGF0YTsKICAgICBSZWZQ
dHI8Tm9kZT4gbV9ub2RlVG9Gb2N1czsKICAgICBib29sIG1fc2VhcmNoaW5nRm9yTm9kZTsKICAg
ICBPd25QdHI8SW5zcGVjdG9ySGlzdG9yeT4gbV9oaXN0b3J5OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKaW5kZXggMDljOTdkMTk1M2U0
YjliMDAxNjFmODc0ZjQ1MzFmYmRlYzdkYjZjZC4uYjJlNzlhZDdlZjFmZTgzODIyZmU1MzAxODg5
NGY0MjcxYjQyY2JiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRGVidWdnZXJBZ2VudC5oCkBAIC0xMzMsMTcgKzEzMywxOCBAQCBwcm90ZWN0ZWQ6CiAgICAg
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIoKSB7IHJldHVybiBt
X2luamVjdGVkU2NyaXB0TWFuYWdlcjsgfQogICAgIHZpcnR1YWwgSW5qZWN0ZWRTY3JpcHQgaW5q
ZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nKiwgY29uc3QgaW50KiBleGVjdXRpb25Db250
ZXh0SWQpID0gMDsKIAorICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKCk7CisgICAgdmlydHVhbCB2
b2lkIGRpZFBhdXNlKFNjcmlwdFN0YXRlKiwgY29uc3QgU2NyaXB0VmFsdWUmIGNhbGxGcmFtZXMs
IGNvbnN0IFNjcmlwdFZhbHVlJiBleGNlcHRpb24pOworICAgIHZpcnR1YWwgdm9pZCBkaWRDb250
aW51ZSgpOworCiBwcml2YXRlOgogICAgIHZvaWQgZW5hYmxlKCk7Ci0gICAgdm9pZCBkaXNhYmxl
KCk7CiAgICAgYm9vbCBlbmFibGVkKCk7CiAKICAgICBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpB
cnJheTxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkNhbGxGcmFtZT4gPiBjdXJyZW50Q2FsbEZyYW1l
cygpOwogCiAgICAgdmlydHVhbCB2b2lkIGRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgc2Ny
aXB0SWQsIGNvbnN0IFNjcmlwdCYpOwogICAgIHZpcnR1YWwgdm9pZCBmYWlsZWRUb1BhcnNlU291
cmNlKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGRhdGEsIGludCBmaXJzdExpbmUs
IGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKLSAgICB2aXJ0dWFs
IHZvaWQgZGlkUGF1c2UoU2NyaXB0U3RhdGUqLCBjb25zdCBTY3JpcHRWYWx1ZSYgY2FsbEZyYW1l
cywgY29uc3QgU2NyaXB0VmFsdWUmIGV4Y2VwdGlvbik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENv
bnRpbnVlKCk7CiAKICAgICB2b2lkIHNldFBhdXNlT25FeGNlcHRpb25zSW1wbChFcnJvclN0cmlu
ZyosIGludCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JQYWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VB
Z2VudC5jcHAKaW5kZXggZWYzNDUzN2YwZTExOGZiNWUwY2I4OGNhMmZhYjVlM2VmNjBhMzU3Ny4u
OTY3NmQxMzhlODU2ZmY5NTA5NmJjMmUwNDg2NGExOGVkZGU4MmM2MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKQEAgLTIyMyw5ICsyMjMs
OSBAQCBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6c2hhcmVkQnVmZmVyQ29udGVudChQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyLCBjbwogICAgIHJldHVybiBkZWNvZGVTaGFyZWRCdWZm
ZXIoYnVmZmVyLCB0ZXh0RW5jb2RpbmdOYW1lLCByZXN1bHQpOwogfQogCi1QYXNzT3duUHRyPElu
c3BlY3RvclBhZ2VBZ2VudD4gSW5zcGVjdG9yUGFnZUFnZW50OjpjcmVhdGUoSW5zdHJ1bWVudGlu
Z0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgUGFnZSogcGFnZSwgSW5zcGVjdG9yQWdlbnQq
IGluc3BlY3RvckFnZW50LCBJbnNwZWN0b3JTdGF0ZSogc3RhdGUsIEluamVjdGVkU2NyaXB0TWFu
YWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKK1Bh
c3NPd25QdHI8SW5zcGVjdG9yUGFnZUFnZW50PiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNyZWF0ZShJ
bnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYWdlKiBwYWdlLCBJbnNw
ZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIEluc3BlY3RvclN0YXRlKiBzdGF0ZSwgSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIsIEluc3BlY3RvckNsaWVudCog
Y2xpZW50LCBJbnNwZWN0b3JPdmVybGF5KiBvdmVybGF5KQogewotICAgIHJldHVybiBhZG9wdFB0
cihuZXcgSW5zcGVjdG9yUGFnZUFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIHBhZ2UsIGluc3Bl
Y3RvckFnZW50LCBzdGF0ZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBjbGllbnQpKTsKKyAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IEluc3BlY3RvclBhZ2VBZ2VudChpbnN0cnVtZW50aW5nQWdlbnRz
LCBwYWdlLCBpbnNwZWN0b3JBZ2VudCwgc3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdlciwgY2xp
ZW50LCBvdmVybGF5KSk7CiB9CiAKIC8vIHN0YXRpYwpAQCAtMzA4LDEzICszMDgsMTQgQEAgVHlw
ZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZTo6RW51bSBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNh
Y2hlZFJlc291cmNlVHlwZUpzb24KICAgICByZXR1cm4gcmVzb3VyY2VUeXBlSnNvbihjYWNoZWRS
ZXNvdXJjZVR5cGUoY2FjaGVkUmVzb3VyY2UpKTsKIH0KIAotSW5zcGVjdG9yUGFnZUFnZW50OjpJ
bnNwZWN0b3JQYWdlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cywgUGFnZSogcGFnZSwgSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBJbnNwZWN0b3JT
dGF0ZSogaW5zcGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKK0luc3BlY3RvclBhZ2VBZ2VudDo6
SW5zcGVjdG9yUGFnZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2Vu
dHMsIFBhZ2UqIHBhZ2UsIEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgSW5zcGVjdG9y
U3RhdGUqIGluc3BlY3RvclN0YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2Ny
aXB0TWFuYWdlciwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQsIEluc3BlY3Rvck92ZXJsYXkqIG92
ZXJsYXkpCiAgICAgOiBJbnNwZWN0b3JCYXNlQWdlbnQ8SW5zcGVjdG9yUGFnZUFnZW50PigiUGFn
ZSIsIGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3BlY3RvclN0YXRlKQogICAgICwgbV9wYWdlKHBh
Z2UpCiAgICAgLCBtX2luc3BlY3RvckFnZW50KGluc3BlY3RvckFnZW50KQogICAgICwgbV9pbmpl
Y3RlZFNjcmlwdE1hbmFnZXIoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQogICAgICwgbV9jbGllbnQo
Y2xpZW50KQogICAgICwgbV9mcm9udGVuZCgwKQorICAgICwgbV9vdmVybGF5KG92ZXJsYXkpCiAg
ICAgLCBtX2xhc3RTY3JpcHRJZGVudGlmaWVyKDApCiAgICAgLCBtX2xhc3RQYWludENvbnRleHQo
MCkKICAgICAsIG1fZGlkTG9hZEV2ZW50RmlyZShmYWxzZSkKQEAgLTg4NSw3ICs4ODYsNyBAQCB2
b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlkUGFpbnQoKQogICAgICAgICBDb2xvcigwLCAwLCAw
eEZGLCAweDNGKSwKICAgICB9OwogCi0gICAgRE9NTm9kZUhpZ2hsaWdodGVyOjpkcmF3T3V0bGlu
ZSgqbV9sYXN0UGFpbnRDb250ZXh0LCBtX2xhc3RQYWludFJlY3QsIGNvbG9yc1tjb2xvclNlbGVj
dG9yKysgJSBXVEZfQVJSQVlfTEVOR1RIKGNvbG9ycyldKTsKKyAgICBtX292ZXJsYXktPmRyYXdP
dXRsaW5lKCptX2xhc3RQYWludENvbnRleHQsIG1fbGFzdFBhaW50UmVjdCwgY29sb3JzW2NvbG9y
U2VsZWN0b3IrKyAlIFdURl9BUlJBWV9MRU5HVEgoY29sb3JzKV0pOwogCiAgICAgbV9sYXN0UGFp
bnRDb250ZXh0ID0gMDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JQYWdlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQ
YWdlQWdlbnQuaAppbmRleCA5NjRiYzg1ZmM2MzY0OGFmMzhmMmRjMTJmYzgzZjc5NzFiOTNhNjYz
Li5jM2I5YTZkMmY0NWJlZTJiNzNmYzEwOThiNjUyYWJhY2FiMmFmOWY2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCkBAIC01Myw2ICs1Myw3IEBA
IGNsYXNzIEluc3BlY3RvckFnZW50OwogY2xhc3MgSW5zcGVjdG9yQXJyYXk7CiBjbGFzcyBJbnNw
ZWN0b3JDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CitjbGFzcyBJbnNwZWN0b3JPdmVy
bGF5OwogY2xhc3MgSW5zcGVjdG9yU3RhdGU7CiBjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzOwog
Y2xhc3MgS1VSTDsKQEAgLTc3LDcgKzc4LDcgQEAgcHVibGljOgogICAgICAgICBPdGhlclJlc291
cmNlCiAgICAgfTsKIAotICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3RvclBhZ2VBZ2VudD4g
Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqLCBQYWdlKiwgSW5zcGVjdG9yQWdlbnQqLCBJbnNw
ZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3RvckNsaWVudCopOwor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3RvclBhZ2VBZ2VudD4gY3JlYXRlKEluc3RydW1l
bnRpbmdBZ2VudHMqLCBQYWdlKiwgSW5zcGVjdG9yQWdlbnQqLCBJbnNwZWN0b3JTdGF0ZSosIElu
amVjdGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3RvckNsaWVudCosIEluc3BlY3Rvck92ZXJsYXkq
KTsKIAogICAgIHN0YXRpYyBib29sIGNhY2hlZFJlc291cmNlQ29udGVudChDYWNoZWRSZXNvdXJj
ZSosIFN0cmluZyogcmVzdWx0LCBib29sKiBiYXNlNjRFbmNvZGVkKTsKICAgICBzdGF0aWMgYm9v
bCBzaGFyZWRCdWZmZXJDb250ZW50KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgY29uc3QgU3Ry
aW5nJiB0ZXh0RW5jb2RpbmdOYW1lLCBib29sIHdpdGhCYXNlNjRFbmNvZGUsIFN0cmluZyogcmVz
dWx0KTsKQEAgLTEzNyw3ICsxMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIERvY3VtZW50TG9h
ZGVyKiBhc3NlcnREb2N1bWVudExvYWRlcihFcnJvclN0cmluZyosIEZyYW1lKik7CiAKIHByaXZh
dGU6Ci0gICAgSW5zcGVjdG9yUGFnZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBQYWdlKiwg
SW5zcGVjdG9yQWdlbnQqLCBJbnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlcios
IEluc3BlY3RvckNsaWVudCopOworICAgIEluc3BlY3RvclBhZ2VBZ2VudChJbnN0cnVtZW50aW5n
QWdlbnRzKiwgUGFnZSosIEluc3BlY3RvckFnZW50KiwgSW5zcGVjdG9yU3RhdGUqLCBJbmplY3Rl
ZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JDbGllbnQqLCBJbnNwZWN0b3JPdmVybGF5Kik7CiAg
ICAgdm9pZCB1cGRhdGVWaWV3TWV0cmljcyhpbnQsIGludCwgZG91YmxlLCBib29sKTsKIAogICAg
IFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lPiBidWlsZE9iamVjdEZvckZyYW1l
KEZyYW1lKik7CkBAIC0xNDcsNiArMTQ4LDcgQEAgcHJpdmF0ZToKICAgICBJbmplY3RlZFNjcmlw
dE1hbmFnZXIqIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogICAgIEluc3BlY3RvckNsaWVudCog
bV9jbGllbnQ7CiAgICAgSW5zcGVjdG9yRnJvbnRlbmQ6OlBhZ2UqIG1fZnJvbnRlbmQ7CisgICAg
SW5zcGVjdG9yT3ZlcmxheSogbV9vdmVybGF5OwogICAgIGxvbmcgbV9sYXN0U2NyaXB0SWRlbnRp
ZmllcjsKICAgICBTdHJpbmcgbV9wZW5kaW5nU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZE9uY2U7CiAg
ICAgU3RyaW5nIG1fc2NyaXB0VG9FdmFsdWF0ZU9uTG9hZE9uY2U7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcAppbmRleCBhNTg2ZWRmM2ZkNDEwOGM5
ZDA3OTJjMGJkZmViZTFlODNmYWZmODZhLi40YjQ1OTJhMjMzOGQxYmM3MzY1NjFlNGQzMDZhMjYx
NDU1MDI4MDRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVn
Z2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJB
Z2VudC5jcHAKQEAgLTM1LDE5ICszNSwyMSBAQAogI2luY2x1ZGUgIlBhZ2VEZWJ1Z2dlckFnZW50
LmgiCiAKICNpbmNsdWRlICJDb25zb2xlLmgiCisjaW5jbHVkZSAiRE9NTm9kZUhpZ2hsaWdodGVy
LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VTY3JpcHREZWJ1Z1NlcnZlci5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8UGFnZURlYnVnZ2VyQWdlbnQ+
IFBhZ2VEZWJ1Z2dlckFnZW50OjpjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cywgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBQYWdlKiBpbnNwZWN0
ZWRQYWdlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlcikKK1Bh
c3NPd25QdHI8UGFnZURlYnVnZ2VyQWdlbnQ+IFBhZ2VEZWJ1Z2dlckFnZW50OjpjcmVhdGUoSW5z
dHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yU3RhdGUqIGlu
c3BlY3RvclN0YXRlLCBQYWdlKiBpbnNwZWN0ZWRQYWdlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIq
IGluamVjdGVkU2NyaXB0TWFuYWdlciwgSW5zcGVjdG9yT3ZlcmxheSogb3ZlcmxheSkKIHsKLSAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IFBhZ2VEZWJ1Z2dlckFnZW50KGluc3RydW1lbnRpbmdBZ2Vu
dHMsIGluc3BlY3RvclN0YXRlLCBpbnNwZWN0ZWRQYWdlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIp
KTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBhZ2VEZWJ1Z2dlckFnZW50KGluc3RydW1lbnRp
bmdBZ2VudHMsIGluc3BlY3RvclN0YXRlLCBpbnNwZWN0ZWRQYWdlLCBpbmplY3RlZFNjcmlwdE1h
bmFnZXIsIG92ZXJsYXkpKTsKIH0KIAotUGFnZURlYnVnZ2VyQWdlbnQ6OlBhZ2VEZWJ1Z2dlckFn
ZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclN0
YXRlKiBpbnNwZWN0b3JTdGF0ZSwgUGFnZSogaW5zcGVjdGVkUGFnZSwgSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCitQYWdlRGVidWdnZXJBZ2VudDo6UGFnZURl
YnVnZ2VyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5z
cGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBQYWdlKiBpbnNwZWN0ZWRQYWdlLCBJbmplY3Rl
ZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgSW5zcGVjdG9yT3ZlcmxheSog
b3ZlcmxheSkKICAgICA6IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50
cywgaW5zcGVjdG9yU3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdlcikKICAgICAsIG1faW5zcGVj
dGVkUGFnZShpbnNwZWN0ZWRQYWdlKQorICAgICwgbV9vdmVybGF5KG92ZXJsYXkpCiB7CiB9CiAK
QEAgLTkyLDYgKzk0LDIzIEBAIEluamVjdGVkU2NyaXB0IFBhZ2VEZWJ1Z2dlckFnZW50Ojppbmpl
Y3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nCiAgICAgcmV0dXJuIGlu
amVjdGVkU2NyaXB0OwogfQogCit2b2lkIFBhZ2VEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKCkKK3sK
KyAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKCk7CisgICAgbV9vdmVybGF5LT5z
ZXRQYXVzZWRJbkRlYnVnZ2VyKGZhbHNlKTsKK30KKwordm9pZCBQYWdlRGVidWdnZXJBZ2VudDo6
ZGlkUGF1c2UoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBTY3JpcHRWYWx1ZSYgY2Fs
bEZyYW1lcywgY29uc3QgU2NyaXB0VmFsdWUmIGV4Y2VwdGlvbikKK3sKKyAgICBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpkaWRQYXVzZShzY3JpcHRTdGF0ZSwgY2FsbEZyYW1lcywgZXhjZXB0aW9u
KTsKKyAgICBtX292ZXJsYXktPnNldFBhdXNlZEluRGVidWdnZXIodHJ1ZSk7Cit9CisKK3ZvaWQg
UGFnZURlYnVnZ2VyQWdlbnQ6OmRpZENvbnRpbnVlKCkKK3sKKyAgICBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpkaWRDb250aW51ZSgpOworICAgIG1fb3ZlcmxheS0+c2V0UGF1c2VkSW5EZWJ1Z2dl
cihmYWxzZSk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuaAppbmRleCA5ZGJkNTEzZjlmMWEyOGJiOTg0
MjQ5MTM1NzgxNDg2YzczYzMyNjE4Li5kOTBmZGViODJhZWM4ZTIxNzE5YjU3YzQ5MzVlMTUwZmFk
YjZkZWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2Vy
QWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQu
aApAQCAtMzcsNiArMzcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEluc3Bl
Y3Rvck92ZXJsYXk7CiBjbGFzcyBQYWdlOwogY2xhc3MgUGFnZVNjcmlwdERlYnVnU2VydmVyOwog
CkBAIC00NCw3ICs0NSw3IEBAIGNsYXNzIFBhZ2VEZWJ1Z2dlckFnZW50IDogcHVibGljIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VEZWJ1Z2dl
ckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2Vu
dHMqLCBJbnNwZWN0b3JTdGF0ZSosIFBhZ2UqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxQYWdlRGVidWdnZXJBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRp
bmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0ZSosIFBhZ2UqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIq
LCBJbnNwZWN0b3JPdmVybGF5Kik7CiAgICAgdmlydHVhbCB+UGFnZURlYnVnZ2VyQWdlbnQoKTsK
IAogcHJpdmF0ZToKQEAgLTU2LDggKzU3LDEzIEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIElu
amVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyosIGNvbnN0IGlu
dCogZXhlY3V0aW9uQ29udGV4dElkKTsKIAotICAgIFBhZ2VEZWJ1Z2dlckFnZW50KEluc3RydW1l
bnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0ZSosIFBhZ2UqLCBJbmplY3RlZFNjcmlwdE1hbmFn
ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZSgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRQ
YXVzZShTY3JpcHRTdGF0ZSosIGNvbnN0IFNjcmlwdFZhbHVlJiBjYWxsRnJhbWVzLCBjb25zdCBT
Y3JpcHRWYWx1ZSYgZXhjZXB0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29udGludWUoKTsK
KworICAgIFBhZ2VEZWJ1Z2dlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JT
dGF0ZSosIFBhZ2UqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBJbnNwZWN0b3JPdmVybGF5Kik7
CiAgICAgUGFnZSogY29uc3QgbV9pbnNwZWN0ZWRQYWdlOworICAgIEluc3BlY3Rvck92ZXJsYXkq
IG1fb3ZlcmxheTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
      

    </bug>

</bugzilla>