<?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>110150</bug_id>
          
          <creation_ts>2013-02-18 13:25:57 -0800</creation_ts>
          <short_desc>[GStreamer] MediaStreamCenter implementation</short_desc>
          <delta_ts>2015-03-09 02:46:17 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>79203</blocked>
    
    <blocked>124288</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathon Jongsma (jonner)">jonathon</reporter>
          <assigned_to name="Philippe Normand">pnormand</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>danilo.eu</cc>
    
    <cc>ehdgms</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>glenn</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gustavo</cc>
    
    <cc>hta</cc>
    
    <cc>isair</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jonathon</cc>
    
    <cc>lauro.neto</cc>
    
    <cc>menard</cc>
    
    <cc>mrobinson</cc>
    
    <cc>nick.diego</cc>
    
    <cc>pnormand</cc>
    
    <cc>rego+ews</cc>
    
    <cc>rniwa</cc>
    
    <cc>sergio</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>835715</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathon Jongsma (jonner)">jonathon</who>
    <bug_when>2013-02-18 13:25:57 -0800</bug_when>
    <thetext>[gtk] Implement core mediastream functionality</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835718</commentid>
    <comment_count>1</comment_count>
      <attachid>188936</attachid>
    <who name="Jonathon Jongsma (jonner)">jonathon</who>
    <bug_when>2013-02-18 13:27:21 -0800</bug_when>
    <thetext>Created attachment 188936
Implement core mediastream functionality for gstreamer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836016</commentid>
    <comment_count>2</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-02-18 23:25:23 -0800</bug_when>
    <thetext>I haven&apos;t done a review yet but ChangeLogs are missing ;)
Apart from the port-level API is there anything else still pending to upload to bugzilla? I think I need to read more about MEDIASTREAM before reviewing this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836061</commentid>
    <comment_count>3</comment_count>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2013-02-19 00:13:45 -0800</bug_when>
    <thetext>FYI http://dev.w3.org/2011/webrtc/editor/getusermedia.html is the specification.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836359</commentid>
    <comment_count>4</comment_count>
    <who name="Jonathon Jongsma (jonner)">jonathon</who>
    <bug_when>2013-02-19 07:04:28 -0800</bug_when>
    <thetext>Yeah, I realize the ChangeLogs are missing.  Operator error when using webkit-patch.  Sorry about that.  

I was meaning to mention this when I uploaded this patch.  I have one further patch that adds the implementation of the StreamMediaPlayerGStreamer.  I was debating combining that patch with this one but wasn&apos;t sure what would be easier to review.  thoughts? When that patch is applied, you should be able to view your local webcam in a &lt;video&gt; element, etc.

After these two, the remote streaming (PeerConnection) stuff will come next, but I want to land this infrastructure first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836965</commentid>
    <comment_count>5</comment_count>
      <attachid>188936</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-19 16:40:53 -0800</bug_when>
    <thetext>Comment on attachment 188936
Implement core mediastream functionality for gstreamer

Attachment 188936 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16638081

New failing tests:
svg/as-image/img-preserveAspectRatio-support-2.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838504</commentid>
    <comment_count>6</comment_count>
    <who name="Jonathon Jongsma (jonner)">jonathon</who>
    <bug_when>2013-02-21 09:25:01 -0800</bug_when>
    <thetext>By the way, the second patch (and also a temporary third patch that simply accepts all user media requests for now to make testing easier) is included in my branch here if you&apos;d like to test: http://cgit.collabora.com/git/user/jonathon/webkit/log/?h=mediastream-core

You can use this simple page for a quick test if you&apos;d like: http://people.collabora.com/~jonathon/webrtc-test/localmediastream.html

I should note that although it does basically work with gst 1.0, a lot of video frames get dropped for some reason, whereas it works just fine with gst 0.10.  I&apos;d appreciate any help you can give debugging this issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839437</commentid>
    <comment_count>7</comment_count>
      <attachid>188936</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-02-22 03:44:55 -0800</bug_when>
    <thetext>Comment on attachment 188936
Implement core mediastream functionality for gstreamer

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

Ok I did a first pass, I probably missed some things but we can iterate on patches.

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:49
&gt; +    GOwnPtr&lt;GError&gt; error;
&gt; +    gboolean gstInitialized = gst_init_check(0, 0, &amp;error.outPtr());
&gt; +    g_assert(gstInitialized);

Use initializeGStreamer() please

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:52
&gt; +    GRefPtr&lt;GstBus&gt; bus = adoptGRef(gst_pipeline_get_bus(GST_PIPELINE(m_pipeline.get())));

Use webkitGstPipelineGetBus() perhaps?

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:65
&gt; +CentralPipelineUnit::~CentralPipelineUnit()

I think the bus signal watch should be removed here.

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:79
&gt; +bool CentralPipelineUnit::connectAndGetSourceElement(const String&amp; sourceId, GstElement** sourceElement, GstPad** sourcePad)

Perhaps smart pointers can be used for the output parameters?

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:83
&gt; +    CentralPipelineUnit::PipelineMap::iterator sourceIt = m_pipelineMap.find(sourceId);

nit: sourceIterator

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:92
&gt; +    CentralPipelineUnit::SourceFactoryMap::iterator sourceFactoryIt = m_sourceFactoryMap.find(sourceId);

Ditto :)

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:116
&gt; +        GstElement* tee = gst_element_factory_make(&quot;tee&quot;, NULL);

s/NULL/0

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:131
&gt; +        GstPad* sinkpad = gst_element_get_static_pad(tee, &quot;sink&quot;);

I think sinkPad is leaked here. Use a smart pointer please.

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:137
&gt; +bool CentralPipelineUnit::connectToSource(const String&amp; sourceId, GstElement* sink, GstPad* sinkpad)

I can see in the next patch this method is always called with sinkpad=NULL. Maybe that argument can be removed and handled internally?
In the current form of this method the sinkpad also seems to be leaked.

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:164
&gt; +    GRefPtr&lt;GstElement&gt; queue = gst_element_factory_make(&quot;queue&quot;, NULL);

NULL should be used for sentinels only, please use 0 here :)

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:175
&gt; +    } else {
&gt; +        if (sinkParent.get() != m_pipeline.get()) {

nit: } else if { ?

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:193
&gt; +#ifndef GST_API_VERSION_1
&gt; +    const gchar* padTemplate = &quot;src%d&quot;;
&gt; +#else
&gt; +    const gchar* padTemplate = &quot;src_%u&quot;;
&gt; +#endif

One way to avoid this would be to use gst_element_link_pads_full(tee.get(), 0, queue.get(), &quot;sink&quot;, GST_PAD_LINK_CHECK_DEFAULT);
That function will request a pad to tee itself, AFAIK.

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:210
&gt; +bool CentralPipelineUnit::disconnectFromSource(const String&amp; sourceId, GstElement* sink, GstPad* sinkpad)

Same as for connectToSource, this method seems to be always called without sinkpad.

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:241
&gt; +    GRefPtr&lt;GstPad&gt; lQueueSrcPad = adoptGRef(gst_pad_get_peer(sinkpad));
&gt; +    GRefPtr&lt;GstElement&gt; lQueue = adoptGRef(gst_pad_get_parent_element(lQueueSrcPad.get()));
&gt; +    GRefPtr&lt;GstPad&gt; lQueueSinkPad = adoptGRef(gst_element_get_static_pad(lQueue.get(), &quot;sink&quot;));
&gt; +    GRefPtr&lt;GstPad&gt; lTeeSrcPad = adoptGRef(gst_pad_get_peer(lQueueSinkPad.get()));
&gt; +    GRefPtr&lt;GstElement&gt; lTee = adoptGRef(gst_pad_get_parent_element(lTeeSrcPad.get()));
&gt; +    GRefPtr&lt;GstPad&gt; lTeeSinkPad = adoptGRef(gst_element_get_static_pad(lTee.get(), &quot;sink&quot;));
&gt; +    GRefPtr&lt;GstPad&gt; sourceSrcPad = adoptGRef(gst_pad_get_peer(lTeeSinkPad.get()));
&gt; +    GRefPtr&lt;GstElement&gt; sourceElement = adoptGRef(gst_pad_get_parent_element(sourceSrcPad.get()));

So all you need is lTee and sourceElement it seems, perhaps those can be stored somewhere when they&apos;re created so all this pipeline cliff-hanging could be avoided? I&apos;m fine with this otherwise.

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:245
&gt; +    guint numSourceTeePads = disconnectSinkFromTee(lTee.get(), sink, sinkpad);
&gt; +    if (!numSourceTeePads)

nit: no need for a variable here.

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:258
&gt; +    gst_element_set_state(sink, GST_STATE_NULL);

There&apos;s no pad blocking needed here? Just curious :)

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:282
&gt; +    // Get right hand side elements

Comments should be sentences ending with a dot :).

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:514
&gt; +    // FIXME: do block properly async

Unless this can wait it should be fixed in this patch.

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:543
&gt; +            // queue might actually be a fakesink
&gt; +            gchar* qName = gst_element_get_name(queue.get());

Hum, not sure checking the name of the element is the best idea ;) Can the element type be checked instead? Somehow?

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:620
&gt; +    bool done = false;
&gt; +    while (!done) {
&gt; +#ifdef GST_API_VERSION_1
&gt; +    GValue item = G_VALUE_INIT;
&gt; +#else

Ok third time I see this code in the patch so far, maybe it can be refactored in a function taking a callback argument?

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:686
&gt; +    if (err)
&gt; +        g_error_free(err);
&gt; +    if (debug)
&gt; +        g_free(debug);

Please use GOwnPtrs.

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.h:25
&gt; +#include &lt;gst/gst.h&gt;

Can this be replaced by forward declarations?

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.h:40
&gt; +class CentralPipelineUnit {
&gt; +public:
&gt; +    CentralPipelineUnit();
&gt; +    virtual ~CentralPipelineUnit();

I think it&apos;d make sense to have this class non-copyable and implement a create function, if possible.

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterPrivateGStreamer.cpp:60
&gt; +    GOwnPtr&lt;GError&gt; error;
&gt; +    if (!gst_init_check(0, 0, &amp;error.outPtr())) {
&gt; +        client-&gt;didCompleteQuery(audioSources, videoSources);
&gt; +        return;
&gt; +    }

Please use initializeGStreamer()

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterPrivateGStreamer.cpp:311
&gt; +static gchar* createUniqueName(const gchar* prefix)

Perhaps use PassOwnPtr&lt;char&gt; here?

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterPrivateGStreamer.cpp:318
&gt; +static GstElement* createAudioSourceBin(GstElement* source)

Return a GRefPtr?

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterPrivateGStreamer.cpp:354
&gt; +static GstElement* createVideoSourceBin(GstElement *source)

Ditto

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterPrivateGStreamer.h:32
&gt; +#include &lt;gst/gst.h&gt;
&gt; +#include &lt;wtf/HashMap.h&gt;
&gt; +#include &lt;wtf/gobject/GOwnPtr.h&gt;
&gt; +#include &lt;wtf/gobject/GRefPtr.h&gt;
&gt; +#include &lt;wtf/text/WTFString.h&gt;

Probably some of these includes can be replaced with forward declarations.

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterPrivateGStreamer.h:71
&gt; +    GstElementFactory *storedElementFactory(const String&amp; key);

Nit: * on the wrong side ;)

&gt; Source/WebCore/platform/mediastream/gstreamer/SourceFactory.h:25
&gt; +#include &lt;gst/gst.h&gt;
&gt; +#include &lt;wtf/text/WTFString.h&gt;

Ditto about forward declarations

&gt; Source/WebCore/platform/mediastream/gstreamer/SourceFactory.h:29
&gt; +class SourceFactory {

Hum, perhaps this can be made non-copyable as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843815</commentid>
    <comment_count>8</comment_count>
      <attachid>188936</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-02-28 00:14:55 -0800</bug_when>
    <thetext>Comment on attachment 188936
Implement core mediastream functionality for gstreamer

r- as per above comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854316</commentid>
    <comment_count>9</comment_count>
      <attachid>192927</attachid>
    <who name="Jonathon Jongsma (jonner)">jonathon</who>
    <bug_when>2013-03-13 08:30:26 -0700</bug_when>
    <thetext>Created attachment 192927
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857755</commentid>
    <comment_count>10</comment_count>
    <who name="Dongheun Kang">ehdgms</who>
    <bug_when>2013-03-18 17:09:06 -0700</bug_when>
    <thetext>maybe 

567 #if GST_API_VERSION_1

to

567 #ifdef GST_API_VERSION_1

if not define the macro, webkit occurs that undef error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>874911</commentid>
    <comment_count>11</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-04-12 12:47:50 -0700</bug_when>
    <thetext>I need to review this, sorry for the delay</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>909643</commentid>
    <comment_count>12</comment_count>
      <attachid>192927</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-07-18 01:14:14 -0700</bug_when>
    <thetext>Comment on attachment 192927
Patch

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

Looks good, just a couple of remarks :) Ah also we need,... a ChangeLog :)

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:69
&gt; +        gst_bus_remove_signal_watch(bus.get());

No need to clear the sync handler here?

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterPrivateGStreamer.cpp:58
&gt; +    GOwnPtr&lt;GError&gt; error;

Unused variable it seems</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>909644</commentid>
    <comment_count>13</comment_count>
      <attachid>192927</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-07-18 01:15:32 -0700</bug_when>
    <thetext>Comment on attachment 192927
Patch

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

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:548
&gt; +#if GST_API_VERSION_1

#ifdef

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:567
&gt; +#if GST_API_VERSION_1

ditto

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:603
&gt; +#if GST_API_VERSION_1

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915436</commentid>
    <comment_count>14</comment_count>
      <attachid>192927</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-08-08 07:53:13 -0700</bug_when>
    <thetext>Comment on attachment 192927
Patch

r- as per above comments, would you have time to prepare a new iteration? I think we&apos;re getting close :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917200</commentid>
    <comment_count>15</comment_count>
    <who name="Nick Diego Yamane (diegoyam)">nick.diego</who>
    <bug_when>2013-08-14 11:18:09 -0700</bug_when>
    <thetext>&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterPrivateGStreamer.cpp
&gt; +    audiocaps = adoptGRef(gst_caps_new_simple(&quot;audio/x-raw-int&quot;, &quot;channels&quot;, G_TYPE_INT, 1, NULL));

Any specific reason to hardcode channels here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>925590</commentid>
    <comment_count>16</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-09-06 06:58:40 -0700</bug_when>
    <thetext>Jonathon, do you plan to continue work on this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>925621</commentid>
    <comment_count>17</comment_count>
    <who name="Jonathon Jongsma (jonner)">jonathon</who>
    <bug_when>2013-09-06 09:18:20 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Jonathon, do you plan to continue work on this?

I probably won&apos;t have time to continue this, but probably somebody else from Collabora will pick it up eventually.  cc-ing Danilo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>934949</commentid>
    <comment_count>18</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-10-01 02:49:40 -0700</bug_when>
    <thetext>Since no one else showed interest for this I&apos;m picking it up...

The patch needs some more work to cope with the latest mediastream changes done at WebCore level. I&apos;ll also remove gst 0.10 support from this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941820</commentid>
    <comment_count>19</comment_count>
      <attachid>214731</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-10-21 05:48:20 -0700</bug_when>
    <thetext>Created attachment 214731
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942358</commentid>
    <comment_count>20</comment_count>
      <attachid>214731</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-10-22 10:54:23 -0700</bug_when>
    <thetext>Comment on attachment 214731
Patch

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

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterGStreamer.cpp:56
&gt; +    static bool registered = false;
&gt; +    if (!registered) {
&gt; +        registered = true;
&gt; +        MediaStreamCenter::setSharedStreamCenter(&amp;center);
&gt; +    }

This shouldn&apos;t be necessary, setSharedStreamCenter() is only needed if you want to use something other than the center returned by MediaStreamCenter::platformCenter.

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterGStreamer.cpp:86
&gt; +        // TODO: verify constraints according to registered

We usually use FIXME instead of TODO. Even better if it includes a bug number ;-).

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterGStreamer.cpp:97
&gt; +        // TODO: verify constraints according to registered

Ditto.

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterPrivateGStreamer.cpp:125
&gt; +    // TODO: implement

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943632</commentid>
    <comment_count>21</comment_count>
      <attachid>215186</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-10-25 09:45:32 -0700</bug_when>
    <thetext>Created attachment 215186
MediaStreamCenter and minimal CentralPipelineUnit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944456</commentid>
    <comment_count>22</comment_count>
      <attachid>215186</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-10-29 10:00:41 -0700</bug_when>
    <thetext>Comment on attachment 215186
MediaStreamCenter and minimal CentralPipelineUnit

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

Looking pretty good, but I have a few general comments.

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:30
&gt; +#include &quot;SourceFactory.h&quot;
&gt; +
&gt; +#include &lt;wtf/MainThread.h&gt;

Extra newline.

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:58
&gt; +    GRefPtr&lt;GstBus&gt; bus = webkitGstPipelineGetBus(GST_PIPELINE(m_pipeline.get()));
&gt; +    if (bus) {
&gt; +        gst_bus_add_signal_watch(bus.get());

Hrm. Is it an error if there&apos;s no bus? Maybe this should be an ASSERT?

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:69
&gt; +    if (bus)
&gt; +        gst_bus_remove_signal_watch(bus.get());

Ditto?

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.cpp:89
&gt; +    GOwnPtr&lt;GError&gt; error;
&gt; +    GOwnPtr&lt;gchar&gt; debug;
&gt; +
&gt; +    switch (GST_MESSAGE_TYPE(message)) {
&gt; +    case GST_MESSAGE_ERROR: {
&gt; +        gst_message_parse_error(message, &amp;error.outPtr(), &amp;debug.outPtr());

You should probably define error and debug in the innermost scope.

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.h:32
&gt; +typedef struct _GstElement GstElement;
&gt; +typedef struct _GstMessage GstMessage;
&gt; +typedef struct _GstPad GstPad;

Unrelated: I wonder if it makes sense to centralize the gst typedefs somewhere.

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.h:47
&gt; +    gboolean handleMessage(GstMessage*);

I think it&apos;s fine to have this return a bool.

&gt; Source/WebCore/platform/mediastream/gstreamer/CentralPipelineUnit.h:57
&gt; +        Source() : m_sourceElement(0), m_sourcePad(0), m_sourceFactory(0), m_removeWhenNotUsed(true) { }
&gt; +        Source(GRefPtr&lt;GstElement&gt; sourceElement, GRefPtr&lt;GstPad&gt; sourcePad, SourceFactory* sourceFactory, bool removeWhenNotUsed) : m_sourceElement(sourceElement), m_sourcePad(sourcePad), m_sourceFactory(sourceFactory), m_removeWhenNotUsed(removeWhenNotUsed) { }
&gt; +

I think it might be more readable to use WebKit style here. GRefPtrs do not need to be initialized to zero. The default constructor assigns null.

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterGStreamer.cpp:64
&gt; +void MediaStreamCenterGStreamer::validateRequestConstraints(PassRefPtr&lt;MediaStreamCreationClient&gt; prpClient, PassRefPtr&lt;MediaConstraints&gt; audioConstraints, PassRefPtr&lt;MediaConstraints&gt; videoConstraints)

videoConstraints in unused here.

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterGStreamer.cpp:105
&gt; +bool MediaStreamCenterGStreamer::getMediaStreamTrackSources(PassRefPtr&lt;MediaStreamTrackSourcesRequestClient&gt; client)

client is unused here.

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterPrivateGStreamer.cpp:42
&gt; +    GRefPtr&lt;GstElement&gt; deviceSrc;
&gt; +    GRefPtr&lt;GstElement&gt; autoSrc = gst_element_factory_make(elementName, 0);
&gt; +    if (!autoSrc)
&gt; +        return deviceSrc;

deviceSrc is null here, so just return null.

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterPrivateGStreamer.cpp:46
&gt; +    GstChildProxy* childProxy = GST_CHILD_PROXY(autoSrc.get());
&gt; +    if (!childProxy)
&gt; +        return deviceSrc;

Ditto.

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterPrivateGStreamer.cpp:50
&gt; +        return deviceSrc;

Ditto.

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterPrivateGStreamer.cpp:52
&gt; +    if (gst_child_proxy_get_children_count(childProxy))

Move the declaration of deviceSrc above this line. I recommend the names deviceSource and audioSource. It&apos;s the right thing to use &quot;source&quot; because the name of the method is findDeviceSource.

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterPrivateGStreamer.cpp:67
&gt; +    String strFactoryName(factoryName.get());

You probably want to be converting from UTF8 and be using StringBuilder.

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterPrivateGStreamer.cpp:73
&gt; +    g_object_get(source, &quot;device-name&quot;, &amp;deviceName.outPtr(), NULL);

Can NULL be nullptr here?

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterPrivateGStreamer.cpp:105
&gt; +    else
&gt; +        ASSERT_NOT_REACHED();

There is no else. :) Probably better to do:

switch (type) {
case Audio:
case Video:
}

so that the compiler can give an error if a new type is added.

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterPrivateGStreamer.cpp:118
&gt; +    LOG_MEDIA_MESSAGE(&quot;Registering source factory for source with id=%s&quot;, id.ascii().data());

utf8() instead of ascii?

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterPrivateGStreamer.cpp:126
&gt; +    return 0;

nullptr?

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterPrivateGStreamer.cpp:137
&gt; +    return 0;

Can this be nullptr?

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterPrivateGStreamer.h:29
&gt; +

Extra newline here.

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterPrivateGStreamer.h:82
&gt; +    // SourceFactory

What&apos;s the purpose of the comment here?

&gt; Source/WebCore/platform/mediastream/gstreamer/SourceFactory.h:43
&gt; +class SourceFactory {
&gt; +    WTF_MAKE_NONCOPYABLE(SourceFactory);
&gt; +public:
&gt; +    SourceFactory() { }
&gt; +    virtual GRefPtr&lt;GstElement&gt; createSource(const String&amp; sourceId, GRefPtr&lt;GstPad&gt;&amp; srcPad) = 0;
&gt; +
&gt; +protected:
&gt; +    virtual ~SourceFactory() { }
&gt; +};
&gt; +

Are there going to be multiple implementations of this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944913</commentid>
    <comment_count>23</comment_count>
      <attachid>215511</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-10-30 08:58:16 -0700</bug_when>
    <thetext>Created attachment 215511
MediaStreamCenter and minimal CentralPipelineUnit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944916</commentid>
    <comment_count>24</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-10-30 09:00:21 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/gstreamer/SourceFactory.h:43
&gt; &gt; +class SourceFactory {
&gt; &gt; +    WTF_MAKE_NONCOPYABLE(SourceFactory);
&gt; &gt; +public:
&gt; &gt; +    SourceFactory() { }
&gt; &gt; +    virtual GRefPtr&lt;GstElement&gt; createSource(const String&amp; sourceId, GRefPtr&lt;GstPad&gt;&amp; srcPad) = 0;
&gt; &gt; +
&gt; &gt; +protected:
&gt; &gt; +    virtual ~SourceFactory() { }
&gt; &gt; +};
&gt; &gt; +
&gt; 
&gt; Are there going to be multiple implementations of this?

It&apos;s a remnant from a previous branch that I think is indeed used only in one place. So this made me think of a grand refactoring in which the SourceFactory disappeared :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945030</commentid>
    <comment_count>25</comment_count>
      <attachid>215527</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-10-30 11:03:32 -0700</bug_when>
    <thetext>Created attachment 215527
MediaStreamCenter and minimal CentralPipelineUnit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945432</commentid>
    <comment_count>26</comment_count>
      <attachid>215527</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-10-31 00:36:40 -0700</bug_when>
    <thetext>Comment on attachment 215527
MediaStreamCenter and minimal CentralPipelineUnit

Attachment 215527 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/17028380</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945464</commentid>
    <comment_count>27</comment_count>
      <attachid>215634</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-10-31 02:08:51 -0700</bug_when>
    <thetext>Created attachment 215634
MediaStreamCenter and minimal CentralPipelineUnit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945533</commentid>
    <comment_count>28</comment_count>
      <attachid>215634</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-10-31 08:31:10 -0700</bug_when>
    <thetext>Comment on attachment 215634
MediaStreamCenter and minimal CentralPipelineUnit

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

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterGStreamer.cpp:91
&gt; +            audioSource-&gt;reset();

Do you really want to reset the source here? What if it is already in use by another stream?

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterGStreamer.cpp:92
&gt; +            audioSource-&gt;setReadyState(MediaStreamSource::Live);

Shouldn&apos;t this be done by the source when it actually begins to provide data?

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterGStreamer.cpp:103
&gt; +            videoSource-&gt;reset();
&gt; +            videoSource-&gt;setReadyState(MediaStreamSource::Live);

Ditto x 2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945535</commentid>
    <comment_count>29</comment_count>
      <attachid>215634</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-10-31 08:46:09 -0700</bug_when>
    <thetext>Comment on attachment 215634
MediaStreamCenter and minimal CentralPipelineUnit

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

&gt; Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterPrivateGStreamer.cpp:108
&gt; +    default:
&gt; +        ASSERT_NOT_REACHED();

No can omit the default case actually and that will get us the compilation error if another one is ever added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947151</commentid>
    <comment_count>30</comment_count>
      <attachid>216036</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-11-05 07:11:47 -0800</bug_when>
    <thetext>Created attachment 216036
MediaStreamCenter and minimal CentralPipelineUnit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947152</commentid>
    <comment_count>31</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-11-05 07:15:06 -0800</bug_when>
    <thetext>Sorry I forgot to address Eric&apos;s comments. I think the reset() call is indeed not needed but the setReadyState() call would be ok because the gst elements are added in a live pipeline.

Will update the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006355</commentid>
    <comment_count>32</comment_count>
      <attachid>230757</attachid>
    <who name="Seongjun Kim">isair</who>
    <bug_when>2014-05-03 11:52:24 -0700</bug_when>
    <thetext>Created attachment 230757
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044263</commentid>
    <comment_count>33</comment_count>
      <attachid>216036</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2014-10-27 10:35:58 -0700</bug_when>
    <thetext>Comment on attachment 216036
MediaStreamCenter and minimal CentralPipelineUnit

Hopefully with OpenWebRTC there won&apos;t be any need for such a CentralPipelineUnit thing :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075555</commentid>
    <comment_count>34</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2015-03-09 02:46:17 -0700</bug_when>
    <thetext>Sorry I made a mistake re-titling this bug, it doesn&apos;t make sense to hijack this bug with the OpenWebRTC approach, the comments posted here wouldn&apos;t make sense anymore.

Instead I&apos;ll just close this bug, if anyone wants to provide a pure-GStreamer-based MediaStreamCenter in the future they can reopen this bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188936</attachid>
            <date>2013-02-18 13:27:21 -0800</date>
            <delta_ts>2013-03-13 08:30:23 -0700</delta_ts>
            <desc>Implement core mediastream functionality for gstreamer</desc>
            <filename>bug-110150-20130218152345.patch</filename>
            <type>text/plain</type>
            <size>56443</size>
            <attacher name="Jonathon Jongsma (jonner)">jonathon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzMjQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGNhMDEx
OTEyZTQxNWRiZDBlZGQ5ODk0MDFiNGI3NjYwZDAyMmYwMTkuLmU0Yzc4ZGJmZjBlZDkyM2RiMWI0
Njc3NzIxZGM0OTIzYzdhNDg1ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xMjYsNiArMTI2
LDcgQEAgd2ViY29yZWd0a19jcHBmbGFncyArPSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ayBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvZW5jaGFudAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA1NjAxOWUzYjMy
OWRkMWU2MjhjMWY5ZDBlMjFlYmIwMDZmY2JkN2Y2Li45YzFiNzQxYTczYWEwOWIxZDA3NTQ3MTlk
NjhmMzlkZDFjNjI0ZTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU4MTQs
OCArNTgxNCwxMyBAQCB3ZWJjb3JlX3BsYXRmb3JtX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3Iu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUlRDU3RhdHNSZXF1ZXN0
LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JUQ1ZvaWRSZXF1ZXN0
LmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9DZW50
cmFsUGlwZWxpbmVVbml0LmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9DZW50cmFsUGlwZWxpbmVVbml0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlh
U3RyZWFtQ2VudGVyR1N0cmVhbWVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIuaCBcCisJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFt
Q2VudGVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9Tb3VyY2VGYWN0b3J5LmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21vY2svRGV2aWNlTW90aW9uQ2xpZW50TW9jay5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21vY2svRGV2aWNlTW90aW9uQ2xpZW50TW9jay5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tb2NrL0RldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jay5jcHAgXApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0NlbnRy
YWxQaXBlbGluZVVuaXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0NlbnRyYWxQaXBlbGluZVVuaXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNhOWM0NmUyMDdh
MzAxYjFjM2IxNjI3N2MzMDc5OTQwNDMzZTY5NmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5p
dC5jcHAKQEAgLTAsMCArMSw3MDEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIENvbGxh
Ym9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQor
CisjaW5jbHVkZSAiQ2VudHJhbFBpcGVsaW5lVW5pdC5oIgorCisjaW5jbHVkZSAiTG9nZ2luZy5o
IgorI2luY2x1ZGUgIlNvdXJjZUZhY3RvcnkuaCIKKworI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBnYm9vbGVhbiBt
ZXNzYWdlQ2FsbGJhY2soR3N0QnVzKiwgR3N0TWVzc2FnZSosIGdwb2ludGVyIGRhdGEpOworc3Rh
dGljIFN0cmluZyBnZW5lcmF0ZUVsZW1lbnRQYWRJZChHc3RFbGVtZW50KiwgR3N0UGFkKik7CisK
K0NlbnRyYWxQaXBlbGluZVVuaXQmIGNlbnRyYWxQaXBlbGluZVVuaXQoKQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDZW50cmFsUGlwZWxp
bmVVbml0LCBpbnN0YW5jZSwgKCkpOworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworQ2VudHJh
bFBpcGVsaW5lVW5pdDo6Q2VudHJhbFBpcGVsaW5lVW5pdCgpCit7CisgICAgR093blB0cjxHRXJy
b3I+IGVycm9yOworICAgIGdib29sZWFuIGdzdEluaXRpYWxpemVkID0gZ3N0X2luaXRfY2hlY2so
MCwgMCwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChnc3RJbml0aWFsaXplZCk7CisK
KyAgICBtX3BpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldygibWVkaWFzdHJlYW1fcGlwZWxpbmUi
KTsKKyAgICBHUmVmUHRyPEdzdEJ1cz4gYnVzID0gYWRvcHRHUmVmKGdzdF9waXBlbGluZV9nZXRf
YnVzKEdTVF9QSVBFTElORShtX3BpcGVsaW5lLmdldCgpKSkpOworICAgIGlmIChidXMpIHsKKyAg
ICAgICAgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoKGJ1cy5nZXQoKSk7CisjaWZkZWYgR1NUX0FQ
SV9WRVJTSU9OXzEKKyAgICAgICAgZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyKGJ1cy5nZXQoKSwg
Z3N0X2J1c19zeW5jX3NpZ25hbF9oYW5kbGVyLCAwLCAwKTsKKyNlbHNlCisgICAgICAgIGdzdF9i
dXNfc2V0X3N5bmNfaGFuZGxlcihidXMuZ2V0KCksIGdzdF9idXNfc3luY19zaWduYWxfaGFuZGxl
ciwgMCk7CisjZW5kaWYKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChidXMuZ2V0KCksICJzeW5j
LW1lc3NhZ2UiLCBHX0NBTExCQUNLKG1lc3NhZ2VDYWxsYmFjayksIHRoaXMpOworICAgIH0KKyAg
ICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1BMQVlJ
TkcpOworfQorCitDZW50cmFsUGlwZWxpbmVVbml0Ojp+Q2VudHJhbFBpcGVsaW5lVW5pdCgpCit7
Cit9CisKK3ZvaWQgQ2VudHJhbFBpcGVsaW5lVW5pdDo6cmVnaXN0ZXJTb3VyY2VGYWN0b3J5KFNv
dXJjZUZhY3RvcnkqIGZhY3RvcnksIGNvbnN0IFN0cmluZyYgc291cmNlSWQpCit7CisgICAgbV9z
b3VyY2VGYWN0b3J5TWFwLmFkZChzb3VyY2VJZCwgZmFjdG9yeSk7Cit9CisKK3ZvaWQgQ2VudHJh
bFBpcGVsaW5lVW5pdDo6ZGVyZWdpc3RlclNvdXJjZUZhY3RvcnkoY29uc3QgU3RyaW5nJiBzb3Vy
Y2VJZCkKK3sKKyAgICBtX3NvdXJjZUZhY3RvcnlNYXAucmVtb3ZlKHNvdXJjZUlkKTsKK30KKwor
Ym9vbCBDZW50cmFsUGlwZWxpbmVVbml0Ojpjb25uZWN0QW5kR2V0U291cmNlRWxlbWVudChjb25z
dCBTdHJpbmcmIHNvdXJjZUlkLCBHc3RFbGVtZW50Kiogc291cmNlRWxlbWVudCwgR3N0UGFkKiog
c291cmNlUGFkKQoreworICAgIExPRyhNZWRpYSwgIkNvbm5lY3RpbmcgdG8gc291cmNlIGVsZW1l
bnQgJXMiLCBzb3VyY2VJZC5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICBDZW50cmFsUGlwZWxpbmVV
bml0OjpQaXBlbGluZU1hcDo6aXRlcmF0b3Igc291cmNlSXQgPSBtX3BpcGVsaW5lTWFwLmZpbmQo
c291cmNlSWQpOworICAgIGlmIChzb3VyY2VJdCAhPSBtX3BpcGVsaW5lTWFwLmVuZCgpKSB7Cisg
ICAgICAgIFNvdXJjZSYgc291cmNlID0gc291cmNlSXQtPnZhbHVlOworICAgICAgICBMT0coTWVk
aWEsICJTb3VyY2UgZWxlbWVudCAlcyBhbHJlYWR5IGluIHBpcGVsaW5lLCB1c2luZyBpdC4iLCBz
b3VyY2VJZC5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICpzb3VyY2VFbGVtZW50ID0gc291cmNl
Lm1fc291cmNlRWxlbWVudC5nZXQoKTsKKyAgICAgICAgKnNvdXJjZVBhZCA9IHNvdXJjZS5tX3Nv
dXJjZVBhZC5nZXQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgQ2VudHJh
bFBpcGVsaW5lVW5pdDo6U291cmNlRmFjdG9yeU1hcDo6aXRlcmF0b3Igc291cmNlRmFjdG9yeUl0
ID0gbV9zb3VyY2VGYWN0b3J5TWFwLmZpbmQoc291cmNlSWQpOworICAgIGlmIChzb3VyY2VGYWN0
b3J5SXQgIT0gbV9zb3VyY2VGYWN0b3J5TWFwLmVuZCgpKSB7CisgICAgICAgIExPRyhNZWRpYSwg
IkZvdW5kIGEgU291cmNlRmFjdG9yeS4gQ3JlYXRpbmcgc291cmNlIGVsZW1lbnQgJXMiLCBzb3Vy
Y2VJZC5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIFNvdXJjZUZhY3RvcnkqIHNvdXJjZUZhY3Rv
cnkgPSBzb3VyY2VGYWN0b3J5SXQtPnZhbHVlOworICAgICAgICAqc291cmNlRWxlbWVudCA9IHNv
dXJjZUZhY3RvcnktPmNyZWF0ZVNvdXJjZShzb3VyY2VJZCwgc291cmNlUGFkKTsKKyAgICAgICAg
aWYgKCEqc291cmNlRWxlbWVudCkgeworICAgICAgICAgICAgTE9HKE1lZGlhLCAiRVJST1IsIHVu
YWJsZSB0byBjcmVhdGUgc291cmNlIGVsZW1lbnQiKTsKKyAgICAgICAgICAgICpzb3VyY2VFbGVt
ZW50ID0gMDsKKyAgICAgICAgICAgICpzb3VyY2VQYWQgPSAwOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCEqc291cmNlUGFkKSB7CisgICAgICAg
ICAgICBMT0coTWVkaWEsICJTb3VyY2VGYWN0b3J5IGNvdWxkIG5vdCBjcmVhdGUgYSBzb3VyY2Ug
cGFkLCB0cnlpbmcgdGhlIGVsZW1lbnQgc3RhdGljIFwic3JjXCIgcGFkIik7CisgICAgICAgICAg
ICAqc291cmNlUGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoKnNvdXJjZUVsZW1lbnQs
ICJzcmMiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghKnNvdXJjZVBhZCkgeworICAgICAg
ICAgICAgTE9HKE1lZGlhLCAiRVJST1IsIHVuYWJsZSB0byByZXRyaWV2ZSBlbGVtZW50IHNvdXJj
ZSBwYWQiKTsKKyAgICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYoKnNvdXJjZUVsZW1lbnQpOwor
ICAgICAgICAgICAgKnNvdXJjZUVsZW1lbnQgPSAwOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisKKyAgICAgICAgR3N0RWxlbWVudCogdGVlID0gZ3N0X2VsZW1lbnRfZmFj
dG9yeV9tYWtlKCJ0ZWUiLCBOVUxMKTsKKyAgICAgICAgaWYgKCF0ZWUpIHsKKyAgICAgICAgICAg
IExPRyhNZWRpYSwgIkVSUk9SLCBHb3Qgbm8gdGVlIGVsZW1lbnQiKTsKKyAgICAgICAgICAgIGdz
dF9vYmplY3RfdW5yZWYoKnNvdXJjZUVsZW1lbnQpOworICAgICAgICAgICAgZ3N0X29iamVjdF91
bnJlZigqc291cmNlUGFkKTsKKyAgICAgICAgICAgICpzb3VyY2VFbGVtZW50ID0gMDsKKyAgICAg
ICAgICAgICpzb3VyY2VQYWQgPSAwOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisKKyAgICAgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkp
LCAqc291cmNlRWxlbWVudCwgdGVlLCBOVUxMKTsKKworICAgICAgICBnc3RfZWxlbWVudF9zeW5j
X3N0YXRlX3dpdGhfcGFyZW50KCpzb3VyY2VFbGVtZW50KTsKKyAgICAgICAgZ3N0X2VsZW1lbnRf
c3luY19zdGF0ZV93aXRoX3BhcmVudCh0ZWUpOworCisgICAgICAgIEdzdFBhZCogc2lua3BhZCA9
IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHRlZSwgInNpbmsiKTsKKyAgICAgICAgZ3N0X3Bh
ZF9saW5rKCpzb3VyY2VQYWQsIHNpbmtwYWQpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgQ2VudHJhbFBpcGVsaW5lVW5pdDo6Y29ubmVjdFRvU291cmNlKGNvbnN0IFN0cmlu
ZyYgc291cmNlSWQsIEdzdEVsZW1lbnQqIHNpbmssIEdzdFBhZCogc2lua3BhZCkKK3sKKyAgICBM
T0coTWVkaWEsICJDb25uZWN0aW5nIHRvIHNvdXJjZSB3aXRoIGlkPSVzLCBzaW5rPSVwLCBzaW5r
cGFkPSVwIiwgc291cmNlSWQuYXNjaWkoKS5kYXRhKCksIHNpbmssIHNpbmtwYWQpOworCisgICAg
aWYgKCFzaW5rIHx8IHNvdXJjZUlkLmlzRW1wdHkoKSkgeworICAgICAgICBMT0coTWVkaWEsICJF
UlJPUiwgTm8gc2luayBwcm92aWRlZCBvciBlbXB0eSBzb3VyY2UgaWQiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghc2lua3BhZCkgeworICAgICAgICBMT0coTWVk
aWEsICJObyBwYWQgd2FzIGdpdmVuIGFzIGFyZ3VtZW50LCB0cnlpbmcgdGhlIGVsZW1lbnQgc3Rh
dGljIFwic2lua1wiIHBhZC4iKTsKKyAgICAgICAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9z
dGF0aWNfcGFkKHNpbmssICJzaW5rIik7CisgICAgICAgIGlmICghc2lua3BhZCkgeworICAgICAg
ICAgICAgTE9HKE1lZGlhLCAiRVJST1IsIFVuYWJsZSB0byByZXRyaWV2ZSBlbGVtZW50IHNpbmsg
cGFkIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBHc3RFbGVtZW50KiBzb3VyY2VFbGVtZW50ID0gMDsKKyAgICBHc3RQYWQqIHNvdXJjZVBhZCA9
IDA7CisKKyAgICBib29sIGhhdmVTb3VyY2VzID0gY29ubmVjdEFuZEdldFNvdXJjZUVsZW1lbnQo
c291cmNlSWQsICZzb3VyY2VFbGVtZW50LCAmc291cmNlUGFkKTsKKyAgICBpZiAoIXNvdXJjZUVs
ZW1lbnQpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiRVJST1IsIFVuYWJsZSB0byBnZXQgc291cmNl
IGVsZW1lbnQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEdSZWZQdHI8
R3N0RWxlbWVudD4gcXVldWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInF1ZXVlIiwgTlVM
TCk7CisgICAgaWYgKCFxdWV1ZSkgeworICAgICAgICBMT0coTWVkaWEsICJFUlJPUiwgR290IG5v
IHF1ZXVlIGVsZW1lbnQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEdS
ZWZQdHI8R3N0RWxlbWVudD4gc2lua1BhcmVudCA9IGFkb3B0R1JlZihHU1RfRUxFTUVOVChnc3Rf
ZWxlbWVudF9nZXRfcGFyZW50KHNpbmspKSk7CisgICAgaWYgKCFzaW5rUGFyZW50KSB7CisgICAg
ICAgIExPRyhNZWRpYSwgIlNpbmsgbm90IGluIHBpcGVsaW5lLCBhZGRpbmcuIik7CisgICAgICAg
IGdzdF9iaW5fYWRkKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIHNpbmspOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmIChzaW5rUGFyZW50LmdldCgpICE9IG1fcGlwZWxpbmUuZ2V0KCkpIHsK
KyAgICAgICAgICAgIExPRyhNZWRpYSwgIkVSUk9SLCBTaW5rIGFscmVhZHkgYWRkZWQgdG8gYW5v
dGhlciBlbGVtZW50LiBQaXBlbGluZSBpcyBub3cgYnJva2VuISIpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTiht
X3BpcGVsaW5lLmdldCgpKSwgcXVldWUuZ2V0KCkpOworCisgICAgR1JlZlB0cjxHc3RQYWQ+IHRl
ZVNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfcGVlcihzb3VyY2VQYWQpKTsKKyAgICBH
UmVmUHRyPEdzdEVsZW1lbnQ+IHRlZSA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9wYXJlbnRfZWxl
bWVudCh0ZWVTaW5rUGFkLmdldCgpKSk7CisKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dp
dGhfcGFyZW50KHNpbmspOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQo
cXVldWUuZ2V0KCkpOworCisjaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAgY29uc3QgZ2No
YXIqIHBhZFRlbXBsYXRlID0gInNyYyVkIjsKKyNlbHNlCisgICAgY29uc3QgZ2NoYXIqIHBhZFRl
bXBsYXRlID0gInNyY18ldSI7CisjZW5kaWYKKyAgICBHUmVmUHRyPEdzdFBhZD4gdGVlU3JjUGFk
ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCh0ZWUuZ2V0KCksIHBhZFRl
bXBsYXRlKSk7CisgICAgR1JlZlB0cjxHc3RQYWQ+IHF1ZXVlU2lua1BhZCA9IGFkb3B0R1JlZihn
c3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChxdWV1ZS5nZXQoKSwgInNpbmsiKSk7CisgICAgR1Jl
ZlB0cjxHc3RQYWQ+IHF1ZXVlU3JjUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0
aWNfcGFkKHF1ZXVlLmdldCgpLCAic3JjIikpOworICAgIGdzdF9wYWRfbGluayh0ZWVTcmNQYWQu
Z2V0KCksIHF1ZXVlU2lua1BhZC5nZXQoKSk7CisgICAgZ3N0X3BhZF9saW5rKHF1ZXVlU3JjUGFk
LmdldCgpLCBzaW5rcGFkKTsKKworICAgIGlmICghaGF2ZVNvdXJjZXMpIHsKKyAgICAgICAgbV9w
aXBlbGluZU1hcC5hZGQoc291cmNlSWQsIFNvdXJjZShzb3VyY2VFbGVtZW50LCBzb3VyY2VQYWQs
IDAsIHRydWUpKTsKKyAgICAgICAgbV9zb3VyY2VJZExvb2t1cE1hcC5hZGQoZ2VuZXJhdGVFbGVt
ZW50UGFkSWQoc291cmNlRWxlbWVudCwgc291cmNlUGFkKSwgc291cmNlSWQpOworICAgIH0KKwor
ICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUExB
WUlORyk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDZW50cmFsUGlwZWxpbmVVbml0
OjpkaXNjb25uZWN0RnJvbVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlkLCBHc3RFbGVtZW50
KiBzaW5rLCBHc3RQYWQqIHNpbmtwYWQpCit7CisgICAgTE9HKE1lZGlhLCAiRGlzY29ubmVjdGlu
ZyBmcm9tIHNvdXJjZSB3aXRoIGlkPSVzLCBzaW5rPSVwLCBzaW5rcGFkPSVwIiwgc291cmNlSWQu
YXNjaWkoKS5kYXRhKCksIHNpbmssIHNpbmtwYWQpOworCisgICAgaWYgKCFzaW5rIHx8IHNvdXJj
ZUlkLmlzRW1wdHkoKSkgeworICAgICAgICBMT0coTWVkaWEsICJFUlJPUiwgTm8gc2luayBwcm92
aWRlZCBvciBlbXB0eSBzb3VyY2UgaWQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIFBpcGVsaW5lTWFwOjppdGVyYXRvciBzb3VyY2VJdCA9IG1fcGlwZWxpbmVNYXAuZmlu
ZChzb3VyY2VJZCk7CisgICAgaWYgKHNvdXJjZUl0ID09IG1fcGlwZWxpbmVNYXAuZW5kKCkpIHsK
KyAgICAgICAgTE9HKE1lZGlhLCAiQ291bGQgbm90IGZpbmQgc291cmNlIHdpdGggaWQ9JXMiLCBz
b3VyY2VJZC5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBpZiAoIXNpbmtwYWQpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiTm8gcGFkIHdhcyBnaXZl
biBhcyBhcmd1bWVudCwgdHJ5aW5nIHRoZSBlbGVtZW50IHN0YXRpYyBcInNpbmtcIiBwYWQuIik7
CisgICAgICAgIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChzaW5rLCAic2lu
ayIpOworICAgICAgICBpZiAoIXNpbmtwYWQpIHsKKyAgICAgICAgICAgIExPRyhNZWRpYSwgIkVS
Uk9SLCBVbmFibGUgdG8gcmV0cmlldmUgZWxlbWVudCBzaW5rIHBhZCIpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgR1JlZlB0cjxHc3RQYWQ+IGxR
dWV1ZVNyY1BhZCA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9wZWVyKHNpbmtwYWQpKTsKKyAgICBH
UmVmUHRyPEdzdEVsZW1lbnQ+IGxRdWV1ZSA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9wYXJlbnRf
ZWxlbWVudChsUXVldWVTcmNQYWQuZ2V0KCkpKTsKKyAgICBHUmVmUHRyPEdzdFBhZD4gbFF1ZXVl
U2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChsUXVldWUuZ2V0
KCksICJzaW5rIikpOworICAgIEdSZWZQdHI8R3N0UGFkPiBsVGVlU3JjUGFkID0gYWRvcHRHUmVm
KGdzdF9wYWRfZ2V0X3BlZXIobFF1ZXVlU2lua1BhZC5nZXQoKSkpOworICAgIEdSZWZQdHI8R3N0
RWxlbWVudD4gbFRlZSA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudChsVGVl
U3JjUGFkLmdldCgpKSk7CisgICAgR1JlZlB0cjxHc3RQYWQ+IGxUZWVTaW5rUGFkID0gYWRvcHRH
UmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGxUZWUuZ2V0KCksICJzaW5rIikpOworICAg
IEdSZWZQdHI8R3N0UGFkPiBzb3VyY2VTcmNQYWQgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfcGVl
cihsVGVlU2lua1BhZC5nZXQoKSkpOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gc291cmNlRWxl
bWVudCA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudChzb3VyY2VTcmNQYWQu
Z2V0KCkpKTsKKworICAgIC8vIGRpc2Nvbm5lY3QgcGFkIGFuZCByZW1vdmUgdGhlIHNpbmsgaWYg
aXQgaGFzIG5vIG1vcmUgcGFkcy4KKyAgICBndWludCBudW1Tb3VyY2VUZWVQYWRzID0gZGlzY29u
bmVjdFNpbmtGcm9tVGVlKGxUZWUuZ2V0KCksIHNpbmssIHNpbmtwYWQpOworICAgIGlmICghbnVt
U291cmNlVGVlUGFkcykKKyAgICAgICAgcmVtb3ZlU291cmNlRXh0ZW5zaW9uRnJvbUJlaGluZChz
b3VyY2VFbGVtZW50LmdldCgpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitHc3RFbGVtZW50
KiBDZW50cmFsUGlwZWxpbmVVbml0OjpwaXBlbGluZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cGlwZWxpbmUuZ2V0KCk7Cit9CisKK2d1aW50IENlbnRyYWxQaXBlbGluZVVuaXQ6OmRpc2Nvbm5l
Y3RTaW5rRnJvbVBpcGVsaW5lKEdzdEVsZW1lbnQqIHNpbmspCit7CisgICAgZ3N0X2VsZW1lbnRf
c2V0X3N0YXRlKHNpbmssIEdTVF9TVEFURV9OVUxMKTsKKyAgICBnc3RfYmluX3JlbW92ZShHU1Rf
QklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBzaW5rKTsKKyAgICBHUmVmUHRyPEdzdFBhZD4gdW5saW5r
ZWRRdWV1ZVNyY1BhZCA9IGdzdF9iaW5fZmluZF91bmxpbmtlZF9wYWQoR1NUX0JJTihtX3BpcGVs
aW5lLmdldCgpKSwgR1NUX1BBRF9TUkMpOworCisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBxdWV1
ZSA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudCh1bmxpbmtlZFF1ZXVlU3Jj
UGFkLmdldCgpKSk7CisgICAgR1JlZlB0cjxHc3RQYWQ+IHF1ZXVlU2lua1BhZCA9IGFkb3B0R1Jl
Zihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChxdWV1ZS5nZXQoKSwgInNpbmsiKSk7CisgICAg
R1JlZlB0cjxHc3RQYWQ+IHRlZVNyY1BhZCA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9wZWVyKHF1
ZXVlU2lua1BhZC5nZXQoKSkpOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gdGVlID0gYWRvcHRH
UmVmKGdzdF9wYWRfZ2V0X3BhcmVudF9lbGVtZW50KHRlZVNyY1BhZC5nZXQoKSkpOworCisgICAg
Z3N0X2VsZW1lbnRfc2V0X3N0YXRlKHF1ZXVlLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7CisgICAg
Z3N0X3BhZF9zZXRfYWN0aXZlKHRlZVNyY1BhZC5nZXQoKSwgRkFMU0UpOworICAgIGdzdF9iaW5f
cmVtb3ZlKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIHF1ZXVlLmdldCgpKTsKKworICAgIGdz
dF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQodGVlLmdldCgpLCB0ZWVTcmNQYWQuZ2V0KCkp
OworICAgIExPRyhNZWRpYSwgInJlbW92aW5nIHN0dWZmIGRvbmUiKTsKKworICAgIGd1aW50IHNy
Y3BhZHMgPSAtMTsKKyAgICBnX29iamVjdF9nZXQodGVlLmdldCgpLCAibnVtLXNyYy1wYWRzIiwg
JnNyY3BhZHMsIE5VTEwpOworCisgICAgcmV0dXJuIHNyY3BhZHM7Cit9CisKK3ZvaWQgQ2VudHJh
bFBpcGVsaW5lVW5pdDo6cmVtb3ZlU291cmNlRXh0ZW5zaW9uRnJvbUJlaGluZChHc3RFbGVtZW50
KiBzb3VyY2VFeHRlbnNpb24pCit7CisgICAgLy8gR2V0IHJpZ2h0IGhhbmQgc2lkZSBlbGVtZW50
cworICAgIEdSZWZQdHI8R3N0UGFkPiBzZVNyY1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9n
ZXRfc3RhdGljX3BhZChzb3VyY2VFeHRlbnNpb24sICJzcmMiKSk7CisgICAgR1JlZlB0cjxHc3RQ
YWQ+IHJUZWVTaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X3BlZXIoc2VTcmNQYWQuZ2V0
KCkpKTsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IHJUZWUgPSBhZG9wdEdSZWYoZ3N0X3BhZF9n
ZXRfcGFyZW50X2VsZW1lbnQoclRlZVNpbmtQYWQuZ2V0KCkpKTsKKworICAgIC8vIEdldCBsZWZ0
IGhhbmQgc2lkZSBlbGVtZW50cworICAgIEdSZWZQdHI8R3N0UGFkPiBzZVNpbmtQYWQgPSBhZG9w
dEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoc291cmNlRXh0ZW5zaW9uLCAic2luayIp
KTsKKyAgICBpZiAoIXNlU2lua1BhZCkgeworICAgICAgICBMT0coTWVkaWEsICJzb3VyY2UgZXh0
ZW5zaW9uIGRpZCBub3QgaGF2ZSBhbnkgc2luayBwYWRzLiBBc3N1bWluZyBpdCdzIGEgc291cmNl
LiBDaGVjayBpZiB3ZSBzaG91bGQgcmVtb3ZlIGl0LiIpOworCisgICAgICAgIC8vIE5lZWQgdG8g
aXRlcmF0ZSBvciBzb21ldGhpbmcuLgorICAgICAgICBTb3VyY2VJZExvb2t1cE1hcDo6aXRlcmF0
b3Igc2lkSXQgPSBtX3NvdXJjZUlkTG9va3VwTWFwLmZpbmQoZ2VuZXJhdGVFbGVtZW50UGFkSWQo
c291cmNlRXh0ZW5zaW9uLCBzZVNyY1BhZC5nZXQoKSkpOworICAgICAgICBpZiAoc2lkSXQgIT0g
bV9zb3VyY2VJZExvb2t1cE1hcC5lbmQoKSkgeworICAgICAgICAgICAgU3RyaW5nIHNvdXJjZUlk
ID0gc2lkSXQtPnZhbHVlOworCisgICAgICAgICAgICBQaXBlbGluZU1hcDo6aXRlcmF0b3Igc2lJ
dCA9IG1fcGlwZWxpbmVNYXAuZmluZChzb3VyY2VJZCk7CisgICAgICAgICAgICBpZiAoc2lJdCAh
PSBtX3BpcGVsaW5lTWFwLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgU291cmNlIHNvdXJjZUlu
Zm8gPSBzaUl0LT52YWx1ZTsKKworICAgICAgICAgICAgICAgIGlmIChzb3VyY2VJbmZvLm1fcmVt
b3ZlV2hlbk5vdFVzZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgTE9HKE1lZGlhLCAiUmVtb3Zp
bmcgc291cmNlICVwIHdpdGggaWQ9JXMiLCBzb3VyY2VFeHRlbnNpb24sIHNvdXJjZUlkLmFzY2lp
KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKHNv
dXJjZUV4dGVuc2lvbiwgR1NUX1NUQVRFX05VTEwpOworICAgICAgICAgICAgICAgICAgICBnc3Rf
ZWxlbWVudF9zZXRfc3RhdGUoclRlZS5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOworICAgICAgICAg
ICAgICAgICAgICBnc3RfYmluX3JlbW92ZShHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBzb3Vy
Y2VFeHRlbnNpb24pOworICAgICAgICAgICAgICAgICAgICBnc3RfYmluX3JlbW92ZShHU1RfQklO
KG1fcGlwZWxpbmUuZ2V0KCkpLCByVGVlLmdldCgpKTsKKworICAgICAgICAgICAgICAgICAgICBt
X3BpcGVsaW5lTWFwLnJlbW92ZShzb3VyY2VJZCk7CisgICAgICAgICAgICAgICAgICAgIG1fc291
cmNlSWRMb29rdXBNYXAucmVtb3ZlKGdlbmVyYXRlRWxlbWVudFBhZElkKHNvdXJjZUV4dGVuc2lv
biwgc291cmNlSW5mby5tX3NvdXJjZVBhZC5nZXQoKSkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBH
UmVmUHRyPEdzdFBhZD4gbFF1ZXVlU3JjUGFkID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X3BlZXIo
c2VTaW5rUGFkLmdldCgpKSk7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBsUXVldWUgPSBhZG9w
dEdSZWYoZ3N0X3BhZF9nZXRfcGFyZW50X2VsZW1lbnQobFF1ZXVlU3JjUGFkLmdldCgpKSk7Cisg
ICAgR1JlZlB0cjxHc3RQYWQ+IGxRdWV1ZVNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRf
Z2V0X3N0YXRpY19wYWQobFF1ZXVlLmdldCgpLCAic2luayIpKTsKKyAgICBHUmVmUHRyPEdzdFBh
ZD4gbFRlZVNyY1BhZCA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9wZWVyKGxRdWV1ZVNpbmtQYWQu
Z2V0KCkpKTsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGxUZWUgPSBhZG9wdEdSZWYoZ3N0X3Bh
ZF9nZXRfcGFyZW50X2VsZW1lbnQobFRlZVNyY1BhZC5nZXQoKSkpOworICAgIEdSZWZQdHI8R3N0
UGFkPiBsVGVlU2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChs
VGVlLmdldCgpLCAic2luayIpKTsKKyAgICBHUmVmUHRyPEdzdFBhZD4gc291cmNlU3JjUGFkID0g
YWRvcHRHUmVmKGdzdF9wYWRfZ2V0X3BlZXIobFRlZVNpbmtQYWQuZ2V0KCkpKTsKKyAgICBHUmVm
UHRyPEdzdEVsZW1lbnQ+IHNvdXJjZUVsZW1lbnQgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfcGFy
ZW50X2VsZW1lbnQoc291cmNlU3JjUGFkLmdldCgpKSk7CisKKyAgICAvLyByZW1vdmUgc291cmNl
IGV4dGVuc2lvbgorICAgIFN0cmluZyBzb3VyY2VFeHRlbnNpb25BbmRQYWRJZCA9IGdlbmVyYXRl
RWxlbWVudFBhZElkKHNvdXJjZUV4dGVuc2lvbiwgc2VTcmNQYWQuZ2V0KCkpOworICAgIGdzdF9l
bGVtZW50X3NldF9zdGF0ZShyVGVlLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7CisgICAgZ3N0X2Jp
bl9yZW1vdmUoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgclRlZS5nZXQoKSk7CisKKyAgICBn
dWludCBudW1Tb3VyY2VUZWVQYWRzID0gZGlzY29ubmVjdFNpbmtGcm9tVGVlKGxUZWUuZ2V0KCks
IHNvdXJjZUV4dGVuc2lvbiwgMCk7CisgICAgTE9HKE1lZGlhLCAic291cmNlLXRlZSBzb3VyY2Ug
cGFkczogJWQiLCBudW1Tb3VyY2VUZWVQYWRzKTsKKyAgICBpZiAoIW51bVNvdXJjZVRlZVBhZHMp
IHsKKyAgICAgICAgTE9HKE1lZGlhLCAic291cmNlLXRlZSBvZiBzb3VyY2UgZXh0ZW5zaW9uIGRp
ZCBub3QgaGF2ZSBhbnkgc291cmNlIHBhZHMuIFNlZSBpZiB3ZSBzaG91bGQgcmVtb3ZlIGl0LiIp
OworICAgICAgICBTb3VyY2VJZExvb2t1cE1hcDo6aXRlcmF0b3Igc2lkSXQgPSBtX3NvdXJjZUlk
TG9va3VwTWFwLmZpbmQoZ2VuZXJhdGVFbGVtZW50UGFkSWQoc291cmNlRWxlbWVudC5nZXQoKSwg
c291cmNlU3JjUGFkLmdldCgpKSk7CisgICAgICAgIFN0cmluZyBzb3VyY2VJZCA9IHNpZEl0LT52
YWx1ZTsKKyAgICAgICAgUGlwZWxpbmVNYXA6Oml0ZXJhdG9yIHNpSXQgPSBtX3BpcGVsaW5lTWFw
LmZpbmQoc291cmNlSWQpOworICAgICAgICBTb3VyY2Ugc291cmNlSW5mbyA9IHNpSXQtPnZhbHVl
OworICAgICAgICBpZiAoc291cmNlSW5mby5tX3JlbW92ZVdoZW5Ob3RVc2VkKQorICAgICAgICAg
ICAgcmVtb3ZlU291cmNlRXh0ZW5zaW9uRnJvbUJlaGluZChzb3VyY2VFbGVtZW50LmdldCgpKTsK
KyAgICB9CisKKyAgICAvLyBzaW5jZSBkaXNjb25uZWN0U2lua0Zyb21UZWUgd2FzIHVzZWQgdG8g
cmVtb3ZlIHRoZSBzb3VyY2VFeHRlbnNpb24KKyAgICBTb3VyY2VJZExvb2t1cE1hcDo6aXRlcmF0
b3Igc2lkSXQgPSBtX3NvdXJjZUlkTG9va3VwTWFwLmZpbmQoc291cmNlRXh0ZW5zaW9uQW5kUGFk
SWQpOworICAgIGlmIChzaWRJdCAhPSBtX3NvdXJjZUlkTG9va3VwTWFwLmVuZCgpKSB7CisgICAg
ICAgIFN0cmluZyBzb3VyY2VJZCA9IHNpZEl0LT52YWx1ZTsKKyAgICAgICAgTE9HKE1lZGlhLCAi
UmVtb3Zpbmcgc291cmNlRXh0ZW5zaW9uIHdpdGggaWQgJXMiLCBzb3VyY2VJZC5hc2NpaSgpLmRh
dGEoKSk7CisgICAgICAgIG1fcGlwZWxpbmVNYXAucmVtb3ZlKHNvdXJjZUlkKTsKKyAgICAgICAg
bV9zb3VyY2VJZExvb2t1cE1hcC5yZW1vdmUoc291cmNlRXh0ZW5zaW9uQW5kUGFkSWQpOworICAg
IH0KK30KKworZ2ludCBDZW50cmFsUGlwZWxpbmVVbml0OjpkaXNjb25uZWN0U2lua0Zyb21UZWUo
R3N0RWxlbWVudCogdGVlLCBHc3RFbGVtZW50KiBzaW5rLCBHc3RQYWQqIHBhZCkKK3sKKyAgICBn
dWludCBzcmNwYWRzID0gLTE7CisgICAgR1JlZlB0cjxHc3RQYWQ+IHNpbmtTaW5rUGFkID0gcGFk
OworICAgIGlmICghcGFkKQorICAgICAgICBzaW5rU2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxl
bWVudF9nZXRfc3RhdGljX3BhZChzaW5rLCAic2luayIpKTsKKworICAgIEdSZWZQdHI8R3N0UGFk
PiBxdWV1ZVNvdXJjZVBhZCA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9wZWVyKHNpbmtTaW5rUGFk
LmdldCgpKSk7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBxdWV1ZSA9IGFkb3B0R1JlZihnc3Rf
cGFkX2dldF9wYXJlbnRfZWxlbWVudChxdWV1ZVNvdXJjZVBhZC5nZXQoKSkpOworICAgIEdSZWZQ
dHI8R3N0UGFkPiBxdWV1ZVNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRp
Y19wYWQocXVldWUuZ2V0KCksICJzaW5rIikpOworICAgIEdSZWZQdHI8R3N0UGFkPiB0ZWVTb3Vy
Y2VQYWQgPSBnc3RfcGFkX2dldF9wZWVyKHF1ZXVlU2lua1BhZC5nZXQoKSk7CisKKyAgICBnc3Rf
cGFkX3NldF9hY3RpdmUodGVlU291cmNlUGFkLmdldCgpLCBGQUxTRSk7CisgICAgZ3N0X2Jpbl9y
ZW1vdmUoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgcXVldWUuZ2V0KCkpOworICAgIGdzdF9l
bGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQodGVlLCB0ZWVTb3VyY2VQYWQuZ2V0KCkpOworCisg
ICAgaW50IG5QYWRzID0gMDsKKyAgICBHc3RJdGVyYXRvciogcGFkc0l0ID0gZ3N0X2VsZW1lbnRf
aXRlcmF0ZV9zaW5rX3BhZHMoc2luayk7CisgICAgYm9vbCBkb25lID0gZmFsc2U7CisgICAgYm9v
bCBkb1JlbW92ZVNpbmsgPSB0cnVlOworICAgIHdoaWxlICghZG9uZSkgeworI2lmZGVmIEdTVF9B
UElfVkVSU0lPTl8xCisgICAgICAgIEdWYWx1ZSBpdGVtID0gR19WQUxVRV9JTklUOworI2Vsc2UK
KyAgICAgICAgZ3BvaW50ZXIgaXRlbSA9IDA7CisjZW5kaWYKKyAgICAgICAgR3N0SXRlcmF0b3JS
ZXN1bHQgaXQgPSBnc3RfaXRlcmF0b3JfbmV4dChwYWRzSXQsICZpdGVtKTsKKyAgICAgICAgc3dp
dGNoIChpdCkgeworICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9PSzogeworICAgICAgICAgICAg
blBhZHMrKzsKKyAgICAgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQ7CisjaWZkZWYgR1NUX0FQ
SV9WRVJTSU9OXzEKKyAgICAgICAgICAgIHBhZCA9IHN0YXRpY19jYXN0PEdzdFBhZCo+KGdfdmFs
dWVfZ2V0X29iamVjdCgmaXRlbSkpOworI2Vsc2UKKyAgICAgICAgICAgIHBhZCA9IGFkb3B0R1Jl
ZihHU1RfUEFEX0NBU1QoaXRlbSkpOworI2VuZGlmCisgICAgICAgICAgICBHUmVmUHRyPEdzdFBh
ZD4gcGVlciA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9wZWVyKHBhZC5nZXQoKSkpOworICAgICAg
ICAgICAgaWYgKHBlZXIpIHsKKyAgICAgICAgICAgICAgICBkb1JlbW92ZVNpbmsgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX1JFU1lOQzoKKyAg
ICAgICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMocGFkc0l0KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgorICAgICAgICAgICAgZG9uZSA9IHRy
dWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRVJST1I6
CisgICAgICAgICAgICBMT0coTWVkaWEsICJFUlJPUiwgSXRlcmF0aW5nISIpOworICAgICAgICAg
ICAgZG9uZSA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgU3RyaW5nIHNvdXJjZUFu
ZFBhZElkID0gZ2VuZXJhdGVFbGVtZW50UGFkSWQoc2luaywgMCk7CisgICAgU291cmNlSWRMb29r
dXBNYXA6Oml0ZXJhdG9yIHNpZEl0ID0gbV9zb3VyY2VJZExvb2t1cE1hcC5maW5kKGdlbmVyYXRl
RWxlbWVudFBhZElkKHNpbmssIDApKTsKKyAgICBpZiAoc2lkSXQgIT0gbV9zb3VyY2VJZExvb2t1
cE1hcC5lbmQoKSkgeworICAgICAgICBTdHJpbmcgc291cmNlSWQgPSBzaWRJdC0+dmFsdWU7Cisg
ICAgICAgIFBpcGVsaW5lTWFwOjppdGVyYXRvciBzaUl0ID0gbV9waXBlbGluZU1hcC5maW5kKHNv
dXJjZUlkKTsKKyAgICAgICAgaWYgKHNpSXQgIT0gbV9waXBlbGluZU1hcC5lbmQoKSkgeworICAg
ICAgICAgICAgU291cmNlIHNvdXJjZUluZm8gPSBzaUl0LT52YWx1ZTsKKyAgICAgICAgICAgIGRv
UmVtb3ZlU2luayA9IHNvdXJjZUluZm8ubV9yZW1vdmVXaGVuTm90VXNlZDsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmIChkb1JlbW92ZVNpbmspIHsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0
X3N0YXRlKHNpbmssIEdTVF9TVEFURV9OVUxMKTsKKyAgICAgICAgZ3N0X2Jpbl9yZW1vdmUoR1NU
X0JJTihtX3BpcGVsaW5lLmdldCgpKSwgc2luayk7CisgICAgICAgIExPRyhNZWRpYSwgIlNpbmsg
cmVtb3ZlZCIpOworICAgIH0gZWxzZQorICAgICAgICBMT0coTWVkaWEsICJEaWQgbm90IHJlbW92
ZSB0aGUgc2luayIpOworCisgICAgZ3N0X2l0ZXJhdG9yX2ZyZWUocGFkc0l0KTsKKworICAgIGdf
b2JqZWN0X2dldCh0ZWUsICJudW0tc3JjLXBhZHMiLCAmc3JjcGFkcywgTlVMTCk7CisKKyAgICBy
ZXR1cm4gc3JjcGFkczsKK30KKwordm9pZCBDZW50cmFsUGlwZWxpbmVVbml0OjpyZW1vdmVTb3Vy
Y2VGYWN0b3J5Rm9yU291cmNlKEdzdEVsZW1lbnQqIHNvdXJjZSkKK3sKKyAgICBHc3RJdGVyYXRv
ciogcGFkc0l0ID0gZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zcmNfcGFkcyhzb3VyY2UpOworICAgIGJv
b2wgZG9uZSA9IGZhbHNlOworICAgIHdoaWxlICghZG9uZSkgeworI2lmZGVmIEdTVF9BUElfVkVS
U0lPTl8xCisgICAgR1ZhbHVlIGl0ZW0gPSBHX1ZBTFVFX0lOSVQ7CisjZWxzZQorICAgIGdwb2lu
dGVyIGl0ZW0gPSAwOworI2VuZGlmCisgICAgR3N0SXRlcmF0b3JSZXN1bHQgaXQgPSBnc3RfaXRl
cmF0b3JfbmV4dChwYWRzSXQsICZpdGVtKTsKKyAgICBzd2l0Y2ggKGl0KSB7CisgICAgY2FzZSBH
U1RfSVRFUkFUT1JfT0s6IHsKKyAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHNyY3BhZDsKKyNpZmRl
ZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgICAgICBzcmNwYWQgPSBzdGF0aWNfY2FzdDxHc3RQYWQq
PihnX3ZhbHVlX2dldF9vYmplY3QoJml0ZW0pKTsKKyNlbHNlCisgICAgICAgIHNyY3BhZCA9IGFk
b3B0R1JlZihHU1RfUEFEX0NBU1QoaXRlbSkpOworI2VuZGlmCisgICAgICAgIFN0cmluZyBlbFBh
ZElkID0gZ2VuZXJhdGVFbGVtZW50UGFkSWQoc291cmNlLCBzcmNwYWQuZ2V0KCkpOworICAgICAg
ICBTb3VyY2VJZExvb2t1cE1hcDo6aXRlcmF0b3Igc2lkSXQgPSBtX3NvdXJjZUlkTG9va3VwTWFw
LmZpbmQoZWxQYWRJZCk7CisgICAgICAgIGlmIChzaWRJdCA9PSBtX3NvdXJjZUlkTG9va3VwTWFw
LmVuZCgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgU3RyaW5nIHNvdXJjZUlk
ID0gc2lkSXQtPnZhbHVlOworCisgICAgICAgIFBpcGVsaW5lTWFwOjppdGVyYXRvciBzaUl0ID0g
bV9waXBlbGluZU1hcC5maW5kKHNvdXJjZUlkKTsKKyAgICAgICAgaWYgKHNpSXQgPT0gbV9waXBl
bGluZU1hcC5lbmQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFNvdXJjZSYg
c291cmNlSW5mbyA9IHNpSXQtPnZhbHVlOworICAgICAgICBzb3VyY2VJbmZvLm1fc291cmNlRmFj
dG9yeSA9IDA7CisgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgY2FzZSBHU1RfSVRFUkFU
T1JfUkVTWU5DOgorICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jKHBhZHNJdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR1NUX0lURVJBVE9SX0RPTkU6CisgICAgICAgIGRvbmUgPSB0cnVl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9JVEVSQVRPUl9FUlJPUjoKKyAgICAgICAg
TE9HKE1lZGlhLCAiRVJST1IsIEl0ZXJhdGluZyEiKTsKKyAgICAgICAgZG9uZSA9IHRydWU7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9
CisKKyAgICBTdHJpbmcgZWxQYWRJZCA9IGdlbmVyYXRlRWxlbWVudFBhZElkKHNvdXJjZSwgMCk7
CisgICAgU291cmNlSWRMb29rdXBNYXA6Oml0ZXJhdG9yIHNpZEl0ID0gbV9zb3VyY2VJZExvb2t1
cE1hcC5maW5kKGVsUGFkSWQpOworICAgIGlmIChzaWRJdCA9PSBtX3NvdXJjZUlkTG9va3VwTWFw
LmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgc291cmNlSWQgPSBzaWRJdC0+
dmFsdWU7CisKKyAgICBQaXBlbGluZU1hcDo6aXRlcmF0b3Igc2lJdCA9IG1fcGlwZWxpbmVNYXAu
ZmluZChzb3VyY2VJZCk7CisgICAgaWYgKHNpSXQgPT0gbV9waXBlbGluZU1hcC5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgU291cmNlJiBzb3VyY2VJbmZvID0gc2lJdC0+dmFsdWU7Cisg
ICAgc291cmNlSW5mby5tX3NvdXJjZUZhY3RvcnkgPSAwOworfQorCit2b2lkIENlbnRyYWxQaXBl
bGluZVVuaXQ6OmRpc2Nvbm5lY3RTb3VyY2VGcm9tUGlwZWxpbmUoR3N0RWxlbWVudCogc291cmNl
LCBHc3RQYWQqIHNvdXJjZVBhZCkKK3sKKyAgICBTb3VyY2VJZExvb2t1cE1hcDo6aXRlcmF0b3Ig
c2lkSXQgPSBtX3NvdXJjZUlkTG9va3VwTWFwLmZpbmQoZ2VuZXJhdGVFbGVtZW50UGFkSWQoc291
cmNlLCBzb3VyY2VQYWQpKTsKKyAgICBpZiAoc2lkSXQgPT0gbV9zb3VyY2VJZExvb2t1cE1hcC5l
bmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIHNvdXJjZUlkID0gc2lkSXQtPnZh
bHVlOworCisgICAgUGlwZWxpbmVNYXA6Oml0ZXJhdG9yIHNpSXQgPSBtX3BpcGVsaW5lTWFwLmZp
bmQoc291cmNlSWQpOworICAgIGlmIChzaUl0ID09IG1fcGlwZWxpbmVNYXAuZW5kKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIFNvdXJjZSBzb3VyY2VJbmZvID0gc2lJdC0+dmFsdWU7CisKKyAg
ICAvLyBGSVhNRTogZG8gYmxvY2sgcHJvcGVybHkgYXN5bmMKKyNpZiBHU1RfQVBJX1ZFUlNJT05f
MQorICAgIGd1bG9uZyBwcm9iZUlkID0gZ3N0X3BhZF9hZGRfcHJvYmUoc291cmNlUGFkLCBHU1Rf
UEFEX1BST0JFX1RZUEVfQkxPQ0ssIDAsIDAsIDApOworI2Vsc2UKKyAgICBnc3RfcGFkX3NldF9i
bG9ja2VkX2FzeW5jKHNvdXJjZVBhZCwgVFJVRSwgMCwgMCk7CisjZW5kaWYKKyAgICBHUmVmUHRy
PEdzdFBhZD4gdGVlU2lua1BhZCA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9wZWVyKHNvdXJjZVBh
ZCkpOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gdGVlID0gZ3N0X3BhZF9nZXRfcGFyZW50X2Vs
ZW1lbnQodGVlU2lua1BhZC5nZXQoKSk7CisKKyAgICBHc3RJdGVyYXRvciogcGFkc0l0ID0gZ3N0
X2VsZW1lbnRfaXRlcmF0ZV9zcmNfcGFkcyh0ZWUuZ2V0KCkpOworICAgIGJvb2wgZG9uZSA9IGZh
bHNlOworICAgIHdoaWxlICghZG9uZSkgeworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAg
ICAgIEdWYWx1ZSBpdGVtID0gR19WQUxVRV9JTklUOworI2Vsc2UKKyAgICAgICAgZ3BvaW50ZXIg
aXRlbSA9IDA7CisjZW5kaWYKKyAgICAgICAgR3N0SXRlcmF0b3JSZXN1bHQgaXQgPSBnc3RfaXRl
cmF0b3JfbmV4dChwYWRzSXQsICZpdGVtKTsKKyAgICAgICAgc3dpdGNoIChpdCkgeworICAgICAg
ICBjYXNlIEdTVF9JVEVSQVRPUl9PSzogeworICAgICAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHRl
ZVNyY1BhZDsKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgICAgICAgICAgdGVlU3JjUGFk
ID0gc3RhdGljX2Nhc3Q8R3N0UGFkKj4oZ192YWx1ZV9nZXRfb2JqZWN0KCZpdGVtKSk7CisjZWxz
ZQorICAgICAgICAgICAgdGVlU3JjUGFkID0gYWRvcHRHUmVmKEdTVF9QQURfQ0FTVChpdGVtKSk7
CisjZW5kaWYKKyAgICAgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBxdWV1ZVNpbmtQYWQgPSBhZG9w
dEdSZWYoZ3N0X3BhZF9nZXRfcGVlcih0ZWVTcmNQYWQuZ2V0KCkpKTsKKyAgICAgICAgICAgIEdS
ZWZQdHI8R3N0RWxlbWVudD4gcXVldWUgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfcGFyZW50X2Vs
ZW1lbnQocXVldWVTaW5rUGFkLmdldCgpKSk7CisgICAgICAgICAgICAvLyBxdWV1ZSBtaWdodCBh
Y3R1YWxseSBiZSBhIGZha2VzaW5rCisgICAgICAgICAgICBnY2hhciogcU5hbWUgPSBnc3RfZWxl
bWVudF9nZXRfbmFtZShxdWV1ZS5nZXQoKSk7CisgICAgICAgICAgICBpZiAoU3RyaW5nKHFOYW1l
KS5zdGFydHNXaXRoKCJmYWtlc2luayIpKSB7CisgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRf
c2V0X3N0YXRlKHF1ZXVlLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7CisgICAgICAgICAgICAgICAg
Z3N0X2Jpbl9yZW1vdmUoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgcXVldWUuZ2V0KCkpOwor
ICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQodGVlLmdldCgp
LCB0ZWVTcmNQYWQuZ2V0KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBHUmVmUHRyPEdzdFBhZD4gcXVldWVTcmNQYWQgPSBhZG9wdEdSZWYo
Z3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQocXVldWUuZ2V0KCksICJzcmMiKSk7CisgICAgICAg
ICAgICBHUmVmUHRyPEdzdFBhZD4gc2lua1NpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRf
cGVlcihxdWV1ZVNyY1BhZC5nZXQoKSkpOworICAgICAgICAgICAgR1JlZlB0cjxHc3RFbGVtZW50
PiBzaW5rID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X3BhcmVudF9lbGVtZW50KHNpbmtTaW5rUGFk
LmdldCgpKSk7CisgICAgICAgICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IHBhcmVudCA9IGFkb3B0
R1JlZigoR3N0RWxlbWVudCopZ3N0X2VsZW1lbnRfZ2V0X3BhcmVudChzaW5rLmdldCgpKSk7Cisg
ICAgICAgICAgICBHT3duUHRyPGdjaGFyPiBwYXJlbnROYW1lKGdzdF9lbGVtZW50X2dldF9uYW1l
KHBhcmVudC5nZXQoKSkpOworICAgICAgICAgICAgR3N0RWxlbWVudCogc2lua0JpbiA9IDA7Cisg
ICAgICAgICAgICBpZiAoIXN0cmNtcChwYXJlbnROYW1lLmdldCgpLCAibWVkaWFzdHJlYW1fcGlw
ZWxpbmUiKSkKKyAgICAgICAgICAgICAgICBzaW5rQmluID0gc2luay5nZXQoKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzaW5rQmluID0gcGFyZW50LmdldCgpOworCisgICAg
ICAgICAgICBHUmVmUHRyPEdzdFBhZD4gc2lua1NyY1BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0
aWNfcGFkKHNpbmtCaW4sICJzcmMiKTsKKyAgICAgICAgICAgIFNvdXJjZUlkTG9va3VwTWFwOjpp
dGVyYXRvciBzaWRJdCA9IG1fc291cmNlSWRMb29rdXBNYXAuZmluZChnZW5lcmF0ZUVsZW1lbnRQ
YWRJZChzaW5rQmluLCBzaW5rU3JjUGFkLmdldCgpKSk7CisgICAgICAgICAgICBpZiAoc2lkSXQg
IT0gbV9zb3VyY2VJZExvb2t1cE1hcC5lbmQoKSkgeworICAgICAgICAgICAgICAgIExPRyhNZWRp
YSwgIlNpbmsgZWxlbWVudCB3YXMgYSBzb3VyY2UgZXh0ZW5zaW9uLiBSZWN1cnNpdmVseSBjYWxs
aW5nIGRpc2Nvbm5lY3RTb3VyY2VGcm9tUGlwZWxpbmUgdG8gcmVtb3ZlIGl0Iik7CisgICAgICAg
ICAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHNyY3BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9n
ZXRfc3RhdGljX3BhZChzaW5rQmluLCAic3JjIikpOworICAgICAgICAgICAgICAgIGRpc2Nvbm5l
Y3RTb3VyY2VGcm9tUGlwZWxpbmUoc2lua0Jpbiwgc3JjcGFkLmdldCgpKTsKKyAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgIGRpc2Nvbm5lY3RTaW5rRnJvbVBpcGVsaW5lKHNpbmtC
aW4pOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdTVF9J
VEVSQVRPUl9SRVNZTkM6CisgICAgICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jKHBhZHNJdCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRE9ORToKKyAg
ICAgICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
R1NUX0lURVJBVE9SX0VSUk9SOgorICAgICAgICAgICAgTE9HKE1lZGlhLCAiRVJST1IsIEl0ZXJh
dGluZyEiKTsKKyAgICAgICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKwor
I2lmIEdTVF9BUElfVkVSU0lPTl8xCisgICAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUoc291cmNlUGFk
LCBwcm9iZUlkKTsKKyNlbHNlCisgICAgZ3N0X3BhZF9zZXRfYmxvY2tlZF9hc3luYyhzb3VyY2VQ
YWQsIEZBTFNFLCBOVUxMLCAwKTsKKyNlbmRpZgorCisgICAgLy8gU2luY2Ugbm90aGluZyBpcyBu
b3cgY29ubmVjdGVkIHRvIHRoaXMgc291cmNlLCB3ZSByZW1vdmUgaXQgYW5kIGVhcmxpZXIgc291
cmNlcyB0aGF0IGRvZXMgbm90IGhhdmUgY29ubmVjdGlvbnMKKyAgICBHc3RQYWQqIHNvdXJjZVNp
bmtQYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChzb3VyY2UsICJzaW5rIik7CisgICAg
aWYgKHNvdXJjZVNpbmtQYWQpIHsKKyAgICAgICAgLy8gc291cmNlIGlzIGEgc291cmNlIGV4dGVu
c2lvbgorICAgICAgICByZW1vdmVTb3VyY2VFeHRlbnNpb25Gcm9tQmVoaW5kKHNvdXJjZSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgLy8gaWYgbm90IGEgc291cmNlIGV4dGVuc2lvbiwgdGhlcmUg
d2lsbCBiZSBhIGxvb3NlIHRlZSB0aGF0IHdlIG5lZWQgdG8gcmVtb3ZlCisgICAgICAgIGdzdF9l
bGVtZW50X3NldF9zdGF0ZSh0ZWUuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKKyAgICAgICAgZ3N0
X2Jpbl9yZW1vdmUoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgdGVlLmdldCgpKTsKKyAgICB9
Cit9CisKK3ZvaWQgQ2VudHJhbFBpcGVsaW5lVW5pdDo6ZGlzY29ubmVjdFNvdXJjZVdpdGhNdWx0
aXBsZVBhZHNGcm9tUGlwZWxpbmUoR3N0RWxlbWVudCogc291cmNlKQoreworICAgIFN0cmluZyBl
bGVtZW50UGFkSWQgPSBnZW5lcmF0ZUVsZW1lbnRQYWRJZChzb3VyY2UsIDApOworICAgIFNvdXJj
ZUlkTG9va3VwTWFwOjppdGVyYXRvciBzaWRJdCA9IG1fc291cmNlSWRMb29rdXBNYXAuZmluZChl
bGVtZW50UGFkSWQpOworICAgIGlmIChzaWRJdCA9PSBtX3NvdXJjZUlkTG9va3VwTWFwLmVuZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgc291cmNlSWQgPSBzaWRJdC0+dmFsdWU7
CisKKyAgICBHc3RJdGVyYXRvciogcGFkc0l0ID0gZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zcmNfcGFk
cyhzb3VyY2UpOworICAgIGJvb2wgZG9uZSA9IGZhbHNlOworICAgIHdoaWxlICghZG9uZSkgewor
I2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAgR1ZhbHVlIGl0ZW0gPSBHX1ZBTFVFX0lOSVQ7
CisjZWxzZQorICAgIGdwb2ludGVyIGl0ZW0gPSAwOworI2VuZGlmCisgICAgR3N0SXRlcmF0b3JS
ZXN1bHQgaXQgPSBnc3RfaXRlcmF0b3JfbmV4dChwYWRzSXQsICZpdGVtKTsKKyAgICBzd2l0Y2gg
KGl0KSB7CisgICAgY2FzZSBHU1RfSVRFUkFUT1JfT0s6IHsKKyAgICAgICAgR1JlZlB0cjxHc3RQ
YWQ+IHNyY3BhZDsKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgICAgICBzcmNwYWQgPSBz
dGF0aWNfY2FzdDxHc3RQYWQqPihnX3ZhbHVlX2dldF9vYmplY3QoJml0ZW0pKTsKKyNlbHNlCisg
ICAgICAgIHNyY3BhZCA9IGFkb3B0R1JlZihHU1RfUEFEX0NBU1QoaXRlbSkpOworI2VuZGlmCisg
ICAgICAgIEdSZWZQdHI8R3N0UGFkPiBwZWVyUGFkID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X3Bl
ZXIoc3JjcGFkLmdldCgpKSk7CisgICAgICAgIGlmICghcGVlclBhZCkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIGRpc2Nvbm5lY3RTb3VyY2VGcm9tUGlwZWxpbmUoc291cmNlLCBz
cmNwYWQuZ2V0KCkpOworCisgICAgICAgIC8vIGRpc2Nvbm5lY3RTb3VyY2VGcm9tUGlwZWxpbmUg
ZG9lcyBub3QgcmVtb3ZlIHRoZSB0ZWUKKyAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHRlZVNpbmtQ
YWQgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfcGVlcihzcmNwYWQuZ2V0KCkpKTsKKyAgICAgICAg
R1JlZlB0cjxHc3RFbGVtZW50PiB0ZWUgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfcGFyZW50X2Vs
ZW1lbnQodGVlU2lua1BhZC5nZXQoKSkpOworICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUo
dGVlLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7CisgICAgICAgIGdzdF9iaW5fcmVtb3ZlKEdTVF9C
SU4obV9waXBlbGluZS5nZXQoKSksIHRlZS5nZXQoKSk7CisKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgR1NUX0lURVJBVE9SX1JFU1lOQzoKKyAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jl
c3luYyhwYWRzSXQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05F
OgorICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfSVRF
UkFUT1JfRVJST1I6CisgICAgICAgIExPRyhNZWRpYSwgIkVSUk9SLCBJdGVyYXRpbmchIik7Cisg
ICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgfQorCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKHNvdXJj
ZSwgR1NUX1NUQVRFX05VTEwpOworICAgIGdzdF9iaW5fcmVtb3ZlKEdTVF9CSU4obV9waXBlbGlu
ZS5nZXQoKSksIHNvdXJjZSk7CisKKyAgICBtX3BpcGVsaW5lTWFwLnJlbW92ZShzb3VyY2VJZCk7
CisgICAgbV9zb3VyY2VJZExvb2t1cE1hcC5yZW1vdmUoZWxlbWVudFBhZElkKTsKK30KKworc3Rh
dGljIGdib29sZWFuIG1lc3NhZ2VDYWxsYmFjayhHc3RCdXMqIGJ1cywgR3N0TWVzc2FnZSogbWVz
c2FnZSwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBHRXJyb3IqIGVyciA9IDA7CisgICAgZ2NoYXIq
IGRlYnVnID0gMDsKKworICAgIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSkgewor
ICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6IHsKKyAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vf
ZXJyb3IobWVzc2FnZSwgJmVyciwgJmRlYnVnKTsKKyAgICAgICAgTE9HKE1lZGlhLCAiRVJST1Is
IG1lZGlhIGVycm9yOiAlZCwgJXMiLCBlcnItPmNvZGUsIGVyci0+bWVzc2FnZSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBpZiAoZXJyKQorICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyKTsKKyAgICBpZiAoZGVidWcpCisg
ICAgICAgIGdfZnJlZShkZWJ1Zyk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIFN0
cmluZyBnZW5lcmF0ZUVsZW1lbnRQYWRJZChHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RQYWQqIHBh
ZCkKK3sKKyAgICBTdHJpbmcgaWQoU3RyaW5nOjpudW1iZXIoZ3Vsb25nKGVsZW1lbnQpKSk7Cisg
ICAgaWQuYXBwZW5kKCJfIik7CisgICAgaWQuYXBwZW5kKFN0cmluZzo6bnVtYmVyKGd1bG9uZyhw
YWQpKSk7CisgICAgcmV0dXJuIGlkOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFf
U1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0NlbnRyYWxQaXBlbGluZVVuaXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9DZW50cmFsUGlwZWxpbmVVbml0LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZmQ3M2JjYjZlNDk5ZTRiOTUwNGM0MjQ3ZDAzYTZiNzVhNWMwNDk3NwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9DZW50cmFs
UGlwZWxpbmVVbml0LmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDEyIENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqLworCisKKyNpZm5kZWYgQ2VudHJhbFBpcGVsaW5lVW5pdF9oCisjZGVmaW5l
IENlbnRyYWxQaXBlbGluZVVuaXRfaAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2lu
Y2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiB2b2lkICgqU291cmNlSW5zZXJ0ZWRDYWxs
YmFjaykoR3N0RWxlbWVudCogc291cmNlLCBHc3RQYWQqIHBhZCwgZ3BvaW50ZXIgdXNlckRhdGEp
OworCitjbGFzcyBTb3VyY2VGYWN0b3J5OworY2xhc3MgU291cmNlRXh0ZW5zaW9uRmFjdG9yeTsK
KworY2xhc3MgQ2VudHJhbFBpcGVsaW5lVW5pdCB7CitwdWJsaWM6CisgICAgQ2VudHJhbFBpcGVs
aW5lVW5pdCgpOworICAgIHZpcnR1YWwgfkNlbnRyYWxQaXBlbGluZVVuaXQoKTsKKworICAgIHZv
aWQgcmVnaXN0ZXJTb3VyY2VGYWN0b3J5KFNvdXJjZUZhY3RvcnkqLCBjb25zdCBTdHJpbmcmIHNv
dXJjZUlkKTsKKyAgICB2b2lkIGRlcmVnaXN0ZXJTb3VyY2VGYWN0b3J5KGNvbnN0IFN0cmluZyYg
c291cmNlSWQpOworICAgIGJvb2wgY29ubmVjdFRvU291cmNlKGNvbnN0IFN0cmluZyYgc291cmNl
SWQsIEdzdEVsZW1lbnQqIHNpbmssIEdzdFBhZCogc2lua1BhZCA9IDApOworICAgIGJvb2wgZGlz
Y29ubmVjdEZyb21Tb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJZCwgR3N0RWxlbWVudCogc2lu
aywgR3N0UGFkKiBzaW5rUGFkID0gMCk7CisKKyAgICBHc3RFbGVtZW50KiBwaXBlbGluZSgpIGNv
bnN0OworCitwcml2YXRlOgorICAgIGNsYXNzIFNvdXJjZSB7CisgICAgcHVibGljOgorICAgICAg
ICBTb3VyY2UoKSA6IG1fc291cmNlRWxlbWVudCgwKSwgbV9zb3VyY2VQYWQoMCksIG1fc291cmNl
RmFjdG9yeSgwKSwgbV9yZW1vdmVXaGVuTm90VXNlZCh0cnVlKSB7IH0KKyAgICAgICAgU291cmNl
KEdzdEVsZW1lbnQqIHNvdXJjZUVsZW1lbnQsIEdzdFBhZCogc291cmNlUGFkLCBTb3VyY2VGYWN0
b3J5KiBzb3VyY2VGYWN0b3J5LCBib29sIHJlbW92ZVdoZW5Ob3RVc2VkKSA6IG1fc291cmNlRWxl
bWVudChzb3VyY2VFbGVtZW50KSwgbV9zb3VyY2VQYWQoc291cmNlUGFkKSwgbV9zb3VyY2VGYWN0
b3J5KHNvdXJjZUZhY3RvcnkpLCBtX3JlbW92ZVdoZW5Ob3RVc2VkKHJlbW92ZVdoZW5Ob3RVc2Vk
KSB7IH0KKworICAgICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fc291cmNlRWxlbWVudDsKKyAg
ICAgICAgR1JlZlB0cjxHc3RQYWQ+IG1fc291cmNlUGFkOworICAgICAgICBTb3VyY2VGYWN0b3J5
KiBtX3NvdXJjZUZhY3Rvcnk7CisgICAgICAgIGJvb2wgbV9yZW1vdmVXaGVuTm90VXNlZDsKKyAg
ICB9OworCisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU291cmNlPiBQaXBlbGluZU1hcDsK
KworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gU291cmNlSWRMb29rdXBNYXA7
CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU291cmNlRmFjdG9yeSo+IFNvdXJjZUZhY3Rv
cnlNYXA7CisgICAgdHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICBTb3VyY2VFeHRlbnNpb25GYWN0
b3J5KiBzb3VyY2VFeHRlbnNpb25GYWN0b3J5OworICAgICAgICBTdHJpbmcgc291cmNlVG9FeHRl
bmQ7CisgICAgfSBTb3VyY2VFeHRlbnNpb25GYWN0b3J5SW5mbzsKKyAgICB0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nLCBTb3VyY2VFeHRlbnNpb25GYWN0b3J5SW5mbz4gU291cmNlRXh0ZW5zaW9uRmFj
dG9yeU1hcDsKKworICAgIHR5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgR1JlZlB0cjxHc3RFbGVt
ZW50PiBleHRlbnNpb247CisgICAgICAgIFN0cmluZyBzb3VyY2VUb0V4dGVuZDsKKyAgICB9IFNv
dXJjZUV4dGVuc2lvbkluZm87CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU291cmNlRXh0
ZW5zaW9uSW5mbz4gU291cmNlRXh0ZW5zaW9uTWFwOworCisgICAgdHlwZWRlZiBlbnVtIHsKKyAg
ICAgICAgQ29ubmVjdFRvU291cmNlLAorICAgICAgICBEaXNjb25uZWN0RnJvbVNvdXJjZSwKKyAg
ICAgICAgUmVtb3ZlU291cmNlLAorICAgICAgICBJbnNlcnRTb3VyY2UKKyAgICB9IFRhc2tUeXBl
OworCisgICAgdHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICBTdHJpbmcgc291cmNlSWQ7CisgICAg
ICAgIFRhc2tUeXBlIHR5cGU7CisgICAgICAgIEdzdEVsZW1lbnQqIHNpbms7CisgICAgICAgIEdz
dEVsZW1lbnQqIHNvdXJjZTsKKyAgICAgICAgU291cmNlRmFjdG9yeSogc291cmNlRmFjdG9yeTsK
KyAgICAgICAgU291cmNlSW5zZXJ0ZWRDYWxsYmFjayBjYWxsYmFjazsKKyAgICAgICAgZ3BvaW50
ZXIgdXNlckRhdGE7CisgICAgICAgIEdzdFBhZCogcGFkOworICAgICAgICBib29sIHNvdXJjZUZh
Y3RvcnlSZW1vdmVkOworICAgIH0gUGlwZWxpbmVUYXNrOworICAgIHR5cGVkZWYgVmVjdG9yPFBp
cGVsaW5lVGFzayo+IFBpcGVsaW5lVGFza1ZlY3RvcjsKKworICAgIGJvb2wgY29ubmVjdEFuZEdl
dFNvdXJjZUVsZW1lbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJZCwgR3N0RWxlbWVudCoqIHNvdXJj
ZUVsZW1lbnQsIEdzdFBhZCoqIHNvdXJjZVBhZCk7CisgICAgdm9pZCBkaXNjb25uZWN0U291cmNl
RnJvbVBpcGVsaW5lKEdzdEVsZW1lbnQqIHNvdXJjZSwgR3N0UGFkKiBzb3VyY2VQYWQpOworICAg
IHZvaWQgZGlzY29ubmVjdFNvdXJjZVdpdGhNdWx0aXBsZVBhZHNGcm9tUGlwZWxpbmUoR3N0RWxl
bWVudCogc291cmNlKTsKKyAgICBndWludCBkaXNjb25uZWN0U2lua0Zyb21QaXBlbGluZShHc3RF
bGVtZW50KiBzaW5rKTsKKyAgICB2b2lkIHJlbW92ZVNvdXJjZUV4dGVuc2lvbkZyb21CZWhpbmQo
R3N0RWxlbWVudCogc291cmNlRXh0ZW5zaW9uKTsKKworICAgIGdpbnQgZGlzY29ubmVjdFNpbmtG
cm9tVGVlKEdzdEVsZW1lbnQqIHRlZSwgR3N0RWxlbWVudCogc2luaywgR3N0UGFkKik7CisKKyAg
ICB2b2lkIHJlbW92ZVNvdXJjZUZhY3RvcnlGb3JTb3VyY2UoR3N0RWxlbWVudCogc291cmNlKTsK
KworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9waXBlbGluZTsKKyAgICBQaXBlbGluZU1hcCBt
X3BpcGVsaW5lTWFwOworICAgIFNvdXJjZUlkTG9va3VwTWFwIG1fc291cmNlSWRMb29rdXBNYXA7
CisgICAgU291cmNlRmFjdG9yeU1hcCBtX3NvdXJjZUZhY3RvcnlNYXA7Cit9OworCitDZW50cmFs
UGlwZWxpbmVVbml0JiBjZW50cmFsUGlwZWxpbmVVbml0KCk7CisKK30KKworI2VuZGlmIC8vIEVO
QUJMRShNRURJQV9TVFJFQU0pCisKKyNlbmRpZiAvLyBDZW50cmFsUGlwZWxpbmVVbml0X2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9N
ZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuY3BwCmluZGV4
IGYxODQyY2I1ZDUwYmVjNTY4MTFlNjE3MGJlNTRkMTE2OTE0MTkwOTMuLjg2YTFjMzgzMTRkNmY4
NTM4ZjE4NmRmYmQyNjA4NzM5NmM5NTllZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01l
ZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2lmIEVOQUJM
RShNRURJQV9TVFJFQU0pCiAKICNpbmNsdWRlICJNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5o
IgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lci5oIgogCiAjaW5j
bHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1Tb3Vy
Y2VzUXVlcnlDbGllbnQuaCIKQEAgLTUwLDYgKzUxLDcgQEAgTWVkaWFTdHJlYW1DZW50ZXImIE1l
ZGlhU3RyZWFtQ2VudGVyOjppbnN0YW5jZSgpCiAKIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVy
OjpNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcigpCiB7CisgICAgbV9wcml2YXRlID0gTWVkaWFT
dHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUoKTsKIH0KIAogTWVkaWFTdHJlYW1D
ZW50ZXJHU3RyZWFtZXI6On5NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcigpCkBAIC01OCwxMiAr
NjAsMTIgQEAgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXI6On5NZWRpYVN0cmVhbUNlbnRlckdT
dHJlYW1lcigpCiAKIHZvaWQgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXI6OnF1ZXJ5TWVkaWFT
dHJlYW1Tb3VyY2VzKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGllbnQ+IGNs
aWVudCkKIHsKLSAgICBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciBhdWRpb1NvdXJjZXMsIHZpZGVv
U291cmNlczsKLSAgICBjbGllbnQtPmRpZENvbXBsZXRlUXVlcnkoYXVkaW9Tb3VyY2VzLCB2aWRl
b1NvdXJjZXMpOworICAgIG1fcHJpdmF0ZS0+cXVlcnlNZWRpYVN0cmVhbVNvdXJjZXMoY2xpZW50
KTsKIH0KIAotdm9pZCBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6ZGlkU2V0TWVkaWFTdHJl
YW1UcmFja0VuYWJsZWQoTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiwgTWVkaWFTdHJlYW1Db21wb25l
bnQqKQordm9pZCBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6ZGlkU2V0TWVkaWFTdHJlYW1U
cmFja0VuYWJsZWQoTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiBzdHJlYW1EZXNjcmlwdG9yLCBNZWRp
YVN0cmVhbUNvbXBvbmVudCogY29tcG9uZW50KQogeworICAgIG1fcHJpdmF0ZS0+ZGlkU2V0TWVk
aWFTdHJlYW1UcmFja0VuYWJsZWQoc3RyZWFtRGVzY3JpcHRvciwgY29tcG9uZW50KTsKIH0KIAog
Ym9vbCBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6ZGlkQWRkTWVkaWFTdHJlYW1UcmFjayhN
ZWRpYVN0cmVhbURlc2NyaXB0b3IqLCBNZWRpYVN0cmVhbUNvbXBvbmVudCopCkBAIC03Niw4ICs3
OCwxMCBAQCBib29sIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyOjpkaWRSZW1vdmVNZWRpYVN0
cmVhbVRyYWNrKE1lZGlhU3RyZWFtRGVzY3JpcHRvcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
dm9pZCBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6ZGlkU3RvcExvY2FsTWVkaWFTdHJlYW0o
TWVkaWFTdHJlYW1EZXNjcmlwdG9yKikKK3ZvaWQgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXI6
OmRpZFN0b3BMb2NhbE1lZGlhU3RyZWFtKE1lZGlhU3RyZWFtRGVzY3JpcHRvciogc3RyZWFtRGVz
Y3JpcHRvcikKIHsKKyAgICBtX3ByaXZhdGUtPmRpZFN0b3BMb2NhbE1lZGlhU3RyZWFtKHN0cmVh
bURlc2NyaXB0b3IpOworICAgIGVuZExvY2FsTWVkaWFTdHJlYW0oc3RyZWFtRGVzY3JpcHRvcik7
CiB9CiAKIHZvaWQgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXI6OmRpZENyZWF0ZU1lZGlhU3Ry
ZWFtKE1lZGlhU3RyZWFtRGVzY3JpcHRvciopCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0
cmVhbUNlbnRlckdTdHJlYW1lci5oCmluZGV4IDNlYzQwM2E2MTI3Zjk1ZmQzZmRkNzEwN2RmYzI5
MTA3ZGVmZDA4ZWYuLjMzNTlhNTY3YTA4OTFlZjJhYzA1NjgxM2Q5ODY0YzI3ZDJmYzU5MGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9N
ZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5oCkBAIC00
NCw2ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIE1lZGlhU3RyZWFtQ29tcG9u
ZW50OwogY2xhc3MgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOwogY2xhc3MgTWVkaWFTdHJlYW1Tb3Vy
Y2VzUXVlcnlDbGllbnQ7CitjbGFzcyBNZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXI7
CiAKIGNsYXNzIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyIDogcHVibGljIE1lZGlhU3RyZWFt
Q2VudGVyIHsKIHB1YmxpYzoKQEAgLTU3LDYgKzU4LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBkaWRSZW1vdmVNZWRpYVN0cmVhbVRyYWNrKE1lZGlhU3RyZWFtRGVzY3JpcHRvciosIE1l
ZGlhU3RyZWFtQ29tcG9uZW50KikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGRpZFN0b3BM
b2NhbE1lZGlhU3RyZWFtKE1lZGlhU3RyZWFtRGVzY3JpcHRvciopIE9WRVJSSURFOwogICAgIHZp
cnR1YWwgdm9pZCBkaWRDcmVhdGVNZWRpYVN0cmVhbShNZWRpYVN0cmVhbURlc2NyaXB0b3IqKSBP
VkVSUklERTsKKworcHJpdmF0ZToKKyAgICBPd25QdHI8TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRl
R1N0cmVhbWVyPiBtX3ByaXZhdGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVk
aWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFt
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjdjNTU3OWVlYTczNjkwMTE3YWI4N2MzYjBmOTk2NmY5ODIzODcz
YjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMCww
ICsxLDQwMyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgQ29sbGFib3JhIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJN
ZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgIkNlbnRyYWxQ
aXBlbGluZVVuaXQuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJl
YW1EZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGllbnQu
aCIKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCisjaW5j
bHVkZSA8Z3N0L2ludGVyZmFjZXMvcHJvcGVydHlwcm9iZS5oPgorI2VuZGlmCisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBHUmVm
UHRyPEdzdEVsZW1lbnQ+IGZpbmRWaWRlb0RldmljZVNvdXJjZSgpOworc3RhdGljIEdSZWZQdHI8
R3N0RWxlbWVudD4gZmluZEF1ZGlvRGV2aWNlU291cmNlKCk7CitzdGF0aWMgR1JlZlB0cjxHc3RF
bGVtZW50PiBmaW5kRGV2aWNlU291cmNlKEdzdEVsZW1lbnQqIGF1dG9TcmMpOworc3RhdGljIHZv
aWQgcHJvYmVTb3VyY2UoR3N0RWxlbWVudCogc291cmNlLCBjb25zdCBTdHJpbmcmIGtleSwgTWVk
aWFTdHJlYW1Tb3VyY2U6OlR5cGUsIE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBzb3VyY2VzKTsK
KyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKK3N0YXRpYyBTdHJpbmcgZmlsdGVyQXVkaW9Tb3Vy
Y2VOYW1lKGNvbnN0IFN0cmluZyYgZGV2aWNlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisjZW5k
aWYKK3N0YXRpYyBTdHJpbmcgZ2V0RGV2aWNlU3RyaW5nRnJvbURldmljZUlkU3RyaW5nKGNvbnN0
IFN0cmluZyYpOworc3RhdGljIFN0cmluZyBnZXRGYWN0b3J5TmFtZUZyb21EZXZpY2VJZFN0cmlu
Zyhjb25zdCBTdHJpbmcmKTsKK3N0YXRpYyBnY2hhciogY3JlYXRlVW5pcXVlTmFtZShjb25zdCBn
Y2hhciogcHJlZml4KTsKK3N0YXRpYyBHc3RFbGVtZW50KiBjcmVhdGVBdWRpb1NvdXJjZUJpbihH
c3RFbGVtZW50KiBzb3VyY2UpOworc3RhdGljIEdzdEVsZW1lbnQqIGNyZWF0ZVZpZGVvU291cmNl
QmluKEdzdEVsZW1lbnQqIHNvdXJjZSk7CisKK3ZvaWQgTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRl
R1N0cmVhbWVyOjpxdWVyeU1lZGlhU3RyZWFtU291cmNlcyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFt
U291cmNlc1F1ZXJ5Q2xpZW50PiBwcnBDbGllbnQpCit7CisgICAgUmVmUHRyPE1lZGlhU3RyZWFt
U291cmNlc1F1ZXJ5Q2xpZW50PiBjbGllbnQgPSBwcnBDbGllbnQ7CisgICAgTWVkaWFTdHJlYW1T
b3VyY2VWZWN0b3IgYXVkaW9Tb3VyY2VzOworICAgIE1lZGlhU3RyZWFtU291cmNlVmVjdG9yIHZp
ZGVvU291cmNlczsKKworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBpZiAoIWdzdF9p
bml0X2NoZWNrKDAsIDAsICZlcnJvci5vdXRQdHIoKSkpIHsKKyAgICAgICAgY2xpZW50LT5kaWRD
b21wbGV0ZVF1ZXJ5KGF1ZGlvU291cmNlcywgdmlkZW9Tb3VyY2VzKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChjbGllbnQtPmF1ZGlvKCkpIHsKKyAgICAgICAgR1JlZlB0cjxH
c3RFbGVtZW50PiBhdWRpb1NyYyA9IGZpbmRBdWRpb0RldmljZVNvdXJjZSgpOworICAgICAgICBp
ZiAoYXVkaW9TcmMpIHsKKyAgICAgICAgICAgIFN0cmluZyBrZXkgPSBzdG9yZUVsZW1lbnRGYWN0
b3J5Rm9yRWxlbWVudChhdWRpb1NyYy5nZXQoKSk7CisgICAgICAgICAgICBwcm9iZVNvdXJjZShh
dWRpb1NyYy5nZXQoKSwga2V5LCBNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZUF1ZGlvLCBhdWRpb1Nv
dXJjZXMpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNsaWVudC0+dmlkZW8oKSkgewor
ICAgICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IHZpZGVvU3JjID0gZmluZFZpZGVvRGV2aWNlU291
cmNlKCk7CisgICAgICAgIGlmICh2aWRlb1NyYykgeworICAgICAgICAgICAgU3RyaW5nIGtleSA9
IHN0b3JlRWxlbWVudEZhY3RvcnlGb3JFbGVtZW50KHZpZGVvU3JjLmdldCgpKTsKKyAgICAgICAg
ICAgIHByb2JlU291cmNlKHZpZGVvU3JjLmdldCgpLCBrZXksIE1lZGlhU3RyZWFtU291cmNlOjpU
eXBlVmlkZW8sIHZpZGVvU291cmNlcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZWdpc3Rl
clNvdXJjZUZhY3RvcmllcyhhdWRpb1NvdXJjZXMpOworICAgIHJlZ2lzdGVyU291cmNlRmFjdG9y
aWVzKHZpZGVvU291cmNlcyk7CisKKyAgICBjbGllbnQtPmRpZENvbXBsZXRlUXVlcnkoYXVkaW9T
b3VyY2VzLCB2aWRlb1NvdXJjZXMpOworfQorCit2b2lkIE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0
ZUdTdHJlYW1lcjo6ZGlkU2V0TWVkaWFTdHJlYW1UcmFja0VuYWJsZWQoTWVkaWFTdHJlYW1EZXNj
cmlwdG9yKiBzdHJlYW1EZXNjcmlwdG9yLCBNZWRpYVN0cmVhbUNvbXBvbmVudCogY29tcG9uZW50
KQoreworICAgIExPRyhNZWRpYSwgImVuYWJsZWQ6ICVkIiwgY29tcG9uZW50LT5lbmFibGVkKCkp
OworfQorCit2b2lkIE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkU3RvcExv
Y2FsTWVkaWFTdHJlYW0oTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiBzdHJlYW1EZXNjcmlwdG9yKQor
eworICAgIExPRyhNZWRpYSwgImRpZFN0b3BMb2NhbE1lZGlhU3RyZWFtICVzIiwgc3RyZWFtRGVz
Y3JpcHRvci0+aWQoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzdHJlYW1EZXNjcmlwdG9yLT5udW1iZXJPZlZpZGVvQ29tcG9uZW50cygpOyBpKyspIHsK
KyAgICAgICAgTWVkaWFTdHJlYW1Db21wb25lbnQqIGNvbXBvbmVudCA9IHN0cmVhbURlc2NyaXB0
b3ItPnZpZGVvQ29tcG9uZW50KGkpOworICAgICAgICBNZWRpYVN0cmVhbVNvdXJjZSogc291cmNl
ID0gY29tcG9uZW50LT5zb3VyY2UoKTsKKworICAgICAgICBjb21wb25lbnQtPnNldEVuYWJsZWQo
ZmFsc2UpOworICAgICAgICBzb3VyY2UtPnNldFJlYWR5U3RhdGUoTWVkaWFTdHJlYW1Tb3VyY2U6
OlJlYWR5U3RhdGVFbmRlZCk7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHN0cmVhbURlc2NyaXB0b3ItPm51bWJlck9mQXVkaW9Db21wb25lbnRzKCk7IGkrKykgeworICAg
ICAgICBNZWRpYVN0cmVhbUNvbXBvbmVudCogY29tcG9uZW50ID0gc3RyZWFtRGVzY3JpcHRvci0+
YXVkaW9Db21wb25lbnQoaSk7CisgICAgICAgIE1lZGlhU3RyZWFtU291cmNlKiBzb3VyY2UgPSBj
b21wb25lbnQtPnNvdXJjZSgpOworCisgICAgICAgIGNvbXBvbmVudC0+c2V0RW5hYmxlZChmYWxz
ZSk7CisgICAgICAgIHNvdXJjZS0+c2V0UmVhZHlTdGF0ZShNZWRpYVN0cmVhbVNvdXJjZTo6UmVh
ZHlTdGF0ZUVuZGVkKTsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRl
R1N0cmVhbWVyOjpyZWdpc3RlclNvdXJjZUZhY3Rvcmllcyhjb25zdCBNZWRpYVN0cmVhbVNvdXJj
ZVZlY3RvciYgc291cmNlcykKK3sKKyAgICBDZW50cmFsUGlwZWxpbmVVbml0JiBjcHUgPSBjZW50
cmFsUGlwZWxpbmVVbml0KCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNvdXJjZXMu
c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgU3RyaW5nIGlkID0gc291cmNlc1tpXS0+aWQoKTsKKyAg
ICAgICAgU3RyaW5nIGRldmljZVN0cmluZyA9IGdldERldmljZVN0cmluZ0Zyb21EZXZpY2VJZFN0
cmluZyhpZCk7CisgICAgICAgIFN0cmluZyBmYWN0b3J5U3RyaW5nID0gZ2V0RmFjdG9yeU5hbWVG
cm9tRGV2aWNlSWRTdHJpbmcoaWQpOworCisgICAgICAgIFN0cmluZyBzb3VyY2VJZCA9IHN0b3Jl
U291cmNlSW5mbyhzb3VyY2VzW2ldLT50eXBlKCksIGZhY3RvcnlTdHJpbmcsIGRldmljZVN0cmlu
Zyk7CisgICAgICAgIExPRyhNZWRpYSwgIlJlZ2lzdGVyaW5nIHNvdXJjZSBmYWN0b3J5IGZvciBz
b3VyY2Ugd2l0aCBpZD0lcyIsIHNvdXJjZUlkLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgY3B1
LnJlZ2lzdGVyU291cmNlRmFjdG9yeSh0aGlzLCBzb3VyY2VJZCk7CisgICAgfQorfQorCitTdHJp
bmcgTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyOjpzdG9yZUVsZW1lbnRGYWN0b3J5
Rm9yRWxlbWVudChHc3RFbGVtZW50KiBzb3VyY2UpCit7CisgICAgR3N0RWxlbWVudEZhY3Rvcnkq
IGVsZW1lbnRGYWN0b3J5ID0gZ3N0X2VsZW1lbnRfZ2V0X2ZhY3Rvcnkoc291cmNlKTsKKyAgICBH
T3duUHRyPGdjaGFyPiBmYWN0b3J5TmFtZShnc3RfZWxlbWVudF9nZXRfbmFtZShlbGVtZW50RmFj
dG9yeSkpOworICAgIFN0cmluZyBzdHJGYWN0b3J5TmFtZShmYWN0b3J5TmFtZS5nZXQoKSk7CisK
KyAgICBFbGVtZW50RmFjdG9yeU1hcDo6aXRlcmF0b3IgZWxlbWVudEZhY3RvcnlJdCA9IG1fZWxl
bWVudEZhY3RvcnlNYXAuZmluZChzdHJGYWN0b3J5TmFtZSk7CisgICAgaWYgKGVsZW1lbnRGYWN0
b3J5SXQgPT0gbV9lbGVtZW50RmFjdG9yeU1hcC5lbmQoKSkKKyAgICAgICAgbV9lbGVtZW50RmFj
dG9yeU1hcC5hZGQoc3RyRmFjdG9yeU5hbWUsIGVsZW1lbnRGYWN0b3J5KTsKKworICAgIHJldHVy
biBzdHJGYWN0b3J5TmFtZTsKK30KKworR3N0RWxlbWVudEZhY3RvcnkqIE1lZGlhU3RyZWFtQ2Vu
dGVyUHJpdmF0ZUdTdHJlYW1lcjo6c3RvcmVkRWxlbWVudEZhY3RvcnkoY29uc3QgU3RyaW5nJiBr
ZXkpCit7CisgICAgR3N0RWxlbWVudEZhY3RvcnkqIGVsZW1lbnRGYWN0b3J5ID0gMDsKKyAgICBF
bGVtZW50RmFjdG9yeU1hcDo6aXRlcmF0b3IgZWxlbWVudEZhY3RvcnlJdCA9IG1fZWxlbWVudEZh
Y3RvcnlNYXAuZmluZChrZXkpOworICAgIGlmIChlbGVtZW50RmFjdG9yeUl0ICE9IG1fZWxlbWVu
dEZhY3RvcnlNYXAuZW5kKCkpCisgICAgICAgIGVsZW1lbnRGYWN0b3J5ID0gKGVsZW1lbnRGYWN0
b3J5SXQtPnZhbHVlKS5nZXQoKTsKKyAgICByZXR1cm4gZWxlbWVudEZhY3Rvcnk7Cit9CisKK1N0
cmluZyBNZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXI6OnN0b3JlU291cmNlSW5mbyhN
ZWRpYVN0cmVhbVNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGZhY3RvcnlLZXksIGNv
bnN0IFN0cmluZyYgZGV2aWNlKQoreworICAgIFN0cmluZyBrZXkgPSBTdHJpbmcoZmFjdG9yeUtl
eSk7CisgICAga2V5LmFwcGVuZCgiOyIpOworICAgIGtleS5hcHBlbmQoZGV2aWNlKTsKKworICAg
IFNvdXJjZUluZm9NYXA6Oml0ZXJhdG9yIHNvdXJjZUluZm9JdCA9IG1fc291cmNlSW5mb01hcC5m
aW5kKGtleSk7CisgICAgaWYgKHNvdXJjZUluZm9JdCAhPSBtX3NvdXJjZUluZm9NYXAuZW5kKCkp
CisgICAgICAgIHJldHVybiBzb3VyY2VJbmZvSXQtPmtleTsKKworICAgIFNvdXJjZUluZm8gc291
cmNlSW5mbyA9IHtmYWN0b3J5S2V5LCB0eXBlLCBkZXZpY2V9OworICAgIFNvdXJjZUluZm9NYXA6
OkFkZFJlc3VsdCByZXN1bHQgPSBtX3NvdXJjZUluZm9NYXAuYWRkKGtleSwgc291cmNlSW5mbyk7
CisKKyAgICByZXR1cm4ga2V5OworfQorCitHc3RFbGVtZW50KiBNZWRpYVN0cmVhbUNlbnRlclBy
aXZhdGVHU3RyZWFtZXI6OmNyZWF0ZVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlkLCBHc3RQ
YWQqKiBzcmNQYWQpCit7CisgICAgTE9HKE1lZGlhLCAiQ3JlYXRpbmcgc291cmNlIHdpdGggaWQ9
JXMiLCBzb3VyY2VJZC5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICBTb3VyY2VJbmZvTWFwOjppdGVy
YXRvciBzb3VyY2VJbmZvSXQgPSBtX3NvdXJjZUluZm9NYXAuZmluZChzb3VyY2VJZCk7CisgICAg
aWYgKHNvdXJjZUluZm9JdCA9PSBtX3NvdXJjZUluZm9NYXAuZW5kKCkpCisgICAgICAgIHJldHVy
biAwOworCisgICAgU291cmNlSW5mbyBzb3VyY2VJbmZvID0gc291cmNlSW5mb0l0LT52YWx1ZTsK
KworICAgIEdzdEVsZW1lbnRGYWN0b3J5KiBmYWN0b3J5ID0gc3RvcmVkRWxlbWVudEZhY3Rvcnko
c291cmNlSW5mby5tX2ZhY3RvcnlLZXkpOworICAgIGlmICghZmFjdG9yeSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBHc3RFbGVtZW50KiBzb3VyY2UgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2Ny
ZWF0ZShmYWN0b3J5LCAiZGV2aWNlX3NvdXJjZSIpOworICAgIGlmICghc291cmNlKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIExPRyhNZWRpYSwgInNvdXJjZUluZm8ubV9kZXZpY2U9JXMiLCBz
b3VyY2VJbmZvLm1fZGV2aWNlLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAvLyBkZXZpY2UgY2hvb3Np
bmcgaXMgbm90IGltcGxlbWVudGVkIGZvciBnc3RyZWFtZXIgMS4wIHlldAorI2lmbmRlZiBHU1Rf
QVBJX1ZFUlNJT05fMQorICAgIC8vIGRvIG5vdCBzZXQgZGV2aWNlIGZvciB0ZXN0IHNvdXJjZXMK
KyAgICBpZiAoc291cmNlSW5mby5tX2RldmljZSAhPSAidGVzdHNyY19hdWRpbyIKKyAgICAgICAg
JiYgc291cmNlSW5mby5tX2RldmljZSAhPSAidGVzdHNyY192aWRlbyIpCisgICAgICAgIGdfb2Jq
ZWN0X3NldChzb3VyY2UsICJkZXZpY2UiLCBzb3VyY2VJbmZvLm1fZGV2aWNlLmFzY2lpKCkuZGF0
YSgpLCBOVUxMKTsKKyNlbmRpZgorCisgICAgaWYgKHNvdXJjZUluZm8ubV90eXBlID09IE1lZGlh
U3RyZWFtU291cmNlOjpUeXBlQXVkaW8pCisgICAgICAgIHNvdXJjZSA9IGNyZWF0ZUF1ZGlvU291
cmNlQmluKHNvdXJjZSk7CisgICAgZWxzZSBpZiAoc291cmNlSW5mby5tX3R5cGUgPT0gTWVkaWFT
dHJlYW1Tb3VyY2U6OlR5cGVWaWRlbykKKyAgICAgICAgc291cmNlID0gY3JlYXRlVmlkZW9Tb3Vy
Y2VCaW4oc291cmNlKTsKKworICAgIGlmIChzcmNQYWQpCisgICAgICAgICpzcmNQYWQgPSBnc3Rf
ZWxlbWVudF9nZXRfc3RhdGljX3BhZChzb3VyY2UsICJzcmMiKTsKKworICAgIHJldHVybiBzb3Vy
Y2U7Cit9CisKK3N0YXRpYyBHUmVmUHRyPEdzdEVsZW1lbnQ+IGZpbmRBdWRpb0RldmljZVNvdXJj
ZSgpCit7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBhdXRvU3JjID0gZ3N0X2VsZW1lbnRfZmFj
dG9yeV9tYWtlKCJhdXRvYXVkaW9zcmMiLCAiYXV0b3NyYyIpOworICAgIGlmICghYXV0b1NyYykK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGZpbmREZXZpY2VTb3VyY2UoYXV0b1NyYy5n
ZXQoKSk7Cit9CisKK3N0YXRpYyBHUmVmUHRyPEdzdEVsZW1lbnQ+IGZpbmRWaWRlb0RldmljZVNv
dXJjZSgpCit7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBhdXRvU3JjID0gZ3N0X2VsZW1lbnRf
ZmFjdG9yeV9tYWtlKCJhdXRvdmlkZW9zcmMiLCAiYXV0b3NyYyIpOworICAgIGlmICghYXV0b1Ny
YykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGZpbmREZXZpY2VTb3VyY2UoYXV0b1Ny
Yy5nZXQoKSk7Cit9CisKK3N0YXRpYyBHUmVmUHRyPEdzdEVsZW1lbnQ+IGZpbmREZXZpY2VTb3Vy
Y2UoR3N0RWxlbWVudCogYXV0b1NyYykKK3sKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGRldmlj
ZVNyYzsKKyAgICBHc3RDaGlsZFByb3h5KiBjaGlsZFByb3h5ID0gR1NUX0NISUxEX1BST1hZKGF1
dG9TcmMpOworICAgIGlmICghY2hpbGRQcm94eSkKKyAgICAgICAgcmV0dXJuIGRldmljZVNyYzsK
KworICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHN0YXRlQ2hhbmdlUmVzdWx0ID0gZ3N0X2VsZW1l
bnRfc2V0X3N0YXRlKGF1dG9TcmMsIEdTVF9TVEFURV9SRUFEWSk7CisgICAgaWYgKHN0YXRlQ2hh
bmdlUmVzdWx0ICE9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIGRl
dmljZVNyYzsKKworICAgIGlmIChnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkcmVuX2NvdW50KGNo
aWxkUHJveHkpKQorICAgICAgICBkZXZpY2VTcmMgPSBhZG9wdEdSZWYoR1NUX0VMRU1FTlQoZ3N0
X2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9pbmRleChjaGlsZFByb3h5LCAwKSkpOworCisgICAg
Z3N0X2VsZW1lbnRfc2V0X3N0YXRlKGF1dG9TcmMsIEdTVF9TVEFURV9OVUxMKTsKKyAgICByZXR1
cm4gZGV2aWNlU3JjOworfQorCitzdGF0aWMgdm9pZCBwcm9iZVNvdXJjZShHc3RFbGVtZW50KiBz
b3VyY2UsIGNvbnN0IFN0cmluZyYga2V5LCBNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZSB0eXBlLCBN
ZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgc291cmNlcykKK3sKKyNpZm5kZWYgR1NUX0FQSV9WRVJT
SU9OXzEKKyAgICBHc3RQcm9wZXJ0eVByb2JlKiBwcm9iZSA9IEdTVF9QUk9QRVJUWV9QUk9CRShz
b3VyY2UpOworICAgIGlmICghcHJvYmUpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IEdQ
YXJhbVNwZWMqIHBzcGVjID0gZ3N0X3Byb3BlcnR5X3Byb2JlX2dldF9wcm9wZXJ0eShwcm9iZSwg
ImRldmljZSIpOworICAgIGlmICghcHNwZWMpCisgICAgICAgIHJldHVybjsKKworICAgIEdWYWx1
ZUFycmF5KiBhcnJheSA9IGdzdF9wcm9wZXJ0eV9wcm9iZV9wcm9iZV9hbmRfZ2V0X3ZhbHVlcyhw
cm9iZSwgcHNwZWMpOworICAgIGlmIChhcnJheSkgeworICAgICAgICBHVmFsdWUqIHZhbHVlID0g
MDsKKyAgICAgICAgR093blB0cjxnY2hhcj4gZGV2aWNlTmFtZTsKKworICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IChpbnQpYXJyYXktPm5fdmFsdWVzOyBpKyspIHsKKyAgICAgICAgICAgIHZh
bHVlID0gZ192YWx1ZV9hcnJheV9nZXRfbnRoKGFycmF5LCBpKTsKKyAgICAgICAgICAgIGNvbnN0
IGdjaGFyKiBkZXZpY2UgPSBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpOworICAgICAgICAgICAg
Z19vYmplY3Rfc2V0KHNvdXJjZSwgImRldmljZSIsIGRldmljZSwgTlVMTCk7CisgICAgICAgICAg
ICBnX29iamVjdF9nZXQoc291cmNlLCAiZGV2aWNlLW5hbWUiLCBkZXZpY2VOYW1lLm91dFB0cigp
LCBOVUxMKTsKKyAgICAgICAgICAgIFN0cmluZyBzb3VyY2VOYW1lID0gU3RyaW5nKGRldmljZU5h
bWUuZ2V0KCkpOworCisgICAgICAgICAgICBTdHJpbmcgZGV2aWNlSWQgPSBrZXk7CisgICAgICAg
ICAgICBkZXZpY2VJZC5hcHBlbmQoIjsiKTsKKyAgICAgICAgICAgIGRldmljZUlkLmFwcGVuZChk
ZXZpY2UpOworCisgICAgICAgICAgICBHT3duUHRyPGdjaGFyPiBzb3VyY2VFbGVtZW50TmFtZShn
c3RfZWxlbWVudF9nZXRfbmFtZShzb3VyY2UpKTsKKyAgICAgICAgICAgIGlmICghZ19zdHJjbXAw
KHNvdXJjZUVsZW1lbnROYW1lLmdldCgpLCAiYXV0b3NyYy1hY3R1YWwtc3JjLXB1bHMiKSkKKyAg
ICAgICAgICAgICAgICBzb3VyY2VOYW1lID0gZmlsdGVyQXVkaW9Tb3VyY2VOYW1lKGRldmljZUlk
LCBzb3VyY2VOYW1lKTsKKworICAgICAgICAgICAgaWYgKCFzb3VyY2VOYW1lLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgICAgICBzb3VyY2VzLmFwcGVuZChNZWRpYVN0cmVhbVNvdXJjZTo6Y3JlYXRl
KGRldmljZUlkLCB0eXBlLCBzb3VyY2VOYW1lKSk7CisgICAgICAgIH0KKyAgICAgICAgZ192YWx1
ZV9hcnJheV9mcmVlKGFycmF5KTsKKyAgICB9CisjZWxzZQorICAgIC8vIEZJWE1FOiBnc3RyZWFt
ZXIgMS4wIGRvZXNuJ3QgaGF2ZSBhbiBlcXVpdmFsZW50IHRvIEdzdFByb3BlcnR5UHJvYmUsCisg
ICAgLy8gc28gd2UgZG9uJ3Qgc3VwcG9ydCBjaG9vc2luZyBhIHBhcnRpY3VsYXIgZGV2aWNlIHll
dC4KKyAgICAvLyBzZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lk
PTY3ODQwMgorICAgIFN0cmluZyBkZXZpY2VJZCA9IGtleTsKKyAgICBkZXZpY2VJZC5hcHBlbmQo
IjtkZWZhdWx0Iik7CisgICAgc291cmNlcy5hcHBlbmQoTWVkaWFTdHJlYW1Tb3VyY2U6OmNyZWF0
ZShkZXZpY2VJZCwgdHlwZSwgImRlZmF1bHQiKSk7CisjZW5kaWYKK30KKworI2lmbmRlZiBHU1Rf
QVBJX1ZFUlNJT05fMQorc3RhdGljIFN0cmluZyBmaWx0ZXJBdWRpb1NvdXJjZU5hbWUoY29uc3Qg
U3RyaW5nJiBkZXZpY2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIC8vIGF1dG9zcmMt
YWN0dWFsLXNyYy1wdWxzIHJldHVybnMgb3V0cHV0IGRldmljZXMsIGFuZCBkb2VzIG5vdCBzdXBw
bHkgZGV2aWNlTmFtZS4gVGhpcworICAgIC8vIHJlbW92ZXMgdGhlIG91dHB1dCBhbmQgcGFyc2Vz
IGEgc29tZXdoYXQgcmVhZGFibGUgZGlzcGxheSBuYW1lIGZyb20gdGhlICJkZXZpY2UgaWQiLgor
ICAgIGlmIChkZXZpY2VJZC5jb250YWlucygiYWxzYV9vdXRwdXQiLCBmYWxzZSkpCisgICAgICAg
IHJldHVybiAiIjsKKworICAgIGd1aW50IGxlbmd0aCA9IGRldmljZUlkLmxlbmd0aCgpOworICAg
IHNpemVfdCBwb3NpdGlvbiA9IGRldmljZUlkLmZpbmQoImFsc2FfaW5wdXQuIik7CisgICAgaWYg
KHBvc2l0aW9uICE9IG5vdEZvdW5kKQorICAgICAgICByZXR1cm4gZGV2aWNlSWQuc3Vic3RyaW5n
KHBvc2l0aW9uICsgMTEsIGxlbmd0aCk7CisgICAgcmV0dXJuIG5hbWU7Cit9CisjZW5kaWYgLy8g
IUdTVF9BUElfVkVSU0lPTl8xCisKK3N0YXRpYyBTdHJpbmcgZ2V0RGV2aWNlU3RyaW5nRnJvbURl
dmljZUlkU3RyaW5nKGNvbnN0IFN0cmluZyYgZGV2aWNlSWQpCit7CisgICAgc2l6ZV90IGluZGV4
ID0gZGV2aWNlSWQuZmluZCgiOyIpOworICAgIFN0cmluZyBkZXZpY2VTdHIgPSBkZXZpY2VJZC5z
dWJzdHJpbmcoaW5kZXgrMSwgZGV2aWNlSWQubGVuZ3RoKCkpOworICAgIHJldHVybiBkZXZpY2VT
dHI7Cit9CisKK3N0YXRpYyBTdHJpbmcgZ2V0RmFjdG9yeU5hbWVGcm9tRGV2aWNlSWRTdHJpbmco
Y29uc3QgU3RyaW5nJiBkZXZpY2VJZCkKK3sKKyAgICBzaXplX3QgaW5kZXggPSBkZXZpY2VJZC5m
aW5kKCI7Iik7CisgICAgU3RyaW5nIGRldmljZVN0ciA9IGRldmljZUlkLmxlZnQoaW5kZXgpOwor
ICAgIHJldHVybiBkZXZpY2VTdHI7Cit9CisKK3N0YXRpYyBnY2hhciogY3JlYXRlVW5pcXVlTmFt
ZShjb25zdCBnY2hhciogcHJlZml4KQoreworICAgIHN0YXRpYyBpbnQgY291bnQgPSAwOworICAg
IGdjaGFyKiB1bmlxdWVOYW1lID0gZ19zdHJkdXBfcHJpbnRmKCIlcyVkIiwgcHJlZml4LCBjb3Vu
dCsrKTsKKyAgICByZXR1cm4gdW5pcXVlTmFtZTsKK30KKworc3RhdGljIEdzdEVsZW1lbnQqIGNy
ZWF0ZUF1ZGlvU291cmNlQmluKEdzdEVsZW1lbnQqIHNvdXJjZSkKK3sKKyAgICBHUmVmUHRyPEdz
dEVsZW1lbnQ+IGF1ZGlvY29udmVydCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXVkaW9j
b252ZXJ0IiwgImF1ZGlvY29udmVydCIpOworICAgIGlmICghYXVkaW9jb252ZXJ0KSB7CisgICAg
ICAgIExPRyhNZWRpYSwgIkVSUk9SLCBHb3Qgbm8gYXVkaW9jb252ZXJ0IGVsZW1lbnQgZm9yIGF1
ZGlvIHNvdXJjZSBwaXBlbGluZSIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBH
UmVmUHRyPEdzdENhcHM+IGF1ZGlvY2FwczsKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAg
ICBhdWRpb2NhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X3NpbXBsZSgiYXVkaW8veC1yYXct
aW50IiwgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwgMSwgTlVMTCkpOworI2Vsc2UKKyAgICBhdWRp
b2NhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X3NpbXBsZSgiYXVkaW8veC1yYXciLCAiY2hh
bm5lbHMiLCBHX1RZUEVfSU5ULCAxLCBOVUxMKSk7CisjZW5kaWYKKyAgICBpZiAoIWF1ZGlvY2Fw
cykgeworICAgICAgICBMT0coTWVkaWEsICJFUlJPUiwgVW5hYmxlIHRvIGNyZWF0ZSBmaWx0ZXIg
Y2FwcyBmb3IgYXVkaW8gc291cmNlIHBpcGVsaW5lIik7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIEdPd25QdHI8Z2NoYXI+IGJpbk5hbWUoY3JlYXRlVW5pcXVlTmFtZSgiU3RyZWFt
RGV2aWNlX0F1ZGlvVGVzdFNvdXJjZUJpbiIpKTsKKyAgICBHc3RFbGVtZW50KiBhdWRpb1NvdXJj
ZUJpbiA9IGdzdF9iaW5fbmV3KGJpbk5hbWUuZ2V0KCkpOworCisgICAgZ3N0X2Jpbl9hZGRfbWFu
eShHU1RfQklOKGF1ZGlvU291cmNlQmluKSwgc291cmNlLCBhdWRpb2NvbnZlcnQuZ2V0KCksIE5V
TEwpOworCisgICAgaWYgKCFnc3RfZWxlbWVudF9saW5rX2ZpbHRlcmVkKHNvdXJjZSwgYXVkaW9j
b252ZXJ0LmdldCgpLCBhdWRpb2NhcHMuZ2V0KCkpKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkVS
Uk9SLCBDYW5ub3QgbGluayBhdWRpbyBzb3VyY2UgZWxlbWVudHMiKTsKKyAgICAgICAgZ3N0X29i
amVjdF91bnJlZihhdWRpb1NvdXJjZUJpbik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIEdzdFBhZCogc3JjUGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoYXVkaW9jb252
ZXJ0LmdldCgpLCAic3JjIik7CisgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChhdWRpb1NvdXJjZUJp
biwgZ3N0X2dob3N0X3BhZF9uZXcoInNyYyIsIHNyY1BhZCkpOworCisgICAgcmV0dXJuIGF1ZGlv
U291cmNlQmluOworfQorCitzdGF0aWMgR3N0RWxlbWVudCogY3JlYXRlVmlkZW9Tb3VyY2VCaW4o
R3N0RWxlbWVudCAqc291cmNlKQoreworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gY29sb3JzcGFj
ZTsKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBjb2xvcnNwYWNlID0gZ3N0X2VsZW1l
bnRfZmFjdG9yeV9tYWtlKCJmZm1wZWdjb2xvcnNwYWNlIiwgImNvbG9yc3BhY2UiKTsKKyNlbHNl
CisgICAgY29sb3JzcGFjZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgidmlkZW9jb252ZXJ0
IiwgImNvbG9yc3BhY2UiKTsKKyNlbmRpZgorICAgIGlmICghY29sb3JzcGFjZSkgeworICAgICAg
ICBMT0coTWVkaWEsICJFUlJPUiwgR290IG5vIGZmbXBlZ2NvbG9yc3BhY2UgZWxlbWVudCBmb3Ig
dmlkZW8gc291cmNlIHBpcGVsaW5lIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBH
UmVmUHRyPEdzdEVsZW1lbnQ+IHZpZGVvc2NhbGUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2Uo
InZpZGVvc2NhbGUiLCAidmlkZW9zY2FsZSIpOworICAgIGlmICghdmlkZW9zY2FsZSkgeworICAg
ICAgICBMT0coTWVkaWEsICJFUlJPUiwgR290IG5vIHZpZGVvc2NhbGUgZWxlbWVudCBmb3Igdmlk
ZW8gc291cmNlIHBpcGVsaW5lIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEdS
ZWZQdHI8R3N0Q2Fwcz4gdmlkZW9jYXBzOworI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAg
IHZpZGVvY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUoInZpZGVvL3gtcmF3LXl1diIsICJ3aWR0
aCIsIEdfVFlQRV9JTlQsIDMyMCwgImhlaWdodCIsIEdfVFlQRV9JTlQsIDI0MCwgTlVMTCk7Cisj
ZWxzZQorICAgIHZpZGVvY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUoInZpZGVvL3gtcmF3Iiwg
IndpZHRoIiwgR19UWVBFX0lOVCwgMzIwLCAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgMjQwLCBOVUxM
KTsKKyNlbmRpZgorICAgIGlmICghdmlkZW9jYXBzKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkVS
Uk9SLCBVbmFibGUgdG8gY3JlYXRlIGZpbHRlciBjYXBzIGZvciB2aWRlbyBzb3VyY2UgcGlwZWxp
bmUiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgR093blB0cjxnY2hhcj4gYmlu
TmFtZShjcmVhdGVVbmlxdWVOYW1lKCJTdHJlYW1EZXZpY2VfVmlkZW9UZXN0U291cmNlQmluIikp
OworICAgIEdzdEVsZW1lbnQqIHZpZGVvU291cmNlQmluID0gZ3N0X2Jpbl9uZXcoYmluTmFtZS5n
ZXQoKSk7CisKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU4odmlkZW9Tb3VyY2VCaW4pLCBz
b3VyY2UsIHZpZGVvc2NhbGUuZ2V0KCksIGNvbG9yc3BhY2UuZ2V0KCksIE5VTEwpOworCisgICAg
aWYgKCFnc3RfZWxlbWVudF9saW5rX21hbnkoc291cmNlLCB2aWRlb3NjYWxlLmdldCgpLCBOVUxM
KQorICAgICAgICB8fCAhZ3N0X2VsZW1lbnRfbGlua19maWx0ZXJlZCh2aWRlb3NjYWxlLmdldCgp
LCBjb2xvcnNwYWNlLmdldCgpLCB2aWRlb2NhcHMuZ2V0KCkpKSB7CisgICAgICAgIExPRyhNZWRp
YSwgIkVSUk9SLCBDYW5ub3QgbGluayB2aWRlbyBzb3VyY2UgZWxlbWVudHMiKTsKKyAgICAgICAg
Z3N0X29iamVjdF91bnJlZih2aWRlb1NvdXJjZUJpbik7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIEdSZWZQdHI8R3N0UGFkPiBzcmNQYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGlj
X3BhZChjb2xvcnNwYWNlLmdldCgpLCAic3JjIik7CisgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZCh2
aWRlb1NvdXJjZUJpbiwgZ3N0X2dob3N0X3BhZF9uZXcoInNyYyIsIHNyY1BhZC5nZXQoKSkpOwor
CisgICAgcmV0dXJuIHZpZGVvU291cmNlQmluOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyUHJp
dmF0ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM3
NThjNTliMjQ1YjRjYWUzYzUzODQ2MzkzYjYxZGIzZGEyYzM3YzkKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJl
YW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMTIgQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKworI2lmbmRlZiBNZWRpYVN0cmVhbUNlbnRlclBy
aXZhdGVHU3RyZWFtZXJfaAorI2RlZmluZSBNZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFt
ZXJfaAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIk1lZGlhU3RyZWFt
U291cmNlLmgiCisjaW5jbHVkZSAiU291cmNlRmFjdG9yeS5oIgorCisjaW5jbHVkZSA8Z3N0L2dz
dC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1lZGlh
U3RyZWFtQ2VudGVyOworY2xhc3MgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOworY2xhc3MgTWVkaWFT
dHJlYW1Db21wb25lbnQ7CitjbGFzcyBNZWRpYVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVudDsKKwor
Y2xhc3MgTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyIDogcHJpdmF0ZSBTb3VyY2VG
YWN0b3J5IHsKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICBTdHJpbmcg
bV9mYWN0b3J5S2V5OworICAgICAgICBNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZSBtX3R5cGU7Cisg
ICAgICAgIFN0cmluZyBtX2RldmljZTsKKyAgICB9IFNvdXJjZUluZm87CisKKyAgICB0eXBlZGVm
IEhhc2hNYXA8U3RyaW5nLCBTb3VyY2VJbmZvPiBTb3VyY2VJbmZvTWFwOworICAgIHR5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIEdSZWZQdHI8R3N0RWxlbWVudEZhY3Rvcnk+ID4gRWxlbWVudEZhY3Rv
cnlNYXA7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxNZWRpYVN0cmVhbUNlbnRl
clByaXZhdGVHU3RyZWFtZXI+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcigpKTsKKyAgICB9CisKKyAg
ICB2b2lkIHF1ZXJ5TWVkaWFTdHJlYW1Tb3VyY2VzKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3Vy
Y2VzUXVlcnlDbGllbnQ+KTsKKworICAgIHZvaWQgZGlkU2V0TWVkaWFTdHJlYW1UcmFja0VuYWJs
ZWQoTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiwgTWVkaWFTdHJlYW1Db21wb25lbnQqKTsKKyAgICB2
b2lkIGRpZFN0b3BMb2NhbE1lZGlhU3RyZWFtKE1lZGlhU3RyZWFtRGVzY3JpcHRvciopOworCitw
cml2YXRlOgorICAgIE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcigpCisgICAgewor
ICAgIH0KKworICAgIHZvaWQgcmVnaXN0ZXJTb3VyY2VGYWN0b3JpZXMoY29uc3QgTWVkaWFTdHJl
YW1Tb3VyY2VWZWN0b3ImKTsKKyAgICBTdHJpbmcgc3RvcmVFbGVtZW50RmFjdG9yeUZvckVsZW1l
bnQoR3N0RWxlbWVudCogc291cmNlKTsKKyAgICBHc3RFbGVtZW50RmFjdG9yeSAqc3RvcmVkRWxl
bWVudEZhY3RvcnkoY29uc3QgU3RyaW5nJiBrZXkpOworICAgIFN0cmluZyBzdG9yZVNvdXJjZUlu
Zm8oTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGUsIGNvbnN0IFN0cmluZyYgZmFjdG9yeUtleSwgY29u
c3QgU3RyaW5nJiBkZXZpY2UpOworCisgICAgLy8gU291cmNlRmFjdG9yeQorICAgIEdzdEVsZW1l
bnQqIGNyZWF0ZVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlkLCBHc3RQYWQqKiBzcmNQYWQp
OworCisgICAgRWxlbWVudEZhY3RvcnlNYXAgbV9lbGVtZW50RmFjdG9yeU1hcDsKKyAgICBTb3Vy
Y2VJbmZvTWFwIG1fc291cmNlSW5mb01hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNlbmRpZiAvLyBNZWRpYVN0cmVh
bUNlbnRlclByaXZhdGVHU3RyZWFtZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1NvdXJjZUZhY3RvcnkuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Tb3VyY2VGYWN0b3J5LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMjkwMGE3M2FiOTlmNDRjZmYxNjgyMDFlZjZiNjZjMGZmMmQ3YWJmZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9T
b3VyY2VGYWN0b3J5LmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MTIgQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICovCisKKyNpZm5kZWYgU291cmNlRmFjdG9yeV9oCisjZGVmaW5lIFNvdXJjZUZh
Y3RvcnlfaAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgPGdzdC9nc3Qu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBTb3VyY2VGYWN0b3J5IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIEdzdEVsZW1l
bnQqIGNyZWF0ZVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlkLCBHc3RQYWQqKiBzcmNQYWQp
ID0gMDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgflNvdXJjZUZhY3RvcnkoKSB7IH0KK307
CisKK30KKworI2VuZGlmIC8vIEVOQUJMRUQoTUVESUFfU1RSRUFNKQorCisjZW5kaWYgLy8gU291
cmNlRmFjdG9yeV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192927</attachid>
            <date>2013-03-13 08:30:26 -0700</date>
            <delta_ts>2013-10-21 05:48:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110150-20130313102624.patch</filename>
            <type>text/plain</type>
            <size>59656</size>
            <attacher name="Jonathon Jongsma (jonner)">jonathon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1NTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDQyNDAy
NjU0YzQ1MDA0MDkwMWQ4NmM4ZWE3NTk2YWI2YjY3NTAwOGEuLjkzOTNhZDM1YzY1MzBmZGI4ZDY3
ZGE0YjBiMDljODE0NTA0ZDdhOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xMjUsNiArMTI1
LDcgQEAgd2ViY29yZWd0a19jcHBmbGFncyArPSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ayBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvZW5jaGFudAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBmNWVkMWQzMmVj
NTk4YWFhZjFkZjY0NmQ4YjlhZTk4NmUwNGQ5NTVlLi5lNmJhOGJiZmMxMWMxZTEyMjgzNWEzZGMy
MjkyM2Q1NmRlMTMyNzFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU4NDgs
OCArNTg0OCwxMyBAQCB3ZWJjb3JlX3BsYXRmb3JtX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3Iu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUlRDU3RhdHNSZXF1ZXN0
LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JUQ1ZvaWRSZXF1ZXN0
LmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9DZW50
cmFsUGlwZWxpbmVVbml0LmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9DZW50cmFsUGlwZWxpbmVVbml0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlh
U3RyZWFtQ2VudGVyR1N0cmVhbWVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIuaCBcCisJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFt
Q2VudGVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9Tb3VyY2VGYWN0b3J5LmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21vY2svRGV2aWNlTW90aW9uQ2xpZW50TW9jay5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21vY2svRGV2aWNlTW90aW9uQ2xpZW50TW9jay5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tb2NrL0RldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jay5jcHAgXApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1l
clZlcnNpb25pbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9HU3RyZWFtZXJWZXJzaW9uaW5nLmgKaW5kZXggM2VlMzI1ZTZmODZlNjM0MTUyNTE0MDEzOGIy
N2VlMmY2M2Y0ZGI0NS4uZjU0NWI0ODA4N2FiZTY3ZGMwYjRmMTY1ZjZmYzliMTk1ZDU3MjgwOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dT
dHJlYW1lclZlcnNpb25pbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR1N0cmVhbWVyVmVyc2lvbmluZy5oCkBAIC0zMyw2ICszMywyNSBAQCB2b2lk
IHdlYmtpdEdzdE9iamVjdFJlZlNpbmsoR3N0T2JqZWN0Kik7CiBHc3RQYWQqIHdlYmtpdEdzdEdo
b3N0UGFkRnJvbVN0YXRpY1RlbXBsYXRlKEdzdFN0YXRpY1BhZFRlbXBsYXRlKiwgY29uc3QgZ2No
YXIqIG5hbWUsIEdzdFBhZCogdGFyZ2V0KTsKIEdSZWZQdHI8R3N0Q2Fwcz4gd2Via2l0R3N0R2V0
UGFkQ2FwcyhHc3RQYWQqKTsKIEdSZWZQdHI8R3N0QnVzPiB3ZWJraXRHc3RQaXBlbGluZUdldEJ1
cyhHc3RQaXBlbGluZSopOwordGVtcGxhdGUgPGNsYXNzIFQ+CitHc3RJdGVyYXRvclJlc3VsdCB3
ZWJraXRHc3RJdGVyYXRvck5leHQoR3N0SXRlcmF0b3IqIGl0ZXJhdG9yLCBHUmVmUHRyPFQ+JiBl
bGVtZW50KQoreworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAgR1ZhbHVlIGl0ZW0gPSBH
X1ZBTFVFX0lOSVQ7CisjZWxzZQorICAgIGdwb2ludGVyIGl0ZW0gPSAwOworI2VuZGlmCisgICAg
R3N0SXRlcmF0b3JSZXN1bHQgcmVzdWx0ID0gZ3N0X2l0ZXJhdG9yX25leHQoaXRlcmF0b3IsICZp
dGVtKTsKKyAgICBpZiAocmVzdWx0ID09IEdTVF9JVEVSQVRPUl9PSykgeworI2lmZGVmIEdTVF9B
UElfVkVSU0lPTl8xCisgICAgICAgIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxUKj4oZ192YWx1ZV9n
ZXRfb2JqZWN0KCZpdGVtKSk7CisjZWxzZQorICAgICAgICBlbGVtZW50ID0gYWRvcHRHUmVmKHJl
aW50ZXJwcmV0X2Nhc3Q8VCo+KGl0ZW0pKTsKKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm4gcmVz
dWx0OworfQorCiAjaWYgRU5BQkxFKFZJREVPKQogYm9vbCBnZXRWaWRlb1NpemVBbmRGb3JtYXRG
cm9tQ2FwcyhHc3RDYXBzKiwgV2ViQ29yZTo6SW50U2l6ZSYsIEdzdFZpZGVvRm9ybWF0JiwgaW50
JiBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLCBpbnQmIHBpeGVsQXNwZWN0UmF0aW9EZW5vbWlu
YXRvciwgaW50JiBzdHJpZGUpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5pdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVs
aW5lVW5pdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjE0MDc1NTFlY2JkNzA5M2QyYjU3OWNjNGVlMGEwYWFi
MTEwOTA2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9DZW50cmFsUGlwZWxpbmVVbml0LmNwcApAQCAtMCwwICsxLDY5MiBA
QAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJDZW50cmFsUGlw
ZWxpbmVVbml0LmgiCisKKyNpbmNsdWRlICJHU3RyZWFtZXJVdGlsaXRpZXMuaCIKKyNpbmNsdWRl
ICJHU3RyZWFtZXJWZXJzaW9uaW5nLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUg
IlNvdXJjZUZhY3RvcnkuaCIKKworI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBnYm9vbGVhbiBtZXNzYWdlQ2FsbGJh
Y2soR3N0QnVzKiwgR3N0TWVzc2FnZSosIGdwb2ludGVyIGRhdGEpOworc3RhdGljIFN0cmluZyBn
ZW5lcmF0ZUVsZW1lbnRQYWRJZChHc3RFbGVtZW50KiwgR3N0UGFkKik7CisKK0NlbnRyYWxQaXBl
bGluZVVuaXQmIENlbnRyYWxQaXBlbGluZVVuaXQ6Omluc3RhbmNlKCkKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ2VudHJhbFBpcGVsaW5l
VW5pdCwgaW5zdGFuY2UsICgpKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKK0NlbnRyYWxQ
aXBlbGluZVVuaXQ6OkNlbnRyYWxQaXBlbGluZVVuaXQoKQoreworICAgIGluaXRpYWxpemVHU3Ry
ZWFtZXIoKTsKKworICAgIG1fcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3KCJtZWRpYXN0cmVh
bV9waXBlbGluZSIpOworICAgIEdSZWZQdHI8R3N0QnVzPiBidXMgPSB3ZWJraXRHc3RQaXBlbGlu
ZUdldEJ1cyhHU1RfUElQRUxJTkUobV9waXBlbGluZS5nZXQoKSkpOworICAgIGlmIChidXMpIHsK
KyAgICAgICAgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoKGJ1cy5nZXQoKSk7CisjaWZkZWYgR1NU
X0FQSV9WRVJTSU9OXzEKKyAgICAgICAgZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyKGJ1cy5nZXQo
KSwgZ3N0X2J1c19zeW5jX3NpZ25hbF9oYW5kbGVyLCAwLCAwKTsKKyNlbHNlCisgICAgICAgIGdz
dF9idXNfc2V0X3N5bmNfaGFuZGxlcihidXMuZ2V0KCksIGdzdF9idXNfc3luY19zaWduYWxfaGFu
ZGxlciwgMCk7CisjZW5kaWYKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChidXMuZ2V0KCksICJz
eW5jLW1lc3NhZ2UiLCBHX0NBTExCQUNLKG1lc3NhZ2VDYWxsYmFjayksIHRoaXMpOworICAgIH0K
KyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1BM
QVlJTkcpOworfQorCitDZW50cmFsUGlwZWxpbmVVbml0Ojp+Q2VudHJhbFBpcGVsaW5lVW5pdCgp
Cit7CisgICAgR1JlZlB0cjxHc3RCdXM+IGJ1cyA9IHdlYmtpdEdzdFBpcGVsaW5lR2V0QnVzKEdT
VF9QSVBFTElORShtX3BpcGVsaW5lLmdldCgpKSk7CisgICAgaWYgKGJ1cykKKyAgICAgICAgZ3N0
X2J1c19yZW1vdmVfc2lnbmFsX3dhdGNoKGJ1cy5nZXQoKSk7Cit9CisKK3ZvaWQgQ2VudHJhbFBp
cGVsaW5lVW5pdDo6cmVnaXN0ZXJTb3VyY2VGYWN0b3J5KFNvdXJjZUZhY3RvcnkqIGZhY3Rvcnks
IGNvbnN0IFN0cmluZyYgc291cmNlSWQpCit7CisgICAgbV9zb3VyY2VGYWN0b3J5TWFwLmFkZChz
b3VyY2VJZCwgZmFjdG9yeSk7Cit9CisKK3ZvaWQgQ2VudHJhbFBpcGVsaW5lVW5pdDo6ZGVyZWdp
c3RlclNvdXJjZUZhY3RvcnkoY29uc3QgU3RyaW5nJiBzb3VyY2VJZCkKK3sKKyAgICBtX3NvdXJj
ZUZhY3RvcnlNYXAucmVtb3ZlKHNvdXJjZUlkKTsKK30KKworYm9vbCBDZW50cmFsUGlwZWxpbmVV
bml0Ojpjb25uZWN0QW5kR2V0U291cmNlRWxlbWVudChjb25zdCBTdHJpbmcmIHNvdXJjZUlkLCBH
UmVmUHRyPEdzdEVsZW1lbnQ+JiBzb3VyY2VFbGVtZW50LCBHUmVmUHRyPEdzdFBhZD4mIHNvdXJj
ZVBhZCkKK3sKKyAgICBMT0coTWVkaWEsICJDb25uZWN0aW5nIHRvIHNvdXJjZSBlbGVtZW50ICVz
Iiwgc291cmNlSWQuYXNjaWkoKS5kYXRhKCkpOworCisgICAgQ2VudHJhbFBpcGVsaW5lVW5pdDo6
UGlwZWxpbmVNYXA6Oml0ZXJhdG9yIHNvdXJjZUl0ZXJhdG9yID0gbV9waXBlbGluZU1hcC5maW5k
KHNvdXJjZUlkKTsKKyAgICBpZiAoc291cmNlSXRlcmF0b3IgIT0gbV9waXBlbGluZU1hcC5lbmQo
KSkgeworICAgICAgICBTb3VyY2UmIHNvdXJjZSA9IHNvdXJjZUl0ZXJhdG9yLT52YWx1ZTsKKyAg
ICAgICAgTE9HKE1lZGlhLCAiU291cmNlIGVsZW1lbnQgJXMgYWxyZWFkeSBpbiBwaXBlbGluZSwg
dXNpbmcgaXQuIiwgc291cmNlSWQuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBzb3VyY2VFbGVt
ZW50ID0gc291cmNlLm1fc291cmNlRWxlbWVudDsKKyAgICAgICAgc291cmNlUGFkID0gc291cmNl
Lm1fc291cmNlUGFkOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBDZW50cmFs
UGlwZWxpbmVVbml0OjpTb3VyY2VGYWN0b3J5TWFwOjppdGVyYXRvciBzb3VyY2VGYWN0b3J5SXRl
cmF0b3IgPSBtX3NvdXJjZUZhY3RvcnlNYXAuZmluZChzb3VyY2VJZCk7CisgICAgaWYgKHNvdXJj
ZUZhY3RvcnlJdGVyYXRvciAhPSBtX3NvdXJjZUZhY3RvcnlNYXAuZW5kKCkpIHsKKyAgICAgICAg
TE9HKE1lZGlhLCAiRm91bmQgYSBTb3VyY2VGYWN0b3J5LiBDcmVhdGluZyBzb3VyY2UgZWxlbWVu
dCAlcyIsIHNvdXJjZUlkLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgU291cmNlRmFjdG9yeSog
c291cmNlRmFjdG9yeSA9IHNvdXJjZUZhY3RvcnlJdGVyYXRvci0+dmFsdWU7CisgICAgICAgIHNv
dXJjZUVsZW1lbnQgPSBzb3VyY2VGYWN0b3J5LT5jcmVhdGVTb3VyY2Uoc291cmNlSWQsIHNvdXJj
ZVBhZCk7CisgICAgICAgIGlmICghc291cmNlRWxlbWVudCkgeworICAgICAgICAgICAgTE9HKE1l
ZGlhLCAiRVJST1IsIHVuYWJsZSB0byBjcmVhdGUgc291cmNlIGVsZW1lbnQiKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghc291cmNlUGFkKSB7
CisgICAgICAgICAgICBMT0coTWVkaWEsICJTb3VyY2VGYWN0b3J5IGNvdWxkIG5vdCBjcmVhdGUg
YSBzb3VyY2UgcGFkLCB0cnlpbmcgdGhlIGVsZW1lbnQgc3RhdGljIFwic3JjXCIgcGFkIik7Cisg
ICAgICAgICAgICBzb3VyY2VQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19w
YWQoc291cmNlRWxlbWVudC5nZXQoKSwgInNyYyIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICghc291cmNlUGFkKSB7CisgICAgICAgICAgICBMT0coTWVkaWEsICJFUlJPUiwgdW5hYmxlIHRv
IHJldHJpZXZlIGVsZW1lbnQgc291cmNlIHBhZCIpOworICAgICAgICAgICAgc291cmNlRWxlbWVu
dC5jbGVhcigpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAg
ICAgR3N0RWxlbWVudCogdGVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ0ZWUiLCAwKTsK
KyAgICAgICAgaWYgKCF0ZWUpIHsKKyAgICAgICAgICAgIExPRyhNZWRpYSwgIkVSUk9SLCBHb3Qg
bm8gdGVlIGVsZW1lbnQiKTsKKyAgICAgICAgICAgIHNvdXJjZUVsZW1lbnQuY2xlYXIoKTsKKyAg
ICAgICAgICAgIHNvdXJjZVBhZC5jbGVhcigpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOKG1fcGlwZWxpbmUu
Z2V0KCkpLCBzb3VyY2VFbGVtZW50LmdldCgpLCB0ZWUsIE5VTEwpOworCisgICAgICAgIGdzdF9l
bGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoc291cmNlRWxlbWVudC5nZXQoKSk7CisgICAg
ICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQodGVlKTsKKworICAgICAgICBH
UmVmUHRyPEdzdFBhZD4gc2lua3BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGlj
X3BhZCh0ZWUsICJzaW5rIikpOworICAgICAgICBnc3RfcGFkX2xpbmsoc291cmNlUGFkLmdldCgp
LCBzaW5rcGFkLmdldCgpKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIENl
bnRyYWxQaXBlbGluZVVuaXQ6OmNvbm5lY3RUb1NvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlk
LCBHc3RFbGVtZW50KiBzaW5rLCBHc3RQYWQqIHNpbmtwYWQpCit7CisgICAgR1JlZlB0cjxHc3RQ
YWQ+IHJlZlNpbmtQYWQoc2lua3BhZCk7CisgICAgTE9HKE1lZGlhLCAiQ29ubmVjdGluZyB0byBz
b3VyY2Ugd2l0aCBpZD0lcywgc2luaz0lcCwgc2lua3BhZD0lcCIsIHNvdXJjZUlkLmFzY2lpKCku
ZGF0YSgpLCBzaW5rLCBzaW5rcGFkKTsKKworICAgIGlmICghc2luayB8fCBzb3VyY2VJZC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiRVJST1IsIE5vIHNpbmsgcHJvdmlkZWQgb3Ig
ZW1wdHkgc291cmNlIGlkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBp
ZiAoIXJlZlNpbmtQYWQpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiTm8gcGFkIHdhcyBnaXZlbiBh
cyBhcmd1bWVudCwgdHJ5aW5nIHRoZSBlbGVtZW50IHN0YXRpYyBcInNpbmtcIiBwYWQuIik7Cisg
ICAgICAgIHJlZlNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQo
c2luaywgInNpbmsiKSk7CisgICAgICAgIGlmICghcmVmU2lua1BhZCkgeworICAgICAgICAgICAg
TE9HKE1lZGlhLCAiRVJST1IsIFVuYWJsZSB0byByZXRyaWV2ZSBlbGVtZW50IHNpbmsgcGFkIik7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBHUmVm
UHRyPEdzdEVsZW1lbnQ+IHNvdXJjZUVsZW1lbnQ7CisgICAgR1JlZlB0cjxHc3RQYWQ+IHNvdXJj
ZVBhZDsKKworICAgIGJvb2wgaGF2ZVNvdXJjZXMgPSBjb25uZWN0QW5kR2V0U291cmNlRWxlbWVu
dChzb3VyY2VJZCwgc291cmNlRWxlbWVudCwgc291cmNlUGFkKTsKKyAgICBpZiAoIXNvdXJjZUVs
ZW1lbnQpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiRVJST1IsIFVuYWJsZSB0byBnZXQgc291cmNl
IGVsZW1lbnQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEdSZWZQdHI8
R3N0RWxlbWVudD4gcXVldWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInF1ZXVlIiwgMCk7
CisgICAgaWYgKCFxdWV1ZSkgeworICAgICAgICBMT0coTWVkaWEsICJFUlJPUiwgR290IG5vIHF1
ZXVlIGVsZW1lbnQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEdSZWZQ
dHI8R3N0RWxlbWVudD4gc2lua1BhcmVudCA9IGFkb3B0R1JlZihHU1RfRUxFTUVOVChnc3RfZWxl
bWVudF9nZXRfcGFyZW50KHNpbmspKSk7CisgICAgaWYgKCFzaW5rUGFyZW50KSB7CisgICAgICAg
IExPRyhNZWRpYSwgIlNpbmsgbm90IGluIHBpcGVsaW5lLCBhZGRpbmcuIik7CisgICAgICAgIGdz
dF9iaW5fYWRkKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIHNpbmspOworICAgIH0gZWxzZSBp
ZiAoc2lua1BhcmVudC5nZXQoKSAhPSBtX3BpcGVsaW5lLmdldCgpKSB7CisgICAgICAgIExPRyhN
ZWRpYSwgIkVSUk9SLCBTaW5rIGFscmVhZHkgYWRkZWQgdG8gYW5vdGhlciBlbGVtZW50LiBQaXBl
bGluZSBpcyBub3cgYnJva2VuISIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgcXVldWUuZ2V0KCkpOwor
CisgICAgR1JlZlB0cjxHc3RQYWQ+IHRlZVNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRf
cGVlcihzb3VyY2VQYWQuZ2V0KCkpKTsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IHRlZSA9IGFk
b3B0R1JlZihnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudCh0ZWVTaW5rUGFkLmdldCgpKSk7CisK
KyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KHNpbmspOworICAgIGdzdF9l
bGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQocXVldWUuZ2V0KCkpOworCisgICAgZ3N0X2Vs
ZW1lbnRfbGlua19wYWRzX2Z1bGwodGVlLmdldCgpLCAwLCBxdWV1ZS5nZXQoKSwgInNpbmsiLCBH
U1RfUEFEX0xJTktfQ0hFQ0tfREVGQVVMVCk7CisgICAgR1JlZlB0cjxHc3RQYWQ+IHF1ZXVlU3Jj
UGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHF1ZXVlLmdldCgpLCAi
c3JjIikpOworICAgIGdzdF9wYWRfbGluayhxdWV1ZVNyY1BhZC5nZXQoKSwgcmVmU2lua1BhZC5n
ZXQoKSk7CisKKyAgICBpZiAoIWhhdmVTb3VyY2VzKSB7CisgICAgICAgIG1fcGlwZWxpbmVNYXAu
YWRkKHNvdXJjZUlkLCBTb3VyY2Uoc291cmNlRWxlbWVudCwgc291cmNlUGFkLCAwLCB0cnVlKSk7
CisgICAgICAgIG1fc291cmNlSWRMb29rdXBNYXAuYWRkKGdlbmVyYXRlRWxlbWVudFBhZElkKHNv
dXJjZUVsZW1lbnQuZ2V0KCksIHNvdXJjZVBhZC5nZXQoKSksIHNvdXJjZUlkKTsKKyAgICB9CisK
KyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1BM
QVlJTkcpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ2VudHJhbFBpcGVsaW5lVW5p
dDo6ZGlzY29ubmVjdEZyb21Tb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJZCwgR3N0RWxlbWVu
dCogc2luaywgR3N0UGFkKiBzaW5rcGFkKQoreworICAgIEdSZWZQdHI8R3N0UGFkPiByZWZTaW5r
UGFkKHNpbmtwYWQpOworICAgIExPRyhNZWRpYSwgIkRpc2Nvbm5lY3RpbmcgZnJvbSBzb3VyY2Ug
d2l0aCBpZD0lcywgc2luaz0lcCwgc2lua3BhZD0lcCIsIHNvdXJjZUlkLmFzY2lpKCkuZGF0YSgp
LCBzaW5rLCBzaW5rcGFkKTsKKworICAgIGlmICghc2luayB8fCBzb3VyY2VJZC5pc0VtcHR5KCkp
IHsKKyAgICAgICAgTE9HKE1lZGlhLCAiRVJST1IsIE5vIHNpbmsgcHJvdmlkZWQgb3IgZW1wdHkg
c291cmNlIGlkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBQaXBlbGlu
ZU1hcDo6aXRlcmF0b3Igc291cmNlSXRlcmF0b3IgPSBtX3BpcGVsaW5lTWFwLmZpbmQoc291cmNl
SWQpOworICAgIGlmIChzb3VyY2VJdGVyYXRvciA9PSBtX3BpcGVsaW5lTWFwLmVuZCgpKSB7Cisg
ICAgICAgIExPRyhNZWRpYSwgIkNvdWxkIG5vdCBmaW5kIHNvdXJjZSB3aXRoIGlkPSVzIiwgc291
cmNlSWQuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKCFyZWZTaW5rUGFkKSB7CisgICAgICAgIExPRyhNZWRpYSwgIk5vIHBhZCB3YXMgZ2l2
ZW4gYXMgYXJndW1lbnQsIHRyeWluZyB0aGUgZWxlbWVudCBzdGF0aWMgXCJzaW5rXCIgcGFkLiIp
OworICAgICAgICByZWZTaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNf
cGFkKHNpbmssICJzaW5rIikpOworICAgICAgICBpZiAoIXJlZlNpbmtQYWQpIHsKKyAgICAgICAg
ICAgIExPRyhNZWRpYSwgIkVSUk9SLCBVbmFibGUgdG8gcmV0cmlldmUgZWxlbWVudCBzaW5rIHBh
ZCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAg
R1JlZlB0cjxHc3RQYWQ+IGxRdWV1ZVNyY1BhZCA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9wZWVy
KHJlZlNpbmtQYWQuZ2V0KCkpKTsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGxRdWV1ZSA9IGFk
b3B0R1JlZihnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudChsUXVldWVTcmNQYWQuZ2V0KCkpKTsK
KyAgICBHUmVmUHRyPEdzdFBhZD4gbFF1ZXVlU2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVu
dF9nZXRfc3RhdGljX3BhZChsUXVldWUuZ2V0KCksICJzaW5rIikpOworICAgIEdSZWZQdHI8R3N0
UGFkPiBsVGVlU3JjUGFkID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X3BlZXIobFF1ZXVlU2lua1Bh
ZC5nZXQoKSkpOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbFRlZSA9IGFkb3B0R1JlZihnc3Rf
cGFkX2dldF9wYXJlbnRfZWxlbWVudChsVGVlU3JjUGFkLmdldCgpKSk7CisgICAgR1JlZlB0cjxH
c3RQYWQ+IGxUZWVTaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFk
KGxUZWUuZ2V0KCksICJzaW5rIikpOworICAgIEdSZWZQdHI8R3N0UGFkPiBzb3VyY2VTcmNQYWQg
PSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfcGVlcihsVGVlU2lua1BhZC5nZXQoKSkpOworICAgIEdS
ZWZQdHI8R3N0RWxlbWVudD4gc291cmNlRWxlbWVudCA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9w
YXJlbnRfZWxlbWVudChzb3VyY2VTcmNQYWQuZ2V0KCkpKTsKKworICAgIC8vIGRpc2Nvbm5lY3Qg
cGFkIGFuZCByZW1vdmUgdGhlIHNpbmsgaWYgaXQgaGFzIG5vIG1vcmUgcGFkcy4KKyAgICBpZiAo
IWRpc2Nvbm5lY3RTaW5rRnJvbVRlZShsVGVlLmdldCgpLCBzaW5rLCByZWZTaW5rUGFkLmdldCgp
KSkKKyAgICAgICAgcmVtb3ZlU291cmNlRXh0ZW5zaW9uRnJvbUJlaGluZChzb3VyY2VFbGVtZW50
LmdldCgpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitHc3RFbGVtZW50KiBDZW50cmFsUGlw
ZWxpbmVVbml0OjpwaXBlbGluZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGlwZWxpbmUuZ2V0
KCk7Cit9CisKK2d1aW50IENlbnRyYWxQaXBlbGluZVVuaXQ6OmRpc2Nvbm5lY3RTaW5rRnJvbVBp
cGVsaW5lKEdzdEVsZW1lbnQqIHNpbmspCit7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKHNp
bmssIEdTVF9TVEFURV9OVUxMKTsKKyAgICBnc3RfYmluX3JlbW92ZShHU1RfQklOKG1fcGlwZWxp
bmUuZ2V0KCkpLCBzaW5rKTsKKyAgICBHUmVmUHRyPEdzdFBhZD4gdW5saW5rZWRRdWV1ZVNyY1Bh
ZCA9IGdzdF9iaW5fZmluZF91bmxpbmtlZF9wYWQoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwg
R1NUX1BBRF9TUkMpOworCisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBxdWV1ZSA9IGFkb3B0R1Jl
Zihnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudCh1bmxpbmtlZFF1ZXVlU3JjUGFkLmdldCgpKSk7
CisgICAgR1JlZlB0cjxHc3RQYWQ+IHF1ZXVlU2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVu
dF9nZXRfc3RhdGljX3BhZChxdWV1ZS5nZXQoKSwgInNpbmsiKSk7CisgICAgR1JlZlB0cjxHc3RQ
YWQ+IHRlZVNyY1BhZCA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9wZWVyKHF1ZXVlU2lua1BhZC5n
ZXQoKSkpOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gdGVlID0gYWRvcHRHUmVmKGdzdF9wYWRf
Z2V0X3BhcmVudF9lbGVtZW50KHRlZVNyY1BhZC5nZXQoKSkpOworCisgICAgZ3N0X2VsZW1lbnRf
c2V0X3N0YXRlKHF1ZXVlLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7CisgICAgZ3N0X3BhZF9zZXRf
YWN0aXZlKHRlZVNyY1BhZC5nZXQoKSwgRkFMU0UpOworICAgIGdzdF9iaW5fcmVtb3ZlKEdTVF9C
SU4obV9waXBlbGluZS5nZXQoKSksIHF1ZXVlLmdldCgpKTsKKworICAgIGdzdF9lbGVtZW50X3Jl
bGVhc2VfcmVxdWVzdF9wYWQodGVlLmdldCgpLCB0ZWVTcmNQYWQuZ2V0KCkpOworICAgIExPRyhN
ZWRpYSwgInJlbW92aW5nIHN0dWZmIGRvbmUiKTsKKworICAgIGd1aW50IHNyY3BhZHMgPSAtMTsK
KyAgICBnX29iamVjdF9nZXQodGVlLmdldCgpLCAibnVtLXNyYy1wYWRzIiwgJnNyY3BhZHMsIE5V
TEwpOworCisgICAgcmV0dXJuIHNyY3BhZHM7Cit9CisKK3ZvaWQgQ2VudHJhbFBpcGVsaW5lVW5p
dDo6cmVtb3ZlU291cmNlRXh0ZW5zaW9uRnJvbUJlaGluZChHc3RFbGVtZW50KiBzb3VyY2VFeHRl
bnNpb24pCit7CisgICAgR1JlZlB0cjxHc3RQYWQ+IHNlU3JjUGFkID0gYWRvcHRHUmVmKGdzdF9l
bGVtZW50X2dldF9zdGF0aWNfcGFkKHNvdXJjZUV4dGVuc2lvbiwgInNyYyIpKTsKKyAgICBHUmVm
UHRyPEdzdFBhZD4gclRlZVNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfcGVlcihzZVNy
Y1BhZC5nZXQoKSkpOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gclRlZSA9IGFkb3B0R1JlZihn
c3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudChyVGVlU2lua1BhZC5nZXQoKSkpOworCisgICAgLy8g
R2V0IGxlZnQgaGFuZCBzaWRlIGVsZW1lbnRzCisgICAgR1JlZlB0cjxHc3RQYWQ+IHNlU2lua1Bh
ZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChzb3VyY2VFeHRlbnNpb24s
ICJzaW5rIikpOworICAgIGlmICghc2VTaW5rUGFkKSB7CisgICAgICAgIExPRyhNZWRpYSwgInNv
dXJjZSBleHRlbnNpb24gZGlkIG5vdCBoYXZlIGFueSBzaW5rIHBhZHMuIEFzc3VtaW5nIGl0J3Mg
YSBzb3VyY2UuIENoZWNrIGlmIHdlIHNob3VsZCByZW1vdmUgaXQuIik7CisKKyAgICAgICAgLy8g
TmVlZCB0byBpdGVyYXRlIG9yIHNvbWV0aGluZy4uCisgICAgICAgIFNvdXJjZUlkTG9va3VwTWFw
OjppdGVyYXRvciBzb3VyY2VJZEl0ZXJhdG9yID0gbV9zb3VyY2VJZExvb2t1cE1hcC5maW5kKGdl
bmVyYXRlRWxlbWVudFBhZElkKHNvdXJjZUV4dGVuc2lvbiwgc2VTcmNQYWQuZ2V0KCkpKTsKKyAg
ICAgICAgaWYgKHNvdXJjZUlkSXRlcmF0b3IgIT0gbV9zb3VyY2VJZExvb2t1cE1hcC5lbmQoKSkg
eworICAgICAgICAgICAgU3RyaW5nIHNvdXJjZUlkID0gc291cmNlSWRJdGVyYXRvci0+dmFsdWU7
CisKKyAgICAgICAgICAgIFBpcGVsaW5lTWFwOjppdGVyYXRvciBzb3VyY2VJbmZvSXRlcmF0b3Ig
PSBtX3BpcGVsaW5lTWFwLmZpbmQoc291cmNlSWQpOworICAgICAgICAgICAgaWYgKHNvdXJjZUlu
Zm9JdGVyYXRvciAhPSBtX3BpcGVsaW5lTWFwLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgU291
cmNlIHNvdXJjZUluZm8gPSBzb3VyY2VJbmZvSXRlcmF0b3ItPnZhbHVlOworCisgICAgICAgICAg
ICAgICAgaWYgKHNvdXJjZUluZm8ubV9yZW1vdmVXaGVuTm90VXNlZCkgeworICAgICAgICAgICAg
ICAgICAgICBMT0coTWVkaWEsICJSZW1vdmluZyBzb3VyY2UgJXAgd2l0aCBpZD0lcyIsIHNvdXJj
ZUV4dGVuc2lvbiwgc291cmNlSWQuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAg
ICBnc3RfZWxlbWVudF9zZXRfc3RhdGUoc291cmNlRXh0ZW5zaW9uLCBHU1RfU1RBVEVfTlVMTCk7
CisgICAgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShyVGVlLmdldCgpLCBH
U1RfU1RBVEVfTlVMTCk7CisgICAgICAgICAgICAgICAgICAgIGdzdF9iaW5fcmVtb3ZlKEdTVF9C
SU4obV9waXBlbGluZS5nZXQoKSksIHNvdXJjZUV4dGVuc2lvbik7CisgICAgICAgICAgICAgICAg
ICAgIGdzdF9iaW5fcmVtb3ZlKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIHJUZWUuZ2V0KCkp
OworCisgICAgICAgICAgICAgICAgICAgIG1fcGlwZWxpbmVNYXAucmVtb3ZlKHNvdXJjZUlkKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9zb3VyY2VJZExvb2t1cE1hcC5yZW1vdmUoZ2VuZXJhdGVF
bGVtZW50UGFkSWQoc291cmNlRXh0ZW5zaW9uLCBzb3VyY2VJbmZvLm1fc291cmNlUGFkLmdldCgp
KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIEdSZWZQdHI8R3N0UGFkPiBsUXVldWVTcmNQYWQgPSBh
ZG9wdEdSZWYoZ3N0X3BhZF9nZXRfcGVlcihzZVNpbmtQYWQuZ2V0KCkpKTsKKyAgICBHUmVmUHRy
PEdzdEVsZW1lbnQ+IGxRdWV1ZSA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVu
dChsUXVldWVTcmNQYWQuZ2V0KCkpKTsKKyAgICBHUmVmUHRyPEdzdFBhZD4gbFF1ZXVlU2lua1Bh
ZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChsUXVldWUuZ2V0KCksICJz
aW5rIikpOworICAgIEdSZWZQdHI8R3N0UGFkPiBsVGVlU3JjUGFkID0gYWRvcHRHUmVmKGdzdF9w
YWRfZ2V0X3BlZXIobFF1ZXVlU2lua1BhZC5nZXQoKSkpOworICAgIEdSZWZQdHI8R3N0RWxlbWVu
dD4gbFRlZSA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudChsVGVlU3JjUGFk
LmdldCgpKSk7CisgICAgR1JlZlB0cjxHc3RQYWQ+IGxUZWVTaW5rUGFkID0gYWRvcHRHUmVmKGdz
dF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGxUZWUuZ2V0KCksICJzaW5rIikpOworICAgIEdSZWZQ
dHI8R3N0UGFkPiBzb3VyY2VTcmNQYWQgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfcGVlcihsVGVl
U2lua1BhZC5nZXQoKSkpOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gc291cmNlRWxlbWVudCA9
IGFkb3B0R1JlZihnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudChzb3VyY2VTcmNQYWQuZ2V0KCkp
KTsKKworICAgIC8vIHJlbW92ZSBzb3VyY2UgZXh0ZW5zaW9uCisgICAgU3RyaW5nIHNvdXJjZUV4
dGVuc2lvbkFuZFBhZElkID0gZ2VuZXJhdGVFbGVtZW50UGFkSWQoc291cmNlRXh0ZW5zaW9uLCBz
ZVNyY1BhZC5nZXQoKSk7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKHJUZWUuZ2V0KCksIEdT
VF9TVEFURV9OVUxMKTsKKyAgICBnc3RfYmluX3JlbW92ZShHU1RfQklOKG1fcGlwZWxpbmUuZ2V0
KCkpLCByVGVlLmdldCgpKTsKKworICAgIGd1aW50IG51bVNvdXJjZVRlZVBhZHMgPSBkaXNjb25u
ZWN0U2lua0Zyb21UZWUobFRlZS5nZXQoKSwgc291cmNlRXh0ZW5zaW9uLCAwKTsKKyAgICBMT0co
TWVkaWEsICJzb3VyY2UtdGVlIHNvdXJjZSBwYWRzOiAlZCIsIG51bVNvdXJjZVRlZVBhZHMpOwor
ICAgIGlmICghbnVtU291cmNlVGVlUGFkcykgeworICAgICAgICBMT0coTWVkaWEsICJzb3VyY2Ut
dGVlIG9mIHNvdXJjZSBleHRlbnNpb24gZGlkIG5vdCBoYXZlIGFueSBzb3VyY2UgcGFkcy4gU2Vl
IGlmIHdlIHNob3VsZCByZW1vdmUgaXQuIik7CisgICAgICAgIFNvdXJjZUlkTG9va3VwTWFwOjpp
dGVyYXRvciBzb3VyY2VJZEl0ZXJhdG9yID0gbV9zb3VyY2VJZExvb2t1cE1hcC5maW5kKGdlbmVy
YXRlRWxlbWVudFBhZElkKHNvdXJjZUVsZW1lbnQuZ2V0KCksIHNvdXJjZVNyY1BhZC5nZXQoKSkp
OworICAgICAgICBTdHJpbmcgc291cmNlSWQgPSBzb3VyY2VJZEl0ZXJhdG9yLT52YWx1ZTsKKyAg
ICAgICAgUGlwZWxpbmVNYXA6Oml0ZXJhdG9yIHNvdXJjZUluZm9JdGVyYXRvciA9IG1fcGlwZWxp
bmVNYXAuZmluZChzb3VyY2VJZCk7CisgICAgICAgIFNvdXJjZSBzb3VyY2VJbmZvID0gc291cmNl
SW5mb0l0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgaWYgKHNvdXJjZUluZm8ubV9yZW1vdmVXaGVu
Tm90VXNlZCkKKyAgICAgICAgICAgIHJlbW92ZVNvdXJjZUV4dGVuc2lvbkZyb21CZWhpbmQoc291
cmNlRWxlbWVudC5nZXQoKSk7CisgICAgfQorCisgICAgLy8gc2luY2UgZGlzY29ubmVjdFNpbmtG
cm9tVGVlIHdhcyB1c2VkIHRvIHJlbW92ZSB0aGUgc291cmNlRXh0ZW5zaW9uCisgICAgU291cmNl
SWRMb29rdXBNYXA6Oml0ZXJhdG9yIHNvdXJjZUlkSXRlcmF0b3IgPSBtX3NvdXJjZUlkTG9va3Vw
TWFwLmZpbmQoc291cmNlRXh0ZW5zaW9uQW5kUGFkSWQpOworICAgIGlmIChzb3VyY2VJZEl0ZXJh
dG9yICE9IG1fc291cmNlSWRMb29rdXBNYXAuZW5kKCkpIHsKKyAgICAgICAgU3RyaW5nIHNvdXJj
ZUlkID0gc291cmNlSWRJdGVyYXRvci0+dmFsdWU7CisgICAgICAgIExPRyhNZWRpYSwgIlJlbW92
aW5nIHNvdXJjZUV4dGVuc2lvbiB3aXRoIGlkICVzIiwgc291cmNlSWQuYXNjaWkoKS5kYXRhKCkp
OworICAgICAgICBtX3BpcGVsaW5lTWFwLnJlbW92ZShzb3VyY2VJZCk7CisgICAgICAgIG1fc291
cmNlSWRMb29rdXBNYXAucmVtb3ZlKHNvdXJjZUV4dGVuc2lvbkFuZFBhZElkKTsKKyAgICB9Cit9
CisKK2dpbnQgQ2VudHJhbFBpcGVsaW5lVW5pdDo6ZGlzY29ubmVjdFNpbmtGcm9tVGVlKEdzdEVs
ZW1lbnQqIHRlZSwgR3N0RWxlbWVudCogc2luaywgR3N0UGFkKiBwYWQpCit7CisgICAgZ3VpbnQg
c3JjcGFkcyA9IC0xOworICAgIEdSZWZQdHI8R3N0UGFkPiBzaW5rU2lua1BhZCA9IHBhZDsKKyAg
ICBpZiAoIXBhZCkKKyAgICAgICAgc2lua1NpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRf
Z2V0X3N0YXRpY19wYWQoc2luaywgInNpbmsiKSk7CisKKyAgICBHUmVmUHRyPEdzdFBhZD4gcXVl
dWVTb3VyY2VQYWQgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfcGVlcihzaW5rU2lua1BhZC5nZXQo
KSkpOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gcXVldWUgPSBhZG9wdEdSZWYoZ3N0X3BhZF9n
ZXRfcGFyZW50X2VsZW1lbnQocXVldWVTb3VyY2VQYWQuZ2V0KCkpKTsKKyAgICBHUmVmUHRyPEdz
dFBhZD4gcXVldWVTaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFk
KHF1ZXVlLmdldCgpLCAic2luayIpKTsKKyAgICBHUmVmUHRyPEdzdFBhZD4gdGVlU291cmNlUGFk
ID0gZ3N0X3BhZF9nZXRfcGVlcihxdWV1ZVNpbmtQYWQuZ2V0KCkpOworCisgICAgZ3N0X3BhZF9z
ZXRfYWN0aXZlKHRlZVNvdXJjZVBhZC5nZXQoKSwgRkFMU0UpOworICAgIGdzdF9lbGVtZW50X3Nl
dF9zdGF0ZShxdWV1ZS5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOworICAgIGdzdF9iaW5fcmVtb3Zl
KEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIHF1ZXVlLmdldCgpKTsKKyAgICBnc3RfZWxlbWVu
dF9yZWxlYXNlX3JlcXVlc3RfcGFkKHRlZSwgdGVlU291cmNlUGFkLmdldCgpKTsKKworICAgIGlu
dCBuUGFkcyA9IDA7CisgICAgR3N0SXRlcmF0b3IqIHBhZHNJdGVyYXRvciA9IGdzdF9lbGVtZW50
X2l0ZXJhdGVfc2lua19wYWRzKHNpbmspOworICAgIGJvb2wgZG9uZSA9IGZhbHNlOworICAgIGJv
b2wgZG9SZW1vdmVTaW5rID0gdHJ1ZTsKKyAgICB3aGlsZSAoIWRvbmUpIHsKKyAgICAgICAgR1Jl
ZlB0cjxHc3RQYWQ+IHBhZDsKKyAgICAgICAgR3N0SXRlcmF0b3JSZXN1bHQgaXQgPSB3ZWJraXRH
c3RJdGVyYXRvck5leHQocGFkc0l0ZXJhdG9yLCBwYWQpOworICAgICAgICBzd2l0Y2ggKGl0KSB7
CisgICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX09LOiB7CisgICAgICAgICAgICBuUGFkcysrOwor
ICAgICAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHBlZXIgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRf
cGVlcihwYWQuZ2V0KCkpKTsKKyAgICAgICAgICAgIGlmIChwZWVyKSB7CisgICAgICAgICAgICAg
ICAgZG9SZW1vdmVTaW5rID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IEdTVF9JVEVSQVRPUl9SRVNZTkM6CisgICAgICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jKHBh
ZHNJdGVyYXRvcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHU1RfSVRFUkFU
T1JfRE9ORToKKyAgICAgICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0VSUk9SOgorICAgICAgICAgICAgTE9HKE1lZGlhLCAi
RVJST1IsIEl0ZXJhdGluZyEiKTsKKyAgICAgICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKworICAgIFN0cmluZyBzb3VyY2VBbmRQYWRJZCA9IGdlbmVyYXRlRWxlbWVudFBh
ZElkKHNpbmssIDApOworICAgIFNvdXJjZUlkTG9va3VwTWFwOjppdGVyYXRvciBzb3VyY2VJZEl0
ZXJhdG9yID0gbV9zb3VyY2VJZExvb2t1cE1hcC5maW5kKGdlbmVyYXRlRWxlbWVudFBhZElkKHNp
bmssIDApKTsKKyAgICBpZiAoc291cmNlSWRJdGVyYXRvciAhPSBtX3NvdXJjZUlkTG9va3VwTWFw
LmVuZCgpKSB7CisgICAgICAgIFN0cmluZyBzb3VyY2VJZCA9IHNvdXJjZUlkSXRlcmF0b3ItPnZh
bHVlOworICAgICAgICBQaXBlbGluZU1hcDo6aXRlcmF0b3Igc291cmNlSW5mb0l0ZXJhdG9yID0g
bV9waXBlbGluZU1hcC5maW5kKHNvdXJjZUlkKTsKKyAgICAgICAgaWYgKHNvdXJjZUluZm9JdGVy
YXRvciAhPSBtX3BpcGVsaW5lTWFwLmVuZCgpKSB7CisgICAgICAgICAgICBTb3VyY2Ugc291cmNl
SW5mbyA9IHNvdXJjZUluZm9JdGVyYXRvci0+dmFsdWU7CisgICAgICAgICAgICBkb1JlbW92ZVNp
bmsgPSBzb3VyY2VJbmZvLm1fcmVtb3ZlV2hlbk5vdFVzZWQ7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoZG9SZW1vdmVTaW5rKSB7CisgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShz
aW5rLCBHU1RfU1RBVEVfTlVMTCk7CisgICAgICAgIGdzdF9iaW5fcmVtb3ZlKEdTVF9CSU4obV9w
aXBlbGluZS5nZXQoKSksIHNpbmspOworICAgICAgICBMT0coTWVkaWEsICJTaW5rIHJlbW92ZWQi
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgTE9HKE1lZGlhLCAiRGlkIG5vdCByZW1vdmUgdGhlIHNp
bmsiKTsKKworICAgIGdzdF9pdGVyYXRvcl9mcmVlKHBhZHNJdGVyYXRvcik7CisKKyAgICBnX29i
amVjdF9nZXQodGVlLCAibnVtLXNyYy1wYWRzIiwgJnNyY3BhZHMsIE5VTEwpOworCisgICAgcmV0
dXJuIHNyY3BhZHM7Cit9CisKK3ZvaWQgQ2VudHJhbFBpcGVsaW5lVW5pdDo6cmVtb3ZlU291cmNl
RmFjdG9yeUZvclNvdXJjZShHc3RFbGVtZW50KiBzb3VyY2UpCit7CisgICAgR3N0SXRlcmF0b3Iq
IHBhZHNJdGVyYXRvciA9IGdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHMoc291cmNlKTsKKyAg
ICBib29sIGRvbmUgPSBmYWxzZTsKKyAgICB3aGlsZSAoIWRvbmUpIHsKKyAgICAgICAgR1JlZlB0
cjxHc3RQYWQ+IHNyY3BhZDsKKyAgICAgICAgR3N0SXRlcmF0b3JSZXN1bHQgaXQgPSB3ZWJraXRH
c3RJdGVyYXRvck5leHQocGFkc0l0ZXJhdG9yLCBzcmNwYWQpOworICAgICAgICBzd2l0Y2ggKGl0
KSB7CisgICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX09LOiB7CisgICAgICAgICAgICBTdHJpbmcg
ZWxQYWRJZCA9IGdlbmVyYXRlRWxlbWVudFBhZElkKHNvdXJjZSwgc3JjcGFkLmdldCgpKTsKKyAg
ICAgICAgICAgIFNvdXJjZUlkTG9va3VwTWFwOjppdGVyYXRvciBzb3VyY2VJZEl0ZXJhdG9yID0g
bV9zb3VyY2VJZExvb2t1cE1hcC5maW5kKGVsUGFkSWQpOworICAgICAgICAgICAgaWYgKHNvdXJj
ZUlkSXRlcmF0b3IgPT0gbV9zb3VyY2VJZExvb2t1cE1hcC5lbmQoKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgU3RyaW5nIHNvdXJjZUlkID0gc291cmNlSWRJdGVy
YXRvci0+dmFsdWU7CisKKyAgICAgICAgICAgIFBpcGVsaW5lTWFwOjppdGVyYXRvciBzb3VyY2VJ
bmZvSXRlcmF0b3IgPSBtX3BpcGVsaW5lTWFwLmZpbmQoc291cmNlSWQpOworICAgICAgICAgICAg
aWYgKHNvdXJjZUluZm9JdGVyYXRvciA9PSBtX3BpcGVsaW5lTWFwLmVuZCgpKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBTb3VyY2UmIHNvdXJjZUluZm8gPSBzb3Vy
Y2VJbmZvSXRlcmF0b3ItPnZhbHVlOworICAgICAgICAgICAgc291cmNlSW5mby5tX3NvdXJjZUZh
Y3RvcnkgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGNh
c2UgR1NUX0lURVJBVE9SX1JFU1lOQzoKKyAgICAgICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMo
cGFkc0l0ZXJhdG9yKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdTVF9JVEVS
QVRPUl9ET05FOgorICAgICAgICAgICAgZG9uZSA9IHRydWU7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRVJST1I6CisgICAgICAgICAgICBMT0coTWVkaWEs
ICJFUlJPUiwgSXRlcmF0aW5nISIpOworICAgICAgICAgICAgZG9uZSA9IHRydWU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorCisgICAgU3RyaW5nIGVsUGFkSWQgPSBnZW5lcmF0ZUVsZW1lbnRQYWRJZChz
b3VyY2UsIDApOworICAgIFNvdXJjZUlkTG9va3VwTWFwOjppdGVyYXRvciBzb3VyY2VJZEl0ZXJh
dG9yID0gbV9zb3VyY2VJZExvb2t1cE1hcC5maW5kKGVsUGFkSWQpOworICAgIGlmIChzb3VyY2VJ
ZEl0ZXJhdG9yID09IG1fc291cmNlSWRMb29rdXBNYXAuZW5kKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIFN0cmluZyBzb3VyY2VJZCA9IHNvdXJjZUlkSXRlcmF0b3ItPnZhbHVlOworCisgICAg
UGlwZWxpbmVNYXA6Oml0ZXJhdG9yIHNvdXJjZUluZm9JdGVyYXRvciA9IG1fcGlwZWxpbmVNYXAu
ZmluZChzb3VyY2VJZCk7CisgICAgaWYgKHNvdXJjZUluZm9JdGVyYXRvciA9PSBtX3BpcGVsaW5l
TWFwLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTb3VyY2UmIHNvdXJjZUluZm8gPSBz
b3VyY2VJbmZvSXRlcmF0b3ItPnZhbHVlOworICAgIHNvdXJjZUluZm8ubV9zb3VyY2VGYWN0b3J5
ID0gMDsKK30KKworY2xhc3MgRGlzY29ubmVjdFNvdXJjZUpvYiB7CitwdWJsaWM6CisgICAgRGlz
Y29ubmVjdFNvdXJjZUpvYihDZW50cmFsUGlwZWxpbmVVbml0KiBjcHUsIEdzdEVsZW1lbnQqIHNv
dXJjZSwgR3N0UGFkKiBwYWQpIDoKKyAgICAgICAgbV9jcHUoY3B1KQorICAgICAgICAsIG1fc291
cmNlKHNvdXJjZSkKKyAgICAgICAgLCBtX3BhZChwYWQpCisgICAgeyB9CisKKyAgICBDZW50cmFs
UGlwZWxpbmVVbml0KiBtX2NwdTsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fc291cmNlOwor
ICAgIEdSZWZQdHI8R3N0UGFkPiBtX3BhZDsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWxl
dGVEaXNjb25uZWN0Sm9iKHZvaWQqIHB0cikKK3sKKyAgICBkZWxldGUgcmVpbnRlcnByZXRfY2Fz
dDxEaXNjb25uZWN0U291cmNlSm9iKj4ocHRyKTsKK30KKwordm9pZCBDZW50cmFsUGlwZWxpbmVV
bml0OjpkaXNjb25uZWN0U291cmNlRnJvbVBpcGVsaW5lUGFkQmxvY2tlZChHc3RFbGVtZW50KiBz
b3VyY2UsIEdzdFBhZCogc291cmNlUGFkKQoreworICAgIEdSZWZQdHI8R3N0UGFkPiB0ZWVTaW5r
UGFkID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X3BlZXIoc291cmNlUGFkKSk7CisgICAgR1JlZlB0
cjxHc3RFbGVtZW50PiB0ZWUgPSBnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudCh0ZWVTaW5rUGFk
LmdldCgpKTsKKworICAgIEdzdEl0ZXJhdG9yKiBwYWRzSXRlcmF0b3IgPSBnc3RfZWxlbWVudF9p
dGVyYXRlX3NyY19wYWRzKHRlZS5nZXQoKSk7CisgICAgYm9vbCBkb25lID0gZmFsc2U7CisgICAg
d2hpbGUgKCFkb25lKSB7CisgICAgICAgIEdSZWZQdHI8R3N0UGFkPiB0ZWVTcmNQYWQ7CisgICAg
ICAgIEdzdEl0ZXJhdG9yUmVzdWx0IGl0ID0gd2Via2l0R3N0SXRlcmF0b3JOZXh0KHBhZHNJdGVy
YXRvciwgdGVlU3JjUGFkKTsKKyAgICAgICAgc3dpdGNoIChpdCkgeworICAgICAgICBjYXNlIEdT
VF9JVEVSQVRPUl9PSzogeworICAgICAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHF1ZXVlU2lua1Bh
ZCA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9wZWVyKHRlZVNyY1BhZC5nZXQoKSkpOworICAgICAg
ICAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBxdWV1ZSA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9w
YXJlbnRfZWxlbWVudChxdWV1ZVNpbmtQYWQuZ2V0KCkpKTsKKyAgICAgICAgICAgIC8vIHF1ZXVl
IG1pZ2h0IGFjdHVhbGx5IGJlIGEgZmFrZXNpbmsKKyAgICAgICAgICAgIGdjaGFyKiBxTmFtZSA9
IGdzdF9lbGVtZW50X2dldF9uYW1lKHF1ZXVlLmdldCgpKTsKKyAgICAgICAgICAgIGlmIChTdHJp
bmcocU5hbWUpLnN0YXJ0c1dpdGgoImZha2VzaW5rIikpIHsKKyAgICAgICAgICAgICAgICBnc3Rf
ZWxlbWVudF9zZXRfc3RhdGUocXVldWUuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKKyAgICAgICAg
ICAgICAgICBnc3RfYmluX3JlbW92ZShHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBxdWV1ZS5n
ZXQoKSk7CisgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCh0
ZWUuZ2V0KCksIHRlZVNyY1BhZC5nZXQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBxdWV1ZVNyY1BhZCA9IGFk
b3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChxdWV1ZS5nZXQoKSwgInNyYyIpKTsK
KyAgICAgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBzaW5rU2lua1BhZCA9IGFkb3B0R1JlZihnc3Rf
cGFkX2dldF9wZWVyKHF1ZXVlU3JjUGFkLmdldCgpKSk7CisgICAgICAgICAgICBHUmVmUHRyPEdz
dEVsZW1lbnQ+IHNpbmsgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfcGFyZW50X2VsZW1lbnQoc2lu
a1NpbmtQYWQuZ2V0KCkpKTsKKyAgICAgICAgICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gcGFyZW50
ID0gYWRvcHRHUmVmKChHc3RFbGVtZW50Kilnc3RfZWxlbWVudF9nZXRfcGFyZW50KHNpbmsuZ2V0
KCkpKTsKKyAgICAgICAgICAgIEdPd25QdHI8Z2NoYXI+IHBhcmVudE5hbWUoZ3N0X2VsZW1lbnRf
Z2V0X25hbWUocGFyZW50LmdldCgpKSk7CisgICAgICAgICAgICBHc3RFbGVtZW50KiBzaW5rQmlu
ID0gMDsKKyAgICAgICAgICAgIGlmICghc3RyY21wKHBhcmVudE5hbWUuZ2V0KCksICJtZWRpYXN0
cmVhbV9waXBlbGluZSIpKQorICAgICAgICAgICAgICAgIHNpbmtCaW4gPSBzaW5rLmdldCgpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNpbmtCaW4gPSBwYXJlbnQuZ2V0KCk7
CisKKyAgICAgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBzaW5rU3JjUGFkID0gZ3N0X2VsZW1lbnRf
Z2V0X3N0YXRpY19wYWQoc2lua0JpbiwgInNyYyIpOworICAgICAgICAgICAgU291cmNlSWRMb29r
dXBNYXA6Oml0ZXJhdG9yIHNvdXJjZUlkSXRlcmF0b3IgPSBtX3NvdXJjZUlkTG9va3VwTWFwLmZp
bmQoZ2VuZXJhdGVFbGVtZW50UGFkSWQoc2lua0Jpbiwgc2lua1NyY1BhZC5nZXQoKSkpOworICAg
ICAgICAgICAgaWYgKHNvdXJjZUlkSXRlcmF0b3IgIT0gbV9zb3VyY2VJZExvb2t1cE1hcC5lbmQo
KSkgeworICAgICAgICAgICAgICAgIExPRyhNZWRpYSwgIlNpbmsgZWxlbWVudCB3YXMgYSBzb3Vy
Y2UgZXh0ZW5zaW9uLiBSZWN1cnNpdmVseSBjYWxsaW5nIGRpc2Nvbm5lY3RTb3VyY2VGcm9tUGlw
ZWxpbmUgdG8gcmVtb3ZlIGl0Iik7CisgICAgICAgICAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHNy
Y3BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChzaW5rQmluLCAic3Jj
IikpOworICAgICAgICAgICAgICAgIGRpc2Nvbm5lY3RTb3VyY2VGcm9tUGlwZWxpbmUoc2lua0Jp
biwgc3JjcGFkLmdldCgpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGRp
c2Nvbm5lY3RTaW5rRnJvbVBpcGVsaW5lKHNpbmtCaW4pOworCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6CisgICAgICAgICAg
ICBnc3RfaXRlcmF0b3JfcmVzeW5jKHBhZHNJdGVyYXRvcik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRE9ORToKKyAgICAgICAgICAgIGRvbmUgPSB0cnVl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0VSUk9SOgor
ICAgICAgICAgICAgTE9HKE1lZGlhLCAiRVJST1IsIEl0ZXJhdGluZyEiKTsKKyAgICAgICAgICAg
IGRvbmUgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworI2lmIEdTVF9BUElfVkVSU0lPTl8x
CisgICAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUoc291cmNlUGFkLCBtX3Byb2JlSWQpOworICAgIG1f
cHJvYmVJZCA9IDA7CisjZWxzZQorICAgIGdzdF9wYWRfc2V0X2Jsb2NrZWRfYXN5bmMoc291cmNl
UGFkLCBGQUxTRSwgMCwgMCk7CisjZW5kaWYKKworICAgIC8vIFNpbmNlIG5vdGhpbmcgaXMgbm93
IGNvbm5lY3RlZCB0byB0aGlzIHNvdXJjZSwgd2UgcmVtb3ZlIGl0IGFuZCBlYXJsaWVyIHNvdXJj
ZXMgdGhhdCBkb2VzIG5vdCBoYXZlIGNvbm5lY3Rpb25zCisgICAgR3N0UGFkKiBzb3VyY2VTaW5r
UGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoc291cmNlLCAic2luayIpOworICAgIGlm
IChzb3VyY2VTaW5rUGFkKSB7CisgICAgICAgIC8vIHNvdXJjZSBpcyBhIHNvdXJjZSBleHRlbnNp
b24KKyAgICAgICAgcmVtb3ZlU291cmNlRXh0ZW5zaW9uRnJvbUJlaGluZChzb3VyY2UpOworICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIGlmIG5vdCBhIHNvdXJjZSBleHRlbnNpb24sIHRoZXJlIHdp
bGwgYmUgYSBsb29zZSB0ZWUgdGhhdCB3ZSBuZWVkIHRvIHJlbW92ZQorICAgICAgICBnc3RfZWxl
bWVudF9zZXRfc3RhdGUodGVlLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7CisgICAgICAgIGdzdF9i
aW5fcmVtb3ZlKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIHRlZS5nZXQoKSk7CisgICAgfQor
fQorCisjaWYgR1NUX0FQSV9WRVJTSU9OXzEKK3N0YXRpYyBHc3RQYWRQcm9iZVJldHVybiBkaXNj
b25uZWN0U291cmNlRnJvbVBpcGVsaW5lUHJvYmVBZGRlZFByb3h5KEdzdFBhZCogcGFkLCBHc3RQ
YWRQcm9iZUluZm8qIGluZm8sIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGlmIChpbmZvLT50
eXBlID09IEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DSykgeworICAgICAgICBEaXNjb25uZWN0U291
cmNlSm9iKiBqb2IgPSByZWludGVycHJldF9jYXN0PERpc2Nvbm5lY3RTb3VyY2VKb2IqPih1c2Vy
RGF0YSk7CisgICAgICAgIGpvYi0+bV9jcHUtPmRpc2Nvbm5lY3RTb3VyY2VGcm9tUGlwZWxpbmVQ
YWRCbG9ja2VkKGpvYi0+bV9zb3VyY2UuZ2V0KCksIGpvYi0+bV9wYWQuZ2V0KCkpOworICAgIH0K
KyAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBkaXNj
b25uZWN0U291cmNlRnJvbVBpcGVsaW5lUGFkQmxvY2tlZFByb3h5KEdzdFBhZCogcGFkLCBnYm9v
bGVhbiBibG9ja2VkLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBpZiAoYmxvY2tlZCkgewor
ICAgICAgICBEaXNjb25uZWN0U291cmNlSm9iKiBqb2IgPSByZWludGVycHJldF9jYXN0PERpc2Nv
bm5lY3RTb3VyY2VKb2IqPih1c2VyRGF0YSk7CisgICAgICAgIGpvYi0+bV9jcHUtPmRpc2Nvbm5l
Y3RTb3VyY2VGcm9tUGlwZWxpbmVQYWRCbG9ja2VkKGpvYi0+bV9zb3VyY2UuZ2V0KCksIGpvYi0+
bV9wYWQuZ2V0KCkpOworICAgIH0KK30KKyNlbmRpZiAvLyBHU1RfQVBJX1ZFUlNJT05fMQorCit2
b2lkIENlbnRyYWxQaXBlbGluZVVuaXQ6OmRpc2Nvbm5lY3RTb3VyY2VGcm9tUGlwZWxpbmUoR3N0
RWxlbWVudCogc291cmNlLCBHc3RQYWQqIHNvdXJjZVBhZCkKK3sKKyAgICBTb3VyY2VJZExvb2t1
cE1hcDo6aXRlcmF0b3Igc291cmNlSWRJdGVyYXRvciA9IG1fc291cmNlSWRMb29rdXBNYXAuZmlu
ZChnZW5lcmF0ZUVsZW1lbnRQYWRJZChzb3VyY2UsIHNvdXJjZVBhZCkpOworICAgIGlmIChzb3Vy
Y2VJZEl0ZXJhdG9yID09IG1fc291cmNlSWRMb29rdXBNYXAuZW5kKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIFN0cmluZyBzb3VyY2VJZCA9IHNvdXJjZUlkSXRlcmF0b3ItPnZhbHVlOworCisg
ICAgUGlwZWxpbmVNYXA6Oml0ZXJhdG9yIHNvdXJjZUluZm9JdGVyYXRvciA9IG1fcGlwZWxpbmVN
YXAuZmluZChzb3VyY2VJZCk7CisgICAgaWYgKHNvdXJjZUluZm9JdGVyYXRvciA9PSBtX3BpcGVs
aW5lTWFwLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTb3VyY2Ugc291cmNlSW5mbyA9
IHNvdXJjZUluZm9JdGVyYXRvci0+dmFsdWU7CisKKyAgICBEaXNjb25uZWN0U291cmNlSm9iKiBq
b2IgPSBuZXcgRGlzY29ubmVjdFNvdXJjZUpvYih0aGlzLCBzb3VyY2UsIHNvdXJjZVBhZCk7CisK
KyAgICAvLyBGSVhNRTogZG8gYmxvY2sgcHJvcGVybHkgYXN5bmMKKyNpZiBHU1RfQVBJX1ZFUlNJ
T05fMQorICAgIG1fcHJvYmVJZCA9IGdzdF9wYWRfYWRkX3Byb2JlKHNvdXJjZVBhZCwgR1NUX1BB
RF9QUk9CRV9UWVBFX0JMT0NLLAorICAgICAgICBkaXNjb25uZWN0U291cmNlRnJvbVBpcGVsaW5l
UHJvYmVBZGRlZFByb3h5LCBqb2IsIGRlbGV0ZURpc2Nvbm5lY3RKb2IpOworI2Vsc2UKKyAgICBn
c3RfcGFkX3NldF9ibG9ja2VkX2FzeW5jX2Z1bGwoc291cmNlUGFkLCBUUlVFLAorICAgICAgICBk
aXNjb25uZWN0U291cmNlRnJvbVBpcGVsaW5lUGFkQmxvY2tlZFByb3h5LCBqb2IsIGRlbGV0ZURp
c2Nvbm5lY3RKb2IpOworI2VuZGlmCit9CisKK3ZvaWQgQ2VudHJhbFBpcGVsaW5lVW5pdDo6ZGlz
Y29ubmVjdFNvdXJjZVdpdGhNdWx0aXBsZVBhZHNGcm9tUGlwZWxpbmUoR3N0RWxlbWVudCogc291
cmNlKQoreworICAgIFN0cmluZyBlbGVtZW50UGFkSWQgPSBnZW5lcmF0ZUVsZW1lbnRQYWRJZChz
b3VyY2UsIDApOworICAgIFNvdXJjZUlkTG9va3VwTWFwOjppdGVyYXRvciBzb3VyY2VJZEl0ZXJh
dG9yID0gbV9zb3VyY2VJZExvb2t1cE1hcC5maW5kKGVsZW1lbnRQYWRJZCk7CisgICAgaWYgKHNv
dXJjZUlkSXRlcmF0b3IgPT0gbV9zb3VyY2VJZExvb2t1cE1hcC5lbmQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgU3RyaW5nIHNvdXJjZUlkID0gc291cmNlSWRJdGVyYXRvci0+dmFsdWU7CisK
KyAgICBHc3RJdGVyYXRvciogcGFkc0l0ZXJhdG9yID0gZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zcmNf
cGFkcyhzb3VyY2UpOworICAgIGJvb2wgZG9uZSA9IGZhbHNlOworICAgIHdoaWxlICghZG9uZSkg
eworICAgICAgICBHUmVmUHRyPEdzdFBhZD4gc3JjcGFkOworICAgICAgICBHc3RJdGVyYXRvclJl
c3VsdCBpdCA9IHdlYmtpdEdzdEl0ZXJhdG9yTmV4dChwYWRzSXRlcmF0b3IsIHNyY3BhZCk7Cisg
ICAgICAgIHN3aXRjaCAoaXQpIHsKKyAgICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfT0s6IHsKKyAg
ICAgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBwZWVyUGFkID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0
X3BlZXIoc3JjcGFkLmdldCgpKSk7CisgICAgICAgICAgICBpZiAoIXBlZXJQYWQpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGRpc2Nvbm5lY3RTb3VyY2VGcm9tUGlw
ZWxpbmUoc291cmNlLCBzcmNwYWQuZ2V0KCkpOworCisgICAgICAgICAgICAvLyBkaXNjb25uZWN0
U291cmNlRnJvbVBpcGVsaW5lIGRvZXMgbm90IHJlbW92ZSB0aGUgdGVlCisgICAgICAgICAgICBH
UmVmUHRyPEdzdFBhZD4gdGVlU2lua1BhZCA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9wZWVyKHNy
Y3BhZC5nZXQoKSkpOworICAgICAgICAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiB0ZWUgPSBhZG9w
dEdSZWYoZ3N0X3BhZF9nZXRfcGFyZW50X2VsZW1lbnQodGVlU2lua1BhZC5nZXQoKSkpOworICAg
ICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKHRlZS5nZXQoKSwgR1NUX1NUQVRFX05VTEwp
OworICAgICAgICAgICAgZ3N0X2Jpbl9yZW1vdmUoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwg
dGVlLmdldCgpKTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBHU1RfSVRFUkFUT1JfUkVTWU5DOgorICAgICAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyhw
YWRzSXRlcmF0b3IpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR1NUX0lURVJB
VE9SX0RPTkU6CisgICAgICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9FUlJPUjoKKyAgICAgICAgICAgIExPRyhNZWRpYSwg
IkVSUk9SLCBJdGVyYXRpbmchIik7CisgICAgICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUoc291cmNlLCBHU1RfU1RBVEVf
TlVMTCk7CisgICAgZ3N0X2Jpbl9yZW1vdmUoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgc291
cmNlKTsKKworICAgIG1fcGlwZWxpbmVNYXAucmVtb3ZlKHNvdXJjZUlkKTsKKyAgICBtX3NvdXJj
ZUlkTG9va3VwTWFwLnJlbW92ZShlbGVtZW50UGFkSWQpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4g
bWVzc2FnZUNhbGxiYWNrKEdzdEJ1cyogYnVzLCBHc3RNZXNzYWdlKiBtZXNzYWdlLCBncG9pbnRl
ciBkYXRhKQoreworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBHT3duUHRyPGdjaGFy
PiBkZWJ1ZzsKKworICAgIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSkgeworICAg
IGNhc2UgR1NUX01FU1NBR0VfRVJST1I6IHsKKyAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJy
b3IobWVzc2FnZSwgJmVycm9yLm91dFB0cigpLCAmZGVidWcub3V0UHRyKCkpOworICAgICAgICBM
T0coTWVkaWEsICJFUlJPUiwgbWVkaWEgZXJyb3I6ICVkLCAlcyIsIGVycm9yLT5jb2RlLCBlcnJv
ci0+bWVzc2FnZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIFN0cmluZyBn
ZW5lcmF0ZUVsZW1lbnRQYWRJZChHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RQYWQqIHBhZCkKK3sK
KyAgICBTdHJpbmcgaWQoU3RyaW5nOjpudW1iZXIoZ3Vsb25nKGVsZW1lbnQpKSk7CisgICAgaWQu
YXBwZW5kKCJfIik7CisgICAgaWQuYXBwZW5kKFN0cmluZzo6bnVtYmVyKGd1bG9uZyhwYWQpKSk7
CisgICAgcmV0dXJuIGlkOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFN
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0NlbnRyYWxQaXBlbGluZVVuaXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9DZW50cmFsUGlwZWxpbmVVbml0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGU5ZTQ2
YTIyMGJkYTY3NDEwNTVmMWM2MWNhNWQ1NWMzYmM2NGI3NgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9DZW50cmFsUGlwZWxp
bmVVbml0LmgKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIENv
bGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqLworCisKKyNpZm5kZWYgQ2VudHJhbFBpcGVsaW5lVW5pdF9oCisjZGVmaW5lIENlbnRy
YWxQaXBlbGluZVVuaXRfaAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0dzdEVsZW1lbnQg
R3N0RWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9Hc3RQYWQgR3N0UGFkOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3R5cGVkZWYgdm9pZCAoKlNvdXJjZUluc2VydGVkQ2FsbGJhY2spKEdzdEVs
ZW1lbnQqIHNvdXJjZSwgR3N0UGFkKiBwYWQsIGdwb2ludGVyIHVzZXJEYXRhKTsKKworY2xhc3Mg
U291cmNlRmFjdG9yeTsKK2NsYXNzIFNvdXJjZUV4dGVuc2lvbkZhY3Rvcnk7CisKK2NsYXNzIENl
bnRyYWxQaXBlbGluZVVuaXQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENlbnRyYWxQaXBl
bGluZVVuaXQpOworcHJvdGVjdGVkOgorICAgIENlbnRyYWxQaXBlbGluZVVuaXQoKTsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5DZW50cmFsUGlwZWxpbmVVbml0KCk7CisKKyAgICBzdGF0aWMgQ2Vu
dHJhbFBpcGVsaW5lVW5pdCYgaW5zdGFuY2UoKTsKKworICAgIHZvaWQgcmVnaXN0ZXJTb3VyY2VG
YWN0b3J5KFNvdXJjZUZhY3RvcnkqLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlkKTsKKyAgICB2b2lk
IGRlcmVnaXN0ZXJTb3VyY2VGYWN0b3J5KGNvbnN0IFN0cmluZyYgc291cmNlSWQpOworICAgIGJv
b2wgY29ubmVjdFRvU291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSWQsIEdzdEVsZW1lbnQqIHNp
bmssIEdzdFBhZCogc2lua1BhZCA9IDApOworICAgIGJvb2wgZGlzY29ubmVjdEZyb21Tb3VyY2Uo
Y29uc3QgU3RyaW5nJiBzb3VyY2VJZCwgR3N0RWxlbWVudCogc2luaywgR3N0UGFkKiBzaW5rUGFk
ID0gMCk7CisKKyAgICAvLyBpZGVhbGx5IHRoaXMgc2hvdWxkIGJlIHByaXZhdGUsIGJ1dCBrZWVw
aW5nIGl0IHB1YmxpYyB0byBhdm9pZCByZXF1aXJpbmcKKyAgICAvLyB0aGUgQyBjYWxsYmFja3Mg
dG8gYmUgc3RhdGljIG1lbWJlcnMgKGFuZCB0aHVzIGV4cG9zaW5nIGludGVybmFsCisgICAgLy8g
Z3N0cmVhbWVyIEFQSSBpbiB0aGlzIGhlYWRlcikKKyAgICB2b2lkIGRpc2Nvbm5lY3RTb3VyY2VG
cm9tUGlwZWxpbmVQYWRCbG9ja2VkKEdzdEVsZW1lbnQqIHNvdXJjZSwgR3N0UGFkKiBzb3VyY2VQ
YWQpOworCisgICAgR3N0RWxlbWVudCogcGlwZWxpbmUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBjbGFzcyBTb3VyY2UgeworICAgIHB1YmxpYzoKKyAgICAgICAgU291cmNlKCkgOiBtX3NvdXJj
ZUVsZW1lbnQoMCksIG1fc291cmNlUGFkKDApLCBtX3NvdXJjZUZhY3RvcnkoMCksIG1fcmVtb3Zl
V2hlbk5vdFVzZWQodHJ1ZSkgeyB9CisgICAgICAgIFNvdXJjZShHUmVmUHRyPEdzdEVsZW1lbnQ+
IHNvdXJjZUVsZW1lbnQsIEdSZWZQdHI8R3N0UGFkPiBzb3VyY2VQYWQsIFNvdXJjZUZhY3Rvcnkq
IHNvdXJjZUZhY3RvcnksIGJvb2wgcmVtb3ZlV2hlbk5vdFVzZWQpIDogbV9zb3VyY2VFbGVtZW50
KHNvdXJjZUVsZW1lbnQpLCBtX3NvdXJjZVBhZChzb3VyY2VQYWQpLCBtX3NvdXJjZUZhY3Rvcnko
c291cmNlRmFjdG9yeSksIG1fcmVtb3ZlV2hlbk5vdFVzZWQocmVtb3ZlV2hlbk5vdFVzZWQpIHsg
fQorCisgICAgICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9zb3VyY2VFbGVtZW50OworICAgICAg
ICBHUmVmUHRyPEdzdFBhZD4gbV9zb3VyY2VQYWQ7CisgICAgICAgIFNvdXJjZUZhY3RvcnkqIG1f
c291cmNlRmFjdG9yeTsKKyAgICAgICAgYm9vbCBtX3JlbW92ZVdoZW5Ob3RVc2VkOworICAgIH07
CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTb3VyY2U+IFBpcGVsaW5lTWFwOworCisg
ICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBTb3VyY2VJZExvb2t1cE1hcDsKKyAg
ICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTb3VyY2VGYWN0b3J5Kj4gU291cmNlRmFjdG9yeU1h
cDsKKyAgICB0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIFNvdXJjZUV4dGVuc2lvbkZhY3Rvcnkq
IHNvdXJjZUV4dGVuc2lvbkZhY3Rvcnk7CisgICAgICAgIFN0cmluZyBzb3VyY2VUb0V4dGVuZDsK
KyAgICB9IFNvdXJjZUV4dGVuc2lvbkZhY3RvcnlJbmZvOworICAgIHR5cGVkZWYgSGFzaE1hcDxT
dHJpbmcsIFNvdXJjZUV4dGVuc2lvbkZhY3RvcnlJbmZvPiBTb3VyY2VFeHRlbnNpb25GYWN0b3J5
TWFwOworCisgICAgdHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+
IGV4dGVuc2lvbjsKKyAgICAgICAgU3RyaW5nIHNvdXJjZVRvRXh0ZW5kOworICAgIH0gU291cmNl
RXh0ZW5zaW9uSW5mbzsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTb3VyY2VFeHRlbnNp
b25JbmZvPiBTb3VyY2VFeHRlbnNpb25NYXA7CisKKyAgICB0eXBlZGVmIGVudW0geworICAgICAg
ICBDb25uZWN0VG9Tb3VyY2UsCisgICAgICAgIERpc2Nvbm5lY3RGcm9tU291cmNlLAorICAgICAg
ICBSZW1vdmVTb3VyY2UsCisgICAgICAgIEluc2VydFNvdXJjZQorICAgIH0gVGFza1R5cGU7CisK
KyAgICB0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIFN0cmluZyBzb3VyY2VJZDsKKyAgICAgICAg
VGFza1R5cGUgdHlwZTsKKyAgICAgICAgR3N0RWxlbWVudCogc2luazsKKyAgICAgICAgR3N0RWxl
bWVudCogc291cmNlOworICAgICAgICBTb3VyY2VGYWN0b3J5KiBzb3VyY2VGYWN0b3J5OworICAg
ICAgICBTb3VyY2VJbnNlcnRlZENhbGxiYWNrIGNhbGxiYWNrOworICAgICAgICBncG9pbnRlciB1
c2VyRGF0YTsKKyAgICAgICAgR3N0UGFkKiBwYWQ7CisgICAgICAgIGJvb2wgc291cmNlRmFjdG9y
eVJlbW92ZWQ7CisgICAgfSBQaXBlbGluZVRhc2s7CisgICAgdHlwZWRlZiBWZWN0b3I8UGlwZWxp
bmVUYXNrKj4gUGlwZWxpbmVUYXNrVmVjdG9yOworCisgICAgYm9vbCBjb25uZWN0QW5kR2V0U291
cmNlRWxlbWVudChjb25zdCBTdHJpbmcmIHNvdXJjZUlkLCBHUmVmUHRyPEdzdEVsZW1lbnQ+JiBz
b3VyY2VFbGVtZW50LCBHUmVmUHRyPEdzdFBhZD4mIHNvdXJjZVBhZCk7CisgICAgdm9pZCBkaXNj
b25uZWN0U291cmNlRnJvbVBpcGVsaW5lKEdzdEVsZW1lbnQqIHNvdXJjZSwgR3N0UGFkKiBzb3Vy
Y2VQYWQpOworICAgIHZvaWQgZGlzY29ubmVjdFNvdXJjZVdpdGhNdWx0aXBsZVBhZHNGcm9tUGlw
ZWxpbmUoR3N0RWxlbWVudCogc291cmNlKTsKKyAgICBndWludCBkaXNjb25uZWN0U2lua0Zyb21Q
aXBlbGluZShHc3RFbGVtZW50KiBzaW5rKTsKKyAgICB2b2lkIHJlbW92ZVNvdXJjZUV4dGVuc2lv
bkZyb21CZWhpbmQoR3N0RWxlbWVudCogc291cmNlRXh0ZW5zaW9uKTsKKworICAgIGdpbnQgZGlz
Y29ubmVjdFNpbmtGcm9tVGVlKEdzdEVsZW1lbnQqIHRlZSwgR3N0RWxlbWVudCogc2luaywgR3N0
UGFkKik7CisKKyAgICB2b2lkIHJlbW92ZVNvdXJjZUZhY3RvcnlGb3JTb3VyY2UoR3N0RWxlbWVu
dCogc291cmNlKTsKKworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9waXBlbGluZTsKKyAgICBQ
aXBlbGluZU1hcCBtX3BpcGVsaW5lTWFwOworICAgIFNvdXJjZUlkTG9va3VwTWFwIG1fc291cmNl
SWRMb29rdXBNYXA7CisgICAgU291cmNlRmFjdG9yeU1hcCBtX3NvdXJjZUZhY3RvcnlNYXA7Cisg
ICAgZ3Vsb25nIG1fcHJvYmVJZDsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9T
VFJFQU0pCisKKyNlbmRpZiAvLyBDZW50cmFsUGlwZWxpbmVVbml0X2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNl
bnRlckdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuY3BwCmluZGV4IGYxODQyY2I1ZDUw
YmVjNTY4MTFlNjE3MGJlNTRkMTE2OTE0MTkwOTMuLjg2YTFjMzgzMTRkNmY4NTM4ZjE4NmRmYmQy
NjA4NzM5NmM5NTllZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2Vu
dGVyR1N0cmVhbWVyLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pCiAKICNpbmNsdWRlICJNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5oIgorI2luY2x1ZGUg
Ik1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lci5oIgogCiAjaW5jbHVkZSAiTWVkaWFT
dHJlYW1EZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGll
bnQuaCIKQEAgLTUwLDYgKzUxLDcgQEAgTWVkaWFTdHJlYW1DZW50ZXImIE1lZGlhU3RyZWFtQ2Vu
dGVyOjppbnN0YW5jZSgpCiAKIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyOjpNZWRpYVN0cmVh
bUNlbnRlckdTdHJlYW1lcigpCiB7CisgICAgbV9wcml2YXRlID0gTWVkaWFTdHJlYW1DZW50ZXJQ
cml2YXRlR1N0cmVhbWVyOjpjcmVhdGUoKTsKIH0KIAogTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFt
ZXI6On5NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcigpCkBAIC01OCwxMiArNjAsMTIgQEAgTWVk
aWFTdHJlYW1DZW50ZXJHU3RyZWFtZXI6On5NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcigpCiAK
IHZvaWQgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXI6OnF1ZXJ5TWVkaWFTdHJlYW1Tb3VyY2Vz
KFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGllbnQ+IGNsaWVudCkKIHsKLSAg
ICBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciBhdWRpb1NvdXJjZXMsIHZpZGVvU291cmNlczsKLSAg
ICBjbGllbnQtPmRpZENvbXBsZXRlUXVlcnkoYXVkaW9Tb3VyY2VzLCB2aWRlb1NvdXJjZXMpOwor
ICAgIG1fcHJpdmF0ZS0+cXVlcnlNZWRpYVN0cmVhbVNvdXJjZXMoY2xpZW50KTsKIH0KIAotdm9p
ZCBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6ZGlkU2V0TWVkaWFTdHJlYW1UcmFja0VuYWJs
ZWQoTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiwgTWVkaWFTdHJlYW1Db21wb25lbnQqKQordm9pZCBN
ZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6ZGlkU2V0TWVkaWFTdHJlYW1UcmFja0VuYWJsZWQo
TWVkaWFTdHJlYW1EZXNjcmlwdG9yKiBzdHJlYW1EZXNjcmlwdG9yLCBNZWRpYVN0cmVhbUNvbXBv
bmVudCogY29tcG9uZW50KQogeworICAgIG1fcHJpdmF0ZS0+ZGlkU2V0TWVkaWFTdHJlYW1UcmFj
a0VuYWJsZWQoc3RyZWFtRGVzY3JpcHRvciwgY29tcG9uZW50KTsKIH0KIAogYm9vbCBNZWRpYVN0
cmVhbUNlbnRlckdTdHJlYW1lcjo6ZGlkQWRkTWVkaWFTdHJlYW1UcmFjayhNZWRpYVN0cmVhbURl
c2NyaXB0b3IqLCBNZWRpYVN0cmVhbUNvbXBvbmVudCopCkBAIC03Niw4ICs3OCwxMCBAQCBib29s
IE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyOjpkaWRSZW1vdmVNZWRpYVN0cmVhbVRyYWNrKE1l
ZGlhU3RyZWFtRGVzY3JpcHRvcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBNZWRpYVN0
cmVhbUNlbnRlckdTdHJlYW1lcjo6ZGlkU3RvcExvY2FsTWVkaWFTdHJlYW0oTWVkaWFTdHJlYW1E
ZXNjcmlwdG9yKikKK3ZvaWQgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXI6OmRpZFN0b3BMb2Nh
bE1lZGlhU3RyZWFtKE1lZGlhU3RyZWFtRGVzY3JpcHRvciogc3RyZWFtRGVzY3JpcHRvcikKIHsK
KyAgICBtX3ByaXZhdGUtPmRpZFN0b3BMb2NhbE1lZGlhU3RyZWFtKHN0cmVhbURlc2NyaXB0b3Ip
OworICAgIGVuZExvY2FsTWVkaWFTdHJlYW0oc3RyZWFtRGVzY3JpcHRvcik7CiB9CiAKIHZvaWQg
TWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXI6OmRpZENyZWF0ZU1lZGlhU3RyZWFtKE1lZGlhU3Ry
ZWFtRGVzY3JpcHRvciopCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdT
dHJlYW1lci5oCmluZGV4IDNlYzQwM2E2MTI3Zjk1ZmQzZmRkNzEwN2RmYzI5MTA3ZGVmZDA4ZWYu
LjMzNTlhNTY3YTA4OTFlZjJhYzA1NjgxM2Q5ODY0YzI3ZDJmYzU5MGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNl
bnRlckdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5oCkBAIC00NCw2ICs0NCw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIE1lZGlhU3RyZWFtQ29tcG9uZW50OwogY2xhc3Mg
TWVkaWFTdHJlYW1EZXNjcmlwdG9yOwogY2xhc3MgTWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGll
bnQ7CitjbGFzcyBNZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXI7CiAKIGNsYXNzIE1l
ZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyIDogcHVibGljIE1lZGlhU3RyZWFtQ2VudGVyIHsKIHB1
YmxpYzoKQEAgLTU3LDYgKzU4LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBkaWRSZW1v
dmVNZWRpYVN0cmVhbVRyYWNrKE1lZGlhU3RyZWFtRGVzY3JpcHRvciosIE1lZGlhU3RyZWFtQ29t
cG9uZW50KikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGRpZFN0b3BMb2NhbE1lZGlhU3Ry
ZWFtKE1lZGlhU3RyZWFtRGVzY3JpcHRvciopIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBk
aWRDcmVhdGVNZWRpYVN0cmVhbShNZWRpYVN0cmVhbURlc2NyaXB0b3IqKSBPVkVSUklERTsKKwor
cHJpdmF0ZToKKyAgICBPd25QdHI8TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyPiBt
X3ByaXZhdGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50
ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmQ2ZGYzMjk4ODExMjM3YjIxNDMyZTRmOGU2ZThmMDliOGMwMDg3MGMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDQwMiBAQAor
LyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJNZWRpYVN0cmVhbUNl
bnRlclByaXZhdGVHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgIkNlbnRyYWxQaXBlbGluZVVuaXQu
aCIKKyNpbmNsdWRlICJHU3RyZWFtZXJVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgi
CisjaW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJl
YW1Tb3VyY2VzUXVlcnlDbGllbnQuaCIKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaWZuZGVmIEdT
VF9BUElfVkVSU0lPTl8xCisjaW5jbHVkZSA8Z3N0L2ludGVyZmFjZXMvcHJvcGVydHlwcm9iZS5o
PgorI2VuZGlmCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgR1JlZlB0
cjxHc3RFbGVtZW50PiBmaW5kVmlkZW9EZXZpY2VTb3VyY2UoKTsKK3N0YXRpYyBHUmVmUHRyPEdz
dEVsZW1lbnQ+IGZpbmRBdWRpb0RldmljZVNvdXJjZSgpOworc3RhdGljIEdSZWZQdHI8R3N0RWxl
bWVudD4gZmluZERldmljZVNvdXJjZShHc3RFbGVtZW50KiBhdXRvU3JjKTsKK3N0YXRpYyB2b2lk
IHByb2JlU291cmNlKEdzdEVsZW1lbnQqIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBrZXksIE1lZGlh
U3RyZWFtU291cmNlOjpUeXBlLCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgc291cmNlcyk7Cisj
aWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCitzdGF0aWMgU3RyaW5nIGZpbHRlckF1ZGlvU291cmNl
TmFtZShjb25zdCBTdHJpbmcmIGRldmljZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUpOworI2VuZGlm
CitzdGF0aWMgU3RyaW5nIGdldERldmljZVN0cmluZ0Zyb21EZXZpY2VJZFN0cmluZyhjb25zdCBT
dHJpbmcmKTsKK3N0YXRpYyBTdHJpbmcgZ2V0RmFjdG9yeU5hbWVGcm9tRGV2aWNlSWRTdHJpbmco
Y29uc3QgU3RyaW5nJik7CitzdGF0aWMgU3RyaW5nIGNyZWF0ZVVuaXF1ZU5hbWUoY29uc3QgZ2No
YXIqIHByZWZpeCk7CitzdGF0aWMgR1JlZlB0cjxHc3RFbGVtZW50PiBjcmVhdGVBdWRpb1NvdXJj
ZUJpbihHUmVmUHRyPEdzdEVsZW1lbnQ+IHNvdXJjZSk7CitzdGF0aWMgR1JlZlB0cjxHc3RFbGVt
ZW50PiBjcmVhdGVWaWRlb1NvdXJjZUJpbihHUmVmUHRyPEdzdEVsZW1lbnQ+IHNvdXJjZSk7CisK
K3ZvaWQgTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyOjpxdWVyeU1lZGlhU3RyZWFt
U291cmNlcyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlc1F1ZXJ5Q2xpZW50PiBwcnBDbGll
bnQpCit7CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlc1F1ZXJ5Q2xpZW50PiBjbGllbnQg
PSBwcnBDbGllbnQ7CisgICAgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IgYXVkaW9Tb3VyY2VzOwor
ICAgIE1lZGlhU3RyZWFtU291cmNlVmVjdG9yIHZpZGVvU291cmNlczsKKworICAgIEdPd25QdHI8
R0Vycm9yPiBlcnJvcjsKKyAgICBpZiAoIWluaXRpYWxpemVHU3RyZWFtZXIoKSkgeworICAgICAg
ICBjbGllbnQtPmRpZENvbXBsZXRlUXVlcnkoYXVkaW9Tb3VyY2VzLCB2aWRlb1NvdXJjZXMpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGNsaWVudC0+YXVkaW8oKSkgeworICAg
ICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGF1ZGlvU3JjID0gZmluZEF1ZGlvRGV2aWNlU291cmNl
KCk7CisgICAgICAgIGlmIChhdWRpb1NyYykgeworICAgICAgICAgICAgU3RyaW5nIGtleSA9IHN0
b3JlRWxlbWVudEZhY3RvcnlGb3JFbGVtZW50KGF1ZGlvU3JjLmdldCgpKTsKKyAgICAgICAgICAg
IHByb2JlU291cmNlKGF1ZGlvU3JjLmdldCgpLCBrZXksIE1lZGlhU3RyZWFtU291cmNlOjpUeXBl
QXVkaW8sIGF1ZGlvU291cmNlcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY2xpZW50
LT52aWRlbygpKSB7CisgICAgICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gdmlkZW9TcmMgPSBmaW5k
VmlkZW9EZXZpY2VTb3VyY2UoKTsKKyAgICAgICAgaWYgKHZpZGVvU3JjKSB7CisgICAgICAgICAg
ICBTdHJpbmcga2V5ID0gc3RvcmVFbGVtZW50RmFjdG9yeUZvckVsZW1lbnQodmlkZW9TcmMuZ2V0
KCkpOworICAgICAgICAgICAgcHJvYmVTb3VyY2UodmlkZW9TcmMuZ2V0KCksIGtleSwgTWVkaWFT
dHJlYW1Tb3VyY2U6OlR5cGVWaWRlbywgdmlkZW9Tb3VyY2VzKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJlZ2lzdGVyU291cmNlRmFjdG9yaWVzKGF1ZGlvU291cmNlcyk7CisgICAgcmVnaXN0
ZXJTb3VyY2VGYWN0b3JpZXModmlkZW9Tb3VyY2VzKTsKKworICAgIGNsaWVudC0+ZGlkQ29tcGxl
dGVRdWVyeShhdWRpb1NvdXJjZXMsIHZpZGVvU291cmNlcyk7Cit9CisKK3ZvaWQgTWVkaWFTdHJl
YW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyOjpkaWRTZXRNZWRpYVN0cmVhbVRyYWNrRW5hYmxlZChN
ZWRpYVN0cmVhbURlc2NyaXB0b3IqIHN0cmVhbURlc2NyaXB0b3IsIE1lZGlhU3RyZWFtQ29tcG9u
ZW50KiBjb21wb25lbnQpCit7CisgICAgTE9HKE1lZGlhLCAiZW5hYmxlZDogJWQiLCBjb21wb25l
bnQtPmVuYWJsZWQoKSk7Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVh
bWVyOjpkaWRTdG9wTG9jYWxNZWRpYVN0cmVhbShNZWRpYVN0cmVhbURlc2NyaXB0b3IqIHN0cmVh
bURlc2NyaXB0b3IpCit7CisgICAgTE9HKE1lZGlhLCAiZGlkU3RvcExvY2FsTWVkaWFTdHJlYW0g
JXMiLCBzdHJlYW1EZXNjcmlwdG9yLT5pZCgpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHN0cmVhbURlc2NyaXB0b3ItPm51bWJlck9mVmlkZW9Db21wb25l
bnRzKCk7IGkrKykgeworICAgICAgICBNZWRpYVN0cmVhbUNvbXBvbmVudCogY29tcG9uZW50ID0g
c3RyZWFtRGVzY3JpcHRvci0+dmlkZW9Db21wb25lbnQoaSk7CisgICAgICAgIE1lZGlhU3RyZWFt
U291cmNlKiBzb3VyY2UgPSBjb21wb25lbnQtPnNvdXJjZSgpOworCisgICAgICAgIGNvbXBvbmVu
dC0+c2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgIHNvdXJjZS0+c2V0UmVhZHlTdGF0ZShNZWRp
YVN0cmVhbVNvdXJjZTo6UmVhZHlTdGF0ZUVuZGVkKTsKKyAgICB9CisKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc3RyZWFtRGVzY3JpcHRvci0+bnVtYmVyT2ZBdWRpb0NvbXBvbmVudHMo
KTsgaSsrKSB7CisgICAgICAgIE1lZGlhU3RyZWFtQ29tcG9uZW50KiBjb21wb25lbnQgPSBzdHJl
YW1EZXNjcmlwdG9yLT5hdWRpb0NvbXBvbmVudChpKTsKKyAgICAgICAgTWVkaWFTdHJlYW1Tb3Vy
Y2UqIHNvdXJjZSA9IGNvbXBvbmVudC0+c291cmNlKCk7CisKKyAgICAgICAgY29tcG9uZW50LT5z
ZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgc291cmNlLT5zZXRSZWFkeVN0YXRlKE1lZGlhU3Ry
ZWFtU291cmNlOjpSZWFkeVN0YXRlRW5kZWQpOworICAgIH0KK30KKwordm9pZCBNZWRpYVN0cmVh
bUNlbnRlclByaXZhdGVHU3RyZWFtZXI6OnJlZ2lzdGVyU291cmNlRmFjdG9yaWVzKGNvbnN0IE1l
ZGlhU3RyZWFtU291cmNlVmVjdG9yJiBzb3VyY2VzKQoreworICAgIENlbnRyYWxQaXBlbGluZVVu
aXQmIGNwdSA9IENlbnRyYWxQaXBlbGluZVVuaXQ6Omluc3RhbmNlKCk7CisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNvdXJjZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgU3RyaW5nIGlk
ID0gc291cmNlc1tpXS0+aWQoKTsKKyAgICAgICAgU3RyaW5nIGRldmljZVN0cmluZyA9IGdldERl
dmljZVN0cmluZ0Zyb21EZXZpY2VJZFN0cmluZyhpZCk7CisgICAgICAgIFN0cmluZyBmYWN0b3J5
U3RyaW5nID0gZ2V0RmFjdG9yeU5hbWVGcm9tRGV2aWNlSWRTdHJpbmcoaWQpOworCisgICAgICAg
IFN0cmluZyBzb3VyY2VJZCA9IHN0b3JlU291cmNlSW5mbyhzb3VyY2VzW2ldLT50eXBlKCksIGZh
Y3RvcnlTdHJpbmcsIGRldmljZVN0cmluZyk7CisgICAgICAgIExPRyhNZWRpYSwgIlJlZ2lzdGVy
aW5nIHNvdXJjZSBmYWN0b3J5IGZvciBzb3VyY2Ugd2l0aCBpZD0lcyIsIHNvdXJjZUlkLmFzY2lp
KCkuZGF0YSgpKTsKKyAgICAgICAgY3B1LnJlZ2lzdGVyU291cmNlRmFjdG9yeSh0aGlzLCBzb3Vy
Y2VJZCk7CisgICAgfQorfQorCitTdHJpbmcgTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVh
bWVyOjpzdG9yZUVsZW1lbnRGYWN0b3J5Rm9yRWxlbWVudChHc3RFbGVtZW50KiBzb3VyY2UpCit7
CisgICAgR3N0RWxlbWVudEZhY3RvcnkqIGVsZW1lbnRGYWN0b3J5ID0gZ3N0X2VsZW1lbnRfZ2V0
X2ZhY3Rvcnkoc291cmNlKTsKKyAgICBHT3duUHRyPGdjaGFyPiBmYWN0b3J5TmFtZShnc3RfZWxl
bWVudF9nZXRfbmFtZShlbGVtZW50RmFjdG9yeSkpOworICAgIFN0cmluZyBzdHJGYWN0b3J5TmFt
ZShmYWN0b3J5TmFtZS5nZXQoKSk7CisKKyAgICBFbGVtZW50RmFjdG9yeU1hcDo6aXRlcmF0b3Ig
ZWxlbWVudEZhY3RvcnlJdCA9IG1fZWxlbWVudEZhY3RvcnlNYXAuZmluZChzdHJGYWN0b3J5TmFt
ZSk7CisgICAgaWYgKGVsZW1lbnRGYWN0b3J5SXQgPT0gbV9lbGVtZW50RmFjdG9yeU1hcC5lbmQo
KSkKKyAgICAgICAgbV9lbGVtZW50RmFjdG9yeU1hcC5hZGQoc3RyRmFjdG9yeU5hbWUsIGVsZW1l
bnRGYWN0b3J5KTsKKworICAgIHJldHVybiBzdHJGYWN0b3J5TmFtZTsKK30KKworR3N0RWxlbWVu
dEZhY3RvcnkqIE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcjo6c3RvcmVkRWxlbWVu
dEZhY3RvcnkoY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgR3N0RWxlbWVudEZhY3RvcnkqIGVs
ZW1lbnRGYWN0b3J5ID0gMDsKKyAgICBFbGVtZW50RmFjdG9yeU1hcDo6aXRlcmF0b3IgZWxlbWVu
dEZhY3RvcnlJdCA9IG1fZWxlbWVudEZhY3RvcnlNYXAuZmluZChrZXkpOworICAgIGlmIChlbGVt
ZW50RmFjdG9yeUl0ICE9IG1fZWxlbWVudEZhY3RvcnlNYXAuZW5kKCkpCisgICAgICAgIGVsZW1l
bnRGYWN0b3J5ID0gKGVsZW1lbnRGYWN0b3J5SXQtPnZhbHVlKS5nZXQoKTsKKyAgICByZXR1cm4g
ZWxlbWVudEZhY3Rvcnk7Cit9CisKK1N0cmluZyBNZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3Ry
ZWFtZXI6OnN0b3JlU291cmNlSW5mbyhNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZSB0eXBlLCBjb25z
dCBTdHJpbmcmIGZhY3RvcnlLZXksIGNvbnN0IFN0cmluZyYgZGV2aWNlKQoreworICAgIFN0cmlu
ZyBrZXkgPSBTdHJpbmcoZmFjdG9yeUtleSk7CisgICAga2V5LmFwcGVuZCgiOyIpOworICAgIGtl
eS5hcHBlbmQoZGV2aWNlKTsKKworICAgIFNvdXJjZUluZm9NYXA6Oml0ZXJhdG9yIHNvdXJjZUlu
Zm9JdCA9IG1fc291cmNlSW5mb01hcC5maW5kKGtleSk7CisgICAgaWYgKHNvdXJjZUluZm9JdCAh
PSBtX3NvdXJjZUluZm9NYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBzb3VyY2VJbmZvSXQtPmtl
eTsKKworICAgIFNvdXJjZUluZm8gc291cmNlSW5mbyA9IHtmYWN0b3J5S2V5LCB0eXBlLCBkZXZp
Y2V9OworICAgIFNvdXJjZUluZm9NYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3NvdXJjZUluZm9N
YXAuYWRkKGtleSwgc291cmNlSW5mbyk7CisKKyAgICByZXR1cm4ga2V5OworfQorCitHUmVmUHRy
PEdzdEVsZW1lbnQ+IE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlU291
cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSWQsIEdSZWZQdHI8R3N0UGFkPiYgc3JjUGFkKQorewor
ICAgIExPRyhNZWRpYSwgIkNyZWF0aW5nIHNvdXJjZSB3aXRoIGlkPSVzIiwgc291cmNlSWQuYXNj
aWkoKS5kYXRhKCkpOworCisgICAgU291cmNlSW5mb01hcDo6aXRlcmF0b3Igc291cmNlSW5mb0l0
ID0gbV9zb3VyY2VJbmZvTWFwLmZpbmQoc291cmNlSWQpOworICAgIGlmIChzb3VyY2VJbmZvSXQg
PT0gbV9zb3VyY2VJbmZvTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFNvdXJj
ZUluZm8gc291cmNlSW5mbyA9IHNvdXJjZUluZm9JdC0+dmFsdWU7CisKKyAgICBHc3RFbGVtZW50
RmFjdG9yeSogZmFjdG9yeSA9IHN0b3JlZEVsZW1lbnRGYWN0b3J5KHNvdXJjZUluZm8ubV9mYWN0
b3J5S2V5KTsKKyAgICBpZiAoIWZhY3RvcnkpCisgICAgICAgIHJldHVybiAwOworCisgICAgR1Jl
ZlB0cjxHc3RFbGVtZW50PiBzb3VyY2UoZ3N0X2VsZW1lbnRfZmFjdG9yeV9jcmVhdGUoZmFjdG9y
eSwgImRldmljZV9zb3VyY2UiKSk7CisgICAgaWYgKCFzb3VyY2UpCisgICAgICAgIHJldHVybiAw
OworCisgICAgTE9HKE1lZGlhLCAic291cmNlSW5mby5tX2RldmljZT0lcyIsIHNvdXJjZUluZm8u
bV9kZXZpY2UuYXNjaWkoKS5kYXRhKCkpOworICAgIC8vIGRldmljZSBjaG9vc2luZyBpcyBub3Qg
aW1wbGVtZW50ZWQgZm9yIGdzdHJlYW1lciAxLjAgeWV0CisjaWZuZGVmIEdTVF9BUElfVkVSU0lP
Tl8xCisgICAgLy8gZG8gbm90IHNldCBkZXZpY2UgZm9yIHRlc3Qgc291cmNlcworICAgIGlmIChz
b3VyY2VJbmZvLm1fZGV2aWNlICE9ICJ0ZXN0c3JjX2F1ZGlvIgorICAgICAgICAmJiBzb3VyY2VJ
bmZvLm1fZGV2aWNlICE9ICJ0ZXN0c3JjX3ZpZGVvIikKKyAgICAgICAgZ19vYmplY3Rfc2V0KHNv
dXJjZS5nZXQoKSwgImRldmljZSIsIHNvdXJjZUluZm8ubV9kZXZpY2UuYXNjaWkoKS5kYXRhKCks
IE5VTEwpOworI2VuZGlmCisKKyAgICBpZiAoc291cmNlSW5mby5tX3R5cGUgPT0gTWVkaWFTdHJl
YW1Tb3VyY2U6OlR5cGVBdWRpbykKKyAgICAgICAgc291cmNlID0gY3JlYXRlQXVkaW9Tb3VyY2VC
aW4oc291cmNlKTsKKyAgICBlbHNlIGlmIChzb3VyY2VJbmZvLm1fdHlwZSA9PSBNZWRpYVN0cmVh
bVNvdXJjZTo6VHlwZVZpZGVvKQorICAgICAgICBzb3VyY2UgPSBjcmVhdGVWaWRlb1NvdXJjZUJp
bihzb3VyY2UpOworCisgICAgc3JjUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0
aWNfcGFkKHNvdXJjZS5nZXQoKSwgInNyYyIpKTsKKworICAgIHJldHVybiBzb3VyY2U7Cit9CisK
K3N0YXRpYyBHUmVmUHRyPEdzdEVsZW1lbnQ+IGZpbmRBdWRpb0RldmljZVNvdXJjZSgpCit7Cisg
ICAgR1JlZlB0cjxHc3RFbGVtZW50PiBhdXRvU3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtl
KCJhdXRvYXVkaW9zcmMiLCAiYXV0b3NyYyIpOworICAgIGlmICghYXV0b1NyYykKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIGZpbmREZXZpY2VTb3VyY2UoYXV0b1NyYy5nZXQoKSk7Cit9
CisKK3N0YXRpYyBHUmVmUHRyPEdzdEVsZW1lbnQ+IGZpbmRWaWRlb0RldmljZVNvdXJjZSgpCit7
CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBhdXRvU3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9t
YWtlKCJhdXRvdmlkZW9zcmMiLCAiYXV0b3NyYyIpOworICAgIGlmICghYXV0b1NyYykKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGZpbmREZXZpY2VTb3VyY2UoYXV0b1NyYy5nZXQoKSk7
Cit9CisKK3N0YXRpYyBHUmVmUHRyPEdzdEVsZW1lbnQ+IGZpbmREZXZpY2VTb3VyY2UoR3N0RWxl
bWVudCogYXV0b1NyYykKK3sKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGRldmljZVNyYzsKKyAg
ICBHc3RDaGlsZFByb3h5KiBjaGlsZFByb3h5ID0gR1NUX0NISUxEX1BST1hZKGF1dG9TcmMpOwor
ICAgIGlmICghY2hpbGRQcm94eSkKKyAgICAgICAgcmV0dXJuIGRldmljZVNyYzsKKworICAgIEdz
dFN0YXRlQ2hhbmdlUmV0dXJuIHN0YXRlQ2hhbmdlUmVzdWx0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0
YXRlKGF1dG9TcmMsIEdTVF9TVEFURV9SRUFEWSk7CisgICAgaWYgKHN0YXRlQ2hhbmdlUmVzdWx0
ICE9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIGRldmljZVNyYzsK
KworICAgIGlmIChnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkcmVuX2NvdW50KGNoaWxkUHJveHkp
KQorICAgICAgICBkZXZpY2VTcmMgPSBhZG9wdEdSZWYoR1NUX0VMRU1FTlQoZ3N0X2NoaWxkX3By
b3h5X2dldF9jaGlsZF9ieV9pbmRleChjaGlsZFByb3h5LCAwKSkpOworCisgICAgZ3N0X2VsZW1l
bnRfc2V0X3N0YXRlKGF1dG9TcmMsIEdTVF9TVEFURV9OVUxMKTsKKyAgICByZXR1cm4gZGV2aWNl
U3JjOworfQorCitzdGF0aWMgdm9pZCBwcm9iZVNvdXJjZShHc3RFbGVtZW50KiBzb3VyY2UsIGNv
bnN0IFN0cmluZyYga2V5LCBNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZSB0eXBlLCBNZWRpYVN0cmVh
bVNvdXJjZVZlY3RvciYgc291cmNlcykKK3sKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAg
ICBHc3RQcm9wZXJ0eVByb2JlKiBwcm9iZSA9IEdTVF9QUk9QRVJUWV9QUk9CRShzb3VyY2UpOwor
ICAgIGlmICghcHJvYmUpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IEdQYXJhbVNwZWMq
IHBzcGVjID0gZ3N0X3Byb3BlcnR5X3Byb2JlX2dldF9wcm9wZXJ0eShwcm9iZSwgImRldmljZSIp
OworICAgIGlmICghcHNwZWMpCisgICAgICAgIHJldHVybjsKKworICAgIEdWYWx1ZUFycmF5KiBh
cnJheSA9IGdzdF9wcm9wZXJ0eV9wcm9iZV9wcm9iZV9hbmRfZ2V0X3ZhbHVlcyhwcm9iZSwgcHNw
ZWMpOworICAgIGlmIChhcnJheSkgeworICAgICAgICBHVmFsdWUqIHZhbHVlID0gMDsKKyAgICAg
ICAgR093blB0cjxnY2hhcj4gZGV2aWNlTmFtZTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IChpbnQpYXJyYXktPm5fdmFsdWVzOyBpKyspIHsKKyAgICAgICAgICAgIHZhbHVlID0gZ192
YWx1ZV9hcnJheV9nZXRfbnRoKGFycmF5LCBpKTsKKyAgICAgICAgICAgIGNvbnN0IGdjaGFyKiBk
ZXZpY2UgPSBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpOworICAgICAgICAgICAgZ19vYmplY3Rf
c2V0KHNvdXJjZSwgImRldmljZSIsIGRldmljZSwgTlVMTCk7CisgICAgICAgICAgICBnX29iamVj
dF9nZXQoc291cmNlLCAiZGV2aWNlLW5hbWUiLCBkZXZpY2VOYW1lLm91dFB0cigpLCBOVUxMKTsK
KyAgICAgICAgICAgIFN0cmluZyBzb3VyY2VOYW1lID0gU3RyaW5nKGRldmljZU5hbWUuZ2V0KCkp
OworCisgICAgICAgICAgICBTdHJpbmcgZGV2aWNlSWQgPSBrZXk7CisgICAgICAgICAgICBkZXZp
Y2VJZC5hcHBlbmQoIjsiKTsKKyAgICAgICAgICAgIGRldmljZUlkLmFwcGVuZChkZXZpY2UpOwor
CisgICAgICAgICAgICBHT3duUHRyPGdjaGFyPiBzb3VyY2VFbGVtZW50TmFtZShnc3RfZWxlbWVu
dF9nZXRfbmFtZShzb3VyY2UpKTsKKyAgICAgICAgICAgIGlmICghZ19zdHJjbXAwKHNvdXJjZUVs
ZW1lbnROYW1lLmdldCgpLCAiYXV0b3NyYy1hY3R1YWwtc3JjLXB1bHMiKSkKKyAgICAgICAgICAg
ICAgICBzb3VyY2VOYW1lID0gZmlsdGVyQXVkaW9Tb3VyY2VOYW1lKGRldmljZUlkLCBzb3VyY2VO
YW1lKTsKKworICAgICAgICAgICAgaWYgKCFzb3VyY2VOYW1lLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgICAgICBzb3VyY2VzLmFwcGVuZChNZWRpYVN0cmVhbVNvdXJjZTo6Y3JlYXRlKGRldmljZUlk
LCB0eXBlLCBzb3VyY2VOYW1lKSk7CisgICAgICAgIH0KKyAgICAgICAgZ192YWx1ZV9hcnJheV9m
cmVlKGFycmF5KTsKKyAgICB9CisjZWxzZQorICAgIC8vIEZJWE1FOiBnc3RyZWFtZXIgMS4wIGRv
ZXNuJ3QgaGF2ZSBhbiBlcXVpdmFsZW50IHRvIEdzdFByb3BlcnR5UHJvYmUsCisgICAgLy8gc28g
d2UgZG9uJ3Qgc3VwcG9ydCBjaG9vc2luZyBhIHBhcnRpY3VsYXIgZGV2aWNlIHlldC4KKyAgICAv
LyBzZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3ODQwMgor
ICAgIFN0cmluZyBkZXZpY2VJZCA9IGtleTsKKyAgICBkZXZpY2VJZC5hcHBlbmQoIjtkZWZhdWx0
Iik7CisgICAgc291cmNlcy5hcHBlbmQoTWVkaWFTdHJlYW1Tb3VyY2U6OmNyZWF0ZShkZXZpY2VJ
ZCwgdHlwZSwgImRlZmF1bHQiKSk7CisjZW5kaWYKK30KKworI2lmbmRlZiBHU1RfQVBJX1ZFUlNJ
T05fMQorc3RhdGljIFN0cmluZyBmaWx0ZXJBdWRpb1NvdXJjZU5hbWUoY29uc3QgU3RyaW5nJiBk
ZXZpY2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIC8vIGF1dG9zcmMtYWN0dWFsLXNy
Yy1wdWxzIHJldHVybnMgb3V0cHV0IGRldmljZXMsIGFuZCBkb2VzIG5vdCBzdXBwbHkgZGV2aWNl
TmFtZS4gVGhpcworICAgIC8vIHJlbW92ZXMgdGhlIG91dHB1dCBhbmQgcGFyc2VzIGEgc29tZXdo
YXQgcmVhZGFibGUgZGlzcGxheSBuYW1lIGZyb20gdGhlICJkZXZpY2UgaWQiLgorICAgIGlmIChk
ZXZpY2VJZC5jb250YWlucygiYWxzYV9vdXRwdXQiLCBmYWxzZSkpCisgICAgICAgIHJldHVybiAi
IjsKKworICAgIGd1aW50IGxlbmd0aCA9IGRldmljZUlkLmxlbmd0aCgpOworICAgIHNpemVfdCBw
b3NpdGlvbiA9IGRldmljZUlkLmZpbmQoImFsc2FfaW5wdXQuIik7CisgICAgaWYgKHBvc2l0aW9u
ICE9IG5vdEZvdW5kKQorICAgICAgICByZXR1cm4gZGV2aWNlSWQuc3Vic3RyaW5nKHBvc2l0aW9u
ICsgMTEsIGxlbmd0aCk7CisgICAgcmV0dXJuIG5hbWU7Cit9CisjZW5kaWYgLy8gIUdTVF9BUElf
VkVSU0lPTl8xCisKK3N0YXRpYyBTdHJpbmcgZ2V0RGV2aWNlU3RyaW5nRnJvbURldmljZUlkU3Ry
aW5nKGNvbnN0IFN0cmluZyYgZGV2aWNlSWQpCit7CisgICAgc2l6ZV90IGluZGV4ID0gZGV2aWNl
SWQuZmluZCgiOyIpOworICAgIFN0cmluZyBkZXZpY2VTdHIgPSBkZXZpY2VJZC5zdWJzdHJpbmco
aW5kZXgrMSwgZGV2aWNlSWQubGVuZ3RoKCkpOworICAgIHJldHVybiBkZXZpY2VTdHI7Cit9CisK
K3N0YXRpYyBTdHJpbmcgZ2V0RmFjdG9yeU5hbWVGcm9tRGV2aWNlSWRTdHJpbmcoY29uc3QgU3Ry
aW5nJiBkZXZpY2VJZCkKK3sKKyAgICBzaXplX3QgaW5kZXggPSBkZXZpY2VJZC5maW5kKCI7Iik7
CisgICAgU3RyaW5nIGRldmljZVN0ciA9IGRldmljZUlkLmxlZnQoaW5kZXgpOworICAgIHJldHVy
biBkZXZpY2VTdHI7Cit9CisKK1N0cmluZyBjcmVhdGVVbmlxdWVOYW1lKGNvbnN0IGdjaGFyKiBw
cmVmaXgpCit7CisgICAgc3RhdGljIGludCBjb3VudCA9IDA7CisgICAgcmV0dXJuIFN0cmluZzo6
Zm9ybWF0KCIlcyVkIiwgcHJlZml4LCBjb3VudCsrKTsKK30KKworc3RhdGljIEdSZWZQdHI8R3N0
RWxlbWVudD4gY3JlYXRlQXVkaW9Tb3VyY2VCaW4oR1JlZlB0cjxHc3RFbGVtZW50PiBzb3VyY2Up
Cit7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBhdWRpb2NvbnZlcnQgPSBnc3RfZWxlbWVudF9m
YWN0b3J5X21ha2UoImF1ZGlvY29udmVydCIsICJhdWRpb2NvbnZlcnQiKTsKKyAgICBpZiAoIWF1
ZGlvY29udmVydCkgeworICAgICAgICBMT0coTWVkaWEsICJFUlJPUiwgR290IG5vIGF1ZGlvY29u
dmVydCBlbGVtZW50IGZvciBhdWRpbyBzb3VyY2UgcGlwZWxpbmUiKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgR1JlZlB0cjxHc3RDYXBzPiBhdWRpb2NhcHM7CisjaWZuZGVmIEdT
VF9BUElfVkVSU0lPTl8xCisgICAgYXVkaW9jYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19z
aW1wbGUoImF1ZGlvL3gtcmF3LWludCIsICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIDEsIE5VTEwp
KTsKKyNlbHNlCisgICAgYXVkaW9jYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUo
ImF1ZGlvL3gtcmF3IiwgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwgMSwgTlVMTCkpOworI2VuZGlm
CisgICAgaWYgKCFhdWRpb2NhcHMpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiRVJST1IsIFVuYWJs
ZSB0byBjcmVhdGUgZmlsdGVyIGNhcHMgZm9yIGF1ZGlvIHNvdXJjZSBwaXBlbGluZSIpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBTdHJpbmcgYmluTmFtZShjcmVhdGVVbmlxdWVO
YW1lKCJTdHJlYW1EZXZpY2VfQXVkaW9UZXN0U291cmNlQmluIikpOworICAgIEdSZWZQdHI8R3N0
RWxlbWVudD4gYXVkaW9Tb3VyY2VCaW4gPSBnc3RfYmluX25ldyhiaW5OYW1lLmFzY2lpKCkuZGF0
YSgpKTsKKworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTihhdWRpb1NvdXJjZUJpbi5nZXQo
KSksIHNvdXJjZS5nZXQoKSwgYXVkaW9jb252ZXJ0LmdldCgpLCBOVUxMKTsKKworICAgIGlmICgh
Z3N0X2VsZW1lbnRfbGlua19maWx0ZXJlZChzb3VyY2UuZ2V0KCksIGF1ZGlvY29udmVydC5nZXQo
KSwgYXVkaW9jYXBzLmdldCgpKSkgeworICAgICAgICBMT0coTWVkaWEsICJFUlJPUiwgQ2Fubm90
IGxpbmsgYXVkaW8gc291cmNlIGVsZW1lbnRzIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KworICAgIEdzdFBhZCogc3JjUGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoYXVkaW9j
b252ZXJ0LmdldCgpLCAic3JjIik7CisgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChhdWRpb1NvdXJj
ZUJpbi5nZXQoKSwgZ3N0X2dob3N0X3BhZF9uZXcoInNyYyIsIHNyY1BhZCkpOworCisgICAgcmV0
dXJuIGF1ZGlvU291cmNlQmluOworfQorCitzdGF0aWMgR1JlZlB0cjxHc3RFbGVtZW50PiBjcmVh
dGVWaWRlb1NvdXJjZUJpbihHUmVmUHRyPEdzdEVsZW1lbnQ+IHNvdXJjZSkKK3sKKyAgICBHUmVm
UHRyPEdzdEVsZW1lbnQ+IGNvbG9yc3BhY2U7CisjaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCisg
ICAgY29sb3JzcGFjZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiZmZtcGVnY29sb3JzcGFj
ZSIsICJjb2xvcnNwYWNlIik7CisjZWxzZQorICAgIGNvbG9yc3BhY2UgPSBnc3RfZWxlbWVudF9m
YWN0b3J5X21ha2UoInZpZGVvY29udmVydCIsICJjb2xvcnNwYWNlIik7CisjZW5kaWYKKyAgICBp
ZiAoIWNvbG9yc3BhY2UpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiRVJST1IsIEdvdCBubyBmZm1w
ZWdjb2xvcnNwYWNlIGVsZW1lbnQgZm9yIHZpZGVvIHNvdXJjZSBwaXBlbGluZSIpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiB2aWRlb3NjYWxlID0g
Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ2aWRlb3NjYWxlIiwgInZpZGVvc2NhbGUiKTsKKyAg
ICBpZiAoIXZpZGVvc2NhbGUpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiRVJST1IsIEdvdCBubyB2
aWRlb3NjYWxlIGVsZW1lbnQgZm9yIHZpZGVvIHNvdXJjZSBwaXBlbGluZSIpOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisKKyAgICBHUmVmUHRyPEdzdENhcHM+IHZpZGVvY2FwczsKKyNpZm5k
ZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICB2aWRlb2NhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxl
KCJ2aWRlby94LXJhdy15dXYiLCAid2lkdGgiLCBHX1RZUEVfSU5ULCAzMjAsICJoZWlnaHQiLCBH
X1RZUEVfSU5ULCAyNDAsIE5VTEwpOworI2Vsc2UKKyAgICB2aWRlb2NhcHMgPSBnc3RfY2Fwc19u
ZXdfc2ltcGxlKCJ2aWRlby94LXJhdyIsICJ3aWR0aCIsIEdfVFlQRV9JTlQsIDMyMCwgImhlaWdo
dCIsIEdfVFlQRV9JTlQsIDI0MCwgTlVMTCk7CisjZW5kaWYKKyAgICBpZiAoIXZpZGVvY2Fwcykg
eworICAgICAgICBMT0coTWVkaWEsICJFUlJPUiwgVW5hYmxlIHRvIGNyZWF0ZSBmaWx0ZXIgY2Fw
cyBmb3IgdmlkZW8gc291cmNlIHBpcGVsaW5lIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KworICAgIFN0cmluZyBiaW5OYW1lKGNyZWF0ZVVuaXF1ZU5hbWUoIlN0cmVhbURldmljZV9WaWRl
b1Rlc3RTb3VyY2VCaW4iKSk7CisgICAgR3N0RWxlbWVudCogdmlkZW9Tb3VyY2VCaW4gPSBnc3Rf
YmluX25ldyhiaW5OYW1lLmFzY2lpKCkuZGF0YSgpKTsKKworICAgIGdzdF9iaW5fYWRkX21hbnko
R1NUX0JJTih2aWRlb1NvdXJjZUJpbiksIHNvdXJjZS5nZXQoKSwgdmlkZW9zY2FsZS5nZXQoKSwg
Y29sb3JzcGFjZS5nZXQoKSwgTlVMTCk7CisKKyAgICBpZiAoIWdzdF9lbGVtZW50X2xpbmtfbWFu
eShzb3VyY2UuZ2V0KCksIHZpZGVvc2NhbGUuZ2V0KCksIE5VTEwpCisgICAgICAgIHx8ICFnc3Rf
ZWxlbWVudF9saW5rX2ZpbHRlcmVkKHZpZGVvc2NhbGUuZ2V0KCksIGNvbG9yc3BhY2UuZ2V0KCks
IHZpZGVvY2Fwcy5nZXQoKSkpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiRVJST1IsIENhbm5vdCBs
aW5rIHZpZGVvIHNvdXJjZSBlbGVtZW50cyIpOworICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHZp
ZGVvU291cmNlQmluKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgR1JlZlB0cjxH
c3RQYWQ+IHNyY1BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGNvbG9yc3BhY2UuZ2V0
KCksICJzcmMiKTsKKyAgICBnc3RfZWxlbWVudF9hZGRfcGFkKHZpZGVvU291cmNlQmluLCBnc3Rf
Z2hvc3RfcGFkX25ldygic3JjIiwgc3JjUGFkLmdldCgpKSk7CisKKyAgICByZXR1cm4gdmlkZW9T
b3VyY2VCaW47Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1D
ZW50ZXJQcml2YXRlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2M3M2ZkYTQ4NDcyZGIxOTFlMDM5
NmZkOWRjZDA5OWY0YmJhMDQ5YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3Ry
ZWFtZXIuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBDb2xs
YWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworCisjaWZuZGVmIE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcl9oCisj
ZGVmaW5lIE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcl9oCisKKyNpZiBFTkFCTEUo
TUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUg
Ik1lZGlhU3RyZWFtU291cmNlLmgiCisjaW5jbHVkZSAiU291cmNlRmFjdG9yeS5oIgorCisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBNZWRpYVN0cmVhbUNlbnRlcjsKK2NsYXNzIE1l
ZGlhU3RyZWFtRGVzY3JpcHRvcjsKK2NsYXNzIE1lZGlhU3RyZWFtQ29tcG9uZW50OworY2xhc3Mg
TWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGllbnQ7CisKK2NsYXNzIE1lZGlhU3RyZWFtQ2VudGVy
UHJpdmF0ZUdTdHJlYW1lciA6IHByaXZhdGUgU291cmNlRmFjdG9yeSB7Citwcml2YXRlOgorICAg
IHR5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgU3RyaW5nIG1fZmFjdG9yeUtleTsKKyAgICAgICAg
TWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGUgbV90eXBlOworICAgICAgICBTdHJpbmcgbV9kZXZpY2U7
CisgICAgfSBTb3VyY2VJbmZvOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU291cmNl
SW5mbz4gU291cmNlSW5mb01hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBHUmVmUHRy
PEdzdEVsZW1lbnRGYWN0b3J5PiA+IEVsZW1lbnRGYWN0b3J5TWFwOworCitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NPd25QdHI8TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyPiBjcmVh
dGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBNZWRpYVN0cmVhbUNlbnRl
clByaXZhdGVHU3RyZWFtZXIoKSk7CisgICAgfQorCisgICAgdm9pZCBxdWVyeU1lZGlhU3RyZWFt
U291cmNlcyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlc1F1ZXJ5Q2xpZW50Pik7CisKKyAg
ICB2b2lkIGRpZFNldE1lZGlhU3RyZWFtVHJhY2tFbmFibGVkKE1lZGlhU3RyZWFtRGVzY3JpcHRv
ciosIE1lZGlhU3RyZWFtQ29tcG9uZW50Kik7CisgICAgdm9pZCBkaWRTdG9wTG9jYWxNZWRpYVN0
cmVhbShNZWRpYVN0cmVhbURlc2NyaXB0b3IqKTsKKworcHJpdmF0ZToKKyAgICBNZWRpYVN0cmVh
bUNlbnRlclByaXZhdGVHU3RyZWFtZXIoKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHJlZ2lz
dGVyU291cmNlRmFjdG9yaWVzKGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJik7CisgICAg
U3RyaW5nIHN0b3JlRWxlbWVudEZhY3RvcnlGb3JFbGVtZW50KEdzdEVsZW1lbnQqIHNvdXJjZSk7
CisgICAgR3N0RWxlbWVudEZhY3RvcnkqIHN0b3JlZEVsZW1lbnRGYWN0b3J5KGNvbnN0IFN0cmlu
ZyYga2V5KTsKKyAgICBTdHJpbmcgc3RvcmVTb3VyY2VJbmZvKE1lZGlhU3RyZWFtU291cmNlOjpU
eXBlLCBjb25zdCBTdHJpbmcmIGZhY3RvcnlLZXksIGNvbnN0IFN0cmluZyYgZGV2aWNlKTsKKwor
ICAgIC8vIFNvdXJjZUZhY3RvcnkKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGNyZWF0ZVNvdXJj
ZShjb25zdCBTdHJpbmcmIHNvdXJjZUlkLCBHUmVmUHRyPEdzdFBhZD4mIHNyY1BhZCk7CisKKyAg
ICBFbGVtZW50RmFjdG9yeU1hcCBtX2VsZW1lbnRGYWN0b3J5TWFwOworICAgIFNvdXJjZUluZm9N
YXAgbV9zb3VyY2VJbmZvTWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8vIE1lZGlhU3RyZWFtQ2VudGVy
UHJpdmF0ZUdTdHJlYW1lcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvU291cmNlRmFjdG9yeS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1NvdXJjZUZhY3RvcnkuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
YWVlZmMxZGI3ZmQwNGQxMzVjZGE3ZWRjZGNhNDA2MmU4Y2QxM2EwCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1NvdXJjZUZh
Y3RvcnkuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBDb2xs
YWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI2lmbmRlZiBTb3VyY2VGYWN0b3J5X2gKKyNkZWZpbmUgU291cmNlRmFjdG9yeV9o
CisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCit0eXBlZGVmIHN0cnVjdCBfR3N0UGFkIEdzdFBhZDsKK3R5cGVkZWYg
c3RydWN0IF9Hc3RFbGVtZW50IEdzdEVsZW1lbnQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgU291cmNlRmFjdG9yeSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU291cmNlRmFj
dG9yeSk7CitwdWJsaWM6CisgICAgU291cmNlRmFjdG9yeSgpIHsgfQorICAgIHZpcnR1YWwgR1Jl
ZlB0cjxHc3RFbGVtZW50PiBjcmVhdGVTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJZCwgR1Jl
ZlB0cjxHc3RQYWQ+JiBzcmNQYWQpID0gMDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgflNv
dXJjZUZhY3RvcnkoKSB7IH0KK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRUQoTUVESUFfU1RS
RUFNKQorCisjZW5kaWYgLy8gU291cmNlRmFjdG9yeV9oCg==
</data>
<flag name="review"
          id="214310"
          type_id="1"
          status="-"
          setter="pnormand"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214731</attachid>
            <date>2013-10-21 05:48:20 -0700</date>
            <delta_ts>2013-10-25 09:45:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>MediaStreamCenter-and-minimal-CentralPipelineUnit.patch</filename>
            <type>text/plain</type>
            <size>30544</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSAzYWI2ZWNjMWYwOWMwMmMxNmRmODY1YjQ5MTE1YzI5M2Y0MTQ1MWFhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUaHUsIDE3IE9jdCAyMDEzIDE3OjM0OjQzICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
TWVkaWFTdHJlYW1DZW50ZXIgYW5kIG1pbmltYWwgQ2VudHJhbFBpcGVsaW5lVW5pdAoKLS0tCiBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2NSAr
KysrKysrKysrCiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtICAgICAgICAgICAg
ICAgICB8ICAgNSArCiAuLi4vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0NlbnRyYWxQaXBlbGluZVVu
aXQuY3BwICB8IDEwMyArKysrKysrKysrKysrKysKIC4uLi9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
Q2VudHJhbFBpcGVsaW5lVW5pdC5oICAgIHwgIDc4ICsrKysrKysrKysrCiAuLi4vZ3N0cmVhbWVy
L01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmNwcCAgICAgICB8ICA1OSArKysrKysrLS0KIC4u
Li9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuaCAgICAgICAgIHwgIDE1ICsr
LQogLi4uL01lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgICAgICAgICAgfCAx
NDIgKysrKysrKysrKysrKysrKysrKysrCiAuLi4vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVy
UHJpdmF0ZUdTdHJlYW1lci5oICB8ICA5MiArKysrKysrKysrKysrCiAuLi4vcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL1NvdXJjZUZhY3RvcnkuaCB8ICA0OCArKysrKysrCiA5IGZpbGVz
IGNoYW5nZWQsIDU4OSBpbnNlcnRpb25zKCspLCAxOCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2Vu
dHJhbFBpcGVsaW5lVW5pdC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5pdC5oCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL01lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFT
dHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvU291cmNlRmFjdG9yeS5oCgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IDQyZDlkNTcuLmM0MTc4YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2OCBA
QAorMjAxMy0xMC0xNyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0dTdHJlYW1lcl0gYmFzaWMgTWVkaWFTdHJlYW1DZW50ZXIgYW5kIENlbnRyYWxQ
aXBlbGluZVVuaXQgaW1wbGVtZW50YXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAxNTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIHZlcnkgYmFzaWMgTWVkaWFTdHJlYW1DZW50ZXIgaXMg
YWJsZSB0byBkZXRlY3QgdGhlIGF1ZGlvIGFuZAorICAgICAgICB2aWRlbyBzb3VyY2UgZGV2aWNl
cyBhbmQgbWFrZSB0aGVtIGF2YWlsYWJsZSB0byB0aGUgd2ViIHBhZ2UgdmlhCisgICAgICAgIHRo
ZSBnZXRVc2VyTWVkaWEgQVBJLiBQbGF5YmFjayBzdXBwb3J0IHZpYSBhIGRlZGljYXRlZAorICAg
ICAgICBNZWRpYVBsYXllclByaXZhdGUgYmFja2VuZCB3aWxsIGJlIHByb3ZpZGVkIGluIGEgZm9s
bG93LXVwIHBhdGNoLgorCisgICAgICAgIFRoZSBNZWRpYVN0cmVhbUNlbnRlciBpbXBsZW1lbnRh
dGlvbiBpcyBjb250YWluZWQgaW4gdGhlCisgICAgICAgIE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0
ZUdTdHJlYW1lci4gVGhlIENlbnRyYWxQaXBlbGluZVVuaXQgaXMKKyAgICAgICAgbWFuYWdpbmcg
dGhlIHBpcGVsaW5lIHVzZWQgZm9yIGF1ZGlvL3ZpZGVvIGNhcHR1cmUgYW5kCisgICAgICAgIHJl
bmRlcmluZy4gSXQgaXMgdXNlZCBieSB0aGUgTWVkaWFTdHJlYW1DZW50ZXIgdG8gKHVuKXJlZ2lz
dGVyCisgICAgICAgIHNvdXJjZXMgYW5kIGxhdGVyIG9uIGl0IHdpbGwgYmUgdXNlZCBieSB0aGUg
TWVkaWFQbGF5ZXIgdG8gbWFuYWdlCisgICAgICAgIHRoZSByZW5kZXJpbmcuCisKKyAgICAgICAg
UGF0Y2ggYmFzZWQgb24gd29yayBwcmV2aW91c2x5IGRvbmUgYnkgSm9uYXRob24gSm9uZ3NtYSA8
am9uYXRob24uam9uZ3NtYUBjb2xsYWJvcmEuY29tPi4KKworICAgICAgICAqIEdOVW1ha2VmaWxl
Lmxpc3QuYW06IEFkZGluZyBuZXcgZmlsZXMgdG8gdGhlIGJ1aWxkLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9DZW50cmFsUGlwZWxpbmVVbml0LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjptZXNzYWdlQ2FsbGJhY2spOiBGdW5jdGlvbiBjYWxsZWQgZXZl
cnkgdGltZSBhIG1lc3NhZ2UKKyAgICAgICAgZnJvbSB0aGUgR1N0cmVhbWVyIGJ1cyBuZWVkcyB0
byBiZSBwcm9jZXNzZWQuCisgICAgICAgIChXZWJDb3JlOjpDZW50cmFsUGlwZWxpbmVVbml0Ojpp
bnN0YW5jZSk6IFV0aWxpdHkgZnVuY3Rpb24gdG8KKyAgICAgICAgYWNjZXNzIHRoZSBDZW50cmFs
UGlwZWxpbmVVbml0IHNpbmdsZXRvbi4KKyAgICAgICAgKFdlYkNvcmU6OkNlbnRyYWxQaXBlbGlu
ZVVuaXQ6OkNlbnRyYWxQaXBlbGluZVVuaXQpOgorICAgICAgICAoV2ViQ29yZTo6Q2VudHJhbFBp
cGVsaW5lVW5pdDo6fkNlbnRyYWxQaXBlbGluZVVuaXQpOgorICAgICAgICAoV2ViQ29yZTo6Q2Vu
dHJhbFBpcGVsaW5lVW5pdDo6cmVnaXN0ZXJTb3VyY2VGYWN0b3J5KToKKyAgICAgICAgKFdlYkNv
cmU6OkNlbnRyYWxQaXBlbGluZVVuaXQ6OmRlcmVnaXN0ZXJTb3VyY2VGYWN0b3J5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNlbnRyYWxQaXBlbGluZVVuaXQ6OmhhbmRsZU1lc3NhZ2UpOiBHc3RNZXNz
YWdlCisgICAgICAgIGhhbmRsZXIuIEZvciBub3cgb25seSBwcm9jZXNzIGVycm9yIG1lc3NhZ2Vz
LgorICAgICAgICAoV2ViQ29yZTo6Q2VudHJhbFBpcGVsaW5lVW5pdDo6cGlwZWxpbmUpOiBQdWJs
aWMgcGlwZWxpbmUgYWNjZXNzb3IuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0NlbnRyYWxQaXBlbGluZVVuaXQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpD
ZW50cmFsUGlwZWxpbmVVbml0OjpTb3VyY2U6OlNvdXJjZSk6CisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtQ2VudGVyOjpwbGF0Zm9ybUNlbnRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6TWVkaWFTdHJlYW1DZW50
ZXJHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFt
ZXI6OnZhbGlkYXRlUmVxdWVzdENvbnN0cmFpbnRzKToKKyAgICAgICAgRm9yIG5vdyB2YWxpZGF0
ZSB1bmNoZWNrZWQgYXVkaW8vdmlkZW8gY29uc3RyYWludHMuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6Y3JlYXRlTWVkaWFTdHJlYW0pOiBDcmVhdGUgYQor
ICAgICAgICBtZWRpYXN0cmVhbSB1c2luZyB0aGUgZmlyc3QgYXVkaW8gYW5kIHZpZGVvIGRldmlj
ZSBhdmFpbGFibGUuIFRoaXMKKyAgICAgICAgd2lsbCBiZSBpbXByb3ZlZCB3aGVuIGNvbnN0cmFp
bnRzIHZhbGlkYXRpb24gaXMgaW1wbGVtZW50ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0
cmVhbUNlbnRlckdTdHJlYW1lcjo6Z2V0TWVkaWFTdHJlYW1UcmFja1NvdXJjZXMpOgorICAgICAg
ICBEbyBub3RoaW5nLCB0aGlzIG1ldGhvZCBkb2Vzbid0IHNlZW0gdXNlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1D
ZW50ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpmaW5k
RGV2aWNlU291cmNlKTogVGhlIGF1dG97YXVkaW8sdmlkZW99c3JjIGVsZW1lbnRzIGFyZQorICAg
ICAgICB3cmFwcGVycyBhcm91bmQgdGhlIHJlYWwgc3JjIGVsZW1lbnRzLiBUaGlzIGZ1bmN0aW9u
IGZpbmRzIHRoZW0gb3V0LgorICAgICAgICAoV2ViQ29yZTo6cHJvYmVTb3VyY2UpOiBJbnNwZWN0
IGEgc291cmNlIGVsZW1lbnQgKGluY29tcGxldGVseSBmb3IKKyAgICAgICAgbm93KSBhbmQgcmVn
aXN0ZXIgaXQgYXMgYSBuZXcgTWVkaWFTdHJlYW1Tb3VyY2UuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXI6Ok1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0
ZUdTdHJlYW1lcik6CisgICAgICAgIERpc2NvdmVyIGxvY2FsIGF1ZGlvL3ZpZGVvIGRldmljZXMg
YW5kIHJlZ2lzdGVyIHRoZW0gaW4gdGhlIENlbnRyYWxQaXBlbGluZVVuaXQuCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZVNvdXJjZSk6
CisgICAgICAgIFVuaW1wbGVtZW50ZWQgbWV0aG9kLCB3aWxsIGJlIHVzZWQgYnkgdGhlIENlbnRy
YWxQaXBlbGluZVVuaXQgdG8KKyAgICAgICAgY3JlYXRlIGEgbGl2ZSBhdWRpby92aWRlbyBzb3Vy
Y2Ugb24tZGVtYW5kLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRl
R1N0cmVhbWVyOjpmaXJzdFNvdXJjZSk6IEZpbmQKKyAgICAgICAgdGhlIGZpcnN0IHJlZ2lzdGVy
ZWQgc291cmNlIG9mIHRoZSBnaXZlbiB0eXBlLiBUaGlzIGNvbnZlbmllbmNlCisgICAgICAgIG1l
dGhvZCB3aWxsIGJlIHJlbW92ZWQgb25jZSBtZWRpYSBjb25zdHJhaW50cyBjaGVja2luZyBoYXMg
YmVlbiBpbXBsZW1lbnRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmg6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Tb3VyY2VGYWN0b3J5Lmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlRmFjdG9yeTo6U291cmNlRmFjdG9yeSk6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VGYWN0b3J5Ojp+U291cmNlRmFjdG9yeSk6CisKIDIwMTMtMTAtMTgg
IENoYW5nU2VvayBPaCAgPGNoYW5nc2Vvay5vaEBjb2xsYWJvcmEuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQgYnVpbGQgZml4IGZvciAtLW5vLXN2ZyBvcHRpb24uCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQppbmRleCA3ZWQzMzc1Li5jMmM0OGZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KQEAgLTUzOTgsOCArNTM5OCwxMyBAQCB3ZWJjb3JlX3BsYXRmb3JtX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNj
cmlwdGlvbkRlc2NyaXB0b3IuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vUlRDU3RhdHNSZXF1ZXN0LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL1JUQ1ZvaWRSZXF1ZXN0LmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9DZW50cmFsUGlwZWxpbmVVbml0LmggXAorCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9DZW50cmFsUGlwZWxpbmVVbml0LmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFt
Q2VudGVyR1N0cmVhbWVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmggXAorCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlclByaXZh
dGVHU3RyZWFtZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgXAorCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Tb3VyY2VGYWN0b3J5LmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svRGV2aWNlTW90aW9uQ2xpZW50TW9jay5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svRGV2aWNlTW90aW9uQ2xpZW50TW9jay5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL0RldmljZU9yaWVudGF0aW9uQ2xpZW50
TW9jay5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0NlbnRyYWxQaXBlbGluZVVuaXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0NlbnRyYWxQaXBlbGluZVVuaXQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NWU4YTkKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBp
cGVsaW5lVW5pdC5jcHAKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDEyIENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDEzIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdTVF9BUElfVkVSU0lPTl8xKQor
CisjaW5jbHVkZSAiQ2VudHJhbFBpcGVsaW5lVW5pdC5oIgorCisjaW5jbHVkZSAiR1N0cmVhbWVy
VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyVmVyc2lvbmluZy5oIgorI2luY2x1ZGUg
IlNvdXJjZUZhY3RvcnkuaCIKKworI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJraXRfbWVkaWFfc3RyZWFtX2RlYnVnKTsK
KyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF9tZWRpYV9zdHJlYW1fZGVidWcKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgZ2Jvb2xlYW4gbWVzc2FnZUNhbGxiYWNrKEdzdEJ1
cyosIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIENlbnRyYWxQaXBlbGluZVVuaXQqIGNwdSkKK3sKKyAg
ICByZXR1cm4gY3B1LT5oYW5kbGVNZXNzYWdlKG1lc3NhZ2UpOworfQorCitDZW50cmFsUGlwZWxp
bmVVbml0JiBDZW50cmFsUGlwZWxpbmVVbml0OjppbnN0YW5jZSgpCit7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENlbnRyYWxQaXBlbGluZVVu
aXQsIGluc3RhbmNlLCAoKSk7CisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCitDZW50cmFsUGlw
ZWxpbmVVbml0OjpDZW50cmFsUGlwZWxpbmVVbml0KCkKK3sKKyAgICBpbml0aWFsaXplR1N0cmVh
bWVyKCk7CisKKyAgICBtX3BpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldygibWVkaWFzdHJlYW1f
cGlwZWxpbmUiKTsKKyAgICBHUmVmUHRyPEdzdEJ1cz4gYnVzID0gd2Via2l0R3N0UGlwZWxpbmVH
ZXRCdXMoR1NUX1BJUEVMSU5FKG1fcGlwZWxpbmUuZ2V0KCkpKTsKKyAgICBpZiAoYnVzKSB7Cisg
ICAgICAgIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaChidXMuZ2V0KCkpOworICAgICAgICBnc3Rf
YnVzX3NldF9zeW5jX2hhbmRsZXIoYnVzLmdldCgpLCBnc3RfYnVzX3N5bmNfc2lnbmFsX2hhbmRs
ZXIsIDAsIDApOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGJ1cy5nZXQoKSwgInN5bmMtbWVz
c2FnZSIsIEdfQ0FMTEJBQ0sobWVzc2FnZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorICAgIGdz
dF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUExBWUlORyk7
Cit9CisKK0NlbnRyYWxQaXBlbGluZVVuaXQ6On5DZW50cmFsUGlwZWxpbmVVbml0KCkKK3sKKyAg
ICBHUmVmUHRyPEdzdEJ1cz4gYnVzID0gd2Via2l0R3N0UGlwZWxpbmVHZXRCdXMoR1NUX1BJUEVM
SU5FKG1fcGlwZWxpbmUuZ2V0KCkpKTsKKyAgICBpZiAoYnVzKQorICAgICAgICBnc3RfYnVzX3Jl
bW92ZV9zaWduYWxfd2F0Y2goYnVzLmdldCgpKTsKK30KKwordm9pZCBDZW50cmFsUGlwZWxpbmVV
bml0OjpyZWdpc3RlclNvdXJjZUZhY3RvcnkoU291cmNlRmFjdG9yeSogZmFjdG9yeSwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VJZCkKK3sKKyAgICBtX3NvdXJjZUZhY3RvcnlNYXAuYWRkKHNvdXJjZUlk
LCBmYWN0b3J5KTsKK30KKwordm9pZCBDZW50cmFsUGlwZWxpbmVVbml0OjpkZXJlZ2lzdGVyU291
cmNlRmFjdG9yeShjb25zdCBTdHJpbmcmIHNvdXJjZUlkKQoreworICAgIG1fc291cmNlRmFjdG9y
eU1hcC5yZW1vdmUoc291cmNlSWQpOworfQorCitnYm9vbGVhbiBDZW50cmFsUGlwZWxpbmVVbml0
OjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCit7CisgICAgR093blB0cjxHRXJy
b3I+IGVycm9yOworICAgIEdPd25QdHI8Z2NoYXI+IGRlYnVnOworCisgICAgc3dpdGNoIChHU1Rf
TUVTU0FHRV9UWVBFKG1lc3NhZ2UpKSB7CisgICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjogewor
ICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvcihtZXNzYWdlLCAmZXJyb3Iub3V0UHRyKCks
ICZkZWJ1Zy5vdXRQdHIoKSk7CisgICAgICAgIEVSUk9SX01FRElBX01FU1NBR0UoIk1lZGlhIGVy
cm9yOiAlZCwgJXMiLCBlcnJvci0+Y29kZSwgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICBHU1Rf
REVCVUdfQklOX1RPX0RPVF9GSUxFX1dJVEhfVFMoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwg
R1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMLCAid2Via2l0LW1lZGlhc3RyZWFtLmVycm9yIik7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikgJiYgZGVmaW5lZChH
U1RfQVBJX1ZFUlNJT05fMSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9DZW50cmFsUGlwZWxpbmVVbml0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5pdC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNTNkOTMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJh
bFBpcGVsaW5lVW5pdC5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDEyIENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDEzIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqLworCisKKyNpZm5kZWYgQ2VudHJhbFBpcGVsaW5lVW5pdF9oCisjZGVmaW5l
IENlbnRyYWxQaXBlbGluZVVuaXRfaAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNF
KEdTVFJFQU1FUikgJiYgZGVmaW5lZChHU1RfQVBJX1ZFUlNJT05fMSkKKworI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0dzdEVsZW1lbnQgR3N0
RWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9Hc3RNZXNzYWdlIEdzdE1lc3NhZ2U7Cit0eXBlZGVm
IHN0cnVjdCBfR3N0UGFkIEdzdFBhZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBT
b3VyY2VGYWN0b3J5OworCitjbGFzcyBDZW50cmFsUGlwZWxpbmVVbml0IHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShDZW50cmFsUGlwZWxpbmVVbml0KTsKK3Byb3RlY3RlZDoKKyAgICBDZW50
cmFsUGlwZWxpbmVVbml0KCk7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q2VudHJhbFBpcGVsaW5l
VW5pdCgpOworCisgICAgc3RhdGljIENlbnRyYWxQaXBlbGluZVVuaXQmIGluc3RhbmNlKCk7CisK
KyAgICBnYm9vbGVhbiBoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqKTsKKworICAgIHZvaWQgcmVn
aXN0ZXJTb3VyY2VGYWN0b3J5KFNvdXJjZUZhY3RvcnkqLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlk
KTsKKyAgICB2b2lkIGRlcmVnaXN0ZXJTb3VyY2VGYWN0b3J5KGNvbnN0IFN0cmluZyYgc291cmNl
SWQpOworCitwcml2YXRlOgorICAgIGNsYXNzIFNvdXJjZSB7CisgICAgcHVibGljOgorICAgICAg
ICBTb3VyY2UoKSA6IG1fc291cmNlRWxlbWVudCgwKSwgbV9zb3VyY2VQYWQoMCksIG1fc291cmNl
RmFjdG9yeSgwKSwgbV9yZW1vdmVXaGVuTm90VXNlZCh0cnVlKSB7IH0KKyAgICAgICAgU291cmNl
KEdSZWZQdHI8R3N0RWxlbWVudD4gc291cmNlRWxlbWVudCwgR1JlZlB0cjxHc3RQYWQ+IHNvdXJj
ZVBhZCwgU291cmNlRmFjdG9yeSogc291cmNlRmFjdG9yeSwgYm9vbCByZW1vdmVXaGVuTm90VXNl
ZCkgOiBtX3NvdXJjZUVsZW1lbnQoc291cmNlRWxlbWVudCksIG1fc291cmNlUGFkKHNvdXJjZVBh
ZCksIG1fc291cmNlRmFjdG9yeShzb3VyY2VGYWN0b3J5KSwgbV9yZW1vdmVXaGVuTm90VXNlZChy
ZW1vdmVXaGVuTm90VXNlZCkgeyB9CisKKyAgICAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3Nv
dXJjZUVsZW1lbnQ7CisgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBtX3NvdXJjZVBhZDsKKyAgICAg
ICAgU291cmNlRmFjdG9yeSogbV9zb3VyY2VGYWN0b3J5OworICAgICAgICBib29sIG1fcmVtb3Zl
V2hlbk5vdFVzZWQ7CisgICAgfTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFNvdXJj
ZT4gUGlwZWxpbmVNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBTb3Vy
Y2VJZExvb2t1cE1hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTb3VyY2VGYWN0b3J5
Kj4gU291cmNlRmFjdG9yeU1hcDsKKworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9waXBlbGlu
ZTsKKyAgICBQaXBlbGluZU1hcCBtX3BpcGVsaW5lTWFwOworICAgIFNvdXJjZUlkTG9va3VwTWFw
IG1fc291cmNlSWRMb29rdXBNYXA7CisgICAgU291cmNlRmFjdG9yeU1hcCBtX3NvdXJjZUZhY3Rv
cnlNYXA7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0Uo
R1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdTVF9BUElfVkVSU0lPTl8xKQorCisjZW5kaWYgLy8gQ2Vu
dHJhbFBpcGVsaW5lVW5pdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2Vu
dGVyR1N0cmVhbWVyLmNwcAppbmRleCAxNmE4NmE5Li5iZDY2OTE4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50
ZXJHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5jcHAKQEAgLTEsNiArMSw3IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsMTUgKzMyLDE1IEBACiAK
ICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikKIAogI2luY2x1ZGUgIk1lZGlhU3Ry
ZWFtQ2VudGVyR1N0cmVhbWVyLmgiCiAKKyNpbmNsdWRlICJNZWRpYVN0cmVhbUNlbnRlclByaXZh
dGVHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50LmgiCiAj
aW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1T
b3VyY2VDYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJjZS5oIgogI2lu
Y2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdENsaWVudC5oIgotI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNDgsMzMgKzQ5LDY5IEBAIE1lZGlhU3RyZWFtQ2VudGVyJiBNZWRp
YVN0cmVhbUNlbnRlcjo6cGxhdGZvcm1DZW50ZXIoKQogewogICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1l
ciwgY2VudGVyLCAoKSk7CisgICAgc3RhdGljIGJvb2wgcmVnaXN0ZXJlZCA9IGZhbHNlOworICAg
IGlmICghcmVnaXN0ZXJlZCkgeworICAgICAgICByZWdpc3RlcmVkID0gdHJ1ZTsKKyAgICAgICAg
TWVkaWFTdHJlYW1DZW50ZXI6OnNldFNoYXJlZFN0cmVhbUNlbnRlcigmY2VudGVyKTsKKyAgICB9
CiAgICAgcmV0dXJuIGNlbnRlcjsKIH0KIAogTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXI6Ok1l
ZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyKCkKIHsKKyAgICBtX3ByaXZhdGUgPSBNZWRpYVN0cmVh
bUNlbnRlclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZSgpOwogfQogCiBNZWRpYVN0cmVhbUNlbnRl
ckdTdHJlYW1lcjo6fk1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyKCkKIHsKIH0KIAotdm9pZCBN
ZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6dmFsaWRhdGVSZXF1ZXN0Q29uc3RyYWludHMoUGFz
c1JlZlB0cjxNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50PiwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0
cmFpbnRzPiwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPikKK3ZvaWQgTWVkaWFTdHJlYW1D
ZW50ZXJHU3RyZWFtZXI6OnZhbGlkYXRlUmVxdWVzdENvbnN0cmFpbnRzKFBhc3NSZWZQdHI8TWVk
aWFTdHJlYW1DcmVhdGlvbkNsaWVudD4gcHJwQ2xpZW50LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3Ry
YWludHM+IGF1ZGlvQ29uc3RyYWludHMsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gdmlk
ZW9Db25zdHJhaW50cykKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFJlZlB0cjxNZWRp
YVN0cmVhbUNyZWF0aW9uQ2xpZW50PiBjbGllbnQgPSBwcnBDbGllbnQ7CisgICAgQVNTRVJUKGNs
aWVudCk7CisgICAgLy8gVE9ETzogdmFsaWRhdGUgY29uc3RyYWludHMgd2l0aCBhdmFpbGFibGUg
ZGV2aWNlcy4KKyAgICBjbGllbnQtPmNvbnN0cmFpbnRzVmFsaWRhdGVkKCk7CiB9Ci0gICAgCi12
b2lkIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyOjpjcmVhdGVNZWRpYVN0cmVhbShQYXNzUmVm
UHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQ+LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWlu
dHM+LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+KQorCit2b2lkIE1lZGlhU3RyZWFtQ2Vu
dGVyR1N0cmVhbWVyOjpjcmVhdGVNZWRpYVN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3Jl
YXRpb25DbGllbnQ+IHBycFF1ZXJ5Q2xpZW50LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+
IGF1ZGlvQ29uc3RyYWludHMsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gdmlkZW9Db25z
dHJhaW50cykKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFJlZlB0cjxNZWRpYVN0cmVh
bUNyZWF0aW9uQ2xpZW50PiBjbGllbnQgPSBwcnBRdWVyeUNsaWVudDsKKyAgICBBU1NFUlQoY2xp
ZW50KTsKKworICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+PiBhdWRpb1NvdXJj
ZXM7CisgICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4+IHZpZGVvU291cmNlczsK
KworICAgIGlmIChhdWRpb0NvbnN0cmFpbnRzKSB7CisgICAgICAgIC8vIFRPRE86IHZlcmlmeSBj
b25zdHJhaW50cyBhY2NvcmRpbmcgdG8gcmVnaXN0ZXJlZAorICAgICAgICAvLyBzb3VyY2VzLiBG
b3Igbm93LCB1bmNvbmRpdGlvbmFsbHkgcGljayB0aGUgZmlyc3Qgc291cmNlLgorICAgICAgICBS
ZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IGF1ZGlvU291cmNlID0gbV9wcml2YXRlLT5maXJzdFNv
dXJjZShNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8pOworICAgICAgICBpZiAoYXVkaW9Tb3VyY2Up
IHsKKyAgICAgICAgICAgIGF1ZGlvU291cmNlLT5yZXNldCgpOworICAgICAgICAgICAgYXVkaW9T
b3VyY2UtPnNldFJlYWR5U3RhdGUoTWVkaWFTdHJlYW1Tb3VyY2U6OkxpdmUpOworICAgICAgICAg
ICAgYXVkaW9Tb3VyY2VzLmFwcGVuZChhdWRpb1NvdXJjZS5yZWxlYXNlKCkpOworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKHZpZGVvQ29uc3RyYWludHMpIHsKKyAgICAgICAgLy8gVE9ETzog
dmVyaWZ5IGNvbnN0cmFpbnRzIGFjY29yZGluZyB0byByZWdpc3RlcmVkCisgICAgICAgIC8vIHNv
dXJjZXMuIEZvciBub3csIHVuY29uZGl0aW9uYWxseSBwaWNrIHRoZSBmaXJzdCBzb3VyY2UuCisg
ICAgICAgIFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4gdmlkZW9Tb3VyY2UgPSBtX3ByaXZhdGUt
PmZpcnN0U291cmNlKE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbyk7CisgICAgICAgIGlmICh2aWRl
b1NvdXJjZSkgeworICAgICAgICAgICAgdmlkZW9Tb3VyY2UtPnJlc2V0KCk7CisgICAgICAgICAg
ICB2aWRlb1NvdXJjZS0+c2V0UmVhZHlTdGF0ZShNZWRpYVN0cmVhbVNvdXJjZTo6TGl2ZSk7Cisg
ICAgICAgICAgICB2aWRlb1NvdXJjZXMuYXBwZW5kKHZpZGVvU291cmNlLnJlbGVhc2UoKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBjbGllbnQtPmRpZENyZWF0ZVN0cmVhbShNZWRpYVN0cmVh
bURlc2NyaXB0b3I6OmNyZWF0ZShhdWRpb1NvdXJjZXMsIHZpZGVvU291cmNlcywgTWVkaWFTdHJl
YW1EZXNjcmlwdG9yOjpJc05vdEVuZGVkKSk7CiB9CiAKLWJvb2wgTWVkaWFTdHJlYW1DZW50ZXJH
U3RyZWFtZXI6OmdldE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzKFBhc3NSZWZQdHI8TWVkaWFTdHJl
YW1UcmFja1NvdXJjZXNSZXF1ZXN0Q2xpZW50PikKK2Jvb2wgTWVkaWFTdHJlYW1DZW50ZXJHU3Ry
ZWFtZXI6OmdldE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1U
cmFja1NvdXJjZXNSZXF1ZXN0Q2xpZW50PiBjbGllbnQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2Vu
ZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVB
TSkgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2Vu
dGVyR1N0cmVhbWVyLmgKaW5kZXggNGU0MzVlYy4uNDU4ODY4NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVy
R1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmgKQEAgLTEsNiArMSw3IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsMjAgKzMzLDE3IEBACiAjaWZuZGVm
IE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyX2gKICNkZWZpbmUgTWVkaWFTdHJlYW1DZW50ZXJH
U3RyZWFtZXJfaAogCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKQogCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1DZW50ZXIu
aCIKIAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgTWVkaWFTdHJlYW1EZXNj
cmlwdG9yOwotY2xhc3MgTWVkaWFTdHJlYW1Tb3VyY2U7Ci1jbGFzcyBNZWRpYVN0cmVhbVNvdXJj
ZXNRdWVyeUNsaWVudDsKK2NsYXNzIE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcjsK
IAotY2xhc3MgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIgOiBwdWJsaWMgTWVkaWFTdHJlYW1D
ZW50ZXIgeworY2xhc3MgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIgRklOQUwgOiBwdWJsaWMg
TWVkaWFTdHJlYW1DZW50ZXIgewogcHVibGljOgogICAgIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVh
bWVyKCk7CiAgICAgfk1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyKCk7CkBAIC01MywxMCArNTEs
MTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB2YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50
cyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQ+LCBQYXNzUmVmUHRyPE1lZGlh
Q29uc3RyYWludHM+IGF1ZGlvQ29uc3RyYWludHMsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50
cz4gdmlkZW9Db25zdHJhaW50cyk7CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZU1lZGlhU3RyZWFt
KFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudD4sIFBhc3NSZWZQdHI8TWVkaWFD
b25zdHJhaW50cz4gYXVkaW9Db25zdHJhaW50cywgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRz
PiB2aWRlb0NvbnN0cmFpbnRzKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0TWVkaWFTdHJlYW1UcmFj
a1NvdXJjZXMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrU291cmNlc1JlcXVlc3RDbGllbnQ+
KSBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICBPd25QdHI8TWVkaWFTdHJlYW1DZW50ZXJQcml2
YXRlR1N0cmVhbWVyPiBtX3ByaXZhdGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
LSNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorI2VuZGlmIC8vIEVOQUJMRShNRURJQV9T
VFJFQU0pICYmIFVTRShHU1RSRUFNRVIpCiAKICNlbmRpZiAvLyBNZWRpYVN0cmVhbUNlbnRlckdT
dHJlYW1lcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRl
clByaXZhdGVHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjU5MjFhMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApA
QCAtMCwwICsxLDE0MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgQ29sbGFib3JhIEx0
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMu
TC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShH
U1RSRUFNRVIpICYmIGRlZmluZWQoR1NUX0FQSV9WRVJTSU9OXzEpCisKKyNpbmNsdWRlICJNZWRp
YVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgIkNlbnRyYWxQaXBl
bGluZVVuaXQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJVdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDxn
c3QvZ3N0Lmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZKHdlYmtpdF9tZWRpYV9zdHJl
YW1fZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X21lZGlhX3N0cmVhbV9k
ZWJ1ZworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBHUmVmUHRyPEdzdEVsZW1lbnQ+
IGZpbmREZXZpY2VTb3VyY2UoY29uc3QgY2hhciogZWxlbWVudE5hbWUpCit7CisgICAgR1JlZlB0
cjxHc3RFbGVtZW50PiBkZXZpY2VTcmM7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBhdXRvU3Jj
ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKGVsZW1lbnROYW1lLCAwKTsKKyAgICBpZiAoIWF1
dG9TcmMpCisgICAgICAgIHJldHVybiBkZXZpY2VTcmM7CisKKyAgICBHc3RDaGlsZFByb3h5KiBj
aGlsZFByb3h5ID0gR1NUX0NISUxEX1BST1hZKGF1dG9TcmMuZ2V0KCkpOworICAgIGlmICghY2hp
bGRQcm94eSkKKyAgICAgICAgcmV0dXJuIGRldmljZVNyYzsKKworICAgIEdzdFN0YXRlQ2hhbmdl
UmV0dXJuIHN0YXRlQ2hhbmdlUmVzdWx0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKGF1dG9TcmMu
Z2V0KCksIEdTVF9TVEFURV9SRUFEWSk7CisgICAgaWYgKHN0YXRlQ2hhbmdlUmVzdWx0ICE9IEdT
VF9TVEFURV9DSEFOR0VfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIGRldmljZVNyYzsKKworICAg
IGlmIChnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkcmVuX2NvdW50KGNoaWxkUHJveHkpKQorICAg
ICAgICBkZXZpY2VTcmMgPSBhZG9wdEdSZWYoR1NUX0VMRU1FTlQoZ3N0X2NoaWxkX3Byb3h5X2dl
dF9jaGlsZF9ieV9pbmRleChjaGlsZFByb3h5LCAwKSkpOworCisgICAgZ3N0X2VsZW1lbnRfc2V0
X3N0YXRlKGF1dG9TcmMuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKKyAgICByZXR1cm4gZGV2aWNl
U3JjOworfQorCitzdGF0aWMgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlR1N0cmVhbWVyPiBwcm9i
ZVNvdXJjZShHc3RFbGVtZW50KiBzb3VyY2UsIE1lZGlhU3RyZWFtU291cmNlOjpUeXBlIHR5cGUp
Cit7CisgICAgLy8gRklYTUU6IGdzdHJlYW1lciAxLjAgZG9lc24ndCBoYXZlIGFuIGVxdWl2YWxl
bnQgdG8gR3N0UHJvcGVydHlQcm9iZSwKKyAgICAvLyBzbyB3ZSBkb24ndCBzdXBwb3J0IGNob29z
aW5nIGEgcGFydGljdWxhciBkZXZpY2UgeWV0LgorICAgIC8vIHNlZSBodHRwczovL2J1Z3ppbGxh
Lmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc4NDAyCisKKyAgICBHc3RFbGVtZW50RmFjdG9y
eSogZWxlbWVudEZhY3RvcnkgPSBnc3RfZWxlbWVudF9nZXRfZmFjdG9yeShzb3VyY2UpOworICAg
IEdPd25QdHI8Z2NoYXI+IGZhY3RvcnlOYW1lKGdzdF9lbGVtZW50X2dldF9uYW1lKGVsZW1lbnRG
YWN0b3J5KSk7CisgICAgU3RyaW5nIHN0ckZhY3RvcnlOYW1lKGZhY3RvcnlOYW1lLmdldCgpKTsK
KworICAgIFN0cmluZyBkZXZpY2VJZCA9IHN0ckZhY3RvcnlOYW1lOworICAgIGRldmljZUlkLmFw
cGVuZCgiO2RlZmF1bHQiKTsKKworICAgIEdPd25QdHI8Z2NoYXI+IGRldmljZU5hbWU7CisgICAg
Z19vYmplY3RfZ2V0KHNvdXJjZSwgImRldmljZS1uYW1lIiwgJmRldmljZU5hbWUub3V0UHRyKCks
IE5VTEwpOworCisgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlR1N0cmVhbWVyPiBtZWRpYVN0
cmVhbVNvdXJjZSA9IGFkb3B0UmVmKG5ldyBNZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lcihkZXZp
Y2VJZCwgZGV2aWNlTmFtZS5nZXQoKSwgdHlwZSwgImRlZmF1bHQiLCBzdHJGYWN0b3J5TmFtZSkp
OworCisgICAgLy8gVE9ETzogZmlsbCBzb3VyY2UgY2FwYWJpbGl0aWVzIGFuZCBzdGF0ZXMuCisK
KyAgICByZXR1cm4gbWVkaWFTdHJlYW1Tb3VyY2U7Cit9CisKK01lZGlhU3RyZWFtQ2VudGVyUHJp
dmF0ZUdTdHJlYW1lcjo6TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyKCkKK3sKKyAg
ICBpbml0aWFsaXplR1N0cmVhbWVyKCk7CisKKyAgICBzdGF0aWMgYm9vbCBkZWJ1Z0NhdGVnb3J5
UmVnaXN0ZXJlZCA9IGZhbHNlOworICAgIGlmICghZGVidWdDYXRlZ29yeVJlZ2lzdGVyZWQpIHsK
KyAgICAgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X21lZGlhX3N0cmVhbV9kZWJ1
ZywgIndlYmtpdG1lZGlhc3RyZWFtIiwgMCwgIldlYktpdCBtZWRpYXN0cmVhbSIpOworICAgICAg
ICBkZWJ1Z0NhdGVnb3J5UmVnaXN0ZXJlZCA9IHRydWU7CisgICAgfQorCisgICAgTE9HX01FRElB
X01FU1NBR0UoIkRpc2NvdmVyaW5nIG1lZGlhIHNvdXJjZSBkZXZpY2VzIik7CisgICAgZGlzY292
ZXJEZXZpY2VzKE1lZGlhU3RyZWFtU291cmNlOjpBdWRpbyk7CisgICAgZGlzY292ZXJEZXZpY2Vz
KE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbyk7Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1DZW50ZXJQ
cml2YXRlR1N0cmVhbWVyOjpkaXNjb3ZlckRldmljZXMoTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGUg
dHlwZSkKK3sKKyAgICBjb25zdCBjaGFyKiBlbGVtZW50TmFtZTsKKyAgICBpZiAodHlwZSA9PSBN
ZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8pCisgICAgICAgIGVsZW1lbnROYW1lID0gImF1dG9hdWRp
b3NyYyI7CisgICAgZWxzZSBpZiAodHlwZSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6VmlkZW8pCisg
ICAgICAgIGVsZW1lbnROYW1lID0gImF1dG92aWRlb3NyYyI7CisgICAgZWxzZQorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gZGV2aWNlU291
cmNlID0gZmluZERldmljZVNvdXJjZShlbGVtZW50TmFtZSk7CisgICAgaWYgKCFkZXZpY2VTb3Vy
Y2UpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZUdTdHJl
YW1lcj4gc291cmNlID0gcHJvYmVTb3VyY2UoZGV2aWNlU291cmNlLmdldCgpLCB0eXBlKTsKKyAg
ICBTdHJpbmcgaWQgPSBzb3VyY2UtPmlkKCk7CisKKyAgICBNZWRpYVN0cmVhbVNvdXJjZUdTdHJl
YW1lck1hcDo6aXRlcmF0b3Igc291cmNlSXRlcmF0b3IgPSBtX3NvdXJjZU1hcC5maW5kKGlkKTsK
KyAgICBpZiAoc291cmNlSXRlcmF0b3IgPT0gbV9zb3VyY2VNYXAuZW5kKCkpCisgICAgICAgIG1f
c291cmNlTWFwLmFkZChpZCwgc291cmNlKTsKKworICAgIExPR19NRURJQV9NRVNTQUdFKCJSZWdp
c3RlcmluZyBzb3VyY2UgZmFjdG9yeSBmb3Igc291cmNlIHdpdGggaWQ9JXMiLCBpZC5hc2NpaSgp
LmRhdGEoKSk7CisgICAgQ2VudHJhbFBpcGVsaW5lVW5pdCYgY3B1ID0gQ2VudHJhbFBpcGVsaW5l
VW5pdDo6aW5zdGFuY2UoKTsKKyAgICBjcHUucmVnaXN0ZXJTb3VyY2VGYWN0b3J5KHRoaXMsIGlk
KTsKK30KKworR1JlZlB0cjxHc3RFbGVtZW50PiBNZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3Ry
ZWFtZXI6OmNyZWF0ZVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlkLCBHUmVmUHRyPEdzdFBh
ZD4mIHNyY1BhZCkKK3sKKyAgICAvLyBUT0RPOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gMDsKK30K
KworUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4gTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRl
R1N0cmVhbWVyOjpmaXJzdFNvdXJjZShNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZSB0eXBlKQorewor
ICAgIGZvciAoYXV0byBpdGVyID0gbV9zb3VyY2VNYXAuYmVnaW4oKTsgaXRlciAhPSBtX3NvdXJj
ZU1hcC5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4g
c291cmNlID0gaXRlci0+dmFsdWU7CisgICAgICAgIGlmIChzb3VyY2UtPnR5cGUoKSA9PSB0eXBl
KQorICAgICAgICAgICAgcmV0dXJuIHNvdXJjZTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVB
TSkgJiYgVVNFKEdTVFJFQU1FUikgJiYgZGVmaW5lZChHU1RfQVBJX1ZFUlNJT05fMSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRp
YVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2I5OTE4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01l
ZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisg
KiAgQ29weXJpZ2h0IChDKSAyMDEyIENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisKKyNpZm5kZWYgTWVkaWFTdHJlYW1D
ZW50ZXJQcml2YXRlR1N0cmVhbWVyX2gKKyNkZWZpbmUgTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRl
R1N0cmVhbWVyX2gKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIp
ICYmIGRlZmluZWQoR1NUX0FQSV9WRVJTSU9OXzEpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVh
bWVyLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1Tb3VyY2UuaCIKKyNpbmNsdWRlICJTb3VyY2VG
YWN0b3J5LmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIE1lZGlhU3RyZWFtU291cmNlQ2FwYWJpbGl0aWVzOworCitjbGFzcyBNZWRpYVN0
cmVhbVNvdXJjZUdTdHJlYW1lciBGSU5BTCA6IHB1YmxpYyBNZWRpYVN0cmVhbVNvdXJjZSB7Citw
dWJsaWM6CitNZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lcihjb25zdCBBdG9taWNTdHJpbmcmIGlk
LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIE1lZGlhU3RyZWFtU291cmNlOjpUeXBlIHR5cGUs
IGNvbnN0IFN0cmluZyYgZGV2aWNlLCBjb25zdCBTdHJpbmcmIGZhY3RvcnlLZXkpCisgICAgOiBN
ZWRpYVN0cmVhbVNvdXJjZShpZCwgdHlwZSwgbmFtZSkKKyAgICAsIG1fZmFjdG9yeUtleShmYWN0
b3J5S2V5KQorICAgICwgbV9kZXZpY2UoZGV2aWNlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIH5NZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lcigpIHsgfQorCisgICAgdmlydHVhbCBSZWZQ
dHI8TWVkaWFTdHJlYW1Tb3VyY2VDYXBhYmlsaXRpZXM+IGNhcGFiaWxpdGllcygpIGNvbnN0IHsg
cmV0dXJuIG1fY2FwYWJpbGl0aWVzOyB9CisgICAgdmlydHVhbCBjb25zdCBNZWRpYVN0cmVhbVNv
dXJjZVN0YXRlcyYgc3RhdGVzKCkgeyByZXR1cm4gbV9jdXJyZW50U3RhdGVzOyB9CisKKyAgICBj
b25zdCBTdHJpbmcmIGZhY3RvcnlLZXkoKSBjb25zdCB7IHJldHVybiBtX2ZhY3RvcnlLZXk7IH0K
KyAgICBjb25zdCBTdHJpbmcmIGRldmljZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNlOyB9CisK
K3ByaXZhdGU6CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlQ2FwYWJpbGl0aWVzPiBtX2Nh
cGFiaWxpdGllczsKKyAgICBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcyBtX2N1cnJlbnRTdGF0ZXM7
CisKKyAgICBTdHJpbmcgbV9mYWN0b3J5S2V5OworICAgIFN0cmluZyBtX2RldmljZTsKK307CisK
K3R5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1l
cj4+IE1lZGlhU3RyZWFtU291cmNlR1N0cmVhbWVyTWFwOworCisKK2NsYXNzIE1lZGlhU3RyZWFt
Q2VudGVyUHJpdmF0ZUdTdHJlYW1lciBGSU5BTCA6IHByaXZhdGUgU291cmNlRmFjdG9yeSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0
cmVhbWVyPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBNZWRp
YVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIoKSk7CisgICAgfQorCisgICAgTWVkaWFTdHJl
YW1Tb3VyY2VHU3RyZWFtZXJNYXAmIHNvdXJjZU1hcCgpIHsgcmV0dXJuIG1fc291cmNlTWFwOyB9
CisKKyAgICBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBmaXJzdFNvdXJjZShNZWRpYVN0
cmVhbVNvdXJjZTo6VHlwZSk7CisKK3ByaXZhdGU6CisgICAgTWVkaWFTdHJlYW1DZW50ZXJQcml2
YXRlR1N0cmVhbWVyKCk7CisKKyAgICB2b2lkIGRpc2NvdmVyRGV2aWNlcyhNZWRpYVN0cmVhbVNv
dXJjZTo6VHlwZSk7CisKKyAgICAvLyBTb3VyY2VGYWN0b3J5CisgICAgR1JlZlB0cjxHc3RFbGVt
ZW50PiBjcmVhdGVTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJZCwgR1JlZlB0cjxHc3RQYWQ+
JiBzcmNQYWQpOworCisgICAgTWVkaWFTdHJlYW1Tb3VyY2VHU3RyZWFtZXJNYXAgbV9zb3VyY2VN
YXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVE
SUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdTVF9BUElfVkVSU0lPTl8x
KQorCisjZW5kaWYgLy8gTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Tb3Vy
Y2VGYWN0b3J5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvU291cmNlRmFjdG9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5
NWRmMGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvU291cmNlRmFjdG9yeS5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiAg
Q29weXJpZ2h0IChDKSAyMDEyIENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIFNvdXJjZUZhY3RvcnlfaAor
I2RlZmluZSBTb3VyY2VGYWN0b3J5X2gKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVT
RShHU1RSRUFNRVIpCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3
dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K3R5cGVkZWYgc3RydWN0IF9Hc3RQYWQgR3N0UGFkOwordHlwZWRlZiBzdHJ1Y3QgX0dzdEVsZW1l
bnQgR3N0RWxlbWVudDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTb3VyY2VGYWN0
b3J5IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTb3VyY2VGYWN0b3J5KTsKK3B1YmxpYzoK
KyAgICBTb3VyY2VGYWN0b3J5KCkgeyB9CisgICAgdmlydHVhbCBHUmVmUHRyPEdzdEVsZW1lbnQ+
IGNyZWF0ZVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlkLCBHUmVmUHRyPEdzdFBhZD4mIHNy
Y1BhZCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+U291cmNlRmFjdG9yeSgpIHsg
fQorfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFRChNRURJQV9TVFJFQU0pICYmIFVTRShHU1RS
RUFNRVIpCisKKyNlbmRpZiAvLyBTb3VyY2VGYWN0b3J5X2gKLS0gCjEuOC40LnJjMw==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215186</attachid>
            <date>2013-10-25 09:45:32 -0700</date>
            <delta_ts>2013-10-30 08:58:16 -0700</delta_ts>
            <desc>MediaStreamCenter and minimal CentralPipelineUnit</desc>
            <filename>MediaStreamCenter-and-minimal-CentralPipelineUnit.patch</filename>
            <type>text/plain</type>
            <size>30336</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSAwZDg1NTIxMzhjNzQ2ZTk2ODZjODkyYTAzNTgwNTA4ODliZWM2NjM5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUaHUsIDE3IE9jdCAyMDEzIDE3OjM0OjQzICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
TWVkaWFTdHJlYW1DZW50ZXIgYW5kIG1pbmltYWwgQ2VudHJhbFBpcGVsaW5lVW5pdAoKLS0tCiBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2NSAr
KysrKysrKysrCiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtICAgICAgICAgICAg
ICAgICB8ICAgNSArCiAuLi4vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0NlbnRyYWxQaXBlbGluZVVu
aXQuY3BwICB8IDEwMyArKysrKysrKysrKysrKysKIC4uLi9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
Q2VudHJhbFBpcGVsaW5lVW5pdC5oICAgIHwgIDc4ICsrKysrKysrKysrCiAuLi4vZ3N0cmVhbWVy
L01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmNwcCAgICAgICB8ICA1NCArKysrKystLQogLi4u
L2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5oICAgICAgICAgfCAgMTUgKyst
CiAuLi4vTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCAgICAgICAgICB8IDE0
MiArKysrKysrKysrKysrKysrKysrKysKIC4uLi9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJQ
cml2YXRlR1N0cmVhbWVyLmggIHwgIDkyICsrKysrKysrKysrKysKIC4uLi9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvU291cmNlRmFjdG9yeS5oIHwgIDQ4ICsrKysrKysKIDkgZmlsZXMg
Y2hhbmdlZCwgNTg0IGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9DZW50
cmFsUGlwZWxpbmVVbml0LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9DZW50cmFsUGlwZWxpbmVVbml0LmgKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAogY3JlYXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0
cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Tb3VyY2VGYWN0b3J5LmgKCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggZmMzYzIyYy4uOGE1NGY1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBA
CisyMDEzLTEwLTE3ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKwor
ICAgICAgICBbR1N0cmVhbWVyXSBiYXNpYyBNZWRpYVN0cmVhbUNlbnRlciBhbmQgQ2VudHJhbFBp
cGVsaW5lVW5pdCBpbXBsZW1lbnRhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExMDE1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoaXMgdmVyeSBiYXNpYyBNZWRpYVN0cmVhbUNlbnRlciBpcyBh
YmxlIHRvIGRldGVjdCB0aGUgYXVkaW8gYW5kCisgICAgICAgIHZpZGVvIHNvdXJjZSBkZXZpY2Vz
IGFuZCBtYWtlIHRoZW0gYXZhaWxhYmxlIHRvIHRoZSB3ZWIgcGFnZSB2aWEKKyAgICAgICAgdGhl
IGdldFVzZXJNZWRpYSBBUEkuIFBsYXliYWNrIHN1cHBvcnQgdmlhIGEgZGVkaWNhdGVkCisgICAg
ICAgIE1lZGlhUGxheWVyUHJpdmF0ZSBiYWNrZW5kIHdpbGwgYmUgcHJvdmlkZWQgaW4gYSBmb2xs
b3ctdXAgcGF0Y2guCisKKyAgICAgICAgVGhlIE1lZGlhU3RyZWFtQ2VudGVyIGltcGxlbWVudGF0
aW9uIGlzIGNvbnRhaW5lZCBpbiB0aGUKKyAgICAgICAgTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRl
R1N0cmVhbWVyLiBUaGUgQ2VudHJhbFBpcGVsaW5lVW5pdCBpcworICAgICAgICBtYW5hZ2luZyB0
aGUgcGlwZWxpbmUgdXNlZCBmb3IgYXVkaW8vdmlkZW8gY2FwdHVyZSBhbmQKKyAgICAgICAgcmVu
ZGVyaW5nLiBJdCBpcyB1c2VkIGJ5IHRoZSBNZWRpYVN0cmVhbUNlbnRlciB0byAodW4pcmVnaXN0
ZXIKKyAgICAgICAgc291cmNlcyBhbmQgbGF0ZXIgb24gaXQgd2lsbCBiZSB1c2VkIGJ5IHRoZSBN
ZWRpYVBsYXllciB0byBtYW5hZ2UKKyAgICAgICAgdGhlIHJlbmRlcmluZy4KKworICAgICAgICBQ
YXRjaCBiYXNlZCBvbiB3b3JrIHByZXZpb3VzbHkgZG9uZSBieSBKb25hdGhvbiBKb25nc21hIDxq
b25hdGhvbi5qb25nc21hQGNvbGxhYm9yYS5jb20+LgorCisgICAgICAgICogR05VbWFrZWZpbGUu
bGlzdC5hbTogQWRkaW5nIG5ldyBmaWxlcyB0byB0aGUgYnVpbGQuCisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0NlbnRyYWxQaXBlbGluZVVuaXQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6Om1lc3NhZ2VDYWxsYmFjayk6IEZ1bmN0aW9uIGNhbGxlZCBldmVy
eSB0aW1lIGEgbWVzc2FnZQorICAgICAgICBmcm9tIHRoZSBHU3RyZWFtZXIgYnVzIG5lZWRzIHRv
IGJlIHByb2Nlc3NlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNlbnRyYWxQaXBlbGluZVVuaXQ6Omlu
c3RhbmNlKTogVXRpbGl0eSBmdW5jdGlvbiB0bworICAgICAgICBhY2Nlc3MgdGhlIENlbnRyYWxQ
aXBlbGluZVVuaXQgc2luZ2xldG9uLgorICAgICAgICAoV2ViQ29yZTo6Q2VudHJhbFBpcGVsaW5l
VW5pdDo6Q2VudHJhbFBpcGVsaW5lVW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpDZW50cmFsUGlw
ZWxpbmVVbml0Ojp+Q2VudHJhbFBpcGVsaW5lVW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpDZW50
cmFsUGlwZWxpbmVVbml0OjpyZWdpc3RlclNvdXJjZUZhY3RvcnkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2VudHJhbFBpcGVsaW5lVW5pdDo6ZGVyZWdpc3RlclNvdXJjZUZhY3RvcnkpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2VudHJhbFBpcGVsaW5lVW5pdDo6aGFuZGxlTWVzc2FnZSk6IEdzdE1lc3Nh
Z2UKKyAgICAgICAgaGFuZGxlci4gRm9yIG5vdyBvbmx5IHByb2Nlc3MgZXJyb3IgbWVzc2FnZXMu
CisgICAgICAgIChXZWJDb3JlOjpDZW50cmFsUGlwZWxpbmVVbml0OjpwaXBlbGluZSk6IFB1Ymxp
YyBwaXBlbGluZSBhY2Nlc3Nvci4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5pdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNl
bnRyYWxQaXBlbGluZVVuaXQ6OlNvdXJjZTo6U291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1DZW50ZXI6OnBsYXRmb3JtQ2VudGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyOjpNZWRpYVN0cmVhbUNlbnRl
ckdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1l
cjo6dmFsaWRhdGVSZXF1ZXN0Q29uc3RyYWludHMpOgorICAgICAgICBGb3Igbm93IHZhbGlkYXRl
IHVuY2hlY2tlZCBhdWRpby92aWRlbyBjb25zdHJhaW50cy4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyOjpjcmVhdGVNZWRpYVN0cmVhbSk6IENyZWF0ZSBhCisg
ICAgICAgIG1lZGlhc3RyZWFtIHVzaW5nIHRoZSBmaXJzdCBhdWRpbyBhbmQgdmlkZW8gZGV2aWNl
IGF2YWlsYWJsZS4gVGhpcworICAgICAgICB3aWxsIGJlIGltcHJvdmVkIHdoZW4gY29uc3RyYWlu
dHMgdmFsaWRhdGlvbiBpcyBpbXBsZW1lbnRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3Ry
ZWFtQ2VudGVyR1N0cmVhbWVyOjpnZXRNZWRpYVN0cmVhbVRyYWNrU291cmNlcyk6CisgICAgICAg
IERvIG5vdGhpbmcsIHRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2VlbSB1c2VkLgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5o
OgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNl
bnRlclByaXZhdGVHU3RyZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZpbmRE
ZXZpY2VTb3VyY2UpOiBUaGUgYXV0b3thdWRpbyx2aWRlb31zcmMgZWxlbWVudHMgYXJlCisgICAg
ICAgIHdyYXBwZXJzIGFyb3VuZCB0aGUgcmVhbCBzcmMgZWxlbWVudHMuIFRoaXMgZnVuY3Rpb24g
ZmluZHMgdGhlbSBvdXQuCisgICAgICAgIChXZWJDb3JlOjpwcm9iZVNvdXJjZSk6IEluc3BlY3Qg
YSBzb3VyY2UgZWxlbWVudCAoaW5jb21wbGV0ZWx5IGZvcgorICAgICAgICBub3cpIGFuZCByZWdp
c3RlciBpdCBhcyBhIG5ldyBNZWRpYVN0cmVhbVNvdXJjZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcjo6TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRl
R1N0cmVhbWVyKToKKyAgICAgICAgRGlzY292ZXIgbG9jYWwgYXVkaW8vdmlkZW8gZGV2aWNlcyBh
bmQgcmVnaXN0ZXIgdGhlbSBpbiB0aGUgQ2VudHJhbFBpcGVsaW5lVW5pdC4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlU291cmNlKToK
KyAgICAgICAgVW5pbXBsZW1lbnRlZCBtZXRob2QsIHdpbGwgYmUgdXNlZCBieSB0aGUgQ2VudHJh
bFBpcGVsaW5lVW5pdCB0bworICAgICAgICBjcmVhdGUgYSBsaXZlIGF1ZGlvL3ZpZGVvIHNvdXJj
ZSBvbi1kZW1hbmQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUNlbnRlclByaXZhdGVH
U3RyZWFtZXI6OmZpcnN0U291cmNlKTogRmluZAorICAgICAgICB0aGUgZmlyc3QgcmVnaXN0ZXJl
ZCBzb3VyY2Ugb2YgdGhlIGdpdmVuIHR5cGUuIFRoaXMgY29udmVuaWVuY2UKKyAgICAgICAgbWV0
aG9kIHdpbGwgYmUgcmVtb3ZlZCBvbmNlIG1lZGlhIGNvbnN0cmFpbnRzIGNoZWNraW5nIGhhcyBi
ZWVuIGltcGxlbWVudGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9NZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIuaDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1NvdXJjZUZhY3RvcnkuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VGYWN0b3J5OjpTb3VyY2VGYWN0b3J5KToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUZhY3Rvcnk6On5Tb3VyY2VGYWN0b3J5KToKKwogMjAxMy0xMC0yNSAg
QW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgRmFzdGVyIHdheSBm
b3Igc2ltcGxlIGxpbmUgbGF5b3V0IHRvIGNoZWNrIGlmIHRleHQgaGFzIGZhbGxiYWNrIGZvbnRz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAzN2U0MmZmLi4yMjk0OTQ4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU0MDksOCArNTQwOSwxMyBAQCB3ZWJjb3Jl
X3BsYXRmb3JtX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3IuaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vUlRDU3RhdHNSZXF1ZXN0LmggXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL1JUQ1ZvaWRSZXF1ZXN0LmggXAorCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9DZW50cmFsUGlwZWxpbmVVbml0LmggXAor
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9DZW50cmFsUGlw
ZWxpbmVVbml0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVy
LmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRp
YVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1l
ci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9T
b3VyY2VGYWN0b3J5LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svRGV2aWNlTW90
aW9uQ2xpZW50TW9jay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svRGV2aWNl
TW90aW9uQ2xpZW50TW9jay5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL0Rldmlj
ZU9yaWVudGF0aW9uQ2xpZW50TW9jay5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0NlbnRyYWxQaXBlbGluZVVuaXQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0NlbnRyYWxQaXBl
bGluZVVuaXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NWU4YTkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5pdC5jcHAKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisg
KiAgQ29weXJpZ2h0IChDKSAyMDEyIENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdT
VF9BUElfVkVSU0lPTl8xKQorCisjaW5jbHVkZSAiQ2VudHJhbFBpcGVsaW5lVW5pdC5oIgorCisj
aW5jbHVkZSAiR1N0cmVhbWVyVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyVmVyc2lv
bmluZy5oIgorI2luY2x1ZGUgIlNvdXJjZUZhY3RvcnkuaCIKKworI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJraXRfbWVk
aWFfc3RyZWFtX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF9tZWRpYV9z
dHJlYW1fZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgZ2Jvb2xlYW4gbWVz
c2FnZUNhbGxiYWNrKEdzdEJ1cyosIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIENlbnRyYWxQaXBlbGlu
ZVVuaXQqIGNwdSkKK3sKKyAgICByZXR1cm4gY3B1LT5oYW5kbGVNZXNzYWdlKG1lc3NhZ2UpOwor
fQorCitDZW50cmFsUGlwZWxpbmVVbml0JiBDZW50cmFsUGlwZWxpbmVVbml0OjppbnN0YW5jZSgp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KENlbnRyYWxQaXBlbGluZVVuaXQsIGluc3RhbmNlLCAoKSk7CisgICAgcmV0dXJuIGluc3RhbmNl
OworfQorCitDZW50cmFsUGlwZWxpbmVVbml0OjpDZW50cmFsUGlwZWxpbmVVbml0KCkKK3sKKyAg
ICBpbml0aWFsaXplR1N0cmVhbWVyKCk7CisKKyAgICBtX3BpcGVsaW5lID0gZ3N0X3BpcGVsaW5l
X25ldygibWVkaWFzdHJlYW1fcGlwZWxpbmUiKTsKKyAgICBHUmVmUHRyPEdzdEJ1cz4gYnVzID0g
d2Via2l0R3N0UGlwZWxpbmVHZXRCdXMoR1NUX1BJUEVMSU5FKG1fcGlwZWxpbmUuZ2V0KCkpKTsK
KyAgICBpZiAoYnVzKSB7CisgICAgICAgIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaChidXMuZ2V0
KCkpOworICAgICAgICBnc3RfYnVzX3NldF9zeW5jX2hhbmRsZXIoYnVzLmdldCgpLCBnc3RfYnVz
X3N5bmNfc2lnbmFsX2hhbmRsZXIsIDAsIDApOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGJ1
cy5nZXQoKSwgInN5bmMtbWVzc2FnZSIsIEdfQ0FMTEJBQ0sobWVzc2FnZUNhbGxiYWNrKSwgdGhp
cyk7CisgICAgfQorICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBH
U1RfU1RBVEVfUExBWUlORyk7Cit9CisKK0NlbnRyYWxQaXBlbGluZVVuaXQ6On5DZW50cmFsUGlw
ZWxpbmVVbml0KCkKK3sKKyAgICBHUmVmUHRyPEdzdEJ1cz4gYnVzID0gd2Via2l0R3N0UGlwZWxp
bmVHZXRCdXMoR1NUX1BJUEVMSU5FKG1fcGlwZWxpbmUuZ2V0KCkpKTsKKyAgICBpZiAoYnVzKQor
ICAgICAgICBnc3RfYnVzX3JlbW92ZV9zaWduYWxfd2F0Y2goYnVzLmdldCgpKTsKK30KKwordm9p
ZCBDZW50cmFsUGlwZWxpbmVVbml0OjpyZWdpc3RlclNvdXJjZUZhY3RvcnkoU291cmNlRmFjdG9y
eSogZmFjdG9yeSwgY29uc3QgU3RyaW5nJiBzb3VyY2VJZCkKK3sKKyAgICBtX3NvdXJjZUZhY3Rv
cnlNYXAuYWRkKHNvdXJjZUlkLCBmYWN0b3J5KTsKK30KKwordm9pZCBDZW50cmFsUGlwZWxpbmVV
bml0OjpkZXJlZ2lzdGVyU291cmNlRmFjdG9yeShjb25zdCBTdHJpbmcmIHNvdXJjZUlkKQorewor
ICAgIG1fc291cmNlRmFjdG9yeU1hcC5yZW1vdmUoc291cmNlSWQpOworfQorCitnYm9vbGVhbiBD
ZW50cmFsUGlwZWxpbmVVbml0OjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCit7
CisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIEdPd25QdHI8Z2NoYXI+IGRlYnVnOwor
CisgICAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpKSB7CisgICAgY2FzZSBHU1Rf
TUVTU0FHRV9FUlJPUjogeworICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvcihtZXNzYWdl
LCAmZXJyb3Iub3V0UHRyKCksICZkZWJ1Zy5vdXRQdHIoKSk7CisgICAgICAgIEVSUk9SX01FRElB
X01FU1NBR0UoIk1lZGlhIGVycm9yOiAlZCwgJXMiLCBlcnJvci0+Y29kZSwgZXJyb3ItPm1lc3Nh
Z2UpOworICAgICAgICBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFX1dJVEhfVFMoR1NUX0JJTiht
X3BpcGVsaW5lLmdldCgpKSwgR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMLCAid2Via2l0LW1lZGlh
c3RyZWFtLmVycm9yIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJF
QU1FUikgJiYgZGVmaW5lZChHU1RfQVBJX1ZFUlNJT05fMSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9DZW50cmFsUGlwZWxpbmVVbml0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJh
bFBpcGVsaW5lVW5pdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNTNk
OTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5pdC5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisg
KiAgQ29weXJpZ2h0IChDKSAyMDEyIENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisKKyNpZm5kZWYgQ2VudHJhbFBpcGVs
aW5lVW5pdF9oCisjZGVmaW5lIENlbnRyYWxQaXBlbGluZVVuaXRfaAorCisjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikgJiYgZGVmaW5lZChHU1RfQVBJX1ZFUlNJT05f
MSkKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKwordHlwZWRlZiBzdHJ1
Y3QgX0dzdEVsZW1lbnQgR3N0RWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9Hc3RNZXNzYWdlIEdz
dE1lc3NhZ2U7Cit0eXBlZGVmIHN0cnVjdCBfR3N0UGFkIEdzdFBhZDsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBTb3VyY2VGYWN0b3J5OworCitjbGFzcyBDZW50cmFsUGlwZWxpbmVV
bml0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDZW50cmFsUGlwZWxpbmVVbml0KTsKK3By
b3RlY3RlZDoKKyAgICBDZW50cmFsUGlwZWxpbmVVbml0KCk7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+Q2VudHJhbFBpcGVsaW5lVW5pdCgpOworCisgICAgc3RhdGljIENlbnRyYWxQaXBlbGluZVVu
aXQmIGluc3RhbmNlKCk7CisKKyAgICBnYm9vbGVhbiBoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2Uq
KTsKKworICAgIHZvaWQgcmVnaXN0ZXJTb3VyY2VGYWN0b3J5KFNvdXJjZUZhY3RvcnkqLCBjb25z
dCBTdHJpbmcmIHNvdXJjZUlkKTsKKyAgICB2b2lkIGRlcmVnaXN0ZXJTb3VyY2VGYWN0b3J5KGNv
bnN0IFN0cmluZyYgc291cmNlSWQpOworCitwcml2YXRlOgorICAgIGNsYXNzIFNvdXJjZSB7Cisg
ICAgcHVibGljOgorICAgICAgICBTb3VyY2UoKSA6IG1fc291cmNlRWxlbWVudCgwKSwgbV9zb3Vy
Y2VQYWQoMCksIG1fc291cmNlRmFjdG9yeSgwKSwgbV9yZW1vdmVXaGVuTm90VXNlZCh0cnVlKSB7
IH0KKyAgICAgICAgU291cmNlKEdSZWZQdHI8R3N0RWxlbWVudD4gc291cmNlRWxlbWVudCwgR1Jl
ZlB0cjxHc3RQYWQ+IHNvdXJjZVBhZCwgU291cmNlRmFjdG9yeSogc291cmNlRmFjdG9yeSwgYm9v
bCByZW1vdmVXaGVuTm90VXNlZCkgOiBtX3NvdXJjZUVsZW1lbnQoc291cmNlRWxlbWVudCksIG1f
c291cmNlUGFkKHNvdXJjZVBhZCksIG1fc291cmNlRmFjdG9yeShzb3VyY2VGYWN0b3J5KSwgbV9y
ZW1vdmVXaGVuTm90VXNlZChyZW1vdmVXaGVuTm90VXNlZCkgeyB9CisKKyAgICAgICAgR1JlZlB0
cjxHc3RFbGVtZW50PiBtX3NvdXJjZUVsZW1lbnQ7CisgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBt
X3NvdXJjZVBhZDsKKyAgICAgICAgU291cmNlRmFjdG9yeSogbV9zb3VyY2VGYWN0b3J5OworICAg
ICAgICBib29sIG1fcmVtb3ZlV2hlbk5vdFVzZWQ7CisgICAgfTsKKworICAgIHR5cGVkZWYgSGFz
aE1hcDxTdHJpbmcsIFNvdXJjZT4gUGlwZWxpbmVNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiBTb3VyY2VJZExvb2t1cE1hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3Ry
aW5nLCBTb3VyY2VGYWN0b3J5Kj4gU291cmNlRmFjdG9yeU1hcDsKKworICAgIEdSZWZQdHI8R3N0
RWxlbWVudD4gbV9waXBlbGluZTsKKyAgICBQaXBlbGluZU1hcCBtX3BpcGVsaW5lTWFwOworICAg
IFNvdXJjZUlkTG9va3VwTWFwIG1fc291cmNlSWRMb29rdXBNYXA7CisgICAgU291cmNlRmFjdG9y
eU1hcCBtX3NvdXJjZUZhY3RvcnlNYXA7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVE
SUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdTVF9BUElfVkVSU0lPTl8x
KQorCisjZW5kaWYgLy8gQ2VudHJhbFBpcGVsaW5lVW5pdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJH
U3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmNwcAppbmRleCAxNmE4NmE5Li5lMTFiN2M2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5j
cHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFC
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzEsMTUgKzMyLDE1IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikKIAog
I2luY2x1ZGUgIk1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmgiCiAKKyNpbmNsdWRlICJNZWRp
YVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbUNy
ZWF0aW9uQ2xpZW50LmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCi0jaW5j
bHVkZSAiTWVkaWFTdHJlYW1Tb3VyY2VDYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJNZWRpYVN0
cmVhbVNvdXJjZS5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdENs
aWVudC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTMsMjggKzU0LDU5IEBAIE1lZGlh
U3RyZWFtQ2VudGVyJiBNZWRpYVN0cmVhbUNlbnRlcjo6cGxhdGZvcm1DZW50ZXIoKQogCiBNZWRp
YVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6TWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIoKQogewor
ICAgIG1fcHJpdmF0ZSA9IE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRl
KCk7CiB9CiAKIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyOjp+TWVkaWFTdHJlYW1DZW50ZXJH
U3RyZWFtZXIoKQogewogfQogCi12b2lkIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyOjp2YWxp
ZGF0ZVJlcXVlc3RDb25zdHJhaW50cyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25DbGll
bnQ+LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3Ry
YWludHM+KQordm9pZCBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6dmFsaWRhdGVSZXF1ZXN0
Q29uc3RyYWludHMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50PiBwcnBDbGll
bnQsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gYXVkaW9Db25zdHJhaW50cywgUGFzc1Jl
ZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiB2aWRlb0NvbnN0cmFpbnRzKQogewotICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQ+IGNsaWVudCA9
IHBycENsaWVudDsKKyAgICBBU1NFUlQoY2xpZW50KTsKKyAgICAvLyBUT0RPOiB2YWxpZGF0ZSBj
b25zdHJhaW50cyB3aXRoIGF2YWlsYWJsZSBkZXZpY2VzLCBzZWUgYnVnICMxMjMzNDUuCisgICAg
Y2xpZW50LT5jb25zdHJhaW50c1ZhbGlkYXRlZCgpOwogfQotICAgIAotdm9pZCBNZWRpYVN0cmVh
bUNlbnRlckdTdHJlYW1lcjo6Y3JlYXRlTWVkaWFTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVh
bUNyZWF0aW9uQ2xpZW50PiwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiwgUGFzc1JlZlB0
cjxNZWRpYUNvbnN0cmFpbnRzPikKKwordm9pZCBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6
Y3JlYXRlTWVkaWFTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50PiBw
cnBRdWVyeUNsaWVudCwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBhdWRpb0NvbnN0cmFp
bnRzLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IHZpZGVvQ29uc3RyYWludHMpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVu
dD4gY2xpZW50ID0gcHJwUXVlcnlDbGllbnQ7CisgICAgQVNTRVJUKGNsaWVudCk7CisKKyAgICBW
ZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPj4gYXVkaW9Tb3VyY2VzOworICAgIFZlY3Rv
cjxSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+PiB2aWRlb1NvdXJjZXM7CisKKyAgICBpZiAoYXVk
aW9Db25zdHJhaW50cykgeworICAgICAgICAvLyBUT0RPOiB2ZXJpZnkgY29uc3RyYWludHMgYWNj
b3JkaW5nIHRvIHJlZ2lzdGVyZWQKKyAgICAgICAgLy8gc291cmNlcy4gRm9yIG5vdywgdW5jb25k
aXRpb25hbGx5IHBpY2sgdGhlIGZpcnN0IHNvdXJjZSwgc2VlIGJ1ZyAjMTIzMzQ1LgorICAgICAg
ICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IGF1ZGlvU291cmNlID0gbV9wcml2YXRlLT5maXJz
dFNvdXJjZShNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8pOworICAgICAgICBpZiAoYXVkaW9Tb3Vy
Y2UpIHsKKyAgICAgICAgICAgIGF1ZGlvU291cmNlLT5yZXNldCgpOworICAgICAgICAgICAgYXVk
aW9Tb3VyY2UtPnNldFJlYWR5U3RhdGUoTWVkaWFTdHJlYW1Tb3VyY2U6OkxpdmUpOworICAgICAg
ICAgICAgYXVkaW9Tb3VyY2VzLmFwcGVuZChhdWRpb1NvdXJjZS5yZWxlYXNlKCkpOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKHZpZGVvQ29uc3RyYWludHMpIHsKKyAgICAgICAgLy8gVE9E
TzogdmVyaWZ5IGNvbnN0cmFpbnRzIGFjY29yZGluZyB0byByZWdpc3RlcmVkCisgICAgICAgIC8v
IHNvdXJjZXMuIEZvciBub3csIHVuY29uZGl0aW9uYWxseSBwaWNrIHRoZSBmaXJzdCBzb3VyY2Us
IHNlZSBidWcgIzEyMzM0NS4KKyAgICAgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiB2aWRl
b1NvdXJjZSA9IG1fcHJpdmF0ZS0+Zmlyc3RTb3VyY2UoTWVkaWFTdHJlYW1Tb3VyY2U6OlZpZGVv
KTsKKyAgICAgICAgaWYgKHZpZGVvU291cmNlKSB7CisgICAgICAgICAgICB2aWRlb1NvdXJjZS0+
cmVzZXQoKTsKKyAgICAgICAgICAgIHZpZGVvU291cmNlLT5zZXRSZWFkeVN0YXRlKE1lZGlhU3Ry
ZWFtU291cmNlOjpMaXZlKTsKKyAgICAgICAgICAgIHZpZGVvU291cmNlcy5hcHBlbmQodmlkZW9T
b3VyY2UucmVsZWFzZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsaWVudC0+ZGlkQ3Jl
YXRlU3RyZWFtKE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKGF1ZGlvU291cmNlcywgdmlk
ZW9Tb3VyY2VzLCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OklzTm90RW5kZWQpKTsKIH0KIAotYm9v
bCBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6Z2V0TWVkaWFTdHJlYW1UcmFja1NvdXJjZXMo
UGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrU291cmNlc1JlcXVlc3RDbGllbnQ+KQorYm9vbCBN
ZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6Z2V0TWVkaWFTdHJlYW1UcmFja1NvdXJjZXMoUGFz
c1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrU291cmNlc1JlcXVlc3RDbGllbnQ+IGNsaWVudCkKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKyNlbmRpZiAv
LyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2Vu
dGVyR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuaAppbmRleCA0ZTQzNWVjLi40NTg4Njg1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuaApA
QCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiwy
MCArMzMsMTcgQEAKICNpZm5kZWYgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXJfaAogI2RlZmlu
ZSBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcl9oCiAKLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KQorI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpCiAKICNpbmNsdWRl
ICJNZWRpYVN0cmVhbUNlbnRlci5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBNZWRpYVN0cmVhbURlc2NyaXB0b3I7Ci1jbGFzcyBNZWRpYVN0cmVhbVNvdXJjZTsKLWNs
YXNzIE1lZGlhU3RyZWFtU291cmNlc1F1ZXJ5Q2xpZW50OworY2xhc3MgTWVkaWFTdHJlYW1DZW50
ZXJQcml2YXRlR1N0cmVhbWVyOwogCi1jbGFzcyBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lciA6
IHB1YmxpYyBNZWRpYVN0cmVhbUNlbnRlciB7CitjbGFzcyBNZWRpYVN0cmVhbUNlbnRlckdTdHJl
YW1lciBGSU5BTCA6IHB1YmxpYyBNZWRpYVN0cmVhbUNlbnRlciB7CiBwdWJsaWM6CiAgICAgTWVk
aWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIoKTsKICAgICB+TWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFt
ZXIoKTsKQEAgLTUzLDEwICs1MSwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHZhbGlk
YXRlUmVxdWVzdENvbnN0cmFpbnRzKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVu
dD4sIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gYXVkaW9Db25zdHJhaW50cywgUGFzc1Jl
ZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiB2aWRlb0NvbnN0cmFpbnRzKTsKICAgICB2aXJ0dWFsIHZv
aWQgY3JlYXRlTWVkaWFTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50
PiwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBhdWRpb0NvbnN0cmFpbnRzLCBQYXNzUmVm
UHRyPE1lZGlhQ29uc3RyYWludHM+IHZpZGVvQ29uc3RyYWludHMpOwogICAgIHZpcnR1YWwgYm9v
bCBnZXRNZWRpYVN0cmVhbVRyYWNrU291cmNlcyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tT
b3VyY2VzUmVxdWVzdENsaWVudD4pIE9WRVJSSURFOworCitwcml2YXRlOgorICAgIE93blB0cjxN
ZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXI+IG1fcHJpdmF0ZTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisjZW5k
aWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikKIAogI2VuZGlmIC8v
IE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlclByaXZhdGVH
U3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL01lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNTkyMWExMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlclBy
aXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogIENvcHlyaWdodCAo
QykgMjAxMiBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAxMyBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikgJiYgZGVmaW5lZChHU1RfQVBJX1ZFUlNJT05f
MSkKKworI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lci5oIgorCisj
aW5jbHVkZSAiQ2VudHJhbFBpcGVsaW5lVW5pdC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclV0aWxp
dGllcy5oIgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3du
UHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitHU1RfREVCVUdfQ0FURUdP
Ulkod2Via2l0X21lZGlhX3N0cmVhbV9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3
ZWJraXRfbWVkaWFfc3RyZWFtX2RlYnVnCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGlj
IEdSZWZQdHI8R3N0RWxlbWVudD4gZmluZERldmljZVNvdXJjZShjb25zdCBjaGFyKiBlbGVtZW50
TmFtZSkKK3sKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGRldmljZVNyYzsKKyAgICBHUmVmUHRy
PEdzdEVsZW1lbnQ+IGF1dG9TcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoZWxlbWVudE5h
bWUsIDApOworICAgIGlmICghYXV0b1NyYykKKyAgICAgICAgcmV0dXJuIGRldmljZVNyYzsKKwor
ICAgIEdzdENoaWxkUHJveHkqIGNoaWxkUHJveHkgPSBHU1RfQ0hJTERfUFJPWFkoYXV0b1NyYy5n
ZXQoKSk7CisgICAgaWYgKCFjaGlsZFByb3h5KQorICAgICAgICByZXR1cm4gZGV2aWNlU3JjOwor
CisgICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3RhdGVDaGFuZ2VSZXN1bHQgPSBnc3RfZWxlbWVu
dF9zZXRfc3RhdGUoYXV0b1NyYy5nZXQoKSwgR1NUX1NUQVRFX1JFQURZKTsKKyAgICBpZiAoc3Rh
dGVDaGFuZ2VSZXN1bHQgIT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKQorICAgICAgICByZXR1
cm4gZGV2aWNlU3JjOworCisgICAgaWYgKGdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRyZW5fY291
bnQoY2hpbGRQcm94eSkpCisgICAgICAgIGRldmljZVNyYyA9IGFkb3B0R1JlZihHU1RfRUxFTUVO
VChnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X2luZGV4KGNoaWxkUHJveHksIDApKSk7CisK
KyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUoYXV0b1NyYy5nZXQoKSwgR1NUX1NUQVRFX05VTEwp
OworICAgIHJldHVybiBkZXZpY2VTcmM7Cit9CisKK3N0YXRpYyBSZWZQdHI8TWVkaWFTdHJlYW1T
b3VyY2VHU3RyZWFtZXI+IHByb2JlU291cmNlKEdzdEVsZW1lbnQqIHNvdXJjZSwgTWVkaWFTdHJl
YW1Tb3VyY2U6OlR5cGUgdHlwZSkKK3sKKyAgICAvLyBGSVhNRTogZ3N0cmVhbWVyIDEuMCBkb2Vz
bid0IGhhdmUgYW4gZXF1aXZhbGVudCB0byBHc3RQcm9wZXJ0eVByb2JlLAorICAgIC8vIHNvIHdl
IGRvbid0IHN1cHBvcnQgY2hvb3NpbmcgYSBwYXJ0aWN1bGFyIGRldmljZSB5ZXQuCisgICAgLy8g
c2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzg0MDIKKwor
ICAgIEdzdEVsZW1lbnRGYWN0b3J5KiBlbGVtZW50RmFjdG9yeSA9IGdzdF9lbGVtZW50X2dldF9m
YWN0b3J5KHNvdXJjZSk7CisgICAgR093blB0cjxnY2hhcj4gZmFjdG9yeU5hbWUoZ3N0X2VsZW1l
bnRfZ2V0X25hbWUoZWxlbWVudEZhY3RvcnkpKTsKKyAgICBTdHJpbmcgc3RyRmFjdG9yeU5hbWUo
ZmFjdG9yeU5hbWUuZ2V0KCkpOworCisgICAgU3RyaW5nIGRldmljZUlkID0gc3RyRmFjdG9yeU5h
bWU7CisgICAgZGV2aWNlSWQuYXBwZW5kKCI7ZGVmYXVsdCIpOworCisgICAgR093blB0cjxnY2hh
cj4gZGV2aWNlTmFtZTsKKyAgICBnX29iamVjdF9nZXQoc291cmNlLCAiZGV2aWNlLW5hbWUiLCAm
ZGV2aWNlTmFtZS5vdXRQdHIoKSwgTlVMTCk7CisKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3Vy
Y2VHU3RyZWFtZXI+IG1lZGlhU3RyZWFtU291cmNlID0gYWRvcHRSZWYobmV3IE1lZGlhU3RyZWFt
U291cmNlR1N0cmVhbWVyKGRldmljZUlkLCBkZXZpY2VOYW1lLmdldCgpLCB0eXBlLCAiZGVmYXVs
dCIsIHN0ckZhY3RvcnlOYW1lKSk7CisKKyAgICAvLyBUT0RPOiBmaWxsIHNvdXJjZSBjYXBhYmls
aXRpZXMgYW5kIHN0YXRlcy4KKworICAgIHJldHVybiBtZWRpYVN0cmVhbVNvdXJjZTsKK30KKwor
TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyOjpNZWRpYVN0cmVhbUNlbnRlclByaXZh
dGVHU3RyZWFtZXIoKQoreworICAgIGluaXRpYWxpemVHU3RyZWFtZXIoKTsKKworICAgIHN0YXRp
YyBib29sIGRlYnVnQ2F0ZWdvcnlSZWdpc3RlcmVkID0gZmFsc2U7CisgICAgaWYgKCFkZWJ1Z0Nh
dGVnb3J5UmVnaXN0ZXJlZCkgeworICAgICAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJr
aXRfbWVkaWFfc3RyZWFtX2RlYnVnLCAid2Via2l0bWVkaWFzdHJlYW0iLCAwLCAiV2ViS2l0IG1l
ZGlhc3RyZWFtIik7CisgICAgICAgIGRlYnVnQ2F0ZWdvcnlSZWdpc3RlcmVkID0gdHJ1ZTsKKyAg
ICB9CisKKyAgICBMT0dfTUVESUFfTUVTU0FHRSgiRGlzY292ZXJpbmcgbWVkaWEgc291cmNlIGRl
dmljZXMiKTsKKyAgICBkaXNjb3ZlckRldmljZXMoTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvKTsK
KyAgICBkaXNjb3ZlckRldmljZXMoTWVkaWFTdHJlYW1Tb3VyY2U6OlZpZGVvKTsKK30KKwordm9p
ZCBNZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXI6OmRpc2NvdmVyRGV2aWNlcyhNZWRp
YVN0cmVhbVNvdXJjZTo6VHlwZSB0eXBlKQoreworICAgIGNvbnN0IGNoYXIqIGVsZW1lbnROYW1l
OworICAgIGlmICh0eXBlID09IE1lZGlhU3RyZWFtU291cmNlOjpBdWRpbykKKyAgICAgICAgZWxl
bWVudE5hbWUgPSAiYXV0b2F1ZGlvc3JjIjsKKyAgICBlbHNlIGlmICh0eXBlID09IE1lZGlhU3Ry
ZWFtU291cmNlOjpWaWRlbykKKyAgICAgICAgZWxlbWVudE5hbWUgPSAiYXV0b3ZpZGVvc3JjIjsK
KyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgR1JlZlB0cjxH
c3RFbGVtZW50PiBkZXZpY2VTb3VyY2UgPSBmaW5kRGV2aWNlU291cmNlKGVsZW1lbnROYW1lKTsK
KyAgICBpZiAoIWRldmljZVNvdXJjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPE1l
ZGlhU3RyZWFtU291cmNlR1N0cmVhbWVyPiBzb3VyY2UgPSBwcm9iZVNvdXJjZShkZXZpY2VTb3Vy
Y2UuZ2V0KCksIHR5cGUpOworICAgIFN0cmluZyBpZCA9IHNvdXJjZS0+aWQoKTsKKworICAgIE1l
ZGlhU3RyZWFtU291cmNlR1N0cmVhbWVyTWFwOjppdGVyYXRvciBzb3VyY2VJdGVyYXRvciA9IG1f
c291cmNlTWFwLmZpbmQoaWQpOworICAgIGlmIChzb3VyY2VJdGVyYXRvciA9PSBtX3NvdXJjZU1h
cC5lbmQoKSkKKyAgICAgICAgbV9zb3VyY2VNYXAuYWRkKGlkLCBzb3VyY2UpOworCisgICAgTE9H
X01FRElBX01FU1NBR0UoIlJlZ2lzdGVyaW5nIHNvdXJjZSBmYWN0b3J5IGZvciBzb3VyY2Ugd2l0
aCBpZD0lcyIsIGlkLmFzY2lpKCkuZGF0YSgpKTsKKyAgICBDZW50cmFsUGlwZWxpbmVVbml0JiBj
cHUgPSBDZW50cmFsUGlwZWxpbmVVbml0OjppbnN0YW5jZSgpOworICAgIGNwdS5yZWdpc3RlclNv
dXJjZUZhY3RvcnkodGhpcywgaWQpOworfQorCitHUmVmUHRyPEdzdEVsZW1lbnQ+IE1lZGlhU3Ry
ZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlU291cmNlKGNvbnN0IFN0cmluZyYgc291
cmNlSWQsIEdSZWZQdHI8R3N0UGFkPiYgc3JjUGFkKQoreworICAgIC8vIFRPRE86IGltcGxlbWVu
dAorICAgIHJldHVybiAwOworfQorCitQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBNZWRp
YVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXI6OmZpcnN0U291cmNlKE1lZGlhU3RyZWFtU291
cmNlOjpUeXBlIHR5cGUpCit7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBtX3NvdXJjZU1hcC5iZWdp
bigpOyBpdGVyICE9IG1fc291cmNlTWFwLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgUmVmUHRy
PE1lZGlhU3RyZWFtU291cmNlPiBzb3VyY2UgPSBpdGVyLT52YWx1ZTsKKyAgICAgICAgaWYgKHNv
dXJjZS0+dHlwZSgpID09IHR5cGUpCisgICAgICAgICAgICByZXR1cm4gc291cmNlOworICAgIH0K
KworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdTVF9B
UElfVkVSU0lPTl8xKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2Vu
dGVyUHJpdmF0ZUdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmY3Yjk5MTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmgKQEAg
LTAsMCArMSw5MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgQ29sbGFib3JhIEx0ZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKwor
I2lmbmRlZiBNZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXJfaAorI2RlZmluZSBNZWRp
YVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXJfaAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkgJiYgVVNFKEdTVFJFQU1FUikgJiYgZGVmaW5lZChHU1RfQVBJX1ZFUlNJT05fMSkKKworI2lu
Y2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJjZS5o
IgorI2luY2x1ZGUgIlNvdXJjZUZhY3RvcnkuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFTdHJlYW1Tb3VyY2VDYXBhYmlsaXRp
ZXM7CisKK2NsYXNzIE1lZGlhU3RyZWFtU291cmNlR1N0cmVhbWVyIEZJTkFMIDogcHVibGljIE1l
ZGlhU3RyZWFtU291cmNlIHsKK3B1YmxpYzoKK01lZGlhU3RyZWFtU291cmNlR1N0cmVhbWVyKGNv
bnN0IEF0b21pY1N0cmluZyYgaWQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgTWVkaWFTdHJl
YW1Tb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBkZXZpY2UsIGNvbnN0IFN0cmluZyYg
ZmFjdG9yeUtleSkKKyAgICA6IE1lZGlhU3RyZWFtU291cmNlKGlkLCB0eXBlLCBuYW1lKQorICAg
ICwgbV9mYWN0b3J5S2V5KGZhY3RvcnlLZXkpCisgICAgLCBtX2RldmljZShkZXZpY2UpCisgICAg
eworICAgIH0KKworICAgIHZpcnR1YWwgfk1lZGlhU3RyZWFtU291cmNlR1N0cmVhbWVyKCkgeyB9
CisKKyAgICB2aXJ0dWFsIFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZUNhcGFiaWxpdGllcz4gY2Fw
YWJpbGl0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9jYXBhYmlsaXRpZXM7IH0KKyAgICB2aXJ0dWFs
IGNvbnN0IE1lZGlhU3RyZWFtU291cmNlU3RhdGVzJiBzdGF0ZXMoKSB7IHJldHVybiBtX2N1cnJl
bnRTdGF0ZXM7IH0KKworICAgIGNvbnN0IFN0cmluZyYgZmFjdG9yeUtleSgpIGNvbnN0IHsgcmV0
dXJuIG1fZmFjdG9yeUtleTsgfQorICAgIGNvbnN0IFN0cmluZyYgZGV2aWNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9kZXZpY2U7IH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3Vy
Y2VDYXBhYmlsaXRpZXM+IG1fY2FwYWJpbGl0aWVzOworICAgIE1lZGlhU3RyZWFtU291cmNlU3Rh
dGVzIG1fY3VycmVudFN0YXRlczsKKworICAgIFN0cmluZyBtX2ZhY3RvcnlLZXk7CisgICAgU3Ry
aW5nIG1fZGV2aWNlOworfTsKKwordHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPE1lZGlh
U3RyZWFtU291cmNlR1N0cmVhbWVyPj4gTWVkaWFTdHJlYW1Tb3VyY2VHU3RyZWFtZXJNYXA7CisK
KworY2xhc3MgTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyIEZJTkFMIDogcHJpdmF0
ZSBTb3VyY2VGYWN0b3J5IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxNZWRpYVN0
cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXI+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcigpKTsKKyAg
ICB9CisKKyAgICBNZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lck1hcCYgc291cmNlTWFwKCkgeyBy
ZXR1cm4gbV9zb3VyY2VNYXA7IH0KKworICAgIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+
IGZpcnN0U291cmNlKE1lZGlhU3RyZWFtU291cmNlOjpUeXBlKTsKKworcHJpdmF0ZToKKyAgICBN
ZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIoKTsKKworICAgIHZvaWQgZGlzY292ZXJE
ZXZpY2VzKE1lZGlhU3RyZWFtU291cmNlOjpUeXBlKTsKKworICAgIC8vIFNvdXJjZUZhY3RvcnkK
KyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGNyZWF0ZVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJj
ZUlkLCBHUmVmUHRyPEdzdFBhZD4mIHNyY1BhZCk7CisKKyAgICBNZWRpYVN0cmVhbVNvdXJjZUdT
dHJlYW1lck1hcCBtX3NvdXJjZU1hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpICYmIGRlZmlu
ZWQoR1NUX0FQSV9WRVJTSU9OXzEpCisKKyNlbmRpZiAvLyBNZWRpYVN0cmVhbUNlbnRlclByaXZh
dGVHU3RyZWFtZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL1NvdXJjZUZhY3RvcnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9Tb3VyY2VGYWN0b3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNjk1ZGYwZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Tb3VyY2VGYWN0b3J5LmgKQEAgLTAs
MCArMSw0OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgQ29sbGFib3JhIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5k
ZWYgU291cmNlRmFjdG9yeV9oCisjZGVmaW5lIFNvdXJjZUZhY3RvcnlfaAorCisjaWYgRU5BQkxF
KE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0dzdFBhZCBHc3RQYWQ7Cit0eXBl
ZGVmIHN0cnVjdCBfR3N0RWxlbWVudCBHc3RFbGVtZW50OworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFNvdXJjZUZhY3RvcnkgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNvdXJj
ZUZhY3RvcnkpOworcHVibGljOgorICAgIFNvdXJjZUZhY3RvcnkoKSB7IH0KKyAgICB2aXJ0dWFs
IEdSZWZQdHI8R3N0RWxlbWVudD4gY3JlYXRlU291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSWQs
IEdSZWZQdHI8R3N0UGFkPiYgc3JjUGFkKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IH5Tb3VyY2VGYWN0b3J5KCkgeyB9Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEVEKE1FRElB
X1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikKKworI2VuZGlmIC8vIFNvdXJjZUZhY3RvcnlfaAot
LSAKMS44LjQucmMz
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215511</attachid>
            <date>2013-10-30 08:58:16 -0700</date>
            <delta_ts>2013-10-30 11:03:32 -0700</delta_ts>
            <desc>MediaStreamCenter and minimal CentralPipelineUnit</desc>
            <filename>MediaStreamCenter-and-minimal-CentralPipelineUnit.patch</filename>
            <type>text/plain</type>
            <size>28719</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSAyYmEzODgxMzYzMGIxODk3YzU4ZmE4ZjczZWVmMzZiNGU0NGY0NjFlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUaHUsIDE3IE9jdCAyMDEzIDE3OjM0OjQzICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
TWVkaWFTdHJlYW1DZW50ZXIgYW5kIG1pbmltYWwgQ2VudHJhbFBpcGVsaW5lVW5pdAoKLS0tCiBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1OCAr
KysrKysrKysKIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAg
ICAgIHwgICA1ICsKIC4uLi9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5p
dC5jcHAgIHwgIDkwICsrKysrKysrKysrKysKIC4uLi9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2Vu
dHJhbFBpcGVsaW5lVW5pdC5oICAgIHwgIDc4ICsrKysrKysrKysrKwogLi4uL2dzdHJlYW1lci9N
ZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5jcHAgICAgICAgfCAgNTggKysrKysrKy0tCiAuLi4v
Z3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmggICAgICAgICB8ICAxNSArLS0K
IC4uLi9NZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIuY3BwICAgICAgICAgIHwgMTQw
ICsrKysrKysrKysrKysrKysrKysrKwogLi4uL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlclBy
aXZhdGVHU3RyZWFtZXIuaCAgfCAgNTIgKysrKysrKysKIC4uLi9nc3RyZWFtZXIvTWVkaWFTdHJl
YW1Tb3VyY2VHU3RyZWFtZXIuaCAgICAgICAgIHwgIDY0ICsrKysrKysrKysKIDkgZmlsZXMgY2hh
bmdlZCwgNTQzIGluc2VydGlvbnMoKyksIDE3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9DZW50cmFs
UGlwZWxpbmVVbml0LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9DZW50cmFsUGlwZWxpbmVVbml0LmgKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVh
bUNlbnRlclByaXZhdGVHU3RyZWFtZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbVNvdXJjZUdTdHJl
YW1lci5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDlhMGRkMTAuLjVlNzc3MzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MSBAQAorMjAxMy0xMC0zMCAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxp
YS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl0gYmFzaWMgTWVkaWFTdHJlYW1DZW50ZXIgYW5k
IENlbnRyYWxQaXBlbGluZVVuaXQgaW1wbGVtZW50YXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAxNTAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHZlcnkgYmFzaWMgTWVkaWFTdHJlYW1D
ZW50ZXIgaXMgYWJsZSB0byBkZXRlY3QgdGhlIGF1ZGlvIGFuZAorICAgICAgICB2aWRlbyBzb3Vy
Y2UgZGV2aWNlcyBhbmQgbWFrZSB0aGVtIGF2YWlsYWJsZSB0byB0aGUgd2ViIHBhZ2UgdmlhCisg
ICAgICAgIHRoZSBnZXRVc2VyTWVkaWEgQVBJLiBQbGF5YmFjayBzdXBwb3J0IHZpYSBhIGRlZGlj
YXRlZAorICAgICAgICBNZWRpYVBsYXllclByaXZhdGUgYmFja2VuZCB3aWxsIGJlIHByb3ZpZGVk
IGluIGEgZm9sbG93LXVwIHBhdGNoLgorCisgICAgICAgIFRoZSBNZWRpYVN0cmVhbUNlbnRlciBp
bXBsZW1lbnRhdGlvbiBpcyBjb250YWluZWQgaW4gdGhlCisgICAgICAgIE1lZGlhU3RyZWFtQ2Vu
dGVyUHJpdmF0ZUdTdHJlYW1lci4gVGhlIENlbnRyYWxQaXBlbGluZVVuaXQgaXMKKyAgICAgICAg
bWFuYWdpbmcgdGhlIHBpcGVsaW5lIHVzZWQgZm9yIGF1ZGlvL3ZpZGVvIGNhcHR1cmUgYW5kCisg
ICAgICAgIHJlbmRlcmluZy4gSXQgaXMgdXNlZCBieSB0aGUgTWVkaWFTdHJlYW1DZW50ZXIgdG8g
KHVuKXJlZ2lzdGVyCisgICAgICAgIHNvdXJjZXMgYW5kIGxhdGVyIG9uIGl0IHdpbGwgYmUgdXNl
ZCBieSB0aGUgTWVkaWFQbGF5ZXIgdG8gbWFuYWdlCisgICAgICAgIHRoZSByZW5kZXJpbmcuCisK
KyAgICAgICAgUGF0Y2ggYmFzZWQgb24gd29yayBwcmV2aW91c2x5IGRvbmUgYnkgSm9uYXRob24g
Sm9uZ3NtYSA8am9uYXRob24uam9uZ3NtYUBjb2xsYWJvcmEuY29tPi4KKworICAgICAgICAqIEdO
VW1ha2VmaWxlLmxpc3QuYW06IEFkZGluZyBuZXcgZmlsZXMgdG8gdGhlIGJ1aWxkLgorICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9DZW50cmFsUGlwZWxpbmVVbml0LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjptZXNzYWdlQ2FsbGJhY2spOiBGdW5jdGlvbiBj
YWxsZWQgZXZlcnkgdGltZSBhIG1lc3NhZ2UKKyAgICAgICAgZnJvbSB0aGUgR1N0cmVhbWVyIGJ1
cyBuZWVkcyB0byBiZSBwcm9jZXNzZWQuCisgICAgICAgIChXZWJDb3JlOjpDZW50cmFsUGlwZWxp
bmVVbml0OjppbnN0YW5jZSk6IFV0aWxpdHkgZnVuY3Rpb24gdG8KKyAgICAgICAgYWNjZXNzIHRo
ZSBDZW50cmFsUGlwZWxpbmVVbml0IHNpbmdsZXRvbi4KKyAgICAgICAgKFdlYkNvcmU6OkNlbnRy
YWxQaXBlbGluZVVuaXQ6OkNlbnRyYWxQaXBlbGluZVVuaXQpOgorICAgICAgICAoV2ViQ29yZTo6
Q2VudHJhbFBpcGVsaW5lVW5pdDo6fkNlbnRyYWxQaXBlbGluZVVuaXQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2VudHJhbFBpcGVsaW5lVW5pdDo6aGFuZGxlTWVzc2FnZSk6IEdzdE1lc3NhZ2UKKyAg
ICAgICAgaGFuZGxlci4gRm9yIG5vdyBvbmx5IHByb2Nlc3MgZXJyb3IgbWVzc2FnZXMuCisgICAg
ICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0NlbnRyYWxQaXBlbGluZVVuaXQu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDZW50cmFsUGlwZWxpbmVVbml0OjpTb3VyY2U6
OlNvdXJjZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlh
U3RyZWFtQ2VudGVyR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFt
Q2VudGVyR1N0cmVhbWVyOjpNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcik6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6dmFsaWRhdGVSZXF1ZXN0Q29uc3Ry
YWludHMpOgorICAgICAgICBGb3Igbm93IHZhbGlkYXRlIHVuY2hlY2tlZCBhdWRpby92aWRlbyBj
b25zdHJhaW50cy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVy
OjpjcmVhdGVNZWRpYVN0cmVhbSk6IENyZWF0ZSBhCisgICAgICAgIG1lZGlhc3RyZWFtIHVzaW5n
IHRoZSBmaXJzdCBhdWRpbyBhbmQgdmlkZW8gZGV2aWNlIGF2YWlsYWJsZS4gVGhpcworICAgICAg
ICB3aWxsIGJlIGltcHJvdmVkIHdoZW4gY29uc3RyYWludHMgdmFsaWRhdGlvbiBpcyBpbXBsZW1l
bnRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyOjpnZXRN
ZWRpYVN0cmVhbVRyYWNrU291cmNlcyk6CisgICAgICAgIERvIG5vdGhpbmcsIHRoaXMgbWV0aG9k
IGRvZXNuJ3Qgc2VlbSB1c2VkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZpbmREZXZpY2VTb3VyY2UpOiBUaGUgYXV0b3th
dWRpbyx2aWRlb31zcmMgZWxlbWVudHMgYXJlCisgICAgICAgIHdyYXBwZXJzIGFyb3VuZCB0aGUg
cmVhbCBzcmMgZWxlbWVudHMuIFRoaXMgZnVuY3Rpb24gZmluZHMgdGhlbSBvdXQuCisgICAgICAg
IChXZWJDb3JlOjpwcm9iZVNvdXJjZSk6IEluc3BlY3QgYSBzb3VyY2UgZWxlbWVudCAoaW5jb21w
bGV0ZWx5IGZvcgorICAgICAgICBub3cpIGFuZCByZWdpc3RlciBpdCBhcyBhIG5ldyBNZWRpYVN0
cmVhbVNvdXJjZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdT
dHJlYW1lcjo6TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyKToKKyAgICAgICAgRGlz
Y292ZXIgbG9jYWwgYXVkaW8vdmlkZW8gZGV2aWNlcyBhbmQgcmVnaXN0ZXIgdGhlbSBpbiB0aGUg
Q2VudHJhbFBpcGVsaW5lVW5pdC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtQ2VudGVy
UHJpdmF0ZUdTdHJlYW1lcjo6ZGlzY292ZXJEZXZpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcjo6Zmlyc3RTb3VyY2UpOiBGaW5kCisgICAg
ICAgIHRoZSBmaXJzdCByZWdpc3RlcmVkIHNvdXJjZSBvZiB0aGUgZ2l2ZW4gdHlwZS4gVGhpcyBj
b252ZW5pZW5jZQorICAgICAgICBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIG9uY2UgbWVkaWEgY29u
c3RyYWludHMgY2hlY2tpbmcgaGFzIGJlZW4gaW1wbGVtZW50ZWQuCisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1l
ci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdT
dHJlYW1lcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvTWVkaWFTdHJlYW1Tb3VyY2VHU3RyZWFtZXIuaDogQWRkZWQuCisKIDIwMTMtMTAtMzAgIEFu
dHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjE1
ODIxNCk6IEl0IG1hZGUgemlsbGlvbiB0ZXN0cyBjcmFzaCBvbiBHVEsgYW5kIEVGTApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggZDViYzAxMi4uYTJmMzAwMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCkBAIC01NDE3LDggKzU0MTcsMTMgQEAgd2ViY29yZV9wbGF0Zm9y
bV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SVENT
ZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL1JUQ1N0YXRzUmVxdWVzdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9SVENWb2lkUmVxdWVzdC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5pdC5oIFwKKwlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5p
dC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9N
ZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1D
ZW50ZXJQcml2YXRlR1N0cmVhbWVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIuY3BwIFwK
KwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJl
YW1Tb3VyY2VHU3RyZWFtZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9EZXZp
Y2VNb3Rpb25DbGllbnRNb2NrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9E
ZXZpY2VNb3Rpb25DbGllbnRNb2NrLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2sv
RGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5pdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJh
bFBpcGVsaW5lVW5pdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg0
MmUzNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9DZW50cmFsUGlwZWxpbmVVbml0LmNwcApAQCAtMCwwICsxLDkwIEBACisv
KgorICogIENvcHlyaWdodCAoQykgMjAxMiBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikgJiYgZGVmaW5l
ZChHU1RfQVBJX1ZFUlNJT05fMSkKKworI2luY2x1ZGUgIkNlbnRyYWxQaXBlbGluZVVuaXQuaCIK
KworI2luY2x1ZGUgIkdTdHJlYW1lclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclZl
cnNpb25pbmcuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lci5oIgorI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZX0VY
VEVSTih3ZWJraXRfbWVkaWFfc3RyZWFtX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxU
IHdlYmtpdF9tZWRpYV9zdHJlYW1fZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0
aWMgZ2Jvb2xlYW4gbWVzc2FnZUNhbGxiYWNrKEdzdEJ1cyosIEdzdE1lc3NhZ2UqIG1lc3NhZ2Us
IENlbnRyYWxQaXBlbGluZVVuaXQqIGNwdSkKK3sKKyAgICByZXR1cm4gY3B1LT5oYW5kbGVNZXNz
YWdlKG1lc3NhZ2UpOworfQorCitDZW50cmFsUGlwZWxpbmVVbml0JiBDZW50cmFsUGlwZWxpbmVV
bml0OjppbnN0YW5jZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKENlbnRyYWxQaXBlbGluZVVuaXQsIGluc3RhbmNlLCAoKSk7CisgICAg
cmV0dXJuIGluc3RhbmNlOworfQorCitDZW50cmFsUGlwZWxpbmVVbml0OjpDZW50cmFsUGlwZWxp
bmVVbml0KCkKK3sKKyAgICBpbml0aWFsaXplR1N0cmVhbWVyKCk7CisKKyAgICBtX3BpcGVsaW5l
ID0gZ3N0X3BpcGVsaW5lX25ldygibWVkaWFzdHJlYW1fcGlwZWxpbmUiKTsKKyAgICBHUmVmUHRy
PEdzdEJ1cz4gYnVzID0gd2Via2l0R3N0UGlwZWxpbmVHZXRCdXMoR1NUX1BJUEVMSU5FKG1fcGlw
ZWxpbmUuZ2V0KCkpKTsKKyAgICBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2goYnVzLmdldCgpKTsK
KyAgICBnc3RfYnVzX3NldF9zeW5jX2hhbmRsZXIoYnVzLmdldCgpLCBnc3RfYnVzX3N5bmNfc2ln
bmFsX2hhbmRsZXIsIDAsIDApOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoYnVzLmdldCgpLCAic3lu
Yy1tZXNzYWdlIiwgR19DQUxMQkFDSyhtZXNzYWdlQ2FsbGJhY2spLCB0aGlzKTsKKworICAgIGdz
dF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUExBWUlORyk7
Cit9CisKK0NlbnRyYWxQaXBlbGluZVVuaXQ6On5DZW50cmFsUGlwZWxpbmVVbml0KCkKK3sKKyAg
ICBHUmVmUHRyPEdzdEJ1cz4gYnVzID0gd2Via2l0R3N0UGlwZWxpbmVHZXRCdXMoR1NUX1BJUEVM
SU5FKG1fcGlwZWxpbmUuZ2V0KCkpKTsKKyAgICBnc3RfYnVzX3JlbW92ZV9zaWduYWxfd2F0Y2go
YnVzLmdldCgpKTsKK30KKworYm9vbCBDZW50cmFsUGlwZWxpbmVVbml0OjpoYW5kbGVNZXNzYWdl
KEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCit7CisgICAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFKG1l
c3NhZ2UpKSB7CisgICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjogeworICAgICAgICBHT3duUHRy
PEdFcnJvcj4gZXJyb3I7CisgICAgICAgIEdPd25QdHI8Z2NoYXI+IGRlYnVnOworCisgICAgICAg
IGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yKG1lc3NhZ2UsICZlcnJvci5vdXRQdHIoKSwgJmRlYnVn
Lm91dFB0cigpKTsKKyAgICAgICAgRVJST1JfTUVESUFfTUVTU0FHRSgiTWVkaWEgZXJyb3I6ICVk
LCAlcyIsIGVycm9yLT5jb2RlLCBlcnJvci0+bWVzc2FnZSk7CisgICAgICAgIEdTVF9ERUJVR19C
SU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1RfREVC
VUdfR1JBUEhfU0hPV19BTEwsICJ3ZWJraXQtbWVkaWFzdHJlYW0uZXJyb3IiKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdTVF9BUElf
VkVSU0lPTl8xKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0NlbnRyYWxQaXBlbGluZVVuaXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9DZW50cmFsUGlwZWxpbmVVbml0LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ5YzBkZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9DZW50cmFsUGlwZWxp
bmVVbml0LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgQ29s
bGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMg
SWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQorICovCisKKworI2lmbmRlZiBDZW50cmFsUGlwZWxpbmVVbml0X2gKKyNkZWZpbmUgQ2VudHJh
bFBpcGVsaW5lVW5pdF9oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVB
TUVSKSAmJiBkZWZpbmVkKEdTVF9BUElfVkVSU0lPTl8xKQorCisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSGFzaC5oPgorCit0eXBlZGVmIHN0cnVjdCBfR3N0RWxlbWVudCBHc3RFbGVtZW50
OwordHlwZWRlZiBzdHJ1Y3QgX0dzdE1lc3NhZ2UgR3N0TWVzc2FnZTsKK3R5cGVkZWYgc3RydWN0
IF9Hc3RQYWQgR3N0UGFkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBNZWRpYVN0cmVh
bVNvdXJjZUdTdHJlYW1lcjsKKworY2xhc3MgQ2VudHJhbFBpcGVsaW5lVW5pdCB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQ2VudHJhbFBpcGVsaW5lVW5pdCk7Citwcm90ZWN0ZWQ6CisgICAg
Q2VudHJhbFBpcGVsaW5lVW5pdCgpOworcHVibGljOgorICAgIHZpcnR1YWwgfkNlbnRyYWxQaXBl
bGluZVVuaXQoKTsKKworICAgIHN0YXRpYyBDZW50cmFsUGlwZWxpbmVVbml0JiBpbnN0YW5jZSgp
OworCisgICAgYm9vbCBoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqKTsKKworcHJpdmF0ZToKKyAg
ICBjbGFzcyBTb3VyY2UgeworICAgIHB1YmxpYzoKKyAgICAgICAgU291cmNlKCkKKyAgICAgICAg
ICAgIDogbV9yZW1vdmVXaGVuTm90VXNlZCh0cnVlKQorICAgICAgICB7IH0KKworICAgICAgICBT
b3VyY2UoR1JlZlB0cjxHc3RFbGVtZW50PiBzb3VyY2VFbGVtZW50LCBHUmVmUHRyPEdzdFBhZD4g
c291cmNlUGFkLCBib29sIHJlbW92ZVdoZW5Ob3RVc2VkKQorICAgICAgICAgICAgOiBtX3NvdXJj
ZUVsZW1lbnQoc291cmNlRWxlbWVudCkKKyAgICAgICAgICAgICwgbV9zb3VyY2VQYWQoc291cmNl
UGFkKQorICAgICAgICAgICAgLCBtX3JlbW92ZVdoZW5Ob3RVc2VkKHJlbW92ZVdoZW5Ob3RVc2Vk
KQorICAgICAgICB7IH0KKworICAgICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fc291cmNlRWxl
bWVudDsKKyAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IG1fc291cmNlUGFkOworICAgICAgICBib29s
IG1fcmVtb3ZlV2hlbk5vdFVzZWQ7CisgICAgfTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJp
bmcsIFNvdXJjZT4gUGlwZWxpbmVNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPiBTb3VyY2VJZExvb2t1cE1hcDsKKworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9waXBl
bGluZTsKKyAgICBQaXBlbGluZU1hcCBtX3BpcGVsaW5lTWFwOworICAgIFNvdXJjZUlkTG9va3Vw
TWFwIG1fc291cmNlSWRMb29rdXBNYXA7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVE
SUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdTVF9BUElfVkVSU0lPTl8x
KQorCisjZW5kaWYgLy8gQ2VudHJhbFBpcGVsaW5lVW5pdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJH
U3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmNwcAppbmRleCAxNmE4NmE5Li5kMmI2ZTdi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5j
cHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFC
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzEsMTUgKzMyLDE1IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikKIAog
I2luY2x1ZGUgIk1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmgiCiAKKyNpbmNsdWRlICJNZWRp
YVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbUNy
ZWF0aW9uQ2xpZW50LmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCi0jaW5j
bHVkZSAiTWVkaWFTdHJlYW1Tb3VyY2VDYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJNZWRpYVN0
cmVhbVNvdXJjZS5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdENs
aWVudC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTMsMjggKzU0LDY1IEBAIE1lZGlh
U3RyZWFtQ2VudGVyJiBNZWRpYVN0cmVhbUNlbnRlcjo6cGxhdGZvcm1DZW50ZXIoKQogCiBNZWRp
YVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6TWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIoKQogewor
ICAgIG1fcHJpdmF0ZSA9IE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRl
KCk7CiB9CiAKIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyOjp+TWVkaWFTdHJlYW1DZW50ZXJH
U3RyZWFtZXIoKQogewogfQogCi12b2lkIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyOjp2YWxp
ZGF0ZVJlcXVlc3RDb25zdHJhaW50cyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25DbGll
bnQ+LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3Ry
YWludHM+KQordm9pZCBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6dmFsaWRhdGVSZXF1ZXN0
Q29uc3RyYWludHMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50PiBwcnBDbGll
bnQsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gYXVkaW9Db25zdHJhaW50cywgUGFzc1Jl
ZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiB2aWRlb0NvbnN0cmFpbnRzKQogewotICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQ+IGNsaWVudCA9
IHBycENsaWVudDsKKyAgICBBU1NFUlQoY2xpZW50KTsKKworICAgIC8vIFRPRE86IHZhbGlkYXRl
IGNvbnN0cmFpbnRzIHdpdGggYXZhaWxhYmxlIGRldmljZXMsIHNlZSBidWcgIzEyMzM0NS4KKyAg
ICBVTlVTRURfUEFSQU0oYXVkaW9Db25zdHJhaW50cyk7CisgICAgVU5VU0VEX1BBUkFNKHZpZGVv
Q29uc3RyYWludHMpOworICAgIGNsaWVudC0+Y29uc3RyYWludHNWYWxpZGF0ZWQoKTsKIH0KLSAg
ICAKLXZvaWQgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXI6OmNyZWF0ZU1lZGlhU3RyZWFtKFBh
c3NSZWZQdHI8TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudD4sIFBhc3NSZWZQdHI8TWVkaWFDb25z
dHJhaW50cz4sIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4pCisKK3ZvaWQgTWVkaWFTdHJl
YW1DZW50ZXJHU3RyZWFtZXI6OmNyZWF0ZU1lZGlhU3RyZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJl
YW1DcmVhdGlvbkNsaWVudD4gcHJwUXVlcnlDbGllbnQsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJh
aW50cz4gYXVkaW9Db25zdHJhaW50cywgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiB2aWRl
b0NvbnN0cmFpbnRzKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgUmVmUHRyPE1lZGlh
U3RyZWFtQ3JlYXRpb25DbGllbnQ+IGNsaWVudCA9IHBycFF1ZXJ5Q2xpZW50OworICAgIEFTU0VS
VChjbGllbnQpOworCisgICAgVU5VU0VEX1BBUkFNKGF1ZGlvQ29uc3RyYWludHMpOworICAgIFVO
VVNFRF9QQVJBTSh2aWRlb0NvbnN0cmFpbnRzKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFT
dHJlYW1Tb3VyY2U+PiBhdWRpb1NvdXJjZXM7CisgICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVh
bVNvdXJjZT4+IHZpZGVvU291cmNlczsKKworICAgIGlmIChhdWRpb0NvbnN0cmFpbnRzKSB7Cisg
ICAgICAgIC8vIFRPRE86IHZlcmlmeSBjb25zdHJhaW50cyBhY2NvcmRpbmcgdG8gcmVnaXN0ZXJl
ZAorICAgICAgICAvLyBzb3VyY2VzLiBGb3Igbm93LCB1bmNvbmRpdGlvbmFsbHkgcGljayB0aGUg
Zmlyc3Qgc291cmNlLCBzZWUgYnVnICMxMjMzNDUuCisgICAgICAgIFJlZlB0cjxNZWRpYVN0cmVh
bVNvdXJjZT4gYXVkaW9Tb3VyY2UgPSBtX3ByaXZhdGUtPmZpcnN0U291cmNlKE1lZGlhU3RyZWFt
U291cmNlOjpBdWRpbyk7CisgICAgICAgIGlmIChhdWRpb1NvdXJjZSkgeworICAgICAgICAgICAg
YXVkaW9Tb3VyY2UtPnJlc2V0KCk7CisgICAgICAgICAgICBhdWRpb1NvdXJjZS0+c2V0UmVhZHlT
dGF0ZShNZWRpYVN0cmVhbVNvdXJjZTo6TGl2ZSk7CisgICAgICAgICAgICBhdWRpb1NvdXJjZXMu
YXBwZW5kKGF1ZGlvU291cmNlLnJlbGVhc2UoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAodmlkZW9Db25zdHJhaW50cykgeworICAgICAgICAvLyBUT0RPOiB2ZXJpZnkgY29uc3RyYWlu
dHMgYWNjb3JkaW5nIHRvIHJlZ2lzdGVyZWQKKyAgICAgICAgLy8gc291cmNlcy4gRm9yIG5vdywg
dW5jb25kaXRpb25hbGx5IHBpY2sgdGhlIGZpcnN0IHNvdXJjZSwgc2VlIGJ1ZyAjMTIzMzQ1Lgor
ICAgICAgICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IHZpZGVvU291cmNlID0gbV9wcml2YXRl
LT5maXJzdFNvdXJjZShNZWRpYVN0cmVhbVNvdXJjZTo6VmlkZW8pOworICAgICAgICBpZiAodmlk
ZW9Tb3VyY2UpIHsKKyAgICAgICAgICAgIHZpZGVvU291cmNlLT5yZXNldCgpOworICAgICAgICAg
ICAgdmlkZW9Tb3VyY2UtPnNldFJlYWR5U3RhdGUoTWVkaWFTdHJlYW1Tb3VyY2U6OkxpdmUpOwor
ICAgICAgICAgICAgdmlkZW9Tb3VyY2VzLmFwcGVuZCh2aWRlb1NvdXJjZS5yZWxlYXNlKCkpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgY2xpZW50LT5kaWRDcmVhdGVTdHJlYW0oTWVkaWFTdHJl
YW1EZXNjcmlwdG9yOjpjcmVhdGUoYXVkaW9Tb3VyY2VzLCB2aWRlb1NvdXJjZXMsIE1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcjo6SXNOb3RFbmRlZCkpOwogfQogCiBib29sIE1lZGlhU3RyZWFtQ2VudGVy
R1N0cmVhbWVyOjpnZXRNZWRpYVN0cmVhbVRyYWNrU291cmNlcyhQYXNzUmVmUHRyPE1lZGlhU3Ry
ZWFtVHJhY2tTb3VyY2VzUmVxdWVzdENsaWVudD4pCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlm
IC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkg
JiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVy
R1N0cmVhbWVyLmgKaW5kZXggNGU0MzVlYy4uNDU4ODY4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0
cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsMjAgKzMzLDE3IEBACiAjaWZuZGVmIE1l
ZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyX2gKICNkZWZpbmUgTWVkaWFTdHJlYW1DZW50ZXJHU3Ry
ZWFtZXJfaAogCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyNpZiBFTkFCTEUoTUVESUFfU1RS
RUFNKSAmJiBVU0UoR1NUUkVBTUVSKQogCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1DZW50ZXIuaCIK
IAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgTWVkaWFTdHJlYW1EZXNjcmlw
dG9yOwotY2xhc3MgTWVkaWFTdHJlYW1Tb3VyY2U7Ci1jbGFzcyBNZWRpYVN0cmVhbVNvdXJjZXNR
dWVyeUNsaWVudDsKK2NsYXNzIE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcjsKIAot
Y2xhc3MgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIgOiBwdWJsaWMgTWVkaWFTdHJlYW1DZW50
ZXIgeworY2xhc3MgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIgRklOQUwgOiBwdWJsaWMgTWVk
aWFTdHJlYW1DZW50ZXIgewogcHVibGljOgogICAgIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVy
KCk7CiAgICAgfk1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyKCk7CkBAIC01MywxMCArNTEsMTMg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB2YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50cyhQ
YXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQ+LCBQYXNzUmVmUHRyPE1lZGlhQ29u
c3RyYWludHM+IGF1ZGlvQ29uc3RyYWludHMsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4g
dmlkZW9Db25zdHJhaW50cyk7CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZU1lZGlhU3RyZWFtKFBh
c3NSZWZQdHI8TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudD4sIFBhc3NSZWZQdHI8TWVkaWFDb25z
dHJhaW50cz4gYXVkaW9Db25zdHJhaW50cywgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiB2
aWRlb0NvbnN0cmFpbnRzKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0TWVkaWFTdHJlYW1UcmFja1Nv
dXJjZXMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrU291cmNlc1JlcXVlc3RDbGllbnQ+KSBP
VkVSUklERTsKKworcHJpdmF0ZToKKyAgICBPd25QdHI8TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRl
R1N0cmVhbWVyPiBtX3ByaXZhdGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNl
bmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJF
QU0pICYmIFVTRShHU1RSRUFNRVIpCiAKICNlbmRpZiAvLyBNZWRpYVN0cmVhbUNlbnRlckdTdHJl
YW1lcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlclBy
aXZhdGVHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0
OTliZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAt
MCwwICsxLDE0MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgQ29sbGFib3JhIEx0ZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RS
RUFNRVIpICYmIGRlZmluZWQoR1NUX0FQSV9WRVJTSU9OXzEpCisKKyNpbmNsdWRlICJNZWRpYVN0
cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgIkNlbnRyYWxQaXBlbGlu
ZVVuaXQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJVdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDxnc3Qv
Z3N0Lmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZKHdlYmtpdF9tZWRpYV9zdHJlYW1f
ZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X21lZGlhX3N0cmVhbV9kZWJ1
ZworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBHUmVmUHRyPEdzdEVsZW1lbnQ+IGZp
bmREZXZpY2VTb3VyY2UoY29uc3QgY2hhciogZWxlbWVudE5hbWUpCit7CisgICAgR1JlZlB0cjxH
c3RFbGVtZW50PiBlbGVtZW50ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKGVsZW1lbnROYW1l
LCBudWxscHRyKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgR3N0Q2hpbGRQcm94eSogY2hpbGRQcm94eSA9IEdTVF9DSElMRF9QUk9YWShlbGVtZW50
LmdldCgpKTsKKyAgICBpZiAoIWNoaWxkUHJveHkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3RhdGVDaGFuZ2VSZXN1bHQgPSBnc3RfZWxlbWVu
dF9zZXRfc3RhdGUoZWxlbWVudC5nZXQoKSwgR1NUX1NUQVRFX1JFQURZKTsKKyAgICBpZiAoc3Rh
dGVDaGFuZ2VSZXN1bHQgIT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gZGV2aWNlU291cmNlOworICAg
IGlmIChnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkcmVuX2NvdW50KGNoaWxkUHJveHkpKQorICAg
ICAgICBkZXZpY2VTb3VyY2UgPSBhZG9wdEdSZWYoR1NUX0VMRU1FTlQoZ3N0X2NoaWxkX3Byb3h5
X2dldF9jaGlsZF9ieV9pbmRleChjaGlsZFByb3h5LCAwKSkpOworCisgICAgZ3N0X2VsZW1lbnRf
c2V0X3N0YXRlKGVsZW1lbnQuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKKyAgICByZXR1cm4gZGV2
aWNlU291cmNlOworfQorCitzdGF0aWMgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlR1N0cmVhbWVy
PiBwcm9iZVNvdXJjZShHc3RFbGVtZW50KiBzb3VyY2UsIE1lZGlhU3RyZWFtU291cmNlOjpUeXBl
IHR5cGUpCit7CisgICAgLy8gRklYTUU6IGdzdHJlYW1lciAxLjAgZG9lc24ndCBoYXZlIGFuIGVx
dWl2YWxlbnQgdG8gR3N0UHJvcGVydHlQcm9iZSwKKyAgICAvLyBzbyB3ZSBkb24ndCBzdXBwb3J0
IGNob29zaW5nIGEgcGFydGljdWxhciBkZXZpY2UgeWV0LgorICAgIC8vIHNlZSBodHRwczovL2J1
Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc4NDAyCisKKyAgICBHc3RFbGVtZW50
RmFjdG9yeSogZWxlbWVudEZhY3RvcnkgPSBnc3RfZWxlbWVudF9nZXRfZmFjdG9yeShzb3VyY2Up
OworICAgIEdPd25QdHI8Z2NoYXI+IGZhY3RvcnlOYW1lKGdzdF9lbGVtZW50X2dldF9uYW1lKGVs
ZW1lbnRGYWN0b3J5KSk7CisgICAgU3RyaW5nIHN0ckZhY3RvcnlOYW1lKGZhY3RvcnlOYW1lLmdl
dCgpKTsKKworICAgIFN0cmluZyBkZXZpY2VJZCA9IHN0ckZhY3RvcnlOYW1lOworICAgIGRldmlj
ZUlkLmFwcGVuZCgiO2RlZmF1bHQiKTsKKworICAgIEdPd25QdHI8Z2NoYXI+IGRldmljZU5hbWU7
CisgICAgZ19vYmplY3RfZ2V0KHNvdXJjZSwgImRldmljZS1uYW1lIiwgJmRldmljZU5hbWUub3V0
UHRyKCksIG51bGxwdHIpOworCisgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlR1N0cmVhbWVy
PiBtZWRpYVN0cmVhbVNvdXJjZSA9IGFkb3B0UmVmKG5ldyBNZWRpYVN0cmVhbVNvdXJjZUdTdHJl
YW1lcihkZXZpY2VJZCwgZGV2aWNlTmFtZS5nZXQoKSwgdHlwZSwgImRlZmF1bHQiLCBzdHJGYWN0
b3J5TmFtZSkpOworCisgICAgLy8gVE9ETzogZmlsbCBzb3VyY2UgY2FwYWJpbGl0aWVzIGFuZCBz
dGF0ZXMuCisKKyAgICByZXR1cm4gbWVkaWFTdHJlYW1Tb3VyY2U7Cit9CisKK01lZGlhU3RyZWFt
Q2VudGVyUHJpdmF0ZUdTdHJlYW1lcjo6TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVy
KCkKK3sKKyAgICBpbml0aWFsaXplR1N0cmVhbWVyKCk7CisKKyAgICBzdGF0aWMgYm9vbCBkZWJ1
Z0NhdGVnb3J5UmVnaXN0ZXJlZCA9IGZhbHNlOworICAgIGlmICghZGVidWdDYXRlZ29yeVJlZ2lz
dGVyZWQpIHsKKyAgICAgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X21lZGlhX3N0
cmVhbV9kZWJ1ZywgIndlYmtpdG1lZGlhc3RyZWFtIiwgMCwgIldlYktpdCBtZWRpYXN0cmVhbSIp
OworICAgICAgICBkZWJ1Z0NhdGVnb3J5UmVnaXN0ZXJlZCA9IHRydWU7CisgICAgfQorCisgICAg
TE9HX01FRElBX01FU1NBR0UoIkRpc2NvdmVyaW5nIG1lZGlhIHNvdXJjZSBkZXZpY2VzIik7Cisg
ICAgZGlzY292ZXJEZXZpY2VzKE1lZGlhU3RyZWFtU291cmNlOjpBdWRpbyk7CisgICAgZGlzY292
ZXJEZXZpY2VzKE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbyk7Cit9CisKK3ZvaWQgTWVkaWFTdHJl
YW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyOjpkaXNjb3ZlckRldmljZXMoTWVkaWFTdHJlYW1Tb3Vy
Y2U6OlR5cGUgdHlwZSkKK3sKKyAgICBjb25zdCBjaGFyKiBlbGVtZW50TmFtZSA9IG51bGxwdHI7
CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW86
CisgICAgICAgIGVsZW1lbnROYW1lID0gImF1dG9hdWRpb3NyYyI7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OlZpZGVvOgorICAgICAgICBlbGVtZW50TmFtZSA9
ICJhdXRvdmlkZW9zcmMiOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGRl
dmljZVNvdXJjZSA9IGZpbmREZXZpY2VTb3VyY2UoZWxlbWVudE5hbWUpOworICAgIGlmICghZGV2
aWNlU291cmNlKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3Vy
Y2VHU3RyZWFtZXI+IHNvdXJjZSA9IHByb2JlU291cmNlKGRldmljZVNvdXJjZS5nZXQoKSwgdHlw
ZSk7CisgICAgU3RyaW5nIGlkID0gc291cmNlLT5pZCgpOworCisgICAgTWVkaWFTdHJlYW1Tb3Vy
Y2VHU3RyZWFtZXJNYXA6Oml0ZXJhdG9yIHNvdXJjZUl0ZXJhdG9yID0gbV9zb3VyY2VNYXAuZmlu
ZChpZCk7CisgICAgaWYgKHNvdXJjZUl0ZXJhdG9yID09IG1fc291cmNlTWFwLmVuZCgpKQorICAg
ICAgICBtX3NvdXJjZU1hcC5hZGQoaWQsIHNvdXJjZSk7CisKKyAgICBMT0dfTUVESUFfTUVTU0FH
RSgiUmVnaXN0ZXJpbmcgc291cmNlIGZhY3RvcnkgZm9yIHNvdXJjZSB3aXRoIGlkPSVzIiwgaWQu
YXNjaWkoKS5kYXRhKCkpOworICAgIENlbnRyYWxQaXBlbGluZVVuaXQmIGNwdSA9IENlbnRyYWxQ
aXBlbGluZVVuaXQ6Omluc3RhbmNlKCk7CisgICAgY3B1LnJlZ2lzdGVyU291cmNlRmFjdG9yeSh0
aGlzLCBpZCk7Cit9CisKK1Bhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IE1lZGlhU3RyZWFt
Q2VudGVyUHJpdmF0ZUdTdHJlYW1lcjo6Zmlyc3RTb3VyY2UoTWVkaWFTdHJlYW1Tb3VyY2U6OlR5
cGUgdHlwZSkKK3sKKyAgICBmb3IgKGF1dG8gaXRlciA9IG1fc291cmNlTWFwLmJlZ2luKCk7IGl0
ZXIgIT0gbV9zb3VyY2VNYXAuZW5kKCk7ICsraXRlcikgeworICAgICAgICBSZWZQdHI8TWVkaWFT
dHJlYW1Tb3VyY2U+IHNvdXJjZSA9IGl0ZXItPnZhbHVlOworICAgICAgICBpZiAoc291cmNlLT50
eXBlKCkgPT0gdHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzb3VyY2U7CisgICAgfQorCisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpICYmIGRlZmluZWQoR1NUX0FQ
SV9WRVJTSU9OXzEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50
ZXJQcml2YXRlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZjBjMzkwZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIuaApAQCAt
MCwwICsxLDUyIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBDb2xsYWJvcmEgTHRkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworCisj
aWZuZGVmIE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcl9oCisjZGVmaW5lIE1lZGlh
U3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcl9oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdTVF9BUElfVkVSU0lPTl8xKQorCisjaW5j
bHVkZSAiTWVkaWFTdHJlYW1Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1lZGlhU3RyZWFtQ2VudGVy
UHJpdmF0ZUdTdHJlYW1lciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TWVkaWFT
dHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBNZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIoKSk7Cisg
ICAgfQorCisgICAgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4gZmlyc3RTb3VyY2UoTWVk
aWFTdHJlYW1Tb3VyY2U6OlR5cGUpOworCitwcml2YXRlOgorICAgIE1lZGlhU3RyZWFtQ2VudGVy
UHJpdmF0ZUdTdHJlYW1lcigpOworCisgICAgdm9pZCBkaXNjb3ZlckRldmljZXMoTWVkaWFTdHJl
YW1Tb3VyY2U6OlR5cGUpOworCisgICAgTWVkaWFTdHJlYW1Tb3VyY2VHU3RyZWFtZXJNYXAgbV9z
b3VyY2VNYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdTVF9BUElfVkVS
U0lPTl8xKQorCisjZW5kaWYgLy8gTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9NZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtU291cmNlR1N0cmVhbWVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU2MTIyYgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVh
bVNvdXJjZUdTdHJlYW1lci5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChD
KSAyMDEzIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqLworCisjaWZuZGVmIE1lZGlhU3RyZWFtU291cmNlR1N0cmVhbWVyX2gKKyNk
ZWZpbmUgTWVkaWFTdHJlYW1Tb3VyY2VHU3RyZWFtZXJfaAorCisjaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkgJiYgVVNFKEdTVFJFQU1FUikgJiYgZGVmaW5lZChHU1RfQVBJX1ZFUlNJT05fMSkKKwor
I2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJj
ZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1lZGlhU3RyZWFtU291cmNlQ2FwYWJpbGl0
aWVzOworCitjbGFzcyBNZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lciBGSU5BTCA6IHB1YmxpYyBN
ZWRpYVN0cmVhbVNvdXJjZSB7CitwdWJsaWM6CitNZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lcihj
b25zdCBBdG9taWNTdHJpbmcmIGlkLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIE1lZGlhU3Ry
ZWFtU291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgZGV2aWNlLCBjb25zdCBTdHJpbmcm
IGZhY3RvcnlLZXkpCisgICAgOiBNZWRpYVN0cmVhbVNvdXJjZShpZCwgdHlwZSwgbmFtZSkKKyAg
ICAsIG1fZmFjdG9yeUtleShmYWN0b3J5S2V5KQorICAgICwgbV9kZXZpY2UoZGV2aWNlKQorICAg
IHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5NZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lcigpIHsg
fQorCisgICAgdmlydHVhbCBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2VDYXBhYmlsaXRpZXM+IGNh
cGFiaWxpdGllcygpIGNvbnN0IHsgcmV0dXJuIG1fY2FwYWJpbGl0aWVzOyB9CisgICAgdmlydHVh
bCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcyYgc3RhdGVzKCkgeyByZXR1cm4gbV9jdXJy
ZW50U3RhdGVzOyB9CisKKyAgICBjb25zdCBTdHJpbmcmIGZhY3RvcnlLZXkoKSBjb25zdCB7IHJl
dHVybiBtX2ZhY3RvcnlLZXk7IH0KKyAgICBjb25zdCBTdHJpbmcmIGRldmljZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGV2aWNlOyB9CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291
cmNlQ2FwYWJpbGl0aWVzPiBtX2NhcGFiaWxpdGllczsKKyAgICBNZWRpYVN0cmVhbVNvdXJjZVN0
YXRlcyBtX2N1cnJlbnRTdGF0ZXM7CisKKyAgICBTdHJpbmcgbV9mYWN0b3J5S2V5OworICAgIFN0
cmluZyBtX2RldmljZTsKK307CisKK3R5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxNZWRp
YVN0cmVhbVNvdXJjZUdTdHJlYW1lcj4+IE1lZGlhU3RyZWFtU291cmNlR1N0cmVhbWVyTWFwOwor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFN
KSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdTVF9BUElfVkVSU0lPTl8xKQorCisjZW5k
aWYgLy8gTWVkaWFTdHJlYW1Tb3VyY2VHU3RyZWFtZXJfaAotLSAKMS44LjQucmMz
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215527</attachid>
            <date>2013-10-30 11:03:32 -0700</date>
            <delta_ts>2013-10-31 02:08:51 -0700</delta_ts>
            <desc>MediaStreamCenter and minimal CentralPipelineUnit</desc>
            <filename>MediaStreamCenter-and-minimal-CentralPipelineUnit.patch</filename>
            <type>text/plain</type>
            <size>28506</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBlMjE2ZWU1NjMzNzJhMGYxYzVjNTNjMzQ1ZmZmMTk5YjM2NDljMGIwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUaHUsIDE3IE9jdCAyMDEzIDE3OjM0OjQzICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
TWVkaWFTdHJlYW1DZW50ZXIgYW5kIG1pbmltYWwgQ2VudHJhbFBpcGVsaW5lVW5pdAoKLS0tCiBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1OCAr
KysrKysrKysKIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAg
ICAgIHwgICA1ICsKIC4uLi9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5p
dC5jcHAgIHwgIDkwICsrKysrKysrKysrKysrCiAuLi4vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0Nl
bnRyYWxQaXBlbGluZVVuaXQuaCAgICB8ICA3OCArKysrKysrKysrKysKIC4uLi9nc3RyZWFtZXIv
TWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuY3BwICAgICAgIHwgIDU4ICsrKysrKystLQogLi4u
L2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5oICAgICAgICAgfCAgMTUgKy0t
CiAuLi4vTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCAgICAgICAgICB8IDEz
NiArKysrKysrKysrKysrKysrKysrKysKIC4uLi9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJQ
cml2YXRlR1N0cmVhbWVyLmggIHwgIDUyICsrKysrKysrCiAuLi4vZ3N0cmVhbWVyL01lZGlhU3Ry
ZWFtU291cmNlR1N0cmVhbWVyLmggICAgICAgICB8ICA2NCArKysrKysrKysrCiA5IGZpbGVzIGNo
YW5nZWQsIDUzOSBpbnNlcnRpb25zKCspLCAxNyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJh
bFBpcGVsaW5lVW5pdC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5pdC5oCiBjcmVhdGUg
bW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L01lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJl
YW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1Tb3VyY2VHU3Ry
ZWFtZXIuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1NWNlYTgyLi43ODY3ZDFiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNjEgQEAKKzIwMTMtMTAtMzAgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIGJhc2ljIE1lZGlhU3RyZWFtQ2VudGVyIGFu
ZCBDZW50cmFsUGlwZWxpbmVVbml0IGltcGxlbWVudGF0aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMTUwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB2ZXJ5IGJhc2ljIE1lZGlhU3RyZWFt
Q2VudGVyIGlzIGFibGUgdG8gZGV0ZWN0IHRoZSBhdWRpbyBhbmQKKyAgICAgICAgdmlkZW8gc291
cmNlIGRldmljZXMgYW5kIG1ha2UgdGhlbSBhdmFpbGFibGUgdG8gdGhlIHdlYiBwYWdlIHZpYQor
ICAgICAgICB0aGUgZ2V0VXNlck1lZGlhIEFQSS4gUGxheWJhY2sgc3VwcG9ydCB2aWEgYSBkZWRp
Y2F0ZWQKKyAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlIGJhY2tlbmQgd2lsbCBiZSBwcm92aWRl
ZCBpbiBhIGZvbGxvdy11cCBwYXRjaC4KKworICAgICAgICBUaGUgTWVkaWFTdHJlYW1DZW50ZXIg
aW1wbGVtZW50YXRpb24gaXMgY29udGFpbmVkIGluIHRoZQorICAgICAgICBNZWRpYVN0cmVhbUNl
bnRlclByaXZhdGVHU3RyZWFtZXIuIFRoZSBDZW50cmFsUGlwZWxpbmVVbml0IGlzCisgICAgICAg
IG1hbmFnaW5nIHRoZSBwaXBlbGluZSB1c2VkIGZvciBhdWRpby92aWRlbyBjYXB0dXJlIGFuZAor
ICAgICAgICByZW5kZXJpbmcuIEl0IGlzIHVzZWQgYnkgdGhlIE1lZGlhU3RyZWFtQ2VudGVyIHRv
ICh1bilyZWdpc3RlcgorICAgICAgICBzb3VyY2VzIGFuZCBsYXRlciBvbiBpdCB3aWxsIGJlIHVz
ZWQgYnkgdGhlIE1lZGlhUGxheWVyIHRvIG1hbmFnZQorICAgICAgICB0aGUgcmVuZGVyaW5nLgor
CisgICAgICAgIFBhdGNoIGJhc2VkIG9uIHdvcmsgcHJldmlvdXNseSBkb25lIGJ5IEpvbmF0aG9u
IEpvbmdzbWEgPGpvbmF0aG9uLmpvbmdzbWFAY29sbGFib3JhLmNvbT4uCisKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5saXN0LmFtOiBBZGRpbmcgbmV3IGZpbGVzIHRvIHRoZSBidWlsZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5pdC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6bWVzc2FnZUNhbGxiYWNrKTogRnVuY3Rpb24g
Y2FsbGVkIGV2ZXJ5IHRpbWUgYSBtZXNzYWdlCisgICAgICAgIGZyb20gdGhlIEdTdHJlYW1lciBi
dXMgbmVlZHMgdG8gYmUgcHJvY2Vzc2VkLgorICAgICAgICAoV2ViQ29yZTo6Q2VudHJhbFBpcGVs
aW5lVW5pdDo6aW5zdGFuY2UpOiBVdGlsaXR5IGZ1bmN0aW9uIHRvCisgICAgICAgIGFjY2VzcyB0
aGUgQ2VudHJhbFBpcGVsaW5lVW5pdCBzaW5nbGV0b24uCisgICAgICAgIChXZWJDb3JlOjpDZW50
cmFsUGlwZWxpbmVVbml0OjpDZW50cmFsUGlwZWxpbmVVbml0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNlbnRyYWxQaXBlbGluZVVuaXQ6On5DZW50cmFsUGlwZWxpbmVVbml0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNlbnRyYWxQaXBlbGluZVVuaXQ6OmhhbmRsZU1lc3NhZ2UpOiBHc3RNZXNzYWdlCisg
ICAgICAgIGhhbmRsZXIuIEZvciBub3cgb25seSBwcm9jZXNzIGVycm9yIG1lc3NhZ2VzLgorICAg
ICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9DZW50cmFsUGlwZWxpbmVVbml0
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2VudHJhbFBpcGVsaW5lVW5pdDo6U291cmNl
OjpTb3VyY2UpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRp
YVN0cmVhbUNlbnRlckdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVh
bUNlbnRlckdTdHJlYW1lcjo6TWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXI6OnZhbGlkYXRlUmVxdWVzdENvbnN0
cmFpbnRzKToKKyAgICAgICAgRm9yIG5vdyB2YWxpZGF0ZSB1bmNoZWNrZWQgYXVkaW8vdmlkZW8g
Y29uc3RyYWludHMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1l
cjo6Y3JlYXRlTWVkaWFTdHJlYW0pOiBDcmVhdGUgYQorICAgICAgICBtZWRpYXN0cmVhbSB1c2lu
ZyB0aGUgZmlyc3QgYXVkaW8gYW5kIHZpZGVvIGRldmljZSBhdmFpbGFibGUuIFRoaXMKKyAgICAg
ICAgd2lsbCBiZSBpbXByb3ZlZCB3aGVuIGNvbnN0cmFpbnRzIHZhbGlkYXRpb24gaXMgaW1wbGVt
ZW50ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6Z2V0
TWVkaWFTdHJlYW1UcmFja1NvdXJjZXMpOgorICAgICAgICBEbyBub3RoaW5nLCB0aGlzIG1ldGhv
ZCBkb2Vzbid0IHNlZW0gdXNlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpmaW5kRGV2aWNlU291cmNlKTogVGhlIGF1dG97
YXVkaW8sdmlkZW99c3JjIGVsZW1lbnRzIGFyZQorICAgICAgICB3cmFwcGVycyBhcm91bmQgdGhl
IHJlYWwgc3JjIGVsZW1lbnRzLiBUaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZW0gb3V0LgorICAgICAg
ICAoV2ViQ29yZTo6cHJvYmVTb3VyY2UpOiBJbnNwZWN0IGEgc291cmNlIGVsZW1lbnQgKGluY29t
cGxldGVseSBmb3IKKyAgICAgICAgbm93KSBhbmQgcmVnaXN0ZXIgaXQgYXMgYSBuZXcgTWVkaWFT
dHJlYW1Tb3VyY2UuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUNlbnRlclByaXZhdGVH
U3RyZWFtZXI6Ok1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcik6CisgICAgICAgIERp
c2NvdmVyIGxvY2FsIGF1ZGlvL3ZpZGVvIGRldmljZXMgYW5kIHJlZ2lzdGVyIHRoZW0gaW4gdGhl
IENlbnRyYWxQaXBlbGluZVVuaXQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUNlbnRl
clByaXZhdGVHU3RyZWFtZXI6OmRpc2NvdmVyRGV2aWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXI6OmZpcnN0U291cmNlKTogRmluZAorICAg
ICAgICB0aGUgZmlyc3QgcmVnaXN0ZXJlZCBzb3VyY2Ugb2YgdGhlIGdpdmVuIHR5cGUuIFRoaXMg
Y29udmVuaWVuY2UKKyAgICAgICAgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBvbmNlIG1lZGlhIGNv
bnN0cmFpbnRzIGNoZWNraW5nIGhhcyBiZWVuIGltcGxlbWVudGVkLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFt
ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUNlbnRlclByaXZhdGVH
U3RyZWFtZXI6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL01lZGlhU3RyZWFtU291cmNlR1N0cmVhbWVyLmg6IEFkZGVkLgorCiAyMDEzLTEwLTMwICBC
cmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBJREJDdXJzb3JCYWNr
ZW5kTGV2ZWxEQiBzaG91bGQgYmUgbWFkZSBjcm9zcy1wbGF0Zm9ybQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KaW5kZXggZTljZmJmOS4uMzMzMTE5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCkBAIC01NDAyLDggKzU0MDIsMTMgQEAgd2ViY29yZV9wbGF0Zm9ybV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVz
Y3JpcHRpb25EZXNjcmlwdG9yLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL1JUQ1N0YXRzUmVxdWVzdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9SVENWb2lkUmVxdWVzdC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5pdC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5pdC5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVh
bUNlbnRlckdTdHJlYW1lci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5oIFwKKwlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJQcml2
YXRlR1N0cmVhbWVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIuY3BwIFwKKwlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1Tb3VyY2VH
U3RyZWFtZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9EZXZpY2VNb3Rpb25D
bGllbnRNb2NrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9EZXZpY2VNb3Rp
b25DbGllbnRNb2NrLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svRGV2aWNlT3Jp
ZW50YXRpb25DbGllbnRNb2NrLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5pdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5l
VW5pdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg0MmUzNwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9DZW50cmFsUGlwZWxpbmVVbml0LmNwcApAQCAtMCwwICsxLDkwIEBACisvKgorICogIENv
cHlyaWdodCAoQykgMjAxMiBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikgJiYgZGVmaW5lZChHU1RfQVBJ
X1ZFUlNJT05fMSkKKworI2luY2x1ZGUgIkNlbnRyYWxQaXBlbGluZVVuaXQuaCIKKworI2luY2x1
ZGUgIkdTdHJlYW1lclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclZlcnNpb25pbmcu
aCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJr
aXRfbWVkaWFfc3RyZWFtX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF9t
ZWRpYV9zdHJlYW1fZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgZ2Jvb2xl
YW4gbWVzc2FnZUNhbGxiYWNrKEdzdEJ1cyosIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIENlbnRyYWxQ
aXBlbGluZVVuaXQqIGNwdSkKK3sKKyAgICByZXR1cm4gY3B1LT5oYW5kbGVNZXNzYWdlKG1lc3Nh
Z2UpOworfQorCitDZW50cmFsUGlwZWxpbmVVbml0JiBDZW50cmFsUGlwZWxpbmVVbml0OjppbnN0
YW5jZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKENlbnRyYWxQaXBlbGluZVVuaXQsIGluc3RhbmNlLCAoKSk7CisgICAgcmV0dXJuIGlu
c3RhbmNlOworfQorCitDZW50cmFsUGlwZWxpbmVVbml0OjpDZW50cmFsUGlwZWxpbmVVbml0KCkK
K3sKKyAgICBpbml0aWFsaXplR1N0cmVhbWVyKCk7CisKKyAgICBtX3BpcGVsaW5lID0gZ3N0X3Bp
cGVsaW5lX25ldygibWVkaWFzdHJlYW1fcGlwZWxpbmUiKTsKKyAgICBHUmVmUHRyPEdzdEJ1cz4g
YnVzID0gd2Via2l0R3N0UGlwZWxpbmVHZXRCdXMoR1NUX1BJUEVMSU5FKG1fcGlwZWxpbmUuZ2V0
KCkpKTsKKyAgICBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2goYnVzLmdldCgpKTsKKyAgICBnc3Rf
YnVzX3NldF9zeW5jX2hhbmRsZXIoYnVzLmdldCgpLCBnc3RfYnVzX3N5bmNfc2lnbmFsX2hhbmRs
ZXIsIDAsIDApOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoYnVzLmdldCgpLCAic3luYy1tZXNzYWdl
IiwgR19DQUxMQkFDSyhtZXNzYWdlQ2FsbGJhY2spLCB0aGlzKTsKKworICAgIGdzdF9lbGVtZW50
X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUExBWUlORyk7Cit9CisKK0Nl
bnRyYWxQaXBlbGluZVVuaXQ6On5DZW50cmFsUGlwZWxpbmVVbml0KCkKK3sKKyAgICBHUmVmUHRy
PEdzdEJ1cz4gYnVzID0gd2Via2l0R3N0UGlwZWxpbmVHZXRCdXMoR1NUX1BJUEVMSU5FKG1fcGlw
ZWxpbmUuZ2V0KCkpKTsKKyAgICBnc3RfYnVzX3JlbW92ZV9zaWduYWxfd2F0Y2goYnVzLmdldCgp
KTsKK30KKworYm9vbCBDZW50cmFsUGlwZWxpbmVVbml0OjpoYW5kbGVNZXNzYWdlKEdzdE1lc3Nh
Z2UqIG1lc3NhZ2UpCit7CisgICAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpKSB7
CisgICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjogeworICAgICAgICBHT3duUHRyPEdFcnJvcj4g
ZXJyb3I7CisgICAgICAgIEdPd25QdHI8Z2NoYXI+IGRlYnVnOworCisgICAgICAgIGdzdF9tZXNz
YWdlX3BhcnNlX2Vycm9yKG1lc3NhZ2UsICZlcnJvci5vdXRQdHIoKSwgJmRlYnVnLm91dFB0cigp
KTsKKyAgICAgICAgRVJST1JfTUVESUFfTUVTU0FHRSgiTWVkaWEgZXJyb3I6ICVkLCAlcyIsIGVy
cm9yLT5jb2RlLCBlcnJvci0+bWVzc2FnZSk7CisgICAgICAgIEdTVF9ERUJVR19CSU5fVE9fRE9U
X0ZJTEVfV0lUSF9UUyhHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1RfREVCVUdfR1JBUEhf
U0hPV19BTEwsICJ3ZWJraXQtbWVkaWFzdHJlYW0uZXJyb3IiKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVE
SUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdTVF9BUElfVkVSU0lPTl8x
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0NlbnRyYWxQaXBlbGluZVVuaXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9DZW50cmFsUGlwZWxpbmVVbml0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNzQ5YzBkZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9DZW50cmFsUGlwZWxpbmVVbml0LmgK
QEAgLTAsMCArMSw3OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgQ29sbGFib3JhIEx0
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMu
TC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisK
KworI2lmbmRlZiBDZW50cmFsUGlwZWxpbmVVbml0X2gKKyNkZWZpbmUgQ2VudHJhbFBpcGVsaW5l
VW5pdF9oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBk
ZWZpbmVkKEdTVF9BUElfVkVSU0lPTl8xKQorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SGFzaC5oPgorCit0eXBlZGVmIHN0cnVjdCBfR3N0RWxlbWVudCBHc3RFbGVtZW50OwordHlwZWRl
ZiBzdHJ1Y3QgX0dzdE1lc3NhZ2UgR3N0TWVzc2FnZTsKK3R5cGVkZWYgc3RydWN0IF9Hc3RQYWQg
R3N0UGFkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBNZWRpYVN0cmVhbVNvdXJjZUdT
dHJlYW1lcjsKKworY2xhc3MgQ2VudHJhbFBpcGVsaW5lVW5pdCB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQ2VudHJhbFBpcGVsaW5lVW5pdCk7Citwcm90ZWN0ZWQ6CisgICAgQ2VudHJhbFBp
cGVsaW5lVW5pdCgpOworcHVibGljOgorICAgIHZpcnR1YWwgfkNlbnRyYWxQaXBlbGluZVVuaXQo
KTsKKworICAgIHN0YXRpYyBDZW50cmFsUGlwZWxpbmVVbml0JiBpbnN0YW5jZSgpOworCisgICAg
Ym9vbCBoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqKTsKKworcHJpdmF0ZToKKyAgICBjbGFzcyBT
b3VyY2UgeworICAgIHB1YmxpYzoKKyAgICAgICAgU291cmNlKCkKKyAgICAgICAgICAgIDogbV9y
ZW1vdmVXaGVuTm90VXNlZCh0cnVlKQorICAgICAgICB7IH0KKworICAgICAgICBTb3VyY2UoR1Jl
ZlB0cjxHc3RFbGVtZW50PiBzb3VyY2VFbGVtZW50LCBHUmVmUHRyPEdzdFBhZD4gc291cmNlUGFk
LCBib29sIHJlbW92ZVdoZW5Ob3RVc2VkKQorICAgICAgICAgICAgOiBtX3NvdXJjZUVsZW1lbnQo
c291cmNlRWxlbWVudCkKKyAgICAgICAgICAgICwgbV9zb3VyY2VQYWQoc291cmNlUGFkKQorICAg
ICAgICAgICAgLCBtX3JlbW92ZVdoZW5Ob3RVc2VkKHJlbW92ZVdoZW5Ob3RVc2VkKQorICAgICAg
ICB7IH0KKworICAgICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fc291cmNlRWxlbWVudDsKKyAg
ICAgICAgR1JlZlB0cjxHc3RQYWQ+IG1fc291cmNlUGFkOworICAgICAgICBib29sIG1fcmVtb3Zl
V2hlbk5vdFVzZWQ7CisgICAgfTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFNvdXJj
ZT4gUGlwZWxpbmVNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBTb3Vy
Y2VJZExvb2t1cE1hcDsKKworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9waXBlbGluZTsKKyAg
ICBQaXBlbGluZU1hcCBtX3BpcGVsaW5lTWFwOworICAgIFNvdXJjZUlkTG9va3VwTWFwIG1fc291
cmNlSWRMb29rdXBNYXA7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFN
KSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdTVF9BUElfVkVSU0lPTl8xKQorCisjZW5k
aWYgLy8gQ2VudHJhbFBpcGVsaW5lVW5pdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlh
U3RyZWFtQ2VudGVyR1N0cmVhbWVyLmNwcAppbmRleCAxNmE4NmE5Li5kMmI2ZTdiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFT
dHJlYW1DZW50ZXJHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5jcHAKQEAgLTEs
NiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsMTUgKzMy
LDE1IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0p
CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikKIAogI2luY2x1ZGUg
Ik1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmgiCiAKKyNpbmNsdWRlICJNZWRpYVN0cmVhbUNl
bnRlclByaXZhdGVHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbUNyZWF0aW9uQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCi0jaW5jbHVkZSAiTWVk
aWFTdHJlYW1Tb3VyY2VDYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJj
ZS5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdENsaWVudC5oIgot
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTMsMjggKzU0LDY1IEBAIE1lZGlhU3RyZWFtQ2Vu
dGVyJiBNZWRpYVN0cmVhbUNlbnRlcjo6cGxhdGZvcm1DZW50ZXIoKQogCiBNZWRpYVN0cmVhbUNl
bnRlckdTdHJlYW1lcjo6TWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIoKQogeworICAgIG1fcHJp
dmF0ZSA9IE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKCk7CiB9CiAK
IE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyOjp+TWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIo
KQogewogfQogCi12b2lkIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyOjp2YWxpZGF0ZVJlcXVl
c3RDb25zdHJhaW50cyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQ+LCBQYXNz
UmVmUHRyPE1lZGlhQ29uc3RyYWludHM+LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+KQor
dm9pZCBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6dmFsaWRhdGVSZXF1ZXN0Q29uc3RyYWlu
dHMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50PiBwcnBDbGllbnQsIFBhc3NS
ZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gYXVkaW9Db25zdHJhaW50cywgUGFzc1JlZlB0cjxNZWRp
YUNvbnN0cmFpbnRzPiB2aWRlb0NvbnN0cmFpbnRzKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQ+IGNsaWVudCA9IHBycENsaWVu
dDsKKyAgICBBU1NFUlQoY2xpZW50KTsKKworICAgIC8vIFRPRE86IHZhbGlkYXRlIGNvbnN0cmFp
bnRzIHdpdGggYXZhaWxhYmxlIGRldmljZXMsIHNlZSBidWcgIzEyMzM0NS4KKyAgICBVTlVTRURf
UEFSQU0oYXVkaW9Db25zdHJhaW50cyk7CisgICAgVU5VU0VEX1BBUkFNKHZpZGVvQ29uc3RyYWlu
dHMpOworICAgIGNsaWVudC0+Y29uc3RyYWludHNWYWxpZGF0ZWQoKTsKIH0KLSAgICAKLXZvaWQg
TWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXI6OmNyZWF0ZU1lZGlhU3RyZWFtKFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudD4sIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4s
IFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4pCisKK3ZvaWQgTWVkaWFTdHJlYW1DZW50ZXJH
U3RyZWFtZXI6OmNyZWF0ZU1lZGlhU3RyZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1DcmVhdGlv
bkNsaWVudD4gcHJwUXVlcnlDbGllbnQsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gYXVk
aW9Db25zdHJhaW50cywgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiB2aWRlb0NvbnN0cmFp
bnRzKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtQ3Jl
YXRpb25DbGllbnQ+IGNsaWVudCA9IHBycFF1ZXJ5Q2xpZW50OworICAgIEFTU0VSVChjbGllbnQp
OworCisgICAgVU5VU0VEX1BBUkFNKGF1ZGlvQ29uc3RyYWludHMpOworICAgIFVOVVNFRF9QQVJB
TSh2aWRlb0NvbnN0cmFpbnRzKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1Tb3Vy
Y2U+PiBhdWRpb1NvdXJjZXM7CisgICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4+
IHZpZGVvU291cmNlczsKKworICAgIGlmIChhdWRpb0NvbnN0cmFpbnRzKSB7CisgICAgICAgIC8v
IFRPRE86IHZlcmlmeSBjb25zdHJhaW50cyBhY2NvcmRpbmcgdG8gcmVnaXN0ZXJlZAorICAgICAg
ICAvLyBzb3VyY2VzLiBGb3Igbm93LCB1bmNvbmRpdGlvbmFsbHkgcGljayB0aGUgZmlyc3Qgc291
cmNlLCBzZWUgYnVnICMxMjMzNDUuCisgICAgICAgIFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4g
YXVkaW9Tb3VyY2UgPSBtX3ByaXZhdGUtPmZpcnN0U291cmNlKE1lZGlhU3RyZWFtU291cmNlOjpB
dWRpbyk7CisgICAgICAgIGlmIChhdWRpb1NvdXJjZSkgeworICAgICAgICAgICAgYXVkaW9Tb3Vy
Y2UtPnJlc2V0KCk7CisgICAgICAgICAgICBhdWRpb1NvdXJjZS0+c2V0UmVhZHlTdGF0ZShNZWRp
YVN0cmVhbVNvdXJjZTo6TGl2ZSk7CisgICAgICAgICAgICBhdWRpb1NvdXJjZXMuYXBwZW5kKGF1
ZGlvU291cmNlLnJlbGVhc2UoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodmlkZW9D
b25zdHJhaW50cykgeworICAgICAgICAvLyBUT0RPOiB2ZXJpZnkgY29uc3RyYWludHMgYWNjb3Jk
aW5nIHRvIHJlZ2lzdGVyZWQKKyAgICAgICAgLy8gc291cmNlcy4gRm9yIG5vdywgdW5jb25kaXRp
b25hbGx5IHBpY2sgdGhlIGZpcnN0IHNvdXJjZSwgc2VlIGJ1ZyAjMTIzMzQ1LgorICAgICAgICBS
ZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IHZpZGVvU291cmNlID0gbV9wcml2YXRlLT5maXJzdFNv
dXJjZShNZWRpYVN0cmVhbVNvdXJjZTo6VmlkZW8pOworICAgICAgICBpZiAodmlkZW9Tb3VyY2Up
IHsKKyAgICAgICAgICAgIHZpZGVvU291cmNlLT5yZXNldCgpOworICAgICAgICAgICAgdmlkZW9T
b3VyY2UtPnNldFJlYWR5U3RhdGUoTWVkaWFTdHJlYW1Tb3VyY2U6OkxpdmUpOworICAgICAgICAg
ICAgdmlkZW9Tb3VyY2VzLmFwcGVuZCh2aWRlb1NvdXJjZS5yZWxlYXNlKCkpOworICAgICAgICB9
CisgICAgfQorCisgICAgY2xpZW50LT5kaWRDcmVhdGVTdHJlYW0oTWVkaWFTdHJlYW1EZXNjcmlw
dG9yOjpjcmVhdGUoYXVkaW9Tb3VyY2VzLCB2aWRlb1NvdXJjZXMsIE1lZGlhU3RyZWFtRGVzY3Jp
cHRvcjo6SXNOb3RFbmRlZCkpOwogfQogCiBib29sIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVy
OjpnZXRNZWRpYVN0cmVhbVRyYWNrU291cmNlcyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tT
b3VyY2VzUmVxdWVzdENsaWVudD4pCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJM
RShNRURJQV9TVFJFQU0pCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdT
VFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVy
LmgKaW5kZXggNGU0MzVlYy4uNDU4ODY4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlh
U3RyZWFtQ2VudGVyR1N0cmVhbWVyLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsMjAgKzMzLDE3IEBACiAjaWZuZGVmIE1lZGlhU3RyZWFt
Q2VudGVyR1N0cmVhbWVyX2gKICNkZWZpbmUgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXJfaAog
Ci0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBV
U0UoR1NUUkVBTUVSKQogCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1DZW50ZXIuaCIKIAogI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOwotY2xh
c3MgTWVkaWFTdHJlYW1Tb3VyY2U7Ci1jbGFzcyBNZWRpYVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVu
dDsKK2NsYXNzIE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcjsKIAotY2xhc3MgTWVk
aWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIgOiBwdWJsaWMgTWVkaWFTdHJlYW1DZW50ZXIgeworY2xh
c3MgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIgRklOQUwgOiBwdWJsaWMgTWVkaWFTdHJlYW1D
ZW50ZXIgewogcHVibGljOgogICAgIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyKCk7CiAgICAg
fk1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyKCk7CkBAIC01MywxMCArNTEsMTMgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCB2YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50cyhQYXNzUmVmUHRy
PE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQ+LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+
IGF1ZGlvQ29uc3RyYWludHMsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gdmlkZW9Db25z
dHJhaW50cyk7CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZU1lZGlhU3RyZWFtKFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudD4sIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4g
YXVkaW9Db25zdHJhaW50cywgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiB2aWRlb0NvbnN0
cmFpbnRzKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0TWVkaWFTdHJlYW1UcmFja1NvdXJjZXMoUGFz
c1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrU291cmNlc1JlcXVlc3RDbGllbnQ+KSBPVkVSUklERTsK
KworcHJpdmF0ZToKKyAgICBPd25QdHI8TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVy
PiBtX3ByaXZhdGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBF
TkFCTEUoTUVESUFfU1RSRUFNKQorI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVT
RShHU1RSRUFNRVIpCiAKICNlbmRpZiAvLyBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcl9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3Ry
ZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNzRkNDYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDEz
NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpICYm
IGRlZmluZWQoR1NUX0FQSV9WRVJTSU9OXzEpCisKKyNpbmNsdWRlICJNZWRpYVN0cmVhbUNlbnRl
clByaXZhdGVHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgIkNlbnRyYWxQaXBlbGluZVVuaXQuaCIK
KyNpbmNsdWRlICJHU3RyZWFtZXJVdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+Cisj
aW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZKHdlYmtpdF9tZWRpYV9zdHJlYW1fZGVidWcpOwor
I2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X21lZGlhX3N0cmVhbV9kZWJ1ZworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBHUmVmUHRyPEdzdEVsZW1lbnQ+IGZpbmREZXZpY2VT
b3VyY2UoY29uc3QgY2hhciogZWxlbWVudE5hbWUpCit7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50
PiBlbGVtZW50ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKGVsZW1lbnROYW1lLCBudWxscHRy
KTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgR3N0
Q2hpbGRQcm94eSogY2hpbGRQcm94eSA9IEdTVF9DSElMRF9QUk9YWShlbGVtZW50LmdldCgpKTsK
KyAgICBpZiAoIWNoaWxkUHJveHkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgR3N0
U3RhdGVDaGFuZ2VSZXR1cm4gc3RhdGVDaGFuZ2VSZXN1bHQgPSBnc3RfZWxlbWVudF9zZXRfc3Rh
dGUoZWxlbWVudC5nZXQoKSwgR1NUX1NUQVRFX1JFQURZKTsKKyAgICBpZiAoc3RhdGVDaGFuZ2VS
ZXN1bHQgIT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gZGV2aWNlU291cmNlOworICAgIGlmIChnc3Rf
Y2hpbGRfcHJveHlfZ2V0X2NoaWxkcmVuX2NvdW50KGNoaWxkUHJveHkpKQorICAgICAgICBkZXZp
Y2VTb3VyY2UgPSBhZG9wdEdSZWYoR1NUX0VMRU1FTlQoZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGls
ZF9ieV9pbmRleChjaGlsZFByb3h5LCAwKSkpOworCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRl
KGVsZW1lbnQuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKKyAgICByZXR1cm4gZGV2aWNlU291cmNl
OworfQorCitzdGF0aWMgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlR1N0cmVhbWVyPiBwcm9iZVNv
dXJjZShHc3RFbGVtZW50KiBzb3VyY2UsIE1lZGlhU3RyZWFtU291cmNlOjpUeXBlIHR5cGUpCit7
CisgICAgLy8gRklYTUU6IGdzdHJlYW1lciAxLjAgZG9lc24ndCBoYXZlIGFuIGVxdWl2YWxlbnQg
dG8gR3N0UHJvcGVydHlQcm9iZSwKKyAgICAvLyBzbyB3ZSBkb24ndCBzdXBwb3J0IGNob29zaW5n
IGEgcGFydGljdWxhciBkZXZpY2UgeWV0LgorICAgIC8vIHNlZSBodHRwczovL2J1Z3ppbGxhLmdu
b21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc4NDAyCisKKyAgICBHc3RFbGVtZW50RmFjdG9yeSog
ZWxlbWVudEZhY3RvcnkgPSBnc3RfZWxlbWVudF9nZXRfZmFjdG9yeShzb3VyY2UpOworICAgIEdP
d25QdHI8Z2NoYXI+IGZhY3RvcnlOYW1lKGdzdF9lbGVtZW50X2dldF9uYW1lKGVsZW1lbnRGYWN0
b3J5KSk7CisgICAgU3RyaW5nIHN0ckZhY3RvcnlOYW1lKGZhY3RvcnlOYW1lLmdldCgpKTsKKwor
ICAgIFN0cmluZyBkZXZpY2VJZCA9IHN0ckZhY3RvcnlOYW1lOworICAgIGRldmljZUlkLmFwcGVu
ZCgiO2RlZmF1bHQiKTsKKworICAgIEdPd25QdHI8Z2NoYXI+IGRldmljZU5hbWU7CisgICAgZ19v
YmplY3RfZ2V0KHNvdXJjZSwgImRldmljZS1uYW1lIiwgJmRldmljZU5hbWUub3V0UHRyKCksIG51
bGxwdHIpOworCisgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlR1N0cmVhbWVyPiBtZWRpYVN0
cmVhbVNvdXJjZSA9IGFkb3B0UmVmKG5ldyBNZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lcihkZXZp
Y2VJZCwgZGV2aWNlTmFtZS5nZXQoKSwgdHlwZSwgImRlZmF1bHQiLCBzdHJGYWN0b3J5TmFtZSkp
OworCisgICAgLy8gVE9ETzogZmlsbCBzb3VyY2UgY2FwYWJpbGl0aWVzIGFuZCBzdGF0ZXMuCisK
KyAgICByZXR1cm4gbWVkaWFTdHJlYW1Tb3VyY2U7Cit9CisKK01lZGlhU3RyZWFtQ2VudGVyUHJp
dmF0ZUdTdHJlYW1lcjo6TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyKCkKK3sKKyAg
ICBpbml0aWFsaXplR1N0cmVhbWVyKCk7CisKKyAgICBzdGF0aWMgYm9vbCBkZWJ1Z0NhdGVnb3J5
UmVnaXN0ZXJlZCA9IGZhbHNlOworICAgIGlmICghZGVidWdDYXRlZ29yeVJlZ2lzdGVyZWQpIHsK
KyAgICAgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X21lZGlhX3N0cmVhbV9kZWJ1
ZywgIndlYmtpdG1lZGlhc3RyZWFtIiwgMCwgIldlYktpdCBtZWRpYXN0cmVhbSIpOworICAgICAg
ICBkZWJ1Z0NhdGVnb3J5UmVnaXN0ZXJlZCA9IHRydWU7CisgICAgfQorCisgICAgTE9HX01FRElB
X01FU1NBR0UoIkRpc2NvdmVyaW5nIG1lZGlhIHNvdXJjZSBkZXZpY2VzIik7CisgICAgZGlzY292
ZXJEZXZpY2VzKE1lZGlhU3RyZWFtU291cmNlOjpBdWRpbyk7CisgICAgZGlzY292ZXJEZXZpY2Vz
KE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbyk7Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1DZW50ZXJQ
cml2YXRlR1N0cmVhbWVyOjpkaXNjb3ZlckRldmljZXMoTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGUg
dHlwZSkKK3sKKyAgICBjb25zdCBjaGFyKiBlbGVtZW50TmFtZSA9IG51bGxwdHI7CisgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW86CisgICAgICAg
IGVsZW1lbnROYW1lID0gImF1dG9hdWRpb3NyYyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
TWVkaWFTdHJlYW1Tb3VyY2U6OlZpZGVvOgorICAgICAgICBlbGVtZW50TmFtZSA9ICJhdXRvdmlk
ZW9zcmMiOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGRldmljZVNvdXJj
ZSA9IGZpbmREZXZpY2VTb3VyY2UoZWxlbWVudE5hbWUpOworICAgIGlmICghZGV2aWNlU291cmNl
KQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2VHU3RyZWFt
ZXI+IHNvdXJjZSA9IHByb2JlU291cmNlKGRldmljZVNvdXJjZS5nZXQoKSwgdHlwZSk7CisgICAg
U3RyaW5nIGlkID0gc291cmNlLT5pZCgpOworCisgICAgTWVkaWFTdHJlYW1Tb3VyY2VHU3RyZWFt
ZXJNYXA6Oml0ZXJhdG9yIHNvdXJjZUl0ZXJhdG9yID0gbV9zb3VyY2VNYXAuZmluZChpZCk7Cisg
ICAgaWYgKHNvdXJjZUl0ZXJhdG9yID09IG1fc291cmNlTWFwLmVuZCgpKQorICAgICAgICBtX3Nv
dXJjZU1hcC5hZGQoaWQsIHNvdXJjZSk7Cit9CisKK1Bhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3Vy
Y2U+IE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcjo6Zmlyc3RTb3VyY2UoTWVkaWFT
dHJlYW1Tb3VyY2U6OlR5cGUgdHlwZSkKK3sKKyAgICBmb3IgKGF1dG8gaXRlciA9IG1fc291cmNl
TWFwLmJlZ2luKCk7IGl0ZXIgIT0gbV9zb3VyY2VNYXAuZW5kKCk7ICsraXRlcikgeworICAgICAg
ICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IHNvdXJjZSA9IGl0ZXItPnZhbHVlOworICAgICAg
ICBpZiAoc291cmNlLT50eXBlKCkgPT0gdHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzb3VyY2U7
CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpICYm
IGRlZmluZWQoR1NUX0FQSV9WRVJTSU9OXzEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0
cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZjBjMzkwZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlclByaXZhdGVH
U3RyZWFtZXIuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBD
b2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAx
MyBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKi8KKworCisjaWZuZGVmIE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcl9o
CisjZGVmaW5lIE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcl9oCisKKyNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdTVF9BUElfVkVS
U0lPTl8xKQorCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1l
ZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NPd25QdHI8TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyPiBjcmVhdGUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBNZWRpYVN0cmVhbUNlbnRlclByaXZhdGVH
U3RyZWFtZXIoKSk7CisgICAgfQorCisgICAgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4g
Zmlyc3RTb3VyY2UoTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGUpOworCitwcml2YXRlOgorICAgIE1l
ZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcigpOworCisgICAgdm9pZCBkaXNjb3ZlckRl
dmljZXMoTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGUpOworCisgICAgTWVkaWFTdHJlYW1Tb3VyY2VH
U3RyZWFtZXJNYXAgbV9zb3VyY2VNYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBkZWZp
bmVkKEdTVF9BUElfVkVSU0lPTl8xKQorCisjZW5kaWYgLy8gTWVkaWFTdHJlYW1DZW50ZXJQcml2
YXRlR1N0cmVhbWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtU291cmNlR1N0
cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU2MTIyYgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9NZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lci5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisg
KiAgQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIE1lZGlhU3RyZWFtU291cmNl
R1N0cmVhbWVyX2gKKyNkZWZpbmUgTWVkaWFTdHJlYW1Tb3VyY2VHU3RyZWFtZXJfaAorCisjaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikgJiYgZGVmaW5lZChHU1RfQVBJ
X1ZFUlNJT05fMSkKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJN
ZWRpYVN0cmVhbVNvdXJjZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1lZGlhU3RyZWFt
U291cmNlQ2FwYWJpbGl0aWVzOworCitjbGFzcyBNZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lciBG
SU5BTCA6IHB1YmxpYyBNZWRpYVN0cmVhbVNvdXJjZSB7CitwdWJsaWM6CitNZWRpYVN0cmVhbVNv
dXJjZUdTdHJlYW1lcihjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUsIE1lZGlhU3RyZWFtU291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgZGV2aWNl
LCBjb25zdCBTdHJpbmcmIGZhY3RvcnlLZXkpCisgICAgOiBNZWRpYVN0cmVhbVNvdXJjZShpZCwg
dHlwZSwgbmFtZSkKKyAgICAsIG1fZmFjdG9yeUtleShmYWN0b3J5S2V5KQorICAgICwgbV9kZXZp
Y2UoZGV2aWNlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5NZWRpYVN0cmVhbVNvdXJj
ZUdTdHJlYW1lcigpIHsgfQorCisgICAgdmlydHVhbCBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2VD
YXBhYmlsaXRpZXM+IGNhcGFiaWxpdGllcygpIGNvbnN0IHsgcmV0dXJuIG1fY2FwYWJpbGl0aWVz
OyB9CisgICAgdmlydHVhbCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcyYgc3RhdGVzKCkg
eyByZXR1cm4gbV9jdXJyZW50U3RhdGVzOyB9CisKKyAgICBjb25zdCBTdHJpbmcmIGZhY3RvcnlL
ZXkoKSBjb25zdCB7IHJldHVybiBtX2ZhY3RvcnlLZXk7IH0KKyAgICBjb25zdCBTdHJpbmcmIGRl
dmljZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNlOyB9CisKK3ByaXZhdGU6CisgICAgUmVmUHRy
PE1lZGlhU3RyZWFtU291cmNlQ2FwYWJpbGl0aWVzPiBtX2NhcGFiaWxpdGllczsKKyAgICBNZWRp
YVN0cmVhbVNvdXJjZVN0YXRlcyBtX2N1cnJlbnRTdGF0ZXM7CisKKyAgICBTdHJpbmcgbV9mYWN0
b3J5S2V5OworICAgIFN0cmluZyBtX2RldmljZTsKK307CisKK3R5cGVkZWYgSGFzaE1hcDxTdHJp
bmcsIFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lcj4+IE1lZGlhU3RyZWFtU291cmNl
R1N0cmVhbWVyTWFwOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdTVF9BUElfVkVS
U0lPTl8xKQorCisjZW5kaWYgLy8gTWVkaWFTdHJlYW1Tb3VyY2VHU3RyZWFtZXJfaAotLSAKMS44
LjQucmMz
</data>
<flag name="commit-queue"
          id="238401"
          type_id="3"
          status="-"
          setter="gtk-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215634</attachid>
            <date>2013-10-31 02:08:51 -0700</date>
            <delta_ts>2013-11-05 07:11:47 -0800</delta_ts>
            <desc>MediaStreamCenter and minimal CentralPipelineUnit</desc>
            <filename>MediaStreamCenter-and-minimal-CentralPipelineUnit.patch</filename>
            <type>text/plain</type>
            <size>28458</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBmMDFkMjA1MWE2NjAyZmY4ZDUxZWFlNTVjYjVlYjNmNTBiY2Q5Y2E1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUaHUsIDE3IE9jdCAyMDEzIDE3OjM0OjQzICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
TWVkaWFTdHJlYW1DZW50ZXIgYW5kIG1pbmltYWwgQ2VudHJhbFBpcGVsaW5lVW5pdAoKLS0tCiBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1OCAr
KysrKysrKysKIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAg
ICAgIHwgICA1ICsKIC4uLi9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5p
dC5jcHAgIHwgIDkwICsrKysrKysrKysrKysrCiAuLi4vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0Nl
bnRyYWxQaXBlbGluZVVuaXQuaCAgICB8ICA3OCArKysrKysrKysrKysKIC4uLi9nc3RyZWFtZXIv
TWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuY3BwICAgICAgIHwgIDU4ICsrKysrKystLQogLi4u
L2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5oICAgICAgICAgfCAgMTUgKy0t
CiAuLi4vTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCAgICAgICAgICB8IDEz
NiArKysrKysrKysrKysrKysrKysrKysKIC4uLi9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJQ
cml2YXRlR1N0cmVhbWVyLmggIHwgIDUyICsrKysrKysrCiAuLi4vZ3N0cmVhbWVyL01lZGlhU3Ry
ZWFtU291cmNlR1N0cmVhbWVyLmggICAgICAgICB8ICA2NCArKysrKysrKysrCiA5IGZpbGVzIGNo
YW5nZWQsIDUzOSBpbnNlcnRpb25zKCspLCAxNyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJh
bFBpcGVsaW5lVW5pdC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5pdC5oCiBjcmVhdGUg
bW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L01lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJl
YW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1Tb3VyY2VHU3Ry
ZWFtZXIuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4MWU4MWVhLi5lNTZlOTk1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNjEgQEAKKzIwMTMtMTAtMzAgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIGJhc2ljIE1lZGlhU3RyZWFtQ2VudGVyIGFu
ZCBDZW50cmFsUGlwZWxpbmVVbml0IGltcGxlbWVudGF0aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMTUwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB2ZXJ5IGJhc2ljIE1lZGlhU3RyZWFt
Q2VudGVyIGlzIGFibGUgdG8gZGV0ZWN0IHRoZSBhdWRpbyBhbmQKKyAgICAgICAgdmlkZW8gc291
cmNlIGRldmljZXMgYW5kIG1ha2UgdGhlbSBhdmFpbGFibGUgdG8gdGhlIHdlYiBwYWdlIHZpYQor
ICAgICAgICB0aGUgZ2V0VXNlck1lZGlhIEFQSS4gUGxheWJhY2sgc3VwcG9ydCB2aWEgYSBkZWRp
Y2F0ZWQKKyAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlIGJhY2tlbmQgd2lsbCBiZSBwcm92aWRl
ZCBpbiBhIGZvbGxvdy11cCBwYXRjaC4KKworICAgICAgICBUaGUgTWVkaWFTdHJlYW1DZW50ZXIg
aW1wbGVtZW50YXRpb24gaXMgY29udGFpbmVkIGluIHRoZQorICAgICAgICBNZWRpYVN0cmVhbUNl
bnRlclByaXZhdGVHU3RyZWFtZXIuIFRoZSBDZW50cmFsUGlwZWxpbmVVbml0IGlzCisgICAgICAg
IG1hbmFnaW5nIHRoZSBwaXBlbGluZSB1c2VkIGZvciBhdWRpby92aWRlbyBjYXB0dXJlIGFuZAor
ICAgICAgICByZW5kZXJpbmcuIEl0IGlzIHVzZWQgYnkgdGhlIE1lZGlhU3RyZWFtQ2VudGVyIHRv
ICh1bilyZWdpc3RlcgorICAgICAgICBzb3VyY2VzIGFuZCBsYXRlciBvbiBpdCB3aWxsIGJlIHVz
ZWQgYnkgdGhlIE1lZGlhUGxheWVyIHRvIG1hbmFnZQorICAgICAgICB0aGUgcmVuZGVyaW5nLgor
CisgICAgICAgIFBhdGNoIGJhc2VkIG9uIHdvcmsgcHJldmlvdXNseSBkb25lIGJ5IEpvbmF0aG9u
IEpvbmdzbWEgPGpvbmF0aG9uLmpvbmdzbWFAY29sbGFib3JhLmNvbT4uCisKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5saXN0LmFtOiBBZGRpbmcgbmV3IGZpbGVzIHRvIHRoZSBidWlsZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5pdC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6bWVzc2FnZUNhbGxiYWNrKTogRnVuY3Rpb24g
Y2FsbGVkIGV2ZXJ5IHRpbWUgYSBtZXNzYWdlCisgICAgICAgIGZyb20gdGhlIEdTdHJlYW1lciBi
dXMgbmVlZHMgdG8gYmUgcHJvY2Vzc2VkLgorICAgICAgICAoV2ViQ29yZTo6Q2VudHJhbFBpcGVs
aW5lVW5pdDo6aW5zdGFuY2UpOiBVdGlsaXR5IGZ1bmN0aW9uIHRvCisgICAgICAgIGFjY2VzcyB0
aGUgQ2VudHJhbFBpcGVsaW5lVW5pdCBzaW5nbGV0b24uCisgICAgICAgIChXZWJDb3JlOjpDZW50
cmFsUGlwZWxpbmVVbml0OjpDZW50cmFsUGlwZWxpbmVVbml0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNlbnRyYWxQaXBlbGluZVVuaXQ6On5DZW50cmFsUGlwZWxpbmVVbml0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNlbnRyYWxQaXBlbGluZVVuaXQ6OmhhbmRsZU1lc3NhZ2UpOiBHc3RNZXNzYWdlCisg
ICAgICAgIGhhbmRsZXIuIEZvciBub3cgb25seSBwcm9jZXNzIGVycm9yIG1lc3NhZ2VzLgorICAg
ICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9DZW50cmFsUGlwZWxpbmVVbml0
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2VudHJhbFBpcGVsaW5lVW5pdDo6U291cmNl
OjpTb3VyY2UpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRp
YVN0cmVhbUNlbnRlckdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVh
bUNlbnRlckdTdHJlYW1lcjo6TWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXI6OnZhbGlkYXRlUmVxdWVzdENvbnN0
cmFpbnRzKToKKyAgICAgICAgRm9yIG5vdyB2YWxpZGF0ZSB1bmNoZWNrZWQgYXVkaW8vdmlkZW8g
Y29uc3RyYWludHMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1l
cjo6Y3JlYXRlTWVkaWFTdHJlYW0pOiBDcmVhdGUgYQorICAgICAgICBtZWRpYXN0cmVhbSB1c2lu
ZyB0aGUgZmlyc3QgYXVkaW8gYW5kIHZpZGVvIGRldmljZSBhdmFpbGFibGUuIFRoaXMKKyAgICAg
ICAgd2lsbCBiZSBpbXByb3ZlZCB3aGVuIGNvbnN0cmFpbnRzIHZhbGlkYXRpb24gaXMgaW1wbGVt
ZW50ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6Z2V0
TWVkaWFTdHJlYW1UcmFja1NvdXJjZXMpOgorICAgICAgICBEbyBub3RoaW5nLCB0aGlzIG1ldGhv
ZCBkb2Vzbid0IHNlZW0gdXNlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpmaW5kRGV2aWNlU291cmNlKTogVGhlIGF1dG97
YXVkaW8sdmlkZW99c3JjIGVsZW1lbnRzIGFyZQorICAgICAgICB3cmFwcGVycyBhcm91bmQgdGhl
IHJlYWwgc3JjIGVsZW1lbnRzLiBUaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZW0gb3V0LgorICAgICAg
ICAoV2ViQ29yZTo6cHJvYmVTb3VyY2UpOiBJbnNwZWN0IGEgc291cmNlIGVsZW1lbnQgKGluY29t
cGxldGVseSBmb3IKKyAgICAgICAgbm93KSBhbmQgcmVnaXN0ZXIgaXQgYXMgYSBuZXcgTWVkaWFT
dHJlYW1Tb3VyY2UuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUNlbnRlclByaXZhdGVH
U3RyZWFtZXI6Ok1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcik6CisgICAgICAgIERp
c2NvdmVyIGxvY2FsIGF1ZGlvL3ZpZGVvIGRldmljZXMgYW5kIHJlZ2lzdGVyIHRoZW0gaW4gdGhl
IENlbnRyYWxQaXBlbGluZVVuaXQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUNlbnRl
clByaXZhdGVHU3RyZWFtZXI6OmRpc2NvdmVyRGV2aWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXI6OmZpcnN0U291cmNlKTogRmluZAorICAg
ICAgICB0aGUgZmlyc3QgcmVnaXN0ZXJlZCBzb3VyY2Ugb2YgdGhlIGdpdmVuIHR5cGUuIFRoaXMg
Y29udmVuaWVuY2UKKyAgICAgICAgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBvbmNlIG1lZGlhIGNv
bnN0cmFpbnRzIGNoZWNraW5nIGhhcyBiZWVuIGltcGxlbWVudGVkLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFt
ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUNlbnRlclByaXZhdGVH
U3RyZWFtZXI6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL01lZGlhU3RyZWFtU291cmNlR1N0cmVhbWVyLmg6IEFkZGVkLgorCiAyMDEzLTEwLTMxICBS
eXVhbiBDaG9pICA8cnl1YW4uY2hvaUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXVtHTEVT
XSBPcGVuR0wgc2hvdWxkIGJlIG9wdGlvbmFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpp
bmRleCA0ZTJlOGU5Li42M2IzMmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAg
LTU0MDYsOCArNTQwNiwxMyBAQCB3ZWJjb3JlX3BsYXRmb3JtX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbkRlc2Ny
aXB0b3IuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUlRDU3RhdHNS
ZXF1ZXN0LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JUQ1ZvaWRS
ZXF1ZXN0LmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9DZW50cmFsUGlwZWxpbmVVbml0LmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9DZW50cmFsUGlwZWxpbmVVbml0LmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVh
bWVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIu
aCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlh
U3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lci5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL0RldmljZU1vdGlvbkNsaWVudE1vY2suY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL0RldmljZU1vdGlvbkNsaWVudE1vY2su
aCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9EZXZpY2VPcmllbnRhdGlvbkNsaWVu
dE1vY2suY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9DZW50cmFsUGlwZWxpbmVVbml0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9DZW50cmFsUGlwZWxpbmVVbml0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODQyZTM3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0NlbnRyYWxQ
aXBlbGluZVVuaXQuY3BwCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDEyIENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDEzIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdTVF9BUElfVkVSU0lPTl8xKQor
CisjaW5jbHVkZSAiQ2VudHJhbFBpcGVsaW5lVW5pdC5oIgorCisjaW5jbHVkZSAiR1N0cmVhbWVy
VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyVmVyc2lvbmluZy5oIgorI2luY2x1ZGUg
Ik1lZGlhU3RyZWFtU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCitHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtpdF9tZWRpYV9zdHJl
YW1fZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X21lZGlhX3N0cmVhbV9k
ZWJ1ZworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBnYm9vbGVhbiBtZXNzYWdlQ2Fs
bGJhY2soR3N0QnVzKiwgR3N0TWVzc2FnZSogbWVzc2FnZSwgQ2VudHJhbFBpcGVsaW5lVW5pdCog
Y3B1KQoreworICAgIHJldHVybiBjcHUtPmhhbmRsZU1lc3NhZ2UobWVzc2FnZSk7Cit9CisKK0Nl
bnRyYWxQaXBlbGluZVVuaXQmIENlbnRyYWxQaXBlbGluZVVuaXQ6Omluc3RhbmNlKCkKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ2VudHJh
bFBpcGVsaW5lVW5pdCwgaW5zdGFuY2UsICgpKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisK
K0NlbnRyYWxQaXBlbGluZVVuaXQ6OkNlbnRyYWxQaXBlbGluZVVuaXQoKQoreworICAgIGluaXRp
YWxpemVHU3RyZWFtZXIoKTsKKworICAgIG1fcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3KCJt
ZWRpYXN0cmVhbV9waXBlbGluZSIpOworICAgIEdSZWZQdHI8R3N0QnVzPiBidXMgPSB3ZWJraXRH
c3RQaXBlbGluZUdldEJ1cyhHU1RfUElQRUxJTkUobV9waXBlbGluZS5nZXQoKSkpOworICAgIGdz
dF9idXNfYWRkX3NpZ25hbF93YXRjaChidXMuZ2V0KCkpOworICAgIGdzdF9idXNfc2V0X3N5bmNf
aGFuZGxlcihidXMuZ2V0KCksIGdzdF9idXNfc3luY19zaWduYWxfaGFuZGxlciwgMCwgMCk7Cisg
ICAgZ19zaWduYWxfY29ubmVjdChidXMuZ2V0KCksICJzeW5jLW1lc3NhZ2UiLCBHX0NBTExCQUNL
KG1lc3NhZ2VDYWxsYmFjayksIHRoaXMpOworCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1f
cGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9QTEFZSU5HKTsKK30KKworQ2VudHJhbFBpcGVsaW5l
VW5pdDo6fkNlbnRyYWxQaXBlbGluZVVuaXQoKQoreworICAgIEdSZWZQdHI8R3N0QnVzPiBidXMg
PSB3ZWJraXRHc3RQaXBlbGluZUdldEJ1cyhHU1RfUElQRUxJTkUobV9waXBlbGluZS5nZXQoKSkp
OworICAgIGdzdF9idXNfcmVtb3ZlX3NpZ25hbF93YXRjaChidXMuZ2V0KCkpOworfQorCitib29s
IENlbnRyYWxQaXBlbGluZVVuaXQ6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkK
K3sKKyAgICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkpIHsKKyAgICBjYXNlIEdT
VF9NRVNTQUdFX0VSUk9SOiB7CisgICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAg
ICAgR093blB0cjxnY2hhcj4gZGVidWc7CisKKyAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJy
b3IobWVzc2FnZSwgJmVycm9yLm91dFB0cigpLCAmZGVidWcub3V0UHRyKCkpOworICAgICAgICBF
UlJPUl9NRURJQV9NRVNTQUdFKCJNZWRpYSBlcnJvcjogJWQsICVzIiwgZXJyb3ItPmNvZGUsIGVy
cm9yLT5tZXNzYWdlKTsKKyAgICAgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RT
KEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgIndl
YmtpdC1tZWRpYXN0cmVhbS5lcnJvciIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVm
YXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYm
IFVTRShHU1RSRUFNRVIpICYmIGRlZmluZWQoR1NUX0FQSV9WRVJTSU9OXzEpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBp
cGVsaW5lVW5pdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0NlbnRyYWxQaXBlbGluZVVuaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi43NDljMGRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0NlbnRyYWxQaXBlbGluZVVuaXQuaApAQCAtMCwwICsxLDc4
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworCisjaWZuZGVmIENl
bnRyYWxQaXBlbGluZVVuaXRfaAorI2RlZmluZSBDZW50cmFsUGlwZWxpbmVVbml0X2gKKworI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpICYmIGRlZmluZWQoR1NUX0FQ
SV9WRVJTSU9OXzEpCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK3R5
cGVkZWYgc3RydWN0IF9Hc3RFbGVtZW50IEdzdEVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfR3N0
TWVzc2FnZSBHc3RNZXNzYWdlOwordHlwZWRlZiBzdHJ1Y3QgX0dzdFBhZCBHc3RQYWQ7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIE1lZGlhU3RyZWFtU291cmNlR1N0cmVhbWVyOworCitj
bGFzcyBDZW50cmFsUGlwZWxpbmVVbml0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDZW50
cmFsUGlwZWxpbmVVbml0KTsKK3Byb3RlY3RlZDoKKyAgICBDZW50cmFsUGlwZWxpbmVVbml0KCk7
CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q2VudHJhbFBpcGVsaW5lVW5pdCgpOworCisgICAgc3Rh
dGljIENlbnRyYWxQaXBlbGluZVVuaXQmIGluc3RhbmNlKCk7CisKKyAgICBib29sIGhhbmRsZU1l
c3NhZ2UoR3N0TWVzc2FnZSopOworCitwcml2YXRlOgorICAgIGNsYXNzIFNvdXJjZSB7CisgICAg
cHVibGljOgorICAgICAgICBTb3VyY2UoKQorICAgICAgICAgICAgOiBtX3JlbW92ZVdoZW5Ob3RV
c2VkKHRydWUpCisgICAgICAgIHsgfQorCisgICAgICAgIFNvdXJjZShHUmVmUHRyPEdzdEVsZW1l
bnQ+IHNvdXJjZUVsZW1lbnQsIEdSZWZQdHI8R3N0UGFkPiBzb3VyY2VQYWQsIGJvb2wgcmVtb3Zl
V2hlbk5vdFVzZWQpCisgICAgICAgICAgICA6IG1fc291cmNlRWxlbWVudChzb3VyY2VFbGVtZW50
KQorICAgICAgICAgICAgLCBtX3NvdXJjZVBhZChzb3VyY2VQYWQpCisgICAgICAgICAgICAsIG1f
cmVtb3ZlV2hlbk5vdFVzZWQocmVtb3ZlV2hlbk5vdFVzZWQpCisgICAgICAgIHsgfQorCisgICAg
ICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9zb3VyY2VFbGVtZW50OworICAgICAgICBHUmVmUHRy
PEdzdFBhZD4gbV9zb3VyY2VQYWQ7CisgICAgICAgIGJvb2wgbV9yZW1vdmVXaGVuTm90VXNlZDsK
KyAgICB9OworCisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU291cmNlPiBQaXBlbGluZU1h
cDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IFNvdXJjZUlkTG9va3VwTWFw
OworCisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3BpcGVsaW5lOworICAgIFBpcGVsaW5lTWFw
IG1fcGlwZWxpbmVNYXA7CisgICAgU291cmNlSWRMb29rdXBNYXAgbV9zb3VyY2VJZExvb2t1cE1h
cDsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RS
RUFNRVIpICYmIGRlZmluZWQoR1NUX0FQSV9WRVJTSU9OXzEpCisKKyNlbmRpZiAvLyBDZW50cmFs
UGlwZWxpbmVVbml0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJH
U3RyZWFtZXIuY3BwCmluZGV4IDE2YTg2YTkuLjFmNjEyNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdT
dHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSwxNSArMzIsMTUgQEAKIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyNpZiBFTkFCTEUo
TUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKQogCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1D
ZW50ZXJHU3RyZWFtZXIuaCIKIAorI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdT
dHJlYW1lci5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQuaCIKICNpbmNs
dWRlICJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJj
ZUNhcGFiaWxpdGllcy5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtU291cmNlLmgiCiAjaW5jbHVk
ZSAiTWVkaWFTdHJlYW1UcmFja1NvdXJjZXNSZXF1ZXN0Q2xpZW50LmgiCi0jaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC01MywyOCArNTQsNjUgQEAgTWVkaWFTdHJlYW1DZW50ZXImIE1lZGlhU3Ry
ZWFtQ2VudGVyOjpwbGF0Zm9ybUNlbnRlcigpCiAKIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVy
OjpNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcigpCiB7CisgICAgbV9wcml2YXRlID0gTWVkaWFT
dHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUoKTsKIH0KIAogTWVkaWFTdHJlYW1D
ZW50ZXJHU3RyZWFtZXI6On5NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcigpCiB7CiB9CiAKLXZv
aWQgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXI6OnZhbGlkYXRlUmVxdWVzdENvbnN0cmFpbnRz
KFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudD4sIFBhc3NSZWZQdHI8TWVkaWFD
b25zdHJhaW50cz4sIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4pCit2b2lkIE1lZGlhU3Ry
ZWFtQ2VudGVyR1N0cmVhbWVyOjp2YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50cyhQYXNzUmVmUHRy
PE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQ+IHBycENsaWVudCwgUGFzc1JlZlB0cjxNZWRpYUNv
bnN0cmFpbnRzPiBhdWRpb0NvbnN0cmFpbnRzLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+
IHZpZGVvQ29uc3RyYWludHMpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBSZWZQdHI8
TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudD4gY2xpZW50ID0gcHJwQ2xpZW50OworICAgIEFTU0VS
VChjbGllbnQpOworCisgICAgLy8gVE9ETzogdmFsaWRhdGUgY29uc3RyYWludHMgd2l0aCBhdmFp
bGFibGUgZGV2aWNlcywgc2VlIGJ1ZyAjMTIzMzQ1LgorICAgIFVOVVNFRF9QQVJBTShhdWRpb0Nv
bnN0cmFpbnRzKTsKKyAgICBVTlVTRURfUEFSQU0odmlkZW9Db25zdHJhaW50cyk7CisgICAgY2xp
ZW50LT5jb25zdHJhaW50c1ZhbGlkYXRlZCgpOwogfQotICAgIAotdm9pZCBNZWRpYVN0cmVhbUNl
bnRlckdTdHJlYW1lcjo6Y3JlYXRlTWVkaWFTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNy
ZWF0aW9uQ2xpZW50PiwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiwgUGFzc1JlZlB0cjxN
ZWRpYUNvbnN0cmFpbnRzPikKKwordm9pZCBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6Y3Jl
YXRlTWVkaWFTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50PiBwcnBR
dWVyeUNsaWVudCwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBhdWRpb0NvbnN0cmFpbnRz
LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IHZpZGVvQ29uc3RyYWludHMpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudD4g
Y2xpZW50ID0gcHJwUXVlcnlDbGllbnQ7CisgICAgQVNTRVJUKGNsaWVudCk7CisKKyAgICBVTlVT
RURfUEFSQU0oYXVkaW9Db25zdHJhaW50cyk7CisgICAgVU5VU0VEX1BBUkFNKHZpZGVvQ29uc3Ry
YWludHMpOworCisgICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4+IGF1ZGlvU291
cmNlczsKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPj4gdmlkZW9Tb3VyY2Vz
OworCisgICAgaWYgKGF1ZGlvQ29uc3RyYWludHMpIHsKKyAgICAgICAgLy8gVE9ETzogdmVyaWZ5
IGNvbnN0cmFpbnRzIGFjY29yZGluZyB0byByZWdpc3RlcmVkCisgICAgICAgIC8vIHNvdXJjZXMu
IEZvciBub3csIHVuY29uZGl0aW9uYWxseSBwaWNrIHRoZSBmaXJzdCBzb3VyY2UsIHNlZSBidWcg
IzEyMzM0NS4KKyAgICAgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBhdWRpb1NvdXJjZSA9
IG1fcHJpdmF0ZS0+Zmlyc3RTb3VyY2UoTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvKTsKKyAgICAg
ICAgaWYgKGF1ZGlvU291cmNlKSB7CisgICAgICAgICAgICBhdWRpb1NvdXJjZS0+cmVzZXQoKTsK
KyAgICAgICAgICAgIGF1ZGlvU291cmNlLT5zZXRSZWFkeVN0YXRlKE1lZGlhU3RyZWFtU291cmNl
OjpMaXZlKTsKKyAgICAgICAgICAgIGF1ZGlvU291cmNlcy5hcHBlbmQoYXVkaW9Tb3VyY2UucmVs
ZWFzZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh2aWRlb0NvbnN0cmFpbnRzKSB7
CisgICAgICAgIC8vIFRPRE86IHZlcmlmeSBjb25zdHJhaW50cyBhY2NvcmRpbmcgdG8gcmVnaXN0
ZXJlZAorICAgICAgICAvLyBzb3VyY2VzLiBGb3Igbm93LCB1bmNvbmRpdGlvbmFsbHkgcGljayB0
aGUgZmlyc3Qgc291cmNlLCBzZWUgYnVnICMxMjMzNDUuCisgICAgICAgIFJlZlB0cjxNZWRpYVN0
cmVhbVNvdXJjZT4gdmlkZW9Tb3VyY2UgPSBtX3ByaXZhdGUtPmZpcnN0U291cmNlKE1lZGlhU3Ry
ZWFtU291cmNlOjpWaWRlbyk7CisgICAgICAgIGlmICh2aWRlb1NvdXJjZSkgeworICAgICAgICAg
ICAgdmlkZW9Tb3VyY2UtPnJlc2V0KCk7CisgICAgICAgICAgICB2aWRlb1NvdXJjZS0+c2V0UmVh
ZHlTdGF0ZShNZWRpYVN0cmVhbVNvdXJjZTo6TGl2ZSk7CisgICAgICAgICAgICB2aWRlb1NvdXJj
ZXMuYXBwZW5kKHZpZGVvU291cmNlLnJlbGVhc2UoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBjbGllbnQtPmRpZENyZWF0ZVN0cmVhbShNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmNyZWF0ZShh
dWRpb1NvdXJjZXMsIHZpZGVvU291cmNlcykpOwogfQogCiBib29sIE1lZGlhU3RyZWFtQ2VudGVy
R1N0cmVhbWVyOjpnZXRNZWRpYVN0cmVhbVRyYWNrU291cmNlcyhQYXNzUmVmUHRyPE1lZGlhU3Ry
ZWFtVHJhY2tTb3VyY2VzUmVxdWVzdENsaWVudD4pCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlm
IC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkg
JiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVy
R1N0cmVhbWVyLmgKaW5kZXggNGU0MzVlYy4uNDU4ODY4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0
cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsMjAgKzMzLDE3IEBACiAjaWZuZGVmIE1l
ZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyX2gKICNkZWZpbmUgTWVkaWFTdHJlYW1DZW50ZXJHU3Ry
ZWFtZXJfaAogCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyNpZiBFTkFCTEUoTUVESUFfU1RS
RUFNKSAmJiBVU0UoR1NUUkVBTUVSKQogCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1DZW50ZXIuaCIK
IAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgTWVkaWFTdHJlYW1EZXNjcmlw
dG9yOwotY2xhc3MgTWVkaWFTdHJlYW1Tb3VyY2U7Ci1jbGFzcyBNZWRpYVN0cmVhbVNvdXJjZXNR
dWVyeUNsaWVudDsKK2NsYXNzIE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcjsKIAot
Y2xhc3MgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIgOiBwdWJsaWMgTWVkaWFTdHJlYW1DZW50
ZXIgeworY2xhc3MgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIgRklOQUwgOiBwdWJsaWMgTWVk
aWFTdHJlYW1DZW50ZXIgewogcHVibGljOgogICAgIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVy
KCk7CiAgICAgfk1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyKCk7CkBAIC01MywxMCArNTEsMTMg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB2YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50cyhQ
YXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQ+LCBQYXNzUmVmUHRyPE1lZGlhQ29u
c3RyYWludHM+IGF1ZGlvQ29uc3RyYWludHMsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4g
dmlkZW9Db25zdHJhaW50cyk7CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZU1lZGlhU3RyZWFtKFBh
c3NSZWZQdHI8TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudD4sIFBhc3NSZWZQdHI8TWVkaWFDb25z
dHJhaW50cz4gYXVkaW9Db25zdHJhaW50cywgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiB2
aWRlb0NvbnN0cmFpbnRzKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0TWVkaWFTdHJlYW1UcmFja1Nv
dXJjZXMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrU291cmNlc1JlcXVlc3RDbGllbnQ+KSBP
VkVSUklERTsKKworcHJpdmF0ZToKKyAgICBPd25QdHI8TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRl
R1N0cmVhbWVyPiBtX3ByaXZhdGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNl
bmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJF
QU0pICYmIFVTRShHU1RSRUFNRVIpCiAKICNlbmRpZiAvLyBNZWRpYVN0cmVhbUNlbnRlckdTdHJl
YW1lcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlclBy
aXZhdGVHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEx
NzRkNDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAt
MCwwICsxLDEzNiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgQ29sbGFib3JhIEx0ZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RS
RUFNRVIpICYmIGRlZmluZWQoR1NUX0FQSV9WRVJTSU9OXzEpCisKKyNpbmNsdWRlICJNZWRpYVN0
cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgIkNlbnRyYWxQaXBlbGlu
ZVVuaXQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJVdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDxnc3Qv
Z3N0Lmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZKHdlYmtpdF9tZWRpYV9zdHJlYW1f
ZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X21lZGlhX3N0cmVhbV9kZWJ1
ZworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBHUmVmUHRyPEdzdEVsZW1lbnQ+IGZp
bmREZXZpY2VTb3VyY2UoY29uc3QgY2hhciogZWxlbWVudE5hbWUpCit7CisgICAgR1JlZlB0cjxH
c3RFbGVtZW50PiBlbGVtZW50ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKGVsZW1lbnROYW1l
LCBudWxscHRyKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgR3N0Q2hpbGRQcm94eSogY2hpbGRQcm94eSA9IEdTVF9DSElMRF9QUk9YWShlbGVtZW50
LmdldCgpKTsKKyAgICBpZiAoIWNoaWxkUHJveHkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3RhdGVDaGFuZ2VSZXN1bHQgPSBnc3RfZWxlbWVu
dF9zZXRfc3RhdGUoZWxlbWVudC5nZXQoKSwgR1NUX1NUQVRFX1JFQURZKTsKKyAgICBpZiAoc3Rh
dGVDaGFuZ2VSZXN1bHQgIT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gZGV2aWNlU291cmNlOworICAg
IGlmIChnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkcmVuX2NvdW50KGNoaWxkUHJveHkpKQorICAg
ICAgICBkZXZpY2VTb3VyY2UgPSBhZG9wdEdSZWYoR1NUX0VMRU1FTlQoZ3N0X2NoaWxkX3Byb3h5
X2dldF9jaGlsZF9ieV9pbmRleChjaGlsZFByb3h5LCAwKSkpOworCisgICAgZ3N0X2VsZW1lbnRf
c2V0X3N0YXRlKGVsZW1lbnQuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKKyAgICByZXR1cm4gZGV2
aWNlU291cmNlOworfQorCitzdGF0aWMgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlR1N0cmVhbWVy
PiBwcm9iZVNvdXJjZShHc3RFbGVtZW50KiBzb3VyY2UsIE1lZGlhU3RyZWFtU291cmNlOjpUeXBl
IHR5cGUpCit7CisgICAgLy8gRklYTUU6IGdzdHJlYW1lciAxLjAgZG9lc24ndCBoYXZlIGFuIGVx
dWl2YWxlbnQgdG8gR3N0UHJvcGVydHlQcm9iZSwKKyAgICAvLyBzbyB3ZSBkb24ndCBzdXBwb3J0
IGNob29zaW5nIGEgcGFydGljdWxhciBkZXZpY2UgeWV0LgorICAgIC8vIHNlZSBodHRwczovL2J1
Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc4NDAyCisKKyAgICBHc3RFbGVtZW50
RmFjdG9yeSogZWxlbWVudEZhY3RvcnkgPSBnc3RfZWxlbWVudF9nZXRfZmFjdG9yeShzb3VyY2Up
OworICAgIEdPd25QdHI8Z2NoYXI+IGZhY3RvcnlOYW1lKGdzdF9lbGVtZW50X2dldF9uYW1lKGVs
ZW1lbnRGYWN0b3J5KSk7CisgICAgU3RyaW5nIHN0ckZhY3RvcnlOYW1lKGZhY3RvcnlOYW1lLmdl
dCgpKTsKKworICAgIFN0cmluZyBkZXZpY2VJZCA9IHN0ckZhY3RvcnlOYW1lOworICAgIGRldmlj
ZUlkLmFwcGVuZCgiO2RlZmF1bHQiKTsKKworICAgIEdPd25QdHI8Z2NoYXI+IGRldmljZU5hbWU7
CisgICAgZ19vYmplY3RfZ2V0KHNvdXJjZSwgImRldmljZS1uYW1lIiwgJmRldmljZU5hbWUub3V0
UHRyKCksIG51bGxwdHIpOworCisgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlR1N0cmVhbWVy
PiBtZWRpYVN0cmVhbVNvdXJjZSA9IGFkb3B0UmVmKG5ldyBNZWRpYVN0cmVhbVNvdXJjZUdTdHJl
YW1lcihkZXZpY2VJZCwgZGV2aWNlTmFtZS5nZXQoKSwgdHlwZSwgImRlZmF1bHQiLCBzdHJGYWN0
b3J5TmFtZSkpOworCisgICAgLy8gVE9ETzogZmlsbCBzb3VyY2UgY2FwYWJpbGl0aWVzIGFuZCBz
dGF0ZXMuCisKKyAgICByZXR1cm4gbWVkaWFTdHJlYW1Tb3VyY2U7Cit9CisKK01lZGlhU3RyZWFt
Q2VudGVyUHJpdmF0ZUdTdHJlYW1lcjo6TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVy
KCkKK3sKKyAgICBpbml0aWFsaXplR1N0cmVhbWVyKCk7CisKKyAgICBzdGF0aWMgYm9vbCBkZWJ1
Z0NhdGVnb3J5UmVnaXN0ZXJlZCA9IGZhbHNlOworICAgIGlmICghZGVidWdDYXRlZ29yeVJlZ2lz
dGVyZWQpIHsKKyAgICAgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X21lZGlhX3N0
cmVhbV9kZWJ1ZywgIndlYmtpdG1lZGlhc3RyZWFtIiwgMCwgIldlYktpdCBtZWRpYXN0cmVhbSIp
OworICAgICAgICBkZWJ1Z0NhdGVnb3J5UmVnaXN0ZXJlZCA9IHRydWU7CisgICAgfQorCisgICAg
TE9HX01FRElBX01FU1NBR0UoIkRpc2NvdmVyaW5nIG1lZGlhIHNvdXJjZSBkZXZpY2VzIik7Cisg
ICAgZGlzY292ZXJEZXZpY2VzKE1lZGlhU3RyZWFtU291cmNlOjpBdWRpbyk7CisgICAgZGlzY292
ZXJEZXZpY2VzKE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbyk7Cit9CisKK3ZvaWQgTWVkaWFTdHJl
YW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyOjpkaXNjb3ZlckRldmljZXMoTWVkaWFTdHJlYW1Tb3Vy
Y2U6OlR5cGUgdHlwZSkKK3sKKyAgICBjb25zdCBjaGFyKiBlbGVtZW50TmFtZSA9IG51bGxwdHI7
CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW86
CisgICAgICAgIGVsZW1lbnROYW1lID0gImF1dG9hdWRpb3NyYyI7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OlZpZGVvOgorICAgICAgICBlbGVtZW50TmFtZSA9
ICJhdXRvdmlkZW9zcmMiOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGRl
dmljZVNvdXJjZSA9IGZpbmREZXZpY2VTb3VyY2UoZWxlbWVudE5hbWUpOworICAgIGlmICghZGV2
aWNlU291cmNlKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3Vy
Y2VHU3RyZWFtZXI+IHNvdXJjZSA9IHByb2JlU291cmNlKGRldmljZVNvdXJjZS5nZXQoKSwgdHlw
ZSk7CisgICAgU3RyaW5nIGlkID0gc291cmNlLT5pZCgpOworCisgICAgTWVkaWFTdHJlYW1Tb3Vy
Y2VHU3RyZWFtZXJNYXA6Oml0ZXJhdG9yIHNvdXJjZUl0ZXJhdG9yID0gbV9zb3VyY2VNYXAuZmlu
ZChpZCk7CisgICAgaWYgKHNvdXJjZUl0ZXJhdG9yID09IG1fc291cmNlTWFwLmVuZCgpKQorICAg
ICAgICBtX3NvdXJjZU1hcC5hZGQoaWQsIHNvdXJjZSk7Cit9CisKK1Bhc3NSZWZQdHI8TWVkaWFT
dHJlYW1Tb3VyY2U+IE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcjo6Zmlyc3RTb3Vy
Y2UoTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGUgdHlwZSkKK3sKKyAgICBmb3IgKGF1dG8gaXRlciA9
IG1fc291cmNlTWFwLmJlZ2luKCk7IGl0ZXIgIT0gbV9zb3VyY2VNYXAuZW5kKCk7ICsraXRlcikg
eworICAgICAgICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IHNvdXJjZSA9IGl0ZXItPnZhbHVl
OworICAgICAgICBpZiAoc291cmNlLT50eXBlKCkgPT0gdHlwZSkKKyAgICAgICAgICAgIHJldHVy
biBzb3VyY2U7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RS
RUFNRVIpICYmIGRlZmluZWQoR1NUX0FQSV9WRVJTSU9OXzEpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJQ
cml2YXRlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBjMzkwZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRl
clByaXZhdGVHU3RyZWFtZXIuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogIENvcHlyaWdodCAo
QykgMjAxMiBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAxMyBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKi8KKworCisjaWZuZGVmIE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdT
dHJlYW1lcl9oCisjZGVmaW5lIE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcl9oCisK
KyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdT
VF9BUElfVkVSU0lPTl8xKQorCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1Tb3VyY2VHU3RyZWFtZXIu
aCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lciB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NPd25QdHI8TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyPiBjcmVh
dGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBNZWRpYVN0cmVhbUNlbnRl
clByaXZhdGVHU3RyZWFtZXIoKSk7CisgICAgfQorCisgICAgUGFzc1JlZlB0cjxNZWRpYVN0cmVh
bVNvdXJjZT4gZmlyc3RTb3VyY2UoTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGUpOworCitwcml2YXRl
OgorICAgIE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcigpOworCisgICAgdm9pZCBk
aXNjb3ZlckRldmljZXMoTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGUpOworCisgICAgTWVkaWFTdHJl
YW1Tb3VyY2VHU3RyZWFtZXJNYXAgbV9zb3VyY2VNYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVS
KSAmJiBkZWZpbmVkKEdTVF9BUElfVkVSU0lPTl8xKQorCisjZW5kaWYgLy8gTWVkaWFTdHJlYW1D
ZW50ZXJQcml2YXRlR1N0cmVhbWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFt
U291cmNlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU2
MTIyYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lci5oCkBAIC0wLDAgKzEsNjQg
QEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIE1lZGlhU3Ry
ZWFtU291cmNlR1N0cmVhbWVyX2gKKyNkZWZpbmUgTWVkaWFTdHJlYW1Tb3VyY2VHU3RyZWFtZXJf
aAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikgJiYgZGVmaW5l
ZChHU1RfQVBJX1ZFUlNJT05fMSkKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNp
bmNsdWRlICJNZWRpYVN0cmVhbVNvdXJjZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1l
ZGlhU3RyZWFtU291cmNlQ2FwYWJpbGl0aWVzOworCitjbGFzcyBNZWRpYVN0cmVhbVNvdXJjZUdT
dHJlYW1lciBGSU5BTCA6IHB1YmxpYyBNZWRpYVN0cmVhbVNvdXJjZSB7CitwdWJsaWM6CitNZWRp
YVN0cmVhbVNvdXJjZUdTdHJlYW1lcihjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWUsIE1lZGlhU3RyZWFtU291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmlu
ZyYgZGV2aWNlLCBjb25zdCBTdHJpbmcmIGZhY3RvcnlLZXkpCisgICAgOiBNZWRpYVN0cmVhbVNv
dXJjZShpZCwgdHlwZSwgbmFtZSkKKyAgICAsIG1fZmFjdG9yeUtleShmYWN0b3J5S2V5KQorICAg
ICwgbV9kZXZpY2UoZGV2aWNlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5NZWRpYVN0
cmVhbVNvdXJjZUdTdHJlYW1lcigpIHsgfQorCisgICAgdmlydHVhbCBSZWZQdHI8TWVkaWFTdHJl
YW1Tb3VyY2VDYXBhYmlsaXRpZXM+IGNhcGFiaWxpdGllcygpIGNvbnN0IHsgcmV0dXJuIG1fY2Fw
YWJpbGl0aWVzOyB9CisgICAgdmlydHVhbCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcyYg
c3RhdGVzKCkgeyByZXR1cm4gbV9jdXJyZW50U3RhdGVzOyB9CisKKyAgICBjb25zdCBTdHJpbmcm
IGZhY3RvcnlLZXkoKSBjb25zdCB7IHJldHVybiBtX2ZhY3RvcnlLZXk7IH0KKyAgICBjb25zdCBT
dHJpbmcmIGRldmljZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNlOyB9CisKK3ByaXZhdGU6Cisg
ICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlQ2FwYWJpbGl0aWVzPiBtX2NhcGFiaWxpdGllczsK
KyAgICBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcyBtX2N1cnJlbnRTdGF0ZXM7CisKKyAgICBTdHJp
bmcgbV9mYWN0b3J5S2V5OworICAgIFN0cmluZyBtX2RldmljZTsKK307CisKK3R5cGVkZWYgSGFz
aE1hcDxTdHJpbmcsIFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lcj4+IE1lZGlhU3Ry
ZWFtU291cmNlR1N0cmVhbWVyTWFwOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdT
VF9BUElfVkVSU0lPTl8xKQorCisjZW5kaWYgLy8gTWVkaWFTdHJlYW1Tb3VyY2VHU3RyZWFtZXJf
aAotLSAKMS44LjQucmMz
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216036</attachid>
            <date>2013-11-05 07:11:47 -0800</date>
            <delta_ts>2014-10-27 10:35:58 -0700</delta_ts>
            <desc>MediaStreamCenter and minimal CentralPipelineUnit</desc>
            <filename>MediaStreamCenter-and-minimal-CentralPipelineUnit.patch</filename>
            <type>text/plain</type>
            <size>28461</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSAzNjk0OTdlYzY2OGZkOWViM2FkNzA2NDAzZWI3MmE1YThjZjE4YTYyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUaHUsIDE3IE9jdCAyMDEzIDE3OjM0OjQzICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
TWVkaWFTdHJlYW1DZW50ZXIgYW5kIG1pbmltYWwgQ2VudHJhbFBpcGVsaW5lVW5pdAoKLS0tCiBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1OCAr
KysrKysrKysKIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAg
ICAgIHwgICA1ICsKIC4uLi9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5p
dC5jcHAgIHwgIDkwICsrKysrKysrKysrKysrCiAuLi4vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0Nl
bnRyYWxQaXBlbGluZVVuaXQuaCAgICB8ICA3OCArKysrKysrKysrKysKIC4uLi9nc3RyZWFtZXIv
TWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuY3BwICAgICAgIHwgIDU4ICsrKysrKystLQogLi4u
L2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5oICAgICAgICAgfCAgMTUgKy0t
CiAuLi4vTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCAgICAgICAgICB8IDEz
NCArKysrKysrKysrKysrKysrKysrKysKIC4uLi9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJQ
cml2YXRlR1N0cmVhbWVyLmggIHwgIDUyICsrKysrKysrCiAuLi4vZ3N0cmVhbWVyL01lZGlhU3Ry
ZWFtU291cmNlR1N0cmVhbWVyLmggICAgICAgICB8ICA2NCArKysrKysrKysrCiA5IGZpbGVzIGNo
YW5nZWQsIDUzNyBpbnNlcnRpb25zKCspLCAxNyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJh
bFBpcGVsaW5lVW5pdC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5pdC5oCiBjcmVhdGUg
bW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L01lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJl
YW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1Tb3VyY2VHU3Ry
ZWFtZXIuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwNmRkYjNhLi5iZGI4MGE1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNjEgQEAKKzIwMTMtMTAtMzAgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIGJhc2ljIE1lZGlhU3RyZWFtQ2VudGVyIGFu
ZCBDZW50cmFsUGlwZWxpbmVVbml0IGltcGxlbWVudGF0aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMTUwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB2ZXJ5IGJhc2ljIE1lZGlhU3RyZWFt
Q2VudGVyIGlzIGFibGUgdG8gZGV0ZWN0IHRoZSBhdWRpbyBhbmQKKyAgICAgICAgdmlkZW8gc291
cmNlIGRldmljZXMgYW5kIG1ha2UgdGhlbSBhdmFpbGFibGUgdG8gdGhlIHdlYiBwYWdlIHZpYQor
ICAgICAgICB0aGUgZ2V0VXNlck1lZGlhIEFQSS4gUGxheWJhY2sgc3VwcG9ydCB2aWEgYSBkZWRp
Y2F0ZWQKKyAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlIGJhY2tlbmQgd2lsbCBiZSBwcm92aWRl
ZCBpbiBhIGZvbGxvdy11cCBwYXRjaC4KKworICAgICAgICBUaGUgTWVkaWFTdHJlYW1DZW50ZXIg
aW1wbGVtZW50YXRpb24gaXMgY29udGFpbmVkIGluIHRoZQorICAgICAgICBNZWRpYVN0cmVhbUNl
bnRlclByaXZhdGVHU3RyZWFtZXIuIFRoZSBDZW50cmFsUGlwZWxpbmVVbml0IGlzCisgICAgICAg
IG1hbmFnaW5nIHRoZSBwaXBlbGluZSB1c2VkIGZvciBhdWRpby92aWRlbyBjYXB0dXJlIGFuZAor
ICAgICAgICByZW5kZXJpbmcuIEl0IGlzIHVzZWQgYnkgdGhlIE1lZGlhU3RyZWFtQ2VudGVyIHRv
ICh1bilyZWdpc3RlcgorICAgICAgICBzb3VyY2VzIGFuZCBsYXRlciBvbiBpdCB3aWxsIGJlIHVz
ZWQgYnkgdGhlIE1lZGlhUGxheWVyIHRvIG1hbmFnZQorICAgICAgICB0aGUgcmVuZGVyaW5nLgor
CisgICAgICAgIFBhdGNoIGJhc2VkIG9uIHdvcmsgcHJldmlvdXNseSBkb25lIGJ5IEpvbmF0aG9u
IEpvbmdzbWEgPGpvbmF0aG9uLmpvbmdzbWFAY29sbGFib3JhLmNvbT4uCisKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5saXN0LmFtOiBBZGRpbmcgbmV3IGZpbGVzIHRvIHRoZSBidWlsZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5pdC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6bWVzc2FnZUNhbGxiYWNrKTogRnVuY3Rpb24g
Y2FsbGVkIGV2ZXJ5IHRpbWUgYSBtZXNzYWdlCisgICAgICAgIGZyb20gdGhlIEdTdHJlYW1lciBi
dXMgbmVlZHMgdG8gYmUgcHJvY2Vzc2VkLgorICAgICAgICAoV2ViQ29yZTo6Q2VudHJhbFBpcGVs
aW5lVW5pdDo6aW5zdGFuY2UpOiBVdGlsaXR5IGZ1bmN0aW9uIHRvCisgICAgICAgIGFjY2VzcyB0
aGUgQ2VudHJhbFBpcGVsaW5lVW5pdCBzaW5nbGV0b24uCisgICAgICAgIChXZWJDb3JlOjpDZW50
cmFsUGlwZWxpbmVVbml0OjpDZW50cmFsUGlwZWxpbmVVbml0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNlbnRyYWxQaXBlbGluZVVuaXQ6On5DZW50cmFsUGlwZWxpbmVVbml0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNlbnRyYWxQaXBlbGluZVVuaXQ6OmhhbmRsZU1lc3NhZ2UpOiBHc3RNZXNzYWdlCisg
ICAgICAgIGhhbmRsZXIuIEZvciBub3cgb25seSBwcm9jZXNzIGVycm9yIG1lc3NhZ2VzLgorICAg
ICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9DZW50cmFsUGlwZWxpbmVVbml0
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2VudHJhbFBpcGVsaW5lVW5pdDo6U291cmNl
OjpTb3VyY2UpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRp
YVN0cmVhbUNlbnRlckdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVh
bUNlbnRlckdTdHJlYW1lcjo6TWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXI6OnZhbGlkYXRlUmVxdWVzdENvbnN0
cmFpbnRzKToKKyAgICAgICAgRm9yIG5vdyB2YWxpZGF0ZSB1bmNoZWNrZWQgYXVkaW8vdmlkZW8g
Y29uc3RyYWludHMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1l
cjo6Y3JlYXRlTWVkaWFTdHJlYW0pOiBDcmVhdGUgYQorICAgICAgICBtZWRpYXN0cmVhbSB1c2lu
ZyB0aGUgZmlyc3QgYXVkaW8gYW5kIHZpZGVvIGRldmljZSBhdmFpbGFibGUuIFRoaXMKKyAgICAg
ICAgd2lsbCBiZSBpbXByb3ZlZCB3aGVuIGNvbnN0cmFpbnRzIHZhbGlkYXRpb24gaXMgaW1wbGVt
ZW50ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6Z2V0
TWVkaWFTdHJlYW1UcmFja1NvdXJjZXMpOgorICAgICAgICBEbyBub3RoaW5nLCB0aGlzIG1ldGhv
ZCBkb2Vzbid0IHNlZW0gdXNlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpmaW5kRGV2aWNlU291cmNlKTogVGhlIGF1dG97
YXVkaW8sdmlkZW99c3JjIGVsZW1lbnRzIGFyZQorICAgICAgICB3cmFwcGVycyBhcm91bmQgdGhl
IHJlYWwgc3JjIGVsZW1lbnRzLiBUaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZW0gb3V0LgorICAgICAg
ICAoV2ViQ29yZTo6cHJvYmVTb3VyY2UpOiBJbnNwZWN0IGEgc291cmNlIGVsZW1lbnQgKGluY29t
cGxldGVseSBmb3IKKyAgICAgICAgbm93KSBhbmQgcmVnaXN0ZXIgaXQgYXMgYSBuZXcgTWVkaWFT
dHJlYW1Tb3VyY2UuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUNlbnRlclByaXZhdGVH
U3RyZWFtZXI6Ok1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcik6CisgICAgICAgIERp
c2NvdmVyIGxvY2FsIGF1ZGlvL3ZpZGVvIGRldmljZXMgYW5kIHJlZ2lzdGVyIHRoZW0gaW4gdGhl
IENlbnRyYWxQaXBlbGluZVVuaXQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUNlbnRl
clByaXZhdGVHU3RyZWFtZXI6OmRpc2NvdmVyRGV2aWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXI6OmZpcnN0U291cmNlKTogRmluZAorICAg
ICAgICB0aGUgZmlyc3QgcmVnaXN0ZXJlZCBzb3VyY2Ugb2YgdGhlIGdpdmVuIHR5cGUuIFRoaXMg
Y29udmVuaWVuY2UKKyAgICAgICAgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBvbmNlIG1lZGlhIGNv
bnN0cmFpbnRzIGNoZWNraW5nIGhhcyBiZWVuIGltcGxlbWVudGVkLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFt
ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUNlbnRlclByaXZhdGVH
U3RyZWFtZXI6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL01lZGlhU3RyZWFtU291cmNlR1N0cmVhbWVyLmg6IEFkZGVkLgorCiAyMDEzLTExLTA0ICBC
cmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBJREI6IFNwbGl0IGJh
Y2tlbmQgQ3Vyc29ycyBhbmQgVHJhbnNhY3Rpb25zIGludG8gdGhlaXIgb3duIGZpbGVzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA0NzNkZGU5Ny4uZmE3ODkyMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC01NDExLDggKzU0MTEsMTMgQEAgd2ViY29yZV9wbGF0
Zm9ybV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9S
VENTZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL1JUQ1N0YXRzUmVxdWVzdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9SVENWb2lkUmVxdWVzdC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5pdC5oIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5l
VW5pdC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJl
YW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIuY3Bw
IFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFT
dHJlYW1Tb3VyY2VHU3RyZWFtZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9E
ZXZpY2VNb3Rpb25DbGllbnRNb2NrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9j
ay9EZXZpY2VNb3Rpb25DbGllbnRNb2NrLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21v
Y2svRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5p
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2Vu
dHJhbFBpcGVsaW5lVW5pdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
OTg0MmUzNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9DZW50cmFsUGlwZWxpbmVVbml0LmNwcApAQCAtMCwwICsxLDkwIEBA
CisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikgJiYgZGVm
aW5lZChHU1RfQVBJX1ZFUlNJT05fMSkKKworI2luY2x1ZGUgIkNlbnRyYWxQaXBlbGluZVVuaXQu
aCIKKworI2luY2x1ZGUgIkdTdHJlYW1lclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdTdHJlYW1l
clZlcnNpb25pbmcuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lci5oIgor
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZ
X0VYVEVSTih3ZWJraXRfbWVkaWFfc3RyZWFtX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZB
VUxUIHdlYmtpdF9tZWRpYV9zdHJlYW1fZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitz
dGF0aWMgZ2Jvb2xlYW4gbWVzc2FnZUNhbGxiYWNrKEdzdEJ1cyosIEdzdE1lc3NhZ2UqIG1lc3Nh
Z2UsIENlbnRyYWxQaXBlbGluZVVuaXQqIGNwdSkKK3sKKyAgICByZXR1cm4gY3B1LT5oYW5kbGVN
ZXNzYWdlKG1lc3NhZ2UpOworfQorCitDZW50cmFsUGlwZWxpbmVVbml0JiBDZW50cmFsUGlwZWxp
bmVVbml0OjppbnN0YW5jZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKENlbnRyYWxQaXBlbGluZVVuaXQsIGluc3RhbmNlLCAoKSk7Cisg
ICAgcmV0dXJuIGluc3RhbmNlOworfQorCitDZW50cmFsUGlwZWxpbmVVbml0OjpDZW50cmFsUGlw
ZWxpbmVVbml0KCkKK3sKKyAgICBpbml0aWFsaXplR1N0cmVhbWVyKCk7CisKKyAgICBtX3BpcGVs
aW5lID0gZ3N0X3BpcGVsaW5lX25ldygibWVkaWFzdHJlYW1fcGlwZWxpbmUiKTsKKyAgICBHUmVm
UHRyPEdzdEJ1cz4gYnVzID0gd2Via2l0R3N0UGlwZWxpbmVHZXRCdXMoR1NUX1BJUEVMSU5FKG1f
cGlwZWxpbmUuZ2V0KCkpKTsKKyAgICBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2goYnVzLmdldCgp
KTsKKyAgICBnc3RfYnVzX3NldF9zeW5jX2hhbmRsZXIoYnVzLmdldCgpLCBnc3RfYnVzX3N5bmNf
c2lnbmFsX2hhbmRsZXIsIDAsIDApOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoYnVzLmdldCgpLCAi
c3luYy1tZXNzYWdlIiwgR19DQUxMQkFDSyhtZXNzYWdlQ2FsbGJhY2spLCB0aGlzKTsKKworICAg
IGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUExBWUlO
Ryk7Cit9CisKK0NlbnRyYWxQaXBlbGluZVVuaXQ6On5DZW50cmFsUGlwZWxpbmVVbml0KCkKK3sK
KyAgICBHUmVmUHRyPEdzdEJ1cz4gYnVzID0gd2Via2l0R3N0UGlwZWxpbmVHZXRCdXMoR1NUX1BJ
UEVMSU5FKG1fcGlwZWxpbmUuZ2V0KCkpKTsKKyAgICBnc3RfYnVzX3JlbW92ZV9zaWduYWxfd2F0
Y2goYnVzLmdldCgpKTsKK30KKworYm9vbCBDZW50cmFsUGlwZWxpbmVVbml0OjpoYW5kbGVNZXNz
YWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCit7CisgICAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBF
KG1lc3NhZ2UpKSB7CisgICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjogeworICAgICAgICBHT3du
UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIEdPd25QdHI8Z2NoYXI+IGRlYnVnOworCisgICAg
ICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yKG1lc3NhZ2UsICZlcnJvci5vdXRQdHIoKSwgJmRl
YnVnLm91dFB0cigpKTsKKyAgICAgICAgRVJST1JfTUVESUFfTUVTU0FHRSgiTWVkaWEgZXJyb3I6
ICVkLCAlcyIsIGVycm9yLT5jb2RlLCBlcnJvci0+bWVzc2FnZSk7CisgICAgICAgIEdTVF9ERUJV
R19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1Rf
REVCVUdfR1JBUEhfU0hPV19BTEwsICJ3ZWJraXQtbWVkaWFzdHJlYW0uZXJyb3IiKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdTVF9B
UElfVkVSU0lPTl8xKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0NlbnRyYWxQaXBlbGluZVVuaXQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9DZW50cmFsUGlwZWxpbmVVbml0LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ5YzBkZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9DZW50cmFsUGlw
ZWxpbmVVbml0LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIg
Q29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MTMgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKworI2lmbmRlZiBDZW50cmFsUGlwZWxpbmVVbml0X2gKKyNkZWZpbmUgQ2Vu
dHJhbFBpcGVsaW5lVW5pdF9oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NU
UkVBTUVSKSAmJiBkZWZpbmVkKEdTVF9BUElfVkVSU0lPTl8xKQorCisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nSGFzaC5oPgorCit0eXBlZGVmIHN0cnVjdCBfR3N0RWxlbWVudCBHc3RFbGVt
ZW50OwordHlwZWRlZiBzdHJ1Y3QgX0dzdE1lc3NhZ2UgR3N0TWVzc2FnZTsKK3R5cGVkZWYgc3Ry
dWN0IF9Hc3RQYWQgR3N0UGFkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBNZWRpYVN0
cmVhbVNvdXJjZUdTdHJlYW1lcjsKKworY2xhc3MgQ2VudHJhbFBpcGVsaW5lVW5pdCB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQ2VudHJhbFBpcGVsaW5lVW5pdCk7Citwcm90ZWN0ZWQ6Cisg
ICAgQ2VudHJhbFBpcGVsaW5lVW5pdCgpOworcHVibGljOgorICAgIHZpcnR1YWwgfkNlbnRyYWxQ
aXBlbGluZVVuaXQoKTsKKworICAgIHN0YXRpYyBDZW50cmFsUGlwZWxpbmVVbml0JiBpbnN0YW5j
ZSgpOworCisgICAgYm9vbCBoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqKTsKKworcHJpdmF0ZToK
KyAgICBjbGFzcyBTb3VyY2UgeworICAgIHB1YmxpYzoKKyAgICAgICAgU291cmNlKCkKKyAgICAg
ICAgICAgIDogbV9yZW1vdmVXaGVuTm90VXNlZCh0cnVlKQorICAgICAgICB7IH0KKworICAgICAg
ICBTb3VyY2UoR1JlZlB0cjxHc3RFbGVtZW50PiBzb3VyY2VFbGVtZW50LCBHUmVmUHRyPEdzdFBh
ZD4gc291cmNlUGFkLCBib29sIHJlbW92ZVdoZW5Ob3RVc2VkKQorICAgICAgICAgICAgOiBtX3Nv
dXJjZUVsZW1lbnQoc291cmNlRWxlbWVudCkKKyAgICAgICAgICAgICwgbV9zb3VyY2VQYWQoc291
cmNlUGFkKQorICAgICAgICAgICAgLCBtX3JlbW92ZVdoZW5Ob3RVc2VkKHJlbW92ZVdoZW5Ob3RV
c2VkKQorICAgICAgICB7IH0KKworICAgICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fc291cmNl
RWxlbWVudDsKKyAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IG1fc291cmNlUGFkOworICAgICAgICBi
b29sIG1fcmVtb3ZlV2hlbk5vdFVzZWQ7CisgICAgfTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxT
dHJpbmcsIFNvdXJjZT4gUGlwZWxpbmVNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
U3RyaW5nPiBTb3VyY2VJZExvb2t1cE1hcDsKKworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9w
aXBlbGluZTsKKyAgICBQaXBlbGluZU1hcCBtX3BpcGVsaW5lTWFwOworICAgIFNvdXJjZUlkTG9v
a3VwTWFwIG1fc291cmNlSWRMb29rdXBNYXA7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUo
TUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdTVF9BUElfVkVSU0lP
Tl8xKQorCisjZW5kaWYgLy8gQ2VudHJhbFBpcGVsaW5lVW5pdF9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50
ZXJHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmNwcAppbmRleCAxNmE4NmE5Li4xZjYx
MjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1l
ci5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29u
IEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMu
TC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzEsMTUgKzMyLDE1IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikK
IAogI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmgiCiAKKyNpbmNsdWRlICJN
ZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJNZWRpYVN0cmVh
bUNyZWF0aW9uQ2xpZW50LmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCi0j
aW5jbHVkZSAiTWVkaWFTdHJlYW1Tb3VyY2VDYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJNZWRp
YVN0cmVhbVNvdXJjZS5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVz
dENsaWVudC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTMsMjggKzU0LDY1IEBAIE1l
ZGlhU3RyZWFtQ2VudGVyJiBNZWRpYVN0cmVhbUNlbnRlcjo6cGxhdGZvcm1DZW50ZXIoKQogCiBN
ZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6TWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIoKQog
eworICAgIG1fcHJpdmF0ZSA9IE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3Jl
YXRlKCk7CiB9CiAKIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyOjp+TWVkaWFTdHJlYW1DZW50
ZXJHU3RyZWFtZXIoKQogewogfQogCi12b2lkIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyOjp2
YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50cyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25D
bGllbnQ+LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+LCBQYXNzUmVmUHRyPE1lZGlhQ29u
c3RyYWludHM+KQordm9pZCBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6dmFsaWRhdGVSZXF1
ZXN0Q29uc3RyYWludHMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50PiBwcnBD
bGllbnQsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gYXVkaW9Db25zdHJhaW50cywgUGFz
c1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiB2aWRlb0NvbnN0cmFpbnRzKQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQ+IGNsaWVu
dCA9IHBycENsaWVudDsKKyAgICBBU1NFUlQoY2xpZW50KTsKKworICAgIC8vIFRPRE86IHZhbGlk
YXRlIGNvbnN0cmFpbnRzIHdpdGggYXZhaWxhYmxlIGRldmljZXMsIHNlZSBidWcgIzEyMzM0NS4K
KyAgICBVTlVTRURfUEFSQU0oYXVkaW9Db25zdHJhaW50cyk7CisgICAgVU5VU0VEX1BBUkFNKHZp
ZGVvQ29uc3RyYWludHMpOworICAgIGNsaWVudC0+Y29uc3RyYWludHNWYWxpZGF0ZWQoKTsKIH0K
LSAgICAKLXZvaWQgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXI6OmNyZWF0ZU1lZGlhU3RyZWFt
KFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudD4sIFBhc3NSZWZQdHI8TWVkaWFD
b25zdHJhaW50cz4sIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4pCisKK3ZvaWQgTWVkaWFT
dHJlYW1DZW50ZXJHU3RyZWFtZXI6OmNyZWF0ZU1lZGlhU3RyZWFtKFBhc3NSZWZQdHI8TWVkaWFT
dHJlYW1DcmVhdGlvbkNsaWVudD4gcHJwUXVlcnlDbGllbnQsIFBhc3NSZWZQdHI8TWVkaWFDb25z
dHJhaW50cz4gYXVkaW9Db25zdHJhaW50cywgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiB2
aWRlb0NvbnN0cmFpbnRzKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgUmVmUHRyPE1l
ZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQ+IGNsaWVudCA9IHBycFF1ZXJ5Q2xpZW50OworICAgIEFT
U0VSVChjbGllbnQpOworCisgICAgVU5VU0VEX1BBUkFNKGF1ZGlvQ29uc3RyYWludHMpOworICAg
IFVOVVNFRF9QQVJBTSh2aWRlb0NvbnN0cmFpbnRzKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TWVk
aWFTdHJlYW1Tb3VyY2U+PiBhdWRpb1NvdXJjZXM7CisgICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0
cmVhbVNvdXJjZT4+IHZpZGVvU291cmNlczsKKworICAgIGlmIChhdWRpb0NvbnN0cmFpbnRzKSB7
CisgICAgICAgIC8vIFRPRE86IHZlcmlmeSBjb25zdHJhaW50cyBhY2NvcmRpbmcgdG8gcmVnaXN0
ZXJlZAorICAgICAgICAvLyBzb3VyY2VzLiBGb3Igbm93LCB1bmNvbmRpdGlvbmFsbHkgcGljayB0
aGUgZmlyc3Qgc291cmNlLCBzZWUgYnVnICMxMjMzNDUuCisgICAgICAgIFJlZlB0cjxNZWRpYVN0
cmVhbVNvdXJjZT4gYXVkaW9Tb3VyY2UgPSBtX3ByaXZhdGUtPmZpcnN0U291cmNlKE1lZGlhU3Ry
ZWFtU291cmNlOjpBdWRpbyk7CisgICAgICAgIGlmIChhdWRpb1NvdXJjZSkgeworICAgICAgICAg
ICAgYXVkaW9Tb3VyY2UtPnJlc2V0KCk7CisgICAgICAgICAgICBhdWRpb1NvdXJjZS0+c2V0UmVh
ZHlTdGF0ZShNZWRpYVN0cmVhbVNvdXJjZTo6TGl2ZSk7CisgICAgICAgICAgICBhdWRpb1NvdXJj
ZXMuYXBwZW5kKGF1ZGlvU291cmNlLnJlbGVhc2UoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAodmlkZW9Db25zdHJhaW50cykgeworICAgICAgICAvLyBUT0RPOiB2ZXJpZnkgY29uc3Ry
YWludHMgYWNjb3JkaW5nIHRvIHJlZ2lzdGVyZWQKKyAgICAgICAgLy8gc291cmNlcy4gRm9yIG5v
dywgdW5jb25kaXRpb25hbGx5IHBpY2sgdGhlIGZpcnN0IHNvdXJjZSwgc2VlIGJ1ZyAjMTIzMzQ1
LgorICAgICAgICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IHZpZGVvU291cmNlID0gbV9wcml2
YXRlLT5maXJzdFNvdXJjZShNZWRpYVN0cmVhbVNvdXJjZTo6VmlkZW8pOworICAgICAgICBpZiAo
dmlkZW9Tb3VyY2UpIHsKKyAgICAgICAgICAgIHZpZGVvU291cmNlLT5yZXNldCgpOworICAgICAg
ICAgICAgdmlkZW9Tb3VyY2UtPnNldFJlYWR5U3RhdGUoTWVkaWFTdHJlYW1Tb3VyY2U6OkxpdmUp
OworICAgICAgICAgICAgdmlkZW9Tb3VyY2VzLmFwcGVuZCh2aWRlb1NvdXJjZS5yZWxlYXNlKCkp
OworICAgICAgICB9CisgICAgfQorCisgICAgY2xpZW50LT5kaWRDcmVhdGVTdHJlYW0oTWVkaWFT
dHJlYW1EZXNjcmlwdG9yOjpjcmVhdGUoYXVkaW9Tb3VyY2VzLCB2aWRlb1NvdXJjZXMpKTsKIH0K
IAogYm9vbCBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6Z2V0TWVkaWFTdHJlYW1UcmFja1Nv
dXJjZXMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrU291cmNlc1JlcXVlc3RDbGllbnQ+KQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorI2VuZGlm
IC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1D
ZW50ZXJHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5oCmluZGV4IDRlNDM1ZWMuLjQ1ODg2
ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5o
CkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMy
LDIwICszMywxNyBAQAogI2lmbmRlZiBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcl9oCiAjZGVm
aW5lIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyX2gKIAotI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikKIAogI2luY2x1
ZGUgIk1lZGlhU3RyZWFtQ2VudGVyLmgiCiAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjsKLWNsYXNzIE1lZGlhU3RyZWFtU291cmNlOwot
Y2xhc3MgTWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGllbnQ7CitjbGFzcyBNZWRpYVN0cmVhbUNl
bnRlclByaXZhdGVHU3RyZWFtZXI7CiAKLWNsYXNzIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVy
IDogcHVibGljIE1lZGlhU3RyZWFtQ2VudGVyIHsKK2NsYXNzIE1lZGlhU3RyZWFtQ2VudGVyR1N0
cmVhbWVyIEZJTkFMIDogcHVibGljIE1lZGlhU3RyZWFtQ2VudGVyIHsKIHB1YmxpYzoKICAgICBN
ZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcigpOwogICAgIH5NZWRpYVN0cmVhbUNlbnRlckdTdHJl
YW1lcigpOwpAQCAtNTMsMTAgKzUxLDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdmFs
aWRhdGVSZXF1ZXN0Q29uc3RyYWludHMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNyZWF0aW9uQ2xp
ZW50PiwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBhdWRpb0NvbnN0cmFpbnRzLCBQYXNz
UmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IHZpZGVvQ29uc3RyYWludHMpOwogICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVNZWRpYVN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25DbGll
bnQ+LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IGF1ZGlvQ29uc3RyYWludHMsIFBhc3NS
ZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gdmlkZW9Db25zdHJhaW50cyk7CiAgICAgdmlydHVhbCBi
b29sIGdldE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFj
a1NvdXJjZXNSZXF1ZXN0Q2xpZW50PikgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgT3duUHRy
PE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcj4gbV9wcml2YXRlOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKyNl
bmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKQogCiAjZW5kaWYg
Ly8gTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyUHJpdmF0
ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWRhZDEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVy
UHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiAgQ29weXJpZ2h0
IChDKSAyMDEyIENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDEzIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUo
TUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdTVF9BUElfVkVSU0lP
Tl8xKQorCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmgiCisK
KyNpbmNsdWRlICJDZW50cmFsUGlwZWxpbmVVbml0LmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyVXRp
bGl0aWVzLmgiCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dP
d25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK0dTVF9ERUJVR19DQVRF
R09SWSh3ZWJraXRfbWVkaWFfc3RyZWFtX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxU
IHdlYmtpdF9tZWRpYV9zdHJlYW1fZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0
aWMgR1JlZlB0cjxHc3RFbGVtZW50PiBmaW5kRGV2aWNlU291cmNlKGNvbnN0IGNoYXIqIGVsZW1l
bnROYW1lKQoreworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gZWxlbWVudCA9IGdzdF9lbGVtZW50
X2ZhY3RvcnlfbWFrZShlbGVtZW50TmFtZSwgbnVsbHB0cik7CisgICAgaWYgKCFlbGVtZW50KQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmICghR1NUX0lTX0NISUxEX1BST1hZKGVs
ZW1lbnQuZ2V0KCkpKQorICAgICAgICByZXR1cm4gZWxlbWVudDsKKworICAgIEdzdFN0YXRlQ2hh
bmdlUmV0dXJuIHN0YXRlQ2hhbmdlUmVzdWx0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKGVsZW1l
bnQuZ2V0KCksIEdTVF9TVEFURV9SRUFEWSk7CisgICAgaWYgKHN0YXRlQ2hhbmdlUmVzdWx0ICE9
IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGRldmljZVNvdXJjZTsKKyAgICBHc3RDaGlsZFByb3h5KiBj
aGlsZFByb3h5ID0gR1NUX0NISUxEX1BST1hZKGVsZW1lbnQuZ2V0KCkpOworICAgIGlmIChnc3Rf
Y2hpbGRfcHJveHlfZ2V0X2NoaWxkcmVuX2NvdW50KGNoaWxkUHJveHkpKQorICAgICAgICBkZXZp
Y2VTb3VyY2UgPSBhZG9wdEdSZWYoR1NUX0VMRU1FTlQoZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGls
ZF9ieV9pbmRleChjaGlsZFByb3h5LCAwKSkpOworCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRl
KGVsZW1lbnQuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKKyAgICByZXR1cm4gZGV2aWNlU291cmNl
OworfQorCitzdGF0aWMgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlR1N0cmVhbWVyPiBwcm9iZVNv
dXJjZShHc3RFbGVtZW50KiBzb3VyY2UsIE1lZGlhU3RyZWFtU291cmNlOjpUeXBlIHR5cGUpCit7
CisgICAgLy8gRklYTUU6IGdzdHJlYW1lciAxLjAgZG9lc24ndCBoYXZlIGFuIGVxdWl2YWxlbnQg
dG8gR3N0UHJvcGVydHlQcm9iZSwKKyAgICAvLyBzbyB3ZSBkb24ndCBzdXBwb3J0IGNob29zaW5n
IGEgcGFydGljdWxhciBkZXZpY2UgeWV0LgorICAgIC8vIHNlZSBodHRwczovL2J1Z3ppbGxhLmdu
b21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc4NDAyCisKKyAgICBHc3RFbGVtZW50RmFjdG9yeSog
ZWxlbWVudEZhY3RvcnkgPSBnc3RfZWxlbWVudF9nZXRfZmFjdG9yeShzb3VyY2UpOworICAgIEdP
d25QdHI8Z2NoYXI+IGZhY3RvcnlOYW1lKGdzdF9lbGVtZW50X2dldF9uYW1lKGVsZW1lbnRGYWN0
b3J5KSk7CisgICAgU3RyaW5nIHN0ckZhY3RvcnlOYW1lKGZhY3RvcnlOYW1lLmdldCgpKTsKKwor
ICAgIFN0cmluZyBkZXZpY2VJZCA9IHN0ckZhY3RvcnlOYW1lOworICAgIGRldmljZUlkLmFwcGVu
ZCgiO2RlZmF1bHQiKTsKKworICAgIEdPd25QdHI8Z2NoYXI+IGRldmljZU5hbWU7CisgICAgZ19v
YmplY3RfZ2V0KHNvdXJjZSwgImRldmljZS1uYW1lIiwgJmRldmljZU5hbWUub3V0UHRyKCksIG51
bGxwdHIpOworCisgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlR1N0cmVhbWVyPiBtZWRpYVN0
cmVhbVNvdXJjZSA9IGFkb3B0UmVmKG5ldyBNZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lcihkZXZp
Y2VJZCwgZGV2aWNlTmFtZS5nZXQoKSwgdHlwZSwgImRlZmF1bHQiLCBzdHJGYWN0b3J5TmFtZSkp
OworCisgICAgLy8gVE9ETzogZmlsbCBzb3VyY2UgY2FwYWJpbGl0aWVzIGFuZCBzdGF0ZXMuCisK
KyAgICByZXR1cm4gbWVkaWFTdHJlYW1Tb3VyY2U7Cit9CisKK01lZGlhU3RyZWFtQ2VudGVyUHJp
dmF0ZUdTdHJlYW1lcjo6TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyKCkKK3sKKyAg
ICBpbml0aWFsaXplR1N0cmVhbWVyKCk7CisKKyAgICBzdGF0aWMgYm9vbCBkZWJ1Z0NhdGVnb3J5
UmVnaXN0ZXJlZCA9IGZhbHNlOworICAgIGlmICghZGVidWdDYXRlZ29yeVJlZ2lzdGVyZWQpIHsK
KyAgICAgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X21lZGlhX3N0cmVhbV9kZWJ1
ZywgIndlYmtpdG1lZGlhc3RyZWFtIiwgMCwgIldlYktpdCBtZWRpYXN0cmVhbSIpOworICAgICAg
ICBkZWJ1Z0NhdGVnb3J5UmVnaXN0ZXJlZCA9IHRydWU7CisgICAgfQorCisgICAgTE9HX01FRElB
X01FU1NBR0UoIkRpc2NvdmVyaW5nIG1lZGlhIHNvdXJjZSBkZXZpY2VzIik7CisgICAgZGlzY292
ZXJEZXZpY2VzKE1lZGlhU3RyZWFtU291cmNlOjpBdWRpbyk7CisgICAgZGlzY292ZXJEZXZpY2Vz
KE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbyk7Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1DZW50ZXJQ
cml2YXRlR1N0cmVhbWVyOjpkaXNjb3ZlckRldmljZXMoTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGUg
dHlwZSkKK3sKKyAgICBjb25zdCBjaGFyKiBlbGVtZW50TmFtZSA9IG51bGxwdHI7CisgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW86CisgICAgICAg
IGVsZW1lbnROYW1lID0gImF1dG9hdWRpb3NyYyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
TWVkaWFTdHJlYW1Tb3VyY2U6OlZpZGVvOgorICAgICAgICBlbGVtZW50TmFtZSA9ICJhdXRvdmlk
ZW9zcmMiOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+
IGRldmljZVNvdXJjZSA9IGZpbmREZXZpY2VTb3VyY2UoZWxlbWVudE5hbWUpOworICAgIGlmICgh
ZGV2aWNlU291cmNlKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1T
b3VyY2VHU3RyZWFtZXI+IHNvdXJjZSA9IHByb2JlU291cmNlKGRldmljZVNvdXJjZS5nZXQoKSwg
dHlwZSk7CisgICAgU3RyaW5nIGlkID0gc291cmNlLT5pZCgpOworCisgICAgTWVkaWFTdHJlYW1T
b3VyY2VHU3RyZWFtZXJNYXA6Oml0ZXJhdG9yIHNvdXJjZUl0ZXJhdG9yID0gbV9zb3VyY2VNYXAu
ZmluZChpZCk7CisgICAgaWYgKHNvdXJjZUl0ZXJhdG9yID09IG1fc291cmNlTWFwLmVuZCgpKQor
ICAgICAgICBtX3NvdXJjZU1hcC5hZGQoaWQsIHNvdXJjZSk7Cit9CisKK1Bhc3NSZWZQdHI8TWVk
aWFTdHJlYW1Tb3VyY2U+IE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcjo6Zmlyc3RT
b3VyY2UoTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGUgdHlwZSkKK3sKKyAgICBmb3IgKGF1dG8gaXRl
ciA9IG1fc291cmNlTWFwLmJlZ2luKCk7IGl0ZXIgIT0gbV9zb3VyY2VNYXAuZW5kKCk7ICsraXRl
cikgeworICAgICAgICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IHNvdXJjZSA9IGl0ZXItPnZh
bHVlOworICAgICAgICBpZiAoc291cmNlLT50eXBlKCkgPT0gdHlwZSkKKyAgICAgICAgICAgIHJl
dHVybiBzb3VyY2U7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShH
U1RSRUFNRVIpICYmIGRlZmluZWQoR1NUX0FQSV9WRVJTSU9OXzEpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50
ZXJQcml2YXRlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBjMzkwZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNl
bnRlclByaXZhdGVHU3RyZWFtZXIuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogIENvcHlyaWdo
dCAoQykgMjAxMiBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworCisjaWZuZGVmIE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0
ZUdTdHJlYW1lcl9oCisjZGVmaW5lIE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcl9o
CisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVk
KEdTVF9BUElfVkVSU0lPTl8xKQorCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1Tb3VyY2VHU3RyZWFt
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lciB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NPd25QdHI8TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyPiBj
cmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBNZWRpYVN0cmVhbUNl
bnRlclByaXZhdGVHU3RyZWFtZXIoKSk7CisgICAgfQorCisgICAgUGFzc1JlZlB0cjxNZWRpYVN0
cmVhbVNvdXJjZT4gZmlyc3RTb3VyY2UoTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGUpOworCitwcml2
YXRlOgorICAgIE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcigpOworCisgICAgdm9p
ZCBkaXNjb3ZlckRldmljZXMoTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGUpOworCisgICAgTWVkaWFT
dHJlYW1Tb3VyY2VHU3RyZWFtZXJNYXAgbV9zb3VyY2VNYXA7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVB
TUVSKSAmJiBkZWZpbmVkKEdTVF9BUElfVkVSU0lPTl8xKQorCisjZW5kaWYgLy8gTWVkaWFTdHJl
YW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3Ry
ZWFtU291cmNlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MDU2MTIyYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lci5oCkBAIC0wLDAgKzEs
NjQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIE1lZGlh
U3RyZWFtU291cmNlR1N0cmVhbWVyX2gKKyNkZWZpbmUgTWVkaWFTdHJlYW1Tb3VyY2VHU3RyZWFt
ZXJfaAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikgJiYgZGVm
aW5lZChHU1RfQVBJX1ZFUlNJT05fMSkKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIK
KyNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJjZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IE1lZGlhU3RyZWFtU291cmNlQ2FwYWJpbGl0aWVzOworCitjbGFzcyBNZWRpYVN0cmVhbVNvdXJj
ZUdTdHJlYW1lciBGSU5BTCA6IHB1YmxpYyBNZWRpYVN0cmVhbVNvdXJjZSB7CitwdWJsaWM6CitN
ZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lcihjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIE1lZGlhU3RyZWFtU291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0
cmluZyYgZGV2aWNlLCBjb25zdCBTdHJpbmcmIGZhY3RvcnlLZXkpCisgICAgOiBNZWRpYVN0cmVh
bVNvdXJjZShpZCwgdHlwZSwgbmFtZSkKKyAgICAsIG1fZmFjdG9yeUtleShmYWN0b3J5S2V5KQor
ICAgICwgbV9kZXZpY2UoZGV2aWNlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5NZWRp
YVN0cmVhbVNvdXJjZUdTdHJlYW1lcigpIHsgfQorCisgICAgdmlydHVhbCBSZWZQdHI8TWVkaWFT
dHJlYW1Tb3VyY2VDYXBhYmlsaXRpZXM+IGNhcGFiaWxpdGllcygpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FwYWJpbGl0aWVzOyB9CisgICAgdmlydHVhbCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVN0YXRl
cyYgc3RhdGVzKCkgeyByZXR1cm4gbV9jdXJyZW50U3RhdGVzOyB9CisKKyAgICBjb25zdCBTdHJp
bmcmIGZhY3RvcnlLZXkoKSBjb25zdCB7IHJldHVybiBtX2ZhY3RvcnlLZXk7IH0KKyAgICBjb25z
dCBTdHJpbmcmIGRldmljZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNlOyB9CisKK3ByaXZhdGU6
CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlQ2FwYWJpbGl0aWVzPiBtX2NhcGFiaWxpdGll
czsKKyAgICBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcyBtX2N1cnJlbnRTdGF0ZXM7CisKKyAgICBT
dHJpbmcgbV9mYWN0b3J5S2V5OworICAgIFN0cmluZyBtX2RldmljZTsKK307CisKK3R5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lcj4+IE1lZGlh
U3RyZWFtU291cmNlR1N0cmVhbWVyTWFwOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVk
KEdTVF9BUElfVkVSU0lPTl8xKQorCisjZW5kaWYgLy8gTWVkaWFTdHJlYW1Tb3VyY2VHU3RyZWFt
ZXJfaAotLSAKMS44LjQucmMz
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230757</attachid>
            <date>2014-05-03 11:52:24 -0700</date>
            <delta_ts>2014-10-27 10:35:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110150-20140504035201.patch</filename>
            <type>text/plain</type>
            <size>27073</size>
            <attacher name="Seongjun Kim">isair</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY3OTA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2EyMzAwNDliNGQzMGQx
NjczMjRjMWYyZjYyNWM2OTViNDQzMWVhYy4uMzMxYTZlNTAyMGU4N2IyN2NlOTU4ZGY4ODUzNGVi
Y2QyMzMyOTg5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDE0LTA1LTAzICBTZW9u
Z2p1biBLaW0gIDxpc0FpckBjb21wYW55MTAwLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBC
YXNpYyBNZWRpYVN0cmVhbUNlbnRlciBhbmQgQ2VudHJhbFBpcGVsaW5lVW5pdCBpbXBsZW1lbnRh
dGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEx
MDE1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWShPT1BTISkuCisKKyAgICAgICAgVGhp
cyB2ZXJ5IGJhc2ljIE1lZGlhU3RyZWFtQ2VudGVyIGlzIGFibGUgdG8gZGV0ZWN0IHRoZSBhdWRp
byBhbmQKKyAgICAgICAgdmlkZW8gc291cmNlIGRldmljZXMgYW5kIG1ha2UgdGhlbSBhdmFpbGFi
bGUgdG8gdGhlIHdlYiBwYWdlIHZpYQorICAgICAgICB0aGUgZ2V0VXNlck1lZGlhIEFQSS4gUGxh
eWJhY2sgc3VwcG9ydCB2aWEgYSBkZWRpY2F0ZWQKKyAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRl
IGJhY2tlbmQgd2lsbCBiZSBwcm92aWRlZCBpbiBhIGZvbGxvdy11cCBwYXRjaC4KKworICAgICAg
ICBUaGUgTWVkaWFTdHJlYW1DZW50ZXIgaW1wbGVtZW50YXRpb24gaXMgY29udGFpbmVkIGluIHRo
ZQorICAgICAgICBNZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIuIFRoZSBDZW50cmFs
UGlwZWxpbmVVbml0IGlzCisgICAgICAgIG1hbmFnaW5nIHRoZSBwaXBlbGluZSB1c2VkIGZvciBh
dWRpby92aWRlbyBjYXB0dXJlIGFuZAorICAgICAgICByZW5kZXJpbmcuIEl0IGlzIHVzZWQgYnkg
dGhlIE1lZGlhU3RyZWFtQ2VudGVyIHRvICh1bilyZWdpc3RlcgorICAgICAgICBzb3VyY2VzIGFu
ZCBsYXRlciBvbiBpdCB3aWxsIGJlIHVzZWQgYnkgdGhlIE1lZGlhUGxheWVyIHRvIG1hbmFnZQor
ICAgICAgICB0aGUgcmVuZGVyaW5nLgorCisgICAgICAgIFBhdGNoIGJhc2VkIG9uIHdvcmsgcHJl
dmlvdXNseSBkb25lIGJ5IEpvbmF0aG9uIEpvbmdzbWEgPGpvbmF0aG9uLmpvbmdzbWFAY29sbGFi
b3JhLmNvbT4KKyAgICAgICAgYW5kIFBoaWxpcHBlIE5vcm1hbmQgPHBub3JtYW5kQGlnYWxpYS5j
b20+LgorCisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6IEFkZGluZyBuZXcgZmlsZXMgdG8g
dGhlIGJ1aWxkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9DZW50
cmFsUGlwZWxpbmVVbml0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjptZXNzYWdlQ2Fs
bGJhY2spOiBGdW5jdGlvbiBjYWxsZWQgZXZlcnkgdGltZSBhIG1lc3NhZ2UKKyAgICAgICAgKFdl
YkNvcmU6OkNlbnRyYWxQaXBlbGluZVVuaXQ6Omluc3RhbmNlKTogVXRpbGl0eSBmdW5jdGlvbiB0
bworICAgICAgICBhY2Nlc3MgdGhlIENlbnRyYWxQaXBlbGluZVVuaXQgc2luZ2xldG9uLgorICAg
ICAgICAoV2ViQ29yZTo6Q2VudHJhbFBpcGVsaW5lVW5pdDo6Q2VudHJhbFBpcGVsaW5lVW5pdCk6
CisgICAgICAgIChXZWJDb3JlOjpDZW50cmFsUGlwZWxpbmVVbml0Ojp+Q2VudHJhbFBpcGVsaW5l
VW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpDZW50cmFsUGlwZWxpbmVVbml0OjpoYW5kbGVNZXNz
YWdlKTogR3N0TWVzc2FnZQorICAgICAgICBoYW5kbGVyLiBGb3Igbm93IG9ubHkgcHJvY2VzcyBl
cnJvciBtZXNzYWdlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
Q2VudHJhbFBpcGVsaW5lVW5pdC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXI6Ok1lZGlhU3RyZWFtQ2VudGVyR1N0
cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyOjp2
YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50cyk6CisgICAgICAgIEZvciBub3cgdmFsaWRhdGUgdW5j
aGVja2VkIGF1ZGlvL3ZpZGVvIGNvbnN0cmFpbnRzLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFT
dHJlYW1DZW50ZXJHU3RyZWFtZXI6OmNyZWF0ZU1lZGlhU3RyZWFtKTogQ3JlYXRlIGEKKyAgICAg
ICAgbWVkaWFzdHJlYW0gdXNpbmcgdGhlIGZpcnN0IGF1ZGlvIGFuZCB2aWRlbyBkZXZpY2UgYXZh
aWxhYmxlLiBUaGlzCisgICAgICAgIHdpbGwgYmUgaW1wcm92ZWQgd2hlbiBjb25zdHJhaW50cyB2
YWxpZGF0aW9uIGlzIGltcGxlbWVudGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1D
ZW50ZXJHU3RyZWFtZXI6OmdldE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzKToKKyAgICAgICAgRG8g
bm90aGluZywgdGhpcyBtZXRob2QgZG9lc24ndCBzZWVtIHVzZWQuCisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVy
UHJpdmF0ZUdTdHJlYW1lci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZmluZERldmlj
ZVNvdXJjZSk6IFRoZSBhdXRve2F1ZGlvLHZpZGVvfXNyYyBlbGVtZW50cyBhcmUKKyAgICAgICAg
d3JhcHBlcnMgYXJvdW5kIHRoZSByZWFsIHNyYyBlbGVtZW50cy4gVGhpcyBmdW5jdGlvbiBmaW5k
cyB0aGVtIG91dC4KKyAgICAgICAgKFdlYkNvcmU6OnByb2JlU291cmNlKTogSW5zcGVjdCBhIHNv
dXJjZSBlbGVtZW50IChpbmNvbXBsZXRlbHkgZm9yCisgICAgICAgIG5vdykgYW5kIHJlZ2lzdGVy
IGl0IGFzIGEgbmV3IE1lZGlhU3RyZWFtU291cmNlLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFT
dHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyOjpNZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3Ry
ZWFtZXIpOgorICAgICAgICBEaXNjb3ZlciBsb2NhbCBhdWRpby92aWRlbyBkZXZpY2VzIGFuZCBy
ZWdpc3RlciB0aGVtIGluIHRoZSBDZW50cmFsUGlwZWxpbmVVbml0LgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyOjpkaXNjb3ZlckRldmljZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyOjpzdG9y
ZUVsZW1lbnRGYWN0b3J5Rm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVh
bUNlbnRlclByaXZhdGVHU3RyZWFtZXI6OnN0b3JlZEVsZW1lbnRGYWN0b3J5KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcjo6Zmlyc3RTb3VyY2Up
OiBGaW5kCisgICAgICAgIHRoZSBmaXJzdCByZWdpc3RlcmVkIHNvdXJjZSBvZiB0aGUgZ2l2ZW4g
dHlwZS4gVGhpcyBjb252ZW5pZW5jZQorICAgICAgICBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIG9u
Y2UgbWVkaWEgY29uc3RyYWludHMgY2hlY2tpbmcgaGFzIGJlZW4gaW1wbGVtZW50ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyUHJp
dmF0ZUdTdHJlYW1lci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtQ2Vu
dGVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1Tb3VyY2VHU3RyZWFtZXIuaDogQWRkZWQuCisKIDIw
MTQtMDQtMjggIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxNjc4NTUuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNt
YWtlCmluZGV4IDdmYWJkNDFiODU2YTJkODEzMjg3OTA5NDY4MjI2ODE4MWU1MjMzOTcuLmZjZGI2
ODE5M2E4NTA1NzYxNzlhNWRhYjBiYjI5NjU4MmFlNWEzYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RL
LmNtYWtlCkBAIC0xMDYsNyArMTA2LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAK
ICAgICBwbGF0Zm9ybS9saW51eC9HYW1lcGFkRGV2aWNlTGludXguY3BwCiAKKyAgICBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5pdC5jcHAKICAgICBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuY3Bw
CisgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyUHJp
dmF0ZUdTdHJlYW1lci5jcHAKIAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9BdXRoZW50aWNh
dGlvbkNoYWxsZW5nZVNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL0NlcnRpZmlj
YXRlSW5mby5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9DZW50cmFsUGlwZWxpbmVVbml0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9DZW50cmFsUGlwZWxpbmVVbml0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44NTM4YTQ0ZmZjMjliZTIyOWQxODE0Y2U3OGNmOWZlOWVmMGIwMzVlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0NlbnRyYWxQaXBlbGluZVVuaXQuY3BwCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiAgQ29weXJp
Z2h0IChDKSAyMDEyIENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDE0IENvbXBhbnkgMTAwIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJDZW50cmFsUGlwZWxpbmVVbml0LmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAm
JiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSAiR1N0cmVhbWVyVXRpbGl0aWVzLmgiCisjaW5j
bHVkZSAiTWVkaWFTdHJlYW1Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRo
cmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK0dT
VF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0X21lZGlhX3N0cmVhbV9kZWJ1Zyk7CisjZGVm
aW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfbWVkaWFfc3RyZWFtX2RlYnVnCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIGdib29sZWFuIG1lc3NhZ2VDYWxsYmFjayhHc3RCdXMqLCBH
c3RNZXNzYWdlKiBtZXNzYWdlLCBDZW50cmFsUGlwZWxpbmVVbml0KiBjcHUpCit7CisgICAgcmV0
dXJuIGNwdS0+aGFuZGxlTWVzc2FnZShtZXNzYWdlKTsKK30KKworQ2VudHJhbFBpcGVsaW5lVW5p
dCYgQ2VudHJhbFBpcGVsaW5lVW5pdDo6aW5zdGFuY2UoKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENlbnRyYWxQaXBlbGluZVVuaXQ+
IGluc3RhbmNlOworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworQ2VudHJhbFBpcGVsaW5lVW5p
dDo6Q2VudHJhbFBpcGVsaW5lVW5pdCgpCit7CisgICAgaW5pdGlhbGl6ZUdTdHJlYW1lcigpOwor
CisgICAgbV9waXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcoIm1lZGlhc3RyZWFtX3BpcGVsaW5l
Iik7CisgICAgR1JlZlB0cjxHc3RCdXM+IGJ1cyA9IGFkb3B0R1JlZihnc3RfcGlwZWxpbmVfZ2V0
X2J1cyhHU1RfUElQRUxJTkUobV9waXBlbGluZS5nZXQoKSkpKTsKKyAgICBnc3RfYnVzX2FkZF9z
aWduYWxfd2F0Y2goYnVzLmdldCgpKTsKKyAgICBnc3RfYnVzX3NldF9zeW5jX2hhbmRsZXIoYnVz
LmdldCgpLCBnc3RfYnVzX3N5bmNfc2lnbmFsX2hhbmRsZXIsIDAsIDApOworICAgIGdfc2lnbmFs
X2Nvbm5lY3QoYnVzLmdldCgpLCAic3luYy1tZXNzYWdlIiwgR19DQUxMQkFDSyhtZXNzYWdlQ2Fs
bGJhY2spLCB0aGlzKTsKKworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdl
dCgpLCBHU1RfU1RBVEVfUExBWUlORyk7Cit9CisKK0NlbnRyYWxQaXBlbGluZVVuaXQ6On5DZW50
cmFsUGlwZWxpbmVVbml0KCkKK3sKKyAgICBHUmVmUHRyPEdzdEJ1cz4gYnVzID0gYWRvcHRHUmVm
KGdzdF9waXBlbGluZV9nZXRfYnVzKEdTVF9QSVBFTElORShtX3BpcGVsaW5lLmdldCgpKSkpOwor
ICAgIGdzdF9idXNfcmVtb3ZlX3NpZ25hbF93YXRjaChidXMuZ2V0KCkpOworfQorCitib29sIENl
bnRyYWxQaXBlbGluZVVuaXQ6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKK3sK
KyAgICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkpIHsKKyAgICBjYXNlIEdTVF9N
RVNTQUdFX0VSUk9SOiB7CisgICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAg
ICAgICAgR1VuaXF1ZU91dFB0cjxnY2hhcj4gZGVidWc7CisKKyAgICAgICAgZ3N0X21lc3NhZ2Vf
cGFyc2VfZXJyb3IobWVzc2FnZSwgJmVycm9yLm91dFB0cigpLCAmZGVidWcub3V0UHRyKCkpOwor
ICAgICAgICBFUlJPUl9NRURJQV9NRVNTQUdFKCJNZWRpYSBlcnJvcjogJWQsICVzIiwgZXJyb3It
PmNvZGUsIGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklM
RV9XSVRIX1RTKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9X
X0FMTCwgIndlYmtpdC1tZWRpYXN0cmVhbS5lcnJvciIpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9T
VFJFQU0pICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvQ2VudHJhbFBpcGVsaW5lVW5pdC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0NlbnRyYWxQaXBlbGluZVVu
aXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41NWZiZWFmMjk4MDc2OGQ0NDE5MTA0NjIyNTRiNDNmN2Y2ZGU5YjYz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0NlbnRyYWxQaXBlbGluZVVuaXQuaApAQCAtMCwwICsxLDYyIEBACisvKgorICog
IENvcHlyaWdodCAoQykgMjAxMiBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAxNCBDb21wYW55IDEwMCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisKKyNpZm5kZWYgQ2VudHJhbFBp
cGVsaW5lVW5pdF9oCisjZGVmaW5lIENlbnRyYWxQaXBlbGluZVVuaXRfaAorCisjaWYgRU5BQkxF
KE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0hhc2guaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0dzdEVsZW1lbnQgR3N0RWxlbWVudDsK
K3R5cGVkZWYgc3RydWN0IF9Hc3RNZXNzYWdlIEdzdE1lc3NhZ2U7Cit0eXBlZGVmIHN0cnVjdCBf
R3N0UGFkIEdzdFBhZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgTWVkaWFTdHJlYW1T
b3VyY2VHU3RyZWFtZXI7CisKK2NsYXNzIENlbnRyYWxQaXBlbGluZVVuaXQgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENlbnRyYWxQaXBlbGluZVVuaXQpOworcHVibGljOgorICAgIHZpcnR1
YWwgfkNlbnRyYWxQaXBlbGluZVVuaXQoKTsKKworICAgIHN0YXRpYyBDZW50cmFsUGlwZWxpbmVV
bml0JiBpbnN0YW5jZSgpOworCisgICAgYm9vbCBoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqKTsK
KworcHJpdmF0ZToKKyAgICBDZW50cmFsUGlwZWxpbmVVbml0KCk7CisKKyAgICB0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBHUmVmUHRyPEdzdEVsZW1lbnQ+PiBTb3VyY2VNYXA7CisKKyAgICBHUmVm
UHRyPEdzdEVsZW1lbnQ+IG1fcGlwZWxpbmU7CisgICAgU291cmNlTWFwIG1fc291cmNlTWFwOwor
CisgICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8Q2VudHJhbFBpcGVsaW5lVW5p
dD47Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NU
UkVBTUVSKQorCisjZW5kaWYgLy8gQ2VudHJhbFBpcGVsaW5lVW5pdF9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1D
ZW50ZXJHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL01lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyLmNwcAppbmRleCBmN2NjNzNjMGI3
MDMyYzNjYzU2ZDQ0YTk3YzRjYTY0OWQwOGUzZDYwLi5mZmJlZWYxY2MxN2RmMTk2NWJiZTY4ZWEz
YWVhZWI1NzQ4NmU0Yjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNl
bnRlckdTdHJlYW1lci5jcHAKQEAgLTM1LDExICszNSwxMSBAQAogCiAjaW5jbHVkZSAiTWVkaWFT
dHJlYW1DZW50ZXJHU3RyZWFtZXIuaCIKIAorI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ2VudGVyUHJp
dmF0ZUdTdHJlYW1lci5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQuaCIK
ICNpbmNsdWRlICJNZWRpYVN0cmVhbVByaXZhdGUuaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbVNv
dXJjZUNhcGFiaWxpdGllcy5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVx
dWVzdENsaWVudC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSA8d3Rm
L01haW5UaHJlYWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTMsMzEgKzUzLDU3IEBA
IE1lZGlhU3RyZWFtQ2VudGVyJiBNZWRpYVN0cmVhbUNlbnRlcjo6cGxhdGZvcm1DZW50ZXIoKQog
CiBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lcjo6TWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIo
KQogeworICAgIG1fcHJpdmF0ZSA9IE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcjo6
Y3JlYXRlKCk7CiB9CiAKIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVyOjp+TWVkaWFTdHJlYW1D
ZW50ZXJHU3RyZWFtZXIoKQogewogfQogCi12b2lkIE1lZGlhU3RyZWFtQ2VudGVyR1N0cmVhbWVy
Ojp2YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50cyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRp
b25DbGllbnQ+IGNsaWVudCwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiwgUGFzc1JlZlB0
cjxNZWRpYUNvbnN0cmFpbnRzPikKK3ZvaWQgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXI6OnZh
bGlkYXRlUmVxdWVzdENvbnN0cmFpbnRzKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1DcmVhdGlvbkNs
aWVudD4gcHJwQ2xpZW50LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+LCBQYXNzUmVmUHRy
PE1lZGlhQ29uc3RyYWludHM+KQogeworICAgIFJlZlB0cjxNZWRpYVN0cmVhbUNyZWF0aW9uQ2xp
ZW50PiBjbGllbnQgPSBwcnBDbGllbnQ7CiAgICAgQVNTRVJUKGNsaWVudCk7CiAKLSAgICAvLyBG
SVhNRTogVmFsaWRhdGUgdmlkZW8gYW5kIGF1ZGlvIGNvbnN0cmFpbnRzCisgICAgLy8gRklYTUU6
IHZhbGlkYXRlIGNvbnN0cmFpbnRzIHdpdGggYXZhaWxhYmxlIGRldmljZXMsIHNlZSBidWcgIzEy
MzM0NS4KICAgICBjbGllbnQtPmNvbnN0cmFpbnRzVmFsaWRhdGVkKCk7CiB9CiAKLXZvaWQgTWVk
aWFTdHJlYW1DZW50ZXJHU3RyZWFtZXI6OmNyZWF0ZU1lZGlhU3RyZWFtKFBhc3NSZWZQdHI8TWVk
aWFTdHJlYW1DcmVhdGlvbkNsaWVudD4gY2xpZW50LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWlu
dHM+LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+KQordm9pZCBNZWRpYVN0cmVhbUNlbnRl
ckdTdHJlYW1lcjo6Y3JlYXRlTWVkaWFTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNyZWF0
aW9uQ2xpZW50PiBwcnBDbGllbnQsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gYXVkaW9D
b25zdHJhaW50cywgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiB2aWRlb0NvbnN0cmFpbnRz
KQogeworICAgIFJlZlB0cjxNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50PiBjbGllbnQgPSBwcnBD
bGllbnQ7CiAgICAgQVNTRVJUKGNsaWVudCk7CiAKLSAgICAvLyBGSVhNRTogQXBwbHkgdmlkZW8g
YW5kIGF1ZGlvIGNvbnN0cmFpbnRzCi0gICAgY2xpZW50LT5mYWlsZWRUb0NyZWF0ZVN0cmVhbVdp
dGhQZXJtaXNzaW9uRXJyb3IoKTsKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtU291cmNl
Pj4gYXVkaW9Tb3VyY2VzOworICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+PiB2
aWRlb1NvdXJjZXM7CisKKyAgICBpZiAoYXVkaW9Db25zdHJhaW50cykgeworICAgICAgICAvLyBG
SVhNRTogdmVyaWZ5IGNvbnN0cmFpbnRzIGFjY29yZGluZyB0byByZWdpc3RlcmVkCisgICAgICAg
IC8vIHNvdXJjZXMuIEZvciBub3csIHVuY29uZGl0aW9uYWxseSBwaWNrIHRoZSBmaXJzdCBzb3Vy
Y2UsIHNlZSBidWcgIzEyMzM0NS4KKyAgICAgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBh
dWRpb1NvdXJjZSA9IG1fcHJpdmF0ZS0+Zmlyc3RTb3VyY2UoTWVkaWFTdHJlYW1Tb3VyY2U6OkF1
ZGlvKTsKKyAgICAgICAgaWYgKGF1ZGlvU291cmNlKSB7CisgICAgICAgICAgICBhdWRpb1NvdXJj
ZS0+cmVzZXQoKTsKKyAgICAgICAgICAgIGF1ZGlvU291cmNlLT5zZXRSZWFkeVN0YXRlKE1lZGlh
U3RyZWFtU291cmNlOjpMaXZlKTsKKyAgICAgICAgICAgIGF1ZGlvU291cmNlcy5hcHBlbmQoYXVk
aW9Tb3VyY2UucmVsZWFzZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh2aWRlb0Nv
bnN0cmFpbnRzKSB7CisgICAgICAgIC8vIEZJWE1FOiB2ZXJpZnkgY29uc3RyYWludHMgYWNjb3Jk
aW5nIHRvIHJlZ2lzdGVyZWQKKyAgICAgICAgLy8gc291cmNlcy4gRm9yIG5vdywgdW5jb25kaXRp
b25hbGx5IHBpY2sgdGhlIGZpcnN0IHNvdXJjZSwgc2VlIGJ1ZyAjMTIzMzQ1LgorICAgICAgICBS
ZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IHZpZGVvU291cmNlID0gbV9wcml2YXRlLT5maXJzdFNv
dXJjZShNZWRpYVN0cmVhbVNvdXJjZTo6VmlkZW8pOworICAgICAgICBpZiAodmlkZW9Tb3VyY2Up
IHsKKyAgICAgICAgICAgIHZpZGVvU291cmNlLT5yZXNldCgpOworICAgICAgICAgICAgdmlkZW9T
b3VyY2UtPnNldFJlYWR5U3RhdGUoTWVkaWFTdHJlYW1Tb3VyY2U6OkxpdmUpOworICAgICAgICAg
ICAgdmlkZW9Tb3VyY2VzLmFwcGVuZCh2aWRlb1NvdXJjZS5yZWxlYXNlKCkpOworICAgICAgICB9
CisgICAgfQorCisgICAgY2xpZW50LT5kaWRDcmVhdGVTdHJlYW0oTWVkaWFTdHJlYW1Qcml2YXRl
OjpjcmVhdGUoYXVkaW9Tb3VyY2VzLCB2aWRlb1NvdXJjZXMpKTsKIH0KIAogYm9vbCBNZWRpYVN0
cmVhbUNlbnRlckdTdHJlYW1lcjo6Z2V0TWVkaWFTdHJlYW1UcmFja1NvdXJjZXMoUGFzc1JlZlB0
cjxNZWRpYVN0cmVhbVRyYWNrU291cmNlc1JlcXVlc3RDbGllbnQ+KQogewotICAgIG5vdEltcGxl
bWVudGVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3Ry
ZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9N
ZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5oCmluZGV4IGE3MGUwMDE5ZTg4MGZiZDRhYzc4YjNk
NzVjZTg4MDlkYjIzMjdlNTQuLmFmYWYzYjAzZjJiOTUzNjI1NTgyNDFhNDA3ZjZmOWNjZTU2ZmIx
MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lci5o
CkBAIC0xLDYgKzEsOCBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQ29tcGFueSAxMDAgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNywxNSArMzksMTIgQEAKICNpbmNsdWRlICJNZWRpYVN0cmVhbUNlbnRlci5oIgogCiAjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBNZWRpYVN0cmVhbVByaXZhdGU7Ci1jbGFz
cyBNZWRpYVN0cmVhbVNvdXJjZTsKLWNsYXNzIE1lZGlhU3RyZWFtU291cmNlc1F1ZXJ5Q2xpZW50
OworY2xhc3MgTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyOwogCi1jbGFzcyBNZWRp
YVN0cmVhbUNlbnRlckdTdHJlYW1lciA6IHB1YmxpYyBNZWRpYVN0cmVhbUNlbnRlciB7CitjbGFz
cyBNZWRpYVN0cmVhbUNlbnRlckdTdHJlYW1lciBmaW5hbCA6IHB1YmxpYyBNZWRpYVN0cmVhbUNl
bnRlciB7CiBwdWJsaWM6CiAgICAgTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIoKTsKICAgICB+
TWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIoKTsKQEAgLTUzLDYgKzUyLDkgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCB2YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50cyhQYXNzUmVmUHRyPE1l
ZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQ+LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IGF1
ZGlvQ29uc3RyYWludHMsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gdmlkZW9Db25zdHJh
aW50cyk7CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZU1lZGlhU3RyZWFtKFBhc3NSZWZQdHI8TWVk
aWFTdHJlYW1DcmVhdGlvbkNsaWVudD4sIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gYXVk
aW9Db25zdHJhaW50cywgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiB2aWRlb0NvbnN0cmFp
bnRzKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0TWVkaWFTdHJlYW1UcmFja1NvdXJjZXMoUGFzc1Jl
ZlB0cjxNZWRpYVN0cmVhbVRyYWNrU291cmNlc1JlcXVlc3RDbGllbnQ+KSBvdmVycmlkZTsKKwor
cHJpdmF0ZToKKyAgICBPd25QdHI8TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyPiBt
X3ByaXZhdGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50
ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9NZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjQ0MjkwNzg1M2NhOTg0ZmJiMTY2ZmFkMzAyMjUzODAyM2M3ZTk2OTcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDE1OCBAQAor
LyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTQgQ29tcGFueSAxMDAgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lci5oIgor
CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUg
IkNlbnRyYWxQaXBlbGluZVVuaXQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJVdGlsaXRpZXMuaCIK
KyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1VuaXF1ZVB0ci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZKHdl
YmtpdF9tZWRpYV9zdHJlYW1fZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0
X21lZGlhX3N0cmVhbV9kZWJ1ZworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBHUmVm
UHRyPEdzdEVsZW1lbnQ+IGZpbmREZXZpY2VTb3VyY2UoY29uc3QgY2hhciogZWxlbWVudE5hbWUp
Cit7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBlbGVtZW50ID0gZ3N0X2VsZW1lbnRfZmFjdG9y
eV9tYWtlKGVsZW1lbnROYW1lLCBudWxscHRyKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgaWYgKCFHU1RfSVNfQ0hJTERfUFJPWFkoZWxlbWVudC5n
ZXQoKSkpCisgICAgICAgIHJldHVybiBlbGVtZW50OworCisgICAgR3N0U3RhdGVDaGFuZ2VSZXR1
cm4gc3RhdGVDaGFuZ2VSZXN1bHQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUoZWxlbWVudC5nZXQo
KSwgR1NUX1NUQVRFX1JFQURZKTsKKyAgICBpZiAoc3RhdGVDaGFuZ2VSZXN1bHQgIT0gR1NUX1NU
QVRFX0NIQU5HRV9TVUNDRVNTKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEdSZWZQ
dHI8R3N0RWxlbWVudD4gZGV2aWNlU291cmNlOworICAgIEdzdENoaWxkUHJveHkqIGNoaWxkUHJv
eHkgPSBHU1RfQ0hJTERfUFJPWFkoZWxlbWVudC5nZXQoKSk7CisgICAgaWYgKGdzdF9jaGlsZF9w
cm94eV9nZXRfY2hpbGRyZW5fY291bnQoY2hpbGRQcm94eSkpCisgICAgICAgIGRldmljZVNvdXJj
ZSA9IGFkb3B0R1JlZihHU1RfRUxFTUVOVChnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X2lu
ZGV4KGNoaWxkUHJveHksIDApKSk7CisKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUoZWxlbWVu
dC5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOworICAgIHJldHVybiBkZXZpY2VTb3VyY2U7Cit9CisK
K3N0YXRpYyBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2VHU3RyZWFtZXI+IHByb2JlU291cmNlKEdz
dEVsZW1lbnQqIHNvdXJjZSwgTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGUgdHlwZSkKK3sKKyAgICAv
LyBGSVhNRTogZ3N0cmVhbWVyIDEuMCBkb2Vzbid0IGhhdmUgYW4gZXF1aXZhbGVudCB0byBHc3RQ
cm9wZXJ0eVByb2JlLAorICAgIC8vIHNvIHdlIGRvbid0IHN1cHBvcnQgY2hvb3NpbmcgYSBwYXJ0
aWN1bGFyIGRldmljZSB5ZXQuCisgICAgLy8gc2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3Jn
L3Nob3dfYnVnLmNnaT9pZD02Nzg0MDIKKworICAgIEdzdEVsZW1lbnRGYWN0b3J5KiBlbGVtZW50
RmFjdG9yeSA9IGdzdF9lbGVtZW50X2dldF9mYWN0b3J5KHNvdXJjZSk7CisgICAgR1VuaXF1ZVB0
cjxnY2hhcj4gZmFjdG9yeU5hbWUoZ3N0X29iamVjdF9nZXRfbmFtZShHU1RfT0JKRUNUKGVsZW1l
bnRGYWN0b3J5KSkpOworICAgIFN0cmluZyBzdHJGYWN0b3J5TmFtZShmYWN0b3J5TmFtZS5nZXQo
KSk7CisKKyAgICBTdHJpbmcgZGV2aWNlSWQgPSBzdHJGYWN0b3J5TmFtZTsKKyAgICBkZXZpY2VJ
ZC5hcHBlbmQoIjtkZWZhdWx0Iik7CisKKyAgICBHVW5pcXVlT3V0UHRyPGdjaGFyPiBkZXZpY2VO
YW1lOworICAgIGdfb2JqZWN0X2dldChzb3VyY2UsICJkZXZpY2UtbmFtZSIsICZkZXZpY2VOYW1l
Lm91dFB0cigpLCBudWxscHRyKTsKKworICAgIFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZUdTdHJl
YW1lcj4gbWVkaWFTdHJlYW1Tb3VyY2UgPSBhZG9wdFJlZihuZXcgTWVkaWFTdHJlYW1Tb3VyY2VH
U3RyZWFtZXIoZGV2aWNlSWQsIGRldmljZU5hbWUuZ2V0KCksIHR5cGUsICJkZWZhdWx0Iiwgc3Ry
RmFjdG9yeU5hbWUpKTsKKworICAgIC8vIEZJWE1FOiBmaWxsIHNvdXJjZSBjYXBhYmlsaXRpZXMg
YW5kIHN0YXRlcy4KKworICAgIHJldHVybiBtZWRpYVN0cmVhbVNvdXJjZTsKK30KKworTWVkaWFT
dHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyOjpNZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3Ry
ZWFtZXIoKQoreworICAgIGluaXRpYWxpemVHU3RyZWFtZXIoKTsKKworICAgIHN0YXRpYyBib29s
IGRlYnVnQ2F0ZWdvcnlSZWdpc3RlcmVkID0gZmFsc2U7CisgICAgaWYgKCFkZWJ1Z0NhdGVnb3J5
UmVnaXN0ZXJlZCkgeworICAgICAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRfbWVk
aWFfc3RyZWFtX2RlYnVnLCAid2Via2l0bWVkaWFzdHJlYW0iLCAwLCAiV2ViS2l0IG1lZGlhc3Ry
ZWFtIik7CisgICAgICAgIGRlYnVnQ2F0ZWdvcnlSZWdpc3RlcmVkID0gdHJ1ZTsKKyAgICB9CisK
KyAgICBMT0dfTUVESUFfTUVTU0FHRSgiRGlzY292ZXJpbmcgbWVkaWEgc291cmNlIGRldmljZXMi
KTsKKyAgICBkaXNjb3ZlckRldmljZXMoTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvKTsKKyAgICBk
aXNjb3ZlckRldmljZXMoTWVkaWFTdHJlYW1Tb3VyY2U6OlZpZGVvKTsKK30KKwordm9pZCBNZWRp
YVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXI6OmRpc2NvdmVyRGV2aWNlcyhNZWRpYVN0cmVh
bVNvdXJjZTo6VHlwZSB0eXBlKQoreworICAgIGNvbnN0IGNoYXIqIGVsZW1lbnROYW1lID0gbnVs
bHB0cjsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlOjpB
dWRpbzoKKyAgICAgICAgZWxlbWVudE5hbWUgPSAiYXV0b2F1ZGlvc3JjIjsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6VmlkZW86CisgICAgICAgIGVsZW1lbnRO
YW1lID0gImF1dG92aWRlb3NyYyI7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEdSZWZQ
dHI8R3N0RWxlbWVudD4gZGV2aWNlU291cmNlID0gZmluZERldmljZVNvdXJjZShlbGVtZW50TmFt
ZSk7CisgICAgaWYgKCFkZXZpY2VTb3VyY2UpCisgICAgICAgIHJldHVybjsKKworICAgIHN0b3Jl
RWxlbWVudEZhY3RvcnlGb3JFbGVtZW50KGRldmljZVNvdXJjZS5nZXQoKSk7CisKKyAgICBSZWZQ
dHI8TWVkaWFTdHJlYW1Tb3VyY2VHU3RyZWFtZXI+IHNvdXJjZSA9IHByb2JlU291cmNlKGRldmlj
ZVNvdXJjZS5nZXQoKSwgdHlwZSk7CisgICAgU3RyaW5nIGlkID0gc291cmNlLT5pZCgpOworCisg
ICAgTWVkaWFTdHJlYW1Tb3VyY2VHU3RyZWFtZXJNYXA6Oml0ZXJhdG9yIHNvdXJjZUl0ZXJhdG9y
ID0gbV9zb3VyY2VNYXAuZmluZChpZCk7CisgICAgaWYgKHNvdXJjZUl0ZXJhdG9yID09IG1fc291
cmNlTWFwLmVuZCgpKQorICAgICAgICBtX3NvdXJjZU1hcC5hZGQoaWQsIHNvdXJjZSk7Cit9CisK
K1N0cmluZyBNZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXI6OnN0b3JlRWxlbWVudEZh
Y3RvcnlGb3JFbGVtZW50KEdzdEVsZW1lbnQqIHNvdXJjZSkKK3sKKyAgICBHc3RFbGVtZW50RmFj
dG9yeSogZWxlbWVudEZhY3RvcnkgPSBnc3RfZWxlbWVudF9nZXRfZmFjdG9yeShzb3VyY2UpOwor
ICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGZhY3RvcnlOYW1lKGdzdF9lbGVtZW50X2dldF9uYW1lKGVs
ZW1lbnRGYWN0b3J5KSk7CisgICAgU3RyaW5nIHN0ckZhY3RvcnlOYW1lKGZhY3RvcnlOYW1lLmdl
dCgpKTsKKworICAgIEVsZW1lbnRGYWN0b3J5TWFwOjppdGVyYXRvciBlbGVtZW50RmFjdG9yeUl0
ZXIgPSBtX2VsZW1lbnRGYWN0b3J5TWFwLmZpbmQoc3RyRmFjdG9yeU5hbWUpOworICAgIGlmIChl
bGVtZW50RmFjdG9yeUl0ZXIgPT0gbV9lbGVtZW50RmFjdG9yeU1hcC5lbmQoKSkKKyAgICAgICAg
bV9lbGVtZW50RmFjdG9yeU1hcC5hZGQoc3RyRmFjdG9yeU5hbWUsIGVsZW1lbnRGYWN0b3J5KTsK
KworICAgIHJldHVybiBzdHJGYWN0b3J5TmFtZTsKK30KKworR3N0RWxlbWVudEZhY3RvcnkqIE1l
ZGlhU3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcjo6c3RvcmVkRWxlbWVudEZhY3RvcnkoY29u
c3QgU3RyaW5nJiBrZXkpCit7CisgICAgR3N0RWxlbWVudEZhY3RvcnkqIGVsZW1lbnRGYWN0b3J5
ID0gbnVsbHB0cjsKKyAgICBFbGVtZW50RmFjdG9yeU1hcDo6aXRlcmF0b3IgZWxlbWVudEZhY3Rv
cnlJdGVyID0gbV9lbGVtZW50RmFjdG9yeU1hcC5maW5kKGtleSk7CisgICAgaWYgKGVsZW1lbnRG
YWN0b3J5SXRlciAhPSBtX2VsZW1lbnRGYWN0b3J5TWFwLmVuZCgpKQorICAgICAgICBlbGVtZW50
RmFjdG9yeSA9IChlbGVtZW50RmFjdG9yeUl0ZXItPnZhbHVlKS5nZXQoKTsKKyAgICByZXR1cm4g
ZWxlbWVudEZhY3Rvcnk7Cit9CisKK1Bhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IE1lZGlh
U3RyZWFtQ2VudGVyUHJpdmF0ZUdTdHJlYW1lcjo6Zmlyc3RTb3VyY2UoTWVkaWFTdHJlYW1Tb3Vy
Y2U6OlR5cGUgdHlwZSkKK3sKKyAgICBmb3IgKGF1dG8gaXRlciA9IG1fc291cmNlTWFwLmJlZ2lu
KCk7IGl0ZXIgIT0gbV9zb3VyY2VNYXAuZW5kKCk7ICsraXRlcikgeworICAgICAgICBSZWZQdHI8
TWVkaWFTdHJlYW1Tb3VyY2U+IHNvdXJjZSA9IGl0ZXItPnZhbHVlOworICAgICAgICBpZiAoc291
cmNlLT50eXBlKCkgPT0gdHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzb3VyY2U7CisgICAgfQor
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJl
YW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMzM3OWU5YTEzNTViNzE0ZWFmNmI5NWIyMGU1MDc3YzRmNjViMmIxZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9NZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXIuaApAQCAtMCwwICsxLDU4IEBACisv
KgorICogIENvcHlyaWdodCAoQykgMjAxMiBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAxNCBDb21wYW55IDEwMCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisKKyNpZm5kZWYgTWVk
aWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyX2gKKyNkZWZpbmUgTWVkaWFTdHJlYW1DZW50
ZXJQcml2YXRlR1N0cmVhbWVyX2gKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShH
U1RSRUFNRVIpCisKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lci5oIgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxNZWRpYVN0cmVhbUNlbnRlclByaXZhdGVHU3RyZWFtZXI+IGNyZWF0ZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1lZGlhU3RyZWFtQ2VudGVyUHJpdmF0
ZUdTdHJlYW1lcigpKTsKKyAgICB9CisKKyAgICBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNl
PiBmaXJzdFNvdXJjZShNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZSk7CisKK3ByaXZhdGU6CisgICAg
TWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0cmVhbWVyKCk7CisKKyAgICB2b2lkIGRpc2NvdmVy
RGV2aWNlcyhNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZSk7CisgICAgU3RyaW5nIHN0b3JlRWxlbWVu
dEZhY3RvcnlGb3JFbGVtZW50KEdzdEVsZW1lbnQqIHNvdXJjZSk7CisgICAgR3N0RWxlbWVudEZh
Y3RvcnkqIHN0b3JlZEVsZW1lbnRGYWN0b3J5KGNvbnN0IFN0cmluZyYga2V5KTsKKworICAgIHR5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIEdSZWZQdHI8R3N0RWxlbWVudEZhY3Rvcnk+PiBFbGVtZW50
RmFjdG9yeU1hcDsKKworICAgIE1lZGlhU3RyZWFtU291cmNlR1N0cmVhbWVyTWFwIG1fc291cmNl
TWFwOworICAgIEVsZW1lbnRGYWN0b3J5TWFwIG1fZWxlbWVudEZhY3RvcnlNYXA7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAm
JiBVU0UoR1NUUkVBTUVSKQorCisjZW5kaWYgLy8gTWVkaWFTdHJlYW1DZW50ZXJQcml2YXRlR1N0
cmVhbWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9NZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01lZGlhU3RyZWFtU291cmNlR1N0cmVhbWVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uY2UyOWRiNTMxZGQ1YjBkZTQ4ZjQ4OTEyYzA1ZGMyYzJhYTQzNzE5Mgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9NZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lci5oCkBAIC0wLDAgKzEsNjUgQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDE0IENvbXBhbnkgMTAwIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgTWVkaWFTdHJl
YW1Tb3VyY2VHU3RyZWFtZXJfaAorI2RlZmluZSBNZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lcl9o
CisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVk
ZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtU291cmNlLmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFTdHJlYW1Tb3VyY2VDYXBhYmlsaXRpZXM7CisK
K2NsYXNzIE1lZGlhU3RyZWFtU291cmNlR1N0cmVhbWVyIGZpbmFsIDogcHVibGljIE1lZGlhU3Ry
ZWFtU291cmNlIHsKK3B1YmxpYzoKK01lZGlhU3RyZWFtU291cmNlR1N0cmVhbWVyKGNvbnN0IEF0
b21pY1N0cmluZyYgaWQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgTWVkaWFTdHJlYW1Tb3Vy
Y2U6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBkZXZpY2UsIGNvbnN0IFN0cmluZyYgZmFjdG9y
eUtleSkKKyAgICA6IE1lZGlhU3RyZWFtU291cmNlKGlkLCB0eXBlLCBuYW1lKQorICAgICwgbV9m
YWN0b3J5S2V5KGZhY3RvcnlLZXkpCisgICAgLCBtX2RldmljZShkZXZpY2UpCisgICAgeworICAg
IH0KKworICAgIHZpcnR1YWwgfk1lZGlhU3RyZWFtU291cmNlR1N0cmVhbWVyKCkgeyB9CisKKyAg
ICB2aXJ0dWFsIFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZUNhcGFiaWxpdGllcz4gY2FwYWJpbGl0
aWVzKCkgY29uc3QgeyByZXR1cm4gbV9jYXBhYmlsaXRpZXM7IH0KKyAgICB2aXJ0dWFsIGNvbnN0
IE1lZGlhU3RyZWFtU291cmNlU3RhdGVzJiBzdGF0ZXMoKSB7IHJldHVybiBtX2N1cnJlbnRTdGF0
ZXM7IH0KKworICAgIGNvbnN0IFN0cmluZyYgZmFjdG9yeUtleSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmFjdG9yeUtleTsgfQorICAgIGNvbnN0IFN0cmluZyYgZGV2aWNlKCkgY29uc3QgeyByZXR1cm4g
bV9kZXZpY2U7IH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2VDYXBh
YmlsaXRpZXM+IG1fY2FwYWJpbGl0aWVzOworICAgIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzIG1f
Y3VycmVudFN0YXRlczsKKworICAgIFN0cmluZyBtX2ZhY3RvcnlLZXk7CisgICAgU3RyaW5nIG1f
ZGV2aWNlOworfTsKKwordHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPE1lZGlhU3RyZWFt
U291cmNlR1N0cmVhbWVyPj4gTWVkaWFTdHJlYW1Tb3VyY2VHU3RyZWFtZXJNYXA7CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVT
RShHU1RSRUFNRVIpCisKKyNlbmRpZiAvLyBNZWRpYVN0cmVhbVNvdXJjZUdTdHJlYW1lcl9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>