<?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>139441</bug_id>
          
          <creation_ts>2014-12-09 03:55:48 -0800</creation_ts>
          <short_desc>[GStreamer] Rewrite MediaSource implementation</short_desc>
          <delta_ts>2015-01-05 06:36:13 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>140078</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sebastian Dröge (slomo)">slomo</reporter>
          <assigned_to name="Sebastian Dröge (slomo)">slomo</assigned_to>
          <cc>b.gajda</cc>
    
    <cc>commit-queue</cc>
    
    <cc>pnormand</cc>
    
    <cc>vjaquez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1053735</commentid>
    <comment_count>0</comment_count>
      <attachid>242907</attachid>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2014-12-09 03:55:48 -0800</bug_when>
    <thetext>Created attachment 242907
WIP patch

I&apos;m currently working on cleaning that up, which ended up being a complete rewrite. It works already on YouTube (without seeking), and some of the LayoutTests are succeeding. Much more work is needed tough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053757</commentid>
    <comment_count>1</comment_count>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2014-12-09 05:40:47 -0800</bug_when>
    <thetext>I think to handle all this correctly we need to implement an autoplugger for demuxers and parsers inside the source. That way we can notify about the initialization segment information and the media sample information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053761</commentid>
    <comment_count>2</comment_count>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2014-12-09 05:49:07 -0800</bug_when>
    <thetext>... and a custom MediaPlayer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054103</commentid>
    <comment_count>3</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2014-12-10 03:44:36 -0800</bug_when>
    <thetext>*** Bug 139471 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054155</commentid>
    <comment_count>4</comment_count>
      <attachid>243023</attachid>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2014-12-10 08:17:52 -0800</bug_when>
    <thetext>Created attachment 243023
WIP patch

Another WIP patch. This one is full of memory leaks and missing locks and assertions, but should be the direction into which this should go.

The previous patch is IMHO ok to be merged, it&apos;s clean and works at least better than what was there before. The new patch needs a lot more work to be mergeable but should use the MediaSource APIs properly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054444</commentid>
    <comment_count>5</comment_count>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2014-12-11 02:19:55 -0800</bug_when>
    <thetext>Should I prepare a merge-able patch from the first one? IMHO it&apos;s good to go, it&apos;s at least working better than what was there before and works on YouTube (except for seeking).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054772</commentid>
    <comment_count>6</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2014-12-12 00:03:10 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Should I prepare a merge-able patch from the first one? IMHO it&apos;s good to
&gt; go, it&apos;s at least working better than what was there before and works on
&gt; YouTube (except for seeking).

Ok, can you open a global bug for the pending TODOs and FIXMEs and mention it in the comments?

Also I&apos;ll need some time to review the patch, it&apos;s not small :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054784</commentid>
    <comment_count>7</comment_count>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2014-12-12 01:08:45 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; Should I prepare a merge-able patch from the first one? IMHO it&apos;s good to
&gt; &gt; go, it&apos;s at least working better than what was there before and works on
&gt; &gt; YouTube (except for seeking).
&gt; 
&gt; Ok, can you open a global bug for the pending TODOs and FIXMEs and mention
&gt; it in the comments?

Will do when I&apos;m at my laptop again later :)

&gt; Also I&apos;ll need some time to review the patch, it&apos;s not small :)

Just to be sure, I meant https://bugs.webkit.org/attachment.cgi?id=242907 . The other one is even bigger (but can be done on top of the first), and is definitely not ready yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055609</commentid>
    <comment_count>8</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2014-12-15 06:17:33 -0800</bug_when>
    <thetext>I&apos;ll do a first pass on the smallest patch now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055611</commentid>
    <comment_count>9</comment_count>
      <attachid>242907</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2014-12-15 06:45:43 -0800</bug_when>
    <thetext>Comment on attachment 242907
WIP patch

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

Thanks for working on this! The patch is going in the good direction :)

&gt; Source/WebCore/platform/graphics/gstreamer/SourceBufferPrivateGStreamer.cpp:61
&gt; +    SourceBufferPrivateClient::AppendResult result;

Please move this below, same line as assignment.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:29
&gt;  #include &quot;TimeRanges.h&quot;

I think the GThreadSafeMainLoopSource.h #include can be removed now.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:231
&gt; -    case GST_QUERY_URI: {
&gt; +    case GST_QUERY_URI:

Why removing the block?

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:237
&gt; +    default:{

Please leave that white space alone :)

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:330
&gt; +#if 0
&gt; +    if (GST_STATE(m_src.get()) &gt; GST_STATE_READY) {
&gt; +        GST_ERROR_OBJECT(m_src.get(), &quot;Adding new source buffers after READY state not supported&quot;);
&gt; +        return MediaSourcePrivate::NotSupported;
&gt;      }
&gt; +#endif

Please remove this dead code.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:332
&gt; +    GST_ERROR_OBJECT(m_src.get(), &quot;State %d&quot;, (int)GST_STATE(m_src.get()));

We avoid C-style casts in WebKit, I think a reinterpret_cast would work here.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:365
&gt; +    GstClockTime gstDuration = gst_util_uint64_scale (duration.timeValue(), GST_SECOND, duration.timeScale());

No space before ( :)

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:381
&gt; +    GList *l;

Misplaced *

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:389
&gt; +    for (l = priv-&gt;sources; l; l = l-&gt;next) {

l could be declared here, how about iter for the name?

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:390
&gt; +        Source *tmp = static_cast&lt;Source*&gt;(l-&gt;data);

Misplaced *

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:404
&gt; +    GST_ERROR_OBJECT(m_src.get(), &quot;push buffer %d\n&quot;, (int)ret);

No C-style cast please. Also, why using ERROR_OBJECT?

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:409
&gt; +    else
&gt; +        return SourceBufferPrivateClient::ReadStreamFailed;

This can just be return ...Failed; (without else)

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:426
&gt; +    for (l = priv-&gt;sources; l; l = l-&gt;next) {
&gt; +        Source *source = static_cast&lt;Source*&gt;(l-&gt;data);

Same comments about variable declaration, name and misplaced * :)

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:439
&gt; +    GList *l;
&gt; +
&gt; +    for (l = priv-&gt;sources; l; l = l-&gt;next) {
&gt; +        Source *tmp = static_cast&lt;Source*&gt;(l-&gt;data);

Ditto

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:446
&gt; +    if (!source || !source-&gt;src)

Perhaps there should be an ASSERT for this.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:456
&gt; +namespace WTF {
&gt; +template &lt;&gt; GRefPtr&lt;WebKitMediaSrc&gt; adoptGRef(WebKitMediaSrc* ptr)

Hum :) So there&apos;s no way to use a GRefPtr&lt;GstElement&gt; ?

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.h:71
&gt; +class MediaSourceClientGStreamer: public RefCounted&lt;MediaSourceClientGStreamer&gt; {

I think this should have a separate cpp/h files for MediaSourceClientGStreamer, if possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055664</commentid>
    <comment_count>10</comment_count>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2014-12-15 10:27:21 -0800</bug_when>
    <thetext>Next version of that patch will come with a changelog and everything later.

(In reply to comment #9)

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:29
&gt; &gt;  #include &quot;TimeRanges.h&quot;
&gt; 
&gt; I think the GThreadSafeMainLoopSource.h #include can be removed now.

It can, but it will come back later :)

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:231
&gt; &gt; -    case GST_QUERY_URI: {
&gt; &gt; +    case GST_QUERY_URI:
&gt; 
&gt; Why removing the block?

Because no new variables were declared in that block. I&apos;ll add it back if you think that&apos;s a good idea

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:237
&gt; &gt; +    default:{
&gt; 
&gt; Please leave that white space alone :)

Oops :)

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:404
&gt; &gt; +    GST_ERROR_OBJECT(m_src.get(), &quot;push buffer %d\n&quot;, (int)ret);
&gt; 
&gt; No C-style cast please. Also, why using ERROR_OBJECT?

Debug code

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:446
&gt; &gt; +    if (!source || !source-&gt;src)
&gt; 
&gt; Perhaps there should be an ASSERT for this.

Indeed

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:456
&gt; &gt; +namespace WTF {
&gt; &gt; +template &lt;&gt; GRefPtr&lt;WebKitMediaSrc&gt; adoptGRef(WebKitMediaSrc* ptr)
&gt; 
&gt; Hum :) So there&apos;s no way to use a GRefPtr&lt;GstElement&gt; ?

That would require casting it always back to a WebKitMediaSrc, but it would be possible.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.h:71
&gt; &gt; +class MediaSourceClientGStreamer: public RefCounted&lt;MediaSourceClientGStreamer&gt; {
&gt; 
&gt; I think this should have a separate cpp/h files for
&gt; MediaSourceClientGStreamer, if possible.

The main reason why I kept it in this file is that it&apos;s just a C++ wrapper for interacting with the GStreamer source element from the other WebKit code without using any GStreamer/GObject API. If I was to move it to a separate file, I would have to move the struct definitions from the source element into a header too or add some C API for the C++ wrapper (but then it becomes riciculous :) )

So I would prefer to have it like this, that C++ class is really the public interface of that source file and the GStreamer source element is just the implementation that is behind it. But maybe we should rename the file to something else then?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056726</commentid>
    <comment_count>11</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2014-12-18 00:26:51 -0800</bug_when>
    <thetext>(In reply to comment #10)

&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.h:71
&gt; &gt; &gt; +class MediaSourceClientGStreamer: public RefCounted&lt;MediaSourceClientGStreamer&gt; {
&gt; &gt; 
&gt; &gt; I think this should have a separate cpp/h files for
&gt; &gt; MediaSourceClientGStreamer, if possible.
&gt; 
&gt; The main reason why I kept it in this file is that it&apos;s just a C++ wrapper
&gt; for interacting with the GStreamer source element from the other WebKit code
&gt; without using any GStreamer/GObject API. If I was to move it to a separate
&gt; file, I would have to move the struct definitions from the source element
&gt; into a header too or add some C API for the C++ wrapper (but then it becomes
&gt; riciculous :) )
&gt; 
&gt; So I would prefer to have it like this, that C++ class is really the public
&gt; interface of that source file and the GStreamer source element is just the
&gt; implementation that is behind it. But maybe we should rename the file to
&gt; something else then?

Ok then let&apos;s just keep this as it is :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056732</commentid>
    <comment_count>12</comment_count>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2014-12-18 01:28:27 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Ok then let&apos;s just keep this as it is :)

Ok, that&apos;s what I was waiting for :) Will prepare a new patch later then</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057585</commentid>
    <comment_count>13</comment_count>
      <attachid>243674</attachid>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2014-12-23 07:10:52 -0800</bug_when>
    <thetext>Created attachment 243674
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057587</commentid>
    <comment_count>14</comment_count>
      <attachid>243023</attachid>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2014-12-23 07:12:17 -0800</bug_when>
    <thetext>Comment on attachment 243023
WIP patch

This patch is not obsolete, it&apos;s WIP on top of the newer patch (which should go in already). Future work should happen based on this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057765</commentid>
    <comment_count>15</comment_count>
      <attachid>243674</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2014-12-24 01:40:19 -0800</bug_when>
    <thetext>Comment on attachment 243674
Patch

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

&gt; Source/WebCore/ChangeLog:101
&gt; +        This now is a clean reimplementation around appsrc that works good
&gt; +        enough for YouTube (except for seeking), but it still does not
&gt; +        implement the complete API correctly. Further work is required on
&gt; +        top of this and the Bugzilla ticket linked above contains some
&gt; +        further work in the right direction.

Usually this kind of explanation goes before the list of changed files.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:557
&gt; +    // TODO: Should do more than that, need to notify the media source
&gt; +    // and probably flush the pipeline at least

Missing full stop :) Also for the remaining TODO and FIXMEs can you please open  a new bug and mention it in the comments? I suppose your other patch will address those?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058086</commentid>
    <comment_count>16</comment_count>
      <attachid>243793</attachid>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2014-12-29 05:44:39 -0800</bug_when>
    <thetext>Created attachment 243793
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058088</commentid>
    <comment_count>17</comment_count>
      <attachid>243793</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2014-12-29 06:05:27 -0800</bug_when>
    <thetext>Comment on attachment 243793
Patch

Ok! Let&apos;s move the other patch to a new bug then :) Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058089</commentid>
    <comment_count>18</comment_count>
      <attachid>243793</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-29 06:46:40 -0800</bug_when>
    <thetext>Comment on attachment 243793
Patch

Clearing flags on attachment: 243793

Committed r177790: &lt;http://trac.webkit.org/changeset/177790&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058090</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-29 06:46:45 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242907</attachid>
            <date>2014-12-09 03:55:48 -0800</date>
            <delta_ts>2014-12-23 07:10:28 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>0001-WIP.patch</filename>
            <type>text/plain</type>
            <size>53883</size>
            <attacher name="Sebastian Dröge (slomo)">slomo</attacher>
            
              <data encoding="base64">RnJvbSAwMWJjMTcwMTBjZmJhZjIxNjUzZWNhNmFiYzcyYzg0N2VjYThmMjhlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/U2ViYXN0aWFuPTIwRHI9QzM9QjZnZT89IDxz
ZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgpEYXRlOiBNb24sIDggRGVjIDIwMTQgMTg6NDM6MjMg
KzAxMDAKU3ViamVjdDogW1BBVENIXSBXSVAKCi0tLQogTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3Rr
L1Rlc3RFeHBlY3RhdGlvbnMgICAgICAgICAgfCAgNDkgKy0KIC4uLi9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCAgICAgIHwgIDEwICstCiAuLi4vZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oICAgICAgICB8ICAxMSArCiAuLi4vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhU291cmNlR1N0cmVhbWVyLmNwcCAgICB8ICAzNyArLQogLi4uL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVNvdXJjZUdTdHJlYW1lci5oICAgICAgfCAgMjggKy0KIC4uLi9n
c3RyZWFtZXIvU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgICAgIHwgIDY5ICsrLQog
Li4uL2dzdHJlYW1lci9Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmggICAgICAgfCAgMzQg
Ky0KIC4uLi9nc3RyZWFtZXIvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwICAgICAgIHwg
NjUwICsrKysrKy0tLS0tLS0tLS0tLS0tLQogLi4uL2dzdHJlYW1lci9XZWJLaXRNZWRpYVNvdXJj
ZUdTdHJlYW1lci5oICAgICAgICAgfCAgNDAgKy0KIDkgZmlsZXMgY2hhbmdlZCwgMzk3IGluc2Vy
dGlvbnMoKyksIDUzMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0
RXhwZWN0YXRpb25zCmluZGV4IDU2ODRhMjEuLjlhYjZmNjIgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCkBAIC0yMTgsOCArMjE4LDUzIEBAIHdlYmtpdC5vcmcv
Yi82MTY2MSBlZGl0aW5nL3Bhc3RlYm9hcmQvZHJhZy1kcm9wLWxpc3QuaHRtbCBbIEZhaWx1cmUg
XQogd2Via2l0Lm9yZy9iLzkyNzQ5IGZhc3QvZG9tL05hdmlnYXRvckNvbnRlbnRVdGlscy9pcy1w
cm90b2NvbC1oYW5kbGVyLXJlZ2lzdGVyZWQuaHRtbCBbIFNraXAgXQogCiAjIFRlc3RzIGZvciBN
ZWRpYVNvdXJjZSBBUEkuIEZlYXR1cmUgaXMgbm90IHRvdGFsbHkgZnVuY3Rpb25hbC4KLXdlYmtp
dC5vcmcvYi85OTA2NSBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZSBbIFNraXAgXQotd2Vi
a2l0Lm9yZy9iLzk5MDY1IG1lZGlhL21lZGlhLXNvdXJjZSBbIFNraXAgXQord2Via2l0Lm9yZy9i
Lzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWFwcGVuZC1i
dWZmZXIuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEv
bWVkaWEtc291cmNlL21lZGlhc291cmNlLWFwcGVuZC1zdHJlYW0uaHRtbCBbIFNraXAgXQord2Vi
a2l0Lm9yZy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNl
LWFwcGVuZHdpbmRvdy5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgaHR0cC90ZXN0
cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtYnVmZmVyZWQuaHRtbCBbIFNraXAgXQor
d2Via2l0Lm9yZy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291
cmNlLWNvbmZpZy1jaGFuZ2UtbXA0LWEtYml0cmF0ZS5odG1sIFsgU2tpcCBdCit3ZWJraXQub3Jn
L2IvOTkwNjUgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtY29uZmln
LWNoYW5nZS1tcDQtYXYtYXVkaW8tYml0cmF0ZS5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2Iv
OTkwNjUgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtY29uZmlnLWNo
YW5nZS1tcDQtYXYtZnJhbWVzaXplLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBo
dHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jb25maWctY2hhbmdlLW1w
NC1hdi12aWRlby1iaXRyYXRlLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBodHRw
L3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jb25maWctY2hhbmdlLW1wNC12
LWJpdHJhdGUuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVk
aWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWNvbmZpZy1jaGFuZ2UtbXA0LXYtZnJhbWVyYXRl
Lmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBodHRwL3Rlc3RzL21lZGlhL21lZGlh
LXNvdXJjZS9tZWRpYXNvdXJjZS1jb25maWctY2hhbmdlLW1wNC12LWZyYW1lc2l6ZS5odG1sIFsg
U2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2Uv
bWVkaWFzb3VyY2UtY29uZmlnLWNoYW5nZS13ZWJtLWEtYml0cmF0ZS5odG1sIFsgU2tpcCBdCit3
ZWJraXQub3JnL2IvOTkwNjUgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3Vy
Y2UtY29uZmlnLWNoYW5nZS13ZWJtLWF2LWF1ZGlvLWJpdHJhdGUuaHRtbCBbIFNraXAgXQord2Vi
a2l0Lm9yZy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNl
LWNvbmZpZy1jaGFuZ2Utd2VibS1hdi1mcmFtZXNpemUuaHRtbCBbIFNraXAgXQord2Via2l0Lm9y
Zy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWNvbmZp
Zy1jaGFuZ2Utd2VibS1hdi12aWRlby1iaXRyYXRlLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcv
Yi85OTA2NSBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jb25maWct
Y2hhbmdlLXdlYm0tdi1iaXRyYXRlLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBo
dHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jb25maWctY2hhbmdlLXdl
Ym0tdi1mcmFtZXJhdGUuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5MDY1IGh0dHAvdGVz
dHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWNvbmZpZy1jaGFuZ2Utd2VibS12LWZy
YW1lc2l6ZS5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgaHR0cC90ZXN0cy9tZWRp
YS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtZHVyYXRpb24uaHRtbCBbIFNraXAgXQord2Via2l0
Lm9yZy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWdl
dHZpZGVvcGxheWJhY2txdWFsaXR5Lmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBo
dHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1pcy10eXBlLXN1cHBvcnRl
ZC5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgaHR0cC90ZXN0cy9tZWRpYS9tZWRp
YS1zb3VyY2UvbWVkaWFzb3VyY2UtcGxheS5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkw
NjUgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtcGxheS10aGVuLXNl
ZWstYmFjay5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgaHR0cC90ZXN0cy9tZWRp
YS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtcmVkdW5kYW50LXNlZWsuaHRtbCBbIFNraXAgXQor
d2Via2l0Lm9yZy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291
cmNlLXJlbW92ZS5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgaHR0cC90ZXN0cy9t
ZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2Utc2Vlay1iZXlvbmQtZHVyYXRpb24uaHRtbCBb
IFNraXAgXQord2Via2l0Lm9yZy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNl
L21lZGlhc291cmNlLXNlZWstZHVyaW5nLXBlbmRpbmctc2Vlay5odG1sIFsgU2tpcCBdCit3ZWJr
aXQub3JnL2IvOTkwNjUgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2Ut
c291cmNlYnVmZmVyLW1vZGUuaHRtbCBbIFNraXAgXQorCit3ZWJraXQub3JnL2IvOTkwNjUgbWVk
aWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1hcHBlbmQtZmFpbGVkLmh0bWwgWyBTa2lwIF0K
K3dlYmtpdC5vcmcvYi85OTA2NSBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLW11bHRp
cGxlLWluaXRpYWxpemF0aW9uLXNlZ21lbnRzLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85
OTA2NSBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLWFwcGVuZC1ub25zeW5jLXNhbXBs
ZS1hZnRlci1hYm9ydC5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgbWVkaWEvbWVk
aWEtc291cmNlL21lZGlhLXNvdXJjZS1kdXBsaWNhdGUtc2Vla2VkLmh0bWwgWyBTa2lwIF0KK3dl
YmtpdC5vcmcvYi85OTA2NSBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLWNhbnBsYXl0
aHJvdWdoLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBtZWRpYS9tZWRpYS1zb3Vy
Y2UvbWVkaWEtc291cmNlLWR1cmF0aW9uLWFmdGVyLWFwcGVuZC5odG1sIFsgU2tpcCBdCit3ZWJr
aXQub3JnL2IvOTkwNjUgbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1lbmQtb2Ytc3Ry
ZWFtLWJ1ZmZlcmVkLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBtZWRpYS9tZWRp
YS1zb3VyY2UvbWVkaWEtc291cmNlLWVuZC1vZi1zdHJlYW0uaHRtbCBbIFNraXAgXQord2Via2l0
Lm9yZy9iLzk5MDY1IG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtZnVkZ2UtZmFjdG9y
Lmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBtZWRpYS9tZWRpYS1zb3VyY2UvbWVk
aWEtc291cmNlLW1vbml0b3Itc291cmNlLWJ1ZmZlcnMuaHRtbCBbIFNraXAgXQord2Via2l0Lm9y
Zy9iLzk5MDY1IG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2Utb3ZlcmxhcHBpbmctYXBw
ZW5kLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBtZWRpYS9tZWRpYS1zb3VyY2Uv
bWVkaWEtc291cmNlLW92ZXJsYXBwaW5nLWRlY29kZXRpbWUuaHRtbCBbIFNraXAgXQord2Via2l0
Lm9yZy9iLzk5MDY1IG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtcGxheS5odG1sIFsg
U2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJj
ZS1yZW1vdmUuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5MDY1IG1lZGlhL21lZGlhLXNv
dXJjZS9tZWRpYS1zb3VyY2Utc2Vlay1jb21wbGV0ZS5odG1sIFsgU2tpcCBdCit3ZWJraXQub3Jn
L2IvOTkwNjUgbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS10cmFjay1lbmFibGVkLmh0
bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEt
c291cmNlLXRyYWNrcy5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgbWVkaWEvbWVk
aWEtc291cmNlL21lZGlhLXNvdXJjZS12aWRlby1wbGF5YmFjay1xdWFsaXR5Lmh0bWwgWyBTa2lw
IF0KIAogIyBFbmNyeXB0ZWQgTWVkaWEgRXh0ZW5zaW9ucyBhcmUgbm90IGVuYWJsZWQuCiB3ZWJr
aXQub3JnL2IvOTkwMjQgbWVkaWEvZW5jcnlwdGVkLW1lZGlhIFsgU2tpcCBdCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IDhjOWE2MzcuLjZk
YzAzZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
Y3BwCkBAIC01NTMsNiArNTUzLDExIEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
Ojpkb1NlZWsoZ2ludDY0IHBvc2l0aW9uLCBmbG9hdCByYXRlLCBHc3RTZWVrRmxhCiB7CiAgICAg
Z2ludDY0IHN0YXJ0VGltZSwgZW5kVGltZTsKIAorICAgIC8vIFRPRE86IFNob3VsZCBkbyBtb3Jl
IHRoYW4gdGhhdCwgbmVlZCB0byBub3RpZnkgdGhlIG1lZGlhIHNvdXJjZQorICAgIC8vIGFuZCBw
cm9iYWJseSBmbHVzaCB0aGUgcGlwZWxpbmUgYXQgbGVhc3QKKyAgICBpZiAoaXNNZWRpYVNvdXJj
ZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgIGlmIChyYXRlID4gMCkgewogICAgICAg
ICBzdGFydFRpbWUgPSBwb3NpdGlvbjsKICAgICAgICAgZW5kVGltZSA9IEdTVF9DTE9DS19USU1F
X05PTkU7CkBAIC0xMjMzLDcgKzEyMzgsNyBAQCBmbG9hdCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6Om1heFRpbWVMb2FkZWQoKSBjb25zdAogCiBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6ZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcGxheUJp
biB8fCAhbV9tZWRpYUR1cmF0aW9uIHx8ICF0b3RhbEJ5dGVzKCkpCisgICAgaWYgKCFtX3BsYXlC
aW4gfHwgIW1fbWVkaWFEdXJhdGlvbiB8fCAoIWlzTWVkaWFTb3VyY2UoKSAmJiAhdG90YWxCeXRl
cygpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGZsb2F0IGN1cnJlbnRNYXhUaW1lTG9h
ZGVkID0gbWF4VGltZUxvYWRlZCgpOwogICAgIGJvb2wgZGlkTG9hZGluZ1Byb2dyZXNzID0gY3Vy
cmVudE1heFRpbWVMb2FkZWQgIT0gbV9tYXhUaW1lTG9hZGVkQXRMYXN0RGlkTG9hZGluZ1Byb2dy
ZXNzOwpAQCAtMTMwNyw3ICsxMzEyLDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnNvdXJjZUNoYW5nZWQoKQogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCiAgICAgaWYgKG1f
bWVkaWFTb3VyY2UgJiYgV0VCS0lUX0lTX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSkpIHsKICAg
ICAgICAgTWVkaWFTb3VyY2VHU3RyZWFtZXI6Om9wZW4obV9tZWRpYVNvdXJjZS5nZXQoKSwgV0VC
S0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSkpOwotICAgICAgICB3ZWJLaXRNZWRpYVNyY1Nl
dFBsYXlCaW4oV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSksIG1fcGxheUJpbi5nZXQo
KSk7CiAgICAgfQogI2VuZGlmCiB9CkBAIC0xOTY0LDcgKzE5NjgsNyBAQCBib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2FuU2F2ZU1lZGlhRGF0YSgpIGNvbnN0CiAKICAgICBpZiAo
bV91cmwucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAKKwogICAgIHJldHVybiBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IDI4NTNlNGEuLmJmOWZkNjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKQEAgLTE2Niw2ICsxNjYsMTQgQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgZGlkUGFzc0NPUlNBY2Nlc3NDaGVjaygpIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBjYW5TYXZlTWVkaWFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CiAK
KyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorICAgIC8vIFRPRE86IEltcGxlbWVudAorICAgIHZp
cnR1YWwgdW5zaWduZWQgbG9uZyB0b3RhbFZpZGVvRnJhbWVzKCkgeyByZXR1cm4gMDsgfQorICAg
IHZpcnR1YWwgdW5zaWduZWQgbG9uZyBkcm9wcGVkVmlkZW9GcmFtZXMoKSB7IHJldHVybiAwOyB9
CisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGNvcnJ1cHRlZFZpZGVvRnJhbWVzKCkgeyByZXR1
cm4gMDsgfQorICAgIHZpcnR1YWwgTWVkaWFUaW1lIHRvdGFsRnJhbWVEZWxheSgpIHsgcmV0dXJu
IE1lZGlhVGltZTo6emVyb1RpbWUoKTsgfQorI2VuZGlmCisKIHByaXZhdGU6CiAgICAgR1JlZlB0
cjxHc3RFbGVtZW50PiBtX3BsYXlCaW47CiAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3NvdXJj
ZTsKQEAgLTIyNSw2ICsyMzMsOSBAQCBwcml2YXRlOgogI2VuZGlmCiAjaWYgRU5BQkxFKE1FRElB
X1NPVVJDRSkKICAgICBSZWZQdHI8TWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50PiBtX21lZGlhU291
cmNlOworICAgIGJvb2wgaXNNZWRpYVNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFTb3Vy
Y2U7IH0KKyNlbHNlCisgICAgYm9vbCBpc01lZGlhU291cmNlKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICNlbmRpZgogfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTb3VyY2VHU3RyZWFtZXIuY3Bw
CmluZGV4IDYyM2VlMDYuLjcwM2FjMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU291cmNlR1N0cmVh
bWVyLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMyBPcmFuZ2UK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJp
Y3VsYXIuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzcsNiAr
MzgsNyBAQAogI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuaCIKICNpbmNs
dWRlICJXZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5oIgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dSZWZQdHIuaD4KKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTQ3LDcgKzQ5LDcgQEAgdm9pZCBNZWRpYVNvdXJjZUdTdHJlYW1lcjo6b3Bl
bihNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqIG1lZGlhU291cmNlLCBXZWJLaXRNZWQKIH0KIAog
TWVkaWFTb3VyY2VHU3RyZWFtZXI6Ok1lZGlhU291cmNlR1N0cmVhbWVyKE1lZGlhU291cmNlUHJp
dmF0ZUNsaWVudCogbWVkaWFTb3VyY2UsIFdlYktpdE1lZGlhU3JjKiBzcmMpCi0gICAgOiBtX2Ns
aWVudChhZG9wdFJlZihuZXcgTWVkaWFTb3VyY2VDbGllbnRHc3RyZWFtZXIoc3JjKSkpCisgICAg
OiBtX2NsaWVudChhZG9wdFJlZihuZXcgTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXIoc3JjKSkp
CiAgICAgLCBtX21lZGlhU291cmNlKG1lZGlhU291cmNlKQogICAgICwgbV9yZWFkeVN0YXRlKE1l
ZGlhUGxheWVyOjpIYXZlTm90aGluZykKIHsKQEAgLTYwLDIyICs2Miw0NSBAQCBNZWRpYVNvdXJj
ZUdTdHJlYW1lcjo6fk1lZGlhU291cmNlR1N0cmVhbWVyKCkKIAogTWVkaWFTb3VyY2VHU3RyZWFt
ZXI6OkFkZFN0YXR1cyBNZWRpYVNvdXJjZUdTdHJlYW1lcjo6YWRkU291cmNlQnVmZmVyKGNvbnN0
IENvbnRlbnRUeXBlJiBjb250ZW50VHlwZSwgUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGU+JiBz
b3VyY2VCdWZmZXJQcml2YXRlKQogewotICAgIHNvdXJjZUJ1ZmZlclByaXZhdGUgPSBhZG9wdFJl
ZihuZXcgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcihtX2NsaWVudC5nZXQoKSwgY29udGVu
dFR5cGUpKTsKLSAgICByZXR1cm4gTWVkaWFTb3VyY2VHU3RyZWFtZXI6Ok9rOworICAgIFJlZlB0
cjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyPiBzb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVh
bWVyID0gbmV3IFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIobV9jbGllbnQuZ2V0KCksIGNv
bnRlbnRUeXBlKTsKKworICAgIHNvdXJjZUJ1ZmZlclByaXZhdGUgPSBhZG9wdFJlZihzb3VyY2VC
dWZmZXJQcml2YXRlR1N0cmVhbWVyLmdldCgpKTsKKyAgICByZXR1cm4gbV9jbGllbnQtPmFkZFNv
dXJjZUJ1ZmZlcihzb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLCBjb250ZW50VHlwZSk7CiB9
CiAKIHZvaWQgTWVkaWFTb3VyY2VHU3RyZWFtZXI6OmR1cmF0aW9uQ2hhbmdlZCgpCiB7Ci0gICAg
bV9jbGllbnQtPmRpZFJlY2VpdmVEdXJhdGlvbihtX21lZGlhU291cmNlLT5kdXJhdGlvbigpLnRv
RG91YmxlKCkpOworICAgIG1fY2xpZW50LT5kdXJhdGlvbkNoYW5nZWQobV9tZWRpYVNvdXJjZS0+
ZHVyYXRpb24oKSk7CiB9CiAKLXZvaWQgTWVkaWFTb3VyY2VHU3RyZWFtZXI6Om1hcmtFbmRPZlN0
cmVhbShFbmRPZlN0cmVhbVN0YXR1cykKK3ZvaWQgTWVkaWFTb3VyY2VHU3RyZWFtZXI6Om1hcmtF
bmRPZlN0cmVhbShFbmRPZlN0cmVhbVN0YXR1cyBzdGF0dXMpCiB7Ci0gICAgbV9jbGllbnQtPmRp
ZEZpbmlzaExvYWRpbmcoMCk7CisgICAgbV9jbGllbnQtPm1hcmtFbmRPZlN0cmVhbShzdGF0dXMp
OwogfQogCiB2b2lkIE1lZGlhU291cmNlR1N0cmVhbWVyOjp1bm1hcmtFbmRPZlN0cmVhbSgpCiB7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgTWVk
aWFTb3VyY2VHU3RyZWFtZXI6OnJlYWR5U3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3Jl
YWR5U3RhdGU7Cit9CisKK3ZvaWQgTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNldFJlYWR5U3RhdGUo
TWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgc3RhdGUpCit7CisgICAgbV9yZWFkeVN0YXRlID0gc3Rh
dGU7Cit9CisKK3ZvaWQgTWVkaWFTb3VyY2VHU3RyZWFtZXI6OndhaXRGb3JTZWVrQ29tcGxldGVk
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIE1lZGlhU291cmNlR1N0cmVh
bWVyOjpzZWVrQ29tcGxldGVkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFTb3VyY2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9NZWRpYVNvdXJjZUdTdHJlYW1lci5oCmluZGV4IGFhY2E0NWUuLmYzMGIyOWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVNvdXJjZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVNvdXJjZUdTdHJlYW1lci5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDEzIE9yYW5nZQorICogQ29weXJpZ2h0IChDKSAyMDE0IFNlYmFzdGlh
biBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+CiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCkBAIC0zOCwyNSArMzksMjggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCisvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgY2FsbGVkIE1lZGlhU291cmNlUHJpdmF0ZUdT
dHJlYW1lcj8KIGNsYXNzIE1lZGlhU291cmNlR1N0cmVhbWVyIGZpbmFsIDogcHVibGljIE1lZGlh
U291cmNlUHJpdmF0ZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgb3BlbihNZWRpYVNvdXJj
ZVByaXZhdGVDbGllbnQqLCBXZWJLaXRNZWRpYVNyYyopOwotICAgIH5NZWRpYVNvdXJjZUdTdHJl
YW1lcigpOworICAgIHZpcnR1YWwgfk1lZGlhU291cmNlR1N0cmVhbWVyKCk7CisKKyAgICB2aXJ0
dWFsIEFkZFN0YXR1cyBhZGRTb3VyY2VCdWZmZXIoY29uc3QgQ29udGVudFR5cGUmLCBSZWZQdHI8
U291cmNlQnVmZmVyUHJpdmF0ZT4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHVyYXRpb25DaGFuZ2Vk
KCk7CisgICAgdmlydHVhbCB2b2lkIG1hcmtFbmRPZlN0cmVhbShFbmRPZlN0cmVhbVN0YXR1cyk7
CisgICAgdmlydHVhbCB2b2lkIHVubWFya0VuZE9mU3RyZWFtKCk7CisKKyAgICB2aXJ0dWFsIE1l
ZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgd2FpdEZvclNlZWtDb21wbGV0ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Vla0NvbXBs
ZXRlZCgpOwogCiBwcml2YXRlOgotICAgIC8vIE1lZGlhU291cmNlUHJpdmF0ZQotICAgIHZpcnR1
YWwgQWRkU3RhdHVzIGFkZFNvdXJjZUJ1ZmZlcihjb25zdCBDb250ZW50VHlwZSYsIFJlZlB0cjxT
b3VyY2VCdWZmZXJQcml2YXRlPiYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkdXJhdGlv
bkNoYW5nZWQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgbWFya0VuZE9mU3RyZWFtKEVu
ZE9mU3RyZWFtU3RhdHVzKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgdW5tYXJrRW5kT2ZT
dHJlYW0oKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJl
YWR5U3RhdGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlYWR5U3RhdGU7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0
YXRlKSBvdmVycmlkZSB7IG1fcmVhZHlTdGF0ZSA9IHJlYWR5U3RhdGU7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgd2FpdEZvclNlZWtDb21wbGV0ZWQoKSBvdmVycmlkZSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgc2Vla0NvbXBsZXRlZCgpIG92ZXJyaWRlIHsgfQorICAgIE1lZGlhU291cmNlR1N0cmVhbWVy
KE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCosIFdlYktpdE1lZGlhU3JjKik7CiAKLSAgICBSZWZQ
dHI8TWVkaWFTb3VyY2VDbGllbnRHc3RyZWFtZXI+IG1fY2xpZW50OworICAgIFJlZlB0cjxNZWRp
YVNvdXJjZUNsaWVudEdTdHJlYW1lcj4gbV9jbGllbnQ7CiAgICAgTWVkaWFTb3VyY2VQcml2YXRl
Q2xpZW50KiBtX21lZGlhU291cmNlOwotICAgIE1lZGlhU291cmNlR1N0cmVhbWVyKE1lZGlhU291
cmNlUHJpdmF0ZUNsaWVudCosIFdlYktpdE1lZGlhU3JjKik7CiAgICAgTWVkaWFQbGF5ZXI6OlJl
YWR5U3RhdGUgbV9yZWFkeVN0YXRlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1NvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1NvdXJjZUJ1
ZmZlclByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IDQ1YzVlOTEuLmVkZjZkZmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9Tb3VyY2VCdWZm
ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTEsNiAr
MSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgT3JhbmdlCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM5LDE5ICs0MCwzMiBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OlNvdXJjZUJ1
ZmZlclByaXZhdGVHU3RyZWFtZXIoUGFzc1JlZlB0cjxNZWRpYVNvdXJjZUNsaWVudEdzdHJlYW1l
cj4gY2xpZW50LCBjb25zdCBDb250ZW50VHlwZSYgY29udGVudFR5cGUpCi0gICAgOiBtX3JlYWR5
U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKQorU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJl
YW1lcjo6U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcihQYXNzUmVmUHRyPE1lZGlhU291cmNl
Q2xpZW50R1N0cmVhbWVyPiBjbGllbnQsIGNvbnN0IENvbnRlbnRUeXBlJiBjb250ZW50VHlwZSkK
KyAgICA6IG1fdHlwZShjb250ZW50VHlwZSkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKKyAgICAs
IG1fcmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpCiB7Ci0gICAgbV9jbGllbnQg
PSBjbGllbnQ7Ci0gICAgbV90eXBlID0gY29udGVudFR5cGUudHlwZSgpOworfQorCitTb3VyY2VC
dWZmZXJQcml2YXRlR1N0cmVhbWVyOjp+U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcigpCit7
Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0Q2xpZW50KFNvdXJj
ZUJ1ZmZlclByaXZhdGVDbGllbnQqIGNsaWVudCkKK3sKKyAgICBtX3NvdXJjZUJ1ZmZlclByaXZh
dGVDbGllbnQgPSBjbGllbnQ7CiB9CiAKIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1l
cjo6YXBwZW5kKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKIHsK
KyAgICBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpBcHBlbmRSZXN1bHQgcmVzdWx0OworCiAg
ICAgQVNTRVJUKG1fY2xpZW50KTsKLSAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEocmVpbnRl
cnByZXRfY2FzdF9wdHI8Y29uc3QgY2hhcio+KGRhdGEpLCBsZW5ndGgsIG1fdHlwZSk7CisgICAg
QVNTRVJUKG1fc291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudCk7CisKKyAgICByZXN1bHQgPSBtX2Ns
aWVudC0+YXBwZW5kKHRoaXMsIGRhdGEsIGxlbmd0aCk7CiAKLSAgICAvLyBGSVhNRTogY2FsbCBT
b3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50Ojpzb3VyY2VCdWZmZXJQcml2YXRlQXBwZW5kQ29tcGxl
dGUoKS4KKyAgICBtX3NvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQtPnNvdXJjZUJ1ZmZlclByaXZh
dGVBcHBlbmRDb21wbGV0ZSh0aGlzLCByZXN1bHQpOwogfQogCiB2b2lkIFNvdXJjZUJ1ZmZlclBy
aXZhdGVHU3RyZWFtZXI6OmFib3J0KCkKQEAgLTYxLDYgKzc1LDQ5IEBAIHZvaWQgU291cmNlQnVm
ZmVyUHJpdmF0ZUdTdHJlYW1lcjo6YWJvcnQoKQogCiB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVH
U3RyZWFtZXI6OnJlbW92ZWRGcm9tTWVkaWFTb3VyY2UoKQogeworICAgIG1fY2xpZW50LT5yZW1v
dmVkRnJvbU1lZGlhU291cmNlKHRoaXMpOworfQorCitNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBT
b3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpyZWFkeVN0YXRlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9yZWFkeVN0YXRlOworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFt
ZXI6OnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgc3RhdGUpCit7CisgICAg
bV9yZWFkeVN0YXRlID0gc3RhdGU7Cit9CisKKy8vIFRPRE86IEltcGxlbWVudCB0aGVzZQordm9p
ZCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpmbHVzaEFuZEVucXVldWVOb25EaXNwbGF5
aW5nU2FtcGxlcyhWZWN0b3I8UmVmUHRyPE1lZGlhU2FtcGxlPj4sIEF0b21pY1N0cmluZykKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3Ry
ZWFtZXI6OmVucXVldWVTYW1wbGUoUGFzc1JlZlB0cjxNZWRpYVNhbXBsZT4sIEF0b21pY1N0cmlu
ZykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFNvdXJjZUJ1ZmZlclByaXZh
dGVHU3RyZWFtZXI6OmlzUmVhZHlGb3JNb3JlU2FtcGxlcyhBdG9taWNTdHJpbmcpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTb3VyY2VC
dWZmZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRBY3RpdmUoYm9vbCBhY3RpdmUpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpz
dG9wQXNraW5nRm9yTW9yZVNhbXBsZXMoQXRvbWljU3RyaW5nKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5Q2xp
ZW50V2hlblJlYWR5Rm9yTW9yZVNhbXBsZXMoQXRvbWljU3RyaW5nKQorewogICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJl
YW1lci5oCmluZGV4IDU3NGUyMWEuLjE0ODI5ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1NvdXJj
ZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAxMyBPcmFuZ2UKKyAqIENvcHlyaWdodCAoQykgMjAxNCBTZWJhc3RpYW4gRHLDtmdl
IDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQpAQCAtMzYsMjYgKzM3LDM1IEBACiAKICNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2
YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRl
ICJDb250ZW50VHlwZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNvdXJjZUJ1
ZmZlclByaXZhdGVHU3RyZWFtZXIgZmluYWwgOiBwdWJsaWMgU291cmNlQnVmZmVyUHJpdmF0ZSB7
CiBwdWJsaWM6Ci0gICAgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcihQYXNzUmVmUHRyPE1l
ZGlhU291cmNlQ2xpZW50R3N0cmVhbWVyPiwgY29uc3QgQ29udGVudFR5cGUmKTsKLSAgICB+U291
cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcigpIHsgfQorICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVH
U3RyZWFtZXIoUGFzc1JlZlB0cjxNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lcj4sIGNvbnN0IENv
bnRlbnRUeXBlJik7CisgICAgdmlydHVhbCB+U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcigp
OwogCi0gICAgdm9pZCBzZXRDbGllbnQoU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudCopIHsgfQot
ICAgIHZvaWQgYXBwZW5kKGNvbnN0IHVuc2lnbmVkIGNoYXIqLCB1bnNpZ25lZCk7Ci0gICAgdm9p
ZCBhYm9ydCgpOwotICAgIHZvaWQgcmVtb3ZlZEZyb21NZWRpYVNvdXJjZSgpOwotICAgIE1lZGlh
UGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3JlYWR5U3Rh
dGU7IH0KLSAgICB2b2lkIHNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVh
ZHlTdGF0ZSkgeyBtX3JlYWR5U3RhdGUgPSByZWFkeVN0YXRlOyB9Ci0gICAgdm9pZCBldmljdENv
ZGVkRnJhbWVzKCkgeyB9Ci0gICAgYm9vbCBpc0Z1bGwoKSB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZpcnR1YWwgdm9pZCBzZXRDbGllbnQoU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudCopOworCisg
ICAgdmlydHVhbCB2b2lkIGFwcGVuZChjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCB1bnNpZ25l
ZCBsZW5ndGgpOworICAgIHZpcnR1YWwgdm9pZCBhYm9ydCgpOworICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVkRnJvbU1lZGlhU291cmNlKCk7CisKKyAgICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpSZWFk
eVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmVhZHlTdGF0
ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hBbmRF
bnF1ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXMoVmVjdG9yPFJlZlB0cjxNZWRpYVNhbXBsZT4+LCBB
dG9taWNTdHJpbmcpOworICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlU2FtcGxlKFBhc3NSZWZQdHI8
TWVkaWFTYW1wbGU+LCBBdG9taWNTdHJpbmcpOworICAgIHZpcnR1YWwgYm9vbCBpc1JlYWR5Rm9y
TW9yZVNhbXBsZXMoQXRvbWljU3RyaW5nKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0aXZlKGJv
b2wpOworICAgIHZpcnR1YWwgdm9pZCBzdG9wQXNraW5nRm9yTW9yZVNhbXBsZXMoQXRvbWljU3Ry
aW5nKTsKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Q2xpZW50V2hlblJlYWR5Rm9yTW9yZVNhbXBs
ZXMoQXRvbWljU3RyaW5nKTsKIAogcHJpdmF0ZToKLSAgICBTdHJpbmcgbV90eXBlOwotICAgIFJl
ZlB0cjxNZWRpYVNvdXJjZUNsaWVudEdzdHJlYW1lcj4gbV9jbGllbnQ7CisgICAgQ29udGVudFR5
cGUgbV90eXBlOworICAgIFJlZlB0cjxNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lcj4gbV9jbGll
bnQ7CisgICAgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudCogbV9zb3VyY2VCdWZmZXJQcml2YXRl
Q2xpZW50OwogICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9X
ZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwCmluZGV4IGI5
YTU0MjguLjQ1ZTYwZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdE1lZGlhU291cmNlR1N0
cmVhbWVyLmNwcApAQCAtMiw2ICsyLDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAg
U2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CiAgKiAg
Q29weXJpZ2h0IChDKSAyMDEzIENvbGxhYm9yYSBMdGQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDEz
IE9yYW5nZQorICogIENvcHlyaWdodCAoQykgMjAxNCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3Rp
YW5AY2VudHJpY3VsYXIuY29tPgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsMTAgKzI0LDEw
IEBACiAKICNpZiBFTkFCTEUoVklERU8pICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIFVTRShH
U1RSRUFNRVIpCiAKLSNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAiR1N0
cmVhbWVyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRl
ICJUaW1lUmFuZ2VzLmgiCisKICNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNyYy5oPgogI2luY2x1
ZGUgPGdzdC9nc3QuaD4KICNpbmNsdWRlIDxnc3QvcGJ1dGlscy9taXNzaW5nLXBsdWdpbnMuaD4K
QEAgLTM0LDQ5ICszNSwzNSBAQAogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dVbmlxdWVQdHIuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKLXR5cGVkZWYgc3RydWN0IF9Tb3VyY2Ug
ewotICAgIEdzdEVsZW1lbnQqIGFwcHNyYzsKLSAgICBndWludCBzb3VyY2VpZDsgICAgICAgIC8q
IFRvIGNvbnRyb2wgdGhlIEdTb3VyY2UgKi8KLSAgICBHc3RQYWQqIHNyY3BhZDsKLSAgICBnYm9v
bGVhbiBwYWRBZGRlZDsKLQotICAgIGd1aW50NjQgb2Zmc2V0OwotICAgIGd1aW50NjQgc2l6ZTsK
LSAgICBnYm9vbGVhbiBwYXVzZWQ7Ci0KLSAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIHN0
YXJ0OwotICAgIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2Ugc3RvcDsKLSAgICBHVGhyZWFkU2Fm
ZU1haW5Mb29wU291cmNlIG5lZWREYXRhOwotICAgIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2Ug
ZW5vdWdoRGF0YTsKLSAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIHNlZWs7Ci0KLSAgICBn
dWludDY0IHJlcXVlc3RlZE9mZnNldDsKLX0gU291cmNlOwotCi0KLSNkZWZpbmUgV0VCS0lUX01F
RElBX1NSQ19HRVRfUFJJVkFURShvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9i
aiksIFdFQktJVF9UWVBFX01FRElBX1NSQywgV2ViS2l0TWVkaWFTcmNQcml2YXRlKSkKK3R5cGVk
ZWYgc3RydWN0IF9Tb3VyY2UgU291cmNlOworc3RydWN0IF9Tb3VyY2UKK3sKKyAgICBHc3RFbGVt
ZW50KiBzcmM7CisgICAgLy8gSnVzdCBmb3IgaWRlbnRpZmljYXRpb24KKyAgICBXZWJDb3JlOjpT
b3VyY2VCdWZmZXJQcml2YXRlKiBzb3VyY2VCdWZmZXI7Cit9OwogCi1zdHJ1Y3QgX1dlYktpdE1l
ZGlhU3JjUHJpdmF0ZSB7Ci0gICAgZ2NoYXIqIHVyaTsKLSAgICBTb3VyY2Ugc291cmNlVmlkZW87
Ci0gICAgU291cmNlIHNvdXJjZUF1ZGlvOwotICAgIFdlYkNvcmU6Ok1lZGlhUGxheWVyKiBwbGF5
ZXI7Ci0gICAgR3N0RWxlbWVudCogcGxheWJpbjsKLSAgICBnaW50NjQgZHVyYXRpb247Ci0gICAg
Z2Jvb2xlYW4gc2Vla2FibGU7Ci0gICAgZ2Jvb2xlYW4gbm9Nb3JlUGFkOwotICAgIC8vIFRSVUUg
aWYgYXBwc3JjJ3MgdmVyc2lvbiBpcyA+PSAwLjEwLjI3LCBzZWUKLSAgICAvLyBodHRwczovL2J1
Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA5NDIzCi0gICAgZ2Jvb2xlYW4gaGF2
ZUFwcFNyYzI3OwotICAgIGd1aW50IG5iU291cmNlOworc3RydWN0IF9XZWJLaXRNZWRpYVNyY1By
aXZhdGUKK3sKKyAgICBHTGlzdCogc291cmNlczsKKyAgICBnY2hhciogbG9jYXRpb247CisgICAg
R3N0Q2xvY2tUaW1lIGR1cmF0aW9uOworICAgIGJvb2wgaGF2ZUFwcHNyYzsKKyAgICBib29sIGFz
eW5jU3RhcnQ7CisgICAgYm9vbCBub01vcmVQYWRzOwogfTsKIAotZW51bSB7Ci0gICAgUHJvcExv
Y2F0aW9uID0gMSwKLSAgICBQcm9MYXN0CitlbnVtCit7CisgICAgUFJPUF8wLAorICAgIFBST1Bf
TE9DQVRJT04sCisgICAgUFJPUF9MQVNUCiB9OwogCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxh
dGUgc3JjVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgic3JjXyV1IiwgR1NUX1BB
RF9TUkMsIEdTVF9QQURfU09NRVRJTUVTLCBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKK3N0YXRpYyBH
c3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNUZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRF
KCJzcmNfJXUiLCBHU1RfUEFEX1NSQywKKyAgICBHU1RfUEFEX1NPTUVUSU1FUywgR1NUX1NUQVRJ
Q19DQVBTX0FOWSk7CisKKyNkZWZpbmUgV0VCS0lUX01FRElBX1NSQ19HRVRfUFJJVkFURShvYmop
IChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX01FRElBX1NS
QywgV2ViS2l0TWVkaWFTcmNQcml2YXRlKSkKIAogR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyh3
ZWJraXRfbWVkaWFfc3JjX2RlYnVnKTsKICNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF9t
ZWRpYV9zcmNfZGVidWcKQEAgLTg4LDI0ICs3NSw2IEBAIHN0YXRpYyB2b2lkIHdlYktpdE1lZGlh
U3JjR2V0UHJvcGVydHkoR09iamVjdCosIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSosIEdQYXJh
CiBzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gd2ViS2l0TWVkaWFTcmNDaGFuZ2VTdGF0ZShH
c3RFbGVtZW50KiwgR3N0U3RhdGVDaGFuZ2UpOwogc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlh
U3JjUXVlcnlXaXRoUGFyZW50KEdzdFBhZCosIEdzdE9iamVjdCosIEdzdFF1ZXJ5Kik7CiAKLXN0
YXRpYyB2b2lkIHdlYktpdE1lZGlhVmlkZW9TcmNOZWVkRGF0YUNiKEdzdEFwcFNyYyosIGd1aW50
LCBncG9pbnRlcik7Ci1zdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVZpZGVvU3JjRW5vdWdoRGF0YUNi
KEdzdEFwcFNyYyosIGdwb2ludGVyKTsKLXN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRNZWRpYVZpZGVv
U3JjU2Vla0RhdGFDYihHc3RBcHBTcmMqLCBndWludDY0LCBncG9pbnRlcik7Ci1zdGF0aWMgdm9p
ZCB3ZWJLaXRNZWRpYUF1ZGlvU3JjTmVlZERhdGFDYihHc3RBcHBTcmMqLCBndWludCwgZ3BvaW50
ZXIpOwotc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFBdWRpb1NyY0Vub3VnaERhdGFDYihHc3RBcHBT
cmMqLCBncG9pbnRlcik7Ci1zdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0TWVkaWFBdWRpb1NyY1NlZWtE
YXRhQ2IoR3N0QXBwU3JjKiwgZ3VpbnQ2NCwgZ3BvaW50ZXIpOwotc3RhdGljIEdzdEFwcFNyY0Nh
bGxiYWNrcyBhcHBzcmNDYWxsYmFja3NWaWRlbyA9IHsKLSAgICB3ZWJLaXRNZWRpYVZpZGVvU3Jj
TmVlZERhdGFDYiwKLSAgICB3ZWJLaXRNZWRpYVZpZGVvU3JjRW5vdWdoRGF0YUNiLAotICAgIHdl
YktpdE1lZGlhVmlkZW9TcmNTZWVrRGF0YUNiLAotICAgIHsgMCB9Ci19Owotc3RhdGljIEdzdEFw
cFNyY0NhbGxiYWNrcyBhcHBzcmNDYWxsYmFja3NBdWRpbyA9IHsKLSAgICB3ZWJLaXRNZWRpYUF1
ZGlvU3JjTmVlZERhdGFDYiwKLSAgICB3ZWJLaXRNZWRpYUF1ZGlvU3JjRW5vdWdoRGF0YUNiLAot
ICAgIHdlYktpdE1lZGlhQXVkaW9TcmNTZWVrRGF0YUNiLAotICAgIHsgMCB9Ci19OwogI2RlZmlu
ZSB3ZWJraXRfbWVkaWFfc3JjX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKIC8vIFdlIHNwbGl0
IHRoaXMgb3V0IGludG8gYW5vdGhlciBtYWNybyB0byBhdm9pZCBhIGNoZWNrLXdlYmtpdC1zdHls
ZSBlcnJvci4KICNkZWZpbmUgV0VCS0lUX01FRElBX1NSQ19DQVRFR09SWV9JTklUIEdTVF9ERUJV
R19DQVRFR09SWV9JTklUKHdlYmtpdF9tZWRpYV9zcmNfZGVidWcsICJ3ZWJraXRtZWRpYXNyYyIs
IDAsICJ3ZWJzcmMgZWxlbWVudCIpOwpAQCAtMTI0LDEyICs5MywxMiBAQCBzdGF0aWMgdm9pZCB3
ZWJraXRfbWVkaWFfc3JjX2NsYXNzX2luaXQoV2ViS2l0TWVkaWFTcmNDbGFzcyoga2xhc3MpCiAK
ICAgICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlKGVrbGFzcywgZ3N0X3N0YXRp
Y19wYWRfdGVtcGxhdGVfZ2V0KCZzcmNUZW1wbGF0ZSkpOwogCi0gICAgZ3N0X2VsZW1lbnRfY2xh
c3Nfc2V0X21ldGFkYXRhKGVrbGFzcywgIldlYktpdCBNZWRpYSBzb3VyY2UgZWxlbWVudCIsICJT
b3VyY2UiLCAiSGFuZGxlcyBCbG9iIHVyaXMiLCAiU3RlcGhhbmUgSmFkYXVkIDxzamFkYXVkQHNp
aS5mcj4iKTsKKyAgICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhKGVrbGFz
cywgIldlYktpdCBNZWRpYSBzb3VyY2UgZWxlbWVudCIsICJTb3VyY2UiLCAiSGFuZGxlcyBCbG9i
IHVyaXMiLCAiU3RlcGhhbmUgSmFkYXVkIDxzamFkYXVkQHNpaS5mcj4sIFNlYmFzdGlhbiBEcsO2
Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Iik7CiAKICAgICAvKiBBbGxvd3Mgc2V0dGlu
ZyB0aGUgdXJpIHVzaW5nIHRoZSAnbG9jYXRpb24nIHByb3BlcnR5LCB3aGljaCBpcyB1c2VkCiAg
ICAgICogZm9yIGV4YW1wbGUgYnkgZ3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaSgpICovCiAgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShva2xhc3MsCi0gICAgICAgIFByb3BMb2Nh
dGlvbiwKKyAgICAgICAgUFJPUF9MT0NBVElPTiwKICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygibG9jYXRpb24iLCAibG9jYXRpb24iLCAiTG9jYXRpb24gdG8gcmVhZCBmcm9tIiwgMCwKICAg
ICAgICAgKEdQYXJhbUZsYWdzKSAoR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19T
VFJJTkdTKSkpOwogCkBAIC0xMzgsNTIgKzEwNyw5IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9tZWRp
YV9zcmNfY2xhc3NfaW5pdChXZWJLaXRNZWRpYVNyY0NsYXNzKiBrbGFzcykKICAgICBnX3R5cGVf
Y2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRNZWRpYVNyY1ByaXZhdGUpKTsK
IH0KIAotc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNBZGRTcmMoV2ViS2l0TWVkaWFTcmMqIHNy
YywgR3N0RWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBHc3RQYWQqIGdob3N0UGFkOwotICAgIFdl
YktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKLQotICAgIGlmICghZ3N0X2Jp
bl9hZGQoR1NUX0JJTihzcmMpLCBlbGVtZW50KSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHNyYywgIlNyYyBlbGVtZW50IG5vdCBhZGRlZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIEdSZWZQdHI8R3N0UGFkPiB0YXJnZXRzcmMgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0
X3N0YXRpY19wYWQoZWxlbWVudCwgInNyYyIpKTsKLSAgICBpZiAoIXRhcmdldHNyYykgewotICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlBhZCBub3QgZm91bmQiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoZWxl
bWVudCk7Ci0gICAgR1VuaXF1ZVB0cjxnY2hhcj4gbmFtZShnX3N0cmR1cF9wcmludGYoInNyY18l
dSIsIHByaXYtPm5iU291cmNlKSk7Ci0gICAgZ2hvc3RQYWQgPSBXZWJDb3JlOjp3ZWJraXRHc3RH
aG9zdFBhZEZyb21TdGF0aWNUZW1wbGF0ZSgmc3JjVGVtcGxhdGUsIG5hbWUuZ2V0KCksIHRhcmdl
dHNyYy5nZXQoKSk7Ci0gICAgZ3N0X3BhZF9zZXRfYWN0aXZlKGdob3N0UGFkLCBUUlVFKTsKLQot
ICAgIHByaXYtPm5iU291cmNlKys7Ci0KLSAgICBpZiAocHJpdi0+c291cmNlVmlkZW8uYXBwc3Jj
ID09IGVsZW1lbnQpCi0gICAgICAgIHByaXYtPnNvdXJjZVZpZGVvLnNyY3BhZCA9IGdob3N0UGFk
OwotICAgIGVsc2UgaWYgKHByaXYtPnNvdXJjZUF1ZGlvLmFwcHNyYyA9PSBlbGVtZW50KQotICAg
ICAgICBwcml2LT5zb3VyY2VBdWRpby5zcmNwYWQgPSBnaG9zdFBhZDsKLQotICAgIEdTVF9PQkpF
Q1RfRkxBR19TRVQoZ2hvc3RQYWQsIEdTVF9QQURfRkxBR19ORUVEX1BBUkVOVCk7Ci0gICAgZ3N0
X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24oZ2hvc3RQYWQsIHdlYktpdE1lZGlhU3JjUXVlcnlXaXRo
UGFyZW50KTsKLX0KLQogc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX3NyY19pbml0KFdlYktpdE1l
ZGlhU3JjKiBzcmMpCiB7Ci0gICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gV0VCS0lU
X01FRElBX1NSQ19HRVRfUFJJVkFURShzcmMpOwotICAgIHNyYy0+cHJpdiA9IHByaXY7Ci0gICAg
bmV3IChwcml2KSBXZWJLaXRNZWRpYVNyY1ByaXZhdGUoKTsKLQotICAgIHByaXYtPnNvdXJjZVZp
ZGVvLmFwcHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXBwc3JjIiwgInZpZGVvYXBw
c3JjIik7Ci0gICAgZ3N0X2FwcF9zcmNfc2V0X2NhbGxiYWNrcyhHU1RfQVBQX1NSQyhwcml2LT5z
b3VyY2VWaWRlby5hcHBzcmMpLCAmYXBwc3JjQ2FsbGJhY2tzVmlkZW8sIHNyYywgMCk7Ci0gICAg
Z3N0X2FwcF9zcmNfc2V0X3N0cmVhbV90eXBlKEdTVF9BUFBfU1JDKHByaXYtPnNvdXJjZVZpZGVv
LmFwcHNyYyksIEdTVF9BUFBfU1RSRUFNX1RZUEVfU0VFS0FCTEUpOwotICAgIHdlYktpdE1lZGlh
U3JjQWRkU3JjKHNyYywgcHJpdi0+c291cmNlVmlkZW8uYXBwc3JjKTsKLQotICAgIHByaXYtPnNv
dXJjZUF1ZGlvLmFwcHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXBwc3JjIiwgImF1
ZGlvYXBwc3JjIik7Ci0gICAgZ3N0X2FwcF9zcmNfc2V0X2NhbGxiYWNrcyhHU1RfQVBQX1NSQyhw
cml2LT5zb3VyY2VBdWRpby5hcHBzcmMpLCAmYXBwc3JjQ2FsbGJhY2tzQXVkaW8sIHNyYywgMCk7
Ci0gICAgZ3N0X2FwcF9zcmNfc2V0X3N0cmVhbV90eXBlKEdTVF9BUFBfU1JDKHByaXYtPnNvdXJj
ZUF1ZGlvLmFwcHNyYyksIEdTVF9BUFBfU1RSRUFNX1RZUEVfU0VFS0FCTEUpOwotICAgIHdlYktp
dE1lZGlhU3JjQWRkU3JjKHNyYywgcHJpdi0+c291cmNlQXVkaW8uYXBwc3JjKTsKKyAgICBzcmMt
PnByaXYgPSBXRUJLSVRfTUVESUFfU1JDX0dFVF9QUklWQVRFKHNyYyk7CiB9CiAKIHN0YXRpYyB2
b2lkIHdlYktpdE1lZGlhU3JjRmluYWxpemUoR09iamVjdCogb2JqZWN0KQpAQCAtMTkxLDggKzEx
Nyw4IEBAIHN0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjRmluYWxpemUoR09iamVjdCogb2JqZWN0
KQogICAgIFdlYktpdE1lZGlhU3JjKiBzcmMgPSBXRUJLSVRfTUVESUFfU1JDKG9iamVjdCk7CiAg
ICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCi0gICAgZ19mcmVl
KHByaXYtPnVyaSk7Ci0gICAgcHJpdi0+fldlYktpdE1lZGlhU3JjUHJpdmF0ZSgpOworICAgIC8v
IFRPRE86IEZyZWUgc291cmNlcworICAgIGdfZnJlZShwcml2LT5sb2NhdGlvbik7CiAKICAgICBH
U1RfQ0FMTF9QQVJFTlQoR19PQkpFQ1RfQ0xBU1MsIGZpbmFsaXplLCAob2JqZWN0KSk7CiB9CkBA
IC0yMDAsOCArMTI2LDkgQEAgc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNGaW5hbGl6ZShHT2Jq
ZWN0KiBvYmplY3QpCiBzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY1NldFByb3BlcnR5KEdPYmpl
Y3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVj
KiBwc3BlYykKIHsKICAgICBXZWJLaXRNZWRpYVNyYyogc3JjID0gV0VCS0lUX01FRElBX1NSQyhv
YmplY3QpOworCiAgICAgc3dpdGNoIChwcm9wSWQpIHsKLSAgICBjYXNlIFByb3BMb2NhdGlvbjoK
KyAgICBjYXNlIFBST1BfTE9DQVRJT046CiAgICAgICAgIGdzdF91cmlfaGFuZGxlcl9zZXRfdXJp
KHJlaW50ZXJwcmV0X2Nhc3Q8R3N0VVJJSGFuZGxlcio+KHNyYyksIGdfdmFsdWVfZ2V0X3N0cmlu
Zyh2YWx1ZSksIDApOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtMjE3LDggKzE0
NCw4IEBAIHN0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjR2V0UHJvcGVydHkoR09iamVjdCogb2Jq
ZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsCiAKICAgICBHU1RfT0JKRUNUX0xPQ0soc3Jj
KTsKICAgICBzd2l0Y2ggKHByb3BJZCkgewotICAgIGNhc2UgUHJvcExvY2F0aW9uOgotICAgICAg
ICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHByaXYtPnVyaSk7CisgICAgY2FzZSBQUk9QX0xP
Q0FUSU9OOgorICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHByaXYtPmxvY2F0aW9u
KTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgR19PQkpFQ1RfV0FSTl9J
TlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElkLCBwc3BlYyk7CkBAIC0yMjcsMTE0ICsx
NTQsMjIgQEAgc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNHZXRQcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BJZCwgR1ZhbHVlKiB2YWwKICAgICBHU1RfT0JKRUNUX1VOTE9DSyhz
cmMpOwogfQogCi0vLyBtdXN0IGJlIGNhbGxlZCBvbiBtYWluIHRocmVhZCBhbmQgd2l0aCBvYmpl
Y3QgdW5sb2NrZWQKLXN0YXRpYyB2b2lkIHdlYktpdE1lZGlhVmlkZW9TcmNTdG9wKFdlYktpdE1l
ZGlhU3JjKiBzcmMpCi17Ci0gICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5w
cml2OwotICAgIGdib29sZWFuIHNlZWtpbmc7Ci0KLSAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsK
LQotICAgIHNlZWtpbmcgPSBwcml2LT5zb3VyY2VWaWRlby5zZWVrLmlzQWN0aXZlKCk7Ci0KLSAg
ICBwcml2LT5zb3VyY2VWaWRlby5zdGFydC5jYW5jZWwoKTsKLQotICAgIHByaXYtPnBsYXllciA9
IDA7Ci0gICAgcHJpdi0+cGxheWJpbiA9IDA7Ci0KLSAgICBwcml2LT5zb3VyY2VWaWRlby5uZWVk
RGF0YS5jYW5jZWwoKTsKLSAgICBwcml2LT5zb3VyY2VWaWRlby5lbm91Z2hEYXRhLmNhbmNlbCgp
OwotICAgIHByaXYtPnNvdXJjZVZpZGVvLnNlZWsuY2FuY2VsKCk7Ci0KLSAgICBwcml2LT5zb3Vy
Y2VWaWRlby5wYXVzZWQgPSBGQUxTRTsKLSAgICBwcml2LT5zb3VyY2VWaWRlby5vZmZzZXQgPSAw
OwotICAgIHByaXYtPnNlZWthYmxlID0gRkFMU0U7Ci0KLSAgICBwcml2LT5kdXJhdGlvbiA9IDA7
Ci0gICAgcHJpdi0+bmJTb3VyY2UgPSAwOwotCi0gICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsK
LQotICAgIGlmIChwcml2LT5zb3VyY2VWaWRlby5hcHBzcmMpIHsKLSAgICAgICAgZ3N0X2FwcF9z
cmNfc2V0X2NhcHMoR1NUX0FQUF9TUkMocHJpdi0+c291cmNlVmlkZW8uYXBwc3JjKSwgMCk7Ci0g
ICAgICAgIGlmICghc2Vla2luZykKLSAgICAgICAgICAgIGdzdF9hcHBfc3JjX3NldF9zaXplKEdT
VF9BUFBfU1JDKHByaXYtPnNvdXJjZVZpZGVvLmFwcHNyYyksIC0xKTsKLSAgICB9Ci0KLSAgICBH
U1RfREVCVUdfT0JKRUNUKHNyYywgIlN0b3BwZWQgcmVxdWVzdCIpOwotfQotCi1zdGF0aWMgdm9p
ZCB3ZWJLaXRNZWRpYUF1ZGlvU3JjU3RvcChXZWJLaXRNZWRpYVNyYyogc3JjKQotewotICAgIFdl
YktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKLSAgICBnYm9vbGVhbiBzZWVr
aW5nOwotCi0gICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7Ci0KLSAgICBzZWVraW5nID0gcHJpdi0+
c291cmNlQXVkaW8uc2Vlay5pc0FjdGl2ZSgpOwotCi0gICAgcHJpdi0+c291cmNlQXVkaW8uc3Rh
cnQuY2FuY2VsKCk7Ci0KLSAgICBwcml2LT5wbGF5ZXIgPSAwOwotCi0gICAgcHJpdi0+cGxheWJp
biA9IDA7Ci0KLSAgICBwcml2LT5zb3VyY2VBdWRpby5uZWVkRGF0YS5jYW5jZWwoKTsKLSAgICBw
cml2LT5zb3VyY2VBdWRpby5lbm91Z2hEYXRhLmNhbmNlbCgpOwotICAgIHByaXYtPnNvdXJjZUF1
ZGlvLnNlZWsuY2FuY2VsKCk7Ci0KLSAgICBwcml2LT5zb3VyY2VBdWRpby5wYXVzZWQgPSBGQUxT
RTsKLQotICAgIHByaXYtPnNvdXJjZUF1ZGlvLm9mZnNldCA9IDA7Ci0KLSAgICBwcml2LT5zZWVr
YWJsZSA9IEZBTFNFOwotCi0gICAgcHJpdi0+ZHVyYXRpb24gPSAwOwotICAgIHByaXYtPm5iU291
cmNlID0gMDsKLQotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7Ci0KLSAgICBpZiAocHJpdi0+
c291cmNlQXVkaW8uYXBwc3JjKSB7Ci0gICAgICAgIGdzdF9hcHBfc3JjX3NldF9jYXBzKEdTVF9B
UFBfU1JDKHByaXYtPnNvdXJjZUF1ZGlvLmFwcHNyYyksIDApOwotICAgICAgICBpZiAoIXNlZWtp
bmcpCi0gICAgICAgICAgICBnc3RfYXBwX3NyY19zZXRfc2l6ZShHU1RfQVBQX1NSQyhwcml2LT5z
b3VyY2VBdWRpby5hcHBzcmMpLCAtMSk7Ci0gICAgfQotCi0gICAgR1NUX0RFQlVHX09CSkVDVChz
cmMsICJTdG9wcGVkIHJlcXVlc3QiKTsKLX0KLQotLy8gbXVzdCBiZSBjYWxsZWQgb24gbWFpbiB0
aHJlYWQgYW5kIHdpdGggb2JqZWN0IHVubG9ja2VkCi1zdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVZp
ZGVvU3JjU3RhcnQoV2ViS2l0TWVkaWFTcmMqIHNyYykKK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlh
U3JjRG9Bc3luY1N0YXJ0KFdlYktpdE1lZGlhU3JjKiBzcmMpCiB7CiAgICAgV2ViS2l0TWVkaWFT
cmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwotCi0gICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7
Ci0gICAgaWYgKCFwcml2LT51cmkpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzcmMsICJO
byBVUkkgcHJvdmlkZWQiKTsKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKLSAgICAg
ICAgd2ViS2l0TWVkaWFWaWRlb1NyY1N0b3Aoc3JjKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVChzcmMs
ICJTdGFydGVkIHJlcXVlc3QiKTsKKyAgICBwcml2LT5hc3luY1N0YXJ0ID0gdHJ1ZTsKKyAgICBH
U1RfQklOX0NMQVNTKHBhcmVudF9jbGFzcyktPmhhbmRsZV9tZXNzYWdlKEdTVF9CSU4oc3JjKSwK
KyAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X2FzeW5jX3N0YXJ0KEdTVF9PQkpFQ1Qoc3JjKSkpOwog
fQogCi0vLyBtdXN0IGJlIGNhbGxlZCBvbiBtYWluIHRocmVhZCBhbmQgd2l0aCBvYmplY3QgdW5s
b2NrZWQKLXN0YXRpYyB2b2lkIHdlYktpdE1lZGlhQXVkaW9TcmNTdGFydChXZWJLaXRNZWRpYVNy
Yyogc3JjKQorc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNEb0FzeW5jRG9uZShXZWJLaXRNZWRp
YVNyYyogc3JjKQogewogICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJp
djsKLQotICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwotICAgIGlmICghcHJpdi0+dXJpKSB7Ci0g
ICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAiTm8gVVJJIHByb3ZpZGVkIik7Ci0gICAgICAg
IEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7Ci0gICAgICAgIHdlYktpdE1lZGlhQXVkaW9TcmNTdG9w
KHNyYyk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAocHJpdi0+YXN5bmNTdGFydCkgeworICAg
ICAgICBHU1RfQklOX0NMQVNTKHBhcmVudF9jbGFzcyktPmhhbmRsZV9tZXNzYWdlKEdTVF9CSU4o
c3JjKSwKKyAgICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19hc3luY19kb25lKEdTVF9PQkpFQ1Qo
c3JjKSwgR1NUX0NMT0NLX1RJTUVfTk9ORSkpOworICAgICAgICBwcml2LT5hc3luY1N0YXJ0ID0g
ZmFsc2U7CiAgICAgfQotCi0gICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKLSAgICBHU1RfREVC
VUdfT0JKRUNUKHNyYywgIlN0YXJ0ZWQgcmVxdWVzdCIpOwogfQogCiBzdGF0aWMgR3N0U3RhdGVD
aGFuZ2VSZXR1cm4gd2ViS2l0TWVkaWFTcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50
LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQpAQCAtMzQ0LDEzICsxNzksOSBAQCBzdGF0aWMg
R3N0U3RhdGVDaGFuZ2VSZXR1cm4gd2ViS2l0TWVkaWFTcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50
KiBlbGVtZW50LCBHc3RTdAogICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+
cHJpdjsKIAogICAgIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NI
QU5HRV9OVUxMX1RPX1JFQURZOgotICAgICAgICBpZiAoIXByaXYtPnNvdXJjZVZpZGVvLmFwcHNy
YyAmJiAhcHJpdi0+c291cmNlQXVkaW8uYXBwc3JjKSB7Ci0gICAgICAgICAgICBnc3RfZWxlbWVu
dF9wb3N0X21lc3NhZ2UoZWxlbWVudCwKLSAgICAgICAgICAgICAgICBnc3RfbWlzc2luZ19lbGVt
ZW50X21lc3NhZ2VfbmV3KGVsZW1lbnQsICJhcHBzcmMiKSk7Ci0gICAgICAgICAgICBHU1RfRUxF
TUVOVF9FUlJPUihzcmMsIENPUkUsIE1JU1NJTkdfUExVR0lOLCAoMCksICgibm8gYXBwc3JjIikp
OwotICAgICAgICAgICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKLSAgICAgICAg
fQorICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6CisgICAgICAgIHBy
aXYtPm5vTW9yZVBhZHMgPSBmYWxzZTsKKyAgICAgICAgd2ViS2l0TWVkaWFTcmNEb0FzeW5jU3Rh
cnQoc3JjKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CkBA
IC0zNTksMzcgKzE5MCwxNyBAQCBzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gd2ViS2l0TWVk
aWFTcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RTdAogICAgIHJldCA9IEdT
VF9FTEVNRU5UX0NMQVNTKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZShlbGVtZW50LCB0cmFu
c2l0aW9uKTsKICAgICBpZiAoR19VTkxJS0VMWShyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlM
VVJFKSkgewogICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlN0YXRlIGNoYW5nZSBmYWls
ZWQiKTsKKyAgICAgICAgd2ViS2l0TWVkaWFTcmNEb0FzeW5jRG9uZShzcmMpOwogICAgICAgICBy
ZXR1cm4gcmV0OwogICAgIH0KIAogICAgIHN3aXRjaCAodHJhbnNpdGlvbikgewogICAgIGNhc2Ug
R1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICAgIEdTVF9ERUJVR19PQkpF
Q1Qoc3JjLCAiUkVBRFktPlBBVVNFRCIpOwotICAgICAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsK
LQotICAgICAgICBnc3Rfb2JqZWN0X3JlZihzcmMpOwotICAgICAgICBwcml2LT5zb3VyY2VWaWRl
by5zdGFydC5zY2hlZHVsZSgiW1dlYktpdF0gd2ViS2l0TWVkaWFWaWRlb1NyY1N0YXJ0Iiwgc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+KHN0ZDo6YmluZCh3ZWJLaXRNZWRpYVZpZGVvU3JjU3RhcnQsIHNy
YykpLCBHX1BSSU9SSVRZX0RFRkFVTFQsCi0gICAgICAgICAgICBbc3JjXSB7IGdzdF9vYmplY3Rf
dW5yZWYoc3JjKTsgfSk7Ci0KLSAgICAgICAgZ3N0X29iamVjdF9yZWYoc3JjKTsKLSAgICAgICAg
cHJpdi0+c291cmNlQXVkaW8uc3RhcnQuc2NoZWR1bGUoIltXZWJLaXRdIHdlYktpdE1lZGlhQXVk
aW9TcmNTdGFydCIsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPihzdGQ6OmJpbmQod2ViS2l0TWVkaWFB
dWRpb1NyY1N0YXJ0LCBzcmMpKSwgR19QUklPUklUWV9ERUZBVUxULAotICAgICAgICAgICAgW3Ny
Y10geyBnc3Rfb2JqZWN0X3VucmVmKHNyYyk7IH0pOwotCi0gICAgICAgIEdTVF9PQkpFQ1RfVU5M
T0NLKHNyYyk7CisgICAgICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfQVNZTkM7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUEFVU0VELT5SRUFEWSIpOwotICAgICAgICBHU1Rf
T0JKRUNUX0xPQ0soc3JjKTsKLQotICAgICAgICBnc3Rfb2JqZWN0X3JlZihzcmMpOwotICAgICAg
ICBwcml2LT5zb3VyY2VWaWRlby5zdG9wLnNjaGVkdWxlKCJbV2ViS2l0XSB3ZWJLaXRNZWRpYVZp
ZGVvU3JjU3RvcCIsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPihzdGQ6OmJpbmQod2ViS2l0TWVkaWFW
aWRlb1NyY1N0b3AsIHNyYykpLCBHX1BSSU9SSVRZX0RFRkFVTFQsCi0gICAgICAgICAgICBbc3Jj
XSB7IGdzdF9vYmplY3RfdW5yZWYoc3JjKTsgfSk7Ci0KLSAgICAgICAgZ3N0X29iamVjdF9yZWYo
c3JjKTsKLSAgICAgICAgcHJpdi0+c291cmNlQXVkaW8uc3RvcC5zY2hlZHVsZSgiW1dlYktpdF0g
d2ViS2l0TWVkaWFBdWRpb1NyY1N0b3AiLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4oc3RkOjpiaW5k
KHdlYktpdE1lZGlhQXVkaW9TcmNTdG9wLCBzcmMpKSwgR19QUklPUklUWV9ERUZBVUxULAotICAg
ICAgICAgICAgW3NyY10geyBnc3Rfb2JqZWN0X3VucmVmKHNyYyk7IH0pOwotCi0gICAgICAgIEdT
VF9PQkpFQ1RfVU5MT0NLKHNyYyk7CisgICAgICAgIHdlYktpdE1lZGlhU3JjRG9Bc3luY0RvbmUo
c3JjKTsKKyAgICAgICAgcHJpdi0+bm9Nb3JlUGFkcyA9IGZhbHNlOwogICAgICAgICBicmVhazsK
ICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKQEAgLTQxNywxNCArMjI4LDEzIEBAIHN0YXRp
YyBnYm9vbGVhbiB3ZWJLaXRNZWRpYVNyY1F1ZXJ5V2l0aFBhcmVudChHc3RQYWQqIHBhZCwgR3N0
T2JqZWN0KiBwYXJlbnQsIEdzCiAgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9VUkk6IHsKKyAgICBjYXNlIEdT
VF9RVUVSWV9VUkk6CiAgICAgICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwotICAgICAgICBnc3Rf
cXVlcnlfc2V0X3VyaShxdWVyeSwgc3JjLT5wcml2LT51cmkpOworICAgICAgICBnc3RfcXVlcnlf
c2V0X3VyaShxdWVyeSwgc3JjLT5wcml2LT5sb2NhdGlvbik7CiAgICAgICAgIEdTVF9PQkpFQ1Rf
VU5MT0NLKHNyYyk7CiAgICAgICAgIHJlc3VsdCA9IFRSVUU7CiAgICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBkZWZhdWx0OiB7CisgICAgZGVmYXVsdDp7CiAgICAgICAgIEdSZWZQdHI8R3N0UGFk
PiB0YXJnZXQgPSBhZG9wdEdSZWYoZ3N0X2dob3N0X3BhZF9nZXRfdGFyZ2V0KEdTVF9HSE9TVF9Q
QURfQ0FTVChwYWQpKSk7CiAgICAgICAgIC8vIEZvcndhcmQgdGhlIHF1ZXJ5IHRvIHRoZSBwcm94
eSB0YXJnZXQgcGFkLgogICAgICAgICBpZiAodGFyZ2V0KQpAQCAtNDU0LDcgKzI2NCw3IEBAIHN0
YXRpYyBnY2hhciogd2ViS2l0TWVkaWFTcmNHZXRVcmkoR3N0VVJJSGFuZGxlciogaGFuZGxlcikK
ICAgICBnY2hhciogcmV0OwogCiAgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7Ci0gICAgcmV0ID0g
Z19zdHJkdXAoc3JjLT5wcml2LT51cmkpOworICAgIHJldCA9IGdfc3RyZHVwKHNyYy0+cHJpdi0+
bG9jYXRpb24pOwogICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAgcmV0dXJuIHJldDsK
IH0KQEAgLTQ2MywxNCArMjczLDE1IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRNZWRpYVNyY1Nl
dFVyaShHc3RVUklIYW5kbGVyKiBoYW5kbGVyLCBjb25zdCBnY2hhciogdXJpLCBHCiB7CiAgICAg
V2ViS2l0TWVkaWFTcmMqIHNyYyA9IFdFQktJVF9NRURJQV9TUkMoaGFuZGxlcik7CiAgICAgV2Vi
S2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OworCiAgICAgaWYgKEdTVF9TVEFU
RShzcmMpID49IEdTVF9TVEFURV9QQVVTRUQpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChz
cmMsICJVUkkgY2FuIG9ubHkgYmUgc2V0IGluIHN0YXRlcyA8IFBBVVNFRCIpOwogICAgICAgICBy
ZXR1cm4gRkFMU0U7CiAgICAgfQogCiAgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7Ci0gICAgZ19m
cmVlKHByaXYtPnVyaSk7Ci0gICAgcHJpdi0+dXJpID0gMDsKKyAgICBnX2ZyZWUocHJpdi0+bG9j
YXRpb24pOworICAgIHByaXYtPmxvY2F0aW9uID0gMDsKICAgICBpZiAoIXVyaSkgewogICAgICAg
ICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwogICAgICAgICByZXR1cm4gVFJVRTsKQEAgLTQ3OCwx
MSArMjg5LDEwIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRNZWRpYVNyY1NldFVyaShHc3RVUklI
YW5kbGVyKiBoYW5kbGVyLCBjb25zdCBnY2hhciogdXJpLCBHCiAKICAgICBXZWJDb3JlOjpVUkwg
dXJsKFdlYkNvcmU6OlVSTCgpLCB1cmkpOwogCi0gICAgcHJpdi0+dXJpID0gZ19zdHJkdXAodXJs
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIHByaXYtPmxvY2F0aW9uID0gZ19zdHJkdXAo
dXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7
CiAgICAgcmV0dXJuIFRSVUU7CiB9Ci0KIHN0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjVXJpSGFu
ZGxlckluaXQoZ3BvaW50ZXIgZ0lmYWNlLCBncG9pbnRlcikKIHsKICAgICBHc3RVUklIYW5kbGVy
SW50ZXJmYWNlKiBpZmFjZSA9IChHc3RVUklIYW5kbGVySW50ZXJmYWNlICopIGdJZmFjZTsKQEAg
LTQ5MywyOTYgKzMwMywxNzYgQEAgc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNVcmlIYW5kbGVy
SW5pdChncG9pbnRlciBnSWZhY2UsIGdwb2ludGVyKQogICAgIGlmYWNlLT5zZXRfdXJpID0gd2Vi
S2l0TWVkaWFTcmNTZXRVcmk7CiB9CiAKLS8vIGFwcHNyYyBjYWxsYmFja3MKLXN0YXRpYyB2b2lk
IHdlYktpdE1lZGlhVmlkZW9TcmNOZWVkRGF0YU1haW5DYihXZWJLaXRNZWRpYVNyYyogc3JjKQor
bmFtZXNwYWNlIFdlYkNvcmUgeworTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXI6Ok1lZGlhU291
cmNlQ2xpZW50R1N0cmVhbWVyKFdlYktpdE1lZGlhU3JjKiBzcmMpCisgICAgOiBtX3NyYyhhZG9w
dEdSZWYoc3RhdGljX2Nhc3Q8V2ViS2l0TWVkaWFTcmMqPihnc3Rfb2JqZWN0X3JlZihzcmMpKSkp
CiB7Ci0gICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwotCi0gICAg
R1NUX09CSkVDVF9MT0NLKHNyYyk7Ci0gICAgcHJpdi0+c291cmNlVmlkZW8ucGF1c2VkID0gRkFM
U0U7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKIH0KIAotc3RhdGljIHZvaWQgd2ViS2l0
TWVkaWFBdWRpb1NyY05lZWREYXRhTWFpbkNiKFdlYktpdE1lZGlhU3JjKiBzcmMpCitNZWRpYVNv
dXJjZUNsaWVudEdTdHJlYW1lcjo6fk1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyKCkKIHsKLSAg
ICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7Ci0KLSAgICBHU1RfT0JK
RUNUX0xPQ0soc3JjKTsKLSAgICBwcml2LT5zb3VyY2VBdWRpby5wYXVzZWQgPSBGQUxTRTsKLSAg
ICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwogfQogCi1zdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVZp
ZGVvU3JjTmVlZERhdGFDYihHc3RBcHBTcmMqLCBndWludCBsZW5ndGgsIGdwb2ludGVyIHVzZXJE
YXRhKQorTWVkaWFTb3VyY2VQcml2YXRlOjpBZGRTdGF0dXMgTWVkaWFTb3VyY2VDbGllbnRHU3Ry
ZWFtZXI6OmFkZFNvdXJjZUJ1ZmZlcihQYXNzUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGU+IHNv
dXJjZUJ1ZmZlclByaXZhdGUsIGNvbnN0IENvbnRlbnRUeXBlJiBjb250ZW50VHlwZSkKIHsKLSAg
ICBXZWJLaXRNZWRpYVNyYyogc3JjID0gV0VCS0lUX01FRElBX1NSQyh1c2VyRGF0YSk7Ci0gICAg
V2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwotCi0gICAgR1NUX0RFQlVH
X09CSkVDVChzcmMsICJOZWVkIG1vcmUgZGF0YTogJXUiLCBsZW5ndGgpOworICAgIFdlYktpdE1l
ZGlhU3JjUHJpdmF0ZSogcHJpdiA9IG1fc3JjLT5wcml2OwogCi0gICAgR1NUX09CSkVDVF9MT0NL
KHNyYyk7Ci0gICAgaWYgKHByaXYtPnNvdXJjZVZpZGVvLm5lZWREYXRhLmlzU2NoZWR1bGVkKCkg
fHwgIXByaXYtPnNvdXJjZVZpZGVvLnBhdXNlZCkgewotICAgICAgICBHU1RfT0JKRUNUX1VOTE9D
SyhzcmMpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKHByaXYtPm5vTW9yZVBhZHMpIHsKKyAg
ICAgICAgR1NUX0VSUk9SX09CSkVDVChtX3NyYy5nZXQoKSwgIkFkZGluZyBuZXcgc291cmNlIGJ1
ZmZlcnMgYWZ0ZXIgZmlyc3QgZGF0YSBub3Qgc3VwcG9ydGVkIHlldCIpOworICAgICAgICByZXR1
cm4gTWVkaWFTb3VyY2VQcml2YXRlOjpOb3RTdXBwb3J0ZWQ7CiAgICAgfQogCi0gICAgZ3N0X29i
amVjdF9yZWYoc3JjKTsKLSAgICBwcml2LT5zb3VyY2VWaWRlby5uZWVkRGF0YS5zY2hlZHVsZSgi
W1dlYktpdF0gd2ViS2l0TWVkaWFWaWRlb1NyY05lZWREYXRhTWFpbkNiIiwgc3RkOjpmdW5jdGlv
bjx2b2lkKCk+KHN0ZDo6YmluZCh3ZWJLaXRNZWRpYVZpZGVvU3JjTmVlZERhdGFNYWluQ2IsIHNy
YykpLCBHX1BSSU9SSVRZX0RFRkFVTFQsCi0gICAgICAgIFtzcmNdIHsgZ3N0X29iamVjdF91bnJl
ZihzcmMpOyB9KTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwotfQotCi1zdGF0aWMgdm9p
ZCB3ZWJLaXRNZWRpYUF1ZGlvU3JjTmVlZERhdGFDYihHc3RBcHBTcmMqLCBndWludCBsZW5ndGgs
IGdwb2ludGVyIHVzZXJEYXRhKQotewotICAgIFdlYktpdE1lZGlhU3JjKiBzcmMgPSBXRUJLSVRf
TUVESUFfU1JDKHVzZXJEYXRhKTsKLSAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBz
cmMtPnByaXY7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIk5lZWQgbW9yZSBkYXRhOiAl
dSIsIGxlbmd0aCk7Ci0KLSAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKLSAgICBpZiAocHJpdi0+
c291cmNlQXVkaW8ubmVlZERhdGEuaXNTY2hlZHVsZWQoKSB8fCAhcHJpdi0+c291cmNlQXVkaW8u
cGF1c2VkKSB7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7Ci0gICAgICAgIHJldHVy
bjsKKyNpZiAwCisgICAgaWYgKEdTVF9TVEFURShtX3NyYy5nZXQoKSkgPiBHU1RfU1RBVEVfUkVB
RFkpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChtX3NyYy5nZXQoKSwgIkFkZGluZyBuZXcg
c291cmNlIGJ1ZmZlcnMgYWZ0ZXIgUkVBRFkgc3RhdGUgbm90IHN1cHBvcnRlZCIpOworICAgICAg
ICByZXR1cm4gTWVkaWFTb3VyY2VQcml2YXRlOjpOb3RTdXBwb3J0ZWQ7CiAgICAgfQorI2VuZGlm
CiAKLSAgICBnc3Rfb2JqZWN0X3JlZihzcmMpOwotICAgIHByaXYtPnNvdXJjZUF1ZGlvLm5lZWRE
YXRhLnNjaGVkdWxlKCJbV2ViS2l0XSB3ZWJLaXRNZWRpYUF1ZGlvU3JjTmVlZERhdGFNYWluQ2Ii
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4oc3RkOjpiaW5kKHdlYktpdE1lZGlhQXVkaW9TcmNOZWVk
RGF0YU1haW5DYiwgc3JjKSksIEdfUFJJT1JJVFlfREVGQVVMVCwKLSAgICAgICAgW3NyY10geyBn
c3Rfb2JqZWN0X3VucmVmKHNyYyk7IH0pOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7Ci19
Ci0KLXN0YXRpYyB2b2lkIHdlYktpdE1lZGlhVmlkZW9TcmNFbm91Z2hEYXRhTWFpbkNiKFdlYktp
dE1lZGlhU3JjKiBzcmMpCi17Ci0gICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gc3Jj
LT5wcml2OwotCi0gICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7Ci0gICAgcHJpdi0+c291cmNlVmlk
ZW8ucGF1c2VkID0gVFJVRTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwotfQotCi1zdGF0
aWMgdm9pZCB3ZWJLaXRNZWRpYUF1ZGlvU3JjRW5vdWdoRGF0YU1haW5DYihXZWJLaXRNZWRpYVNy
Yyogc3JjKQotewotICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsK
LQotICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwotICAgIHByaXYtPnNvdXJjZUF1ZGlvLnBhdXNl
ZCA9IFRSVUU7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKLX0KLQotc3RhdGljIHZvaWQg
d2ViS2l0TWVkaWFWaWRlb1NyY0Vub3VnaERhdGFDYihHc3RBcHBTcmMqLCBncG9pbnRlciB1c2Vy
RGF0YSkKLXsKLSAgICBXZWJLaXRNZWRpYVNyYyogc3JjID0gV0VCS0lUX01FRElBX1NSQyh1c2Vy
RGF0YSk7Ci0gICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OworICAg
IEdTVF9FUlJPUl9PQkpFQ1QobV9zcmMuZ2V0KCksICJTdGF0ZSAlZCIsIChpbnQpR1NUX1NUQVRF
KG1fc3JjLmdldCgpKSk7CiAKLSAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIkhhdmUgZW5vdWdo
IGRhdGEiKTsKKyAgICBHU1RfT0JKRUNUX0xPQ0sobV9zcmMuZ2V0KCkpOwogCi0gICAgR1NUX09C
SkVDVF9MT0NLKHNyYyk7Ci0gICAgaWYgKHByaXYtPnNvdXJjZVZpZGVvLmVub3VnaERhdGEuaXNT
Y2hlZHVsZWQoKSB8fCBwcml2LT5zb3VyY2VWaWRlby5wYXVzZWQpIHsKLSAgICAgICAgR1NUX09C
SkVDVF9VTkxPQ0soc3JjKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBTb3VyY2UqIHNv
dXJjZSA9IGdfbmV3MChTb3VyY2UsIDEpOworICAgIGd1aW50IG51bWJlck9mU291cmNlcyA9IGdf
bGlzdF9sZW5ndGgocHJpdi0+c291cmNlcyk7CisgICAgR1VuaXF1ZVB0cjxnY2hhcj4gc3JjTmFt
ZShnX3N0cmR1cF9wcmludGYoInNyYyV1IiwgbnVtYmVyT2ZTb3VyY2VzKSk7CiAKLSAgICBnc3Rf
b2JqZWN0X3JlZihzcmMpOwotICAgIHByaXYtPnNvdXJjZVZpZGVvLmVub3VnaERhdGEuc2NoZWR1
bGUoIltXZWJLaXRdIHdlYktpdE1lZGlhVmlkZW9TcmNFbm91Z2hEYXRhTWFpbkNiIiwgc3RkOjpm
dW5jdGlvbjx2b2lkKCk+KHN0ZDo6YmluZCh3ZWJLaXRNZWRpYVZpZGVvU3JjRW5vdWdoRGF0YU1h
aW5DYiwgc3JjKSksIEdfUFJJT1JJVFlfREVGQVVMVCwKLSAgICAgICAgW3NyY10geyBnc3Rfb2Jq
ZWN0X3VucmVmKHNyYyk7IH0pOworICAgIHNvdXJjZS0+c3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9y
eV9tYWtlKCJhcHBzcmMiLCBzcmNOYW1lLmdldCgpKTsKKyAgICBzb3VyY2UtPnNvdXJjZUJ1ZmZl
ciA9IHNvdXJjZUJ1ZmZlclByaXZhdGUuZ2V0KCk7CiAKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhz
cmMpOwotfQorICAgIEdVbmlxdWVQdHI8Z2NoYXI+IHBhZE5hbWUoZ19zdHJkdXBfcHJpbnRmKCJz
cmNfJXUiLCBudW1iZXJPZlNvdXJjZXMpKTsKKyAgICBwcml2LT5zb3VyY2VzID0gZ19saXN0X3By
ZXBlbmQocHJpdi0+c291cmNlcywgc291cmNlKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyhtX3Ny
Yy5nZXQoKSk7CiAKLXN0YXRpYyB2b2lkIHdlYktpdE1lZGlhQXVkaW9TcmNFbm91Z2hEYXRhQ2Io
R3N0QXBwU3JjKiwgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0gICAgV2ViS2l0TWVkaWFTcmMqIHNy
YyA9IFdFQktJVF9NRURJQV9TUkModXNlckRhdGEpOwotICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0
ZSogcHJpdiA9IHNyYy0+cHJpdjsKKyAgICBwcml2LT5oYXZlQXBwc3JjID0gc291cmNlLT5zcmM7
CiAKLSAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIkhhdmUgZW5vdWdoIGRhdGEiKTsKKyAgICBn
c3RfYmluX2FkZChHU1RfQklOKG1fc3JjLmdldCgpKSwgc291cmNlLT5zcmMpOworICAgIEdSZWZQ
dHI8R3N0UGFkPiBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoc291
cmNlLT5zcmMsICJzcmMiKSk7CisgICAgR1JlZlB0cjxHc3RQYWQ+IGdob3N0UGFkID0gYWRvcHRH
UmVmKGdzdF9naG9zdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUocGFkTmFtZS5nZXQoKSwgcGFkLmdl
dCgpLAorICAgICAgICBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQoJnNyY1RlbXBsYXRlKSkp
OworICAgIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uKGdob3N0UGFkLmdldCgpLCB3ZWJLaXRN
ZWRpYVNyY1F1ZXJ5V2l0aFBhcmVudCk7CisgICAgZ3N0X3BhZF9zZXRfYWN0aXZlKGdob3N0UGFk
LmdldCgpLCBUUlVFKTsKKyAgICBnc3RfZWxlbWVudF9hZGRfcGFkKEdTVF9FTEVNRU5UKG1fc3Jj
LmdldCgpKSwgZ2hvc3RQYWQubGVha1JlZigpKTsKIAotICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMp
OwotICAgIGlmIChwcml2LT5zb3VyY2VBdWRpby5lbm91Z2hEYXRhLmlzU2NoZWR1bGVkKCkgfHwg
cHJpdi0+c291cmNlQXVkaW8ucGF1c2VkKSB7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNy
Yyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93
aXRoX3BhcmVudChzb3VyY2UtPnNyYyk7CiAKLSAgICBnc3Rfb2JqZWN0X3JlZihzcmMpOwotICAg
IHByaXYtPnNvdXJjZUF1ZGlvLmVub3VnaERhdGEuc2NoZWR1bGUoIltXZWJLaXRdIHdlYktpdE1l
ZGlhQXVkaW9TcmNFbm91Z2hEYXRhTWFpbkNiIiwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+KHN0ZDo6
YmluZCh3ZWJLaXRNZWRpYUF1ZGlvU3JjRW5vdWdoRGF0YU1haW5DYiwgc3JjKSksIEdfUFJJT1JJ
VFlfREVGQVVMVCwKLSAgICAgICAgW3NyY10geyBnc3Rfb2JqZWN0X3VucmVmKHNyYyk7IH0pOwot
Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKKyAgICByZXR1cm4gTWVkaWFTb3VyY2VQcml2
YXRlOjpPazsKIH0KIAotc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFWaWRlb1NyY1NlZWtNYWluQ2Io
V2ViS2l0TWVkaWFTcmMqKQordm9pZCBNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lcjo6ZHVyYXRp
b25DaGFuZ2VkKGNvbnN0IE1lZGlhVGltZSYgZHVyYXRpb24pCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KKyAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBtX3NyYy0+cHJpdjsK
KyAgICBHc3RDbG9ja1RpbWUgZ3N0RHVyYXRpb24gPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKGR1
cmF0aW9uLnRpbWVWYWx1ZSgpLCBHU1RfU0VDT05ELCBkdXJhdGlvbi50aW1lU2NhbGUoKSk7CiAK
KyAgICBHU1RfREVCVUdfT0JKRUNUKG1fc3JjLmdldCgpLCAiUmVjZWl2ZWQgZHVyYXRpb246ICUi
IEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyhnc3REdXJhdGlvbikpOwogCi1zdGF0aWMg
dm9pZCB3ZWJLaXRNZWRpYUF1ZGlvU3JjU2Vla01haW5DYihXZWJLaXRNZWRpYVNyYyopCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBHU1RfT0JKRUNUX0xPQ0sobV9zcmMuZ2V0KCkpOwor
ICAgIHByaXYtPmR1cmF0aW9uID0gZ3N0RHVyYXRpb247CisgICAgR1NUX09CSkVDVF9VTkxPQ0so
bV9zcmMuZ2V0KCkpOworICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVCht
X3NyYy5nZXQoKSksIGdzdF9tZXNzYWdlX25ld19kdXJhdGlvbl9jaGFuZ2VkKEdTVF9PQkpFQ1Qo
bV9zcmMuZ2V0KCkpKSk7CiB9CiAKLXN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRNZWRpYVZpZGVvU3Jj
U2Vla0RhdGFDYihHc3RBcHBTcmMqLCBndWludDY0IG9mZnNldCwgZ3BvaW50ZXIgdXNlckRhdGEp
CitTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpBcHBlbmRSZXN1bHQgTWVkaWFTb3VyY2VDbGll
bnRHU3RyZWFtZXI6OmFwcGVuZChQYXNzUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGU+IHNvdXJj
ZUJ1ZmZlclByaXZhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0
aCkKIHsKLSAgICBXZWJLaXRNZWRpYVNyYyogc3JjID0gV0VCS0lUX01FRElBX1NSQyh1c2VyRGF0
YSk7Ci0gICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwotCi0gICAg
R1NUX0RFQlVHX09CSkVDVChzcmMsICJTZWVraW5nIHRvIG9mZnNldDogJSIgR19HVUlOVDY0X0ZP
Uk1BVCwgb2Zmc2V0KTsKLSAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKLSAgICBpZiAob2Zmc2V0
ID09IHByaXYtPnNvdXJjZVZpZGVvLm9mZnNldCAmJiBwcml2LT5zb3VyY2VWaWRlby5yZXF1ZXN0
ZWRPZmZzZXQgPT0gcHJpdi0+c291cmNlVmlkZW8ub2Zmc2V0KSB7Ci0gICAgICAgIEdTVF9PQkpF
Q1RfVU5MT0NLKHNyYyk7Ci0gICAgICAgIHJldHVybiBUUlVFOworICAgIFdlYktpdE1lZGlhU3Jj
UHJpdmF0ZSogcHJpdiA9IG1fc3JjLT5wcml2OworICAgIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NU
X0ZMT1dfT0s7CisgICAgR3N0QnVmZmVyKiBidWZmZXI7CisgICAgU291cmNlKiBzb3VyY2UgPSAw
OworICAgIEdMaXN0ICpsOworCisgICAgaWYgKCFwcml2LT5ub01vcmVQYWRzKSB7CisgICAgICAg
IHByaXYtPm5vTW9yZVBhZHMgPSB0cnVlOworICAgICAgICBnc3RfZWxlbWVudF9ub19tb3JlX3Bh
ZHMoR1NUX0VMRU1FTlQobV9zcmMuZ2V0KCkpKTsKKyAgICAgICAgd2ViS2l0TWVkaWFTcmNEb0Fz
eW5jRG9uZShtX3NyYy5nZXQoKSk7CiAgICAgfQogCi0gICAgaWYgKCFwcml2LT5zZWVrYWJsZSkg
ewotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwotICAgICAgICByZXR1cm4gRkFMU0U7
Ci0gICAgfQotICAgIGlmIChvZmZzZXQgPiBwcml2LT5zb3VyY2VWaWRlby5zaXplKSB7Ci0gICAg
ICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICBm
b3IgKGwgPSBwcml2LT5zb3VyY2VzOyBsOyBsID0gbC0+bmV4dCkgeworICAgICAgICBTb3VyY2Ug
KnRtcCA9IHN0YXRpY19jYXN0PFNvdXJjZSo+KGwtPmRhdGEpOworICAgICAgICBpZiAodG1wLT5z
b3VyY2VCdWZmZXIgPT0gc291cmNlQnVmZmVyUHJpdmF0ZS5nZXQoKSkgeworICAgICAgICAgICAg
c291cmNlID0gdG1wOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiAKLSAg
ICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIkRvaW5nIHJhbmdlLXJlcXVlc3Qgc2VlayIpOwotICAg
IHByaXYtPnNvdXJjZVZpZGVvLnJlcXVlc3RlZE9mZnNldCA9IG9mZnNldDsKKyAgICBpZiAoIXNv
dXJjZSB8fCAhc291cmNlLT5zcmMpCisgICAgICAgIHJldHVybiBTb3VyY2VCdWZmZXJQcml2YXRl
Q2xpZW50OjpSZWFkU3RyZWFtRmFpbGVkOwogCi0gICAgZ3N0X29iamVjdF9yZWYoc3JjKTsKLSAg
ICBwcml2LT5zb3VyY2VWaWRlby5zZWVrLnNjaGVkdWxlKCJbV2ViS2l0XSB3ZWJLaXRNZWRpYVZp
ZGVvU3JjU2Vla01haW5DYiIsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPihzdGQ6OmJpbmQod2ViS2l0
TWVkaWFWaWRlb1NyY1NlZWtNYWluQ2IsIHNyYykpLCBHX1BSSU9SSVRZX0RFRkFVTFQsCi0gICAg
ICAgIFtzcmNdIHsgZ3N0X29iamVjdF91bnJlZihzcmMpOyB9KTsKKyAgICBidWZmZXIgPSBnc3Rf
YnVmZmVyX25ld19hbmRfYWxsb2MobGVuZ3RoKTsKKyAgICBnc3RfYnVmZmVyX2ZpbGwoYnVmZmVy
LCAwLCBkYXRhLCBsZW5ndGgpOwogCi0gICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKKyAgICBy
ZXQgPSBnc3RfYXBwX3NyY19wdXNoX2J1ZmZlcihHU1RfQVBQX1NSQyhzb3VyY2UtPnNyYyksIGJ1
ZmZlcik7CisgICAgR1NUX0VSUk9SX09CSkVDVChtX3NyYy5nZXQoKSwgInB1c2ggYnVmZmVyICVk
XG4iLCAoaW50KXJldCk7CiAKLSAgICByZXR1cm4gVFJVRTsKKyAgICBpZiAocmV0ID09IEdTVF9G
TE9XX09LKQorICAgICAgICByZXR1cm4gU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6QXBwZW5k
U3VjY2VlZGVkOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFNvdXJjZUJ1ZmZlclByaXZhdGVD
bGllbnQ6OlJlYWRTdHJlYW1GYWlsZWQ7CiB9CiAKLXN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRNZWRp
YUF1ZGlvU3JjU2Vla0RhdGFDYihHc3RBcHBTcmMqLCBndWludDY0IG9mZnNldCwgZ3BvaW50ZXIg
dXNlckRhdGEpCit2b2lkIE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyOjptYXJrRW5kT2ZTdHJl
YW0oTWVkaWFTb3VyY2VQcml2YXRlOjpFbmRPZlN0cmVhbVN0YXR1cyBzdGF0dXMpCiB7Ci0gICAg
V2ViS2l0TWVkaWFTcmMqIHNyYyA9IFdFQktJVF9NRURJQV9TUkModXNlckRhdGEpOwotICAgIFdl
YktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKyAgICBXZWJLaXRNZWRpYVNy
Y1ByaXZhdGUqIHByaXYgPSBtX3NyYy0+cHJpdjsKKyAgICBHTGlzdCAqbDsKIAotICAgIEdTVF9E
RUJVR19PQkpFQ1Qoc3JjLCAiU2Vla2luZyB0byBvZmZzZXQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQs
IG9mZnNldCk7Ci0gICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7Ci0gICAgaWYgKG9mZnNldCA9PSBw
cml2LT5zb3VyY2VBdWRpby5vZmZzZXQgJiYgcHJpdi0+c291cmNlQXVkaW8ucmVxdWVzdGVkT2Zm
c2V0ID09IHByaXYtPnNvdXJjZUF1ZGlvLm9mZnNldCkgewotICAgICAgICBHU1RfT0JKRUNUX1VO
TE9DSyhzcmMpOwotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9CisgICAgR1NUX0RFQlVHX09C
SkVDVChtX3NyYy5nZXQoKSwgIkhhdmUgRU9TIik7CiAKLSAgICBpZiAoIXByaXYtPnNlZWthYmxl
KSB7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7Ci0gICAgICAgIHJldHVybiBGQUxT
RTsKLSAgICB9Ci0gICAgaWYgKG9mZnNldCA+IHByaXYtPnNvdXJjZUF1ZGlvLnNpemUpIHsKLSAg
ICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAg
IGlmICghcHJpdi0+bm9Nb3JlUGFkcykgeworICAgICAgICBwcml2LT5ub01vcmVQYWRzID0gdHJ1
ZTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfbm9fbW9yZV9wYWRzKEdTVF9FTEVNRU5UKG1fc3JjLmdl
dCgpKSk7CisgICAgICAgIHdlYktpdE1lZGlhU3JjRG9Bc3luY0RvbmUobV9zcmMuZ2V0KCkpOwog
ICAgIH0KIAotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiRG9pbmcgcmFuZ2UtcmVxdWVzdCBz
ZWVrIik7Ci0gICAgcHJpdi0+c291cmNlQXVkaW8ucmVxdWVzdGVkT2Zmc2V0ID0gb2Zmc2V0Owot
Ci0gICAgZ3N0X29iamVjdF9yZWYoc3JjKTsKLSAgICBwcml2LT5zb3VyY2VBdWRpby5zZWVrLnNj
aGVkdWxlKCJbV2ViS2l0XSB3ZWJLaXRNZWRpYUF1ZGlvU3JjU2Vla01haW5DYiIsIHN0ZDo6ZnVu
Y3Rpb248dm9pZCgpPihzdGQ6OmJpbmQod2ViS2l0TWVkaWFBdWRpb1NyY1NlZWtNYWluQ2IsIHNy
YykpLCBHX1BSSU9SSVRZX0RFRkFVTFQsCi0gICAgICAgIFtzcmNdIHsgZ3N0X29iamVjdF91bnJl
ZihzcmMpOyB9KTsKLQotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7Ci0KLSAgICByZXR1cm4g
VFJVRTsKLX0KLQotdm9pZCB3ZWJLaXRNZWRpYVNyY1NldE1lZGlhUGxheWVyKFdlYktpdE1lZGlh
U3JjKiBzcmMsIFdlYkNvcmU6Ok1lZGlhUGxheWVyKiBwbGF5ZXIpCi17Ci0gICAgV2ViS2l0TWVk
aWFTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwotICAgIHByaXYtPnBsYXllciA9IHBsYXll
cjsKKyAgICBmb3IgKGwgPSBwcml2LT5zb3VyY2VzOyBsOyBsID0gbC0+bmV4dCkgeworICAgICAg
ICBTb3VyY2UgKnNvdXJjZSA9IHN0YXRpY19jYXN0PFNvdXJjZSo+KGwtPmRhdGEpOworICAgICAg
ICBpZiAoc291cmNlLT5zcmMpCisgICAgICAgICAgICBnc3RfYXBwX3NyY19lbmRfb2Zfc3RyZWFt
KEdTVF9BUFBfU1JDKHNvdXJjZS0+c3JjKSk7CisgICAgfQogfQogCi12b2lkIHdlYktpdE1lZGlh
U3JjU2V0UGxheUJpbihXZWJLaXRNZWRpYVNyYyogc3JjLCBHc3RFbGVtZW50KiBwbGF5QmluKQor
dm9pZCBNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lcjo6cmVtb3ZlZEZyb21NZWRpYVNvdXJjZShQ
YXNzUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGU+IHNvdXJjZUJ1ZmZlclByaXZhdGUpCiB7Ci0g
ICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwotICAgIHByaXYtPnBs
YXliaW4gPSBwbGF5QmluOwotfQorICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IG1f
c3JjLT5wcml2OworICAgIFNvdXJjZSogc291cmNlID0gMDsKKyAgICBHTGlzdCAqbDsKKworICAg
IGZvciAobCA9IHByaXYtPnNvdXJjZXM7IGw7IGwgPSBsLT5uZXh0KSB7CisgICAgICAgIFNvdXJj
ZSAqdG1wID0gc3RhdGljX2Nhc3Q8U291cmNlKj4obC0+ZGF0YSk7CisgICAgICAgIGlmICh0bXAt
PnNvdXJjZUJ1ZmZlciA9PSBzb3VyY2VCdWZmZXJQcml2YXRlLmdldCgpKSB7CisgICAgICAgICAg
ICBzb3VyY2UgPSB0bXA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KIAot
TWVkaWFTb3VyY2VDbGllbnRHc3RyZWFtZXI6Ok1lZGlhU291cmNlQ2xpZW50R3N0cmVhbWVyKFdl
YktpdE1lZGlhU3JjKiBzcmMpCi0gICAgOiBtX3NyYyhzdGF0aWNfY2FzdDxXZWJLaXRNZWRpYVNy
Yyo+KGdzdF9vYmplY3RfcmVmKHNyYykpKQotewotfQorICAgIGlmICghc291cmNlIHx8ICFzb3Vy
Y2UtPnNyYykKKyAgICAgICAgcmV0dXJuOwogCi1NZWRpYVNvdXJjZUNsaWVudEdzdHJlYW1lcjo6
fk1lZGlhU291cmNlQ2xpZW50R3N0cmVhbWVyKCkKLXsKLSAgICBnc3Rfb2JqZWN0X3VucmVmKG1f
c3JjKTsKKyAgICBpZiAoc291cmNlLT5zcmMpCisgICAgICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9z
dHJlYW0oR1NUX0FQUF9TUkMoc291cmNlLT5zcmMpKTsKIH0KIAotdm9pZCBNZWRpYVNvdXJjZUNs
aWVudEdzdHJlYW1lcjo6ZGlkUmVjZWl2ZUR1cmF0aW9uKGRvdWJsZSBkdXJhdGlvbikKLXsKLSAg
ICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBtX3NyYy0+cHJpdjsKLSAgICBHU1RfREVC
VUdfT0JKRUNUKG1fc3JjLCAiUmVjZWl2ZWQgZHVyYXRpb246ICVsZiIsIGR1cmF0aW9uKTsKLQot
ICAgIEdTVF9PQkpFQ1RfTE9DSyhtX3NyYyk7Ci0gICAgcHJpdi0+ZHVyYXRpb24gPSBkdXJhdGlv
biA+PSAwLjAgPyBzdGF0aWNfY2FzdDxnaW50NjQ+KGR1cmF0aW9uKkdTVF9TRUNPTkQpIDogMDsK
LSAgICBHU1RfT0JKRUNUX1VOTE9DSyhtX3NyYyk7Ci19Cit9OwogCi12b2lkIE1lZGlhU291cmNl
Q2xpZW50R3N0cmVhbWVyOjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVu
Z3RoLCBTdHJpbmcgdHlwZSkKK25hbWVzcGFjZSBXVEYgewordGVtcGxhdGUgPD4gR1JlZlB0cjxX
ZWJLaXRNZWRpYVNyYz4gYWRvcHRHUmVmKFdlYktpdE1lZGlhU3JjKiBwdHIpCiB7Ci0gICAgV2Vi
S2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gbV9zcmMtPnByaXY7Ci0gICAgR3N0Rmxvd1JldHVy
biByZXQgPSBHU1RfRkxPV19PSzsKLSAgICBHc3RCdWZmZXIgKiBidWZmZXI7Ci0KLSAgICBpZiAo
dHlwZS5zdGFydHNXaXRoKCJ2aWRlbyIpKSB7Ci0gICAgICAgIGlmIChwcml2LT5ub01vcmVQYWQg
PT0gRkFMU0UgJiYgcHJpdi0+c291cmNlVmlkZW8ucGFkQWRkZWQgPT0gVFJVRSkgewotICAgICAg
ICAgICAgZ3N0X2VsZW1lbnRfbm9fbW9yZV9wYWRzKEdTVF9FTEVNRU5UKG1fc3JjKSk7Ci0gICAg
ICAgICAgICBwcml2LT5ub01vcmVQYWQgPSBUUlVFOwotICAgICAgICB9Ci0gICAgICAgIGlmIChw
cml2LT5ub01vcmVQYWQgPT0gRkFMU0UgJiYgcHJpdi0+c291cmNlVmlkZW8ucGFkQWRkZWQgPT0g
RkFMU0UpIHsKLSAgICAgICAgICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoR1NUX0VMRU1FTlQobV9z
cmMpLCBwcml2LT5zb3VyY2VWaWRlby5zcmNwYWQpOwotICAgICAgICAgICAgcHJpdi0+c291cmNl
VmlkZW8ucGFkQWRkZWQgPSBUUlVFOwotICAgICAgICB9Ci0gICAgICAgIEdTVF9PQkpFQ1RfTE9D
SyhtX3NyYyk7Ci0gICAgICAgIGJ1ZmZlciA9IFdlYkNvcmU6OmNyZWF0ZUdzdEJ1ZmZlckZvckRh
dGEoZGF0YSwgbGVuZ3RoKTsKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sobV9zcmMpOwotCi0g
ICAgICAgIHJldCA9IGdzdF9hcHBfc3JjX3B1c2hfYnVmZmVyKEdTVF9BUFBfU1JDKHByaXYtPnNv
dXJjZVZpZGVvLmFwcHNyYyksIGJ1ZmZlcik7Ci0gICAgfSBlbHNlIGlmICh0eXBlLnN0YXJ0c1dp
dGgoImF1ZGlvIikpIHsKLSAgICAgICAgaWYgKHByaXYtPm5vTW9yZVBhZCA9PSBGQUxTRSAmJiBw
cml2LT5zb3VyY2VBdWRpby5wYWRBZGRlZCA9PSBUUlVFKSB7Ci0gICAgICAgICAgICBnc3RfZWxl
bWVudF9ub19tb3JlX3BhZHMoR1NUX0VMRU1FTlQobV9zcmMpKTsKLSAgICAgICAgICAgIHByaXYt
Pm5vTW9yZVBhZCA9IFRSVUU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHByaXYtPm5vTW9yZVBh
ZCA9PSBGQUxTRSAmJiBwcml2LT5zb3VyY2VBdWRpby5wYWRBZGRlZCA9PSBGQUxTRSkgewotICAg
ICAgICAgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChHU1RfRUxFTUVOVChtX3NyYyksIHByaXYtPnNv
dXJjZUF1ZGlvLnNyY3BhZCk7Ci0gICAgICAgICAgICBwcml2LT5zb3VyY2VBdWRpby5wYWRBZGRl
ZCA9IFRSVUU7Ci0gICAgICAgIH0KLSAgICAgICAgR1NUX09CSkVDVF9MT0NLKG1fc3JjKTsKLSAg
ICAgICAgYnVmZmVyID0gV2ViQ29yZTo6Y3JlYXRlR3N0QnVmZmVyRm9yRGF0YShkYXRhLCBsZW5n
dGgpOwotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhtX3NyYyk7Ci0KLSAgICAgICAgcmV0ID0g
Z3N0X2FwcF9zcmNfcHVzaF9idWZmZXIoR1NUX0FQUF9TUkMocHJpdi0+c291cmNlQXVkaW8uYXBw
c3JjKSwgYnVmZmVyKTsKLSAgICB9Ci0KLSAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LICYmIHJl
dCAhPSBHU1RfRkxPV19FT1MpCi0gICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SKG1fc3JjLCBDT1JF
LCBGQUlMRUQsICgwKSwgKDApKTsKKyAgICBBU1NFUlQoIXB0ciB8fCAhZ19vYmplY3RfaXNfZmxv
YXRpbmcoR19PQkpFQ1QocHRyKSkpOworICAgIHJldHVybiBHUmVmUHRyPFdlYktpdE1lZGlhU3Jj
PihwdHIsIEdSZWZQdHJBZG9wdCk7CiB9CiAKLXZvaWQgTWVkaWFTb3VyY2VDbGllbnRHc3RyZWFt
ZXI6OmRpZEZpbmlzaExvYWRpbmcoZG91YmxlKQordGVtcGxhdGUgPD4gV2ViS2l0TWVkaWFTcmMq
IHJlZkdQdHI8V2ViS2l0TWVkaWFTcmM+KFdlYktpdE1lZGlhU3JjKiBwdHIpCiB7Ci0gICAgV2Vi
S2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gbV9zcmMtPnByaXY7CisgICAgaWYgKHB0cikKKyAg
ICAgICAgZ3N0X29iamVjdF9yZWZfc2luayhHU1RfT0JKRUNUKHB0cikpOwogCi0gICAgR1NUX0RF
QlVHX09CSkVDVChtX3NyYywgIkhhdmUgRU9TIik7Ci0KLSAgICBHU1RfT0JKRUNUX0xPQ0sobV9z
cmMpOwotICAgIGlmICghcHJpdi0+c291cmNlVmlkZW8uc2Vlay5pc0FjdGl2ZSgpKSB7Ci0gICAg
ICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG1fc3JjKTsKLSAgICAgICAgZ3N0X2FwcF9zcmNfZW5kX29m
X3N0cmVhbShHU1RfQVBQX1NSQyhwcml2LT5zb3VyY2VWaWRlby5hcHBzcmMpKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sobV9zcmMpOwotCi0gICAgR1NUX09CSkVDVF9M
T0NLKG1fc3JjKTsKLSAgICBpZiAoIXByaXYtPnNvdXJjZUF1ZGlvLnNlZWsuaXNBY3RpdmUoKSkg
ewotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhtX3NyYyk7Ci0gICAgICAgIGdzdF9hcHBfc3Jj
X2VuZF9vZl9zdHJlYW0oR1NUX0FQUF9TUkMocHJpdi0+c291cmNlQXVkaW8uYXBwc3JjKSk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG1fc3JjKTsKKyAgICByZXR1cm4g
cHRyOwogfQogCi12b2lkIE1lZGlhU291cmNlQ2xpZW50R3N0cmVhbWVyOjpkaWRGYWlsKCkKK3Rl
bXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPFdlYktpdE1lZGlhU3JjPihXZWJLaXRNZWRpYVNyYyog
cHRyKQogewotICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0oR1NUX0FQUF9TUkMobV9zcmMt
PnByaXYtPnNvdXJjZVZpZGVvLmFwcHNyYykpOwotICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJl
YW0oR1NUX0FQUF9TUkMobV9zcmMtPnByaXYtPnNvdXJjZUF1ZGlvLmFwcHNyYykpOworICAgIGlm
IChwdHIpCisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYocHRyKTsKIH0KK307CiAKICNlbmRpZiAv
LyBVU0UoR1NUUkVBTUVSKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRNZWRpYVNvdXJjZUdTdHJl
YW1lci5oCmluZGV4IDc4ODkyYzMuLmU0NDRiM2Y3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0
TWVkaWFTb3VyY2VHU3RyZWFtZXIuaApAQCAtMiw2ICsyLDcgQEAKICAqICBDb3B5cmlnaHQgKEMp
IDIwMDksIDIwMTAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEu
Y28udWs+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDEzIENvbGxhYm9yYSBMdGQuCiAgKiAgQ29weXJp
Z2h0IChDKSAyMDEzIE9yYW5nZQorICogIENvcHlyaWdodCAoQykgMjAxNCBTZWJhc3RpYW4gRHLD
tmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAt
MjMsNiArMjQsMTIgQEAKICNpZiBFTkFCTEUoVklERU8pICYmIEVOQUJMRShNRURJQV9TT1VSQ0Up
ICYmIFVTRShHU1RSRUFNRVIpCiAKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1ZGUg
Ik1lZGlhU291cmNlLmgiCisjaW5jbHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudC5oIgor
I2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGUuaCIKKworI2luY2x1ZGUgIkdSZWZQdHJHU3Ry
ZWFtZXIuaCIKKwogI2luY2x1ZGUgPGdzdC9nc3QuaD4KIAogR19CRUdJTl9ERUNMUwpAQCAtNDgs
MjUgKzU1LDM4IEBAIHN0cnVjdCBfV2ViS2l0TWVkaWFTcmNDbGFzcyB7CiB9OwogCiBHVHlwZSB3
ZWJraXRfbWVkaWFfc3JjX2dldF90eXBlKHZvaWQpOwotdm9pZCB3ZWJLaXRNZWRpYVNyY1NldE1l
ZGlhUGxheWVyKFdlYktpdE1lZGlhU3JjKiwgV2ViQ29yZTo6TWVkaWFQbGF5ZXIqKTsKLXZvaWQg
d2ViS2l0TWVkaWFTcmNTZXRQbGF5QmluKFdlYktpdE1lZGlhU3JjKiwgR3N0RWxlbWVudCopOwog
CiBHX0VORF9ERUNMUwogCi1jbGFzcyBNZWRpYVNvdXJjZUNsaWVudEdzdHJlYW1lcjogcHVibGlj
IFJlZkNvdW50ZWQ8TWVkaWFTb3VyY2VDbGllbnRHc3RyZWFtZXI+IHsKK25hbWVzcGFjZSBXVEYg
ewordGVtcGxhdGU8PiBHUmVmUHRyPFdlYktpdE1lZGlhU3JjPiBhZG9wdEdSZWYoV2ViS2l0TWVk
aWFTcmMqIHB0cik7Cit0ZW1wbGF0ZTw+IFdlYktpdE1lZGlhU3JjKiByZWZHUHRyPFdlYktpdE1l
ZGlhU3JjPihXZWJLaXRNZWRpYVNyYyogcHRyKTsKK3RlbXBsYXRlPD4gdm9pZCBkZXJlZkdQdHI8
V2ViS2l0TWVkaWFTcmM+KFdlYktpdE1lZGlhU3JjKiBwdHIpOworfTsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBDb250ZW50VHlwZTsKKworY2xhc3MgTWVkaWFTb3VyY2VDbGllbnRH
U3RyZWFtZXI6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyPiB7
CiAgICAgcHVibGljOgotICAgICAgICBNZWRpYVNvdXJjZUNsaWVudEdzdHJlYW1lcihXZWJLaXRN
ZWRpYVNyYyopOwotICAgICAgICB+TWVkaWFTb3VyY2VDbGllbnRHc3RyZWFtZXIoKTsKKyAgICAg
ICAgTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXIoV2ViS2l0TWVkaWFTcmMqKTsKKyAgICAgICAg
dmlydHVhbCB+TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXIoKTsKIAotICAgICAgICB2b2lkIGRp
ZFJlY2VpdmVEdXJhdGlvbihkb3VibGUpOwotICAgICAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKGNv
bnN0IGNoYXIqLCBpbnQsIFN0cmluZyk7Ci0gICAgICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZyhk
b3VibGUpOwotICAgICAgICB2b2lkIGRpZEZhaWwoKTsKKyAgICAgICAgLy8gRnJvbSBNZWRpYVNv
dXJjZUdTdHJlYW1lcgorICAgICAgICBNZWRpYVNvdXJjZVByaXZhdGU6OkFkZFN0YXR1cyBhZGRT
b3VyY2VCdWZmZXIoUGFzc1JlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlPiwgY29uc3QgQ29udGVu
dFR5cGUmKTsKKyAgICAgICAgdm9pZCBkdXJhdGlvbkNoYW5nZWQoY29uc3QgTWVkaWFUaW1lJik7
CisgICAgICAgIHZvaWQgbWFya0VuZE9mU3RyZWFtKE1lZGlhU291cmNlUHJpdmF0ZTo6RW5kT2ZT
dHJlYW1TdGF0dXMpOworCisgICAgICAgIC8vIEZyb20gU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJl
YW1lcgorICAgICAgICBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpBcHBlbmRSZXN1bHQgYXBw
ZW5kKFBhc3NSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZT4sIGNvbnN0IHVuc2lnbmVkIGNoYXIq
LCB1bnNpZ25lZCk7CisgICAgICAgIHZvaWQgcmVtb3ZlZEZyb21NZWRpYVNvdXJjZShQYXNzUmVm
UHRyPFNvdXJjZUJ1ZmZlclByaXZhdGU+KTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFdlYktp
dE1lZGlhU3JjKiBtX3NyYzsKKyAgICAgICAgR1JlZlB0cjxXZWJLaXRNZWRpYVNyYz4gbV9zcmM7
CiB9OwogCit9OwogCiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKICNlbmRpZgotLSAKMi4yLjAu
cmMwLjIwNy5nYTNhNjE2YwoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243023</attachid>
            <date>2014-12-10 08:17:52 -0800</date>
            <delta_ts>2014-12-29 05:44:55 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>0001-WIP.patch</filename>
            <type>text/plain</type>
            <size>83070</size>
            <attacher name="Sebastian Dröge (slomo)">slomo</attacher>
            
              <data encoding="base64">RnJvbSA4MTljOTZmZjdlMTNjZDllZTRjZjk5ZmI5MGQyM2ZiMGIxZDI3N2NiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/U2ViYXN0aWFuPTIwRHI9QzM9QjZnZT89IDxz
ZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgpEYXRlOiBNb24sIDggRGVjIDIwMTQgMTg6NDM6MjMg
KzAxMDAKU3ViamVjdDogW1BBVENIXSBXSVAKCi0tLQogTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3Rr
L1Rlc3RFeHBlY3RhdGlvbnMgICAgICAgICAgfCAgIDQ5ICstCiAuLi4vZ3N0cmVhbWVyL0F1ZGlv
VHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcCAgICAgICB8ICAgIDIgKwogLi4uL2dzdHJlYW1lci9B
dWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oICAgICAgICAgfCAgICAyICsKIC4uLi9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCAgICAgIHwgICAzNSArLQogLi4uL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCAgICAgICAgfCAgIDExICsKIC4u
Li9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwICAgIHwgICA0MiAr
LQogLi4uL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNvdXJjZUdTdHJlYW1lci5oICAgICAgfCAg
IDMwICstCiAuLi4vZ3N0cmVhbWVyL1NvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuY3BwICAg
ICB8ICAgOTEgKy0KIC4uLi9nc3RyZWFtZXIvU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5o
ICAgICAgIHwgICA0NiArLQogLi4uL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1l
ci5jcHAgICAgICAgfCAgICAyICsKIC4uLi9nc3RyZWFtZXIvVmlkZW9UcmFja1ByaXZhdGVHU3Ry
ZWFtZXIuaCAgICAgICAgIHwgICAgMiArCiAuLi4vZ3N0cmVhbWVyL1dlYktpdE1lZGlhU291cmNl
R1N0cmVhbWVyLmNwcCAgICAgICB8IDExODggKysrKysrKysrKysrLS0tLS0tLS0KIC4uLi9nc3Ry
ZWFtZXIvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCAgICAgICAgIHwgICA0OCArLQogMTMg
ZmlsZXMgY2hhbmdlZCwgMTAyMiBpbnNlcnRpb25zKCspLCA1MjYgZGVsZXRpb25zKC0pCgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwppbmRleCA1Njg0YTIxLi45YWI2
ZjYyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9u
cworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwpAQCAtMjE4
LDggKzIxOCw1MyBAQCB3ZWJraXQub3JnL2IvNjE2NjEgZWRpdGluZy9wYXN0ZWJvYXJkL2RyYWct
ZHJvcC1saXN0Lmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi85Mjc0OSBmYXN0L2RvbS9O
YXZpZ2F0b3JDb250ZW50VXRpbHMvaXMtcHJvdG9jb2wtaGFuZGxlci1yZWdpc3RlcmVkLmh0bWwg
WyBTa2lwIF0KIAogIyBUZXN0cyBmb3IgTWVkaWFTb3VyY2UgQVBJLiBGZWF0dXJlIGlzIG5vdCB0
b3RhbGx5IGZ1bmN0aW9uYWwuCi13ZWJraXQub3JnL2IvOTkwNjUgaHR0cC90ZXN0cy9tZWRpYS9t
ZWRpYS1zb3VyY2UgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi85OTA2NSBtZWRpYS9tZWRpYS1zb3Vy
Y2UgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNv
dXJjZS9tZWRpYXNvdXJjZS1hcHBlbmQtYnVmZmVyLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcv
Yi85OTA2NSBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1hcHBlbmQt
c3RyZWFtLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBodHRwL3Rlc3RzL21lZGlh
L21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1hcHBlbmR3aW5kb3cuaHRtbCBbIFNraXAgXQord2Vi
a2l0Lm9yZy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNl
LWJ1ZmZlcmVkLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBodHRwL3Rlc3RzL21l
ZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jb25maWctY2hhbmdlLW1wNC1hLWJpdHJhdGUu
aHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEt
c291cmNlL21lZGlhc291cmNlLWNvbmZpZy1jaGFuZ2UtbXA0LWF2LWF1ZGlvLWJpdHJhdGUuaHRt
bCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291
cmNlL21lZGlhc291cmNlLWNvbmZpZy1jaGFuZ2UtbXA0LWF2LWZyYW1lc2l6ZS5odG1sIFsgU2tp
cCBdCit3ZWJraXQub3JnL2IvOTkwNjUgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVk
aWFzb3VyY2UtY29uZmlnLWNoYW5nZS1tcDQtYXYtdmlkZW8tYml0cmF0ZS5odG1sIFsgU2tpcCBd
Cit3ZWJraXQub3JnL2IvOTkwNjUgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFz
b3VyY2UtY29uZmlnLWNoYW5nZS1tcDQtdi1iaXRyYXRlLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5v
cmcvYi85OTA2NSBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jb25m
aWctY2hhbmdlLW1wNC12LWZyYW1lcmF0ZS5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkw
NjUgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtY29uZmlnLWNoYW5n
ZS1tcDQtdi1mcmFtZXNpemUuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5MDY1IGh0dHAv
dGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWNvbmZpZy1jaGFuZ2Utd2VibS1h
LWJpdHJhdGUuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVk
aWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWNvbmZpZy1jaGFuZ2Utd2VibS1hdi1hdWRpby1i
aXRyYXRlLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBodHRwL3Rlc3RzL21lZGlh
L21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jb25maWctY2hhbmdlLXdlYm0tYXYtZnJhbWVzaXpl
Lmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBodHRwL3Rlc3RzL21lZGlhL21lZGlh
LXNvdXJjZS9tZWRpYXNvdXJjZS1jb25maWctY2hhbmdlLXdlYm0tYXYtdmlkZW8tYml0cmF0ZS5o
dG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1z
b3VyY2UvbWVkaWFzb3VyY2UtY29uZmlnLWNoYW5nZS13ZWJtLXYtYml0cmF0ZS5odG1sIFsgU2tp
cCBdCit3ZWJraXQub3JnL2IvOTkwNjUgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVk
aWFzb3VyY2UtY29uZmlnLWNoYW5nZS13ZWJtLXYtZnJhbWVyYXRlLmh0bWwgWyBTa2lwIF0KK3dl
YmtpdC5vcmcvYi85OTA2NSBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJj
ZS1jb25maWctY2hhbmdlLXdlYm0tdi1mcmFtZXNpemUuaHRtbCBbIFNraXAgXQord2Via2l0Lm9y
Zy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWR1cmF0
aW9uLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBodHRwL3Rlc3RzL21lZGlhL21l
ZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1nZXR2aWRlb3BsYXliYWNrcXVhbGl0eS5odG1sIFsgU2tp
cCBdCit3ZWJraXQub3JnL2IvOTkwNjUgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVk
aWFzb3VyY2UtaXMtdHlwZS1zdXBwb3J0ZWQuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5
MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLXBsYXkuaHRtbCBb
IFNraXAgXQord2Via2l0Lm9yZy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNl
L21lZGlhc291cmNlLXBsYXktdGhlbi1zZWVrLWJhY2suaHRtbCBbIFNraXAgXQord2Via2l0Lm9y
Zy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLXJlZHVu
ZGFudC1zZWVrLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBodHRwL3Rlc3RzL21l
ZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1yZW1vdmUuaHRtbCBbIFNraXAgXQord2Via2l0
Lm9yZy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLXNl
ZWstYmV5b25kLWR1cmF0aW9uLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBodHRw
L3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1zZWVrLWR1cmluZy1wZW5kaW5n
LXNlZWsuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEv
bWVkaWEtc291cmNlL21lZGlhc291cmNlLXNvdXJjZWJ1ZmZlci1tb2RlLmh0bWwgWyBTa2lwIF0K
Kword2Via2l0Lm9yZy9iLzk5MDY1IG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtYXBw
ZW5kLWZhaWxlZC5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgbWVkaWEvbWVkaWEt
c291cmNlL21lZGlhLXNvdXJjZS1tdWx0aXBsZS1pbml0aWFsaXphdGlvbi1zZWdtZW50cy5odG1s
IFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNv
dXJjZS1hcHBlbmQtbm9uc3luYy1zYW1wbGUtYWZ0ZXItYWJvcnQuaHRtbCBbIFNraXAgXQord2Vi
a2l0Lm9yZy9iLzk5MDY1IG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtZHVwbGljYXRl
LXNlZWtlZC5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgbWVkaWEvbWVkaWEtc291
cmNlL21lZGlhLXNvdXJjZS1jYW5wbGF5dGhyb3VnaC5odG1sIFsgU2tpcCBdCit3ZWJraXQub3Jn
L2IvOTkwNjUgbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1kdXJhdGlvbi1hZnRlci1h
cHBlbmQuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5MDY1IG1lZGlhL21lZGlhLXNvdXJj
ZS9tZWRpYS1zb3VyY2UtZW5kLW9mLXN0cmVhbS1idWZmZXJlZC5odG1sIFsgU2tpcCBdCit3ZWJr
aXQub3JnL2IvOTkwNjUgbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1lbmQtb2Ytc3Ry
ZWFtLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBtZWRpYS9tZWRpYS1zb3VyY2Uv
bWVkaWEtc291cmNlLWZ1ZGdlLWZhY3Rvci5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkw
NjUgbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1tb25pdG9yLXNvdXJjZS1idWZmZXJz
Lmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBtZWRpYS9tZWRpYS1zb3VyY2UvbWVk
aWEtc291cmNlLW92ZXJsYXBwaW5nLWFwcGVuZC5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2Iv
OTkwNjUgbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1vdmVybGFwcGluZy1kZWNvZGV0
aW1lLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBtZWRpYS9tZWRpYS1zb3VyY2Uv
bWVkaWEtc291cmNlLXBsYXkuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5MDY1IG1lZGlh
L21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtcmVtb3ZlLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5v
cmcvYi85OTA2NSBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLXNlZWstY29tcGxldGUu
aHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5MDY1IG1lZGlhL21lZGlhLXNvdXJjZS9tZWRp
YS1zb3VyY2UtdHJhY2stZW5hYmxlZC5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUg
bWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS10cmFja3MuaHRtbCBbIFNraXAgXQord2Vi
a2l0Lm9yZy9iLzk5MDY1IG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtdmlkZW8tcGxh
eWJhY2stcXVhbGl0eS5odG1sIFsgU2tpcCBdCiAKICMgRW5jcnlwdGVkIE1lZGlhIEV4dGVuc2lv
bnMgYXJlIG5vdCBlbmFibGVkLgogd2Via2l0Lm9yZy9iLzk5MDI0IG1lZGlhL2VuY3J5cHRlZC1t
ZWRpYSBbIFNraXAgXQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9BdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1l
ci5jcHAKaW5kZXggMmYwZGViYy4uNGE5YzZmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvQXVkaW9U
cmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0zNyw2ICszNyw4IEBAIEF1ZGlvVHJhY2tQcml2
YXRlR1N0cmVhbWVyOjpBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcihHUmVmUHRyPEdzdEVsZW1l
bnQ+IHBsYXliCiAgICAgOiBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyKHRoaXMsIGluZGV4LCBw
YWQpCiAgICAgLCBtX3BsYXliaW4ocGxheWJpbikKIHsKKyAgICAvLyBGSVhNRTogR2V0IGEgcmVh
bCBJRCBoZXJlCisgICAgbV9pZCA9ICJBIiArIFN0cmluZzo6bnVtYmVyKGluZGV4KTsKICAgICBu
b3RpZnlUcmFja09mQWN0aXZlQ2hhbmdlZCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFt
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9BdWRpb1Ry
YWNrUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IDE3NzViMjAuLjA5ZTAwODQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9BdWRpb1RyYWNrUHJp
dmF0ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9BdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC00OCwxMSArNDgsMTMgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCBpbnQgdHJhY2tJbmRleCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1faW5kZXg7IH0KIAorICAgIHZpcnR1YWwgQXRvbWljU3RyaW5nIGlkKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9pZDsgfQogICAgIHZpcnR1YWwgQXRvbWljU3RyaW5nIGxhYmVs
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9sYWJlbDsgfQogICAgIHZpcnR1YWwgQXRvbWlj
U3RyaW5nIGxhbmd1YWdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9sYW5ndWFnZTsgfQog
CiBwcml2YXRlOgogICAgIEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyKEdSZWZQdHI8R3N0RWxl
bWVudD4gcGxheWJpbiwgZ2ludCBpbmRleCwgR1JlZlB0cjxHc3RQYWQ+KTsKKyAgICBBdG9taWNT
dHJpbmcgbV9pZDsKIAogICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9wbGF5YmluOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggOGM5
YTYzNy4uNTc4ZjQ2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lci5jcHAKQEAgLTU1Myw2ICs1NTMsMTEgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmRvU2VlayhnaW50NjQgcG9zaXRpb24sIGZsb2F0IHJhdGUsIEdzdFNlZWtGbGEK
IHsKICAgICBnaW50NjQgc3RhcnRUaW1lLCBlbmRUaW1lOwogCisgICAgLy8gVE9ETzogU2hvdWxk
IGRvIG1vcmUgdGhhbiB0aGF0LCBuZWVkIHRvIG5vdGlmeSB0aGUgbWVkaWEgc291cmNlCisgICAg
Ly8gYW5kIHByb2JhYmx5IGZsdXNoIHRoZSBwaXBlbGluZSBhdCBsZWFzdAorICAgIGlmIChpc01l
ZGlhU291cmNlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgaWYgKHJhdGUgPiAwKSB7
CiAgICAgICAgIHN0YXJ0VGltZSA9IHBvc2l0aW9uOwogICAgICAgICBlbmRUaW1lID0gR1NUX0NM
T0NLX1RJTUVfTk9ORTsKQEAgLTY2OSw2ICs2NzQsMTcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVmlkZW8oKQogCiAgICAgICAgIFJlZlB0cjxWaWRl
b1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gdHJhY2sgPSBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1l
cjo6Y3JlYXRlKG1fcGxheUJpbiwgaSwgcGFkKTsKICAgICAgICAgbV92aWRlb1RyYWNrcy5hcHBl
bmQodHJhY2spOworCisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKyAgICAgICAgaWYgKGlzTWVk
aWFTb3VyY2UoKSkgeworICAgICAgICAgICAgLy8gVE9ETzogVGhpcyB3aWxsIGxlYWsgaWYgdGhl
IGV2ZW50IGdldHMgZnJlZWQgd2l0aG91dCBhcnJpdmluZyBpbgorICAgICAgICAgICAgLy8gdGhl
IHNvdXJjZSwgZS5nLiB3aGVuIHdlIGdvIGZsdXNoaW5nIGhlcmUKKyAgICAgICAgICAgIFJlZlB0
cjxWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4qIHRyYWNrQ29weSA9IG5ldyBSZWZQdHI8Vmlk
ZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+KHRyYWNrKTsKKyAgICAgICAgICAgIEdzdFN0cnVjdHVy
ZSogdmlkZW9FdmVudFN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3KCJ3ZWJLaXRWaWRlb1Ry
YWNrIiwgInRyYWNrIiwgR19UWVBFX1BPSU5URVIsIHRyYWNrQ29weSwgbnVsbHB0cik7CisgICAg
ICAgICAgICBnc3RfcGFkX3B1c2hfZXZlbnQocGFkLmdldCgpLCBnc3RfZXZlbnRfbmV3X2N1c3Rv
bShHU1RfRVZFTlRfQ1VTVE9NX1VQU1RSRUFNLCB2aWRlb0V2ZW50U3RydWN0dXJlKSk7CisgICAg
ICAgIH0KKyNlbmRpZgorCiAgICAgICAgIG1fcGxheWVyLT5hZGRWaWRlb1RyYWNrKHRyYWNrLnJl
bGVhc2UoKSk7CiAgICAgfQogCkBAIC03MTcsNiArNzMzLDE3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZkF1ZGlvKCkKIAogICAgICAgICBSZWZQdHI8
QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+IHRyYWNrID0gQXVkaW9UcmFja1ByaXZhdGVHU3Ry
ZWFtZXI6OmNyZWF0ZShtX3BsYXlCaW4sIGksIHBhZCk7CiAgICAgICAgIG1fYXVkaW9UcmFja3Mu
aW5zZXJ0KGksIHRyYWNrKTsKKworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisgICAgICAgIGlm
IChpc01lZGlhU291cmNlKCkpIHsKKyAgICAgICAgICAgIC8vIFRPRE86IFRoaXMgd2lsbCBsZWFr
IGlmIHRoZSBldmVudCBnZXRzIGZyZWVkIHdpdGhvdXQgYXJyaXZpbmcgaW4KKyAgICAgICAgICAg
IC8vIHRoZSBzb3VyY2UsIGUuZy4gd2hlbiB3ZSBnbyBmbHVzaGluZyBoZXJlCisgICAgICAgICAg
ICBSZWZQdHI8QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+KiB0cmFja0NvcHkgPSBuZXcgUmVm
UHRyPEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyPih0cmFjayk7CisgICAgICAgICAgICBHc3RT
dHJ1Y3R1cmUqIGF1ZGlvRXZlbnRTdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ldygid2ViS2l0
QXVkaW9UcmFjayIsICJ0cmFjayIsIEdfVFlQRV9QT0lOVEVSLCB0cmFja0NvcHksIG51bGxwdHIp
OworICAgICAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50KHBhZC5nZXQoKSwgZ3N0X2V2ZW50X25l
d19jdXN0b20oR1NUX0VWRU5UX0NVU1RPTV9VUFNUUkVBTSwgYXVkaW9FdmVudFN0cnVjdHVyZSkp
OworICAgICAgICB9CisjZW5kaWYKKwogICAgICAgICBtX3BsYXllci0+YWRkQXVkaW9UcmFjayh0
cmFjay5yZWxlYXNlKCkpOwogICAgIH0KIApAQCAtNzU3LDYgKzc4NCw5IEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlRleHQoKQogCiAgICAgICAgIFJl
ZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyPiB0cmFjayA9IEluYmFuZFRleHRU
cmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShpLCBwYWQpOwogICAgICAgICBtX3RleHRUcmFj
a3MuaW5zZXJ0KGksIHRyYWNrKTsKKworICAgICAgICAvLyBUT0RPOiBUZXh0IHRyYWNrcyBmb3Ig
dGhlIG1lZGlhIHNvdXJjZQorCiAgICAgICAgIG1fcGxheWVyLT5hZGRUZXh0VHJhY2sodHJhY2su
cmVsZWFzZSgpKTsKICAgICB9CiAKQEAgLTEyMzMsNyArMTI2Myw3IEBAIGZsb2F0IE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWF4VGltZUxvYWRlZCgpIGNvbnN0CiAKIGJvb2wgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdAogewotICAg
IGlmICghbV9wbGF5QmluIHx8ICFtX21lZGlhRHVyYXRpb24gfHwgIXRvdGFsQnl0ZXMoKSkKKyAg
ICBpZiAoIW1fcGxheUJpbiB8fCAhbV9tZWRpYUR1cmF0aW9uIHx8ICghaXNNZWRpYVNvdXJjZSgp
ICYmICF0b3RhbEJ5dGVzKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZmxvYXQgY3Vy
cmVudE1heFRpbWVMb2FkZWQgPSBtYXhUaW1lTG9hZGVkKCk7CiAgICAgYm9vbCBkaWRMb2FkaW5n
UHJvZ3Jlc3MgPSBjdXJyZW50TWF4VGltZUxvYWRlZCAhPSBtX21heFRpbWVMb2FkZWRBdExhc3RE
aWRMb2FkaW5nUHJvZ3Jlc3M7CkBAIC0xMzA3LDcgKzEzMzcsNiBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6c291cmNlQ2hhbmdlZCgpCiAjaWYgRU5BQkxFKE1FRElBX1NPVVJD
RSkKICAgICBpZiAobV9tZWRpYVNvdXJjZSAmJiBXRUJLSVRfSVNfTUVESUFfU1JDKG1fc291cmNl
LmdldCgpKSkgewogICAgICAgICBNZWRpYVNvdXJjZUdTdHJlYW1lcjo6b3BlbihtX21lZGlhU291
cmNlLmdldCgpLCBXRUJLSVRfTUVESUFfU1JDKG1fc291cmNlLmdldCgpKSk7Ci0gICAgICAgIHdl
YktpdE1lZGlhU3JjU2V0UGxheUJpbihXRUJLSVRfTUVESUFfU1JDKG1fc291cmNlLmdldCgpKSwg
bV9wbGF5QmluLmdldCgpKTsKICAgICB9CiAjZW5kaWYKIH0KQEAgLTE5NjQsNyArMTk5Myw3IEBA
IGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjYW5TYXZlTWVkaWFEYXRhKCkgY29u
c3QKIAogICAgIGlmIChtX3VybC5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgIAorCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggMjg1M2U0YS4uYmY5ZmQ2MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaApAQCAtMTY2
LDYgKzE2NiwxNCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBkaWRQYXNzQ09SU0FjY2Vz
c0NoZWNrKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGNhblNhdmVNZWRpYURhdGEoKSBjb25z
dCBvdmVycmlkZTsKIAorI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisgICAgLy8gVE9ETzogSW1w
bGVtZW50CisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIHRvdGFsVmlkZW9GcmFtZXMoKSB7IHJl
dHVybiAwOyB9CisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGRyb3BwZWRWaWRlb0ZyYW1lcygp
IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgY29ycnVwdGVkVmlkZW9G
cmFtZXMoKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBNZWRpYVRpbWUgdG90YWxGcmFtZURl
bGF5KCkgeyByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOyB9CisjZW5kaWYKKwogcHJpdmF0
ZToKICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fcGxheUJpbjsKICAgICBHUmVmUHRyPEdzdEVs
ZW1lbnQ+IG1fc291cmNlOwpAQCAtMjI1LDYgKzIzMyw5IEBAIHByaXZhdGU6CiAjZW5kaWYKICNp
ZiBFTkFCTEUoTUVESUFfU09VUkNFKQogICAgIFJlZlB0cjxNZWRpYVNvdXJjZVByaXZhdGVDbGll
bnQ+IG1fbWVkaWFTb3VyY2U7CisgICAgYm9vbCBpc01lZGlhU291cmNlKCkgY29uc3QgeyByZXR1
cm4gbV9tZWRpYVNvdXJjZTsgfQorI2Vsc2UKKyAgICBib29sIGlzTWVkaWFTb3VyY2UoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU291cmNlR1N0cmVhbWVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNvdXJj
ZUdTdHJlYW1lci5jcHAKaW5kZXggNjIzZWUwNi4uYTRkOTg0NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU291cmNlR1N0cmVhbWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFTb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDEzIE9yYW5nZQorICogQ29weXJpZ2h0IChDKSAyMDE0IFNlYmFzdGlhbiBEcsO2Z2UgPHNl
YmFzdGlhbkBjZW50cmljdWxhci5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCkBAIC0zNywyMSArMzgsMjMgQEAKICNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlR1N0
cmVhbWVyLmgiCiAjaW5jbHVkZSAiV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCIKICNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIE1lZGlhU291cmNlR1N0cmVhbWVyOjpvcGVu
KE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCogbWVkaWFTb3VyY2UsIFdlYktpdE1lZGlhU3JjKiBz
cmMpCiB7CiAgICAgQVNTRVJUKG1lZGlhU291cmNlKTsKLSAgICBtZWRpYVNvdXJjZS0+c2V0UHJp
dmF0ZUFuZE9wZW4oYWRvcHRSZWYoKm5ldyBNZWRpYVNvdXJjZUdTdHJlYW1lcihtZWRpYVNvdXJj
ZSwgc3JjKSkpOworICAgIFJlZlB0cjxNZWRpYVNvdXJjZUdTdHJlYW1lcj4gc291cmNlR1N0cmVh
bWVyID0gYWRvcHRSZWYobmV3IE1lZGlhU291cmNlR1N0cmVhbWVyKG1lZGlhU291cmNlLCBzcmMp
KTsKKyAgICBtZWRpYVNvdXJjZS0+c2V0UHJpdmF0ZUFuZE9wZW4oKnNvdXJjZUdTdHJlYW1lcik7
CiB9CiAKIE1lZGlhU291cmNlR1N0cmVhbWVyOjpNZWRpYVNvdXJjZUdTdHJlYW1lcihNZWRpYVNv
dXJjZVByaXZhdGVDbGllbnQqIG1lZGlhU291cmNlLCBXZWJLaXRNZWRpYVNyYyogc3JjKQotICAg
IDogbV9jbGllbnQoYWRvcHRSZWYobmV3IE1lZGlhU291cmNlQ2xpZW50R3N0cmVhbWVyKHNyYykp
KQorICAgIDogTWVkaWFTb3VyY2VQcml2YXRlKCkKICAgICAsIG1fbWVkaWFTb3VyY2UobWVkaWFT
b3VyY2UpCiAgICAgLCBtX3JlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKQogewot
ICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQgPSBNZWRpYVNvdXJjZUNsaWVudEdT
dHJlYW1lcjo6Y3JlYXRlKHNyYyk7CiB9CiAKIE1lZGlhU291cmNlR1N0cmVhbWVyOjp+TWVkaWFT
b3VyY2VHU3RyZWFtZXIoKQpAQCAtNjAsMjIgKzYzLDQ1IEBAIE1lZGlhU291cmNlR1N0cmVhbWVy
Ojp+TWVkaWFTb3VyY2VHU3RyZWFtZXIoKQogCiBNZWRpYVNvdXJjZUdTdHJlYW1lcjo6QWRkU3Rh
dHVzIE1lZGlhU291cmNlR1N0cmVhbWVyOjphZGRTb3VyY2VCdWZmZXIoY29uc3QgQ29udGVudFR5
cGUmIGNvbnRlbnRUeXBlLCBSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZT4mIHNvdXJjZUJ1ZmZl
clByaXZhdGUpCiB7Ci0gICAgc291cmNlQnVmZmVyUHJpdmF0ZSA9IGFkb3B0UmVmKG5ldyBTb3Vy
Y2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyKG1fY2xpZW50LmdldCgpLCBjb250ZW50VHlwZSkpOwot
ICAgIHJldHVybiBNZWRpYVNvdXJjZUdTdHJlYW1lcjo6T2s7CisgICAgbV9zb3VyY2VCdWZmZXJz
LmFwcGVuZChTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobV9jbGllbnQuZ2V0
KCksIGNvbnRlbnRUeXBlKSk7CisgICAgc291cmNlQnVmZmVyUHJpdmF0ZSA9IG1fc291cmNlQnVm
ZmVycy5sYXN0KCk7CisKKyAgICByZXR1cm4gbV9jbGllbnQtPmFkZFNvdXJjZUJ1ZmZlcihtX3Nv
dXJjZUJ1ZmZlcnMubGFzdCgpLCBjb250ZW50VHlwZSk7CiB9CiAKIHZvaWQgTWVkaWFTb3VyY2VH
U3RyZWFtZXI6OmR1cmF0aW9uQ2hhbmdlZCgpCiB7Ci0gICAgbV9jbGllbnQtPmRpZFJlY2VpdmVE
dXJhdGlvbihtX21lZGlhU291cmNlLT5kdXJhdGlvbigpLnRvRG91YmxlKCkpOworICAgIG1fY2xp
ZW50LT5kdXJhdGlvbkNoYW5nZWQobV9tZWRpYVNvdXJjZS0+ZHVyYXRpb24oKSk7CiB9CiAKLXZv
aWQgTWVkaWFTb3VyY2VHU3RyZWFtZXI6Om1hcmtFbmRPZlN0cmVhbShFbmRPZlN0cmVhbVN0YXR1
cykKK3ZvaWQgTWVkaWFTb3VyY2VHU3RyZWFtZXI6Om1hcmtFbmRPZlN0cmVhbShFbmRPZlN0cmVh
bVN0YXR1cyBzdGF0dXMpCiB7Ci0gICAgbV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmcoMCk7Cisg
ICAgbV9jbGllbnQtPm1hcmtFbmRPZlN0cmVhbShzdGF0dXMpOwogfQogCiB2b2lkIE1lZGlhU291
cmNlR1N0cmVhbWVyOjp1bm1hcmtFbmRPZlN0cmVhbSgpCiB7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKworTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnJl
YWR5U3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlYWR5U3RhdGU7Cit9CisKK3ZvaWQg
TWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3Rh
dGUgc3RhdGUpCit7CisgICAgbV9yZWFkeVN0YXRlID0gc3RhdGU7Cit9CisKK3ZvaWQgTWVkaWFT
b3VyY2VHU3RyZWFtZXI6OndhaXRGb3JTZWVrQ29tcGxldGVkKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIE1lZGlhU291cmNlR1N0cmVhbWVyOjpzZWVrQ29tcGxldGVkKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTb3VyY2VHU3RyZWFtZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNvdXJjZUdT
dHJlYW1lci5oCmluZGV4IGFhY2E0NWUuLjUwZDc4ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNvdXJjZUdTdHJlYW1lci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNvdXJj
ZUdTdHJlYW1lci5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEzIE9y
YW5nZQorICogQ29weXJpZ2h0IChDKSAyMDE0IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBj
ZW50cmljdWxhci5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0z
OCwyNSArMzksMzAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisvLyBGSVhNRTogU2hvdWxk
IHRoaXMgYmUgY2FsbGVkIE1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lcj8KIGNsYXNzIE1lZGlh
U291cmNlR1N0cmVhbWVyIGZpbmFsIDogcHVibGljIE1lZGlhU291cmNlUHJpdmF0ZSB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIHZvaWQgb3BlbihNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqLCBXZWJL
aXRNZWRpYVNyYyopOwotICAgIH5NZWRpYVNvdXJjZUdTdHJlYW1lcigpOworICAgIHZpcnR1YWwg
fk1lZGlhU291cmNlR1N0cmVhbWVyKCk7CisKKyAgICB2aXJ0dWFsIEFkZFN0YXR1cyBhZGRTb3Vy
Y2VCdWZmZXIoY29uc3QgQ29udGVudFR5cGUmLCBSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZT4m
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZHVyYXRpb25DaGFuZ2VkKCk7CisgICAgdmlydHVhbCB2b2lk
IG1hcmtFbmRPZlN0cmVhbShFbmRPZlN0cmVhbVN0YXR1cyk7CisgICAgdmlydHVhbCB2b2lkIHVu
bWFya0VuZE9mU3RyZWFtKCk7CisKKyAgICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRl
IHJlYWR5U3RhdGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRp
YVBsYXllcjo6UmVhZHlTdGF0ZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgd2FpdEZvclNlZWtDb21w
bGV0ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Vla0NvbXBsZXRlZCgpOwogCiBwcml2YXRlOgot
ICAgIC8vIE1lZGlhU291cmNlUHJpdmF0ZQotICAgIHZpcnR1YWwgQWRkU3RhdHVzIGFkZFNvdXJj
ZUJ1ZmZlcihjb25zdCBDb250ZW50VHlwZSYsIFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlPiYp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkdXJhdGlvbkNoYW5nZWQoKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgbWFya0VuZE9mU3RyZWFtKEVuZE9mU3RyZWFtU3RhdHVzKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgdW5tYXJrRW5kT2ZTdHJlYW0oKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX3JlYWR5U3RhdGU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVhZHlT
dGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKSBvdmVycmlkZSB7IG1fcmVh
ZHlTdGF0ZSA9IHJlYWR5U3RhdGU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgd2FpdEZvclNlZWtDb21w
bGV0ZWQoKSBvdmVycmlkZSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2Vla0NvbXBsZXRlZCgpIG92
ZXJyaWRlIHsgfQorICAgIE1lZGlhU291cmNlR1N0cmVhbWVyKE1lZGlhU291cmNlUHJpdmF0ZUNs
aWVudCosIFdlYktpdE1lZGlhU3JjKik7CisKKyAgICBWZWN0b3I8UmVmUHRyPFNvdXJjZUJ1ZmZl
clByaXZhdGVHU3RyZWFtZXI+PiBtX3NvdXJjZUJ1ZmZlcnM7CiAKLSAgICBSZWZQdHI8TWVkaWFT
b3VyY2VDbGllbnRHc3RyZWFtZXI+IG1fY2xpZW50OworICAgIFJlZlB0cjxNZWRpYVNvdXJjZUNs
aWVudEdTdHJlYW1lcj4gbV9jbGllbnQ7CiAgICAgTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50KiBt
X21lZGlhU291cmNlOwotICAgIE1lZGlhU291cmNlR1N0cmVhbWVyKE1lZGlhU291cmNlUHJpdmF0
ZUNsaWVudCosIFdlYktpdE1lZGlhU3JjKik7CiAgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUg
bV9yZWFkeVN0YXRlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1NvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1NvdXJjZUJ1ZmZlclByaXZh
dGVHU3RyZWFtZXIuY3BwCmluZGV4IDQ1YzVlOTEuLjNmY2JhNzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9Tb3VyY2VCdWZmZXJQcml2YXRl
R1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTEsNiArMSw3IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgT3JhbmdlCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Vi
YXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM1LDIzICszNiw0NiBAQAogI2lmIEVOQUJMRShNRURJ
QV9TT1VSQ0UpICYmIFVTRShHU1RSRUFNRVIpCiAKICNpbmNsdWRlICJDb250ZW50VHlwZS5oIgor
I2luY2x1ZGUgIk1lZGlhU2FtcGxlLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpTb3Vy
Y2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyKFBhc3NSZWZQdHI8TWVkaWFTb3VyY2VDbGllbnRHc3Ry
ZWFtZXI+IGNsaWVudCwgY29uc3QgQ29udGVudFR5cGUmIGNvbnRlbnRUeXBlKQotICAgIDogbV9y
ZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKK1Bhc3NSZWZQdHI8U291cmNlQnVm
ZmVyUHJpdmF0ZUdTdHJlYW1lcj4gU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRl
KFBhc3NSZWZQdHI8TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXI+IGNsaWVudCwgY29uc3QgQ29u
dGVudFR5cGUmIGNvbnRlbnRUeXBlKQogewotICAgIG1fY2xpZW50ID0gY2xpZW50OwotICAgIG1f
dHlwZSA9IGNvbnRlbnRUeXBlLnR5cGUoKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNvdXJj
ZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIoY2xpZW50LCBjb250ZW50VHlwZSkpOworfQorCisKK1Nv
dXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIo
UGFzc1JlZlB0cjxNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lcj4gY2xpZW50LCBjb25zdCBDb250
ZW50VHlwZSYgY29udGVudFR5cGUpCisgICAgOiBTb3VyY2VCdWZmZXJQcml2YXRlKCkKKyAgICAs
IG1fdHlwZShjb250ZW50VHlwZSkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fcmVh
ZHlTdGF0ZShNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpCit7Cit9CisKK1NvdXJjZUJ1ZmZlclBy
aXZhdGVHU3RyZWFtZXI6On5Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyKCkKK3sKK30KKwor
dm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRDbGllbnQoU291cmNlQnVmZmVy
UHJpdmF0ZUNsaWVudCogY2xpZW50KQoreworICAgIG1fc291cmNlQnVmZmVyUHJpdmF0ZUNsaWVu
dCA9IGNsaWVudDsKIH0KIAogdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjphcHBl
bmQoY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIEFT
U0VSVChtX2NsaWVudCk7Ci0gICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKHJlaW50ZXJwcmV0
X2Nhc3RfcHRyPGNvbnN0IGNoYXIqPihkYXRhKSwgbGVuZ3RoLCBtX3R5cGUpOworICAgIEFTU0VS
VChtX3NvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQpOwogCi0gICAgLy8gRklYTUU6IGNhbGwgU291
cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6c291cmNlQnVmZmVyUHJpdmF0ZUFwcGVuZENvbXBsZXRl
KCkuCisgICAgaWYgKCFtX2NsaWVudC0+YXBwZW5kKHRoaXMsIGRhdGEsIGxlbmd0aCkpIHsKKyAg
ICAgICAgaWYgKG1fc291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudCkKKyAgICAgICAgICAgIG1fc291
cmNlQnVmZmVyUHJpdmF0ZUNsaWVudC0+c291cmNlQnVmZmVyUHJpdmF0ZUFwcGVuZENvbXBsZXRl
KHRoaXMsIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OlJlYWRTdHJlYW1GYWlsZWQpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGlmIChtX3NvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQpCisgICAg
ICAgICAgICBtX3NvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQtPnNvdXJjZUJ1ZmZlclByaXZhdGVB
cHBlbmRDb21wbGV0ZSh0aGlzLCBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpBcHBlbmRTdWNj
ZWVkZWQpOworICAgIH0KIH0KIAogdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjph
Ym9ydCgpCkBAIC02MSw4ICs4NSw2MyBAQCB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFt
ZXI6OmFib3J0KCkKIAogdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpyZW1vdmVk
RnJvbU1lZGlhU291cmNlKCkKIHsKKyAgICBtX2NsaWVudC0+cmVtb3ZlZEZyb21NZWRpYVNvdXJj
ZSh0aGlzKTsKK30KKworTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgU291cmNlQnVmZmVyUHJpdmF0
ZUdTdHJlYW1lcjo6cmVhZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVhZHlTdGF0
ZTsKK30KKwordm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRSZWFkeVN0YXRl
KE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHN0YXRlKQoreworICAgIG1fcmVhZHlTdGF0ZSA9IHN0
YXRlOworfQorCisvLyBUT0RPOiBJbXBsZW1lbnQgdGhlc2UKK3ZvaWQgU291cmNlQnVmZmVyUHJp
dmF0ZUdTdHJlYW1lcjo6Zmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXMoVmVjdG9y
PFJlZlB0cjxNZWRpYVNhbXBsZT4+LCBBdG9taWNTdHJpbmcpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjplbnF1ZXVlU2Ft
cGxlKFBhc3NSZWZQdHI8TWVkaWFTYW1wbGU+LCBBdG9taWNTdHJpbmcpCit7CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KIAorYm9vbCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjppc1Jl
YWR5Rm9yTW9yZVNhbXBsZXMoQXRvbWljU3RyaW5nKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJl
YW1lcjo6c2V0QWN0aXZlKGJvb2wgYWN0aXZlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6c3RvcEFza2luZ0Zvck1vcmVT
YW1wbGVzKEF0b21pY1N0cmluZykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeUNsaWVudFdoZW5SZWFkeUZvck1v
cmVTYW1wbGVzKEF0b21pY1N0cmluZykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OmRpZFJlY2VpdmVJbml0aWFsaXphdGlv
blNlZ21lbnQoY29uc3QgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25T
ZWdtZW50JiBpbml0aWFsaXphdGlvblNlZ21lbnQpCit7CisgICAgaWYgKG1fc291cmNlQnVmZmVy
UHJpdmF0ZUNsaWVudCkKKyAgICAgICAgbV9zb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50LT5zb3Vy
Y2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudCh0aGlzLCBpbml0
aWFsaXphdGlvblNlZ21lbnQpOworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFt
ZXI6OmRpZFJlY2VpdmVTYW1wbGUoUGFzc1JlZlB0cjxNZWRpYVNhbXBsZT4gc2FtcGxlKQorewor
ICAgIGlmIChtX3NvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQpCisgICAgICAgIG1fc291cmNlQnVm
ZmVyUHJpdmF0ZUNsaWVudC0+c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVTYW1wbGUodGhp
cywgc2FtcGxlKTsKK30KKwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1NvdXJjZUJ1ZmZl
clByaXZhdGVHU3RyZWFtZXIuaAppbmRleCA1NzRlMjFhLi44ZDQ0YzJkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvU291cmNlQnVmZmVyUHJp
dmF0ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmgKQEAgLTEsNiArMSw3IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgT3JhbmdlCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Vi
YXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM2LDI2ICszNyw0NSBAQAogCiAjaW5jbHVkZSAiU291
cmNlQnVmZmVyUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdE1lZGlhU291cmNlR1N0cmVhbWVy
LmgiCisjaW5jbHVkZSAiQ29udGVudFR5cGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitj
bGFzcyBNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lcjsKKwogY2xhc3MgU291cmNlQnVmZmVyUHJp
dmF0ZUdTdHJlYW1lciBmaW5hbCA6IHB1YmxpYyBTb3VyY2VCdWZmZXJQcml2YXRlIHsKIHB1Ymxp
YzoKLSAgICBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyKFBhc3NSZWZQdHI8TWVkaWFTb3Vy
Y2VDbGllbnRHc3RyZWFtZXI+LCBjb25zdCBDb250ZW50VHlwZSYpOwotICAgIH5Tb3VyY2VCdWZm
ZXJQcml2YXRlR1N0cmVhbWVyKCkgeyB9Ci0KLSAgICB2b2lkIHNldENsaWVudChTb3VyY2VCdWZm
ZXJQcml2YXRlQ2xpZW50KikgeyB9Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgdW5zaWduZWQgY2hh
ciosIHVuc2lnbmVkKTsKLSAgICB2b2lkIGFib3J0KCk7Ci0gICAgdm9pZCByZW1vdmVkRnJvbU1l
ZGlhU291cmNlKCk7Ci0gICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVhZHlTdGF0ZTsgfQotICAgIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRp
YVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKSB7IG1fcmVhZHlTdGF0ZSA9IHJlYWR5U3Rh
dGU7IH0KLSAgICB2b2lkIGV2aWN0Q29kZWRGcmFtZXMoKSB7IH0KLSAgICBib29sIGlzRnVsbCgp
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U291cmNlQnVmZmVyUHJp
dmF0ZUdTdHJlYW1lcj4gY3JlYXRlKFBhc3NSZWZQdHI8TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFt
ZXI+LCBjb25zdCBDb250ZW50VHlwZSYpOworCisgICAgdmlydHVhbCB+U291cmNlQnVmZmVyUHJp
dmF0ZUdTdHJlYW1lcigpOworCisgICAgdmlydHVhbCB2b2lkIHNldENsaWVudChTb3VyY2VCdWZm
ZXJQcml2YXRlQ2xpZW50Kik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kKGNvbnN0IHVuc2ln
bmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdmlydHVhbCB2b2lkIGFib3J0
KCk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tTWVkaWFTb3VyY2UoKTsKKworICAgIHZp
cnR1YWwgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlKTsKKworICAg
IHZpcnR1YWwgdm9pZCBmbHVzaEFuZEVucXVldWVOb25EaXNwbGF5aW5nU2FtcGxlcyhWZWN0b3I8
UmVmUHRyPE1lZGlhU2FtcGxlPj4sIEF0b21pY1N0cmluZyk7CisgICAgdmlydHVhbCB2b2lkIGVu
cXVldWVTYW1wbGUoUGFzc1JlZlB0cjxNZWRpYVNhbXBsZT4sIEF0b21pY1N0cmluZyk7CisgICAg
dmlydHVhbCBib29sIGlzUmVhZHlGb3JNb3JlU2FtcGxlcyhBdG9taWNTdHJpbmcpOworICAgIHZp
cnR1YWwgdm9pZCBzZXRBY3RpdmUoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHN0b3BBc2tpbmdG
b3JNb3JlU2FtcGxlcyhBdG9taWNTdHJpbmcpOworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlDbGll
bnRXaGVuUmVhZHlGb3JNb3JlU2FtcGxlcyhBdG9taWNTdHJpbmcpOwogCiBwcml2YXRlOgotICAg
IFN0cmluZyBtX3R5cGU7Ci0gICAgUmVmUHRyPE1lZGlhU291cmNlQ2xpZW50R3N0cmVhbWVyPiBt
X2NsaWVudDsKKyAgICBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyKFBhc3NSZWZQdHI8TWVk
aWFTb3VyY2VDbGllbnRHU3RyZWFtZXI+LCBjb25zdCBDb250ZW50VHlwZSYpOworCisgICAgZnJp
ZW5kIGNsYXNzIE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyOworCisgICAgdm9pZCBkaWRSZWNl
aXZlSW5pdGlhbGl6YXRpb25TZWdtZW50KGNvbnN0IFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6
OkluaXRpYWxpemF0aW9uU2VnbWVudCYpOworICAgIHZvaWQgZGlkUmVjZWl2ZVNhbXBsZShQYXNz
UmVmUHRyPE1lZGlhU2FtcGxlPik7CisKKyAgICBDb250ZW50VHlwZSBtX3R5cGU7CisgICAgUmVm
UHRyPE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyPiBtX2NsaWVudDsKKyAgICBTb3VyY2VCdWZm
ZXJQcml2YXRlQ2xpZW50KiBtX3NvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ7CiAgICAgTWVkaWFQ
bGF5ZXI6OlJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvVHJhY2tQcml2YXRlR1N0
cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9W
aWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggZTM2NTJjMy4uY2ZjZGYwMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVv
VHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0zNyw2
ICszNyw4IEBAIFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpWaWRlb1RyYWNrUHJpdmF0ZUdT
dHJlYW1lcihHUmVmUHRyPEdzdEVsZW1lbnQ+IHBsYXliCiAgICAgOiBUcmFja1ByaXZhdGVCYXNl
R1N0cmVhbWVyKHRoaXMsIGluZGV4LCBwYWQpCiAgICAgLCBtX3BsYXliaW4ocGxheWJpbikKIHsK
KyAgICAvLyBGSVhNRTogR2V0IGEgcmVhbCBJRCBoZXJlCisgICAgbV9pZCA9ICJWIiArIFN0cmlu
Zzo6bnVtYmVyKGluZGV4KTsKICAgICBub3RpZnlUcmFja09mQWN0aXZlQ2hhbmdlZCgpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IGIyMTYy
MjEuLmUwNTlkZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1l
ci5oCkBAIC00OCwxMSArNDgsMTMgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBpbnQgdHJhY2tJ
bmRleCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faW5kZXg7IH0KIAorICAgIHZpcnR1YWwg
QXRvbWljU3RyaW5nIGlkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9pZDsgfQogICAgIHZp
cnR1YWwgQXRvbWljU3RyaW5nIGxhYmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9sYWJl
bDsgfQogICAgIHZpcnR1YWwgQXRvbWljU3RyaW5nIGxhbmd1YWdlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbV9sYW5ndWFnZTsgfQogCiBwcml2YXRlOgogICAgIFZpZGVvVHJhY2tQcml2YXRl
R1N0cmVhbWVyKEdSZWZQdHI8R3N0RWxlbWVudD4gcGxheWJpbiwgZ2ludCBpbmRleCwgR1JlZlB0
cjxHc3RQYWQ+KTsKKyAgICBBdG9taWNTdHJpbmcgbV9pZDsKIAogICAgIEdSZWZQdHI8R3N0RWxl
bWVudD4gbV9wbGF5YmluOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0TWVkaWFTb3VyY2VH
U3RyZWFtZXIuY3BwCmluZGV4IGI5YTU0MjguLmM2N2M3ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRNZWRpYVNvdXJjZUdTdHJl
YW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmNwcApAQCAtMiw2ICsyLDcgQEAKICAqICBDb3B5
cmlnaHQgKEMpIDIwMDksIDIwMTAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBj
b2xsYWJvcmEuY28udWs+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDEzIENvbGxhYm9yYSBMdGQuCiAg
KiAgQ29weXJpZ2h0IChDKSAyMDEzIE9yYW5nZQorICogIENvcHlyaWdodCAoQykgMjAxNCBTZWJh
c3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwpAQCAtMTksNjQgKzIwLDIwMCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJXZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5oIgogCiAjaWYgRU5BQkxFKFZJREVP
KSAmJiBFTkFCTEUoTUVESUFfU09VUkNFKSAmJiBVU0UoR1NUUkVBTUVSKQogCi0jaW5jbHVkZSAi
R1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIldlYktpdE1lZGlhU291cmNlR1N0cmVhbWVy
LmgiCisjaW5jbHVkZSAiTWVkaWFTb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJTb3VyY2VC
dWZmZXJQcml2YXRlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiTWVkaWFEZXNjcmlwdGlvbi5oIgor
I2luY2x1ZGUgIlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiQXVkaW9U
cmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKKwogI2luY2x1ZGUgIkdTdHJlYW1lclV0aWxpdGllcy5o
IgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgot
I2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc3JjLmg+CisjaW5jbHVkZSAiTWVkaWFTYW1wbGUuaCIK
KwogI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvcGJ1dGlscy9taXNzaW5nLXBs
dWdpbnMuaD4KKyNpbmNsdWRlIDxnc3QvYXBwL2FwcC5oPgorI2luY2x1ZGUgPGdzdC9wYnV0aWxz
L3BidXRpbHMuaD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KICNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HVGhyZWFkU2FmZU1haW5Mb29wU291cmNlLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR1VuaXF1ZVB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAotdHlwZWRl
ZiBzdHJ1Y3QgX1NvdXJjZSB7Ci0gICAgR3N0RWxlbWVudCogYXBwc3JjOwotICAgIGd1aW50IHNv
dXJjZWlkOyAgICAgICAgLyogVG8gY29udHJvbCB0aGUgR1NvdXJjZSAqLworbmFtZXNwYWNlIFdl
YkNvcmUKK3sKK2NsYXNzIEdTdHJlYW1lck1lZGlhRGVzY3JpcHRpb24gOiBwdWJsaWMgTWVkaWFE
ZXNjcmlwdGlvbiB7Citwcml2YXRlOgorICAgIEdzdENhcHMqIG1fY2FwczsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxHU3RyZWFtZXJNZWRpYURlc2NyaXB0aW9uPiBjcmVhdGUoR3N0
Q2FwcyogY2FwcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR1N0cmVhbWVy
TWVkaWFEZXNjcmlwdGlvbihjYXBzKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+R1N0cmVhbWVy
TWVkaWFEZXNjcmlwdGlvbigpCisgICAgeworICAgICAgICBnc3RfY2Fwc191bnJlZihtX2NhcHMp
OworICAgIH0KKworICAgIEF0b21pY1N0cmluZyBjb2RlYygpIGNvbnN0IG92ZXJyaWRlCisgICAg
eworICAgICAgICBnY2hhciogZGVzY3JpcHRpb24gPSBnc3RfcGJfdXRpbHNfZ2V0X2NvZGVjX2Rl
c2NyaXB0aW9uKG1fY2Fwcyk7CisgICAgICAgIEF0b21pY1N0cmluZyBjb2RlY05hbWUoZGVzY3Jp
cHRpb24pOworICAgICAgICBnX2ZyZWUoZGVzY3JpcHRpb24pOworCisgICAgICAgIHJldHVybiBj
b2RlY05hbWU7CisgICAgfQorCisgICAgYm9vbCBpc1ZpZGVvKCkgY29uc3Qgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIEdzdFN0cnVjdHVyZSogcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUobV9j
YXBzLCAwKTsKKyAgICAgICAgY29uc3QgZ2NoYXIqIG5hbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9u
YW1lKHMpOworCisgICAgICAgIHJldHVybiBnX3N0cl9oYXNfcHJlZml4KG5hbWUsICJ2aWRlby8i
KTsKKyAgICB9CisKKyAgICBib29sIGlzQXVkaW8oKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgR3N0U3RydWN0dXJlKiBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZShtX2NhcHMsIDAp
OworICAgICAgICBjb25zdCBnY2hhciogbmFtZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUocyk7
CisKKyAgICAgICAgcmV0dXJuIGdfc3RyX2hhc19wcmVmaXgobmFtZSwgImF1ZGlvLyIpOworICAg
IH0KKworICAgIGJvb2wgaXNUZXh0KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIC8v
IFRPRE8KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBHU3Ry
ZWFtZXJNZWRpYURlc2NyaXB0aW9uKEdzdENhcHMqIGNhcHMpCisgICAgICAgIDogTWVkaWFEZXNj
cmlwdGlvbigpCisgICAgICAgICwgbV9jYXBzKGdzdF9jYXBzX3JlZihjYXBzKSkKKyAgICB7Cisg
ICAgfQorfTsKKworY2xhc3MgR1N0cmVhbWVyTWVkaWFTYW1wbGUgOiBwdWJsaWMgTWVkaWFTYW1w
bGUKK3sKK3ByaXZhdGU6CisgICAgTWVkaWFUaW1lIG1fcHRzLCBtX2R0cywgbV9kdXJhdGlvbjsK
KyAgICBBdG9taWNTdHJpbmcgbV90cmFja0lEOworICAgIHNpemVfdCBtX3NpemU7CisgICAgRmxv
YXRTaXplIG1fcHJlc2VudGF0aW9uU2l6ZTsKKyAgICBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3Mg
bV9mbGFnczsKKyAgICBHU3RyZWFtZXJNZWRpYVNhbXBsZShHc3RCdWZmZXIqIGJ1ZmZlciwgY29u
c3QgRmxvYXRTaXplJiBwcmVzZW50YXRpb25TaXplLCBjb25zdCBBdG9taWNTdHJpbmcmIHRyYWNr
SUQpCisgICAgICAgIDogTWVkaWFTYW1wbGUoKQorICAgICAgICAsIG1fcHRzKE1lZGlhVGltZTo6
emVyb1RpbWUoKSkKKyAgICAgICAgLCBtX2R0cyhNZWRpYVRpbWU6Onplcm9UaW1lKCkpCisgICAg
ICAgICwgbV9kdXJhdGlvbihNZWRpYVRpbWU6Onplcm9UaW1lKCkpCisgICAgICAgICwgbV90cmFj
a0lEKHRyYWNrSUQpCisgICAgICAgICwgbV9wcmVzZW50YXRpb25TaXplKHByZXNlbnRhdGlvblNp
emUpCisgICAgICAgICwgbV9mbGFncyhNZWRpYVNhbXBsZTo6SXNTeW5jKQorICAgIHsKKyAgICAg
ICAgaWYgKEdTVF9CVUZGRVJfUFRTX0lTX1ZBTElEKGJ1ZmZlcikpCisgICAgICAgICAgICBtX3B0
cyA9IE1lZGlhVGltZShHU1RfQlVGRkVSX1BUUyhidWZmZXIpLCBHU1RfU0VDT05EKTsKKyAgICAg
ICAgaWYgKEdTVF9CVUZGRVJfRFRTX0lTX1ZBTElEKGJ1ZmZlcikpCisgICAgICAgICAgICBtX2R0
cyA9IE1lZGlhVGltZShHU1RfQlVGRkVSX0RUUyhidWZmZXIpLCBHU1RfU0VDT05EKTsKKyAgICAg
ICAgaWYgKEdTVF9CVUZGRVJfRFVSQVRJT05fSVNfVkFMSUQoYnVmZmVyKSkKKyAgICAgICAgICAg
IG1fZHVyYXRpb24gPSBNZWRpYVRpbWUoR1NUX0JVRkZFUl9EVVJBVElPTihidWZmZXIpLCBHU1Rf
U0VDT05EKTsKKyAgICAgICAgbV9zaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZShidWZmZXIpOwor
CisgICAgICAgIGlmIChHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUKGJ1ZmZlciwgR1NUX0JVRkZFUl9G
TEFHX0RFTFRBX1VOSVQpKQorICAgICAgICAgICAgbV9mbGFncyA9IE1lZGlhU2FtcGxlOjpOb25l
OworCisgICAgICAgIGlmIChHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUKGJ1ZmZlciwgR1NUX0JVRkZF
Ul9GTEFHX0RFQ09ERV9PTkxZKSkKKyAgICAgICAgICAgIG1fZmxhZ3MgPSAoTWVkaWFTYW1wbGU6
OlNhbXBsZUZsYWdzKSAobV9mbGFncyB8IE1lZGlhU2FtcGxlOjpOb25EaXNwbGF5aW5nKTsKKyAg
ICB9CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHU3RyZWFtZXJNZWRpYVNhbXBs
ZT4gY3JlYXRlKEdzdEJ1ZmZlciogYnVmZmVyLCBjb25zdCBGbG9hdFNpemUmIHByZXNlbnRhdGlv
blNpemUsIGNvbnN0IEF0b21pY1N0cmluZyYgdHJhY2tJRCkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgR1N0cmVhbWVyTWVkaWFTYW1wbGUoYnVmZmVyLCBwcmVzZW50YXRpb25T
aXplLCB0cmFja0lEKSk7CisgICAgfQorCisgICAgTWVkaWFUaW1lIHByZXNlbnRhdGlvblRpbWUo
KSBjb25zdCB7IHJldHVybiBtX3B0czsgfQorICAgIE1lZGlhVGltZSBkZWNvZGVUaW1lKCkgY29u
c3QgeyByZXR1cm4gbV9kdHM7IH0KKyAgICBNZWRpYVRpbWUgZHVyYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2R1cmF0aW9uOyB9CisgICAgQXRvbWljU3RyaW5nIHRyYWNrSUQoKSBjb25zdCB7IHJl
dHVybiBtX3RyYWNrSUQ7IH0KKyAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdCB7IHJldHVy
biBtX3NpemU7IH0KKyAgICBGbG9hdFNpemUgcHJlc2VudGF0aW9uU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJlc2VudGF0aW9uU2l6ZTsgfQorICAgIFNhbXBsZUZsYWdzIGZsYWdzKCkgY29uc3Qg
eyByZXR1cm4gbV9mbGFnczsgfQorICAgIFBsYXRmb3JtU2FtcGxlIHBsYXRmb3JtU2FtcGxlKCkg
eyByZXR1cm4gUGxhdGZvcm1TYW1wbGUoKTsgfQorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0IHt9Cit9OworfTsKKwordHlwZWRlZiBzdHJ1Y3QgX1N0cmVhbSBTdHJlYW07Cit0eXBl
ZGVmIHN0cnVjdCBfU291cmNlIFNvdXJjZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIEdzdEJ1
ZmZlciogYnVmZmVyOworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBwcmVzZW50YXRpb25TaXplOwor
fSBQZW5kaW5nUmVjZWl2ZVNhbXBsZTsKKworc3RydWN0IF9TdHJlYW0KK3sKKyAgICBTb3VyY2Uq
IHBhcmVudDsKKworICAgIC8vIE1pZ2h0IGJlIDAsIGUuZy4gZm9yIFZQOC9WUDkKKyAgICBHc3RF
bGVtZW50ICpwYXJzZXI7CiAgICAgR3N0UGFkKiBzcmNwYWQ7Ci0gICAgZ2Jvb2xlYW4gcGFkQWRk
ZWQ7CisgICAgR3N0Q2FwcyogY2FwczsKKyAgICBSZWZQdHI8V2ViQ29yZTo6QXVkaW9UcmFja1By
aXZhdGVHU3RyZWFtZXI+ICphdWRpb1RyYWNrOworICAgIFJlZlB0cjxXZWJDb3JlOjpWaWRlb1Ry
YWNrUHJpdmF0ZUdTdHJlYW1lcj4gKnZpZGVvVHJhY2s7CisgICAgV2ViQ29yZTo6RmxvYXRTaXpl
IHByZXNlbnRhdGlvblNpemU7CiAKLSAgICBndWludDY0IG9mZnNldDsKLSAgICBndWludDY0IHNp
emU7Ci0gICAgZ2Jvb2xlYW4gcGF1c2VkOworICAgIEdMaXN0KiBwZW5kaW5nUmVjZWl2ZVNhbXBs
ZTsKK307CiAKLSAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIHN0YXJ0OwotICAgIEdUaHJl
YWRTYWZlTWFpbkxvb3BTb3VyY2Ugc3RvcDsKLSAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNl
IG5lZWREYXRhOwotICAgIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UgZW5vdWdoRGF0YTsKLSAg
ICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIHNlZWs7CitzdHJ1Y3QgX1NvdXJjZQoreworICAg
IFdlYktpdE1lZGlhU3JjKiBwYXJlbnQ7CiAKLSAgICBndWludDY0IHJlcXVlc3RlZE9mZnNldDsK
LX0gU291cmNlOworICAgIEdzdEVsZW1lbnQqIHNyYzsKKyAgICBHc3RFbGVtZW50KiB0eXBlZmlu
ZDsKKyAgICAvLyBNYXkgYmUgMCBpZiBlbGVtZW50YXJ5IHN0cmVhbQorICAgIEdzdEVsZW1lbnQq
IGRlbXV4ZXI7CisgICAgR3N0RWxlbWVudCogbXVsdGlxdWV1ZTsKKyAgICBHTGlzdCogc3RyZWFt
czsKIAorICAgIC8vIFdlIGV4cG9zZSBldmVyeXRoaW5nIHdoZW4KKyAgICAvLyBhbGwgc291cmNl
cyBhcmUgbm9Nb3JlUGFkcworICAgIGJvb2wgbm9Nb3JlUGFkczsKIAotI2RlZmluZSBXRUJLSVRf
TUVESUFfU1JDX0dFVF9QUklWQVRFKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgo
b2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfU1JDLCBXZWJLaXRNZWRpYVNyY1ByaXZhdGUpKQorICAg
IC8vIEp1c3QgZm9yIGlkZW50aWZpY2F0aW9uCisgICAgV2ViQ29yZTo6U291cmNlQnVmZmVyUHJp
dmF0ZUdTdHJlYW1lciogc291cmNlQnVmZmVyOworfTsKIAotc3RydWN0IF9XZWJLaXRNZWRpYVNy
Y1ByaXZhdGUgewotICAgIGdjaGFyKiB1cmk7Ci0gICAgU291cmNlIHNvdXJjZVZpZGVvOwotICAg
IFNvdXJjZSBzb3VyY2VBdWRpbzsKLSAgICBXZWJDb3JlOjpNZWRpYVBsYXllciogcGxheWVyOwot
ICAgIEdzdEVsZW1lbnQqIHBsYXliaW47Ci0gICAgZ2ludDY0IGR1cmF0aW9uOwotICAgIGdib29s
ZWFuIHNlZWthYmxlOwotICAgIGdib29sZWFuIG5vTW9yZVBhZDsKLSAgICAvLyBUUlVFIGlmIGFw
cHNyYydzIHZlcnNpb24gaXMgPj0gMC4xMC4yNywgc2VlCi0gICAgLy8gaHR0cHM6Ly9idWd6aWxs
YS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYwOTQyMwotICAgIGdib29sZWFuIGhhdmVBcHBT
cmMyNzsKLSAgICBndWludCBuYlNvdXJjZTsKK3N0cnVjdCBfV2ViS2l0TWVkaWFTcmNQcml2YXRl
Cit7CisgICAgR0xpc3QqIHNvdXJjZXM7CisgICAgZ2NoYXIqIGxvY2F0aW9uOworICAgIEdzdENs
b2NrVGltZSBkdXJhdGlvbjsKKyAgICBib29sIGFzeW5jU3RhcnQ7CisgICAgYm9vbCBub01vcmVQ
YWRzOworCisgICAgaW50IG51bWJlck9mUGFkczsKKworICAgIFdlYkNvcmU6Ok1lZGlhU291cmNl
Q2xpZW50R1N0cmVhbWVyKiBtZWRpYVNvdXJjZUNsaWVudDsKIH07CiAKLWVudW0gewotICAgIFBy
b3BMb2NhdGlvbiA9IDEsCi0gICAgUHJvTGFzdAorZW51bQoreworICAgIFBST1BfMCwKKyAgICBQ
Uk9QX0xPQ0FUSU9OLAorICAgIFBST1BfTEFTVAogfTsKIAotc3RhdGljIEdzdFN0YXRpY1BhZFRl
bXBsYXRlIHNyY1RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUoInNyY18ldSIsIEdT
VF9QQURfU1JDLCBHU1RfUEFEX1NPTUVUSU1FUywgR1NUX1NUQVRJQ19DQVBTX0FOWSk7CitzdGF0
aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1Q
TEFURSgic3JjXyV1IiwgR1NUX1BBRF9TUkMsCisgICAgR1NUX1BBRF9TT01FVElNRVMsIEdTVF9T
VEFUSUNfQ0FQU19BTlkpOworCisjZGVmaW5lIFdFQktJVF9NRURJQV9TUkNfR0VUX1BSSVZBVEUo
b2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9NRURJ
QV9TUkMsIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSkpCiAKIEdTVF9ERUJVR19DQVRFR09SWV9TVEFU
SUMod2Via2l0X21lZGlhX3NyY19kZWJ1Zyk7CiAjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJr
aXRfbWVkaWFfc3JjX2RlYnVnCkBAIC04NywyNSArMjI0LDggQEAgc3RhdGljIHZvaWQgd2ViS2l0
TWVkaWFTcmNTZXRQcm9wZXJ0eShHT2JqZWN0KiwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1Zh
bHVlKiwKIHN0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjR2V0UHJvcGVydHkoR09iamVjdCosIGd1
aW50IHByb3BlcnR5SWQsIEdWYWx1ZSosIEdQYXJhbVNwZWMqKTsKIHN0YXRpYyBHc3RTdGF0ZUNo
YW5nZVJldHVybiB3ZWJLaXRNZWRpYVNyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqLCBHc3RTdGF0
ZUNoYW5nZSk7CiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0TWVkaWFTcmNRdWVyeVdpdGhQYXJlbnQo
R3N0UGFkKiwgR3N0T2JqZWN0KiwgR3N0UXVlcnkqKTsKK3N0YXRpYyBnYm9vbGVhbiB3ZWJLaXRN
ZWRpYVNyY0V2ZW50V2l0aFBhcmVudChHc3RQYWQqLCBHc3RPYmplY3QqLCBHc3RFdmVudCopOwog
Ci1zdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVZpZGVvU3JjTmVlZERhdGFDYihHc3RBcHBTcmMqLCBn
dWludCwgZ3BvaW50ZXIpOwotc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFWaWRlb1NyY0Vub3VnaERh
dGFDYihHc3RBcHBTcmMqLCBncG9pbnRlcik7Ci1zdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0TWVkaWFW
aWRlb1NyY1NlZWtEYXRhQ2IoR3N0QXBwU3JjKiwgZ3VpbnQ2NCwgZ3BvaW50ZXIpOwotc3RhdGlj
IHZvaWQgd2ViS2l0TWVkaWFBdWRpb1NyY05lZWREYXRhQ2IoR3N0QXBwU3JjKiwgZ3VpbnQsIGdw
b2ludGVyKTsKLXN0YXRpYyB2b2lkIHdlYktpdE1lZGlhQXVkaW9TcmNFbm91Z2hEYXRhQ2IoR3N0
QXBwU3JjKiwgZ3BvaW50ZXIpOwotc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQXVkaW9TcmNT
ZWVrRGF0YUNiKEdzdEFwcFNyYyosIGd1aW50NjQsIGdwb2ludGVyKTsKLXN0YXRpYyBHc3RBcHBT
cmNDYWxsYmFja3MgYXBwc3JjQ2FsbGJhY2tzVmlkZW8gPSB7Ci0gICAgd2ViS2l0TWVkaWFWaWRl
b1NyY05lZWREYXRhQ2IsCi0gICAgd2ViS2l0TWVkaWFWaWRlb1NyY0Vub3VnaERhdGFDYiwKLSAg
ICB3ZWJLaXRNZWRpYVZpZGVvU3JjU2Vla0RhdGFDYiwKLSAgICB7IDAgfQotfTsKLXN0YXRpYyBH
c3RBcHBTcmNDYWxsYmFja3MgYXBwc3JjQ2FsbGJhY2tzQXVkaW8gPSB7Ci0gICAgd2ViS2l0TWVk
aWFBdWRpb1NyY05lZWREYXRhQ2IsCi0gICAgd2ViS2l0TWVkaWFBdWRpb1NyY0Vub3VnaERhdGFD
YiwKLSAgICB3ZWJLaXRNZWRpYUF1ZGlvU3JjU2Vla0RhdGFDYiwKLSAgICB7IDAgfQotfTsKICNk
ZWZpbmUgd2Via2l0X21lZGlhX3NyY19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCiAvLyBXZSBz
cGxpdCB0aGlzIG91dCBpbnRvIGFub3RoZXIgbWFjcm8gdG8gYXZvaWQgYSBjaGVjay13ZWJraXQt
c3R5bGUgZXJyb3IuCiAjZGVmaW5lIFdFQktJVF9NRURJQV9TUkNfQ0FURUdPUllfSU5JVCBHU1Rf
REVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRfbWVkaWFfc3JjX2RlYnVnLCAid2Via2l0bWVkaWFz
cmMiLCAwLCAid2Vic3JjIGVsZW1lbnQiKTsKQEAgLTEyNCwxMiArMjQ0LDEyIEBAIHN0YXRpYyB2
b2lkIHdlYmtpdF9tZWRpYV9zcmNfY2xhc3NfaW5pdChXZWJLaXRNZWRpYVNyY0NsYXNzKiBrbGFz
cykKIAogICAgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUoZWtsYXNzLCBnc3Rf
c3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQoJnNyY1RlbXBsYXRlKSk7CiAKLSAgICBnc3RfZWxlbWVu
dF9jbGFzc19zZXRfbWV0YWRhdGEoZWtsYXNzLCAiV2ViS2l0IE1lZGlhIHNvdXJjZSBlbGVtZW50
IiwgIlNvdXJjZSIsICJIYW5kbGVzIEJsb2IgdXJpcyIsICJTdGVwaGFuZSBKYWRhdWQgPHNqYWRh
dWRAc2lpLmZyPiIpOworICAgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEo
ZWtsYXNzLCAiV2ViS2l0IE1lZGlhIHNvdXJjZSBlbGVtZW50IiwgIlNvdXJjZSIsICJIYW5kbGVz
IEJsb2IgdXJpcyIsICJTdGVwaGFuZSBKYWRhdWQgPHNqYWRhdWRAc2lpLmZyPiwgU2ViYXN0aWFu
IERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4iKTsKIAogICAgIC8qIEFsbG93cyBz
ZXR0aW5nIHRoZSB1cmkgdXNpbmcgdGhlICdsb2NhdGlvbicgcHJvcGVydHksIHdoaWNoIGlzIHVz
ZWQKICAgICAgKiBmb3IgZXhhbXBsZSBieSBnc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpKCkgKi8K
ICAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9rbGFzcywKLSAgICAgICAgUHJv
cExvY2F0aW9uLAorICAgICAgICBQUk9QX0xPQ0FUSU9OLAogICAgICAgICBnX3BhcmFtX3NwZWNf
c3RyaW5nKCJsb2NhdGlvbiIsICJsb2NhdGlvbiIsICJMb2NhdGlvbiB0byByZWFkIGZyb20iLCAw
LAogICAgICAgICAoR1BhcmFtRmxhZ3MpIChHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RB
VElDX1NUUklOR1MpKSk7CiAKQEAgLTEzOCw1MiArMjU4LDkgQEAgc3RhdGljIHZvaWQgd2Via2l0
X21lZGlhX3NyY19jbGFzc19pbml0KFdlYktpdE1lZGlhU3JjQ2xhc3MqIGtsYXNzKQogICAgIGdf
dHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdE1lZGlhU3JjUHJpdmF0
ZSkpOwogfQogCi1zdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY0FkZFNyYyhXZWJLaXRNZWRpYVNy
Yyogc3JjLCBHc3RFbGVtZW50KiBlbGVtZW50KQotewotICAgIEdzdFBhZCogZ2hvc3RQYWQ7Ci0g
ICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwotCi0gICAgaWYgKCFn
c3RfYmluX2FkZChHU1RfQklOKHNyYyksIGVsZW1lbnQpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19P
QkpFQ1Qoc3JjLCAiU3JjIGVsZW1lbnQgbm90IGFkZGVkIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgR1JlZlB0cjxHc3RQYWQ+IHRhcmdldHNyYyA9IGFkb3B0R1JlZihnc3RfZWxlbWVu
dF9nZXRfc3RhdGljX3BhZChlbGVtZW50LCAic3JjIikpOwotICAgIGlmICghdGFyZ2V0c3JjKSB7
Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUGFkIG5vdCBmb3VuZCIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVu
dChlbGVtZW50KTsKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBuYW1lKGdfc3RyZHVwX3ByaW50Zigi
c3JjXyV1IiwgcHJpdi0+bmJTb3VyY2UpKTsKLSAgICBnaG9zdFBhZCA9IFdlYkNvcmU6OndlYmtp
dEdzdEdob3N0UGFkRnJvbVN0YXRpY1RlbXBsYXRlKCZzcmNUZW1wbGF0ZSwgbmFtZS5nZXQoKSwg
dGFyZ2V0c3JjLmdldCgpKTsKLSAgICBnc3RfcGFkX3NldF9hY3RpdmUoZ2hvc3RQYWQsIFRSVUUp
OwotCi0gICAgcHJpdi0+bmJTb3VyY2UrKzsKLQotICAgIGlmIChwcml2LT5zb3VyY2VWaWRlby5h
cHBzcmMgPT0gZWxlbWVudCkKLSAgICAgICAgcHJpdi0+c291cmNlVmlkZW8uc3JjcGFkID0gZ2hv
c3RQYWQ7Ci0gICAgZWxzZSBpZiAocHJpdi0+c291cmNlQXVkaW8uYXBwc3JjID09IGVsZW1lbnQp
Ci0gICAgICAgIHByaXYtPnNvdXJjZUF1ZGlvLnNyY3BhZCA9IGdob3N0UGFkOwotCi0gICAgR1NU
X09CSkVDVF9GTEFHX1NFVChnaG9zdFBhZCwgR1NUX1BBRF9GTEFHX05FRURfUEFSRU5UKTsKLSAg
ICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbihnaG9zdFBhZCwgd2ViS2l0TWVkaWFTcmNRdWVy
eVdpdGhQYXJlbnQpOwotfQotCiBzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfc3JjX2luaXQoV2Vi
S2l0TWVkaWFTcmMqIHNyYykKIHsKLSAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBX
RUJLSVRfTUVESUFfU1JDX0dFVF9QUklWQVRFKHNyYyk7Ci0gICAgc3JjLT5wcml2ID0gcHJpdjsK
LSAgICBuZXcgKHByaXYpIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSgpOwotCi0gICAgcHJpdi0+c291
cmNlVmlkZW8uYXBwc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhcHBzcmMiLCAidmlk
ZW9hcHBzcmMiKTsKLSAgICBnc3RfYXBwX3NyY19zZXRfY2FsbGJhY2tzKEdTVF9BUFBfU1JDKHBy
aXYtPnNvdXJjZVZpZGVvLmFwcHNyYyksICZhcHBzcmNDYWxsYmFja3NWaWRlbywgc3JjLCAwKTsK
LSAgICBnc3RfYXBwX3NyY19zZXRfc3RyZWFtX3R5cGUoR1NUX0FQUF9TUkMocHJpdi0+c291cmNl
VmlkZW8uYXBwc3JjKSwgR1NUX0FQUF9TVFJFQU1fVFlQRV9TRUVLQUJMRSk7Ci0gICAgd2ViS2l0
TWVkaWFTcmNBZGRTcmMoc3JjLCBwcml2LT5zb3VyY2VWaWRlby5hcHBzcmMpOwotCi0gICAgcHJp
di0+c291cmNlQXVkaW8uYXBwc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhcHBzcmMi
LCAiYXVkaW9hcHBzcmMiKTsKLSAgICBnc3RfYXBwX3NyY19zZXRfY2FsbGJhY2tzKEdTVF9BUFBf
U1JDKHByaXYtPnNvdXJjZUF1ZGlvLmFwcHNyYyksICZhcHBzcmNDYWxsYmFja3NBdWRpbywgc3Jj
LCAwKTsKLSAgICBnc3RfYXBwX3NyY19zZXRfc3RyZWFtX3R5cGUoR1NUX0FQUF9TUkMocHJpdi0+
c291cmNlQXVkaW8uYXBwc3JjKSwgR1NUX0FQUF9TVFJFQU1fVFlQRV9TRUVLQUJMRSk7Ci0gICAg
d2ViS2l0TWVkaWFTcmNBZGRTcmMoc3JjLCBwcml2LT5zb3VyY2VBdWRpby5hcHBzcmMpOworICAg
IHNyYy0+cHJpdiA9IFdFQktJVF9NRURJQV9TUkNfR0VUX1BSSVZBVEUoc3JjKTsKIH0KIAogc3Rh
dGljIHZvaWQgd2ViS2l0TWVkaWFTcmNGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCkBAIC0xOTEs
OCArMjY4LDggQEAgc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNGaW5hbGl6ZShHT2JqZWN0KiBv
YmplY3QpCiAgICAgV2ViS2l0TWVkaWFTcmMqIHNyYyA9IFdFQktJVF9NRURJQV9TUkMob2JqZWN0
KTsKICAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CiAKLSAgICBn
X2ZyZWUocHJpdi0+dXJpKTsKLSAgICBwcml2LT5+V2ViS2l0TWVkaWFTcmNQcml2YXRlKCk7Cisg
ICAgLy8gVE9ETzogRnJlZSBzb3VyY2VzCisgICAgZ19mcmVlKHByaXYtPmxvY2F0aW9uKTsKIAog
ICAgIEdTVF9DQUxMX1BBUkVOVChHX09CSkVDVF9DTEFTUywgZmluYWxpemUsIChvYmplY3QpKTsK
IH0KQEAgLTIwMCw4ICsyNzcsOSBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY0ZpbmFsaXpl
KEdPYmplY3QqIG9iamVjdCkKIHN0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjU2V0UHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBzcGVjKQogewogICAgIFdlYktpdE1lZGlhU3JjKiBzcmMgPSBXRUJLSVRfTUVESUFf
U1JDKG9iamVjdCk7CisKICAgICBzd2l0Y2ggKHByb3BJZCkgewotICAgIGNhc2UgUHJvcExvY2F0
aW9uOgorICAgIGNhc2UgUFJPUF9MT0NBVElPTjoKICAgICAgICAgZ3N0X3VyaV9oYW5kbGVyX3Nl
dF91cmkocmVpbnRlcnByZXRfY2FzdDxHc3RVUklIYW5kbGVyKj4oc3JjKSwgZ192YWx1ZV9nZXRf
c3RyaW5nKHZhbHVlKSwgMCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC0yMTcs
OCArMjk1LDggQEAgc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNHZXRQcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIGd1aW50IHByb3BJZCwgR1ZhbHVlKiB2YWwKIAogICAgIEdTVF9PQkpFQ1RfTE9D
SyhzcmMpOwogICAgIHN3aXRjaCAocHJvcElkKSB7Ci0gICAgY2FzZSBQcm9wTG9jYXRpb246Ci0g
ICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgcHJpdi0+dXJpKTsKKyAgICBjYXNlIFBS
T1BfTE9DQVRJT046CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgcHJpdi0+bG9j
YXRpb24pOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSWQsIHBzcGVjKTsKQEAgLTIyNywx
MTQgKzMwNSwyMiBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY0dldFByb3BlcnR5KEdPYmpl
Y3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBHVmFsdWUqIHZhbAogICAgIEdTVF9PQkpFQ1RfVU5M
T0NLKHNyYyk7CiB9CiAKLS8vIG11c3QgYmUgY2FsbGVkIG9uIG1haW4gdGhyZWFkIGFuZCB3aXRo
IG9iamVjdCB1bmxvY2tlZAotc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFWaWRlb1NyY1N0b3AoV2Vi
S2l0TWVkaWFTcmMqIHNyYykKK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjRG9Bc3luY1N0YXJ0
KFdlYktpdE1lZGlhU3JjKiBzcmMpCiB7CiAgICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2
ID0gc3JjLT5wcml2OwotICAgIGdib29sZWFuIHNlZWtpbmc7Ci0KLSAgICBHU1RfT0JKRUNUX0xP
Q0soc3JjKTsKLQotICAgIHNlZWtpbmcgPSBwcml2LT5zb3VyY2VWaWRlby5zZWVrLmlzQWN0aXZl
KCk7Ci0KLSAgICBwcml2LT5zb3VyY2VWaWRlby5zdGFydC5jYW5jZWwoKTsKLQotICAgIHByaXYt
PnBsYXllciA9IDA7Ci0gICAgcHJpdi0+cGxheWJpbiA9IDA7Ci0KLSAgICBwcml2LT5zb3VyY2VW
aWRlby5uZWVkRGF0YS5jYW5jZWwoKTsKLSAgICBwcml2LT5zb3VyY2VWaWRlby5lbm91Z2hEYXRh
LmNhbmNlbCgpOwotICAgIHByaXYtPnNvdXJjZVZpZGVvLnNlZWsuY2FuY2VsKCk7Ci0KLSAgICBw
cml2LT5zb3VyY2VWaWRlby5wYXVzZWQgPSBGQUxTRTsKLSAgICBwcml2LT5zb3VyY2VWaWRlby5v
ZmZzZXQgPSAwOwotICAgIHByaXYtPnNlZWthYmxlID0gRkFMU0U7Ci0KLSAgICBwcml2LT5kdXJh
dGlvbiA9IDA7Ci0gICAgcHJpdi0+bmJTb3VyY2UgPSAwOwotCi0gICAgR1NUX09CSkVDVF9VTkxP
Q0soc3JjKTsKLQotICAgIGlmIChwcml2LT5zb3VyY2VWaWRlby5hcHBzcmMpIHsKLSAgICAgICAg
Z3N0X2FwcF9zcmNfc2V0X2NhcHMoR1NUX0FQUF9TUkMocHJpdi0+c291cmNlVmlkZW8uYXBwc3Jj
KSwgMCk7Ci0gICAgICAgIGlmICghc2Vla2luZykKLSAgICAgICAgICAgIGdzdF9hcHBfc3JjX3Nl
dF9zaXplKEdTVF9BUFBfU1JDKHByaXYtPnNvdXJjZVZpZGVvLmFwcHNyYyksIC0xKTsKLSAgICB9
Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlN0b3BwZWQgcmVxdWVzdCIpOworICAgIHBy
aXYtPmFzeW5jU3RhcnQgPSB0cnVlOworICAgIEdTVF9CSU5fQ0xBU1MocGFyZW50X2NsYXNzKS0+
aGFuZGxlX21lc3NhZ2UoR1NUX0JJTihzcmMpLAorICAgICAgICBnc3RfbWVzc2FnZV9uZXdfYXN5
bmNfc3RhcnQoR1NUX09CSkVDVChzcmMpKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHdlYktpdE1lZGlh
QXVkaW9TcmNTdG9wKFdlYktpdE1lZGlhU3JjKiBzcmMpCitzdGF0aWMgdm9pZCB3ZWJLaXRNZWRp
YVNyY0RvQXN5bmNEb25lKFdlYktpdE1lZGlhU3JjKiBzcmMpCiB7CiAgICAgV2ViS2l0TWVkaWFT
cmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwotICAgIGdib29sZWFuIHNlZWtpbmc7Ci0KLSAg
ICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKLQotICAgIHNlZWtpbmcgPSBwcml2LT5zb3VyY2VBdWRp
by5zZWVrLmlzQWN0aXZlKCk7Ci0KLSAgICBwcml2LT5zb3VyY2VBdWRpby5zdGFydC5jYW5jZWwo
KTsKLQotICAgIHByaXYtPnBsYXllciA9IDA7Ci0KLSAgICBwcml2LT5wbGF5YmluID0gMDsKLQot
ICAgIHByaXYtPnNvdXJjZUF1ZGlvLm5lZWREYXRhLmNhbmNlbCgpOwotICAgIHByaXYtPnNvdXJj
ZUF1ZGlvLmVub3VnaERhdGEuY2FuY2VsKCk7Ci0gICAgcHJpdi0+c291cmNlQXVkaW8uc2Vlay5j
YW5jZWwoKTsKLQotICAgIHByaXYtPnNvdXJjZUF1ZGlvLnBhdXNlZCA9IEZBTFNFOwotCi0gICAg
cHJpdi0+c291cmNlQXVkaW8ub2Zmc2V0ID0gMDsKLQotICAgIHByaXYtPnNlZWthYmxlID0gRkFM
U0U7Ci0KLSAgICBwcml2LT5kdXJhdGlvbiA9IDA7Ci0gICAgcHJpdi0+bmJTb3VyY2UgPSAwOwot
Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKLQotICAgIGlmIChwcml2LT5zb3VyY2VBdWRp
by5hcHBzcmMpIHsKLSAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X2NhcHMoR1NUX0FQUF9TUkMocHJp
di0+c291cmNlQXVkaW8uYXBwc3JjKSwgMCk7Ci0gICAgICAgIGlmICghc2Vla2luZykKLSAgICAg
ICAgICAgIGdzdF9hcHBfc3JjX3NldF9zaXplKEdTVF9BUFBfU1JDKHByaXYtPnNvdXJjZUF1ZGlv
LmFwcHNyYyksIC0xKTsKKyAgICBpZiAocHJpdi0+YXN5bmNTdGFydCkgeworICAgICAgICBHU1Rf
QklOX0NMQVNTKHBhcmVudF9jbGFzcyktPmhhbmRsZV9tZXNzYWdlKEdTVF9CSU4oc3JjKSwKKyAg
ICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19hc3luY19kb25lKEdTVF9PQkpFQ1Qoc3JjKSwgR1NU
X0NMT0NLX1RJTUVfTk9ORSkpOworICAgICAgICBwcml2LT5hc3luY1N0YXJ0ID0gZmFsc2U7CiAg
ICAgfQotCi0gICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJTdG9wcGVkIHJlcXVlc3QiKTsKLX0K
LQotLy8gbXVzdCBiZSBjYWxsZWQgb24gbWFpbiB0aHJlYWQgYW5kIHdpdGggb2JqZWN0IHVubG9j
a2VkCi1zdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVZpZGVvU3JjU3RhcnQoV2ViS2l0TWVkaWFTcmMq
IHNyYykKLXsKLSAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7Ci0K
LSAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKLSAgICBpZiAoIXByaXYtPnVyaSkgewotICAgICAg
ICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIk5vIFVSSSBwcm92aWRlZCIpOwotICAgICAgICBHU1Rf
T0JKRUNUX1VOTE9DSyhzcmMpOwotICAgICAgICB3ZWJLaXRNZWRpYVZpZGVvU3JjU3RvcChzcmMp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsK
LSAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlN0YXJ0ZWQgcmVxdWVzdCIpOwotfQotCi0vLyBt
dXN0IGJlIGNhbGxlZCBvbiBtYWluIHRocmVhZCBhbmQgd2l0aCBvYmplY3QgdW5sb2NrZWQKLXN0
YXRpYyB2b2lkIHdlYktpdE1lZGlhQXVkaW9TcmNTdGFydChXZWJLaXRNZWRpYVNyYyogc3JjKQot
ewotICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKLQotICAgIEdT
VF9PQkpFQ1RfTE9DSyhzcmMpOwotICAgIGlmICghcHJpdi0+dXJpKSB7Ci0gICAgICAgIEdTVF9F
UlJPUl9PQkpFQ1Qoc3JjLCAiTm8gVVJJIHByb3ZpZGVkIik7Ci0gICAgICAgIEdTVF9PQkpFQ1Rf
VU5MT0NLKHNyYyk7Ci0gICAgICAgIHdlYktpdE1lZGlhQXVkaW9TcmNTdG9wKHNyYyk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwotICAgIEdT
VF9ERUJVR19PQkpFQ1Qoc3JjLCAiU3RhcnRlZCByZXF1ZXN0Iik7CiB9CiAKIHN0YXRpYyBHc3RT
dGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRNZWRpYVNyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqIGVs
ZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCkBAIC0zNDQsMTMgKzMzMCw5IEBAIHN0
YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRNZWRpYVNyY0NoYW5nZVN0YXRlKEdzdEVs
ZW1lbnQqIGVsZW1lbnQsIEdzdFN0CiAgICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0g
c3JjLT5wcml2OwogCiAgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RB
VEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6Ci0gICAgICAgIGlmICghcHJpdi0+c291cmNlVmlkZW8u
YXBwc3JjICYmICFwcml2LT5zb3VyY2VBdWRpby5hcHBzcmMpIHsKLSAgICAgICAgICAgIGdzdF9l
bGVtZW50X3Bvc3RfbWVzc2FnZShlbGVtZW50LAotICAgICAgICAgICAgICAgIGdzdF9taXNzaW5n
X2VsZW1lbnRfbWVzc2FnZV9uZXcoZWxlbWVudCwgImFwcHNyYyIpKTsKLSAgICAgICAgICAgIEdT
VF9FTEVNRU5UX0VSUk9SKHNyYywgQ09SRSwgTUlTU0lOR19QTFVHSU4sICgwKSwgKCJubyBhcHBz
cmMiKSk7Ci0gICAgICAgICAgICByZXR1cm4gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOwotICAg
ICAgICB9CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKKyAgICAg
ICAgcHJpdi0+bm9Nb3JlUGFkcyA9IGZhbHNlOworICAgICAgICB3ZWJLaXRNZWRpYVNyY0RvQXN5
bmNTdGFydChzcmMpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVh
azsKQEAgLTM1OSwzNyArMzQxLDE3IEBAIHN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJL
aXRNZWRpYVNyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdFN0CiAgICAgcmV0
ID0gR1NUX0VMRU1FTlRfQ0xBU1MocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlKGVsZW1lbnQs
IHRyYW5zaXRpb24pOwogICAgIGlmIChHX1VOTElLRUxZKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdF
X0ZBSUxVUkUpKSB7CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU3RhdGUgY2hhbmdl
IGZhaWxlZCIpOworICAgICAgICB3ZWJLaXRNZWRpYVNyY0RvQXN5bmNEb25lKHNyYyk7CiAgICAg
ICAgIHJldHVybiByZXQ7CiAgICAgfQogCiAgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CiAgICAg
Y2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKLSAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChzcmMsICJSRUFEWS0+UEFVU0VEIik7Ci0gICAgICAgIEdTVF9PQkpFQ1RfTE9DSyhz
cmMpOwotCi0gICAgICAgIGdzdF9vYmplY3RfcmVmKHNyYyk7Ci0gICAgICAgIHByaXYtPnNvdXJj
ZVZpZGVvLnN0YXJ0LnNjaGVkdWxlKCJbV2ViS2l0XSB3ZWJLaXRNZWRpYVZpZGVvU3JjU3RhcnQi
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4oc3RkOjpiaW5kKHdlYktpdE1lZGlhVmlkZW9TcmNTdGFy
dCwgc3JjKSksIEdfUFJJT1JJVFlfREVGQVVMVCwKLSAgICAgICAgICAgIFtzcmNdIHsgZ3N0X29i
amVjdF91bnJlZihzcmMpOyB9KTsKLQotICAgICAgICBnc3Rfb2JqZWN0X3JlZihzcmMpOwotICAg
ICAgICBwcml2LT5zb3VyY2VBdWRpby5zdGFydC5zY2hlZHVsZSgiW1dlYktpdF0gd2ViS2l0TWVk
aWFBdWRpb1NyY1N0YXJ0Iiwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+KHN0ZDo6YmluZCh3ZWJLaXRN
ZWRpYUF1ZGlvU3JjU3RhcnQsIHNyYykpLCBHX1BSSU9SSVRZX0RFRkFVTFQsCi0gICAgICAgICAg
ICBbc3JjXSB7IGdzdF9vYmplY3RfdW5yZWYoc3JjKTsgfSk7Ci0KLSAgICAgICAgR1NUX09CSkVD
VF9VTkxPQ0soc3JjKTsKKyAgICAgICAgcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQzsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToK
LSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJQQVVTRUQtPlJFQURZIik7Ci0gICAgICAg
IEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwotCi0gICAgICAgIGdzdF9vYmplY3RfcmVmKHNyYyk7Ci0g
ICAgICAgIHByaXYtPnNvdXJjZVZpZGVvLnN0b3Auc2NoZWR1bGUoIltXZWJLaXRdIHdlYktpdE1l
ZGlhVmlkZW9TcmNTdG9wIiwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+KHN0ZDo6YmluZCh3ZWJLaXRN
ZWRpYVZpZGVvU3JjU3RvcCwgc3JjKSksIEdfUFJJT1JJVFlfREVGQVVMVCwKLSAgICAgICAgICAg
IFtzcmNdIHsgZ3N0X29iamVjdF91bnJlZihzcmMpOyB9KTsKLQotICAgICAgICBnc3Rfb2JqZWN0
X3JlZihzcmMpOwotICAgICAgICBwcml2LT5zb3VyY2VBdWRpby5zdG9wLnNjaGVkdWxlKCJbV2Vi
S2l0XSB3ZWJLaXRNZWRpYUF1ZGlvU3JjU3RvcCIsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPihzdGQ6
OmJpbmQod2ViS2l0TWVkaWFBdWRpb1NyY1N0b3AsIHNyYykpLCBHX1BSSU9SSVRZX0RFRkFVTFQs
Ci0gICAgICAgICAgICBbc3JjXSB7IGdzdF9vYmplY3RfdW5yZWYoc3JjKTsgfSk7Ci0KLSAgICAg
ICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKKyAgICAgICAgd2ViS2l0TWVkaWFTcmNEb0FzeW5j
RG9uZShzcmMpOworICAgICAgICBwcml2LT5ub01vcmVQYWRzID0gZmFsc2U7CiAgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpAQCAtNDE3LDM3MiArMzc5LDY1NCBA
QCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0TWVkaWFTcmNRdWVyeVdpdGhQYXJlbnQoR3N0UGFkKiBw
YWQsIEdzdE9iamVjdCogcGFyZW50LCBHcwogICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMp
OwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHU1RfUVVFUllfVVJJOiB7CisgICAg
Y2FzZSBHU1RfUVVFUllfVVJJOgogICAgICAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKLSAgICAg
ICAgZ3N0X3F1ZXJ5X3NldF91cmkocXVlcnksIHNyYy0+cHJpdi0+dXJpKTsKKyAgICAgICAgZ3N0
X3F1ZXJ5X3NldF91cmkocXVlcnksIHNyYy0+cHJpdi0+bG9jYXRpb24pOwogICAgICAgICBHU1Rf
T0JKRUNUX1VOTE9DSyhzcmMpOwogICAgICAgICByZXN1bHQgPSBUUlVFOwogICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OnsKKyAgICAgICAgcmVzdWx0ID0gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0
KHBhZCwgcGFyZW50LCBxdWVyeSk7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICB9Ci0gICAg
ZGVmYXVsdDogewotICAgICAgICBHUmVmUHRyPEdzdFBhZD4gdGFyZ2V0ID0gYWRvcHRHUmVmKGdz
dF9naG9zdF9wYWRfZ2V0X3RhcmdldChHU1RfR0hPU1RfUEFEX0NBU1QocGFkKSkpOwotICAgICAg
ICAvLyBGb3J3YXJkIHRoZSBxdWVyeSB0byB0aGUgcHJveHkgdGFyZ2V0IHBhZC4KLSAgICAgICAg
aWYgKHRhcmdldCkKLSAgICAgICAgICAgIHJlc3VsdCA9IGdzdF9wYWRfcXVlcnkodGFyZ2V0Lmdl
dCgpLCBxdWVyeSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCB3ZWJL
aXRNZWRpYVNyY0RpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQoU291cmNlKiBzb3VyY2Up
OworCitzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0TWVkaWFTcmNFdmVudFdpdGhQYXJlbnQoR3N0UGFk
KiBwYWQsIEdzdE9iamVjdCogcGFyZW50LCBHc3RFdmVudCogZXZlbnQpCit7CisgICAgV2ViS2l0
TWVkaWFTcmMqIHNyYyA9IFdFQktJVF9NRURJQV9TUkMoR1NUX0VMRU1FTlQocGFyZW50KSk7Cisg
ICAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CisKKyAgICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBF
KGV2ZW50KSkgeworICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RPTV9VUFNUUkVBTTp7CisgICAgICAg
IGNvbnN0IEdzdFN0cnVjdHVyZSogcyA9IGdzdF9ldmVudF9nZXRfc3RydWN0dXJlKGV2ZW50KTsK
KworICAgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzLCAid2ViS2l0QXVkaW9UcmFj
ayIpKSB7CisgICAgICAgICAgICBTdHJlYW0qIHN0cmVhbSA9IChTdHJlYW0qKSBnc3RfcGFkX2dl
dF9lbGVtZW50X3ByaXZhdGUocGFkKTsKKyAgICAgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpBdWRp
b1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4qIGF1ZGlvVHJhY2s7CisKKyAgICAgICAgICAgIGdzdF9z
dHJ1Y3R1cmVfZ2V0KHMsICJ0cmFjayIsIEdfVFlQRV9QT0lOVEVSLCAmYXVkaW9UcmFjaywgbnVs
bHB0cik7CisgICAgICAgICAgICBzdHJlYW0tPmF1ZGlvVHJhY2sgPSBhdWRpb1RyYWNrOworCisg
ICAgICAgICAgICB3ZWJLaXRNZWRpYVNyY0RpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQo
c3RyZWFtLT5wYXJlbnQpOworCisgICAgICAgICAgICByZXN1bHQgPSBUUlVFOworICAgICAgICAg
ICAgZ3N0X2V2ZW50X3VucmVmKGV2ZW50KTsKKyAgICAgICAgfSBlbHNlIGlmIChnc3Rfc3RydWN0
dXJlX2hhc19uYW1lKHMsICJ3ZWJLaXRWaWRlb1RyYWNrIikpIHsKKyAgICAgICAgICAgIFN0cmVh
bSogc3RyZWFtID0gKFN0cmVhbSopIGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZShwYWQpOwor
ICAgICAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiog
dmlkZW9UcmFjazsKKworICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXQocywgInRyYWNrIiwg
R19UWVBFX1BPSU5URVIsICZ2aWRlb1RyYWNrLCBudWxscHRyKTsKKyAgICAgICAgICAgIHN0cmVh
bS0+dmlkZW9UcmFjayA9IHZpZGVvVHJhY2s7CisKKyAgICAgICAgICAgIHdlYktpdE1lZGlhU3Jj
RGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudChzdHJlYW0tPnBhcmVudCk7CisKKyAgICAg
ICAgICAgIHJlc3VsdCA9IFRSVUU7CisgICAgICAgICAgICBnc3RfZXZlbnRfdW5yZWYoZXZlbnQp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmVzdWx0ID0gZ3N0X3BhZF9ldmVudF9k
ZWZhdWx0KHBhZCwgcGFyZW50LCBldmVudCk7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAg
ICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIHJlc3VsdCA9IGdzdF9wYWRfZXZlbnRfZGVmYXVs
dChwYWQsIHBhcmVudCwgZXZlbnQpOworICAgICAgICBicmVhazsKICAgICB9CiAKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi0vLyB1cmkgaGFuZGxlciBpbnRlcmZhY2UKLXN0YXRpYyBHc3RVUklU
eXBlIHdlYktpdE1lZGlhU3JjVXJpR2V0VHlwZShHVHlwZSkKK3N0YXRpYyBHc3RQYWQqIGdldF9p
bnRlcm5hbF9saW5rZWRfcGFkKEdzdFBhZCogcGFkKQogewotICAgIHJldHVybiBHU1RfVVJJX1NS
QzsKKyAgICBHc3RJdGVyYXRvciogaXQ7CisgICAgR3N0UGFkKiBvdGhlcnBhZDsKKyAgICBHVmFs
dWUgaXRlbSA9IEdfVkFMVUVfSU5JVDsKKworICAgIGl0ID0gZ3N0X3BhZF9pdGVyYXRlX2ludGVy
bmFsX2xpbmtzKHBhZCk7CisKKyAgICBpZiAoIWl0IHx8IChnc3RfaXRlcmF0b3JfbmV4dChpdCwg
Jml0ZW0pKSAhPSBHU1RfSVRFUkFUT1JfT0sKKyAgICAgICAgfHwgKChvdGhlcnBhZCA9IEdTVF9Q
QUQoZ192YWx1ZV9kdXBfb2JqZWN0KCZpdGVtKSkpID09IDApKSB7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKyAgICBnX3ZhbHVlX3Vuc2V0KCZpdGVtKTsKKyAgICBpZiAoaXQpCisgICAgICAg
IGdzdF9pdGVyYXRvcl9mcmVlKGl0KTsKKworICAgIHJldHVybiBvdGhlcnBhZDsKIH0KIAotY29u
c3QgZ2NoYXIqIGNvbnN0KiB3ZWJLaXRNZWRpYVNyY0dldFByb3RvY29scyhHVHlwZSkKK3R5cGVk
ZWYgc3RydWN0IHsKKyAgICBTdHJlYW0qIHN0cmVhbTsKKyAgICBXVEY6OlJlZlB0cjxXZWJDb3Jl
OjpHU3RyZWFtZXJNZWRpYVNhbXBsZT4gc2FtcGxlOworfSBSZWNlaXZlU2FtcGxlOworCitzdGF0
aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjRGlkUmVjZWl2ZVNhbXBsZShSZWNlaXZlU2FtcGxlKiBz
YW1wbGUpCiB7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHByb3RvY29sc1tdID0geyJtZWRpYXNv
dXJjZWJsb2IiLCAwIH07Ci0gICAgcmV0dXJuIHByb3RvY29sczsKKyAgICBzYW1wbGUtPnN0cmVh
bS0+cGFyZW50LT5wYXJlbnQtPnByaXYtPm1lZGlhU291cmNlQ2xpZW50LT5kaWRSZWNlaXZlU2Ft
cGxlKHNhbXBsZS0+c3RyZWFtLT5wYXJlbnQtPnNvdXJjZUJ1ZmZlciwgc2FtcGxlLT5zYW1wbGUp
OworICAgIHNhbXBsZS0+c2FtcGxlLnJlbGVhc2UoKTsKKyAgICBnX2ZyZWUoc2FtcGxlKTsKKyAg
ICByZXR1cm4gR19TT1VSQ0VfUkVNT1ZFOwogfQogCi1zdGF0aWMgZ2NoYXIqIHdlYktpdE1lZGlh
U3JjR2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIpCitzdGF0aWMgR3N0UGFkUHJvYmVSZXR1
cm4gd2ViS2l0V2ViU3JjQnVmZmVyUHJvYmUoR3N0UGFkKiwgR3N0UGFkUHJvYmVJbmZvKiBpbmZv
LCBTdHJlYW0qIHN0cmVhbSkKIHsKLSAgICBXZWJLaXRNZWRpYVNyYyogc3JjID0gV0VCS0lUX01F
RElBX1NSQyhoYW5kbGVyKTsKLSAgICBnY2hhciogcmV0OworICAgIEdzdEJ1ZmZlciogYnVmZmVy
ID0gR1NUX0JVRkZFUihpbmZvLT5kYXRhKTsKKworICAgIGlmICghc3RyZWFtLT5hdWRpb1RyYWNr
ICYmICFzdHJlYW0tPnZpZGVvVHJhY2spIHsKKyAgICAgICAgUGVuZGluZ1JlY2VpdmVTYW1wbGUq
IHNhbXBsZSA9IGdfbmV3MChQZW5kaW5nUmVjZWl2ZVNhbXBsZSwgMSk7CisgICAgICAgIHNhbXBs
ZS0+YnVmZmVyID0gZ3N0X2J1ZmZlcl9yZWYoYnVmZmVyKTsKKyAgICAgICAgc2FtcGxlLT5wcmVz
ZW50YXRpb25TaXplID0gc3RyZWFtLT5wcmVzZW50YXRpb25TaXplOworICAgICAgICBzdHJlYW0t
PnBlbmRpbmdSZWNlaXZlU2FtcGxlID0gZ19saXN0X2FwcGVuZChzdHJlYW0tPnBlbmRpbmdSZWNl
aXZlU2FtcGxlLCBzYW1wbGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIFJlY2VpdmVTYW1wbGUq
IHNhbXBsZSA9IGdfbmV3MChSZWNlaXZlU2FtcGxlLCAxKTsKKyAgICAgICAgc2FtcGxlLT5zYW1w
bGUgPSBXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYVNhbXBsZTo6Y3JlYXRlKGJ1ZmZlciwgc3RyZWFt
LT5wcmVzZW50YXRpb25TaXplLCBzdHJlYW0tPmF1ZGlvVHJhY2sgPyBzdHJlYW0tPmF1ZGlvVHJh
Y2stPmdldCgpLT5pZCgpIDogc3RyZWFtLT52aWRlb1RyYWNrLT5nZXQoKS0+aWQoKSk7CisgICAg
ICAgIHNhbXBsZS0+c3RyZWFtID0gc3RyZWFtOworICAgICAgICBnX2lkbGVfYWRkKChHU291cmNl
RnVuYyl3ZWJLaXRXZWJTcmNEaWRSZWNlaXZlU2FtcGxlLCBzYW1wbGUpOworICAgIH0KIAotICAg
IEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwotICAgIHJldCA9IGdfc3RyZHVwKHNyYy0+cHJpdi0+dXJp
KTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwotICAgIHJldHVybiByZXQ7CisgICAgcmV0
dXJuIEdTVF9QQURfUFJPQkVfT0s7CiB9CiAKLXN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRNZWRpYVNy
Y1NldFVyaShHc3RVUklIYW5kbGVyKiBoYW5kbGVyLCBjb25zdCBnY2hhciogdXJpLCBHRXJyb3Iq
KikKK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjRGVtdXhlck5vTW9yZVBhZHMoR3N0RWxlbWVu
dCosIFNvdXJjZSogc291cmNlKTsKKworc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNQYXJzZXJO
b3RpZnlDYXBzKEdPYmplY3QqIG9iamVjdCwgR1BhcmFtU3BlYyosIFN0cmVhbSogc3RyZWFtKQog
ewotICAgIFdlYktpdE1lZGlhU3JjKiBzcmMgPSBXRUJLSVRfTUVESUFfU1JDKGhhbmRsZXIpOwot
ICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKLSAgICBpZiAoR1NU
X1NUQVRFKHNyYykgPj0gR1NUX1NUQVRFX1BBVVNFRCkgewotICAgICAgICBHU1RfRVJST1JfT0JK
RUNUKHNyYywgIlVSSSBjYW4gb25seSBiZSBzZXQgaW4gc3RhdGVzIDwgUEFVU0VEIik7Ci0gICAg
ICAgIHJldHVybiBGQUxTRTsKKyAgICBHc3RQYWQqIHNyY3BhZCA9IEdTVF9QQUQob2JqZWN0KTsK
KyAgICBHc3RDYXBzKiBjYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzKHNyY3BhZCk7CisK
KyAgICBpZiAoIWNhcHMpCisgICAgICAgIHJldHVybjsKKworICAgIEdzdFN0cnVjdHVyZSogcyA9
IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoY2FwcywgMCk7CisgICAgY29uc3QgZ2NoYXIqIHN0cnVj
dHVyZU5hbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1lKHMpOworCisgICAgR3N0VmlkZW9JbmZv
IGluZm87CisgICAgaWYgKGdfc3RyX2hhc19wcmVmaXgoc3RydWN0dXJlTmFtZSwgInZpZGVvLyIp
ICYmIGdzdF92aWRlb19pbmZvX2Zyb21fY2FwcygmaW5mbywgY2FwcykpIHsKKyAgICAgICAgZmxv
YXQgd2lkdGgsIGhlaWdodDsKKworICAgICAgICAvLyBUT0RPOiBjb3JyZWN0PworICAgICAgICB3
aWR0aCA9IGluZm8ud2lkdGg7CisgICAgICAgIGhlaWdodCA9IGluZm8uaGVpZ2h0ICogKChmbG9h
dCkgaW5mby5wYXJfZCAvIChmbG9hdCkgaW5mby5wYXJfbik7CisKKyAgICAgICAgc3RyZWFtLT5w
cmVzZW50YXRpb25TaXplID0gV2ViQ29yZTo6RmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAg
IH0gZWxzZSB7CisgICAgICAgIHN0cmVhbS0+cHJlc2VudGF0aW9uU2l6ZSA9IFdlYkNvcmU6OkZs
b2F0U2l6ZSgpOwogICAgIH0KIAotICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwotICAgIGdfZnJl
ZShwcml2LT51cmkpOwotICAgIHByaXYtPnVyaSA9IDA7Ci0gICAgaWYgKCF1cmkpIHsKLSAgICAg
ICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKLSAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgLy8g
VE9ETworICAgIGlmIChnc3RfcGFkX2lzX2xpbmtlZChzcmNwYWQpKSB7CisgICAgICAgIGdzdF9j
YXBzX3VucmVmKGNhcHMpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgV2ViQ29yZTo6
VVJMIHVybChXZWJDb3JlOjpVUkwoKSwgdXJpKTsKKyAgICAvLyBUT0RPOiBBdG9taWMgaW50cywg
R1JlZlB0cgorICAgIGdjaGFyKiBwYWROYW1lID0gZ19zdHJkdXBfcHJpbnRmKCJzcmNfJXUiLCBz
dHJlYW0tPnBhcmVudC0+cGFyZW50LT5wcml2LT5udW1iZXJPZlBhZHMrKyk7CisgICAgR3N0UGFk
KiBnaG9zdHBhZCA9IGdzdF9naG9zdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUocGFkTmFtZSwgc3Jj
cGFkLCBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQoJnNyY1RlbXBsYXRlKSk7CiAKLSAgICBw
cml2LT51cmkgPSBnX3N0cmR1cCh1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgR1NU
X09CSkVDVF9VTkxPQ0soc3JjKTsKLSAgICByZXR1cm4gVFJVRTsKKyAgICBnc3RfcGFkX3NldF9x
dWVyeV9mdW5jdGlvbihnaG9zdHBhZCwgd2ViS2l0TWVkaWFTcmNRdWVyeVdpdGhQYXJlbnQpOwor
ICAgIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uKGdob3N0cGFkLCB3ZWJLaXRNZWRpYVNyY0V2
ZW50V2l0aFBhcmVudCk7CisKKyAgICBnc3RfcGFkX3NldF9lbGVtZW50X3ByaXZhdGUoZ2hvc3Rw
YWQsIHN0cmVhbSk7CisgICAgZ3N0X3BhZF9hZGRfcHJvYmUoZ2hvc3RwYWQsIEdTVF9QQURfUFJP
QkVfVFlQRV9CVUZGRVIsIChHc3RQYWRQcm9iZUNhbGxiYWNrKSB3ZWJLaXRXZWJTcmNCdWZmZXJQ
cm9iZSwgc3RyZWFtLCBudWxscHRyKTsKKworICAgIGdzdF9wYWRfc2V0X2FjdGl2ZShnaG9zdHBh
ZCwgVFJVRSk7CisgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChHU1RfRUxFTUVOVChzdHJlYW0tPnBh
cmVudC0+cGFyZW50KSwgZ2hvc3RwYWQpOworICAgIHN0cmVhbS0+c3JjcGFkID0gZ2hvc3RwYWQ7
CisgICAgc3RyZWFtLT5jYXBzID0gY2FwczsKKworICAgIHdlYktpdE1lZGlhU3JjRGVtdXhlck5v
TW9yZVBhZHMobnVsbHB0ciwgc3RyZWFtLT5wYXJlbnQpOwogfQogCi1zdGF0aWMgdm9pZCB3ZWJL
aXRNZWRpYVNyY1VyaUhhbmRsZXJJbml0KGdwb2ludGVyIGdJZmFjZSwgZ3BvaW50ZXIpCitzdGF0
aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY0RlbXV4ZXJQYWRBZGRlZChHc3RFbGVtZW50KiBkZW11eGVy
LCBHc3RQYWQqIHBhZCwgU291cmNlKiBzb3VyY2UpCiB7Ci0gICAgR3N0VVJJSGFuZGxlckludGVy
ZmFjZSogaWZhY2UgPSAoR3N0VVJJSGFuZGxlckludGVyZmFjZSAqKSBnSWZhY2U7CisgICAgR3N0
Q2FwcyogY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyhwYWQpOworICAgIEdzdFN0cnVj
dHVyZSogcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoY2FwcywgMCk7CisgICAgU3RyZWFtKiBz
dHJlYW0gPSBnX25ldzAoU3RyZWFtLCAxKTsKKworICAgIHN0cmVhbS0+cGFyZW50ID0gc291cmNl
OworICAgIHNvdXJjZS0+c3RyZWFtcyA9IGdfbGlzdF9wcmVwZW5kKHNvdXJjZS0+c3RyZWFtcywg
c3RyZWFtKTsKKworICAgIGdfYXNzZXJ0KGNhcHMgIT0gMCk7CisKKyAgICBpZiAoZ3N0X3N0cnVj
dHVyZV9oYXNfbmFtZShzLCAidmlkZW8veC1oMjY0IikpIHsKKyAgICAgICAgR3N0RWxlbWVudCog
cGFyc2VyOworICAgICAgICBHc3RFbGVtZW50KiBjYXBzZmlsdGVyOworICAgICAgICBHc3RQYWQq
IHBhZDsKKyAgICAgICAgR3N0Q2FwcyogY2FwczsKKworICAgICAgICBjYXBzID0gZ3N0X2NhcHNf
bmV3X3NpbXBsZSgidmlkZW8veC1oMjY0IiwgImFsaWdubWVudCIsIEdfVFlQRV9TVFJJTkcsICJh
dSIsIE5VTEwpOworICAgICAgICBwYXJzZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImgy
NjRwYXJzZSIsIDApOworICAgICAgICBjYXBzZmlsdGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9t
YWtlKCJjYXBzZmlsdGVyIiwgMCk7CisgICAgICAgIGdfb2JqZWN0X3NldChjYXBzZmlsdGVyLCAi
Y2FwcyIsIGNhcHMsIG51bGxwdHIpOworICAgICAgICBnc3RfY2Fwc191bnJlZihjYXBzKTsKKwor
ICAgICAgICBzdHJlYW0tPnBhcnNlciA9IGdzdF9iaW5fbmV3KG51bGxwdHIpOworICAgICAgICBn
c3RfYmluX2FkZF9tYW55KEdTVF9CSU4oc3RyZWFtLT5wYXJzZXIpLCBwYXJzZXIsIGNhcHNmaWx0
ZXIsIG51bGxwdHIpOworICAgICAgICBnc3RfZWxlbWVudF9saW5rX3BhZHMocGFyc2VyLCAic3Jj
IiwgY2Fwc2ZpbHRlciwgInNpbmsiKTsKKworICAgICAgICBwYWQgPSBnc3RfZWxlbWVudF9nZXRf
c3RhdGljX3BhZChwYXJzZXIsICJzaW5rIik7CisgICAgICAgIGdzdF9lbGVtZW50X2FkZF9wYWQo
c3RyZWFtLT5wYXJzZXIsIGdzdF9naG9zdF9wYWRfbmV3KCJzaW5rIiwgcGFkKSk7CisgICAgICAg
IGdzdF9vYmplY3RfdW5yZWYocGFkKTsKKworICAgICAgICBwYWQgPSBnc3RfZWxlbWVudF9nZXRf
c3RhdGljX3BhZChjYXBzZmlsdGVyLCAic3JjIik7CisgICAgICAgIGdzdF9lbGVtZW50X2FkZF9w
YWQoc3RyZWFtLT5wYXJzZXIsIGdzdF9naG9zdF9wYWRfbmV3KCJzcmMiLCBwYWQpKTsKKyAgICAg
ICAgZ3N0X29iamVjdF91bnJlZihwYWQpOworICAgIH0gZWxzZSBpZiAoZ3N0X3N0cnVjdHVyZV9o
YXNfbmFtZShzLCAidmlkZW8veC1oMjY1IikpIHsKKyAgICAgICAgR3N0RWxlbWVudCogcGFyc2Vy
OworICAgICAgICBHc3RFbGVtZW50KiBjYXBzZmlsdGVyOworICAgICAgICBHc3RQYWQqIHBhZDsK
KyAgICAgICAgR3N0Q2FwcyogY2FwczsKKworICAgICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3Np
bXBsZSgidmlkZW8veC1oMjY1IiwgImFsaWdubWVudCIsIEdfVFlQRV9TVFJJTkcsICJhdSIsIE5V
TEwpOworICAgICAgICBwYXJzZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImgyNjVwYXJz
ZSIsIDApOworICAgICAgICBjYXBzZmlsdGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJj
YXBzZmlsdGVyIiwgMCk7CisgICAgICAgIGdfb2JqZWN0X3NldChjYXBzZmlsdGVyLCAiY2FwcyIs
IGNhcHMsIG51bGxwdHIpOworICAgICAgICBnc3RfY2Fwc191bnJlZihjYXBzKTsKKworICAgICAg
ICBzdHJlYW0tPnBhcnNlciA9IGdzdF9iaW5fbmV3KG51bGxwdHIpOworICAgICAgICBnc3RfYmlu
X2FkZF9tYW55KEdTVF9CSU4oc3RyZWFtLT5wYXJzZXIpLCBwYXJzZXIsIGNhcHNmaWx0ZXIsIG51
bGxwdHIpOworICAgICAgICBnc3RfZWxlbWVudF9saW5rX3BhZHMocGFyc2VyLCAic3JjIiwgY2Fw
c2ZpbHRlciwgInNpbmsiKTsKKworICAgICAgICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGlj
X3BhZChwYXJzZXIsICJzaW5rIik7CisgICAgICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoc3RyZWFt
LT5wYXJzZXIsIGdzdF9naG9zdF9wYWRfbmV3KCJzaW5rIiwgcGFkKSk7CisgICAgICAgIGdzdF9v
YmplY3RfdW5yZWYocGFkKTsKKworICAgICAgICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGlj
X3BhZChjYXBzZmlsdGVyLCAic3JjIik7CisgICAgICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoc3Ry
ZWFtLT5wYXJzZXIsIGdzdF9naG9zdF9wYWRfbmV3KCJzcmMiLCBwYWQpKTsKKyAgICAgICAgZ3N0
X29iamVjdF91bnJlZihwYWQpOworICAgIH0gZWxzZSBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFt
ZShzLCAiYXVkaW8vbXBlZyIpKSB7CisgICAgICAgIGdpbnQgbXBlZ3ZlcnNpb24gPSAtMTsKKwor
ICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9pbnQocywgIm1wZWd2ZXJzaW9uIiwgJm1wZWd2ZXJz
aW9uKTsKKyAgICAgICAgaWYgKG1wZWd2ZXJzaW9uID09IDEpIHsKKyAgICAgICAgICAgIHN0cmVh
bS0+cGFyc2VyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJtcGVnYXVkaW9wYXJzZSIsIDAp
OworICAgICAgICB9IGVsc2UgaWYgKG1wZWd2ZXJzaW9uID09IDIgfHwgbXBlZ3ZlcnNpb24gPT0g
NCkgeworICAgICAgICAgICAgc3RyZWFtLT5wYXJzZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21h
a2UoImFhY3BhcnNlIiwgMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBnX2Fzc2Vy
dF9ub3RfcmVhY2hlZCgpOworICAgICAgICB9CisgICAgfQogCi0gICAgaWZhY2UtPmdldF90eXBl
ID0gd2ViS2l0TWVkaWFTcmNVcmlHZXRUeXBlOwotICAgIGlmYWNlLT5nZXRfcHJvdG9jb2xzID0g
d2ViS2l0TWVkaWFTcmNHZXRQcm90b2NvbHM7Ci0gICAgaWZhY2UtPmdldF91cmkgPSB3ZWJLaXRN
ZWRpYVNyY0dldFVyaTsKLSAgICBpZmFjZS0+c2V0X3VyaSA9IHdlYktpdE1lZGlhU3JjU2V0VXJp
OworICAgIEdzdFBhZCogc2lua3BhZDsKKyAgICBHc3RQYWQqIHNyY3BhZDsKKyAgICBHc3RQYWQq
IGdob3N0cGFkOworCisgICAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZChz
b3VyY2UtPm11bHRpcXVldWUsICJzaW5rXyV1Iik7CisgICAgZ3N0X3BhZF9saW5rKHBhZCwgc2lu
a3BhZCk7CisKKyAgICBzcmNwYWQgPSBnZXRfaW50ZXJuYWxfbGlua2VkX3BhZChzaW5rcGFkKTsK
KyAgICBnc3Rfb2JqZWN0X3VucmVmKHNpbmtwYWQpOworCisgICAgaWYgKHN0cmVhbS0+cGFyc2Vy
KSB7CisgICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4oc291cmNlLT5wYXJlbnQpLCBzdHJlYW0t
PnBhcnNlcik7CisgICAgICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoc3Ry
ZWFtLT5wYXJzZXIpOworICAgICAgICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19w
YWQoc3RyZWFtLT5wYXJzZXIsICJzaW5rIik7CisgICAgICAgIGdzdF9wYWRfbGluayhzcmNwYWQs
IHNpbmtwYWQpOworICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHNyY3BhZCk7CisgICAgICAgIGdz
dF9vYmplY3RfdW5yZWYoc2lua3BhZCk7CisgICAgICAgIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dl
dF9zdGF0aWNfcGFkKHN0cmVhbS0+cGFyc2VyLCAic3JjIik7CisgICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3Qoc3JjcGFkLCAibm90aWZ5OjpjYXBzIiwgR19DQUxMQkFDSyh3ZWJLaXRNZWRpYVNyY1Bh
cnNlck5vdGlmeUNhcHMpLCBzdHJlYW0pOworICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHNyY3Bh
ZCk7CisgICAgICAgIGdzdF9jYXBzX3VucmVmKGNhcHMpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgZ19zaWduYWxfY29ubmVjdChzcmNwYWQsICJub3RpZnk6OmNhcHMiLCBHX0NBTExC
QUNLKHdlYktpdE1lZGlhU3JjUGFyc2VyTm90aWZ5Q2FwcyksIHN0cmVhbSk7CisKKyAgICAvLyBU
T0RPOiBBdG9taWMgaW50cywgR1JlZlB0cgorICAgIGdjaGFyKiBwYWROYW1lID0gZ19zdHJkdXBf
cHJpbnRmKCJzcmNfJXUiLCBzb3VyY2UtPnBhcmVudC0+cHJpdi0+bnVtYmVyT2ZQYWRzKyspOwor
ICAgIGdob3N0cGFkID0gZ3N0X2dob3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZShwYWROYW1lLCBz
cmNwYWQsIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCgmc3JjVGVtcGxhdGUpKTsKKyAgICBn
c3Rfb2JqZWN0X3VucmVmKHNyY3BhZCk7CisKKyAgICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlv
bihnaG9zdHBhZCwgd2ViS2l0TWVkaWFTcmNRdWVyeVdpdGhQYXJlbnQpOworICAgIGdzdF9wYWRf
c2V0X2V2ZW50X2Z1bmN0aW9uKGdob3N0cGFkLCB3ZWJLaXRNZWRpYVNyY0V2ZW50V2l0aFBhcmVu
dCk7CisKKyAgICBnc3RfcGFkX3NldF9lbGVtZW50X3ByaXZhdGUoZ2hvc3RwYWQsIHN0cmVhbSk7
CisgICAgZ3N0X3BhZF9hZGRfcHJvYmUoZ2hvc3RwYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZG
RVIsIChHc3RQYWRQcm9iZUNhbGxiYWNrKSB3ZWJLaXRXZWJTcmNCdWZmZXJQcm9iZSwgc3RyZWFt
LCBudWxscHRyKTsKKworICAgIGdzdF9wYWRfc2V0X2FjdGl2ZShnaG9zdHBhZCwgVFJVRSk7Cisg
ICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChHU1RfRUxFTUVOVChzb3VyY2UtPnBhcmVudCksIGdob3N0
cGFkKTsKKyAgICBzdHJlYW0tPnNyY3BhZCA9IGdob3N0cGFkOworICAgIHN0cmVhbS0+Y2FwcyA9
IGNhcHM7CisKKyAgICBjb25zdCBnY2hhciogc3RydWN0dXJlTmFtZSA9IGdzdF9zdHJ1Y3R1cmVf
Z2V0X25hbWUocyk7CisgICAgR3N0VmlkZW9JbmZvIGluZm87CisgICAgaWYgKGdfc3RyX2hhc19w
cmVmaXgoc3RydWN0dXJlTmFtZSwgInZpZGVvLyIpICYmIGdzdF92aWRlb19pbmZvX2Zyb21fY2Fw
cygmaW5mbywgY2FwcykpIHsKKyAgICAgICAgZmxvYXQgd2lkdGgsIGhlaWdodDsKKworICAgICAg
ICAvLyBUT0RPOiBjb3JyZWN0PworICAgICAgICB3aWR0aCA9IGluZm8ud2lkdGg7CisgICAgICAg
IGhlaWdodCA9IGluZm8uaGVpZ2h0ICogKChmbG9hdCkgaW5mby5wYXJfZCAvIChmbG9hdCkgaW5m
by5wYXJfbik7CisKKyAgICAgICAgc3RyZWFtLT5wcmVzZW50YXRpb25TaXplID0gV2ViQ29yZTo6
RmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0cmVhbS0+
cHJlc2VudGF0aW9uU2l6ZSA9IFdlYkNvcmU6OkZsb2F0U2l6ZSgpOworICAgIH0KIH0KIAotLy8g
YXBwc3JjIGNhbGxiYWNrcwotc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFWaWRlb1NyY05lZWREYXRh
TWFpbkNiKFdlYktpdE1lZGlhU3JjKiBzcmMpCitzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY0Rl
bXV4ZXJQYWRSZW1vdmVkKEdzdEVsZW1lbnQqIGRlbXV4ZXIsIEdzdFBhZCogcGFkLCBTb3VyY2Uq
IHNvdXJjZSkKIHsKLSAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7
Ci0KLSAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKLSAgICBwcml2LT5zb3VyY2VWaWRlby5wYXVz
ZWQgPSBGQUxTRTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwogfQogCi1zdGF0aWMgdm9p
ZCB3ZWJLaXRNZWRpYUF1ZGlvU3JjTmVlZERhdGFNYWluQ2IoV2ViS2l0TWVkaWFTcmMqIHNyYykK
K3N0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVu
dChTb3VyY2UqIHNvdXJjZSkKIHsKLSAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBz
cmMtPnByaXY7CisgICAgR0xpc3QqIGw7CiAKLSAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKLSAg
ICBwcml2LT5zb3VyY2VBdWRpby5wYXVzZWQgPSBGQUxTRTsKLSAgICBHU1RfT0JKRUNUX1VOTE9D
SyhzcmMpOworICAgIGZvciAobCA9IHNvdXJjZS0+c3RyZWFtczsgbDsgbCA9IGwtPm5leHQpIHsK
KyAgICAgICAgU3RyZWFtKiBzdHJlYW0gPSAoU3RyZWFtKilsLT5kYXRhOworICAgICAgICBpZiAo
IXN0cmVhbS0+YXVkaW9UcmFjayAmJiAhc3RyZWFtLT52aWRlb1RyYWNrKQorICAgICAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIFRPRE86IExvY2tpbmcKKyAgICBXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21lbnQgaW5pdGlhbGl6YXRp
b25TZWdtZW50OworCisgICAgaW5pdGlhbGl6YXRpb25TZWdtZW50LmR1cmF0aW9uID0gTWVkaWFU
aW1lKHNvdXJjZS0+cGFyZW50LT5wcml2LT5kdXJhdGlvbiwgR1NUX1NFQ09ORCk7CisgICAgZm9y
IChsID0gc291cmNlLT5zdHJlYW1zOyBsOyBsID0gbC0+bmV4dCkgeworICAgICAgICBTdHJlYW0q
IHN0cmVhbSA9IChTdHJlYW0qKWwtPmRhdGE7CisgICAgICAgIEdzdENhcHMqIGNhcHMgPSBzdHJl
YW0tPmNhcHM7CisKKyAgICAgICAgaWYgKHN0cmVhbS0+YXVkaW9UcmFjaykgeworICAgICAgICAg
ICAgV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25TZWdt
ZW50OjpBdWRpb1RyYWNrSW5mb3JtYXRpb24gaW5mbzsKKyAgICAgICAgICAgIGluZm8udHJhY2sg
PSAqc3RyZWFtLT5hdWRpb1RyYWNrOworICAgICAgICAgICAgaW5mby5kZXNjcmlwdGlvbiA9IFdl
YkNvcmU6OkdTdHJlYW1lck1lZGlhRGVzY3JpcHRpb246OmNyZWF0ZShzdHJlYW0tPmNhcHMpOwor
ICAgICAgICAgICAgaW5pdGlhbGl6YXRpb25TZWdtZW50LmF1ZGlvVHJhY2tzLmFwcGVuZChpbmZv
KTsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0tPnZpZGVvVHJhY2spIHsKKyAgICAgICAgICAg
IFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVu
dDo6VmlkZW9UcmFja0luZm9ybWF0aW9uIGluZm87CisgICAgICAgICAgICBpbmZvLnRyYWNrID0g
KnN0cmVhbS0+dmlkZW9UcmFjazsKKyAgICAgICAgICAgIGluZm8uZGVzY3JpcHRpb24gPSBXZWJD
b3JlOjpHU3RyZWFtZXJNZWRpYURlc2NyaXB0aW9uOjpjcmVhdGUoc3RyZWFtLT5jYXBzKTsKKyAg
ICAgICAgICAgIGluaXRpYWxpemF0aW9uU2VnbWVudC52aWRlb1RyYWNrcy5hcHBlbmQoaW5mbyk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgc291cmNlLT5wYXJlbnQtPnByaXYtPm1lZGlhU291cmNl
Q2xpZW50LT5kaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50KHNvdXJjZS0+c291cmNlQnVm
ZmVyLCBpbml0aWFsaXphdGlvblNlZ21lbnQpOworCisgICAgZm9yIChsID0gc291cmNlLT5zdHJl
YW1zOyBsOyBsID0gbC0+bmV4dCkgeworICAgICAgICBTdHJlYW0qIHN0cmVhbSA9IChTdHJlYW0q
KWwtPmRhdGE7CisgICAgICAgIEdMaXN0KiBtOworCisgICAgICAgIGZvciAobSA9IHN0cmVhbS0+
cGVuZGluZ1JlY2VpdmVTYW1wbGU7IG07IG0gPSBtLT5uZXh0KSB7CisgICAgICAgICAgICBQZW5k
aW5nUmVjZWl2ZVNhbXBsZSogcGVuZGluZyA9IChQZW5kaW5nUmVjZWl2ZVNhbXBsZSopbS0+ZGF0
YTsKKworICAgICAgICAgICAgUmVmUHRyPFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhU2FtcGxlPiBz
YW1wbGUgPSBXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYVNhbXBsZTo6Y3JlYXRlKHBlbmRpbmctPmJ1
ZmZlciwgcGVuZGluZy0+cHJlc2VudGF0aW9uU2l6ZSwgc3RyZWFtLT5hdWRpb1RyYWNrID8gc3Ry
ZWFtLT5hdWRpb1RyYWNrLT5nZXQoKS0+aWQoKSA6IHN0cmVhbS0+dmlkZW9UcmFjay0+Z2V0KCkt
PmlkKCkpOworICAgICAgICAgICAgc291cmNlLT5wYXJlbnQtPnByaXYtPm1lZGlhU291cmNlQ2xp
ZW50LT5kaWRSZWNlaXZlU2FtcGxlKHNvdXJjZS0+c291cmNlQnVmZmVyLCBzYW1wbGUpOworICAg
ICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZihwZW5kaW5nLT5idWZmZXIpOworICAgICAgICAgICAg
Z19mcmVlKHBlbmRpbmcpOworICAgICAgICB9CisgICAgICAgIGdfbGlzdF9mcmVlKHN0cmVhbS0+
cGVuZGluZ1JlY2VpdmVTYW1wbGUpOworICAgICAgICBzdHJlYW0tPnBlbmRpbmdSZWNlaXZlU2Ft
cGxlID0gbnVsbHB0cjsKKyAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIHdlYktpdE1lZGlhVmlkZW9T
cmNOZWVkRGF0YUNiKEdzdEFwcFNyYyosIGd1aW50IGxlbmd0aCwgZ3BvaW50ZXIgdXNlckRhdGEp
CitzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY0RlbXV4ZXJOb01vcmVQYWRzKEdzdEVsZW1lbnQq
LCBTb3VyY2UqIHNvdXJjZSkKIHsKLSAgICBXZWJLaXRNZWRpYVNyYyogc3JjID0gV0VCS0lUX01F
RElBX1NSQyh1c2VyRGF0YSk7Ci0gICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gc3Jj
LT5wcml2OworICAgIEdMaXN0KiBsOworICAgIGJvb2wgYWxsRG9uZSA9IHRydWU7CiAKLSAgICBH
U1RfREVCVUdfT0JKRUNUKHNyYywgIk5lZWQgbW9yZSBkYXRhOiAldSIsIGxlbmd0aCk7CisgICAg
c291cmNlLT5ub01vcmVQYWRzID0gdHJ1ZTsKIAotICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwot
ICAgIGlmIChwcml2LT5zb3VyY2VWaWRlby5uZWVkRGF0YS5pc1NjaGVkdWxlZCgpIHx8ICFwcml2
LT5zb3VyY2VWaWRlby5wYXVzZWQpIHsKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsK
LSAgICAgICAgcmV0dXJuOworICAgIC8vIFRPRE86IExvY2tpbmcKKyAgICBmb3IgKGwgPSBzb3Vy
Y2UtPnBhcmVudC0+cHJpdi0+c291cmNlczsgbDsgbCA9IGwtPm5leHQpIHsKKyAgICAgICAgU291
cmNlKiB0bXAgPSAoU291cmNlKilsLT5kYXRhOworCisgICAgICAgIGFsbERvbmUgPSBhbGxEb25l
ICYmIHRtcC0+bm9Nb3JlUGFkczsKKworICAgICAgICBHTGlzdCogbTsKKyAgICAgICAgZm9yICht
ID0gc291cmNlLT5zdHJlYW1zOyBtOyBtID0gbS0+bmV4dCkgeworICAgICAgICAgICAgU3RyZWFt
KiBzdHJlYW0gPSAoU3RyZWFtKiltLT5kYXRhOworCisgICAgICAgICAgICBhbGxEb25lID0gYWxs
RG9uZSAmJiBzdHJlYW0tPmNhcHMgIT0gbnVsbHB0cjsKKyAgICAgICAgfQogICAgIH0KIAotICAg
IGdzdF9vYmplY3RfcmVmKHNyYyk7Ci0gICAgcHJpdi0+c291cmNlVmlkZW8ubmVlZERhdGEuc2No
ZWR1bGUoIltXZWJLaXRdIHdlYktpdE1lZGlhVmlkZW9TcmNOZWVkRGF0YU1haW5DYiIsIHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPihzdGQ6OmJpbmQod2ViS2l0TWVkaWFWaWRlb1NyY05lZWREYXRhTWFp
bkNiLCBzcmMpKSwgR19QUklPUklUWV9ERUZBVUxULAotICAgICAgICBbc3JjXSB7IGdzdF9vYmpl
Y3RfdW5yZWYoc3JjKTsgfSk7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKKyAgICBpZiAo
YWxsRG9uZSkgeworICAgICAgICBzb3VyY2UtPnBhcmVudC0+cHJpdi0+bm9Nb3JlUGFkcyA9IHRy
dWU7CisgICAgICAgIGdzdF9lbGVtZW50X25vX21vcmVfcGFkcyhHU1RfRUxFTUVOVChzb3VyY2Ut
PnBhcmVudCkpOworICAgICAgICB3ZWJLaXRNZWRpYVNyY0RvQXN5bmNEb25lKHNvdXJjZS0+cGFy
ZW50KTsKKyAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIHdlYktpdE1lZGlhQXVkaW9TcmNOZWVkRGF0
YUNiKEdzdEFwcFNyYyosIGd1aW50IGxlbmd0aCwgZ3BvaW50ZXIgdXNlckRhdGEpCitzdGF0aWMg
dm9pZCB3ZWJLaXRNZWRpYVNyY0hhdmVUeXBlKEdzdEVsZW1lbnQqIHR5cGVmaW5kLCBndWludCBw
cm9iYWJpbGl0eSwgR3N0Q2FwcyogY2FwcywgU291cmNlKiBzb3VyY2UpCiB7Ci0gICAgV2ViS2l0
TWVkaWFTcmMqIHNyYyA9IFdFQktJVF9NRURJQV9TUkModXNlckRhdGEpOwotICAgIFdlYktpdE1l
ZGlhU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKyAgICBHc3RTdHJ1Y3R1cmUqIHMgPSBn
c3RfY2Fwc19nZXRfc3RydWN0dXJlKGNhcHMsIDApOwogCi0gICAgR1NUX0RFQlVHX09CSkVDVChz
cmMsICJOZWVkIG1vcmUgZGF0YTogJXUiLCBsZW5ndGgpOwotCi0gICAgR1NUX09CSkVDVF9MT0NL
KHNyYyk7Ci0gICAgaWYgKHByaXYtPnNvdXJjZUF1ZGlvLm5lZWREYXRhLmlzU2NoZWR1bGVkKCkg
fHwgIXByaXYtPnNvdXJjZUF1ZGlvLnBhdXNlZCkgewotICAgICAgICBHU1RfT0JKRUNUX1VOTE9D
SyhzcmMpOworICAgIGlmIChzb3VyY2UtPmRlbXV4ZXIgfHwgc291cmNlLT5zdHJlYW1zKQogICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzLCAidmlkZW8v
d2VibSIpIHx8IGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUocywgImF1ZGlvL3dlYm0iKSkgeworICAg
ICAgICBzb3VyY2UtPmRlbXV4ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoIm1hdHJvc2th
ZGVtdXgiLCBOVUxMKTsKKyAgICB9IGVsc2UgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUocywg
InZpZGVvL3F1aWNrdGltZSIpIHx8IGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUocywgImF1ZGlvL3gt
bTRhIikKKyAgICAgICAgICAgICAgIHx8IGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUocywgImFwcGxp
Y2F0aW9uL3gtM2dwIikpIHsKKyAgICAgICAgc291cmNlLT5kZW11eGVyID0gZ3N0X2VsZW1lbnRf
ZmFjdG9yeV9tYWtlKCJxdGRlbXV4IiwgTlVMTCk7CisgICAgfSBlbHNlIGlmIChnc3Rfc3RydWN0
dXJlX2hhc19uYW1lKHMsICJ2aWRlby9tcGVndHMiKSkgeworICAgICAgICBzb3VyY2UtPmRlbXV4
ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInRzZGVtdXgiLCBOVUxMKTsKKyAgICB9IGVs
c2UgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUocywgImF1ZGlvL21wZWciKSkgeworICAgICAg
ICBnaW50IG1wZWd2ZXJzaW9uID0gLTE7CisKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfaW50
KHMsICJtcGVndmVyc2lvbiIsICZtcGVndmVyc2lvbik7CisgICAgICAgIGlmIChtcGVndmVyc2lv
biA9PSAxKSB7CisgICAgICAgICAgICAvLyBUT0RPOiBNUDMKKyAgICAgICAgICAgIGdfYXNzZXJ0
X25vdF9yZWFjaGVkKCk7CisgICAgICAgIH0gZWxzZSBpZiAobXBlZ3ZlcnNpb24gPT0gMiB8fCBt
cGVndmVyc2lvbiA9PSA0KSB7CisgICAgICAgICAgICAvLyBUT0RPOiBBQUMKKyAgICAgICAgICAg
IGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBn
X2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Z19hc3NlcnRfbm90X3JlYWNoZWQoKTsKICAgICB9CiAKLSAgICBnc3Rfb2JqZWN0X3JlZihzcmMp
OwotICAgIHByaXYtPnNvdXJjZUF1ZGlvLm5lZWREYXRhLnNjaGVkdWxlKCJbV2ViS2l0XSB3ZWJL
aXRNZWRpYUF1ZGlvU3JjTmVlZERhdGFNYWluQ2IiLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4oc3Rk
OjpiaW5kKHdlYktpdE1lZGlhQXVkaW9TcmNOZWVkRGF0YU1haW5DYiwgc3JjKSksIEdfUFJJT1JJ
VFlfREVGQVVMVCwKLSAgICAgICAgW3NyY10geyBnc3Rfb2JqZWN0X3VucmVmKHNyYyk7IH0pOwot
ICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CisgICAgaWYgKHNvdXJjZS0+ZGVtdXhlcikgewor
ICAgICAgICBzb3VyY2UtPm11bHRpcXVldWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoIm11
bHRpcXVldWUiLCBOVUxMKTsKKworICAgICAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU4oc291
cmNlLT5wYXJlbnQpLCBzb3VyY2UtPmRlbXV4ZXIsIHNvdXJjZS0+bXVsdGlxdWV1ZSwgbnVsbHB0
cik7CisgICAgICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoc291cmNlLT5k
ZW11eGVyKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChzb3Vy
Y2UtPm11bHRpcXVldWUpOworCisgICAgICAgIGdzdF9lbGVtZW50X2xpbmtfcGFkcyh0eXBlZmlu
ZCwgInNyYyIsIHNvdXJjZS0+ZGVtdXhlciwgInNpbmsiKTsKKworICAgICAgICBnX3NpZ25hbF9j
b25uZWN0KHNvdXJjZS0+ZGVtdXhlciwgInBhZC1hZGRlZCIsIEdfQ0FMTEJBQ0sod2ViS2l0TWVk
aWFTcmNEZW11eGVyUGFkQWRkZWQpLCBzb3VyY2UpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KHNvdXJjZS0+ZGVtdXhlciwgInBhZC1yZW1vdmVkIiwgR19DQUxMQkFDSyh3ZWJLaXRNZWRpYVNy
Y0RlbXV4ZXJQYWRSZW1vdmVkKSwgc291cmNlKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChz
b3VyY2UtPmRlbXV4ZXIsICJuby1tb3JlLXBhZHMiLCBHX0NBTExCQUNLKHdlYktpdE1lZGlhU3Jj
RGVtdXhlck5vTW9yZVBhZHMpLCBzb3VyY2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGdfYXNz
ZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgfQogfQogCi1zdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVZp
ZGVvU3JjRW5vdWdoRGF0YU1haW5DYihXZWJLaXRNZWRpYVNyYyogc3JjKQorLy8gdXJpIGhhbmRs
ZXIgaW50ZXJmYWNlCitzdGF0aWMgR3N0VVJJVHlwZSB3ZWJLaXRNZWRpYVNyY1VyaUdldFR5cGUo
R1R5cGUpCiB7Ci0gICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2Owor
ICAgIHJldHVybiBHU1RfVVJJX1NSQzsKK30KIAotICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwot
ICAgIHByaXYtPnNvdXJjZVZpZGVvLnBhdXNlZCA9IFRSVUU7Ci0gICAgR1NUX09CSkVDVF9VTkxP
Q0soc3JjKTsKK2NvbnN0IGdjaGFyKiBjb25zdCogd2ViS2l0TWVkaWFTcmNHZXRQcm90b2NvbHMo
R1R5cGUpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHByb3RvY29sc1tdID0geyJtZWRpYXNv
dXJjZWJsb2IiLCAwIH07CisgICAgcmV0dXJuIHByb3RvY29sczsKIH0KIAotc3RhdGljIHZvaWQg
d2ViS2l0TWVkaWFBdWRpb1NyY0Vub3VnaERhdGFNYWluQ2IoV2ViS2l0TWVkaWFTcmMqIHNyYykK
K3N0YXRpYyBnY2hhciogd2ViS2l0TWVkaWFTcmNHZXRVcmkoR3N0VVJJSGFuZGxlciogaGFuZGxl
cikKIHsKLSAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CisgICAg
V2ViS2l0TWVkaWFTcmMqIHNyYyA9IFdFQktJVF9NRURJQV9TUkMoaGFuZGxlcik7CisgICAgZ2No
YXIqIHJldDsKIAogICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwotICAgIHByaXYtPnNvdXJjZUF1
ZGlvLnBhdXNlZCA9IFRSVUU7CisgICAgcmV0ID0gZ19zdHJkdXAoc3JjLT5wcml2LT5sb2NhdGlv
bik7CiAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKKyAgICByZXR1cm4gcmV0OwogfQogCi1z
dGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVZpZGVvU3JjRW5vdWdoRGF0YUNiKEdzdEFwcFNyYyosIGdw
b2ludGVyIHVzZXJEYXRhKQorc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhU3JjU2V0VXJpKEdz
dFVSSUhhbmRsZXIqIGhhbmRsZXIsIGNvbnN0IGdjaGFyKiB1cmksIEdFcnJvcioqKQogewotICAg
IFdlYktpdE1lZGlhU3JjKiBzcmMgPSBXRUJLSVRfTUVESUFfU1JDKHVzZXJEYXRhKTsKKyAgICBX
ZWJLaXRNZWRpYVNyYyogc3JjID0gV0VCS0lUX01FRElBX1NSQyhoYW5kbGVyKTsKICAgICBXZWJL
aXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CiAKLSAgICBHU1RfREVCVUdfT0JK
RUNUKHNyYywgIkhhdmUgZW5vdWdoIGRhdGEiKTsKKyAgICBpZiAoR1NUX1NUQVRFKHNyYykgPj0g
R1NUX1NUQVRFX1BBVVNFRCkgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIlVSSSBj
YW4gb25seSBiZSBzZXQgaW4gc3RhdGVzIDwgUEFVU0VEIik7CisgICAgICAgIHJldHVybiBGQUxT
RTsKKyAgICB9CiAKICAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKLSAgICBpZiAocHJpdi0+c291
cmNlVmlkZW8uZW5vdWdoRGF0YS5pc1NjaGVkdWxlZCgpIHx8IHByaXYtPnNvdXJjZVZpZGVvLnBh
dXNlZCkgeworICAgIGdfZnJlZShwcml2LT5sb2NhdGlvbik7CisgICAgcHJpdi0+bG9jYXRpb24g
PSAwOworICAgIGlmICghdXJpKSB7CiAgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7Ci0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIFRSVUU7CiAgICAgfQogCi0gICAgZ3N0X29i
amVjdF9yZWYoc3JjKTsKLSAgICBwcml2LT5zb3VyY2VWaWRlby5lbm91Z2hEYXRhLnNjaGVkdWxl
KCJbV2ViS2l0XSB3ZWJLaXRNZWRpYVZpZGVvU3JjRW5vdWdoRGF0YU1haW5DYiIsIHN0ZDo6ZnVu
Y3Rpb248dm9pZCgpPihzdGQ6OmJpbmQod2ViS2l0TWVkaWFWaWRlb1NyY0Vub3VnaERhdGFNYWlu
Q2IsIHNyYykpLCBHX1BSSU9SSVRZX0RFRkFVTFQsCi0gICAgICAgIFtzcmNdIHsgZ3N0X29iamVj
dF91bnJlZihzcmMpOyB9KTsKKyAgICBXZWJDb3JlOjpVUkwgdXJsKFdlYkNvcmU6OlVSTCgpLCB1
cmkpOwogCisgICAgcHJpdi0+bG9jYXRpb24gPSBnX3N0cmR1cCh1cmwuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CiAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKKyAgICByZXR1cm4gVFJVRTsK
IH0KLQotc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFBdWRpb1NyY0Vub3VnaERhdGFDYihHc3RBcHBT
cmMqLCBncG9pbnRlciB1c2VyRGF0YSkKK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjVXJpSGFu
ZGxlckluaXQoZ3BvaW50ZXIgZ0lmYWNlLCBncG9pbnRlcikKIHsKLSAgICBXZWJLaXRNZWRpYVNy
Yyogc3JjID0gV0VCS0lUX01FRElBX1NSQyh1c2VyRGF0YSk7Ci0gICAgV2ViS2l0TWVkaWFTcmNQ
cml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwotCi0gICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJI
YXZlIGVub3VnaCBkYXRhIik7CisgICAgR3N0VVJJSGFuZGxlckludGVyZmFjZSogaWZhY2UgPSAo
R3N0VVJJSGFuZGxlckludGVyZmFjZSAqKSBnSWZhY2U7CiAKLSAgICBHU1RfT0JKRUNUX0xPQ0so
c3JjKTsKLSAgICBpZiAocHJpdi0+c291cmNlQXVkaW8uZW5vdWdoRGF0YS5pc1NjaGVkdWxlZCgp
IHx8IHByaXYtPnNvdXJjZUF1ZGlvLnBhdXNlZCkgewotICAgICAgICBHU1RfT0JKRUNUX1VOTE9D
SyhzcmMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmYWNlLT5nZXRfdHlwZSA9IHdl
YktpdE1lZGlhU3JjVXJpR2V0VHlwZTsKKyAgICBpZmFjZS0+Z2V0X3Byb3RvY29scyA9IHdlYktp
dE1lZGlhU3JjR2V0UHJvdG9jb2xzOworICAgIGlmYWNlLT5nZXRfdXJpID0gd2ViS2l0TWVkaWFT
cmNHZXRVcmk7CisgICAgaWZhY2UtPnNldF91cmkgPSB3ZWJLaXRNZWRpYVNyY1NldFVyaTsKK30K
IAotICAgIGdzdF9vYmplY3RfcmVmKHNyYyk7Ci0gICAgcHJpdi0+c291cmNlQXVkaW8uZW5vdWdo
RGF0YS5zY2hlZHVsZSgiW1dlYktpdF0gd2ViS2l0TWVkaWFBdWRpb1NyY0Vub3VnaERhdGFNYWlu
Q2IiLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4oc3RkOjpiaW5kKHdlYktpdE1lZGlhQXVkaW9TcmNF
bm91Z2hEYXRhTWFpbkNiLCBzcmMpKSwgR19QUklPUklUWV9ERUZBVUxULAotICAgICAgICBbc3Jj
XSB7IGdzdF9vYmplY3RfdW5yZWYoc3JjKTsgfSk7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAg
ICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOworUGFzc1JlZlB0cjxNZWRpYVNvdXJjZUNsaWVudEdT
dHJlYW1lcj4gTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXI6OmNyZWF0ZShXZWJLaXRNZWRpYVNy
Yyogc3JjKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFTb3VyY2VDbGllbnRHU3Ry
ZWFtZXIoc3JjKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHdlYktpdE1lZGlhVmlkZW9TcmNTZWVrTWFp
bkNiKFdlYktpdE1lZGlhU3JjKikKK01lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyOjpNZWRpYVNv
dXJjZUNsaWVudEdTdHJlYW1lcihXZWJLaXRNZWRpYVNyYyogc3JjKQorICAgIDogUmVmQ291bnRl
ZDxNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lcj4oKQorICAgICwgbV9zcmMoYWRvcHRHUmVmKHN0
YXRpY19jYXN0PFdlYktpdE1lZGlhU3JjKj4oZ3N0X29iamVjdF9yZWYoc3JjKSkpKQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9zcmMtPnByaXYtPm1lZGlhU291cmNlQ2xpZW50ID0g
dGhpczsKIH0KIAotCi1zdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYUF1ZGlvU3JjU2Vla01haW5DYihX
ZWJLaXRNZWRpYVNyYyopCitNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lcjo6fk1lZGlhU291cmNl
Q2xpZW50R1N0cmVhbWVyKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1zdGF0aWMg
Z2Jvb2xlYW4gd2ViS2l0TWVkaWFWaWRlb1NyY1NlZWtEYXRhQ2IoR3N0QXBwU3JjKiwgZ3VpbnQ2
NCBvZmZzZXQsIGdwb2ludGVyIHVzZXJEYXRhKQorTWVkaWFTb3VyY2VQcml2YXRlOjpBZGRTdGF0
dXMgTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXI6OmFkZFNvdXJjZUJ1ZmZlcihQYXNzUmVmUHRy
PFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+IHNvdXJjZUJ1ZmZlclByaXZhdGUsIGNvbnN0
IENvbnRlbnRUeXBlJiBjb250ZW50VHlwZSkKIHsKLSAgICBXZWJLaXRNZWRpYVNyYyogc3JjID0g
V0VCS0lUX01FRElBX1NSQyh1c2VyRGF0YSk7Ci0gICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBw
cml2ID0gc3JjLT5wcml2OworICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IG1fc3Jj
LT5wcml2OwogCi0gICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJTZWVraW5nIHRvIG9mZnNldDog
JSIgR19HVUlOVDY0X0ZPUk1BVCwgb2Zmc2V0KTsKLSAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsK
LSAgICBpZiAob2Zmc2V0ID09IHByaXYtPnNvdXJjZVZpZGVvLm9mZnNldCAmJiBwcml2LT5zb3Vy
Y2VWaWRlby5yZXF1ZXN0ZWRPZmZzZXQgPT0gcHJpdi0+c291cmNlVmlkZW8ub2Zmc2V0KSB7Ci0g
ICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7Ci0gICAgICAgIHJldHVybiBUUlVFOworICAg
IGlmIChwcml2LT5ub01vcmVQYWRzKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QobV9zcmMu
Z2V0KCksICJBZGRpbmcgbmV3IHNvdXJjZSBidWZmZXJzIGFmdGVyIGZpcnN0IGRhdGEgbm90IHN1
cHBvcnRlZCB5ZXQiKTsKKyAgICAgICAgcmV0dXJuIE1lZGlhU291cmNlUHJpdmF0ZTo6Tm90U3Vw
cG9ydGVkOwogICAgIH0KIAotICAgIGlmICghcHJpdi0+c2Vla2FibGUpIHsKLSAgICAgICAgR1NU
X09CSkVDVF9VTkxPQ0soc3JjKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgICBp
ZiAob2Zmc2V0ID4gcHJpdi0+c291cmNlVmlkZW8uc2l6ZSkgewotICAgICAgICBHU1RfT0JKRUNU
X1VOTE9DSyhzcmMpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQorICAgIEdTVF9PQkpF
Q1RfTE9DSyhtX3NyYy5nZXQoKSk7CiAKLSAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIkRvaW5n
IHJhbmdlLXJlcXVlc3Qgc2VlayIpOwotICAgIHByaXYtPnNvdXJjZVZpZGVvLnJlcXVlc3RlZE9m
ZnNldCA9IG9mZnNldDsKKyAgICBTb3VyY2UqIHNvdXJjZSA9IGdfbmV3MChTb3VyY2UsIDEpOwor
ICAgIGd1aW50IG51bWJlck9mU291cmNlcyA9IGdfbGlzdF9sZW5ndGgocHJpdi0+c291cmNlcyk7
CisgICAgR1VuaXF1ZVB0cjxnY2hhcj4gc3JjTmFtZShnX3N0cmR1cF9wcmludGYoInNyYyV1Iiwg
bnVtYmVyT2ZTb3VyY2VzKSk7CisgICAgR1VuaXF1ZVB0cjxnY2hhcj4gdHlwZWZpbmROYW1lKGdf
c3RyZHVwX3ByaW50ZigidHlwZWZpbmQldSIsIG51bWJlck9mU291cmNlcykpOwogCi0gICAgZ3N0
X29iamVjdF9yZWYoc3JjKTsKLSAgICBwcml2LT5zb3VyY2VWaWRlby5zZWVrLnNjaGVkdWxlKCJb
V2ViS2l0XSB3ZWJLaXRNZWRpYVZpZGVvU3JjU2Vla01haW5DYiIsIHN0ZDo6ZnVuY3Rpb248dm9p
ZCgpPihzdGQ6OmJpbmQod2ViS2l0TWVkaWFWaWRlb1NyY1NlZWtNYWluQ2IsIHNyYykpLCBHX1BS
SU9SSVRZX0RFRkFVTFQsCi0gICAgICAgIFtzcmNdIHsgZ3N0X29iamVjdF91bnJlZihzcmMpOyB9
KTsKKyAgICBzb3VyY2UtPnBhcmVudCA9IG1fc3JjLmdldCgpOworICAgIHNvdXJjZS0+c3JjID0g
Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhcHBzcmMiLCBzcmNOYW1lLmdldCgpKTsKKyAgICBz
b3VyY2UtPnR5cGVmaW5kID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ0eXBlZmluZCIsIHR5
cGVmaW5kTmFtZS5nZXQoKSk7CisgICAgZ19zaWduYWxfY29ubmVjdChzb3VyY2UtPnR5cGVmaW5k
LCAiaGF2ZS10eXBlIiwgR19DQUxMQkFDSyh3ZWJLaXRNZWRpYVNyY0hhdmVUeXBlKSwgc291cmNl
KTsKKyAgICBzb3VyY2UtPnNvdXJjZUJ1ZmZlciA9IHNvdXJjZUJ1ZmZlclByaXZhdGUuZ2V0KCk7
CiAKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOworICAgIHByaXYtPnNvdXJjZXMgPSBnX2xp
c3RfcHJlcGVuZChwcml2LT5zb3VyY2VzLCBzb3VyY2UpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NL
KG1fc3JjLmdldCgpKTsKIAotICAgIHJldHVybiBUUlVFOworICAgIGdzdF9iaW5fYWRkX21hbnko
R1NUX0JJTihtX3NyYy5nZXQoKSksIHNvdXJjZS0+c3JjLCBzb3VyY2UtPnR5cGVmaW5kLCBudWxs
cHRyKTsKKyAgICBnc3RfZWxlbWVudF9saW5rX3BhZHMoc291cmNlLT5zcmMsICJzcmMiLCBzb3Vy
Y2UtPnR5cGVmaW5kLCAic2luayIpOworCisgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRo
X3BhcmVudChzb3VyY2UtPnNyYyk7CisgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3Bh
cmVudChzb3VyY2UtPnR5cGVmaW5kKTsKKworICAgIHJldHVybiBNZWRpYVNvdXJjZVByaXZhdGU6
Ok9rOwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0TWVkaWFBdWRpb1NyY1NlZWtEYXRhQ2Io
R3N0QXBwU3JjKiwgZ3VpbnQ2NCBvZmZzZXQsIGdwb2ludGVyIHVzZXJEYXRhKQordm9pZCBNZWRp
YVNvdXJjZUNsaWVudEdTdHJlYW1lcjo6ZHVyYXRpb25DaGFuZ2VkKGNvbnN0IE1lZGlhVGltZSYg
ZHVyYXRpb24pCiB7Ci0gICAgV2ViS2l0TWVkaWFTcmMqIHNyYyA9IFdFQktJVF9NRURJQV9TUkMo
dXNlckRhdGEpOwotICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsK
KyAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBtX3NyYy0+cHJpdjsKKyAgICBHc3RD
bG9ja1RpbWUgZ3N0RHVyYXRpb24gPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKGR1cmF0aW9uLnRp
bWVWYWx1ZSgpLCBHU1RfU0VDT05ELCBkdXJhdGlvbi50aW1lU2NhbGUoKSk7CiAKLSAgICBHU1Rf
REVCVUdfT0JKRUNUKHNyYywgIlNlZWtpbmcgdG8gb2Zmc2V0OiAlIiBHX0dVSU5UNjRfRk9STUFU
LCBvZmZzZXQpOwotICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwotICAgIGlmIChvZmZzZXQgPT0g
cHJpdi0+c291cmNlQXVkaW8ub2Zmc2V0ICYmIHByaXYtPnNvdXJjZUF1ZGlvLnJlcXVlc3RlZE9m
ZnNldCA9PSBwcml2LT5zb3VyY2VBdWRpby5vZmZzZXQpIHsKLSAgICAgICAgR1NUX09CSkVDVF9V
TkxPQ0soc3JjKTsKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQorICAgIEdTVF9ERUJVR19P
QkpFQ1QobV9zcmMuZ2V0KCksICJSZWNlaXZlZCBkdXJhdGlvbjogJSIgR1NUX1RJTUVfRk9STUFU
LCBHU1RfVElNRV9BUkdTKGdzdER1cmF0aW9uKSk7CiAKLSAgICBpZiAoIXByaXYtPnNlZWthYmxl
KSB7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7Ci0gICAgICAgIHJldHVybiBGQUxT
RTsKLSAgICB9Ci0gICAgaWYgKG9mZnNldCA+IHByaXYtPnNvdXJjZUF1ZGlvLnNpemUpIHsKLSAg
ICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAg
IEdTVF9PQkpFQ1RfTE9DSyhtX3NyYy5nZXQoKSk7CisgICAgcHJpdi0+ZHVyYXRpb24gPSBnc3RE
dXJhdGlvbjsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyhtX3NyYy5nZXQoKSk7CisgICAgZ3N0X2Vs
ZW1lbnRfcG9zdF9tZXNzYWdlKEdTVF9FTEVNRU5UKG1fc3JjLmdldCgpKSwgZ3N0X21lc3NhZ2Vf
bmV3X2R1cmF0aW9uX2NoYW5nZWQoR1NUX09CSkVDVChtX3NyYy5nZXQoKSkpKTsKK30KKworYm9v
bCBNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lcjo6YXBwZW5kKFBhc3NSZWZQdHI8U291cmNlQnVm
ZmVyUHJpdmF0ZUdTdHJlYW1lcj4gc291cmNlQnVmZmVyUHJpdmF0ZSwgY29uc3QgdW5zaWduZWQg
Y2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0
ZSogcHJpdiA9IG1fc3JjLT5wcml2OworICAgIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1df
T0s7CisgICAgR3N0QnVmZmVyKiBidWZmZXI7CisgICAgU291cmNlKiBzb3VyY2UgPSAwOworICAg
IEdMaXN0ICpsOworCisgICAgZm9yIChsID0gcHJpdi0+c291cmNlczsgbDsgbCA9IGwtPm5leHQp
IHsKKyAgICAgICAgU291cmNlICp0bXAgPSBzdGF0aWNfY2FzdDxTb3VyY2UqPihsLT5kYXRhKTsK
KyAgICAgICAgaWYgKHRtcC0+c291cmNlQnVmZmVyID09IHNvdXJjZUJ1ZmZlclByaXZhdGUuZ2V0
KCkpIHsKKyAgICAgICAgICAgIHNvdXJjZSA9IHRtcDsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CiAgICAgfQogCi0gICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJEb2luZyByYW5nZS1y
ZXF1ZXN0IHNlZWsiKTsKLSAgICBwcml2LT5zb3VyY2VBdWRpby5yZXF1ZXN0ZWRPZmZzZXQgPSBv
ZmZzZXQ7CisgICAgaWYgKCFzb3VyY2UgfHwgIXNvdXJjZS0+c3JjKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBnc3Rfb2JqZWN0X3JlZihzcmMpOwotICAgIHByaXYtPnNvdXJjZUF1ZGlv
LnNlZWsuc2NoZWR1bGUoIltXZWJLaXRdIHdlYktpdE1lZGlhQXVkaW9TcmNTZWVrTWFpbkNiIiwg
c3RkOjpmdW5jdGlvbjx2b2lkKCk+KHN0ZDo6YmluZCh3ZWJLaXRNZWRpYUF1ZGlvU3JjU2Vla01h
aW5DYiwgc3JjKSksIEdfUFJJT1JJVFlfREVGQVVMVCwKLSAgICAgICAgW3NyY10geyBnc3Rfb2Jq
ZWN0X3VucmVmKHNyYyk7IH0pOworICAgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxv
YyhsZW5ndGgpOworICAgIGdzdF9idWZmZXJfZmlsbChidWZmZXIsIDAsIGRhdGEsIGxlbmd0aCk7
CiAKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOworICAgIHJldCA9IGdzdF9hcHBfc3JjX3B1
c2hfYnVmZmVyKEdTVF9BUFBfU1JDKHNvdXJjZS0+c3JjKSwgYnVmZmVyKTsKKyAgICBHU1RfRVJS
T1JfT0JKRUNUKG1fc3JjLmdldCgpLCAicHVzaCBidWZmZXIgJWRcbiIsIChpbnQpcmV0KTsKIAot
ICAgIHJldHVybiBUUlVFOworICAgIGlmIChyZXQgPT0gR1NUX0ZMT1dfT0spCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIHdl
YktpdE1lZGlhU3JjU2V0TWVkaWFQbGF5ZXIoV2ViS2l0TWVkaWFTcmMqIHNyYywgV2ViQ29yZTo6
TWVkaWFQbGF5ZXIqIHBsYXllcikKK3ZvaWQgTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXI6Om1h
cmtFbmRPZlN0cmVhbShNZWRpYVNvdXJjZVByaXZhdGU6OkVuZE9mU3RyZWFtU3RhdHVzIHN0YXR1
cykKIHsKLSAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7Ci0gICAg
cHJpdi0+cGxheWVyID0gcGxheWVyOwotfQorICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJp
diA9IG1fc3JjLT5wcml2OworICAgIEdMaXN0ICpsOwogCi12b2lkIHdlYktpdE1lZGlhU3JjU2V0
UGxheUJpbihXZWJLaXRNZWRpYVNyYyogc3JjLCBHc3RFbGVtZW50KiBwbGF5QmluKQotewotICAg
IFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKLSAgICBwcml2LT5wbGF5
YmluID0gcGxheUJpbjsKLX0KKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fc3JjLmdldCgpLCAiSGF2
ZSBFT1MiKTsKIAotTWVkaWFTb3VyY2VDbGllbnRHc3RyZWFtZXI6Ok1lZGlhU291cmNlQ2xpZW50
R3N0cmVhbWVyKFdlYktpdE1lZGlhU3JjKiBzcmMpCi0gICAgOiBtX3NyYyhzdGF0aWNfY2FzdDxX
ZWJLaXRNZWRpYVNyYyo+KGdzdF9vYmplY3RfcmVmKHNyYykpKQotewotfQorICAgIGlmICghcHJp
di0+bm9Nb3JlUGFkcykgeworICAgICAgICBwcml2LT5ub01vcmVQYWRzID0gdHJ1ZTsKKyAgICAg
ICAgZ3N0X2VsZW1lbnRfbm9fbW9yZV9wYWRzKEdTVF9FTEVNRU5UKG1fc3JjLmdldCgpKSk7Cisg
ICAgICAgIHdlYktpdE1lZGlhU3JjRG9Bc3luY0RvbmUobV9zcmMuZ2V0KCkpOworICAgIH0KIAot
TWVkaWFTb3VyY2VDbGllbnRHc3RyZWFtZXI6On5NZWRpYVNvdXJjZUNsaWVudEdzdHJlYW1lcigp
Ci17Ci0gICAgZ3N0X29iamVjdF91bnJlZihtX3NyYyk7CisgICAgZm9yIChsID0gcHJpdi0+c291
cmNlczsgbDsgbCA9IGwtPm5leHQpIHsKKyAgICAgICAgU291cmNlICpzb3VyY2UgPSBzdGF0aWNf
Y2FzdDxTb3VyY2UqPihsLT5kYXRhKTsKKyAgICAgICAgaWYgKHNvdXJjZS0+c3JjKQorICAgICAg
ICAgICAgZ3N0X2FwcF9zcmNfZW5kX29mX3N0cmVhbShHU1RfQVBQX1NSQyhzb3VyY2UtPnNyYykp
OworICAgIH0KIH0KIAotdm9pZCBNZWRpYVNvdXJjZUNsaWVudEdzdHJlYW1lcjo6ZGlkUmVjZWl2
ZUR1cmF0aW9uKGRvdWJsZSBkdXJhdGlvbikKK3ZvaWQgTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFt
ZXI6OnJlbW92ZWRGcm9tTWVkaWFTb3VyY2UoUGFzc1JlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRl
R1N0cmVhbWVyPiBzb3VyY2VCdWZmZXJQcml2YXRlKQogewogICAgIFdlYktpdE1lZGlhU3JjUHJp
dmF0ZSogcHJpdiA9IG1fc3JjLT5wcml2OwotICAgIEdTVF9ERUJVR19PQkpFQ1QobV9zcmMsICJS
ZWNlaXZlZCBkdXJhdGlvbjogJWxmIiwgZHVyYXRpb24pOworICAgIFNvdXJjZSogc291cmNlID0g
MDsKKyAgICBHTGlzdCAqbDsKKworICAgIGZvciAobCA9IHByaXYtPnNvdXJjZXM7IGw7IGwgPSBs
LT5uZXh0KSB7CisgICAgICAgIFNvdXJjZSAqdG1wID0gc3RhdGljX2Nhc3Q8U291cmNlKj4obC0+
ZGF0YSk7CisgICAgICAgIGlmICh0bXAtPnNvdXJjZUJ1ZmZlciA9PSBzb3VyY2VCdWZmZXJQcml2
YXRlLmdldCgpKSB7CisgICAgICAgICAgICBzb3VyY2UgPSB0bXA7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghc291cmNlIHx8ICFzb3VyY2UtPnNyYykK
KyAgICAgICAgcmV0dXJuOwogCi0gICAgR1NUX09CSkVDVF9MT0NLKG1fc3JjKTsKLSAgICBwcml2
LT5kdXJhdGlvbiA9IGR1cmF0aW9uID49IDAuMCA/IHN0YXRpY19jYXN0PGdpbnQ2ND4oZHVyYXRp
b24qR1NUX1NFQ09ORCkgOiAwOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG1fc3JjKTsKKyAgICBp
ZiAoc291cmNlLT5zcmMpCisgICAgICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0oR1NUX0FQ
UF9TUkMoc291cmNlLT5zcmMpKTsKIH0KIAotdm9pZCBNZWRpYVNvdXJjZUNsaWVudEdzdHJlYW1l
cjo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwgU3RyaW5nIHR5
cGUpCit2b2lkIE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyOjpkaWRSZWNlaXZlSW5pdGlhbGl6
YXRpb25TZWdtZW50KFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIqIHNvdXJjZUJ1ZmZlciwg
Y29uc3QgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25TZWdtZW50JiBp
bml0aWFsaXphdGlvblNlZ21lbnQpCiB7Ci0gICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2
ID0gbV9zcmMtPnByaXY7Ci0gICAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAg
ICBHc3RCdWZmZXIgKiBidWZmZXI7CisgICAgc291cmNlQnVmZmVyLT5kaWRSZWNlaXZlSW5pdGlh
bGl6YXRpb25TZWdtZW50KGluaXRpYWxpemF0aW9uU2VnbWVudCk7Cit9CiAKLSAgICBpZiAodHlw
ZS5zdGFydHNXaXRoKCJ2aWRlbyIpKSB7Ci0gICAgICAgIGlmIChwcml2LT5ub01vcmVQYWQgPT0g
RkFMU0UgJiYgcHJpdi0+c291cmNlVmlkZW8ucGFkQWRkZWQgPT0gVFJVRSkgewotICAgICAgICAg
ICAgZ3N0X2VsZW1lbnRfbm9fbW9yZV9wYWRzKEdTVF9FTEVNRU5UKG1fc3JjKSk7Ci0gICAgICAg
ICAgICBwcml2LT5ub01vcmVQYWQgPSBUUlVFOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwcml2
LT5ub01vcmVQYWQgPT0gRkFMU0UgJiYgcHJpdi0+c291cmNlVmlkZW8ucGFkQWRkZWQgPT0gRkFM
U0UpIHsKLSAgICAgICAgICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoR1NUX0VMRU1FTlQobV9zcmMp
LCBwcml2LT5zb3VyY2VWaWRlby5zcmNwYWQpOwotICAgICAgICAgICAgcHJpdi0+c291cmNlVmlk
ZW8ucGFkQWRkZWQgPSBUUlVFOwotICAgICAgICB9Ci0gICAgICAgIEdTVF9PQkpFQ1RfTE9DSyht
X3NyYyk7Ci0gICAgICAgIGJ1ZmZlciA9IFdlYkNvcmU6OmNyZWF0ZUdzdEJ1ZmZlckZvckRhdGEo
ZGF0YSwgbGVuZ3RoKTsKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sobV9zcmMpOwotCi0gICAg
ICAgIHJldCA9IGdzdF9hcHBfc3JjX3B1c2hfYnVmZmVyKEdTVF9BUFBfU1JDKHByaXYtPnNvdXJj
ZVZpZGVvLmFwcHNyYyksIGJ1ZmZlcik7Ci0gICAgfSBlbHNlIGlmICh0eXBlLnN0YXJ0c1dpdGgo
ImF1ZGlvIikpIHsKLSAgICAgICAgaWYgKHByaXYtPm5vTW9yZVBhZCA9PSBGQUxTRSAmJiBwcml2
LT5zb3VyY2VBdWRpby5wYWRBZGRlZCA9PSBUUlVFKSB7Ci0gICAgICAgICAgICBnc3RfZWxlbWVu
dF9ub19tb3JlX3BhZHMoR1NUX0VMRU1FTlQobV9zcmMpKTsKLSAgICAgICAgICAgIHByaXYtPm5v
TW9yZVBhZCA9IFRSVUU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHByaXYtPm5vTW9yZVBhZCA9
PSBGQUxTRSAmJiBwcml2LT5zb3VyY2VBdWRpby5wYWRBZGRlZCA9PSBGQUxTRSkgewotICAgICAg
ICAgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChHU1RfRUxFTUVOVChtX3NyYyksIHByaXYtPnNvdXJj
ZUF1ZGlvLnNyY3BhZCk7Ci0gICAgICAgICAgICBwcml2LT5zb3VyY2VBdWRpby5wYWRBZGRlZCA9
IFRSVUU7Ci0gICAgICAgIH0KLSAgICAgICAgR1NUX09CSkVDVF9MT0NLKG1fc3JjKTsKLSAgICAg
ICAgYnVmZmVyID0gV2ViQ29yZTo6Y3JlYXRlR3N0QnVmZmVyRm9yRGF0YShkYXRhLCBsZW5ndGgp
OwotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhtX3NyYyk7Cit2b2lkIE1lZGlhU291cmNlQ2xp
ZW50R1N0cmVhbWVyOjpkaWRSZWNlaXZlU2FtcGxlKFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFt
ZXIqIHNvdXJjZUJ1ZmZlciwgUGFzc1JlZlB0cjxNZWRpYVNhbXBsZT4gc2FtcGxlKQoreworICAg
IHNvdXJjZUJ1ZmZlci0+ZGlkUmVjZWl2ZVNhbXBsZShzYW1wbGUpOworfQogCi0gICAgICAgIHJl
dCA9IGdzdF9hcHBfc3JjX3B1c2hfYnVmZmVyKEdTVF9BUFBfU1JDKHByaXYtPnNvdXJjZUF1ZGlv
LmFwcHNyYyksIGJ1ZmZlcik7Ci0gICAgfQorfTsKIAotICAgIGlmIChyZXQgIT0gR1NUX0ZMT1df
T0sgJiYgcmV0ICE9IEdTVF9GTE9XX0VPUykKLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IobV9z
cmMsIENPUkUsIEZBSUxFRCwgKDApLCAoMCkpOworbmFtZXNwYWNlIFdURiB7Cit0ZW1wbGF0ZSA8
PiBHUmVmUHRyPFdlYktpdE1lZGlhU3JjPiBhZG9wdEdSZWYoV2ViS2l0TWVkaWFTcmMqIHB0cikK
K3sKKyAgICBBU1NFUlQoIXB0ciB8fCAhZ19vYmplY3RfaXNfZmxvYXRpbmcoR19PQkpFQ1QocHRy
KSkpOworICAgIHJldHVybiBHUmVmUHRyPFdlYktpdE1lZGlhU3JjPihwdHIsIEdSZWZQdHJBZG9w
dCk7CiB9CiAKLXZvaWQgTWVkaWFTb3VyY2VDbGllbnRHc3RyZWFtZXI6OmRpZEZpbmlzaExvYWRp
bmcoZG91YmxlKQordGVtcGxhdGUgPD4gV2ViS2l0TWVkaWFTcmMqIHJlZkdQdHI8V2ViS2l0TWVk
aWFTcmM+KFdlYktpdE1lZGlhU3JjKiBwdHIpCiB7Ci0gICAgV2ViS2l0TWVkaWFTcmNQcml2YXRl
KiBwcml2ID0gbV9zcmMtPnByaXY7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUKG1fc3JjLCAiSGF2
ZSBFT1MiKTsKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3JlZl9zaW5rKEdTVF9P
QkpFQ1QocHRyKSk7CiAKLSAgICBHU1RfT0JKRUNUX0xPQ0sobV9zcmMpOwotICAgIGlmICghcHJp
di0+c291cmNlVmlkZW8uc2Vlay5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5M
T0NLKG1fc3JjKTsKLSAgICAgICAgZ3N0X2FwcF9zcmNfZW5kX29mX3N0cmVhbShHU1RfQVBQX1NS
Qyhwcml2LT5zb3VyY2VWaWRlby5hcHBzcmMpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgR1NUX09C
SkVDVF9VTkxPQ0sobV9zcmMpOwotCi0gICAgR1NUX09CSkVDVF9MT0NLKG1fc3JjKTsKLSAgICBp
ZiAoIXByaXYtPnNvdXJjZUF1ZGlvLnNlZWsuaXNBY3RpdmUoKSkgewotICAgICAgICBHU1RfT0JK
RUNUX1VOTE9DSyhtX3NyYyk7Ci0gICAgICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0oR1NU
X0FQUF9TUkMocHJpdi0+c291cmNlQXVkaW8uYXBwc3JjKSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IEdTVF9PQkpFQ1RfVU5MT0NLKG1fc3JjKTsKKyAgICByZXR1cm4gcHRyOwogfQogCi12b2lkIE1l
ZGlhU291cmNlQ2xpZW50R3N0cmVhbWVyOjpkaWRGYWlsKCkKK3RlbXBsYXRlIDw+IHZvaWQgZGVy
ZWZHUHRyPFdlYktpdE1lZGlhU3JjPihXZWJLaXRNZWRpYVNyYyogcHRyKQogewotICAgIGdzdF9h
cHBfc3JjX2VuZF9vZl9zdHJlYW0oR1NUX0FQUF9TUkMobV9zcmMtPnByaXYtPnNvdXJjZVZpZGVv
LmFwcHNyYykpOwotICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0oR1NUX0FQUF9TUkMobV9z
cmMtPnByaXYtPnNvdXJjZUF1ZGlvLmFwcHNyYykpOworICAgIGlmIChwdHIpCisgICAgICAgIGdz
dF9vYmplY3RfdW5yZWYocHRyKTsKIH0KK307CiAKICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
V2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5oCmluZGV4IDc4ODky
YzMuLmM2NDZmZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1l
ci5oCkBAIC0yLDYgKzIsNyBAQAogICogIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBTZWJhc3Rp
YW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KICAqICBDb3B5cmln
aHQgKEMpIDIwMTMgQ29sbGFib3JhIEx0ZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMTMgT3Jhbmdl
CisgKiAgQ29weXJpZ2h0IChDKSAyMDE0IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50
cmljdWxhci5jb20+CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yMyw2ICsyNCwxMiBAQAogI2lm
IEVOQUJMRShWSURFTykgJiYgRU5BQkxFKE1FRElBX1NPVVJDRSkgJiYgVVNFKEdTVFJFQU1FUikK
IAogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisjaW5jbHVkZSAiTWVkaWFTb3VyY2UuaCIKKyNp
bmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50LmgiCisjaW5jbHVkZSAiU291cmNlQnVm
ZmVyUHJpdmF0ZS5oIgorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorCiAjaW5jbHVk
ZSA8Z3N0L2dzdC5oPgogCiBHX0JFR0lOX0RFQ0xTCkBAIC00OCwyNSArNTUsNDYgQEAgc3RydWN0
IF9XZWJLaXRNZWRpYVNyY0NsYXNzIHsKIH07CiAKIEdUeXBlIHdlYmtpdF9tZWRpYV9zcmNfZ2V0
X3R5cGUodm9pZCk7Ci12b2lkIHdlYktpdE1lZGlhU3JjU2V0TWVkaWFQbGF5ZXIoV2ViS2l0TWVk
aWFTcmMqLCBXZWJDb3JlOjpNZWRpYVBsYXllciopOwotdm9pZCB3ZWJLaXRNZWRpYVNyY1NldFBs
YXlCaW4oV2ViS2l0TWVkaWFTcmMqLCBHc3RFbGVtZW50Kik7CiAKIEdfRU5EX0RFQ0xTCiAKLWNs
YXNzIE1lZGlhU291cmNlQ2xpZW50R3N0cmVhbWVyOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVNv
dXJjZUNsaWVudEdzdHJlYW1lcj4geworbmFtZXNwYWNlIFdURiB7Cit0ZW1wbGF0ZTw+IEdSZWZQ
dHI8V2ViS2l0TWVkaWFTcmM+IGFkb3B0R1JlZihXZWJLaXRNZWRpYVNyYyogcHRyKTsKK3RlbXBs
YXRlPD4gV2ViS2l0TWVkaWFTcmMqIHJlZkdQdHI8V2ViS2l0TWVkaWFTcmM+KFdlYktpdE1lZGlh
U3JjKiBwdHIpOwordGVtcGxhdGU8PiB2b2lkIGRlcmVmR1B0cjxXZWJLaXRNZWRpYVNyYz4oV2Vi
S2l0TWVkaWFTcmMqIHB0cik7Cit9OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENv
bnRlbnRUeXBlOworY2xhc3MgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjsKK2NsYXNzIE1l
ZGlhU291cmNlR1N0cmVhbWVyOworCitjbGFzcyBNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lcjog
cHVibGljIFJlZkNvdW50ZWQ8TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXI+IHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIE1lZGlhU291cmNlQ2xpZW50R3N0cmVhbWVyKFdlYktpdE1lZGlhU3JjKik7
Ci0gICAgICAgIH5NZWRpYVNvdXJjZUNsaWVudEdzdHJlYW1lcigpOworICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lcj4gY3JlYXRlKFdlYktpdE1lZGlh
U3JjKik7CisgICAgICAgIHZpcnR1YWwgfk1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyKCk7CisK
KyAgICAgICAgLy8gRnJvbSBNZWRpYVNvdXJjZUdTdHJlYW1lcgorICAgICAgICBNZWRpYVNvdXJj
ZVByaXZhdGU6OkFkZFN0YXR1cyBhZGRTb3VyY2VCdWZmZXIoUGFzc1JlZlB0cjxTb3VyY2VCdWZm
ZXJQcml2YXRlR1N0cmVhbWVyPiwgY29uc3QgQ29udGVudFR5cGUmKTsKKyAgICAgICAgdm9pZCBk
dXJhdGlvbkNoYW5nZWQoY29uc3QgTWVkaWFUaW1lJik7CisgICAgICAgIHZvaWQgbWFya0VuZE9m
U3RyZWFtKE1lZGlhU291cmNlUHJpdmF0ZTo6RW5kT2ZTdHJlYW1TdGF0dXMpOworCisgICAgICAg
IC8vIEZyb20gU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcgorICAgICAgICBib29sIGFwcGVu
ZChQYXNzUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+LCBjb25zdCB1bnNpZ25l
ZCBjaGFyKiwgdW5zaWduZWQpOworICAgICAgICB2b2lkIHJlbW92ZWRGcm9tTWVkaWFTb3VyY2Uo
UGFzc1JlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyPik7CiAKLSAgICAgICAgdm9p
ZCBkaWRSZWNlaXZlRHVyYXRpb24oZG91YmxlKTsKLSAgICAgICAgdm9pZCBkaWRSZWNlaXZlRGF0
YShjb25zdCBjaGFyKiwgaW50LCBTdHJpbmcpOwotICAgICAgICB2b2lkIGRpZEZpbmlzaExvYWRp
bmcoZG91YmxlKTsKLSAgICAgICAgdm9pZCBkaWRGYWlsKCk7CisgICAgICAgIC8vIEZyb20gb3Vy
IFdlYktpdE1lZGlhU3JjCisgICAgICAgIHZvaWQgZGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2Vn
bWVudChTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyKiwgY29uc3QgU291cmNlQnVmZmVyUHJp
dmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25TZWdtZW50Jik7CisgICAgICAgIHZvaWQgZGlkUmVj
ZWl2ZVNhbXBsZShTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyKiBzb3VyY2VCdWZmZXIsIFBh
c3NSZWZQdHI8TWVkaWFTYW1wbGU+IHNhbXBsZSk7CiAKICAgICBwcml2YXRlOgotICAgICAgICBX
ZWJLaXRNZWRpYVNyYyogbV9zcmM7CisgICAgICAgIE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVy
KFdlYktpdE1lZGlhU3JjKik7CisKKyAgICAgICAgR1JlZlB0cjxXZWJLaXRNZWRpYVNyYz4gbV9z
cmM7CiB9OwogCit9OwogCiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKICNlbmRpZgotLSAKMi4y
LjAucmMwLjIwNy5nYTNhNjE2YwoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243674</attachid>
            <date>2014-12-23 07:10:52 -0800</date>
            <delta_ts>2014-12-29 05:44:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139441-20141223161148.patch</filename>
            <type>text/plain</type>
            <size>59662</size>
            <attacher name="Sebastian Dröge (slomo)">slomo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2OTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTFiNjUzYzA2ODg0M2Nm
Y2JlY2U4NGY5ODJhZDg4YTY4MDg2NDcyZC4uYjg2OWMwMzhmMWIzOWU3OTY5YzEzOGJiNzNhYjlj
MTI5ODUyMTQ4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNSBAQAorMjAxNC0xMi0yMyAgU2Vi
YXN0aWFuIERyw7ZnZSAgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+CisKKyAgICAgICAgW0dT
dHJlYW1lcl0gUmV3cml0ZSBNZWRpYVNvdXJjZSBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5NDQxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZG9TZWVrKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkTG9hZGluZ1Byb2dyZXNzKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c291cmNlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNhblNh
dmVNZWRpYURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6dG90YWxWaWRlb0ZyYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRyb3BwZWRWaWRlb0ZyYW1lcyk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNvcnJ1cHRlZFZpZGVvRnJh
bWVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dG90
YWxGcmFtZURlbGF5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6aXNNZWRpYVNvdXJjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhU291cmNlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291
cmNlR1N0cmVhbWVyOjpNZWRpYVNvdXJjZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVNvdXJjZUdTdHJlYW1lcjo6YWRkU291cmNlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhU291cmNlR1N0cmVhbWVyOjpkdXJhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTb3VyY2VHU3RyZWFtZXI6Om1hcmtFbmRPZlN0cmVhbSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVNvdXJjZUdTdHJlYW1lcjo6dW5tYXJrRW5kT2ZTdHJlYW0pOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFTb3VyY2VHU3RyZWFtZXI6OnJlYWR5U3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNldFJlYWR5U3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTb3VyY2VHU3RyZWFtZXI6OndhaXRGb3JTZWVrQ29tcGxldGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlR1N0cmVhbWVyOjpzZWVrQ29tcGxldGVkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTb3VyY2VHU3RyZWFtZXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvU291cmNlQnVmZmVyUHJpdmF0
ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlR1N0
cmVhbWVyOjpTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6On5Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVh
bWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OnNl
dENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVy
OjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1l
cjo6cmVtb3ZlZEZyb21NZWRpYVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZm
ZXJQcml2YXRlR1N0cmVhbWVyOjpyZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OnNldFJlYWR5U3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6Zmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxh
eWluZ1NhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJl
YW1lcjo6ZW5xdWV1ZVNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2
YXRlR1N0cmVhbWVyOjppc1JlYWR5Rm9yTW9yZVNhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0QWN0aXZlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OnN0b3BBc2tpbmdGb3JNb3JlU2FtcGxl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpub3Rp
ZnlDbGllbnRXaGVuUmVhZHlGb3JNb3JlU2FtcGxlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1NvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIu
Y3BwOgorICAgICAgICAod2Via2l0X21lZGlhX3NyY19jbGFzc19pbml0KToKKyAgICAgICAgKHdl
YmtpdF9tZWRpYV9zcmNfaW5pdCk6CisgICAgICAgICh3ZWJLaXRNZWRpYVNyY0ZpbmFsaXplKToK
KyAgICAgICAgKHdlYktpdE1lZGlhU3JjU2V0UHJvcGVydHkpOgorICAgICAgICAod2ViS2l0TWVk
aWFTcmNHZXRQcm9wZXJ0eSk6CisgICAgICAgICh3ZWJLaXRNZWRpYVNyY0RvQXN5bmNTdGFydCk6
CisgICAgICAgICh3ZWJLaXRNZWRpYVNyY0RvQXN5bmNEb25lKToKKyAgICAgICAgKHdlYktpdE1l
ZGlhU3JjQ2hhbmdlU3RhdGUpOgorICAgICAgICAod2ViS2l0TWVkaWFTcmNRdWVyeVdpdGhQYXJl
bnQpOgorICAgICAgICAod2ViS2l0TWVkaWFTcmNHZXRVcmkpOgorICAgICAgICAod2ViS2l0TWVk
aWFTcmNTZXRVcmkpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFt
ZXI6Ok1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
U291cmNlQ2xpZW50R1N0cmVhbWVyOjp+TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXI6OmFkZFNvdXJjZUJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lcjo6ZHVyYXRp
b25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVy
OjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXI6
Om1hcmtFbmRPZlN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZUNsaWVudEdT
dHJlYW1lcjo6cmVtb3ZlZEZyb21NZWRpYVNvdXJjZSk6CisgICAgICAgIChXVEY6OmFkb3B0R1Jl
Zik6CisgICAgICAgIChXVEY6OnJlZkdQdHI8V2ViS2l0TWVkaWFTcmM+KToKKyAgICAgICAgKFdU
Rjo6ZGVyZWZHUHRyPFdlYktpdE1lZGlhU3JjPik6CisgICAgICAgICh3ZWJLaXRNZWRpYVNyY0Fk
ZFNyYyk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJLaXRNZWRpYVZpZGVvU3JjU3RvcCk6IERlbGV0
ZWQuCisgICAgICAgICh3ZWJLaXRNZWRpYUF1ZGlvU3JjU3RvcCk6IERlbGV0ZWQuCisgICAgICAg
ICh3ZWJLaXRNZWRpYVZpZGVvU3JjU3RhcnQpOiBEZWxldGVkLgorICAgICAgICAod2ViS2l0TWVk
aWFBdWRpb1NyY1N0YXJ0KTogRGVsZXRlZC4KKyAgICAgICAgKHdlYktpdE1lZGlhVmlkZW9TcmNO
ZWVkRGF0YU1haW5DYik6IERlbGV0ZWQuCisgICAgICAgICh3ZWJLaXRNZWRpYUF1ZGlvU3JjTmVl
ZERhdGFNYWluQ2IpOiBEZWxldGVkLgorICAgICAgICAod2ViS2l0TWVkaWFWaWRlb1NyY05lZWRE
YXRhQ2IpOiBEZWxldGVkLgorICAgICAgICAod2ViS2l0TWVkaWFBdWRpb1NyY05lZWREYXRhQ2Ip
OiBEZWxldGVkLgorICAgICAgICAod2ViS2l0TWVkaWFWaWRlb1NyY0Vub3VnaERhdGFNYWluQ2Ip
OiBEZWxldGVkLgorICAgICAgICAod2ViS2l0TWVkaWFBdWRpb1NyY0Vub3VnaERhdGFNYWluQ2Ip
OiBEZWxldGVkLgorICAgICAgICAod2ViS2l0TWVkaWFWaWRlb1NyY0Vub3VnaERhdGFDYik6IERl
bGV0ZWQuCisgICAgICAgICh3ZWJLaXRNZWRpYUF1ZGlvU3JjRW5vdWdoRGF0YUNiKTogRGVsZXRl
ZC4KKyAgICAgICAgKHdlYktpdE1lZGlhVmlkZW9TcmNTZWVrTWFpbkNiKTogRGVsZXRlZC4KKyAg
ICAgICAgKHdlYktpdE1lZGlhQXVkaW9TcmNTZWVrTWFpbkNiKTogRGVsZXRlZC4KKyAgICAgICAg
KHdlYktpdE1lZGlhVmlkZW9TcmNTZWVrRGF0YUNiKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYktp
dE1lZGlhQXVkaW9TcmNTZWVrRGF0YUNiKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYktpdE1lZGlh
U3JjU2V0TWVkaWFQbGF5ZXIpOiBEZWxldGVkLgorICAgICAgICAod2ViS2l0TWVkaWFTcmNTZXRQ
bGF5QmluKTogRGVsZXRlZC4KKyAgICAgICAgKE1lZGlhU291cmNlQ2xpZW50R3N0cmVhbWVyOjpN
ZWRpYVNvdXJjZUNsaWVudEdzdHJlYW1lcik6IERlbGV0ZWQuCisgICAgICAgIChNZWRpYVNvdXJj
ZUNsaWVudEdzdHJlYW1lcjo6fk1lZGlhU291cmNlQ2xpZW50R3N0cmVhbWVyKTogRGVsZXRlZC4K
KyAgICAgICAgKE1lZGlhU291cmNlQ2xpZW50R3N0cmVhbWVyOjpkaWRSZWNlaXZlRHVyYXRpb24p
OiBEZWxldGVkLgorICAgICAgICAoTWVkaWFTb3VyY2VDbGllbnRHc3RyZWFtZXI6OmRpZFJlY2Vp
dmVEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKE1lZGlhU291cmNlQ2xpZW50R3N0cmVhbWVyOjpk
aWRGaW5pc2hMb2FkaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKE1lZGlhU291cmNlQ2xpZW50R3N0
cmVhbWVyOjpkaWRGYWlsKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaDoKKyAgICAgICAgUmV3cml0ZSBN
ZWRpYVNvdXJjZSBpbXBsZW1lbnRhdGlvbiBmb3IgR1N0cmVhbWVyLiBUaGUgb2xkIGNvZGUgd2Fz
CisgICAgICAgIG92ZXJseSBjb21wbGljYXRlZCBhbmQgZGlkIG5vdCB3b3JrIGF0IGFsbCBmb3Ig
YW55dGhpbmcgSSd2ZSB0ZXN0ZWQKKyAgICAgICAgaXQgd2l0aC4KKworICAgICAgICBUaGlzIG5v
dyBpcyBhIGNsZWFuIHJlaW1wbGVtZW50YXRpb24gYXJvdW5kIGFwcHNyYyB0aGF0IHdvcmtzIGdv
b2QKKyAgICAgICAgZW5vdWdoIGZvciBZb3VUdWJlIChleGNlcHQgZm9yIHNlZWtpbmcpLCBidXQg
aXQgc3RpbGwgZG9lcyBub3QKKyAgICAgICAgaW1wbGVtZW50IHRoZSBjb21wbGV0ZSBBUEkgY29y
cmVjdGx5LiBGdXJ0aGVyIHdvcmsgaXMgcmVxdWlyZWQgb24KKyAgICAgICAgdG9wIG9mIHRoaXMg
YW5kIHRoZSBCdWd6aWxsYSB0aWNrZXQgbGlua2VkIGFib3ZlIGNvbnRhaW5zIHNvbWUKKyAgICAg
ICAgZnVydGhlciB3b3JrIGluIHRoZSByaWdodCBkaXJlY3Rpb24uCisKIDIwMTQtMTItMDkgIFNl
YmFzdGlhbiBEcsO2Z2UgIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgogCiAgICAgICAgIFtH
U3RyZWFtZXJdIEFkZCB2aWRlby9tcDJ0IGFzIGFsdGVybmF0aXZlIG1pbWV0eXBlIGZvciBNUEVH
IFRTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmlu
ZGV4IDhjOWE2MzcwNGZhODAyODY2ZmNmYjM0NDc0MjIwZGE0NDY3Y2U1NGEuLjZkYzAzZGRjNWYy
YTY5ZjlmZGI3MDE2MjhiNmNiYzJhZjE1OTEyYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC01NTMsNiArNTUzLDExIEBAIGJvb2wgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkb1NlZWsoZ2ludDY0IHBvc2l0aW9uLCBmbG9hdCBy
YXRlLCBHc3RTZWVrRmxhCiB7CiAgICAgZ2ludDY0IHN0YXJ0VGltZSwgZW5kVGltZTsKIAorICAg
IC8vIFRPRE86IFNob3VsZCBkbyBtb3JlIHRoYW4gdGhhdCwgbmVlZCB0byBub3RpZnkgdGhlIG1l
ZGlhIHNvdXJjZQorICAgIC8vIGFuZCBwcm9iYWJseSBmbHVzaCB0aGUgcGlwZWxpbmUgYXQgbGVh
c3QKKyAgICBpZiAoaXNNZWRpYVNvdXJjZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAg
IGlmIChyYXRlID4gMCkgewogICAgICAgICBzdGFydFRpbWUgPSBwb3NpdGlvbjsKICAgICAgICAg
ZW5kVGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7CkBAIC0xMjMzLDcgKzEyMzgsNyBAQCBmbG9h
dCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om1heFRpbWVMb2FkZWQoKSBjb25zdAogCiBi
b29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29u
c3QKIHsKLSAgICBpZiAoIW1fcGxheUJpbiB8fCAhbV9tZWRpYUR1cmF0aW9uIHx8ICF0b3RhbEJ5
dGVzKCkpCisgICAgaWYgKCFtX3BsYXlCaW4gfHwgIW1fbWVkaWFEdXJhdGlvbiB8fCAoIWlzTWVk
aWFTb3VyY2UoKSAmJiAhdG90YWxCeXRlcygpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGZsb2F0IGN1cnJlbnRNYXhUaW1lTG9hZGVkID0gbWF4VGltZUxvYWRlZCgpOwogICAgIGJvb2wg
ZGlkTG9hZGluZ1Byb2dyZXNzID0gY3VycmVudE1heFRpbWVMb2FkZWQgIT0gbV9tYXhUaW1lTG9h
ZGVkQXRMYXN0RGlkTG9hZGluZ1Byb2dyZXNzOwpAQCAtMTMwNyw3ICsxMzEyLDYgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNvdXJjZUNoYW5nZWQoKQogI2lmIEVOQUJMRShN
RURJQV9TT1VSQ0UpCiAgICAgaWYgKG1fbWVkaWFTb3VyY2UgJiYgV0VCS0lUX0lTX01FRElBX1NS
QyhtX3NvdXJjZS5nZXQoKSkpIHsKICAgICAgICAgTWVkaWFTb3VyY2VHU3RyZWFtZXI6Om9wZW4o
bV9tZWRpYVNvdXJjZS5nZXQoKSwgV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSkpOwot
ICAgICAgICB3ZWJLaXRNZWRpYVNyY1NldFBsYXlCaW4oV0VCS0lUX01FRElBX1NSQyhtX3NvdXJj
ZS5nZXQoKSksIG1fcGxheUJpbi5nZXQoKSk7CiAgICAgfQogI2VuZGlmCiB9CkBAIC0xOTY0LDcg
KzE5NjgsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2FuU2F2ZU1lZGlh
RGF0YSgpIGNvbnN0CiAKICAgICBpZiAobV91cmwucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKKwogICAgIHJldHVybiBmYWxzZTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IDI4NTNlNGE5
OGFkZjlmNmExMDI3MTQwYTNjZmY3Yzc4ODcxYzg4YjMuLmJmOWZkNjI4ZTBlOTdiZDZmNzIyNGZi
YmY1YzkwOTA4YWQ1YzA1MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmgKQEAgLTE2Niw2ICsxNjYsMTQgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJv
b2wgZGlkUGFzc0NPUlNBY2Nlc3NDaGVjaygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBjYW5T
YXZlTWVkaWFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CiAKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNF
KQorICAgIC8vIFRPRE86IEltcGxlbWVudAorICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyB0b3Rh
bFZpZGVvRnJhbWVzKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBk
cm9wcGVkVmlkZW9GcmFtZXMoKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB1bnNpZ25lZCBs
b25nIGNvcnJ1cHRlZFZpZGVvRnJhbWVzKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgTWVk
aWFUaW1lIHRvdGFsRnJhbWVEZWxheSgpIHsgcmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsg
fQorI2VuZGlmCisKIHByaXZhdGU6CiAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3BsYXlCaW47
CiAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3NvdXJjZTsKQEAgLTIyNSw2ICsyMzMsOSBAQCBw
cml2YXRlOgogI2VuZGlmCiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKICAgICBSZWZQdHI8TWVk
aWFTb3VyY2VQcml2YXRlQ2xpZW50PiBtX21lZGlhU291cmNlOworICAgIGJvb2wgaXNNZWRpYVNv
dXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFTb3VyY2U7IH0KKyNlbHNlCisgICAgYm9vbCBp
c01lZGlhU291cmNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogfTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVNvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwCmluZGV4IDYyM2VlMDY4YzE0ZDYyMmE2
YWNiNjVmMjY2ZWY4MDAyMjE4NDMwOTQuLjhkMzNhMjBkNGExMmNlNDJkZWU5ODBjZDZkZjc1YTUy
MWE5NWU0ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9NZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU291cmNlR1N0cmVhbWVyLmNwcApAQCAtMSw2
ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMyBPcmFuZ2UKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzQsOCArMzUsMTAgQEAKIAogI2lm
IEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIFVTRShHU1RSRUFNRVIpCiAKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuaCIK
ICNpbmNsdWRlICJXZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5oIgorCiAjaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Nyw3ICs1MCw3
IEBAIHZvaWQgTWVkaWFTb3VyY2VHU3RyZWFtZXI6Om9wZW4oTWVkaWFTb3VyY2VQcml2YXRlQ2xp
ZW50KiBtZWRpYVNvdXJjZSwgV2ViS2l0TWVkCiB9CiAKIE1lZGlhU291cmNlR1N0cmVhbWVyOjpN
ZWRpYVNvdXJjZUdTdHJlYW1lcihNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqIG1lZGlhU291cmNl
LCBXZWJLaXRNZWRpYVNyYyogc3JjKQotICAgIDogbV9jbGllbnQoYWRvcHRSZWYobmV3IE1lZGlh
U291cmNlQ2xpZW50R3N0cmVhbWVyKHNyYykpKQorICAgIDogbV9jbGllbnQoYWRvcHRSZWYobmV3
IE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyKHNyYykpKQogICAgICwgbV9tZWRpYVNvdXJjZSht
ZWRpYVNvdXJjZSkKICAgICAsIG1fcmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcp
CiB7CkBAIC02MCwyMiArNjMsNDUgQEAgTWVkaWFTb3VyY2VHU3RyZWFtZXI6On5NZWRpYVNvdXJj
ZUdTdHJlYW1lcigpCiAKIE1lZGlhU291cmNlR1N0cmVhbWVyOjpBZGRTdGF0dXMgTWVkaWFTb3Vy
Y2VHU3RyZWFtZXI6OmFkZFNvdXJjZUJ1ZmZlcihjb25zdCBDb250ZW50VHlwZSYgY29udGVudFR5
cGUsIFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlPiYgc291cmNlQnVmZmVyUHJpdmF0ZSkKIHsK
LSAgICBzb3VyY2VCdWZmZXJQcml2YXRlID0gYWRvcHRSZWYobmV3IFNvdXJjZUJ1ZmZlclByaXZh
dGVHU3RyZWFtZXIobV9jbGllbnQuZ2V0KCksIGNvbnRlbnRUeXBlKSk7Ci0gICAgcmV0dXJuIE1l
ZGlhU291cmNlR1N0cmVhbWVyOjpPazsKKyAgICBSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUdT
dHJlYW1lcj4gc291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lciA9IG5ldyBTb3VyY2VCdWZmZXJQ
cml2YXRlR1N0cmVhbWVyKG1fY2xpZW50LmdldCgpLCBjb250ZW50VHlwZSk7CisKKyAgICBzb3Vy
Y2VCdWZmZXJQcml2YXRlID0gYWRvcHRSZWYoc291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5n
ZXQoKSk7CisgICAgcmV0dXJuIG1fY2xpZW50LT5hZGRTb3VyY2VCdWZmZXIoc291cmNlQnVmZmVy
UHJpdmF0ZUdTdHJlYW1lciwgY29udGVudFR5cGUpOwogfQogCiB2b2lkIE1lZGlhU291cmNlR1N0
cmVhbWVyOjpkdXJhdGlvbkNoYW5nZWQoKQogewotICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRHVy
YXRpb24obV9tZWRpYVNvdXJjZS0+ZHVyYXRpb24oKS50b0RvdWJsZSgpKTsKKyAgICBtX2NsaWVu
dC0+ZHVyYXRpb25DaGFuZ2VkKG1fbWVkaWFTb3VyY2UtPmR1cmF0aW9uKCkpOwogfQogCi12b2lk
IE1lZGlhU291cmNlR1N0cmVhbWVyOjptYXJrRW5kT2ZTdHJlYW0oRW5kT2ZTdHJlYW1TdGF0dXMp
Cit2b2lkIE1lZGlhU291cmNlR1N0cmVhbWVyOjptYXJrRW5kT2ZTdHJlYW0oRW5kT2ZTdHJlYW1T
dGF0dXMgc3RhdHVzKQogewotICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKDApOworICAg
IG1fY2xpZW50LT5tYXJrRW5kT2ZTdHJlYW0oc3RhdHVzKTsKIH0KIAogdm9pZCBNZWRpYVNvdXJj
ZUdTdHJlYW1lcjo6dW5tYXJrRW5kT2ZTdHJlYW0oKQogeworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK01lZGlhUGxheWVyOjpSZWFkeVN0YXRlIE1lZGlhU291cmNlR1N0cmVhbWVyOjpyZWFk
eVN0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZWFkeVN0YXRlOworfQorCit2b2lkIE1l
ZGlhU291cmNlR1N0cmVhbWVyOjpzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRl
IHN0YXRlKQoreworICAgIG1fcmVhZHlTdGF0ZSA9IHN0YXRlOworfQorCit2b2lkIE1lZGlhU291
cmNlR1N0cmVhbWVyOjp3YWl0Rm9yU2Vla0NvbXBsZXRlZCgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c2Vla0NvbXBsZXRlZCgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU291cmNlR1N0cmVhbWVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTb3VyY2VHU3Ry
ZWFtZXIuaAppbmRleCBhYWNhNDVlMTg4NDYwNjAwYWNjYTMwZTA0NDI3YzdjNDE4Yzc3MjkzLi5m
MzBiMjlmYzk5Njg4N2U1ZDQ1YWU2NDg3ZGVlMjQ2OGYxMjI2YmUyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTb3VyY2VHU3RyZWFt
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFTb3VyY2VHU3RyZWFtZXIuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAxMyBPcmFuZ2UKKyAqIENvcHlyaWdodCAoQykgMjAxNCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJh
c3RpYW5AY2VudHJpY3VsYXIuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQpAQCAtMzgsMjUgKzM5LDI4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gRklYTUU6
IFNob3VsZCB0aGlzIGJlIGNhbGxlZCBNZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXI/CiBjbGFz
cyBNZWRpYVNvdXJjZUdTdHJlYW1lciBmaW5hbCA6IHB1YmxpYyBNZWRpYVNvdXJjZVByaXZhdGUg
ewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIG9wZW4oTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50
KiwgV2ViS2l0TWVkaWFTcmMqKTsKLSAgICB+TWVkaWFTb3VyY2VHU3RyZWFtZXIoKTsKKyAgICB2
aXJ0dWFsIH5NZWRpYVNvdXJjZUdTdHJlYW1lcigpOworCisgICAgdmlydHVhbCBBZGRTdGF0dXMg
YWRkU291cmNlQnVmZmVyKGNvbnN0IENvbnRlbnRUeXBlJiwgUmVmUHRyPFNvdXJjZUJ1ZmZlclBy
aXZhdGU+Jik7CisgICAgdmlydHVhbCB2b2lkIGR1cmF0aW9uQ2hhbmdlZCgpOworICAgIHZpcnR1
YWwgdm9pZCBtYXJrRW5kT2ZTdHJlYW0oRW5kT2ZTdHJlYW1TdGF0dXMpOworICAgIHZpcnR1YWwg
dm9pZCB1bm1hcmtFbmRPZlN0cmVhbSgpOworCisgICAgdmlydHVhbCBNZWRpYVBsYXllcjo6UmVh
ZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFJlYWR5U3Rh
dGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUpOworCisgICAgdmlydHVhbCB2b2lkIHdhaXRGb3JT
ZWVrQ29tcGxldGVkKCk7CisgICAgdmlydHVhbCB2b2lkIHNlZWtDb21wbGV0ZWQoKTsKIAogcHJp
dmF0ZToKLSAgICAvLyBNZWRpYVNvdXJjZVByaXZhdGUKLSAgICB2aXJ0dWFsIEFkZFN0YXR1cyBh
ZGRTb3VyY2VCdWZmZXIoY29uc3QgQ29udGVudFR5cGUmLCBSZWZQdHI8U291cmNlQnVmZmVyUHJp
dmF0ZT4mKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZHVyYXRpb25DaGFuZ2VkKCkgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIG1hcmtFbmRPZlN0cmVhbShFbmRPZlN0cmVhbVN0YXR1
cykgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHVubWFya0VuZE9mU3RyZWFtKCkgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWFkeVN0YXRlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNl
dFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSkgb3ZlcnJpZGUg
eyBtX3JlYWR5U3RhdGUgPSByZWFkeVN0YXRlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHdhaXRGb3JT
ZWVrQ29tcGxldGVkKCkgb3ZlcnJpZGUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNlZWtDb21wbGV0
ZWQoKSBvdmVycmlkZSB7IH0KKyAgICBNZWRpYVNvdXJjZUdTdHJlYW1lcihNZWRpYVNvdXJjZVBy
aXZhdGVDbGllbnQqLCBXZWJLaXRNZWRpYVNyYyopOwogCi0gICAgUmVmUHRyPE1lZGlhU291cmNl
Q2xpZW50R3N0cmVhbWVyPiBtX2NsaWVudDsKKyAgICBSZWZQdHI8TWVkaWFTb3VyY2VDbGllbnRH
U3RyZWFtZXI+IG1fY2xpZW50OwogICAgIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCogbV9tZWRp
YVNvdXJjZTsKLSAgICBNZWRpYVNvdXJjZUdTdHJlYW1lcihNZWRpYVNvdXJjZVByaXZhdGVDbGll
bnQqLCBXZWJLaXRNZWRpYVNyYyopOwogICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVh
ZHlTdGF0ZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9Tb3VyY2VCdWZmZXJQcml2YXRlR1N0
cmVhbWVyLmNwcAppbmRleCA0NWM1ZTkxMGUwZjRmNmUyNTU3OWExNmY0MGM1NDgwOWRlZjQ1NTY2
Li5iYjUwODQwZmI1YTcyOGRhZDQ5MTE3YmNlZWVlYzUwYTYzYzMyM2M1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvU291cmNlQnVmZmVyUHJp
dmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1NvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0xLDYgKzEsNyBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEzIE9yYW5nZQorICogQ29weXJpZ2h0IChDKSAyMDE0
IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+CiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zOSwxOSArNDAsMjkgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpTb3VyY2VCdWZmZXJQ
cml2YXRlR1N0cmVhbWVyKFBhc3NSZWZQdHI8TWVkaWFTb3VyY2VDbGllbnRHc3RyZWFtZXI+IGNs
aWVudCwgY29uc3QgQ29udGVudFR5cGUmIGNvbnRlbnRUeXBlKQotICAgIDogbV9yZWFkeVN0YXRl
KE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKK1NvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6
OlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIoUGFzc1JlZlB0cjxNZWRpYVNvdXJjZUNsaWVu
dEdTdHJlYW1lcj4gY2xpZW50LCBjb25zdCBDb250ZW50VHlwZSYgY29udGVudFR5cGUpCisgICAg
OiBtX3R5cGUoY29udGVudFR5cGUpCisgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX3Jl
YWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKQogewotICAgIG1fY2xpZW50ID0gY2xp
ZW50OwotICAgIG1fdHlwZSA9IGNvbnRlbnRUeXBlLnR5cGUoKTsKK30KKworU291cmNlQnVmZmVy
UHJpdmF0ZUdTdHJlYW1lcjo6flNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIoKQoreworfQor
Cit2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OnNldENsaWVudChTb3VyY2VCdWZm
ZXJQcml2YXRlQ2xpZW50KiBjbGllbnQpCit7CisgICAgbV9zb3VyY2VCdWZmZXJQcml2YXRlQ2xp
ZW50ID0gY2xpZW50OwogfQogCiB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OmFw
cGVuZChjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAg
QVNTRVJUKG1fY2xpZW50KTsKLSAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEocmVpbnRlcnBy
ZXRfY2FzdF9wdHI8Y29uc3QgY2hhcio+KGRhdGEpLCBsZW5ndGgsIG1fdHlwZSk7CisgICAgQVNT
RVJUKG1fc291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudCk7CiAKLSAgICAvLyBGSVhNRTogY2FsbCBT
b3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50Ojpzb3VyY2VCdWZmZXJQcml2YXRlQXBwZW5kQ29tcGxl
dGUoKS4KKyAgICBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpBcHBlbmRSZXN1bHQgcmVzdWx0
ID0gbV9jbGllbnQtPmFwcGVuZCh0aGlzLCBkYXRhLCBsZW5ndGgpOworICAgIG1fc291cmNlQnVm
ZmVyUHJpdmF0ZUNsaWVudC0+c291cmNlQnVmZmVyUHJpdmF0ZUFwcGVuZENvbXBsZXRlKHRoaXMs
IHJlc3VsdCk7CiB9CiAKIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6YWJvcnQo
KQpAQCAtNjEsNiArNzIsNDkgQEAgdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjph
Ym9ydCgpCiAKIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVtb3ZlZEZyb21N
ZWRpYVNvdXJjZSgpCiB7CisgICAgbV9jbGllbnQtPnJlbW92ZWRGcm9tTWVkaWFTb3VyY2UodGhp
cyk7Cit9CisKK01lZGlhUGxheWVyOjpSZWFkeVN0YXRlIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3Ry
ZWFtZXI6OnJlYWR5U3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlYWR5U3RhdGU7Cit9
CisKK3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UmVhZHlTdGF0ZShNZWRp
YVBsYXllcjo6UmVhZHlTdGF0ZSBzdGF0ZSkKK3sKKyAgICBtX3JlYWR5U3RhdGUgPSBzdGF0ZTsK
K30KKworLy8gVE9ETzogSW1wbGVtZW50IHRoZXNlCit2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVH
U3RyZWFtZXI6OmZsdXNoQW5kRW5xdWV1ZU5vbkRpc3BsYXlpbmdTYW1wbGVzKFZlY3RvcjxSZWZQ
dHI8TWVkaWFTYW1wbGU+PiwgQXRvbWljU3RyaW5nKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6ZW5xdWV1ZVNhbXBsZShQ
YXNzUmVmUHRyPE1lZGlhU2FtcGxlPiwgQXRvbWljU3RyaW5nKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK2Jvb2wgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6aXNSZWFkeUZv
ck1vcmVTYW1wbGVzKEF0b21pY1N0cmluZykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6
OnNldEFjdGl2ZShib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgU291
cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6c3RvcEFza2luZ0Zvck1vcmVTYW1wbGVzKEF0b21p
Y1N0cmluZykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFNvdXJjZUJ1ZmZl
clByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeUNsaWVudFdoZW5SZWFkeUZvck1vcmVTYW1wbGVzKEF0
b21pY1N0cmluZykKK3sKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvU291cmNlQnVmZmVyUHJp
dmF0ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL1NvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuaAppbmRleCA1NzRlMjFhMDkxMmMzZDNk
MWEzMmY3M2E4MzJhMTFkYWVlY2NhY2U2Li45NjBmODc2OTMwZDcwMTFmY2Y0YmVmNDEyOWIxMmZm
ODY0OGJlNWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVh
bWVyLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgT3JhbmdlCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1
bGFyLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM0LDYgKzM1
LDcgQEAKIAogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIFVTRShHU1RSRUFNRVIpCiAKKyNp
bmNsdWRlICJDb250ZW50VHlwZS5oIgogI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGUuaCIK
ICNpbmNsdWRlICJXZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5oIgogCkBAIC00MSwyMSArNDMs
MjkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTb3VyY2VCdWZmZXJQcml2YXRlR1N0
cmVhbWVyIGZpbmFsIDogcHVibGljIFNvdXJjZUJ1ZmZlclByaXZhdGUgewogcHVibGljOgotICAg
IFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIoUGFzc1JlZlB0cjxNZWRpYVNvdXJjZUNsaWVu
dEdzdHJlYW1lcj4sIGNvbnN0IENvbnRlbnRUeXBlJik7Ci0gICAgflNvdXJjZUJ1ZmZlclByaXZh
dGVHU3RyZWFtZXIoKSB7IH0KKyAgICBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyKFBhc3NS
ZWZQdHI8TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXI+LCBjb25zdCBDb250ZW50VHlwZSYpOwor
ICAgIHZpcnR1YWwgflNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIoKTsKIAotICAgIHZvaWQg
c2V0Q2xpZW50KFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQqKSB7IH0KLSAgICB2b2lkIGFwcGVu
ZChjb25zdCB1bnNpZ25lZCBjaGFyKiwgdW5zaWduZWQpOwotICAgIHZvaWQgYWJvcnQoKTsKLSAg
ICB2b2lkIHJlbW92ZWRGcm9tTWVkaWFTb3VyY2UoKTsKLSAgICBNZWRpYVBsYXllcjo6UmVhZHlT
dGF0ZSByZWFkeVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9yZWFkeVN0YXRlOyB9Ci0gICAgdm9p
ZCBzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUpIHsgbV9y
ZWFkeVN0YXRlID0gcmVhZHlTdGF0ZTsgfQotICAgIHZvaWQgZXZpY3RDb2RlZEZyYW1lcygpIHsg
fQotICAgIGJvb2wgaXNGdWxsKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0Q2xpZW50KFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQqKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBhcHBlbmQoY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWJvcnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21NZWRp
YVNvdXJjZSgpOworCisgICAgdmlydHVhbCBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0
YXRlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6
OlJlYWR5U3RhdGUpOworCisgICAgdmlydHVhbCB2b2lkIGZsdXNoQW5kRW5xdWV1ZU5vbkRpc3Bs
YXlpbmdTYW1wbGVzKFZlY3RvcjxSZWZQdHI8TWVkaWFTYW1wbGU+PiwgQXRvbWljU3RyaW5nKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZVNhbXBsZShQYXNzUmVmUHRyPE1lZGlhU2FtcGxlPiwg
QXRvbWljU3RyaW5nKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFkeUZvck1vcmVTYW1wbGVzKEF0
b21pY1N0cmluZyk7CisgICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZShib29sKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc3RvcEFza2luZ0Zvck1vcmVTYW1wbGVzKEF0b21pY1N0cmluZyk7CisgICAgdmly
dHVhbCB2b2lkIG5vdGlmeUNsaWVudFdoZW5SZWFkeUZvck1vcmVTYW1wbGVzKEF0b21pY1N0cmlu
Zyk7CiAKIHByaXZhdGU6Ci0gICAgU3RyaW5nIG1fdHlwZTsKLSAgICBSZWZQdHI8TWVkaWFTb3Vy
Y2VDbGllbnRHc3RyZWFtZXI+IG1fY2xpZW50OworICAgIENvbnRlbnRUeXBlIG1fdHlwZTsKKyAg
ICBSZWZQdHI8TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXI+IG1fY2xpZW50OworICAgIFNvdXJj
ZUJ1ZmZlclByaXZhdGVDbGllbnQqIG1fc291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDsKICAgICBN
ZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0TWVkaWFTb3Vy
Y2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmNwcAppbmRleCBiOWE1NDI4YzBiYThmZTBk
NjIzYTIzMjc0NWU3OTIyNTAzODRmNWYzLi43NGE3MDc2N2U3YzI4ZmIwMDViYWJiMzkxMmUzZDIz
Y2Q5OWNhYWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1l
ci5jcHAKQEAgLTIsNiArMiw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIFNlYmFz
dGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgogICogIENvcHly
aWdodCAoQykgMjAxMyBDb2xsYWJvcmEgTHRkLgogICogIENvcHlyaWdodCAoQykgMjAxMyBPcmFu
Z2UKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTQgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNl
bnRyaWN1bGFyLmNvbT4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDYwICsyNCw0MSBAQAog
CiAjaWYgRU5BQkxFKFZJREVPKSAmJiBFTkFCTEUoTUVESUFfU09VUkNFKSAmJiBVU0UoR1NUUkVB
TUVSKQogCi0jaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgogI2luY2x1ZGUgIkdTdHJlYW1l
clV0aWxpdGllcy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiVGlt
ZVJhbmdlcy5oIgorCiAjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzcmMuaD4KICNpbmNsdWRlIDxn
c3QvZ3N0Lmg+CiAjaW5jbHVkZSA8Z3N0L3BidXRpbHMvbWlzc2luZy1wbHVnaW5zLmg+Ci0jaW5j
bHVkZSA8d3RmL2dvYmplY3QvR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZS5oPgogI2luY2x1ZGUg
PHd0Zi9nb2JqZWN0L0dVbmlxdWVQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CiAKLXR5cGVkZWYgc3RydWN0IF9Tb3VyY2UgewotICAgIEdzdEVsZW1lbnQqIGFwcHNyYzsKLSAg
ICBndWludCBzb3VyY2VpZDsgICAgICAgIC8qIFRvIGNvbnRyb2wgdGhlIEdTb3VyY2UgKi8KLSAg
ICBHc3RQYWQqIHNyY3BhZDsKLSAgICBnYm9vbGVhbiBwYWRBZGRlZDsKLQotICAgIGd1aW50NjQg
b2Zmc2V0OwotICAgIGd1aW50NjQgc2l6ZTsKLSAgICBnYm9vbGVhbiBwYXVzZWQ7Ci0KLSAgICBH
VGhyZWFkU2FmZU1haW5Mb29wU291cmNlIHN0YXJ0OwotICAgIEdUaHJlYWRTYWZlTWFpbkxvb3BT
b3VyY2Ugc3RvcDsKLSAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIG5lZWREYXRhOwotICAg
IEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UgZW5vdWdoRGF0YTsKLSAgICBHVGhyZWFkU2FmZU1h
aW5Mb29wU291cmNlIHNlZWs7Ci0KLSAgICBndWludDY0IHJlcXVlc3RlZE9mZnNldDsKLX0gU291
cmNlOwotCi0KLSNkZWZpbmUgV0VCS0lUX01FRElBX1NSQ19HRVRfUFJJVkFURShvYmopIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX01FRElBX1NSQywgV2Vi
S2l0TWVkaWFTcmNQcml2YXRlKSkKK3R5cGVkZWYgc3RydWN0IF9Tb3VyY2UgU291cmNlOworc3Ry
dWN0IF9Tb3VyY2UgeworICAgIEdzdEVsZW1lbnQqIHNyYzsKKyAgICAvLyBKdXN0IGZvciBpZGVu
dGlmaWNhdGlvbgorICAgIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGUqIHNvdXJjZUJ1ZmZl
cjsKK307CiAKIHN0cnVjdCBfV2ViS2l0TWVkaWFTcmNQcml2YXRlIHsKLSAgICBnY2hhciogdXJp
OwotICAgIFNvdXJjZSBzb3VyY2VWaWRlbzsKLSAgICBTb3VyY2Ugc291cmNlQXVkaW87Ci0gICAg
V2ViQ29yZTo6TWVkaWFQbGF5ZXIqIHBsYXllcjsKLSAgICBHc3RFbGVtZW50KiBwbGF5YmluOwot
ICAgIGdpbnQ2NCBkdXJhdGlvbjsKLSAgICBnYm9vbGVhbiBzZWVrYWJsZTsKLSAgICBnYm9vbGVh
biBub01vcmVQYWQ7Ci0gICAgLy8gVFJVRSBpZiBhcHBzcmMncyB2ZXJzaW9uIGlzID49IDAuMTAu
MjcsIHNlZQotICAgIC8vIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9p
ZD02MDk0MjMKLSAgICBnYm9vbGVhbiBoYXZlQXBwU3JjMjc7Ci0gICAgZ3VpbnQgbmJTb3VyY2U7
CisgICAgR0xpc3QqIHNvdXJjZXM7CisgICAgZ2NoYXIqIGxvY2F0aW9uOworICAgIEdzdENsb2Nr
VGltZSBkdXJhdGlvbjsKKyAgICBib29sIGhhdmVBcHBzcmM7CisgICAgYm9vbCBhc3luY1N0YXJ0
OworICAgIGJvb2wgbm9Nb3JlUGFkczsKIH07CiAKIGVudW0gewotICAgIFByb3BMb2NhdGlvbiA9
IDEsCi0gICAgUHJvTGFzdAorICAgIFByb3AwLAorICAgIFByb3BMb2NhdGlvbgogfTsKIAotc3Rh
dGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY1RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVN
UExBVEUoInNyY18ldSIsIEdTVF9QQURfU1JDLCBHU1RfUEFEX1NPTUVUSU1FUywgR1NUX1NUQVRJ
Q19DQVBTX0FOWSk7CitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjVGVtcGxhdGUgPSBH
U1RfU1RBVElDX1BBRF9URU1QTEFURSgic3JjXyV1IiwgR1NUX1BBRF9TUkMsCisgICAgR1NUX1BB
RF9TT01FVElNRVMsIEdTVF9TVEFUSUNfQ0FQU19BTlkpOworCisjZGVmaW5lIFdFQktJVF9NRURJ
QV9TUkNfR0VUX1BSSVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmop
LCBXRUJLSVRfVFlQRV9NRURJQV9TUkMsIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSkpCiAKIEdTVF9E
RUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0X21lZGlhX3NyY19kZWJ1Zyk7CiAjZGVmaW5lIEdT
VF9DQVRfREVGQVVMVCB3ZWJraXRfbWVkaWFfc3JjX2RlYnVnCkBAIC04OCwyNCArNzAsNiBAQCBz
dGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY0dldFByb3BlcnR5KEdPYmplY3QqLCBndWludCBwcm9w
ZXJ0eUlkLCBHVmFsdWUqLCBHUGFyYQogc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHdlYktp
dE1lZGlhU3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVudCosIEdzdFN0YXRlQ2hhbmdlKTsKIHN0YXRp
YyBnYm9vbGVhbiB3ZWJLaXRNZWRpYVNyY1F1ZXJ5V2l0aFBhcmVudChHc3RQYWQqLCBHc3RPYmpl
Y3QqLCBHc3RRdWVyeSopOwogCi1zdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVZpZGVvU3JjTmVlZERh
dGFDYihHc3RBcHBTcmMqLCBndWludCwgZ3BvaW50ZXIpOwotc3RhdGljIHZvaWQgd2ViS2l0TWVk
aWFWaWRlb1NyY0Vub3VnaERhdGFDYihHc3RBcHBTcmMqLCBncG9pbnRlcik7Ci1zdGF0aWMgZ2Jv
b2xlYW4gd2ViS2l0TWVkaWFWaWRlb1NyY1NlZWtEYXRhQ2IoR3N0QXBwU3JjKiwgZ3VpbnQ2NCwg
Z3BvaW50ZXIpOwotc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFBdWRpb1NyY05lZWREYXRhQ2IoR3N0
QXBwU3JjKiwgZ3VpbnQsIGdwb2ludGVyKTsKLXN0YXRpYyB2b2lkIHdlYktpdE1lZGlhQXVkaW9T
cmNFbm91Z2hEYXRhQ2IoR3N0QXBwU3JjKiwgZ3BvaW50ZXIpOwotc3RhdGljIGdib29sZWFuIHdl
YktpdE1lZGlhQXVkaW9TcmNTZWVrRGF0YUNiKEdzdEFwcFNyYyosIGd1aW50NjQsIGdwb2ludGVy
KTsKLXN0YXRpYyBHc3RBcHBTcmNDYWxsYmFja3MgYXBwc3JjQ2FsbGJhY2tzVmlkZW8gPSB7Ci0g
ICAgd2ViS2l0TWVkaWFWaWRlb1NyY05lZWREYXRhQ2IsCi0gICAgd2ViS2l0TWVkaWFWaWRlb1Ny
Y0Vub3VnaERhdGFDYiwKLSAgICB3ZWJLaXRNZWRpYVZpZGVvU3JjU2Vla0RhdGFDYiwKLSAgICB7
IDAgfQotfTsKLXN0YXRpYyBHc3RBcHBTcmNDYWxsYmFja3MgYXBwc3JjQ2FsbGJhY2tzQXVkaW8g
PSB7Ci0gICAgd2ViS2l0TWVkaWFBdWRpb1NyY05lZWREYXRhQ2IsCi0gICAgd2ViS2l0TWVkaWFB
dWRpb1NyY0Vub3VnaERhdGFDYiwKLSAgICB3ZWJLaXRNZWRpYUF1ZGlvU3JjU2Vla0RhdGFDYiwK
LSAgICB7IDAgfQotfTsKICNkZWZpbmUgd2Via2l0X21lZGlhX3NyY19wYXJlbnRfY2xhc3MgcGFy
ZW50X2NsYXNzCiAvLyBXZSBzcGxpdCB0aGlzIG91dCBpbnRvIGFub3RoZXIgbWFjcm8gdG8gYXZv
aWQgYSBjaGVjay13ZWJraXQtc3R5bGUgZXJyb3IuCiAjZGVmaW5lIFdFQktJVF9NRURJQV9TUkNf
Q0FURUdPUllfSU5JVCBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRfbWVkaWFfc3JjX2Rl
YnVnLCAid2Via2l0bWVkaWFzcmMiLCAwLCAid2Vic3JjIGVsZW1lbnQiKTsKQEAgLTEyNCw3ICs4
OCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9zcmNfY2xhc3NfaW5pdChXZWJLaXRNZWRp
YVNyY0NsYXNzKiBrbGFzcykKIAogICAgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxh
dGUoZWtsYXNzLCBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQoJnNyY1RlbXBsYXRlKSk7CiAK
LSAgICBnc3RfZWxlbWVudF9jbGFzc19zZXRfbWV0YWRhdGEoZWtsYXNzLCAiV2ViS2l0IE1lZGlh
IHNvdXJjZSBlbGVtZW50IiwgIlNvdXJjZSIsICJIYW5kbGVzIEJsb2IgdXJpcyIsICJTdGVwaGFu
ZSBKYWRhdWQgPHNqYWRhdWRAc2lpLmZyPiIpOworICAgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9z
dGF0aWNfbWV0YWRhdGEoZWtsYXNzLCAiV2ViS2l0IE1lZGlhIHNvdXJjZSBlbGVtZW50IiwgIlNv
dXJjZSIsICJIYW5kbGVzIEJsb2IgdXJpcyIsICJTdGVwaGFuZSBKYWRhdWQgPHNqYWRhdWRAc2lp
LmZyPiwgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4iKTsKIAog
ICAgIC8qIEFsbG93cyBzZXR0aW5nIHRoZSB1cmkgdXNpbmcgdGhlICdsb2NhdGlvbicgcHJvcGVy
dHksIHdoaWNoIGlzIHVzZWQKICAgICAgKiBmb3IgZXhhbXBsZSBieSBnc3RfZWxlbWVudF9tYWtl
X2Zyb21fdXJpKCkgKi8KQEAgLTEzOCw1MiArMTAyLDkgQEAgc3RhdGljIHZvaWQgd2Via2l0X21l
ZGlhX3NyY19jbGFzc19pbml0KFdlYktpdE1lZGlhU3JjQ2xhc3MqIGtsYXNzKQogICAgIGdfdHlw
ZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdE1lZGlhU3JjUHJpdmF0ZSkp
OwogfQogCi1zdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY0FkZFNyYyhXZWJLaXRNZWRpYVNyYyog
c3JjLCBHc3RFbGVtZW50KiBlbGVtZW50KQotewotICAgIEdzdFBhZCogZ2hvc3RQYWQ7Ci0gICAg
V2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwotCi0gICAgaWYgKCFnc3Rf
YmluX2FkZChHU1RfQklOKHNyYyksIGVsZW1lbnQpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpF
Q1Qoc3JjLCAiU3JjIGVsZW1lbnQgbm90IGFkZGVkIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgR1JlZlB0cjxHc3RQYWQ+IHRhcmdldHNyYyA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9n
ZXRfc3RhdGljX3BhZChlbGVtZW50LCAic3JjIikpOwotICAgIGlmICghdGFyZ2V0c3JjKSB7Ci0g
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUGFkIG5vdCBmb3VuZCIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChl
bGVtZW50KTsKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBuYW1lKGdfc3RyZHVwX3ByaW50Zigic3Jj
XyV1IiwgcHJpdi0+bmJTb3VyY2UpKTsKLSAgICBnaG9zdFBhZCA9IFdlYkNvcmU6OndlYmtpdEdz
dEdob3N0UGFkRnJvbVN0YXRpY1RlbXBsYXRlKCZzcmNUZW1wbGF0ZSwgbmFtZS5nZXQoKSwgdGFy
Z2V0c3JjLmdldCgpKTsKLSAgICBnc3RfcGFkX3NldF9hY3RpdmUoZ2hvc3RQYWQsIFRSVUUpOwot
Ci0gICAgcHJpdi0+bmJTb3VyY2UrKzsKLQotICAgIGlmIChwcml2LT5zb3VyY2VWaWRlby5hcHBz
cmMgPT0gZWxlbWVudCkKLSAgICAgICAgcHJpdi0+c291cmNlVmlkZW8uc3JjcGFkID0gZ2hvc3RQ
YWQ7Ci0gICAgZWxzZSBpZiAocHJpdi0+c291cmNlQXVkaW8uYXBwc3JjID09IGVsZW1lbnQpCi0g
ICAgICAgIHByaXYtPnNvdXJjZUF1ZGlvLnNyY3BhZCA9IGdob3N0UGFkOwotCi0gICAgR1NUX09C
SkVDVF9GTEFHX1NFVChnaG9zdFBhZCwgR1NUX1BBRF9GTEFHX05FRURfUEFSRU5UKTsKLSAgICBn
c3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbihnaG9zdFBhZCwgd2ViS2l0TWVkaWFTcmNRdWVyeVdp
dGhQYXJlbnQpOwotfQotCiBzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfc3JjX2luaXQoV2ViS2l0
TWVkaWFTcmMqIHNyYykKIHsKLSAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBXRUJL
SVRfTUVESUFfU1JDX0dFVF9QUklWQVRFKHNyYyk7Ci0gICAgc3JjLT5wcml2ID0gcHJpdjsKLSAg
ICBuZXcgKHByaXYpIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSgpOwotCi0gICAgcHJpdi0+c291cmNl
VmlkZW8uYXBwc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhcHBzcmMiLCAidmlkZW9h
cHBzcmMiKTsKLSAgICBnc3RfYXBwX3NyY19zZXRfY2FsbGJhY2tzKEdTVF9BUFBfU1JDKHByaXYt
PnNvdXJjZVZpZGVvLmFwcHNyYyksICZhcHBzcmNDYWxsYmFja3NWaWRlbywgc3JjLCAwKTsKLSAg
ICBnc3RfYXBwX3NyY19zZXRfc3RyZWFtX3R5cGUoR1NUX0FQUF9TUkMocHJpdi0+c291cmNlVmlk
ZW8uYXBwc3JjKSwgR1NUX0FQUF9TVFJFQU1fVFlQRV9TRUVLQUJMRSk7Ci0gICAgd2ViS2l0TWVk
aWFTcmNBZGRTcmMoc3JjLCBwcml2LT5zb3VyY2VWaWRlby5hcHBzcmMpOwotCi0gICAgcHJpdi0+
c291cmNlQXVkaW8uYXBwc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhcHBzcmMiLCAi
YXVkaW9hcHBzcmMiKTsKLSAgICBnc3RfYXBwX3NyY19zZXRfY2FsbGJhY2tzKEdTVF9BUFBfU1JD
KHByaXYtPnNvdXJjZUF1ZGlvLmFwcHNyYyksICZhcHBzcmNDYWxsYmFja3NBdWRpbywgc3JjLCAw
KTsKLSAgICBnc3RfYXBwX3NyY19zZXRfc3RyZWFtX3R5cGUoR1NUX0FQUF9TUkMocHJpdi0+c291
cmNlQXVkaW8uYXBwc3JjKSwgR1NUX0FQUF9TVFJFQU1fVFlQRV9TRUVLQUJMRSk7Ci0gICAgd2Vi
S2l0TWVkaWFTcmNBZGRTcmMoc3JjLCBwcml2LT5zb3VyY2VBdWRpby5hcHBzcmMpOworICAgIHNy
Yy0+cHJpdiA9IFdFQktJVF9NRURJQV9TUkNfR0VUX1BSSVZBVEUoc3JjKTsKIH0KIAogc3RhdGlj
IHZvaWQgd2ViS2l0TWVkaWFTcmNGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCkBAIC0xOTEsOCAr
MTEyLDggQEAgc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNGaW5hbGl6ZShHT2JqZWN0KiBvYmpl
Y3QpCiAgICAgV2ViS2l0TWVkaWFTcmMqIHNyYyA9IFdFQktJVF9NRURJQV9TUkMob2JqZWN0KTsK
ICAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CiAKLSAgICBnX2Zy
ZWUocHJpdi0+dXJpKTsKLSAgICBwcml2LT5+V2ViS2l0TWVkaWFTcmNQcml2YXRlKCk7CisgICAg
Ly8gVE9ETzogRnJlZSBzb3VyY2VzCisgICAgZ19mcmVlKHByaXYtPmxvY2F0aW9uKTsKIAogICAg
IEdTVF9DQUxMX1BBUkVOVChHX09CSkVDVF9DTEFTUywgZmluYWxpemUsIChvYmplY3QpKTsKIH0K
QEAgLTIwMCw2ICsxMjEsNyBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY0ZpbmFsaXplKEdP
YmplY3QqIG9iamVjdCkKIHN0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjU2V0UHJvcGVydHkoR09i
amVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNw
ZWMqIHBzcGVjKQogewogICAgIFdlYktpdE1lZGlhU3JjKiBzcmMgPSBXRUJLSVRfTUVESUFfU1JD
KG9iamVjdCk7CisKICAgICBzd2l0Y2ggKHByb3BJZCkgewogICAgIGNhc2UgUHJvcExvY2F0aW9u
OgogICAgICAgICBnc3RfdXJpX2hhbmRsZXJfc2V0X3VyaShyZWludGVycHJldF9jYXN0PEdzdFVS
SUhhbmRsZXIqPihzcmMpLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpLCAwKTsKQEAgLTIxOCw3
ICsxNDAsNyBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY0dldFByb3BlcnR5KEdPYmplY3Qq
IG9iamVjdCwgZ3VpbnQgcHJvcElkLCBHVmFsdWUqIHZhbAogICAgIEdTVF9PQkpFQ1RfTE9DSyhz
cmMpOwogICAgIHN3aXRjaCAocHJvcElkKSB7CiAgICAgY2FzZSBQcm9wTG9jYXRpb246Ci0gICAg
ICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgcHJpdi0+dXJpKTsKKyAgICAgICAgZ192YWx1
ZV9zZXRfc3RyaW5nKHZhbHVlLCBwcml2LT5sb2NhdGlvbik7CiAgICAgICAgIGJyZWFrOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmpl
Y3QsIHByb3BJZCwgcHNwZWMpOwpAQCAtMjI3LDExNCArMTQ5LDIyIEBAIHN0YXRpYyB2b2lkIHdl
YktpdE1lZGlhU3JjR2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIEdW
YWx1ZSogdmFsCiAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKIH0KIAotLy8gbXVzdCBiZSBj
YWxsZWQgb24gbWFpbiB0aHJlYWQgYW5kIHdpdGggb2JqZWN0IHVubG9ja2VkCi1zdGF0aWMgdm9p
ZCB3ZWJLaXRNZWRpYVZpZGVvU3JjU3RvcChXZWJLaXRNZWRpYVNyYyogc3JjKQorc3RhdGljIHZv
aWQgd2ViS2l0TWVkaWFTcmNEb0FzeW5jU3RhcnQoV2ViS2l0TWVkaWFTcmMqIHNyYykKIHsKICAg
ICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7Ci0gICAgZ2Jvb2xlYW4g
c2Vla2luZzsKLQotICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwotCi0gICAgc2Vla2luZyA9IHBy
aXYtPnNvdXJjZVZpZGVvLnNlZWsuaXNBY3RpdmUoKTsKLQotICAgIHByaXYtPnNvdXJjZVZpZGVv
LnN0YXJ0LmNhbmNlbCgpOwotCi0gICAgcHJpdi0+cGxheWVyID0gMDsKLSAgICBwcml2LT5wbGF5
YmluID0gMDsKLQotICAgIHByaXYtPnNvdXJjZVZpZGVvLm5lZWREYXRhLmNhbmNlbCgpOwotICAg
IHByaXYtPnNvdXJjZVZpZGVvLmVub3VnaERhdGEuY2FuY2VsKCk7Ci0gICAgcHJpdi0+c291cmNl
VmlkZW8uc2Vlay5jYW5jZWwoKTsKLQotICAgIHByaXYtPnNvdXJjZVZpZGVvLnBhdXNlZCA9IEZB
TFNFOwotICAgIHByaXYtPnNvdXJjZVZpZGVvLm9mZnNldCA9IDA7Ci0gICAgcHJpdi0+c2Vla2Fi
bGUgPSBGQUxTRTsKLQotICAgIHByaXYtPmR1cmF0aW9uID0gMDsKLSAgICBwcml2LT5uYlNvdXJj
ZSA9IDA7Ci0KLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwotCi0gICAgaWYgKHByaXYtPnNv
dXJjZVZpZGVvLmFwcHNyYykgewotICAgICAgICBnc3RfYXBwX3NyY19zZXRfY2FwcyhHU1RfQVBQ
X1NSQyhwcml2LT5zb3VyY2VWaWRlby5hcHBzcmMpLCAwKTsKLSAgICAgICAgaWYgKCFzZWVraW5n
KQotICAgICAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X3NpemUoR1NUX0FQUF9TUkMocHJpdi0+c291
cmNlVmlkZW8uYXBwc3JjKSwgLTEpOwotICAgIH0KLQotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3Jj
LCAiU3RvcHBlZCByZXF1ZXN0Iik7CisgICAgcHJpdi0+YXN5bmNTdGFydCA9IHRydWU7CisgICAg
R1NUX0JJTl9DTEFTUyhwYXJlbnRfY2xhc3MpLT5oYW5kbGVfbWVzc2FnZShHU1RfQklOKHNyYyks
CisgICAgICAgIGdzdF9tZXNzYWdlX25ld19hc3luY19zdGFydChHU1RfT0JKRUNUKHNyYykpKTsK
IH0KIAotc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFBdWRpb1NyY1N0b3AoV2ViS2l0TWVkaWFTcmMq
IHNyYykKK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjRG9Bc3luY0RvbmUoV2ViS2l0TWVkaWFT
cmMqIHNyYykKIHsKICAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7
Ci0gICAgZ2Jvb2xlYW4gc2Vla2luZzsKLQotICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwotCi0g
ICAgc2Vla2luZyA9IHByaXYtPnNvdXJjZUF1ZGlvLnNlZWsuaXNBY3RpdmUoKTsKLQotICAgIHBy
aXYtPnNvdXJjZUF1ZGlvLnN0YXJ0LmNhbmNlbCgpOwotCi0gICAgcHJpdi0+cGxheWVyID0gMDsK
LQotICAgIHByaXYtPnBsYXliaW4gPSAwOwotCi0gICAgcHJpdi0+c291cmNlQXVkaW8ubmVlZERh
dGEuY2FuY2VsKCk7Ci0gICAgcHJpdi0+c291cmNlQXVkaW8uZW5vdWdoRGF0YS5jYW5jZWwoKTsK
LSAgICBwcml2LT5zb3VyY2VBdWRpby5zZWVrLmNhbmNlbCgpOwotCi0gICAgcHJpdi0+c291cmNl
QXVkaW8ucGF1c2VkID0gRkFMU0U7Ci0KLSAgICBwcml2LT5zb3VyY2VBdWRpby5vZmZzZXQgPSAw
OwotCi0gICAgcHJpdi0+c2Vla2FibGUgPSBGQUxTRTsKLQotICAgIHByaXYtPmR1cmF0aW9uID0g
MDsKLSAgICBwcml2LT5uYlNvdXJjZSA9IDA7Ci0KLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMp
OwotCi0gICAgaWYgKHByaXYtPnNvdXJjZUF1ZGlvLmFwcHNyYykgewotICAgICAgICBnc3RfYXBw
X3NyY19zZXRfY2FwcyhHU1RfQVBQX1NSQyhwcml2LT5zb3VyY2VBdWRpby5hcHBzcmMpLCAwKTsK
LSAgICAgICAgaWYgKCFzZWVraW5nKQotICAgICAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X3NpemUo
R1NUX0FQUF9TUkMocHJpdi0+c291cmNlQXVkaW8uYXBwc3JjKSwgLTEpOworICAgIGlmIChwcml2
LT5hc3luY1N0YXJ0KSB7CisgICAgICAgIEdTVF9CSU5fQ0xBU1MocGFyZW50X2NsYXNzKS0+aGFu
ZGxlX21lc3NhZ2UoR1NUX0JJTihzcmMpLAorICAgICAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X2Fz
eW5jX2RvbmUoR1NUX09CSkVDVChzcmMpLCBHU1RfQ0xPQ0tfVElNRV9OT05FKSk7CisgICAgICAg
IHByaXYtPmFzeW5jU3RhcnQgPSBmYWxzZTsKICAgICB9Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNU
KHNyYywgIlN0b3BwZWQgcmVxdWVzdCIpOwotfQotCi0vLyBtdXN0IGJlIGNhbGxlZCBvbiBtYWlu
IHRocmVhZCBhbmQgd2l0aCBvYmplY3QgdW5sb2NrZWQKLXN0YXRpYyB2b2lkIHdlYktpdE1lZGlh
VmlkZW9TcmNTdGFydChXZWJLaXRNZWRpYVNyYyogc3JjKQotewotICAgIFdlYktpdE1lZGlhU3Jj
UHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKLQotICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwot
ICAgIGlmICghcHJpdi0+dXJpKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAiTm8g
VVJJIHByb3ZpZGVkIik7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7Ci0gICAgICAg
IHdlYktpdE1lZGlhVmlkZW9TcmNTdG9wKHNyYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAi
U3RhcnRlZCByZXF1ZXN0Iik7Ci19Ci0KLS8vIG11c3QgYmUgY2FsbGVkIG9uIG1haW4gdGhyZWFk
IGFuZCB3aXRoIG9iamVjdCB1bmxvY2tlZAotc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFBdWRpb1Ny
Y1N0YXJ0KFdlYktpdE1lZGlhU3JjKiBzcmMpCi17Ci0gICAgV2ViS2l0TWVkaWFTcmNQcml2YXRl
KiBwcml2ID0gc3JjLT5wcml2OwotCi0gICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7Ci0gICAgaWYg
KCFwcml2LT51cmkpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzcmMsICJObyBVUkkgcHJv
dmlkZWQiKTsKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKLSAgICAgICAgd2ViS2l0
TWVkaWFBdWRpb1NyY1N0b3Aoc3JjKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdT
VF9PQkpFQ1RfVU5MT0NLKHNyYyk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJTdGFydGVk
IHJlcXVlc3QiKTsKIH0KIAogc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHdlYktpdE1lZGlh
U3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNp
dGlvbikKQEAgLTM0NCwxMyArMTc0LDkgQEAgc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHdl
YktpdE1lZGlhU3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3QKICAgICBX
ZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CiAKICAgICBzd2l0Y2ggKHRy
YW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTlVMTF9UT19SRUFEWToKLSAg
ICAgICAgaWYgKCFwcml2LT5zb3VyY2VWaWRlby5hcHBzcmMgJiYgIXByaXYtPnNvdXJjZUF1ZGlv
LmFwcHNyYykgewotICAgICAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKGVsZW1lbnQs
Ci0gICAgICAgICAgICAgICAgZ3N0X21pc3NpbmdfZWxlbWVudF9tZXNzYWdlX25ldyhlbGVtZW50
LCAiYXBwc3JjIikpOwotICAgICAgICAgICAgR1NUX0VMRU1FTlRfRVJST1Ioc3JjLCBDT1JFLCBN
SVNTSU5HX1BMVUdJTiwgKDApLCAoIm5vIGFwcHNyYyIpKTsKLSAgICAgICAgICAgIHJldHVybiBH
U1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU7Ci0gICAgICAgIH0KKyAgICBjYXNlIEdTVF9TVEFURV9D
SEFOR0VfUkVBRFlfVE9fUEFVU0VEOgorICAgICAgICBwcml2LT5ub01vcmVQYWRzID0gZmFsc2U7
CisgICAgICAgIHdlYktpdE1lZGlhU3JjRG9Bc3luY1N0YXJ0KHNyYyk7CiAgICAgICAgIGJyZWFr
OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpAQCAtMzU5LDM3ICsxODUsMTcgQEAgc3Rh
dGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHdlYktpdE1lZGlhU3JjQ2hhbmdlU3RhdGUoR3N0RWxl
bWVudCogZWxlbWVudCwgR3N0U3QKICAgICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyhwYXJlbnRf
Y2xhc3MpLT5jaGFuZ2Vfc3RhdGUoZWxlbWVudCwgdHJhbnNpdGlvbik7CiAgICAgaWYgKEdfVU5M
SUtFTFkocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkpIHsKICAgICAgICAgR1NUX0RF
QlVHX09CSkVDVChzcmMsICJTdGF0ZSBjaGFuZ2UgZmFpbGVkIik7CisgICAgICAgIHdlYktpdE1l
ZGlhU3JjRG9Bc3luY0RvbmUoc3JjKTsKICAgICAgICAgcmV0dXJuIHJldDsKICAgICB9CiAKICAg
ICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKICAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlf
VE9fUEFVU0VEOgotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlJFQURZLT5QQVVTRUQi
KTsKLSAgICAgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7Ci0KLSAgICAgICAgZ3N0X29iamVjdF9y
ZWYoc3JjKTsKLSAgICAgICAgcHJpdi0+c291cmNlVmlkZW8uc3RhcnQuc2NoZWR1bGUoIltXZWJL
aXRdIHdlYktpdE1lZGlhVmlkZW9TcmNTdGFydCIsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPihzdGQ6
OmJpbmQod2ViS2l0TWVkaWFWaWRlb1NyY1N0YXJ0LCBzcmMpKSwgR19QUklPUklUWV9ERUZBVUxU
LAotICAgICAgICAgICAgW3NyY10geyBnc3Rfb2JqZWN0X3VucmVmKHNyYyk7IH0pOwotCi0gICAg
ICAgIGdzdF9vYmplY3RfcmVmKHNyYyk7Ci0gICAgICAgIHByaXYtPnNvdXJjZUF1ZGlvLnN0YXJ0
LnNjaGVkdWxlKCJbV2ViS2l0XSB3ZWJLaXRNZWRpYUF1ZGlvU3JjU3RhcnQiLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoKT4oc3RkOjpiaW5kKHdlYktpdE1lZGlhQXVkaW9TcmNTdGFydCwgc3JjKSksIEdf
UFJJT1JJVFlfREVGQVVMVCwKLSAgICAgICAgICAgIFtzcmNdIHsgZ3N0X29iamVjdF91bnJlZihz
cmMpOyB9KTsKLQotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOworICAgICAgICByZXQg
PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdTVF9T
VEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNy
YywgIlBBVVNFRC0+UkVBRFkiKTsKLSAgICAgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7Ci0KLSAg
ICAgICAgZ3N0X29iamVjdF9yZWYoc3JjKTsKLSAgICAgICAgcHJpdi0+c291cmNlVmlkZW8uc3Rv
cC5zY2hlZHVsZSgiW1dlYktpdF0gd2ViS2l0TWVkaWFWaWRlb1NyY1N0b3AiLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoKT4oc3RkOjpiaW5kKHdlYktpdE1lZGlhVmlkZW9TcmNTdG9wLCBzcmMpKSwgR19Q
UklPUklUWV9ERUZBVUxULAotICAgICAgICAgICAgW3NyY10geyBnc3Rfb2JqZWN0X3VucmVmKHNy
Yyk7IH0pOwotCi0gICAgICAgIGdzdF9vYmplY3RfcmVmKHNyYyk7Ci0gICAgICAgIHByaXYtPnNv
dXJjZUF1ZGlvLnN0b3Auc2NoZWR1bGUoIltXZWJLaXRdIHdlYktpdE1lZGlhQXVkaW9TcmNTdG9w
Iiwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+KHN0ZDo6YmluZCh3ZWJLaXRNZWRpYUF1ZGlvU3JjU3Rv
cCwgc3JjKSksIEdfUFJJT1JJVFlfREVGQVVMVCwKLSAgICAgICAgICAgIFtzcmNdIHsgZ3N0X29i
amVjdF91bnJlZihzcmMpOyB9KTsKLQotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwor
ICAgICAgICB3ZWJLaXRNZWRpYVNyY0RvQXN5bmNEb25lKHNyYyk7CisgICAgICAgIHByaXYtPm5v
TW9yZVBhZHMgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
YnJlYWs7CkBAIC00MTksNyArMjI1LDcgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhU3Jj
UXVlcnlXaXRoUGFyZW50KEdzdFBhZCogcGFkLCBHc3RPYmplY3QqIHBhcmVudCwgR3MKICAgICB9
CiAgICAgY2FzZSBHU1RfUVVFUllfVVJJOiB7CiAgICAgICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMp
OwotICAgICAgICBnc3RfcXVlcnlfc2V0X3VyaShxdWVyeSwgc3JjLT5wcml2LT51cmkpOworICAg
ICAgICBnc3RfcXVlcnlfc2V0X3VyaShxdWVyeSwgc3JjLT5wcml2LT5sb2NhdGlvbik7CiAgICAg
ICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAgICAgIHJlc3VsdCA9IFRSVUU7CiAgICAg
ICAgIGJyZWFrOwpAQCAtNDU0LDcgKzI2MCw3IEBAIHN0YXRpYyBnY2hhciogd2ViS2l0TWVkaWFT
cmNHZXRVcmkoR3N0VVJJSGFuZGxlciogaGFuZGxlcikKICAgICBnY2hhciogcmV0OwogCiAgICAg
R1NUX09CSkVDVF9MT0NLKHNyYyk7Ci0gICAgcmV0ID0gZ19zdHJkdXAoc3JjLT5wcml2LT51cmkp
OworICAgIHJldCA9IGdfc3RyZHVwKHNyYy0+cHJpdi0+bG9jYXRpb24pOwogICAgIEdTVF9PQkpF
Q1RfVU5MT0NLKHNyYyk7CiAgICAgcmV0dXJuIHJldDsKIH0KQEAgLTQ2MywxNCArMjY5LDE1IEBA
IHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRNZWRpYVNyY1NldFVyaShHc3RVUklIYW5kbGVyKiBoYW5k
bGVyLCBjb25zdCBnY2hhciogdXJpLCBHCiB7CiAgICAgV2ViS2l0TWVkaWFTcmMqIHNyYyA9IFdF
QktJVF9NRURJQV9TUkMoaGFuZGxlcik7CiAgICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2
ID0gc3JjLT5wcml2OworCiAgICAgaWYgKEdTVF9TVEFURShzcmMpID49IEdTVF9TVEFURV9QQVVT
RUQpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzcmMsICJVUkkgY2FuIG9ubHkgYmUgc2V0
IGluIHN0YXRlcyA8IFBBVVNFRCIpOwogICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCiAg
ICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7Ci0gICAgZ19mcmVlKHByaXYtPnVyaSk7Ci0gICAgcHJp
di0+dXJpID0gMDsKKyAgICBnX2ZyZWUocHJpdi0+bG9jYXRpb24pOworICAgIHByaXYtPmxvY2F0
aW9uID0gMDsKICAgICBpZiAoIXVyaSkgewogICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMp
OwogICAgICAgICByZXR1cm4gVFJVRTsKQEAgLTQ3OCwxMSArMjg1LDEwIEBAIHN0YXRpYyBnYm9v
bGVhbiB3ZWJLaXRNZWRpYVNyY1NldFVyaShHc3RVUklIYW5kbGVyKiBoYW5kbGVyLCBjb25zdCBn
Y2hhciogdXJpLCBHCiAKICAgICBXZWJDb3JlOjpVUkwgdXJsKFdlYkNvcmU6OlVSTCgpLCB1cmkp
OwogCi0gICAgcHJpdi0+dXJpID0gZ19zdHJkdXAodXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OworICAgIHByaXYtPmxvY2F0aW9uID0gZ19zdHJkdXAodXJsLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOwogICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAgcmV0dXJuIFRSVUU7CiB9Ci0K
IHN0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjVXJpSGFuZGxlckluaXQoZ3BvaW50ZXIgZ0lmYWNl
LCBncG9pbnRlcikKIHsKICAgICBHc3RVUklIYW5kbGVySW50ZXJmYWNlKiBpZmFjZSA9IChHc3RV
UklIYW5kbGVySW50ZXJmYWNlICopIGdJZmFjZTsKQEAgLTQ5MywyOTYgKzI5OSwxNjQgQEAgc3Rh
dGljIHZvaWQgd2ViS2l0TWVkaWFTcmNVcmlIYW5kbGVySW5pdChncG9pbnRlciBnSWZhY2UsIGdw
b2ludGVyKQogICAgIGlmYWNlLT5zZXRfdXJpID0gd2ViS2l0TWVkaWFTcmNTZXRVcmk7CiB9CiAK
LS8vIGFwcHNyYyBjYWxsYmFja3MKLXN0YXRpYyB2b2lkIHdlYktpdE1lZGlhVmlkZW9TcmNOZWVk
RGF0YU1haW5DYihXZWJLaXRNZWRpYVNyYyogc3JjKQorbmFtZXNwYWNlIFdlYkNvcmUgeworTWVk
aWFTb3VyY2VDbGllbnRHU3RyZWFtZXI6Ok1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyKFdlYktp
dE1lZGlhU3JjKiBzcmMpCisgICAgOiBtX3NyYyhhZG9wdEdSZWYoc3RhdGljX2Nhc3Q8V2ViS2l0
TWVkaWFTcmMqPihnc3Rfb2JqZWN0X3JlZihzcmMpKSkpCiB7Ci0gICAgV2ViS2l0TWVkaWFTcmNQ
cml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwotCi0gICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7Ci0g
ICAgcHJpdi0+c291cmNlVmlkZW8ucGF1c2VkID0gRkFMU0U7Ci0gICAgR1NUX09CSkVDVF9VTkxP
Q0soc3JjKTsKIH0KIAotc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFBdWRpb1NyY05lZWREYXRhTWFp
bkNiKFdlYktpdE1lZGlhU3JjKiBzcmMpCitNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lcjo6fk1l
ZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyKCkKIHsKLSAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUq
IHByaXYgPSBzcmMtPnByaXY7Ci0KLSAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKLSAgICBwcml2
LT5zb3VyY2VBdWRpby5wYXVzZWQgPSBGQUxTRTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMp
OwogfQogCi1zdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVZpZGVvU3JjTmVlZERhdGFDYihHc3RBcHBT
cmMqLCBndWludCBsZW5ndGgsIGdwb2ludGVyIHVzZXJEYXRhKQorTWVkaWFTb3VyY2VQcml2YXRl
OjpBZGRTdGF0dXMgTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXI6OmFkZFNvdXJjZUJ1ZmZlcihQ
YXNzUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGU+IHNvdXJjZUJ1ZmZlclByaXZhdGUsIGNvbnN0
IENvbnRlbnRUeXBlJikKIHsKLSAgICBXZWJLaXRNZWRpYVNyYyogc3JjID0gV0VCS0lUX01FRElB
X1NSQyh1c2VyRGF0YSk7Ci0gICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5w
cml2OwotCi0gICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJOZWVkIG1vcmUgZGF0YTogJXUiLCBs
ZW5ndGgpOworICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IG1fc3JjLT5wcml2Owog
Ci0gICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7Ci0gICAgaWYgKHByaXYtPnNvdXJjZVZpZGVvLm5l
ZWREYXRhLmlzU2NoZWR1bGVkKCkgfHwgIXByaXYtPnNvdXJjZVZpZGVvLnBhdXNlZCkgewotICAg
ICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKHBy
aXYtPm5vTW9yZVBhZHMpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChtX3NyYy5nZXQoKSwg
IkFkZGluZyBuZXcgc291cmNlIGJ1ZmZlcnMgYWZ0ZXIgZmlyc3QgZGF0YSBub3Qgc3VwcG9ydGVk
IHlldCIpOworICAgICAgICByZXR1cm4gTWVkaWFTb3VyY2VQcml2YXRlOjpOb3RTdXBwb3J0ZWQ7
CiAgICAgfQogCi0gICAgZ3N0X29iamVjdF9yZWYoc3JjKTsKLSAgICBwcml2LT5zb3VyY2VWaWRl
by5uZWVkRGF0YS5zY2hlZHVsZSgiW1dlYktpdF0gd2ViS2l0TWVkaWFWaWRlb1NyY05lZWREYXRh
TWFpbkNiIiwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+KHN0ZDo6YmluZCh3ZWJLaXRNZWRpYVZpZGVv
U3JjTmVlZERhdGFNYWluQ2IsIHNyYykpLCBHX1BSSU9SSVRZX0RFRkFVTFQsCi0gICAgICAgIFtz
cmNdIHsgZ3N0X29iamVjdF91bnJlZihzcmMpOyB9KTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhz
cmMpOwotfQorICAgIEdTVF9ERUJVR19PQkpFQ1QobV9zcmMuZ2V0KCksICJTdGF0ZSAlZCIsIHN0
YXRpY19jYXN0PGludD4oR1NUX1NUQVRFKG1fc3JjLmdldCgpKSkpOwogCi1zdGF0aWMgdm9pZCB3
ZWJLaXRNZWRpYUF1ZGlvU3JjTmVlZERhdGFDYihHc3RBcHBTcmMqLCBndWludCBsZW5ndGgsIGdw
b2ludGVyIHVzZXJEYXRhKQotewotICAgIFdlYktpdE1lZGlhU3JjKiBzcmMgPSBXRUJLSVRfTUVE
SUFfU1JDKHVzZXJEYXRhKTsKLSAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBzcmMt
PnByaXY7CisgICAgR1NUX09CSkVDVF9MT0NLKG1fc3JjLmdldCgpKTsKIAotICAgIEdTVF9ERUJV
R19PQkpFQ1Qoc3JjLCAiTmVlZCBtb3JlIGRhdGE6ICV1IiwgbGVuZ3RoKTsKKyAgICBTb3VyY2Uq
IHNvdXJjZSA9IGdfbmV3MChTb3VyY2UsIDEpOworICAgIGd1aW50IG51bWJlck9mU291cmNlcyA9
IGdfbGlzdF9sZW5ndGgocHJpdi0+c291cmNlcyk7CisgICAgR1VuaXF1ZVB0cjxnY2hhcj4gc3Jj
TmFtZShnX3N0cmR1cF9wcmludGYoInNyYyV1IiwgbnVtYmVyT2ZTb3VyY2VzKSk7CiAKLSAgICBH
U1RfT0JKRUNUX0xPQ0soc3JjKTsKLSAgICBpZiAocHJpdi0+c291cmNlQXVkaW8ubmVlZERhdGEu
aXNTY2hlZHVsZWQoKSB8fCAhcHJpdi0+c291cmNlQXVkaW8ucGF1c2VkKSB7Ci0gICAgICAgIEdT
VF9PQkpFQ1RfVU5MT0NLKHNyYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgc291cmNl
LT5zcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImFwcHNyYyIsIHNyY05hbWUuZ2V0KCkp
OworICAgIHNvdXJjZS0+c291cmNlQnVmZmVyID0gc291cmNlQnVmZmVyUHJpdmF0ZS5nZXQoKTsK
IAotICAgIGdzdF9vYmplY3RfcmVmKHNyYyk7Ci0gICAgcHJpdi0+c291cmNlQXVkaW8ubmVlZERh
dGEuc2NoZWR1bGUoIltXZWJLaXRdIHdlYktpdE1lZGlhQXVkaW9TcmNOZWVkRGF0YU1haW5DYiIs
IHN0ZDo6ZnVuY3Rpb248dm9pZCgpPihzdGQ6OmJpbmQod2ViS2l0TWVkaWFBdWRpb1NyY05lZWRE
YXRhTWFpbkNiLCBzcmMpKSwgR19QUklPUklUWV9ERUZBVUxULAotICAgICAgICBbc3JjXSB7IGdz
dF9vYmplY3RfdW5yZWYoc3JjKTsgfSk7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKLX0K
KyAgICBHVW5pcXVlUHRyPGdjaGFyPiBwYWROYW1lKGdfc3RyZHVwX3ByaW50Zigic3JjXyV1Iiwg
bnVtYmVyT2ZTb3VyY2VzKSk7CisgICAgcHJpdi0+c291cmNlcyA9IGdfbGlzdF9wcmVwZW5kKHBy
aXYtPnNvdXJjZXMsIHNvdXJjZSk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sobV9zcmMuZ2V0KCkp
OwogCi1zdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVZpZGVvU3JjRW5vdWdoRGF0YU1haW5DYihXZWJL
aXRNZWRpYVNyYyogc3JjKQotewotICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IHNy
Yy0+cHJpdjsKKyAgICBwcml2LT5oYXZlQXBwc3JjID0gc291cmNlLT5zcmM7CiAKLSAgICBHU1Rf
T0JKRUNUX0xPQ0soc3JjKTsKLSAgICBwcml2LT5zb3VyY2VWaWRlby5wYXVzZWQgPSBUUlVFOwot
ICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7Ci19CisgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTiht
X3NyYy5nZXQoKSksIHNvdXJjZS0+c3JjKTsKKyAgICBHUmVmUHRyPEdzdFBhZD4gcGFkID0gYWRv
cHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHNvdXJjZS0+c3JjLCAic3JjIikpOwor
ICAgIEdSZWZQdHI8R3N0UGFkPiBnaG9zdFBhZCA9IGFkb3B0R1JlZihnc3RfZ2hvc3RfcGFkX25l
d19mcm9tX3RlbXBsYXRlKHBhZE5hbWUuZ2V0KCksIHBhZC5nZXQoKSwKKyAgICAgICAgZ3N0X3N0
YXRpY19wYWRfdGVtcGxhdGVfZ2V0KCZzcmNUZW1wbGF0ZSkpKTsKKyAgICBnc3RfcGFkX3NldF9x
dWVyeV9mdW5jdGlvbihnaG9zdFBhZC5nZXQoKSwgd2ViS2l0TWVkaWFTcmNRdWVyeVdpdGhQYXJl
bnQpOworICAgIGdzdF9wYWRfc2V0X2FjdGl2ZShnaG9zdFBhZC5nZXQoKSwgVFJVRSk7CisgICAg
Z3N0X2VsZW1lbnRfYWRkX3BhZChHU1RfRUxFTUVOVChtX3NyYy5nZXQoKSksIGdob3N0UGFkLmxl
YWtSZWYoKSk7CiAKLXN0YXRpYyB2b2lkIHdlYktpdE1lZGlhQXVkaW9TcmNFbm91Z2hEYXRhTWFp
bkNiKFdlYktpdE1lZGlhU3JjKiBzcmMpCi17Ci0gICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBw
cml2ID0gc3JjLT5wcml2OworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQo
c291cmNlLT5zcmMpOwogCi0gICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7Ci0gICAgcHJpdi0+c291
cmNlQXVkaW8ucGF1c2VkID0gVFJVRTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOworICAg
IHJldHVybiBNZWRpYVNvdXJjZVByaXZhdGU6Ok9rOwogfQogCi1zdGF0aWMgdm9pZCB3ZWJLaXRN
ZWRpYVZpZGVvU3JjRW5vdWdoRGF0YUNiKEdzdEFwcFNyYyosIGdwb2ludGVyIHVzZXJEYXRhKQor
dm9pZCBNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lcjo6ZHVyYXRpb25DaGFuZ2VkKGNvbnN0IE1l
ZGlhVGltZSYgZHVyYXRpb24pCiB7Ci0gICAgV2ViS2l0TWVkaWFTcmMqIHNyYyA9IFdFQktJVF9N
RURJQV9TUkModXNlckRhdGEpOwotICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IHNy
Yy0+cHJpdjsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiSGF2ZSBlbm91Z2ggZGF0YSIp
OwotCi0gICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7Ci0gICAgaWYgKHByaXYtPnNvdXJjZVZpZGVv
LmVub3VnaERhdGEuaXNTY2hlZHVsZWQoKSB8fCBwcml2LT5zb3VyY2VWaWRlby5wYXVzZWQpIHsK
LSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBtX3NyYy0+cHJpdjsKKyAgICBHc3RD
bG9ja1RpbWUgZ3N0RHVyYXRpb24gPSBnc3RfdXRpbF91aW50NjRfc2NhbGUoZHVyYXRpb24udGlt
ZVZhbHVlKCksIEdTVF9TRUNPTkQsIGR1cmF0aW9uLnRpbWVTY2FsZSgpKTsKIAotICAgIGdzdF9v
YmplY3RfcmVmKHNyYyk7Ci0gICAgcHJpdi0+c291cmNlVmlkZW8uZW5vdWdoRGF0YS5zY2hlZHVs
ZSgiW1dlYktpdF0gd2ViS2l0TWVkaWFWaWRlb1NyY0Vub3VnaERhdGFNYWluQ2IiLCBzdGQ6OmZ1
bmN0aW9uPHZvaWQoKT4oc3RkOjpiaW5kKHdlYktpdE1lZGlhVmlkZW9TcmNFbm91Z2hEYXRhTWFp
bkNiLCBzcmMpKSwgR19QUklPUklUWV9ERUZBVUxULAotICAgICAgICBbc3JjXSB7IGdzdF9vYmpl
Y3RfdW5yZWYoc3JjKTsgfSk7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3NyYy5nZXQoKSwgIlJl
Y2VpdmVkIGR1cmF0aW9uOiAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MoZ3N0RHVy
YXRpb24pKTsKIAotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CisgICAgR1NUX09CSkVDVF9M
T0NLKG1fc3JjLmdldCgpKTsKKyAgICBwcml2LT5kdXJhdGlvbiA9IGdzdER1cmF0aW9uOworICAg
IEdTVF9PQkpFQ1RfVU5MT0NLKG1fc3JjLmdldCgpKTsKKyAgICBnc3RfZWxlbWVudF9wb3N0X21l
c3NhZ2UoR1NUX0VMRU1FTlQobV9zcmMuZ2V0KCkpLCBnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb25f
Y2hhbmdlZChHU1RfT0JKRUNUKG1fc3JjLmdldCgpKSkpOwogfQogCi1zdGF0aWMgdm9pZCB3ZWJL
aXRNZWRpYUF1ZGlvU3JjRW5vdWdoRGF0YUNiKEdzdEFwcFNyYyosIGdwb2ludGVyIHVzZXJEYXRh
KQorU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6QXBwZW5kUmVzdWx0IE1lZGlhU291cmNlQ2xp
ZW50R1N0cmVhbWVyOjphcHBlbmQoUGFzc1JlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlPiBzb3Vy
Y2VCdWZmZXJQcml2YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5n
dGgpCiB7Ci0gICAgV2ViS2l0TWVkaWFTcmMqIHNyYyA9IFdFQktJVF9NRURJQV9TUkModXNlckRh
dGEpOwotICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKLQotICAg
IEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiSGF2ZSBlbm91Z2ggZGF0YSIpOworICAgIFdlYktpdE1l
ZGlhU3JjUHJpdmF0ZSogcHJpdiA9IG1fc3JjLT5wcml2OworICAgIEdzdEZsb3dSZXR1cm4gcmV0
ID0gR1NUX0ZMT1dfT0s7CisgICAgR3N0QnVmZmVyKiBidWZmZXI7CisgICAgU291cmNlKiBzb3Vy
Y2UgPSAwOwogCi0gICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7Ci0gICAgaWYgKHByaXYtPnNvdXJj
ZUF1ZGlvLmVub3VnaERhdGEuaXNTY2hlZHVsZWQoKSB8fCBwcml2LT5zb3VyY2VBdWRpby5wYXVz
ZWQpIHsKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKLSAgICAgICAgcmV0dXJuOwor
ICAgIGlmICghcHJpdi0+bm9Nb3JlUGFkcykgeworICAgICAgICBwcml2LT5ub01vcmVQYWRzID0g
dHJ1ZTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfbm9fbW9yZV9wYWRzKEdTVF9FTEVNRU5UKG1fc3Jj
LmdldCgpKSk7CisgICAgICAgIHdlYktpdE1lZGlhU3JjRG9Bc3luY0RvbmUobV9zcmMuZ2V0KCkp
OwogICAgIH0KIAotICAgIGdzdF9vYmplY3RfcmVmKHNyYyk7Ci0gICAgcHJpdi0+c291cmNlQXVk
aW8uZW5vdWdoRGF0YS5zY2hlZHVsZSgiW1dlYktpdF0gd2ViS2l0TWVkaWFBdWRpb1NyY0Vub3Vn
aERhdGFNYWluQ2IiLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4oc3RkOjpiaW5kKHdlYktpdE1lZGlh
QXVkaW9TcmNFbm91Z2hEYXRhTWFpbkNiLCBzcmMpKSwgR19QUklPUklUWV9ERUZBVUxULAotICAg
ICAgICBbc3JjXSB7IGdzdF9vYmplY3RfdW5yZWYoc3JjKTsgfSk7Ci0KLSAgICBHU1RfT0JKRUNU
X1VOTE9DSyhzcmMpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVZpZGVvU3JjU2Vla01h
aW5DYihXZWJLaXRNZWRpYVNyYyopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotCi1z
dGF0aWMgdm9pZCB3ZWJLaXRNZWRpYUF1ZGlvU3JjU2Vla01haW5DYihXZWJLaXRNZWRpYVNyYyop
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYktpdE1l
ZGlhVmlkZW9TcmNTZWVrRGF0YUNiKEdzdEFwcFNyYyosIGd1aW50NjQgb2Zmc2V0LCBncG9pbnRl
ciB1c2VyRGF0YSkKLXsKLSAgICBXZWJLaXRNZWRpYVNyYyogc3JjID0gV0VCS0lUX01FRElBX1NS
Qyh1c2VyRGF0YSk7Ci0gICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2
OwotCi0gICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJTZWVraW5nIHRvIG9mZnNldDogJSIgR19H
VUlOVDY0X0ZPUk1BVCwgb2Zmc2V0KTsKLSAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKLSAgICBp
ZiAob2Zmc2V0ID09IHByaXYtPnNvdXJjZVZpZGVvLm9mZnNldCAmJiBwcml2LT5zb3VyY2VWaWRl
by5yZXF1ZXN0ZWRPZmZzZXQgPT0gcHJpdi0+c291cmNlVmlkZW8ub2Zmc2V0KSB7Ci0gICAgICAg
IEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7Ci0gICAgICAgIHJldHVybiBUUlVFOworICAgIGZvciAo
R0xpc3QqIGl0ZXIgPSBwcml2LT5zb3VyY2VzOyBpdGVyOyBpdGVyID0gaXRlci0+bmV4dCkgewor
ICAgICAgICBTb3VyY2UqIHRtcCA9IHN0YXRpY19jYXN0PFNvdXJjZSo+KGl0ZXItPmRhdGEpOwor
ICAgICAgICBpZiAodG1wLT5zb3VyY2VCdWZmZXIgPT0gc291cmNlQnVmZmVyUHJpdmF0ZS5nZXQo
KSkgeworICAgICAgICAgICAgc291cmNlID0gdG1wOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KICAgICB9CiAKLSAgICBpZiAoIXByaXYtPnNlZWthYmxlKSB7Ci0gICAgICAgIEdTVF9P
QkpFQ1RfVU5MT0NLKHNyYyk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gICAgaWYg
KG9mZnNldCA+IHByaXYtPnNvdXJjZVZpZGVvLnNpemUpIHsKLSAgICAgICAgR1NUX09CSkVDVF9V
TkxPQ0soc3JjKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KKyAgICBpZiAoIXNvdXJj
ZSB8fCAhc291cmNlLT5zcmMpCisgICAgICAgIHJldHVybiBTb3VyY2VCdWZmZXJQcml2YXRlQ2xp
ZW50OjpSZWFkU3RyZWFtRmFpbGVkOwogCi0gICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJEb2lu
ZyByYW5nZS1yZXF1ZXN0IHNlZWsiKTsKLSAgICBwcml2LT5zb3VyY2VWaWRlby5yZXF1ZXN0ZWRP
ZmZzZXQgPSBvZmZzZXQ7CisgICAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jKGxl
bmd0aCk7CisgICAgZ3N0X2J1ZmZlcl9maWxsKGJ1ZmZlciwgMCwgZGF0YSwgbGVuZ3RoKTsKIAot
ICAgIGdzdF9vYmplY3RfcmVmKHNyYyk7Ci0gICAgcHJpdi0+c291cmNlVmlkZW8uc2Vlay5zY2hl
ZHVsZSgiW1dlYktpdF0gd2ViS2l0TWVkaWFWaWRlb1NyY1NlZWtNYWluQ2IiLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoKT4oc3RkOjpiaW5kKHdlYktpdE1lZGlhVmlkZW9TcmNTZWVrTWFpbkNiLCBzcmMp
KSwgR19QUklPUklUWV9ERUZBVUxULAotICAgICAgICBbc3JjXSB7IGdzdF9vYmplY3RfdW5yZWYo
c3JjKTsgfSk7CisgICAgcmV0ID0gZ3N0X2FwcF9zcmNfcHVzaF9idWZmZXIoR1NUX0FQUF9TUkMo
c291cmNlLT5zcmMpLCBidWZmZXIpOworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9zcmMuZ2V0KCks
ICJwdXNoIGJ1ZmZlciAlZFxuIiwgc3RhdGljX2Nhc3Q8aW50PihyZXQpKTsKIAotICAgIEdTVF9P
QkpFQ1RfVU5MT0NLKHNyYyk7CisgICAgaWYgKHJldCA9PSBHU1RfRkxPV19PSykKKyAgICAgICAg
cmV0dXJuIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkFwcGVuZFN1Y2NlZWRlZDsKIAotICAg
IHJldHVybiBUUlVFOworICAgIHJldHVybiBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpSZWFk
U3RyZWFtRmFpbGVkOwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0TWVkaWFBdWRpb1NyY1Nl
ZWtEYXRhQ2IoR3N0QXBwU3JjKiwgZ3VpbnQ2NCBvZmZzZXQsIGdwb2ludGVyIHVzZXJEYXRhKQor
dm9pZCBNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lcjo6bWFya0VuZE9mU3RyZWFtKE1lZGlhU291
cmNlUHJpdmF0ZTo6RW5kT2ZTdHJlYW1TdGF0dXMpCiB7Ci0gICAgV2ViS2l0TWVkaWFTcmMqIHNy
YyA9IFdFQktJVF9NRURJQV9TUkModXNlckRhdGEpOwotICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0
ZSogcHJpdiA9IHNyYy0+cHJpdjsKKyAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBt
X3NyYy0+cHJpdjsKIAotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2Vla2luZyB0byBvZmZz
ZXQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG9mZnNldCk7Ci0gICAgR1NUX09CSkVDVF9MT0NLKHNy
Yyk7Ci0gICAgaWYgKG9mZnNldCA9PSBwcml2LT5zb3VyY2VBdWRpby5vZmZzZXQgJiYgcHJpdi0+
c291cmNlQXVkaW8ucmVxdWVzdGVkT2Zmc2V0ID09IHByaXYtPnNvdXJjZUF1ZGlvLm9mZnNldCkg
ewotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwotICAgICAgICByZXR1cm4gVFJVRTsK
LSAgICB9CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3NyYy5nZXQoKSwgIkhhdmUgRU9TIik7CiAK
LSAgICBpZiAoIXByaXYtPnNlZWthYmxlKSB7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNy
Yyk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICBpZiAoIXByaXYtPm5vTW9yZVBhZHMpIHsK
KyAgICAgICAgcHJpdi0+bm9Nb3JlUGFkcyA9IHRydWU7CisgICAgICAgIGdzdF9lbGVtZW50X25v
X21vcmVfcGFkcyhHU1RfRUxFTUVOVChtX3NyYy5nZXQoKSkpOworICAgICAgICB3ZWJLaXRNZWRp
YVNyY0RvQXN5bmNEb25lKG1fc3JjLmdldCgpKTsKICAgICB9Ci0gICAgaWYgKG9mZnNldCA+IHBy
aXYtPnNvdXJjZUF1ZGlvLnNpemUpIHsKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsK
LSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3Jj
LCAiRG9pbmcgcmFuZ2UtcmVxdWVzdCBzZWVrIik7Ci0gICAgcHJpdi0+c291cmNlQXVkaW8ucmVx
dWVzdGVkT2Zmc2V0ID0gb2Zmc2V0OwotCi0gICAgZ3N0X29iamVjdF9yZWYoc3JjKTsKLSAgICBw
cml2LT5zb3VyY2VBdWRpby5zZWVrLnNjaGVkdWxlKCJbV2ViS2l0XSB3ZWJLaXRNZWRpYUF1ZGlv
U3JjU2Vla01haW5DYiIsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPihzdGQ6OmJpbmQod2ViS2l0TWVk
aWFBdWRpb1NyY1NlZWtNYWluQ2IsIHNyYykpLCBHX1BSSU9SSVRZX0RFRkFVTFQsCi0gICAgICAg
IFtzcmNdIHsgZ3N0X29iamVjdF91bnJlZihzcmMpOyB9KTsKLQotICAgIEdTVF9PQkpFQ1RfVU5M
T0NLKHNyYyk7CiAKLSAgICByZXR1cm4gVFJVRTsKKyAgICBmb3IgKEdMaXN0KiBpdGVyID0gcHJp
di0+c291cmNlczsgaXRlcjsgaXRlciA9IGl0ZXItPm5leHQpIHsKKyAgICAgICAgU291cmNlKiBz
b3VyY2UgPSBzdGF0aWNfY2FzdDxTb3VyY2UqPihpdGVyLT5kYXRhKTsKKyAgICAgICAgaWYgKHNv
dXJjZS0+c3JjKQorICAgICAgICAgICAgZ3N0X2FwcF9zcmNfZW5kX29mX3N0cmVhbShHU1RfQVBQ
X1NSQyhzb3VyY2UtPnNyYykpOworICAgIH0KIH0KIAotdm9pZCB3ZWJLaXRNZWRpYVNyY1NldE1l
ZGlhUGxheWVyKFdlYktpdE1lZGlhU3JjKiBzcmMsIFdlYkNvcmU6Ok1lZGlhUGxheWVyKiBwbGF5
ZXIpCit2b2lkIE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyOjpyZW1vdmVkRnJvbU1lZGlhU291
cmNlKFBhc3NSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZT4gc291cmNlQnVmZmVyUHJpdmF0ZSkK
IHsKLSAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7Ci0gICAgcHJp
di0+cGxheWVyID0gcGxheWVyOwotfQorICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9
IG1fc3JjLT5wcml2OworICAgIFNvdXJjZSogc291cmNlID0gMDsKIAotdm9pZCB3ZWJLaXRNZWRp
YVNyY1NldFBsYXlCaW4oV2ViS2l0TWVkaWFTcmMqIHNyYywgR3N0RWxlbWVudCogcGxheUJpbikK
LXsKLSAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7Ci0gICAgcHJp
di0+cGxheWJpbiA9IHBsYXlCaW47Ci19CisgICAgZm9yIChHTGlzdCogaXRlciA9IHByaXYtPnNv
dXJjZXM7IGl0ZXI7IGl0ZXIgPSBpdGVyLT5uZXh0KSB7CisgICAgICAgIFNvdXJjZSogdG1wID0g
c3RhdGljX2Nhc3Q8U291cmNlKj4oaXRlci0+ZGF0YSk7CisgICAgICAgIGlmICh0bXAtPnNvdXJj
ZUJ1ZmZlciA9PSBzb3VyY2VCdWZmZXJQcml2YXRlLmdldCgpKSB7CisgICAgICAgICAgICBzb3Vy
Y2UgPSB0bXA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KIAotTWVkaWFT
b3VyY2VDbGllbnRHc3RyZWFtZXI6Ok1lZGlhU291cmNlQ2xpZW50R3N0cmVhbWVyKFdlYktpdE1l
ZGlhU3JjKiBzcmMpCi0gICAgOiBtX3NyYyhzdGF0aWNfY2FzdDxXZWJLaXRNZWRpYVNyYyo+KGdz
dF9vYmplY3RfcmVmKHNyYykpKQotewotfQorICAgIEFTU0VSVChzb3VyY2UgJiYgc291cmNlLT5z
cmMpOwogCi1NZWRpYVNvdXJjZUNsaWVudEdzdHJlYW1lcjo6fk1lZGlhU291cmNlQ2xpZW50R3N0
cmVhbWVyKCkKLXsKLSAgICBnc3Rfb2JqZWN0X3VucmVmKG1fc3JjKTsKKyAgICBnc3RfYXBwX3Ny
Y19lbmRfb2Zfc3RyZWFtKEdTVF9BUFBfU1JDKHNvdXJjZS0+c3JjKSk7CiB9CiAKLXZvaWQgTWVk
aWFTb3VyY2VDbGllbnRHc3RyZWFtZXI6OmRpZFJlY2VpdmVEdXJhdGlvbihkb3VibGUgZHVyYXRp
b24pCi17Ci0gICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gbV9zcmMtPnByaXY7Ci0g
ICAgR1NUX0RFQlVHX09CSkVDVChtX3NyYywgIlJlY2VpdmVkIGR1cmF0aW9uOiAlbGYiLCBkdXJh
dGlvbik7Ci0KLSAgICBHU1RfT0JKRUNUX0xPQ0sobV9zcmMpOwotICAgIHByaXYtPmR1cmF0aW9u
ID0gZHVyYXRpb24gPj0gMC4wID8gc3RhdGljX2Nhc3Q8Z2ludDY0PihkdXJhdGlvbipHU1RfU0VD
T05EKSA6IDA7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sobV9zcmMpOwotfQorfTsKIAotdm9pZCBN
ZWRpYVNvdXJjZUNsaWVudEdzdHJlYW1lcjo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0
YSwgaW50IGxlbmd0aCwgU3RyaW5nIHR5cGUpCituYW1lc3BhY2UgV1RGIHsKK3RlbXBsYXRlIDw+
IEdSZWZQdHI8V2ViS2l0TWVkaWFTcmM+IGFkb3B0R1JlZihXZWJLaXRNZWRpYVNyYyogcHRyKQog
ewotICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IG1fc3JjLT5wcml2OwotICAgIEdz
dEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgR3N0QnVmZmVyICogYnVmZmVyOwot
Ci0gICAgaWYgKHR5cGUuc3RhcnRzV2l0aCgidmlkZW8iKSkgewotICAgICAgICBpZiAocHJpdi0+
bm9Nb3JlUGFkID09IEZBTFNFICYmIHByaXYtPnNvdXJjZVZpZGVvLnBhZEFkZGVkID09IFRSVUUp
IHsKLSAgICAgICAgICAgIGdzdF9lbGVtZW50X25vX21vcmVfcGFkcyhHU1RfRUxFTUVOVChtX3Ny
YykpOwotICAgICAgICAgICAgcHJpdi0+bm9Nb3JlUGFkID0gVFJVRTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAocHJpdi0+bm9Nb3JlUGFkID09IEZBTFNFICYmIHByaXYtPnNvdXJjZVZpZGVvLnBh
ZEFkZGVkID09IEZBTFNFKSB7Ci0gICAgICAgICAgICBnc3RfZWxlbWVudF9hZGRfcGFkKEdTVF9F
TEVNRU5UKG1fc3JjKSwgcHJpdi0+c291cmNlVmlkZW8uc3JjcGFkKTsKLSAgICAgICAgICAgIHBy
aXYtPnNvdXJjZVZpZGVvLnBhZEFkZGVkID0gVFJVRTsKLSAgICAgICAgfQotICAgICAgICBHU1Rf
T0JKRUNUX0xPQ0sobV9zcmMpOwotICAgICAgICBidWZmZXIgPSBXZWJDb3JlOjpjcmVhdGVHc3RC
dWZmZXJGb3JEYXRhKGRhdGEsIGxlbmd0aCk7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG1f
c3JjKTsKLQotICAgICAgICByZXQgPSBnc3RfYXBwX3NyY19wdXNoX2J1ZmZlcihHU1RfQVBQX1NS
Qyhwcml2LT5zb3VyY2VWaWRlby5hcHBzcmMpLCBidWZmZXIpOwotICAgIH0gZWxzZSBpZiAodHlw
ZS5zdGFydHNXaXRoKCJhdWRpbyIpKSB7Ci0gICAgICAgIGlmIChwcml2LT5ub01vcmVQYWQgPT0g
RkFMU0UgJiYgcHJpdi0+c291cmNlQXVkaW8ucGFkQWRkZWQgPT0gVFJVRSkgewotICAgICAgICAg
ICAgZ3N0X2VsZW1lbnRfbm9fbW9yZV9wYWRzKEdTVF9FTEVNRU5UKG1fc3JjKSk7Ci0gICAgICAg
ICAgICBwcml2LT5ub01vcmVQYWQgPSBUUlVFOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwcml2
LT5ub01vcmVQYWQgPT0gRkFMU0UgJiYgcHJpdi0+c291cmNlQXVkaW8ucGFkQWRkZWQgPT0gRkFM
U0UpIHsKLSAgICAgICAgICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoR1NUX0VMRU1FTlQobV9zcmMp
LCBwcml2LT5zb3VyY2VBdWRpby5zcmNwYWQpOwotICAgICAgICAgICAgcHJpdi0+c291cmNlQXVk
aW8ucGFkQWRkZWQgPSBUUlVFOwotICAgICAgICB9Ci0gICAgICAgIEdTVF9PQkpFQ1RfTE9DSyht
X3NyYyk7Ci0gICAgICAgIGJ1ZmZlciA9IFdlYkNvcmU6OmNyZWF0ZUdzdEJ1ZmZlckZvckRhdGEo
ZGF0YSwgbGVuZ3RoKTsKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sobV9zcmMpOwotCi0gICAg
ICAgIHJldCA9IGdzdF9hcHBfc3JjX3B1c2hfYnVmZmVyKEdTVF9BUFBfU1JDKHByaXYtPnNvdXJj
ZUF1ZGlvLmFwcHNyYyksIGJ1ZmZlcik7Ci0gICAgfQotCi0gICAgaWYgKHJldCAhPSBHU1RfRkxP
V19PSyAmJiByZXQgIT0gR1NUX0ZMT1dfRU9TKQotICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUiht
X3NyYywgQ09SRSwgRkFJTEVELCAoMCksICgwKSk7CisgICAgQVNTRVJUKCFwdHIgfHwgIWdfb2Jq
ZWN0X2lzX2Zsb2F0aW5nKEdfT0JKRUNUKHB0cikpKTsKKyAgICByZXR1cm4gR1JlZlB0cjxXZWJL
aXRNZWRpYVNyYz4ocHRyLCBHUmVmUHRyQWRvcHQpOwogfQogCi12b2lkIE1lZGlhU291cmNlQ2xp
ZW50R3N0cmVhbWVyOjpkaWRGaW5pc2hMb2FkaW5nKGRvdWJsZSkKK3RlbXBsYXRlIDw+IFdlYktp
dE1lZGlhU3JjKiByZWZHUHRyPFdlYktpdE1lZGlhU3JjPihXZWJLaXRNZWRpYVNyYyogcHRyKQog
ewotICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IG1fc3JjLT5wcml2OworICAgIGlm
IChwdHIpCisgICAgICAgIGdzdF9vYmplY3RfcmVmX3NpbmsoR1NUX09CSkVDVChwdHIpKTsKIAot
ICAgIEdTVF9ERUJVR19PQkpFQ1QobV9zcmMsICJIYXZlIEVPUyIpOwotCi0gICAgR1NUX09CSkVD
VF9MT0NLKG1fc3JjKTsKLSAgICBpZiAoIXByaXYtPnNvdXJjZVZpZGVvLnNlZWsuaXNBY3RpdmUo
KSkgewotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhtX3NyYyk7Ci0gICAgICAgIGdzdF9hcHBf
c3JjX2VuZF9vZl9zdHJlYW0oR1NUX0FQUF9TUkMocHJpdi0+c291cmNlVmlkZW8uYXBwc3JjKSk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG1fc3JjKTsKLQotICAgIEdT
VF9PQkpFQ1RfTE9DSyhtX3NyYyk7Ci0gICAgaWYgKCFwcml2LT5zb3VyY2VBdWRpby5zZWVrLmlz
QWN0aXZlKCkpIHsKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sobV9zcmMpOwotICAgICAgICBn
c3RfYXBwX3NyY19lbmRfb2Zfc3RyZWFtKEdTVF9BUFBfU1JDKHByaXYtPnNvdXJjZUF1ZGlvLmFw
cHNyYykpOwotICAgIH0gZWxzZQotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhtX3NyYyk7Cisg
ICAgcmV0dXJuIHB0cjsKIH0KIAotdm9pZCBNZWRpYVNvdXJjZUNsaWVudEdzdHJlYW1lcjo6ZGlk
RmFpbCgpCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxXZWJLaXRNZWRpYVNyYz4oV2ViS2l0
TWVkaWFTcmMqIHB0cikKIHsKLSAgICBnc3RfYXBwX3NyY19lbmRfb2Zfc3RyZWFtKEdTVF9BUFBf
U1JDKG1fc3JjLT5wcml2LT5zb3VyY2VWaWRlby5hcHBzcmMpKTsKLSAgICBnc3RfYXBwX3NyY19l
bmRfb2Zfc3RyZWFtKEdTVF9BUFBfU1JDKG1fc3JjLT5wcml2LT5zb3VyY2VBdWRpby5hcHBzcmMp
KTsKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHB0cik7CiB9Cit9Owog
CiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0TWVkaWFT
b3VyY2VHU3RyZWFtZXIuaAppbmRleCA3ODg5MmMzZTMzNzNmZGZiYzBjNThiMGExYmZjNTY4YmUx
Yjk3MTUwLi4yMzRhMDhjZmUzZTgwMjY0NTdkODM4MWJhMDYxNGQzNzYxNGZkMDE5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0TWVk
aWFTb3VyY2VHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaApAQCAtMiw2ICsyLDcgQEAK
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFu
LmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDEzIENvbGxhYm9y
YSBMdGQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDEzIE9yYW5nZQorICogIENvcHlyaWdodCAoQykg
MjAxNCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgogICoKICAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjIsNyArMjMsMTIgQEAKICNkZWZpbmUgV2ViS2l0TWVkaWFTb3Vy
Y2VHU3RyZWFtZXJfaAogI2lmIEVOQUJMRShWSURFTykgJiYgRU5BQkxFKE1FRElBX1NPVVJDRSkg
JiYgVVNFKEdTVFJFQU1FUikKIAorI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKICNpbmNs
dWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1ZGUgIk1lZGlhU291cmNlLmgiCisjaW5jbHVkZSAi
U291cmNlQnVmZmVyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGVDbGll
bnQuaCIKKwogI2luY2x1ZGUgPGdzdC9nc3QuaD4KIAogR19CRUdJTl9ERUNMUwpAQCAtNDgsMjUg
KzU0LDM4IEBAIHN0cnVjdCBfV2ViS2l0TWVkaWFTcmNDbGFzcyB7CiB9OwogCiBHVHlwZSB3ZWJr
aXRfbWVkaWFfc3JjX2dldF90eXBlKHZvaWQpOwotdm9pZCB3ZWJLaXRNZWRpYVNyY1NldE1lZGlh
UGxheWVyKFdlYktpdE1lZGlhU3JjKiwgV2ViQ29yZTo6TWVkaWFQbGF5ZXIqKTsKLXZvaWQgd2Vi
S2l0TWVkaWFTcmNTZXRQbGF5QmluKFdlYktpdE1lZGlhU3JjKiwgR3N0RWxlbWVudCopOwogCiBH
X0VORF9ERUNMUwogCi1jbGFzcyBNZWRpYVNvdXJjZUNsaWVudEdzdHJlYW1lcjogcHVibGljIFJl
ZkNvdW50ZWQ8TWVkaWFTb3VyY2VDbGllbnRHc3RyZWFtZXI+IHsKK25hbWVzcGFjZSBXVEYgewor
dGVtcGxhdGU8PiBHUmVmUHRyPFdlYktpdE1lZGlhU3JjPiBhZG9wdEdSZWYoV2ViS2l0TWVkaWFT
cmMqIHB0cik7Cit0ZW1wbGF0ZTw+IFdlYktpdE1lZGlhU3JjKiByZWZHUHRyPFdlYktpdE1lZGlh
U3JjPihXZWJLaXRNZWRpYVNyYyogcHRyKTsKK3RlbXBsYXRlPD4gdm9pZCBkZXJlZkdQdHI8V2Vi
S2l0TWVkaWFTcmM+KFdlYktpdE1lZGlhU3JjKiBwdHIpOworfTsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBDb250ZW50VHlwZTsKKworY2xhc3MgTWVkaWFTb3VyY2VDbGllbnRHU3Ry
ZWFtZXI6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyPiB7CiAg
ICAgcHVibGljOgotICAgICAgICBNZWRpYVNvdXJjZUNsaWVudEdzdHJlYW1lcihXZWJLaXRNZWRp
YVNyYyopOwotICAgICAgICB+TWVkaWFTb3VyY2VDbGllbnRHc3RyZWFtZXIoKTsKKyAgICAgICAg
TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXIoV2ViS2l0TWVkaWFTcmMqKTsKKyAgICAgICAgdmly
dHVhbCB+TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXIoKTsKKworICAgICAgICAvLyBGcm9tIE1l
ZGlhU291cmNlR1N0cmVhbWVyCisgICAgICAgIE1lZGlhU291cmNlUHJpdmF0ZTo6QWRkU3RhdHVz
IGFkZFNvdXJjZUJ1ZmZlcihQYXNzUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGU+LCBjb25zdCBD
b250ZW50VHlwZSYpOworICAgICAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZChjb25zdCBNZWRpYVRp
bWUmKTsKKyAgICAgICAgdm9pZCBtYXJrRW5kT2ZTdHJlYW0oTWVkaWFTb3VyY2VQcml2YXRlOjpF
bmRPZlN0cmVhbVN0YXR1cyk7CiAKLSAgICAgICAgdm9pZCBkaWRSZWNlaXZlRHVyYXRpb24oZG91
YmxlKTsKLSAgICAgICAgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiwgaW50LCBTdHJp
bmcpOwotICAgICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcoZG91YmxlKTsKLSAgICAgICAgdm9p
ZCBkaWRGYWlsKCk7CisgICAgICAgIC8vIEZyb20gU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1l
cgorICAgICAgICBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpBcHBlbmRSZXN1bHQgYXBwZW5k
KFBhc3NSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZT4sIGNvbnN0IHVuc2lnbmVkIGNoYXIqLCB1
bnNpZ25lZCk7CisgICAgICAgIHZvaWQgcmVtb3ZlZEZyb21NZWRpYVNvdXJjZShQYXNzUmVmUHRy
PFNvdXJjZUJ1ZmZlclByaXZhdGU+KTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFdlYktpdE1l
ZGlhU3JjKiBtX3NyYzsKKyAgICAgICAgR1JlZlB0cjxXZWJLaXRNZWRpYVNyYz4gbV9zcmM7CiB9
OwogCit9OwogCiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDEzZmVh
NTNkMWM4ZDQzNWQzY2E0NzEyMzBiNzRjOTE4MTVmMjIwZWEuLmQyMTM2NjA0MDdhZjVjNzRlZDJk
NGMwMWFjMzI0YmRjMWFmZDBiYjMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNC0xMi0yMyAg
U2ViYXN0aWFuIERyw7ZnZSAgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+CisKKyAgICAgICAg
RW5hYmxlIE1lZGlhU291cmNlIHRlc3RzIGZvciB0aGUgR1RLIHBvcnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTQ0MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Rlc3RFeHBl
Y3RhdGlvbnM6CisgICAgICAgIEVuYWJsZSBNZWRpYVNvdXJjZSB0ZXN0cyB0aGF0IGFyZSBhY3R1
YWxseSBzdWNjZWVkaW5nIGZvcgorICAgICAgICB0aGUgR1RLIHBvcnQuCisKIDIwMTQtMTItMDcg
IFlvdWVubiBGYWJsZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KIAogICAgICAgICBb
U291cF1bQ3VybF0gSFRUUCBoZWFkZXIgdmFsdWVzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGxhdGlu
MSwgbm90IFVURi04CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4
cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCmlu
ZGV4IDU2ODRhMjE4MGNhMWE5MDEwNWY2M2U2NTY1NGFlMWRkOTljZGY2ZDguLjlhYjZmNjIyYzQ0
NjgxODA2YmRhNzI2OTRhNzliNTc1YjUxNDM3MWYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0
ay9UZXN0RXhwZWN0YXRpb25zCkBAIC0yMTgsOCArMjE4LDUzIEBAIHdlYmtpdC5vcmcvYi82MTY2
MSBlZGl0aW5nL3Bhc3RlYm9hcmQvZHJhZy1kcm9wLWxpc3QuaHRtbCBbIEZhaWx1cmUgXQogd2Vi
a2l0Lm9yZy9iLzkyNzQ5IGZhc3QvZG9tL05hdmlnYXRvckNvbnRlbnRVdGlscy9pcy1wcm90b2Nv
bC1oYW5kbGVyLXJlZ2lzdGVyZWQuaHRtbCBbIFNraXAgXQogCiAjIFRlc3RzIGZvciBNZWRpYVNv
dXJjZSBBUEkuIEZlYXR1cmUgaXMgbm90IHRvdGFsbHkgZnVuY3Rpb25hbC4KLXdlYmtpdC5vcmcv
Yi85OTA2NSBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZSBbIFNraXAgXQotd2Via2l0Lm9y
Zy9iLzk5MDY1IG1lZGlhL21lZGlhLXNvdXJjZSBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5MDY1
IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWFwcGVuZC1idWZmZXIu
aHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEt
c291cmNlL21lZGlhc291cmNlLWFwcGVuZC1zdHJlYW0uaHRtbCBbIFNraXAgXQord2Via2l0Lm9y
Zy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWFwcGVu
ZHdpbmRvdy5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgaHR0cC90ZXN0cy9tZWRp
YS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtYnVmZmVyZWQuaHRtbCBbIFNraXAgXQord2Via2l0
Lm9yZy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWNv
bmZpZy1jaGFuZ2UtbXA0LWEtYml0cmF0ZS5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkw
NjUgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtY29uZmlnLWNoYW5n
ZS1tcDQtYXYtYXVkaW8tYml0cmF0ZS5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUg
aHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtY29uZmlnLWNoYW5nZS1t
cDQtYXYtZnJhbWVzaXplLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBodHRwL3Rl
c3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jb25maWctY2hhbmdlLW1wNC1hdi12
aWRlby1iaXRyYXRlLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBodHRwL3Rlc3Rz
L21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jb25maWctY2hhbmdlLW1wNC12LWJpdHJh
dGUuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVk
aWEtc291cmNlL21lZGlhc291cmNlLWNvbmZpZy1jaGFuZ2UtbXA0LXYtZnJhbWVyYXRlLmh0bWwg
WyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJj
ZS9tZWRpYXNvdXJjZS1jb25maWctY2hhbmdlLW1wNC12LWZyYW1lc2l6ZS5odG1sIFsgU2tpcCBd
Cit3ZWJraXQub3JnL2IvOTkwNjUgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFz
b3VyY2UtY29uZmlnLWNoYW5nZS13ZWJtLWEtYml0cmF0ZS5odG1sIFsgU2tpcCBdCit3ZWJraXQu
b3JnL2IvOTkwNjUgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtY29u
ZmlnLWNoYW5nZS13ZWJtLWF2LWF1ZGlvLWJpdHJhdGUuaHRtbCBbIFNraXAgXQord2Via2l0Lm9y
Zy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWNvbmZp
Zy1jaGFuZ2Utd2VibS1hdi1mcmFtZXNpemUuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5
MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWNvbmZpZy1jaGFu
Z2Utd2VibS1hdi12aWRlby1iaXRyYXRlLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2
NSBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jb25maWctY2hhbmdl
LXdlYm0tdi1iaXRyYXRlLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBodHRwL3Rl
c3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jb25maWctY2hhbmdlLXdlYm0tdi1m
cmFtZXJhdGUuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVk
aWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWNvbmZpZy1jaGFuZ2Utd2VibS12LWZyYW1lc2l6
ZS5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgaHR0cC90ZXN0cy9tZWRpYS9tZWRp
YS1zb3VyY2UvbWVkaWFzb3VyY2UtZHVyYXRpb24uaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9i
Lzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWdldHZpZGVv
cGxheWJhY2txdWFsaXR5Lmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBodHRwL3Rl
c3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1pcy10eXBlLXN1cHBvcnRlZC5odG1s
IFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3Vy
Y2UvbWVkaWFzb3VyY2UtcGxheS5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgaHR0
cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtcGxheS10aGVuLXNlZWstYmFj
ay5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgaHR0cC90ZXN0cy9tZWRpYS9tZWRp
YS1zb3VyY2UvbWVkaWFzb3VyY2UtcmVkdW5kYW50LXNlZWsuaHRtbCBbIFNraXAgXQord2Via2l0
Lm9yZy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLXJl
bW92ZS5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgaHR0cC90ZXN0cy9tZWRpYS9t
ZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2Utc2Vlay1iZXlvbmQtZHVyYXRpb24uaHRtbCBbIFNraXAg
XQord2Via2l0Lm9yZy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlh
c291cmNlLXNlZWstZHVyaW5nLXBlbmRpbmctc2Vlay5odG1sIFsgU2tpcCBdCit3ZWJraXQub3Jn
L2IvOTkwNjUgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2Utc291cmNl
YnVmZmVyLW1vZGUuaHRtbCBbIFNraXAgXQorCit3ZWJraXQub3JnL2IvOTkwNjUgbWVkaWEvbWVk
aWEtc291cmNlL21lZGlhLXNvdXJjZS1hcHBlbmQtZmFpbGVkLmh0bWwgWyBTa2lwIF0KK3dlYmtp
dC5vcmcvYi85OTA2NSBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLW11bHRpcGxlLWlu
aXRpYWxpemF0aW9uLXNlZ21lbnRzLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBt
ZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLWFwcGVuZC1ub25zeW5jLXNhbXBsZS1hZnRl
ci1hYm9ydC5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgbWVkaWEvbWVkaWEtc291
cmNlL21lZGlhLXNvdXJjZS1kdXBsaWNhdGUtc2Vla2VkLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5v
cmcvYi85OTA2NSBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLWNhbnBsYXl0aHJvdWdo
Lmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBtZWRpYS9tZWRpYS1zb3VyY2UvbWVk
aWEtc291cmNlLWR1cmF0aW9uLWFmdGVyLWFwcGVuZC5odG1sIFsgU2tpcCBdCit3ZWJraXQub3Jn
L2IvOTkwNjUgbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1lbmQtb2Ytc3RyZWFtLWJ1
ZmZlcmVkLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBtZWRpYS9tZWRpYS1zb3Vy
Y2UvbWVkaWEtc291cmNlLWVuZC1vZi1zdHJlYW0uaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9i
Lzk5MDY1IG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtZnVkZ2UtZmFjdG9yLmh0bWwg
WyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291
cmNlLW1vbml0b3Itc291cmNlLWJ1ZmZlcnMuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5
MDY1IG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2Utb3ZlcmxhcHBpbmctYXBwZW5kLmh0
bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEt
c291cmNlLW92ZXJsYXBwaW5nLWRlY29kZXRpbWUuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9i
Lzk5MDY1IG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtcGxheS5odG1sIFsgU2tpcCBd
Cit3ZWJraXQub3JnL2IvOTkwNjUgbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1yZW1v
dmUuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5MDY1IG1lZGlhL21lZGlhLXNvdXJjZS9t
ZWRpYS1zb3VyY2Utc2Vlay1jb21wbGV0ZS5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkw
NjUgbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS10cmFjay1lbmFibGVkLmh0bWwgWyBT
a2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNl
LXRyYWNrcy5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgbWVkaWEvbWVkaWEtc291
cmNlL21lZGlhLXNvdXJjZS12aWRlby1wbGF5YmFjay1xdWFsaXR5Lmh0bWwgWyBTa2lwIF0KIAog
IyBFbmNyeXB0ZWQgTWVkaWEgRXh0ZW5zaW9ucyBhcmUgbm90IGVuYWJsZWQuCiB3ZWJraXQub3Jn
L2IvOTkwMjQgbWVkaWEvZW5jcnlwdGVkLW1lZGlhIFsgU2tpcCBdCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243793</attachid>
            <date>2014-12-29 05:44:39 -0800</date>
            <delta_ts>2014-12-29 06:46:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139441-20141229144538.patch</filename>
            <type>text/plain</type>
            <size>59663</size>
            <attacher name="Sebastian Dröge (slomo)">slomo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2OTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTFiNjUzYzA2ODg0M2Nm
Y2JlY2U4NGY5ODJhZDg4YTY4MDg2NDcyZC4uNDY0N2ExNGNlZjQ5OTM0ZTcxMTQxZTIzNDMxYzMx
MDRhNGQ3OWNhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNSBAQAorMjAxNC0xMi0yMyAgU2Vi
YXN0aWFuIERyw7ZnZSAgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+CisKKyAgICAgICAgW0dT
dHJlYW1lcl0gUmV3cml0ZSBNZWRpYVNvdXJjZSBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5NDQxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBub3cgaXMgYSBjbGVhbiBy
ZWltcGxlbWVudGF0aW9uIGFyb3VuZCBhcHBzcmMgdGhhdCB3b3JrcyBnb29kCisgICAgICAgIGVu
b3VnaCBmb3IgWW91VHViZSAoZXhjZXB0IGZvciBzZWVraW5nKSwgYnV0IGl0IHN0aWxsIGRvZXMg
bm90CisgICAgICAgIGltcGxlbWVudCB0aGUgY29tcGxldGUgQVBJIGNvcnJlY3RseS4gRnVydGhl
ciB3b3JrIGlzIHJlcXVpcmVkIG9uCisgICAgICAgIHRvcCBvZiB0aGlzIGFuZCB0aGUgQnVnemls
bGEgdGlja2V0IGxpbmtlZCBhYm92ZSBjb250YWlucyBzb21lCisgICAgICAgIGZ1cnRoZXIgd29y
ayBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRvU2Vlayk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRpZExvYWRpbmdQcm9ncmVzcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNvdXJjZUNoYW5n
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjYW5T
YXZlTWVkaWFEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnRvdGFsVmlkZW9GcmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkcm9wcGVkVmlkZW9GcmFtZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjb3JydXB0ZWRWaWRlb0Zy
YW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRv
dGFsRnJhbWVEZWxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmlzTWVkaWFTb3VyY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVNvdXJjZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNv
dXJjZUdTdHJlYW1lcjo6TWVkaWFTb3VyY2VHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFTb3VyY2VHU3RyZWFtZXI6OmFkZFNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVNvdXJjZUdTdHJlYW1lcjo6ZHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhU291cmNlR1N0cmVhbWVyOjptYXJrRW5kT2ZTdHJlYW0pOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTb3VyY2VHU3RyZWFtZXI6OnVubWFya0VuZE9mU3RyZWFtKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU291cmNlR1N0cmVhbWVyOjpyZWFkeVN0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU291cmNlR1N0cmVhbWVyOjpzZXRSZWFkeVN0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU291cmNlR1N0cmVhbWVyOjp3YWl0Rm9yU2Vla0NvbXBsZXRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c2Vla0NvbXBsZXRlZCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU291cmNlR1N0cmVhbWVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1NvdXJjZUJ1ZmZlclByaXZh
dGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUdT
dHJlYW1lcjo6U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjp+U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJl
YW1lcik6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpz
ZXRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1l
cjo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFt
ZXI6OnJlbW92ZWRGcm9tTWVkaWFTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVm
ZmVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRSZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OmZsdXNoQW5kRW5xdWV1ZU5vbkRpc3Bs
YXlpbmdTYW1wbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVHU3Ry
ZWFtZXI6OmVucXVldWVTYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJp
dmF0ZUdTdHJlYW1lcjo6aXNSZWFkeUZvck1vcmVTYW1wbGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OnNldEFjdGl2ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpzdG9wQXNraW5nRm9yTW9yZVNhbXBs
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90
aWZ5Q2xpZW50V2hlblJlYWR5Rm9yTW9yZVNhbXBsZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVy
LmNwcDoKKyAgICAgICAgKHdlYmtpdF9tZWRpYV9zcmNfY2xhc3NfaW5pdCk6CisgICAgICAgICh3
ZWJraXRfbWVkaWFfc3JjX2luaXQpOgorICAgICAgICAod2ViS2l0TWVkaWFTcmNGaW5hbGl6ZSk6
CisgICAgICAgICh3ZWJLaXRNZWRpYVNyY1NldFByb3BlcnR5KToKKyAgICAgICAgKHdlYktpdE1l
ZGlhU3JjR2V0UHJvcGVydHkpOgorICAgICAgICAod2ViS2l0TWVkaWFTcmNEb0FzeW5jU3RhcnQp
OgorICAgICAgICAod2ViS2l0TWVkaWFTcmNEb0FzeW5jRG9uZSk6CisgICAgICAgICh3ZWJLaXRN
ZWRpYVNyY0NoYW5nZVN0YXRlKToKKyAgICAgICAgKHdlYktpdE1lZGlhU3JjUXVlcnlXaXRoUGFy
ZW50KToKKyAgICAgICAgKHdlYktpdE1lZGlhU3JjR2V0VXJpKToKKyAgICAgICAgKHdlYktpdE1l
ZGlhU3JjU2V0VXJpKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlQ2xpZW50R1N0cmVh
bWVyOjpNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVNvdXJjZUNsaWVudEdTdHJlYW1lcjo6fk1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyOjphZGRTb3VyY2VCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXI6OmR1cmF0
aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1l
cjo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVy
OjptYXJrRW5kT2ZTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VDbGllbnRH
U3RyZWFtZXI6OnJlbW92ZWRGcm9tTWVkaWFTb3VyY2UpOgorICAgICAgICAoV1RGOjphZG9wdEdS
ZWYpOgorICAgICAgICAoV1RGOjpyZWZHUHRyPFdlYktpdE1lZGlhU3JjPik6CisgICAgICAgIChX
VEY6OmRlcmVmR1B0cjxXZWJLaXRNZWRpYVNyYz4pOgorICAgICAgICAod2ViS2l0TWVkaWFTcmNB
ZGRTcmMpOiBEZWxldGVkLgorICAgICAgICAod2ViS2l0TWVkaWFWaWRlb1NyY1N0b3ApOiBEZWxl
dGVkLgorICAgICAgICAod2ViS2l0TWVkaWFBdWRpb1NyY1N0b3ApOiBEZWxldGVkLgorICAgICAg
ICAod2ViS2l0TWVkaWFWaWRlb1NyY1N0YXJ0KTogRGVsZXRlZC4KKyAgICAgICAgKHdlYktpdE1l
ZGlhQXVkaW9TcmNTdGFydCk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJLaXRNZWRpYVZpZGVvU3Jj
TmVlZERhdGFNYWluQ2IpOiBEZWxldGVkLgorICAgICAgICAod2ViS2l0TWVkaWFBdWRpb1NyY05l
ZWREYXRhTWFpbkNiKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYktpdE1lZGlhVmlkZW9TcmNOZWVk
RGF0YUNiKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYktpdE1lZGlhQXVkaW9TcmNOZWVkRGF0YUNi
KTogRGVsZXRlZC4KKyAgICAgICAgKHdlYktpdE1lZGlhVmlkZW9TcmNFbm91Z2hEYXRhTWFpbkNi
KTogRGVsZXRlZC4KKyAgICAgICAgKHdlYktpdE1lZGlhQXVkaW9TcmNFbm91Z2hEYXRhTWFpbkNi
KTogRGVsZXRlZC4KKyAgICAgICAgKHdlYktpdE1lZGlhVmlkZW9TcmNFbm91Z2hEYXRhQ2IpOiBE
ZWxldGVkLgorICAgICAgICAod2ViS2l0TWVkaWFBdWRpb1NyY0Vub3VnaERhdGFDYik6IERlbGV0
ZWQuCisgICAgICAgICh3ZWJLaXRNZWRpYVZpZGVvU3JjU2Vla01haW5DYik6IERlbGV0ZWQuCisg
ICAgICAgICh3ZWJLaXRNZWRpYUF1ZGlvU3JjU2Vla01haW5DYik6IERlbGV0ZWQuCisgICAgICAg
ICh3ZWJLaXRNZWRpYVZpZGVvU3JjU2Vla0RhdGFDYik6IERlbGV0ZWQuCisgICAgICAgICh3ZWJL
aXRNZWRpYUF1ZGlvU3JjU2Vla0RhdGFDYik6IERlbGV0ZWQuCisgICAgICAgICh3ZWJLaXRNZWRp
YVNyY1NldE1lZGlhUGxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYktpdE1lZGlhU3JjU2V0
UGxheUJpbik6IERlbGV0ZWQuCisgICAgICAgIChNZWRpYVNvdXJjZUNsaWVudEdzdHJlYW1lcjo6
TWVkaWFTb3VyY2VDbGllbnRHc3RyZWFtZXIpOiBEZWxldGVkLgorICAgICAgICAoTWVkaWFTb3Vy
Y2VDbGllbnRHc3RyZWFtZXI6On5NZWRpYVNvdXJjZUNsaWVudEdzdHJlYW1lcik6IERlbGV0ZWQu
CisgICAgICAgIChNZWRpYVNvdXJjZUNsaWVudEdzdHJlYW1lcjo6ZGlkUmVjZWl2ZUR1cmF0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKE1lZGlhU291cmNlQ2xpZW50R3N0cmVhbWVyOjpkaWRSZWNl
aXZlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChNZWRpYVNvdXJjZUNsaWVudEdzdHJlYW1lcjo6
ZGlkRmluaXNoTG9hZGluZyk6IERlbGV0ZWQuCisgICAgICAgIChNZWRpYVNvdXJjZUNsaWVudEdz
dHJlYW1lcjo6ZGlkRmFpbCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmg6CisgICAgICAgIFJld3JpdGUg
TWVkaWFTb3VyY2UgaW1wbGVtZW50YXRpb24gZm9yIEdTdHJlYW1lci4gVGhlIG9sZCBjb2RlIHdh
cworICAgICAgICBvdmVybHkgY29tcGxpY2F0ZWQgYW5kIGRpZCBub3Qgd29yayBhdCBhbGwgZm9y
IGFueXRoaW5nIEkndmUgdGVzdGVkCisgICAgICAgIGl0IHdpdGguCisKIDIwMTQtMTItMDkgIFNl
YmFzdGlhbiBEcsO2Z2UgIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgogCiAgICAgICAgIFtH
U3RyZWFtZXJdIEFkZCB2aWRlby9tcDJ0IGFzIGFsdGVybmF0aXZlIG1pbWV0eXBlIGZvciBNUEVH
IFRTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmlu
ZGV4IDhjOWE2MzcwNGZhODAyODY2ZmNmYjM0NDc0MjIwZGE0NDY3Y2U1NGEuLjY1OGViMGFiNjQx
Zjk2MzRkYzBlOTk2NDJiZmE1NWRkMTlmZWFhMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC01NTMsNiArNTUzLDExIEBAIGJvb2wgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkb1NlZWsoZ2ludDY0IHBvc2l0aW9uLCBmbG9hdCBy
YXRlLCBHc3RTZWVrRmxhCiB7CiAgICAgZ2ludDY0IHN0YXJ0VGltZSwgZW5kVGltZTsKIAorICAg
IC8vIFRPRE86IFNob3VsZCBkbyBtb3JlIHRoYW4gdGhhdCwgbmVlZCB0byBub3RpZnkgdGhlIG1l
ZGlhIHNvdXJjZQorICAgIC8vIGFuZCBwcm9iYWJseSBmbHVzaCB0aGUgcGlwZWxpbmUgYXQgbGVh
c3QuCisgICAgaWYgKGlzTWVkaWFTb3VyY2UoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICAg
ICBpZiAocmF0ZSA+IDApIHsKICAgICAgICAgc3RhcnRUaW1lID0gcG9zaXRpb247CiAgICAgICAg
IGVuZFRpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwpAQCAtMTIzMyw3ICsxMjM4LDcgQEAgZmxv
YXQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjptYXhUaW1lTG9hZGVkKCkgY29uc3QKIAog
Ym9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRpZExvYWRpbmdQcm9ncmVzcygpIGNv
bnN0CiB7Ci0gICAgaWYgKCFtX3BsYXlCaW4gfHwgIW1fbWVkaWFEdXJhdGlvbiB8fCAhdG90YWxC
eXRlcygpKQorICAgIGlmICghbV9wbGF5QmluIHx8ICFtX21lZGlhRHVyYXRpb24gfHwgKCFpc01l
ZGlhU291cmNlKCkgJiYgIXRvdGFsQnl0ZXMoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBmbG9hdCBjdXJyZW50TWF4VGltZUxvYWRlZCA9IG1heFRpbWVMb2FkZWQoKTsKICAgICBib29s
IGRpZExvYWRpbmdQcm9ncmVzcyA9IGN1cnJlbnRNYXhUaW1lTG9hZGVkICE9IG1fbWF4VGltZUxv
YWRlZEF0TGFzdERpZExvYWRpbmdQcm9ncmVzczsKQEAgLTEzMDcsNyArMTMxMiw2IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzb3VyY2VDaGFuZ2VkKCkKICNpZiBFTkFCTEUo
TUVESUFfU09VUkNFKQogICAgIGlmIChtX21lZGlhU291cmNlICYmIFdFQktJVF9JU19NRURJQV9T
UkMobV9zb3VyY2UuZ2V0KCkpKSB7CiAgICAgICAgIE1lZGlhU291cmNlR1N0cmVhbWVyOjpvcGVu
KG1fbWVkaWFTb3VyY2UuZ2V0KCksIFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpKTsK
LSAgICAgICAgd2ViS2l0TWVkaWFTcmNTZXRQbGF5QmluKFdFQktJVF9NRURJQV9TUkMobV9zb3Vy
Y2UuZ2V0KCkpLCBtX3BsYXlCaW4uZ2V0KCkpOwogICAgIH0KICNlbmRpZgogfQpAQCAtMTk2NCw3
ICsxOTY4LDcgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNhblNhdmVNZWRp
YURhdGEoKSBjb25zdAogCiAgICAgaWYgKG1fdXJsLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCisKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAppbmRleCAyODUzZTRh
OThhZGY5ZjZhMTAyNzE0MGEzY2ZmN2M3ODg3MWM4OGIzLi5iZjlmZDYyOGUwZTk3YmQ2ZjcyMjRm
YmJmNWM5MDkwOGFkNWMwNTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lci5oCkBAIC0xNjYsNiArMTY2LDE0IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBi
b29sIGRpZFBhc3NDT1JTQWNjZXNzQ2hlY2soKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgY2Fu
U2F2ZU1lZGlhRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwogCisjaWYgRU5BQkxFKE1FRElBX1NPVVJD
RSkKKyAgICAvLyBUT0RPOiBJbXBsZW1lbnQKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgdG90
YWxWaWRlb0ZyYW1lcygpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcg
ZHJvcHBlZFZpZGVvRnJhbWVzKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQg
bG9uZyBjb3JydXB0ZWRWaWRlb0ZyYW1lcygpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIE1l
ZGlhVGltZSB0b3RhbEZyYW1lRGVsYXkoKSB7IHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7
IH0KKyNlbmRpZgorCiBwcml2YXRlOgogICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9wbGF5Qmlu
OwogICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9zb3VyY2U7CkBAIC0yMjUsNiArMjMzLDkgQEAg
cHJpdmF0ZToKICNlbmRpZgogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCiAgICAgUmVmUHRyPE1l
ZGlhU291cmNlUHJpdmF0ZUNsaWVudD4gbV9tZWRpYVNvdXJjZTsKKyAgICBib29sIGlzTWVkaWFT
b3VyY2UoKSBjb25zdCB7IHJldHVybiBtX21lZGlhU291cmNlOyB9CisjZWxzZQorICAgIGJvb2wg
aXNNZWRpYVNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIH07CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFTb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhU291cmNlR1N0cmVhbWVyLmNwcAppbmRleCA2MjNlZTA2OGMxNGQ2MjJh
NmFjYjY1ZjI2NmVmODAwMjIxODQzMDk0Li44ZDMzYTIwZDRhMTJjZTQyZGVlOTgwY2Q2ZGY3NWE1
MjFhOTVlNGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTEs
NiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgT3JhbmdlCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM0LDggKzM1LDEwIEBACiAKICNp
ZiBFTkFCTEUoTUVESUFfU09VUkNFKSAmJiBVU0UoR1NUUkVBTUVSKQogCisjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmgi
CiAjaW5jbHVkZSAiV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCIKKwogI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDcsNyArNTAs
NyBAQCB2b2lkIE1lZGlhU291cmNlR1N0cmVhbWVyOjpvcGVuKE1lZGlhU291cmNlUHJpdmF0ZUNs
aWVudCogbWVkaWFTb3VyY2UsIFdlYktpdE1lZAogfQogCiBNZWRpYVNvdXJjZUdTdHJlYW1lcjo6
TWVkaWFTb3VyY2VHU3RyZWFtZXIoTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50KiBtZWRpYVNvdXJj
ZSwgV2ViS2l0TWVkaWFTcmMqIHNyYykKLSAgICA6IG1fY2xpZW50KGFkb3B0UmVmKG5ldyBNZWRp
YVNvdXJjZUNsaWVudEdzdHJlYW1lcihzcmMpKSkKKyAgICA6IG1fY2xpZW50KGFkb3B0UmVmKG5l
dyBNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lcihzcmMpKSkKICAgICAsIG1fbWVkaWFTb3VyY2Uo
bWVkaWFTb3VyY2UpCiAgICAgLCBtX3JlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5n
KQogewpAQCAtNjAsMjIgKzYzLDQ1IEBAIE1lZGlhU291cmNlR1N0cmVhbWVyOjp+TWVkaWFTb3Vy
Y2VHU3RyZWFtZXIoKQogCiBNZWRpYVNvdXJjZUdTdHJlYW1lcjo6QWRkU3RhdHVzIE1lZGlhU291
cmNlR1N0cmVhbWVyOjphZGRTb3VyY2VCdWZmZXIoY29uc3QgQ29udGVudFR5cGUmIGNvbnRlbnRU
eXBlLCBSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZT4mIHNvdXJjZUJ1ZmZlclByaXZhdGUpCiB7
Ci0gICAgc291cmNlQnVmZmVyUHJpdmF0ZSA9IGFkb3B0UmVmKG5ldyBTb3VyY2VCdWZmZXJQcml2
YXRlR1N0cmVhbWVyKG1fY2xpZW50LmdldCgpLCBjb250ZW50VHlwZSkpOwotICAgIHJldHVybiBN
ZWRpYVNvdXJjZUdTdHJlYW1lcjo6T2s7CisgICAgUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVH
U3RyZWFtZXI+IHNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIgPSBuZXcgU291cmNlQnVmZmVy
UHJpdmF0ZUdTdHJlYW1lcihtX2NsaWVudC5nZXQoKSwgY29udGVudFR5cGUpOworCisgICAgc291
cmNlQnVmZmVyUHJpdmF0ZSA9IGFkb3B0UmVmKHNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIu
Z2V0KCkpOworICAgIHJldHVybiBtX2NsaWVudC0+YWRkU291cmNlQnVmZmVyKHNvdXJjZUJ1ZmZl
clByaXZhdGVHU3RyZWFtZXIsIGNvbnRlbnRUeXBlKTsKIH0KIAogdm9pZCBNZWRpYVNvdXJjZUdT
dHJlYW1lcjo6ZHVyYXRpb25DaGFuZ2VkKCkKIHsKLSAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUR1
cmF0aW9uKG1fbWVkaWFTb3VyY2UtPmR1cmF0aW9uKCkudG9Eb3VibGUoKSk7CisgICAgbV9jbGll
bnQtPmR1cmF0aW9uQ2hhbmdlZChtX21lZGlhU291cmNlLT5kdXJhdGlvbigpKTsKIH0KIAotdm9p
ZCBNZWRpYVNvdXJjZUdTdHJlYW1lcjo6bWFya0VuZE9mU3RyZWFtKEVuZE9mU3RyZWFtU3RhdHVz
KQordm9pZCBNZWRpYVNvdXJjZUdTdHJlYW1lcjo6bWFya0VuZE9mU3RyZWFtKEVuZE9mU3RyZWFt
U3RhdHVzIHN0YXR1cykKIHsKLSAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZygwKTsKKyAg
ICBtX2NsaWVudC0+bWFya0VuZE9mU3RyZWFtKHN0YXR1cyk7CiB9CiAKIHZvaWQgTWVkaWFTb3Vy
Y2VHU3RyZWFtZXI6OnVubWFya0VuZE9mU3RyZWFtKCkKIHsKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCitNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBNZWRpYVNvdXJjZUdTdHJlYW1lcjo6cmVh
ZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVhZHlTdGF0ZTsKK30KKwordm9pZCBN
ZWRpYVNvdXJjZUdTdHJlYW1lcjo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0
ZSBzdGF0ZSkKK3sKKyAgICBtX3JlYWR5U3RhdGUgPSBzdGF0ZTsKK30KKwordm9pZCBNZWRpYVNv
dXJjZUdTdHJlYW1lcjo6d2FpdEZvclNlZWtDb21wbGV0ZWQoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNlZWtDb21wbGV0ZWQoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNvdXJjZUdTdHJlYW1lci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU291cmNlR1N0
cmVhbWVyLmgKaW5kZXggYWFjYTQ1ZTE4ODQ2MDYwMGFjY2EzMGUwNDQyN2M3YzQxOGM3NzI5My4u
ZjMwYjI5ZmM5OTY4ODdlNWQ0NWFlNjQ4N2RlZTI0NjhmMTIyNmJlMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU291cmNlR1N0cmVh
bWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhU291cmNlR1N0cmVhbWVyLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgT3JhbmdlCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2ViYXN0aWFuIERyw7ZnZSA8c2Vi
YXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKQEAgLTM4LDI1ICszOSwyOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIEZJWE1F
OiBTaG91bGQgdGhpcyBiZSBjYWxsZWQgTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyPwogY2xh
c3MgTWVkaWFTb3VyY2VHU3RyZWFtZXIgZmluYWwgOiBwdWJsaWMgTWVkaWFTb3VyY2VQcml2YXRl
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBvcGVuKE1lZGlhU291cmNlUHJpdmF0ZUNsaWVu
dCosIFdlYktpdE1lZGlhU3JjKik7Ci0gICAgfk1lZGlhU291cmNlR1N0cmVhbWVyKCk7CisgICAg
dmlydHVhbCB+TWVkaWFTb3VyY2VHU3RyZWFtZXIoKTsKKworICAgIHZpcnR1YWwgQWRkU3RhdHVz
IGFkZFNvdXJjZUJ1ZmZlcihjb25zdCBDb250ZW50VHlwZSYsIFJlZlB0cjxTb3VyY2VCdWZmZXJQ
cml2YXRlPiYpOworICAgIHZpcnR1YWwgdm9pZCBkdXJhdGlvbkNoYW5nZWQoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgbWFya0VuZE9mU3RyZWFtKEVuZE9mU3RyZWFtU3RhdHVzKTsKKyAgICB2aXJ0dWFs
IHZvaWQgdW5tYXJrRW5kT2ZTdHJlYW0oKTsKKworICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXI6OlJl
YWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRSZWFkeVN0
YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlKTsKKworICAgIHZpcnR1YWwgdm9pZCB3YWl0Rm9y
U2Vla0NvbXBsZXRlZCgpOworICAgIHZpcnR1YWwgdm9pZCBzZWVrQ29tcGxldGVkKCk7CiAKIHBy
aXZhdGU6Ci0gICAgLy8gTWVkaWFTb3VyY2VQcml2YXRlCi0gICAgdmlydHVhbCBBZGRTdGF0dXMg
YWRkU291cmNlQnVmZmVyKGNvbnN0IENvbnRlbnRUeXBlJiwgUmVmUHRyPFNvdXJjZUJ1ZmZlclBy
aXZhdGU+Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGR1cmF0aW9uQ2hhbmdlZCgpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBtYXJrRW5kT2ZTdHJlYW0oRW5kT2ZTdHJlYW1TdGF0
dXMpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB1bm1hcmtFbmRPZlN0cmVhbSgpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVhZHlTdGF0ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBz
ZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUpIG92ZXJyaWRl
IHsgbV9yZWFkeVN0YXRlID0gcmVhZHlTdGF0ZTsgfQotICAgIHZpcnR1YWwgdm9pZCB3YWl0Rm9y
U2Vla0NvbXBsZXRlZCgpIG92ZXJyaWRlIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZWVrQ29tcGxl
dGVkKCkgb3ZlcnJpZGUgeyB9CisgICAgTWVkaWFTb3VyY2VHU3RyZWFtZXIoTWVkaWFTb3VyY2VQ
cml2YXRlQ2xpZW50KiwgV2ViS2l0TWVkaWFTcmMqKTsKIAotICAgIFJlZlB0cjxNZWRpYVNvdXJj
ZUNsaWVudEdzdHJlYW1lcj4gbV9jbGllbnQ7CisgICAgUmVmUHRyPE1lZGlhU291cmNlQ2xpZW50
R1N0cmVhbWVyPiBtX2NsaWVudDsKICAgICBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqIG1fbWVk
aWFTb3VyY2U7Ci0gICAgTWVkaWFTb3VyY2VHU3RyZWFtZXIoTWVkaWFTb3VyY2VQcml2YXRlQ2xp
ZW50KiwgV2ViS2l0TWVkaWFTcmMqKTsKICAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBtX3Jl
YWR5U3RhdGU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvU291cmNlQnVmZmVyUHJpdmF0ZUdT
dHJlYW1lci5jcHAKaW5kZXggNDVjNWU5MTBlMGY0ZjZlMjU1NzlhMTZmNDBjNTQ4MDlkZWY0NTU2
Ni4uYmI1MDg0MGZiNWE3MjhkYWQ0OTExN2JjZWVlZWM1MGE2M2MzMjNjNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1NvdXJjZUJ1ZmZlclBy
aXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMSw2ICsxLDcg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMyBPcmFuZ2UKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzksMTkgKzQwLDI5IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6U291cmNlQnVmZmVy
UHJpdmF0ZUdTdHJlYW1lcihQYXNzUmVmUHRyPE1lZGlhU291cmNlQ2xpZW50R3N0cmVhbWVyPiBj
bGllbnQsIGNvbnN0IENvbnRlbnRUeXBlJiBjb250ZW50VHlwZSkKLSAgICA6IG1fcmVhZHlTdGF0
ZShNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpCitTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVy
OjpTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyKFBhc3NSZWZQdHI8TWVkaWFTb3VyY2VDbGll
bnRHU3RyZWFtZXI+IGNsaWVudCwgY29uc3QgQ29udGVudFR5cGUmIGNvbnRlbnRUeXBlKQorICAg
IDogbV90eXBlKGNvbnRlbnRUeXBlKQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9y
ZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKIHsKLSAgICBtX2NsaWVudCA9IGNs
aWVudDsKLSAgICBtX3R5cGUgPSBjb250ZW50VHlwZS50eXBlKCk7Cit9CisKK1NvdXJjZUJ1ZmZl
clByaXZhdGVHU3RyZWFtZXI6On5Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyKCkKK3sKK30K
Kwordm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRDbGllbnQoU291cmNlQnVm
ZmVyUHJpdmF0ZUNsaWVudCogY2xpZW50KQoreworICAgIG1fc291cmNlQnVmZmVyUHJpdmF0ZUNs
aWVudCA9IGNsaWVudDsKIH0KIAogdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjph
cHBlbmQoY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQogewogICAg
IEFTU0VSVChtX2NsaWVudCk7Ci0gICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKHJlaW50ZXJw
cmV0X2Nhc3RfcHRyPGNvbnN0IGNoYXIqPihkYXRhKSwgbGVuZ3RoLCBtX3R5cGUpOworICAgIEFT
U0VSVChtX3NvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQpOwogCi0gICAgLy8gRklYTUU6IGNhbGwg
U291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6c291cmNlQnVmZmVyUHJpdmF0ZUFwcGVuZENvbXBs
ZXRlKCkuCisgICAgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6QXBwZW5kUmVzdWx0IHJlc3Vs
dCA9IG1fY2xpZW50LT5hcHBlbmQodGhpcywgZGF0YSwgbGVuZ3RoKTsKKyAgICBtX3NvdXJjZUJ1
ZmZlclByaXZhdGVDbGllbnQtPnNvdXJjZUJ1ZmZlclByaXZhdGVBcHBlbmRDb21wbGV0ZSh0aGlz
LCByZXN1bHQpOwogfQogCiB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OmFib3J0
KCkKQEAgLTYxLDYgKzcyLDQ5IEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6
YWJvcnQoKQogCiB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OnJlbW92ZWRGcm9t
TWVkaWFTb3VyY2UoKQogeworICAgIG1fY2xpZW50LT5yZW1vdmVkRnJvbU1lZGlhU291cmNlKHRo
aXMpOworfQorCitNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBTb3VyY2VCdWZmZXJQcml2YXRlR1N0
cmVhbWVyOjpyZWFkeVN0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZWFkeVN0YXRlOwor
fQorCit2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OnNldFJlYWR5U3RhdGUoTWVk
aWFQbGF5ZXI6OlJlYWR5U3RhdGUgc3RhdGUpCit7CisgICAgbV9yZWFkeVN0YXRlID0gc3RhdGU7
Cit9CisKKy8vIFRPRE86IEltcGxlbWVudCB0aGVzZQordm9pZCBTb3VyY2VCdWZmZXJQcml2YXRl
R1N0cmVhbWVyOjpmbHVzaEFuZEVucXVldWVOb25EaXNwbGF5aW5nU2FtcGxlcyhWZWN0b3I8UmVm
UHRyPE1lZGlhU2FtcGxlPj4sIEF0b21pY1N0cmluZykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OmVucXVldWVTYW1wbGUo
UGFzc1JlZlB0cjxNZWRpYVNhbXBsZT4sIEF0b21pY1N0cmluZykKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCitib29sIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OmlzUmVhZHlG
b3JNb3JlU2FtcGxlcyhBdG9taWNTdHJpbmcpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVy
OjpzZXRBY3RpdmUoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFNv
dXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OnN0b3BBc2tpbmdGb3JNb3JlU2FtcGxlcyhBdG9t
aWNTdHJpbmcpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBTb3VyY2VCdWZm
ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlDbGllbnRXaGVuUmVhZHlGb3JNb3JlU2FtcGxlcyhB
dG9taWNTdHJpbmcpCit7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1NvdXJjZUJ1ZmZlclBy
aXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggNTc0ZTIxYTA5MTJjM2Qz
ZDFhMzJmNzNhODMyYTExZGFlZWNjYWNlNi4uOTYwZjg3NjkzMGQ3MDExZmNmNGJlZjQxMjliMTJm
Zjg2NDhiZTVkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1NvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJl
YW1lci5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEzIE9yYW5nZQor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmlj
dWxhci5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zNCw2ICsz
NSw3IEBACiAKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKSAmJiBVU0UoR1NUUkVBTUVSKQogCisj
aW5jbHVkZSAiQ29udGVudFR5cGUuaCIKICNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlLmgi
CiAjaW5jbHVkZSAiV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCIKIApAQCAtNDEsMjEgKzQz
LDI5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU291cmNlQnVmZmVyUHJpdmF0ZUdT
dHJlYW1lciBmaW5hbCA6IHB1YmxpYyBTb3VyY2VCdWZmZXJQcml2YXRlIHsKIHB1YmxpYzoKLSAg
ICBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyKFBhc3NSZWZQdHI8TWVkaWFTb3VyY2VDbGll
bnRHc3RyZWFtZXI+LCBjb25zdCBDb250ZW50VHlwZSYpOwotICAgIH5Tb3VyY2VCdWZmZXJQcml2
YXRlR1N0cmVhbWVyKCkgeyB9CisgICAgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcihQYXNz
UmVmUHRyPE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyPiwgY29uc3QgQ29udGVudFR5cGUmKTsK
KyAgICB2aXJ0dWFsIH5Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyKCk7CiAKLSAgICB2b2lk
IHNldENsaWVudChTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50KikgeyB9Ci0gICAgdm9pZCBhcHBl
bmQoY29uc3QgdW5zaWduZWQgY2hhciosIHVuc2lnbmVkKTsKLSAgICB2b2lkIGFib3J0KCk7Ci0g
ICAgdm9pZCByZW1vdmVkRnJvbU1lZGlhU291cmNlKCk7Ci0gICAgTWVkaWFQbGF5ZXI6OlJlYWR5
U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZHlTdGF0ZTsgfQotICAgIHZv
aWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKSB7IG1f
cmVhZHlTdGF0ZSA9IHJlYWR5U3RhdGU7IH0KLSAgICB2b2lkIGV2aWN0Q29kZWRGcmFtZXMoKSB7
IH0KLSAgICBib29sIGlzRnVsbCgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lk
IHNldENsaWVudChTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50Kik7CisKKyAgICB2aXJ0dWFsIHZv
aWQgYXBwZW5kKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCk7Cisg
ICAgdmlydHVhbCB2b2lkIGFib3J0KCk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tTWVk
aWFTb3VyY2UoKTsKKworICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlT
dGF0ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVy
OjpSZWFkeVN0YXRlKTsKKworICAgIHZpcnR1YWwgdm9pZCBmbHVzaEFuZEVucXVldWVOb25EaXNw
bGF5aW5nU2FtcGxlcyhWZWN0b3I8UmVmUHRyPE1lZGlhU2FtcGxlPj4sIEF0b21pY1N0cmluZyk7
CisgICAgdmlydHVhbCB2b2lkIGVucXVldWVTYW1wbGUoUGFzc1JlZlB0cjxNZWRpYVNhbXBsZT4s
IEF0b21pY1N0cmluZyk7CisgICAgdmlydHVhbCBib29sIGlzUmVhZHlGb3JNb3JlU2FtcGxlcyhB
dG9taWNTdHJpbmcpOworICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmUoYm9vbCk7CisgICAgdmly
dHVhbCB2b2lkIHN0b3BBc2tpbmdGb3JNb3JlU2FtcGxlcyhBdG9taWNTdHJpbmcpOworICAgIHZp
cnR1YWwgdm9pZCBub3RpZnlDbGllbnRXaGVuUmVhZHlGb3JNb3JlU2FtcGxlcyhBdG9taWNTdHJp
bmcpOwogCiBwcml2YXRlOgotICAgIFN0cmluZyBtX3R5cGU7Ci0gICAgUmVmUHRyPE1lZGlhU291
cmNlQ2xpZW50R3N0cmVhbWVyPiBtX2NsaWVudDsKKyAgICBDb250ZW50VHlwZSBtX3R5cGU7Cisg
ICAgUmVmUHRyPE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyPiBtX2NsaWVudDsKKyAgICBTb3Vy
Y2VCdWZmZXJQcml2YXRlQ2xpZW50KiBtX3NvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ7CiAgICAg
TWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdE1lZGlhU291
cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKaW5kZXggYjlhNTQyOGMwYmE4ZmUw
ZDYyM2EyMzI3NDVlNzkyMjUwMzg0ZjVmMy4uNzRhNzA3NjdlN2MyOGZiMDA1YmFiYjM5MTJlM2Qy
M2NkOTljYWFjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFt
ZXIuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBTZWJh
c3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KICAqICBDb3B5
cmlnaHQgKEMpIDIwMTMgQ29sbGFib3JhIEx0ZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMTMgT3Jh
bmdlCisgKiAgQ29weXJpZ2h0IChDKSAyMDE0IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBj
ZW50cmljdWxhci5jb20+CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yMyw2MCArMjQsNDEgQEAK
IAogI2lmIEVOQUJMRShWSURFTykgJiYgRU5BQkxFKE1FRElBX1NPVVJDRSkgJiYgVVNFKEdTVFJF
QU1FUikKIAotI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJHU3RyZWFt
ZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlRp
bWVSYW5nZXMuaCIKKwogI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc3JjLmg+CiAjaW5jbHVkZSA8
Z3N0L2dzdC5oPgogI2luY2x1ZGUgPGdzdC9wYnV0aWxzL21pc3NpbmctcGx1Z2lucy5oPgotI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UuaD4KICNpbmNsdWRl
IDx3dGYvZ29iamVjdC9HVW5pcXVlUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgogCi10eXBlZGVmIHN0cnVjdCBfU291cmNlIHsKLSAgICBHc3RFbGVtZW50KiBhcHBzcmM7Ci0g
ICAgZ3VpbnQgc291cmNlaWQ7ICAgICAgICAvKiBUbyBjb250cm9sIHRoZSBHU291cmNlICovCi0g
ICAgR3N0UGFkKiBzcmNwYWQ7Ci0gICAgZ2Jvb2xlYW4gcGFkQWRkZWQ7Ci0KLSAgICBndWludDY0
IG9mZnNldDsKLSAgICBndWludDY0IHNpemU7Ci0gICAgZ2Jvb2xlYW4gcGF1c2VkOwotCi0gICAg
R1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBzdGFydDsKLSAgICBHVGhyZWFkU2FmZU1haW5Mb29w
U291cmNlIHN0b3A7Ci0gICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBuZWVkRGF0YTsKLSAg
ICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIGVub3VnaERhdGE7Ci0gICAgR1RocmVhZFNhZmVN
YWluTG9vcFNvdXJjZSBzZWVrOwotCi0gICAgZ3VpbnQ2NCByZXF1ZXN0ZWRPZmZzZXQ7Ci19IFNv
dXJjZTsKLQotCi0jZGVmaW5lIFdFQktJVF9NRURJQV9TUkNfR0VUX1BSSVZBVEUob2JqKSAoR19U
WVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9NRURJQV9TUkMsIFdl
YktpdE1lZGlhU3JjUHJpdmF0ZSkpCit0eXBlZGVmIHN0cnVjdCBfU291cmNlIFNvdXJjZTsKK3N0
cnVjdCBfU291cmNlIHsKKyAgICBHc3RFbGVtZW50KiBzcmM7CisgICAgLy8gSnVzdCBmb3IgaWRl
bnRpZmljYXRpb24KKyAgICBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlKiBzb3VyY2VCdWZm
ZXI7Cit9OwogCiBzdHJ1Y3QgX1dlYktpdE1lZGlhU3JjUHJpdmF0ZSB7Ci0gICAgZ2NoYXIqIHVy
aTsKLSAgICBTb3VyY2Ugc291cmNlVmlkZW87Ci0gICAgU291cmNlIHNvdXJjZUF1ZGlvOwotICAg
IFdlYkNvcmU6Ok1lZGlhUGxheWVyKiBwbGF5ZXI7Ci0gICAgR3N0RWxlbWVudCogcGxheWJpbjsK
LSAgICBnaW50NjQgZHVyYXRpb247Ci0gICAgZ2Jvb2xlYW4gc2Vla2FibGU7Ci0gICAgZ2Jvb2xl
YW4gbm9Nb3JlUGFkOwotICAgIC8vIFRSVUUgaWYgYXBwc3JjJ3MgdmVyc2lvbiBpcyA+PSAwLjEw
LjI3LCBzZWUKLSAgICAvLyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjA5NDIzCi0gICAgZ2Jvb2xlYW4gaGF2ZUFwcFNyYzI3OwotICAgIGd1aW50IG5iU291cmNl
OworICAgIEdMaXN0KiBzb3VyY2VzOworICAgIGdjaGFyKiBsb2NhdGlvbjsKKyAgICBHc3RDbG9j
a1RpbWUgZHVyYXRpb247CisgICAgYm9vbCBoYXZlQXBwc3JjOworICAgIGJvb2wgYXN5bmNTdGFy
dDsKKyAgICBib29sIG5vTW9yZVBhZHM7CiB9OwogCiBlbnVtIHsKLSAgICBQcm9wTG9jYXRpb24g
PSAxLAotICAgIFByb0xhc3QKKyAgICBQcm9wMCwKKyAgICBQcm9wTG9jYXRpb24KIH07CiAKLXN0
YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNUZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RF
TVBMQVRFKCJzcmNfJXUiLCBHU1RfUEFEX1NSQywgR1NUX1BBRF9TT01FVElNRVMsIEdTVF9TVEFU
SUNfQ0FQU19BTlkpOworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY1RlbXBsYXRlID0g
R1NUX1NUQVRJQ19QQURfVEVNUExBVEUoInNyY18ldSIsIEdTVF9QQURfU1JDLAorICAgIEdTVF9Q
QURfU09NRVRJTUVTLCBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKKworI2RlZmluZSBXRUJLSVRfTUVE
SUFfU1JDX0dFVF9QUklWQVRFKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2Jq
KSwgV0VCS0lUX1RZUEVfTUVESUFfU1JDLCBXZWJLaXRNZWRpYVNyY1ByaXZhdGUpKQogCiBHU1Rf
REVCVUdfQ0FURUdPUllfU1RBVElDKHdlYmtpdF9tZWRpYV9zcmNfZGVidWcpOwogI2RlZmluZSBH
U1RfQ0FUX0RFRkFVTFQgd2Via2l0X21lZGlhX3NyY19kZWJ1ZwpAQCAtODgsMjQgKzcwLDYgQEAg
c3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNHZXRQcm9wZXJ0eShHT2JqZWN0KiwgZ3VpbnQgcHJv
cGVydHlJZCwgR1ZhbHVlKiwgR1BhcmEKIHN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJL
aXRNZWRpYVNyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqLCBHc3RTdGF0ZUNoYW5nZSk7CiBzdGF0
aWMgZ2Jvb2xlYW4gd2ViS2l0TWVkaWFTcmNRdWVyeVdpdGhQYXJlbnQoR3N0UGFkKiwgR3N0T2Jq
ZWN0KiwgR3N0UXVlcnkqKTsKIAotc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFWaWRlb1NyY05lZWRE
YXRhQ2IoR3N0QXBwU3JjKiwgZ3VpbnQsIGdwb2ludGVyKTsKLXN0YXRpYyB2b2lkIHdlYktpdE1l
ZGlhVmlkZW9TcmNFbm91Z2hEYXRhQ2IoR3N0QXBwU3JjKiwgZ3BvaW50ZXIpOwotc3RhdGljIGdi
b29sZWFuIHdlYktpdE1lZGlhVmlkZW9TcmNTZWVrRGF0YUNiKEdzdEFwcFNyYyosIGd1aW50NjQs
IGdwb2ludGVyKTsKLXN0YXRpYyB2b2lkIHdlYktpdE1lZGlhQXVkaW9TcmNOZWVkRGF0YUNiKEdz
dEFwcFNyYyosIGd1aW50LCBncG9pbnRlcik7Ci1zdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYUF1ZGlv
U3JjRW5vdWdoRGF0YUNiKEdzdEFwcFNyYyosIGdwb2ludGVyKTsKLXN0YXRpYyBnYm9vbGVhbiB3
ZWJLaXRNZWRpYUF1ZGlvU3JjU2Vla0RhdGFDYihHc3RBcHBTcmMqLCBndWludDY0LCBncG9pbnRl
cik7Ci1zdGF0aWMgR3N0QXBwU3JjQ2FsbGJhY2tzIGFwcHNyY0NhbGxiYWNrc1ZpZGVvID0gewot
ICAgIHdlYktpdE1lZGlhVmlkZW9TcmNOZWVkRGF0YUNiLAotICAgIHdlYktpdE1lZGlhVmlkZW9T
cmNFbm91Z2hEYXRhQ2IsCi0gICAgd2ViS2l0TWVkaWFWaWRlb1NyY1NlZWtEYXRhQ2IsCi0gICAg
eyAwIH0KLX07Ci1zdGF0aWMgR3N0QXBwU3JjQ2FsbGJhY2tzIGFwcHNyY0NhbGxiYWNrc0F1ZGlv
ID0gewotICAgIHdlYktpdE1lZGlhQXVkaW9TcmNOZWVkRGF0YUNiLAotICAgIHdlYktpdE1lZGlh
QXVkaW9TcmNFbm91Z2hEYXRhQ2IsCi0gICAgd2ViS2l0TWVkaWFBdWRpb1NyY1NlZWtEYXRhQ2Is
Ci0gICAgeyAwIH0KLX07CiAjZGVmaW5lIHdlYmtpdF9tZWRpYV9zcmNfcGFyZW50X2NsYXNzIHBh
cmVudF9jbGFzcwogLy8gV2Ugc3BsaXQgdGhpcyBvdXQgaW50byBhbm90aGVyIG1hY3JvIHRvIGF2
b2lkIGEgY2hlY2std2Via2l0LXN0eWxlIGVycm9yLgogI2RlZmluZSBXRUJLSVRfTUVESUFfU1JD
X0NBVEVHT1JZX0lOSVQgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X21lZGlhX3NyY19k
ZWJ1ZywgIndlYmtpdG1lZGlhc3JjIiwgMCwgIndlYnNyYyBlbGVtZW50Iik7CkBAIC0xMjQsNyAr
ODgsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfc3JjX2NsYXNzX2luaXQoV2ViS2l0TWVk
aWFTcmNDbGFzcyoga2xhc3MpCiAKICAgICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBs
YXRlKGVrbGFzcywgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0KCZzcmNUZW1wbGF0ZSkpOwog
Ci0gICAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X21ldGFkYXRhKGVrbGFzcywgIldlYktpdCBNZWRp
YSBzb3VyY2UgZWxlbWVudCIsICJTb3VyY2UiLCAiSGFuZGxlcyBCbG9iIHVyaXMiLCAiU3RlcGhh
bmUgSmFkYXVkIDxzamFkYXVkQHNpaS5mcj4iKTsKKyAgICBnc3RfZWxlbWVudF9jbGFzc19zZXRf
c3RhdGljX21ldGFkYXRhKGVrbGFzcywgIldlYktpdCBNZWRpYSBzb3VyY2UgZWxlbWVudCIsICJT
b3VyY2UiLCAiSGFuZGxlcyBCbG9iIHVyaXMiLCAiU3RlcGhhbmUgSmFkYXVkIDxzamFkYXVkQHNp
aS5mcj4sIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Iik7CiAK
ICAgICAvKiBBbGxvd3Mgc2V0dGluZyB0aGUgdXJpIHVzaW5nIHRoZSAnbG9jYXRpb24nIHByb3Bl
cnR5LCB3aGljaCBpcyB1c2VkCiAgICAgICogZm9yIGV4YW1wbGUgYnkgZ3N0X2VsZW1lbnRfbWFr
ZV9mcm9tX3VyaSgpICovCkBAIC0xMzgsNTIgKzEwMiw5IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9t
ZWRpYV9zcmNfY2xhc3NfaW5pdChXZWJLaXRNZWRpYVNyY0NsYXNzKiBrbGFzcykKICAgICBnX3R5
cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRNZWRpYVNyY1ByaXZhdGUp
KTsKIH0KIAotc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNBZGRTcmMoV2ViS2l0TWVkaWFTcmMq
IHNyYywgR3N0RWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBHc3RQYWQqIGdob3N0UGFkOwotICAg
IFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKLQotICAgIGlmICghZ3N0
X2Jpbl9hZGQoR1NUX0JJTihzcmMpLCBlbGVtZW50KSkgewotICAgICAgICBHU1RfREVCVUdfT0JK
RUNUKHNyYywgIlNyYyBlbGVtZW50IG5vdCBhZGRlZCIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIEdSZWZQdHI8R3N0UGFkPiB0YXJnZXRzcmMgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRf
Z2V0X3N0YXRpY19wYWQoZWxlbWVudCwgInNyYyIpKTsKLSAgICBpZiAoIXRhcmdldHNyYykgewot
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlBhZCBub3QgZm91bmQiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQo
ZWxlbWVudCk7Ci0gICAgR1VuaXF1ZVB0cjxnY2hhcj4gbmFtZShnX3N0cmR1cF9wcmludGYoInNy
Y18ldSIsIHByaXYtPm5iU291cmNlKSk7Ci0gICAgZ2hvc3RQYWQgPSBXZWJDb3JlOjp3ZWJraXRH
c3RHaG9zdFBhZEZyb21TdGF0aWNUZW1wbGF0ZSgmc3JjVGVtcGxhdGUsIG5hbWUuZ2V0KCksIHRh
cmdldHNyYy5nZXQoKSk7Ci0gICAgZ3N0X3BhZF9zZXRfYWN0aXZlKGdob3N0UGFkLCBUUlVFKTsK
LQotICAgIHByaXYtPm5iU291cmNlKys7Ci0KLSAgICBpZiAocHJpdi0+c291cmNlVmlkZW8uYXBw
c3JjID09IGVsZW1lbnQpCi0gICAgICAgIHByaXYtPnNvdXJjZVZpZGVvLnNyY3BhZCA9IGdob3N0
UGFkOwotICAgIGVsc2UgaWYgKHByaXYtPnNvdXJjZUF1ZGlvLmFwcHNyYyA9PSBlbGVtZW50KQot
ICAgICAgICBwcml2LT5zb3VyY2VBdWRpby5zcmNwYWQgPSBnaG9zdFBhZDsKLQotICAgIEdTVF9P
QkpFQ1RfRkxBR19TRVQoZ2hvc3RQYWQsIEdTVF9QQURfRkxBR19ORUVEX1BBUkVOVCk7Ci0gICAg
Z3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24oZ2hvc3RQYWQsIHdlYktpdE1lZGlhU3JjUXVlcnlX
aXRoUGFyZW50KTsKLX0KLQogc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX3NyY19pbml0KFdlYktp
dE1lZGlhU3JjKiBzcmMpCiB7Ci0gICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gV0VC
S0lUX01FRElBX1NSQ19HRVRfUFJJVkFURShzcmMpOwotICAgIHNyYy0+cHJpdiA9IHByaXY7Ci0g
ICAgbmV3IChwcml2KSBXZWJLaXRNZWRpYVNyY1ByaXZhdGUoKTsKLQotICAgIHByaXYtPnNvdXJj
ZVZpZGVvLmFwcHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXBwc3JjIiwgInZpZGVv
YXBwc3JjIik7Ci0gICAgZ3N0X2FwcF9zcmNfc2V0X2NhbGxiYWNrcyhHU1RfQVBQX1NSQyhwcml2
LT5zb3VyY2VWaWRlby5hcHBzcmMpLCAmYXBwc3JjQ2FsbGJhY2tzVmlkZW8sIHNyYywgMCk7Ci0g
ICAgZ3N0X2FwcF9zcmNfc2V0X3N0cmVhbV90eXBlKEdTVF9BUFBfU1JDKHByaXYtPnNvdXJjZVZp
ZGVvLmFwcHNyYyksIEdTVF9BUFBfU1RSRUFNX1RZUEVfU0VFS0FCTEUpOwotICAgIHdlYktpdE1l
ZGlhU3JjQWRkU3JjKHNyYywgcHJpdi0+c291cmNlVmlkZW8uYXBwc3JjKTsKLQotICAgIHByaXYt
PnNvdXJjZUF1ZGlvLmFwcHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXBwc3JjIiwg
ImF1ZGlvYXBwc3JjIik7Ci0gICAgZ3N0X2FwcF9zcmNfc2V0X2NhbGxiYWNrcyhHU1RfQVBQX1NS
Qyhwcml2LT5zb3VyY2VBdWRpby5hcHBzcmMpLCAmYXBwc3JjQ2FsbGJhY2tzQXVkaW8sIHNyYywg
MCk7Ci0gICAgZ3N0X2FwcF9zcmNfc2V0X3N0cmVhbV90eXBlKEdTVF9BUFBfU1JDKHByaXYtPnNv
dXJjZUF1ZGlvLmFwcHNyYyksIEdTVF9BUFBfU1RSRUFNX1RZUEVfU0VFS0FCTEUpOwotICAgIHdl
YktpdE1lZGlhU3JjQWRkU3JjKHNyYywgcHJpdi0+c291cmNlQXVkaW8uYXBwc3JjKTsKKyAgICBz
cmMtPnByaXYgPSBXRUJLSVRfTUVESUFfU1JDX0dFVF9QUklWQVRFKHNyYyk7CiB9CiAKIHN0YXRp
YyB2b2lkIHdlYktpdE1lZGlhU3JjRmluYWxpemUoR09iamVjdCogb2JqZWN0KQpAQCAtMTkxLDgg
KzExMiw4IEBAIHN0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjRmluYWxpemUoR09iamVjdCogb2Jq
ZWN0KQogICAgIFdlYktpdE1lZGlhU3JjKiBzcmMgPSBXRUJLSVRfTUVESUFfU1JDKG9iamVjdCk7
CiAgICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCi0gICAgZ19m
cmVlKHByaXYtPnVyaSk7Ci0gICAgcHJpdi0+fldlYktpdE1lZGlhU3JjUHJpdmF0ZSgpOworICAg
IC8vIFRPRE86IEZyZWUgc291cmNlcworICAgIGdfZnJlZShwcml2LT5sb2NhdGlvbik7CiAKICAg
ICBHU1RfQ0FMTF9QQVJFTlQoR19PQkpFQ1RfQ0xBU1MsIGZpbmFsaXplLCAob2JqZWN0KSk7CiB9
CkBAIC0yMDAsNiArMTIxLDcgQEAgc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNGaW5hbGl6ZShH
T2JqZWN0KiBvYmplY3QpCiBzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY1NldFByb3BlcnR5KEdP
YmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1T
cGVjKiBwc3BlYykKIHsKICAgICBXZWJLaXRNZWRpYVNyYyogc3JjID0gV0VCS0lUX01FRElBX1NS
QyhvYmplY3QpOworCiAgICAgc3dpdGNoIChwcm9wSWQpIHsKICAgICBjYXNlIFByb3BMb2NhdGlv
bjoKICAgICAgICAgZ3N0X3VyaV9oYW5kbGVyX3NldF91cmkocmVpbnRlcnByZXRfY2FzdDxHc3RV
UklIYW5kbGVyKj4oc3JjKSwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSwgMCk7CkBAIC0yMTgs
NyArMTQwLDcgQEAgc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNHZXRQcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIGd1aW50IHByb3BJZCwgR1ZhbHVlKiB2YWwKICAgICBHU1RfT0JKRUNUX0xPQ0so
c3JjKTsKICAgICBzd2l0Y2ggKHByb3BJZCkgewogICAgIGNhc2UgUHJvcExvY2F0aW9uOgotICAg
ICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHByaXYtPnVyaSk7CisgICAgICAgIGdfdmFs
dWVfc2V0X3N0cmluZyh2YWx1ZSwgcHJpdi0+bG9jYXRpb24pOwogICAgICAgICBicmVhazsKICAg
ICBkZWZhdWx0OgogICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2Jq
ZWN0LCBwcm9wSWQsIHBzcGVjKTsKQEAgLTIyNywxMTQgKzE0OSwyMiBAQCBzdGF0aWMgdm9pZCB3
ZWJLaXRNZWRpYVNyY0dldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBH
VmFsdWUqIHZhbAogICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiB9CiAKLS8vIG11c3QgYmUg
Y2FsbGVkIG9uIG1haW4gdGhyZWFkIGFuZCB3aXRoIG9iamVjdCB1bmxvY2tlZAotc3RhdGljIHZv
aWQgd2ViS2l0TWVkaWFWaWRlb1NyY1N0b3AoV2ViS2l0TWVkaWFTcmMqIHNyYykKK3N0YXRpYyB2
b2lkIHdlYktpdE1lZGlhU3JjRG9Bc3luY1N0YXJ0KFdlYktpdE1lZGlhU3JjKiBzcmMpCiB7CiAg
ICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwotICAgIGdib29sZWFu
IHNlZWtpbmc7Ci0KLSAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKLQotICAgIHNlZWtpbmcgPSBw
cml2LT5zb3VyY2VWaWRlby5zZWVrLmlzQWN0aXZlKCk7Ci0KLSAgICBwcml2LT5zb3VyY2VWaWRl
by5zdGFydC5jYW5jZWwoKTsKLQotICAgIHByaXYtPnBsYXllciA9IDA7Ci0gICAgcHJpdi0+cGxh
eWJpbiA9IDA7Ci0KLSAgICBwcml2LT5zb3VyY2VWaWRlby5uZWVkRGF0YS5jYW5jZWwoKTsKLSAg
ICBwcml2LT5zb3VyY2VWaWRlby5lbm91Z2hEYXRhLmNhbmNlbCgpOwotICAgIHByaXYtPnNvdXJj
ZVZpZGVvLnNlZWsuY2FuY2VsKCk7Ci0KLSAgICBwcml2LT5zb3VyY2VWaWRlby5wYXVzZWQgPSBG
QUxTRTsKLSAgICBwcml2LT5zb3VyY2VWaWRlby5vZmZzZXQgPSAwOwotICAgIHByaXYtPnNlZWth
YmxlID0gRkFMU0U7Ci0KLSAgICBwcml2LT5kdXJhdGlvbiA9IDA7Ci0gICAgcHJpdi0+bmJTb3Vy
Y2UgPSAwOwotCi0gICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKLQotICAgIGlmIChwcml2LT5z
b3VyY2VWaWRlby5hcHBzcmMpIHsKLSAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X2NhcHMoR1NUX0FQ
UF9TUkMocHJpdi0+c291cmNlVmlkZW8uYXBwc3JjKSwgMCk7Ci0gICAgICAgIGlmICghc2Vla2lu
ZykKLSAgICAgICAgICAgIGdzdF9hcHBfc3JjX3NldF9zaXplKEdTVF9BUFBfU1JDKHByaXYtPnNv
dXJjZVZpZGVvLmFwcHNyYyksIC0xKTsKLSAgICB9Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUKHNy
YywgIlN0b3BwZWQgcmVxdWVzdCIpOworICAgIHByaXYtPmFzeW5jU3RhcnQgPSB0cnVlOworICAg
IEdTVF9CSU5fQ0xBU1MocGFyZW50X2NsYXNzKS0+aGFuZGxlX21lc3NhZ2UoR1NUX0JJTihzcmMp
LAorICAgICAgICBnc3RfbWVzc2FnZV9uZXdfYXN5bmNfc3RhcnQoR1NUX09CSkVDVChzcmMpKSk7
CiB9CiAKLXN0YXRpYyB2b2lkIHdlYktpdE1lZGlhQXVkaW9TcmNTdG9wKFdlYktpdE1lZGlhU3Jj
KiBzcmMpCitzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY0RvQXN5bmNEb25lKFdlYktpdE1lZGlh
U3JjKiBzcmMpCiB7CiAgICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2
OwotICAgIGdib29sZWFuIHNlZWtpbmc7Ci0KLSAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKLQot
ICAgIHNlZWtpbmcgPSBwcml2LT5zb3VyY2VBdWRpby5zZWVrLmlzQWN0aXZlKCk7Ci0KLSAgICBw
cml2LT5zb3VyY2VBdWRpby5zdGFydC5jYW5jZWwoKTsKLQotICAgIHByaXYtPnBsYXllciA9IDA7
Ci0KLSAgICBwcml2LT5wbGF5YmluID0gMDsKLQotICAgIHByaXYtPnNvdXJjZUF1ZGlvLm5lZWRE
YXRhLmNhbmNlbCgpOwotICAgIHByaXYtPnNvdXJjZUF1ZGlvLmVub3VnaERhdGEuY2FuY2VsKCk7
Ci0gICAgcHJpdi0+c291cmNlQXVkaW8uc2Vlay5jYW5jZWwoKTsKLQotICAgIHByaXYtPnNvdXJj
ZUF1ZGlvLnBhdXNlZCA9IEZBTFNFOwotCi0gICAgcHJpdi0+c291cmNlQXVkaW8ub2Zmc2V0ID0g
MDsKLQotICAgIHByaXYtPnNlZWthYmxlID0gRkFMU0U7Ci0KLSAgICBwcml2LT5kdXJhdGlvbiA9
IDA7Ci0gICAgcHJpdi0+bmJTb3VyY2UgPSAwOwotCi0gICAgR1NUX09CSkVDVF9VTkxPQ0soc3Jj
KTsKLQotICAgIGlmIChwcml2LT5zb3VyY2VBdWRpby5hcHBzcmMpIHsKLSAgICAgICAgZ3N0X2Fw
cF9zcmNfc2V0X2NhcHMoR1NUX0FQUF9TUkMocHJpdi0+c291cmNlQXVkaW8uYXBwc3JjKSwgMCk7
Ci0gICAgICAgIGlmICghc2Vla2luZykKLSAgICAgICAgICAgIGdzdF9hcHBfc3JjX3NldF9zaXpl
KEdTVF9BUFBfU1JDKHByaXYtPnNvdXJjZUF1ZGlvLmFwcHNyYyksIC0xKTsKKyAgICBpZiAocHJp
di0+YXN5bmNTdGFydCkgeworICAgICAgICBHU1RfQklOX0NMQVNTKHBhcmVudF9jbGFzcyktPmhh
bmRsZV9tZXNzYWdlKEdTVF9CSU4oc3JjKSwKKyAgICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19h
c3luY19kb25lKEdTVF9PQkpFQ1Qoc3JjKSwgR1NUX0NMT0NLX1RJTUVfTk9ORSkpOworICAgICAg
ICBwcml2LT5hc3luY1N0YXJ0ID0gZmFsc2U7CiAgICAgfQotCi0gICAgR1NUX0RFQlVHX09CSkVD
VChzcmMsICJTdG9wcGVkIHJlcXVlc3QiKTsKLX0KLQotLy8gbXVzdCBiZSBjYWxsZWQgb24gbWFp
biB0aHJlYWQgYW5kIHdpdGggb2JqZWN0IHVubG9ja2VkCi1zdGF0aWMgdm9pZCB3ZWJLaXRNZWRp
YVZpZGVvU3JjU3RhcnQoV2ViS2l0TWVkaWFTcmMqIHNyYykKLXsKLSAgICBXZWJLaXRNZWRpYVNy
Y1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7Ci0KLSAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsK
LSAgICBpZiAoIXByaXYtPnVyaSkgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIk5v
IFVSSSBwcm92aWRlZCIpOwotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwotICAgICAg
ICB3ZWJLaXRNZWRpYVZpZGVvU3JjU3RvcChzcmMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywg
IlN0YXJ0ZWQgcmVxdWVzdCIpOwotfQotCi0vLyBtdXN0IGJlIGNhbGxlZCBvbiBtYWluIHRocmVh
ZCBhbmQgd2l0aCBvYmplY3QgdW5sb2NrZWQKLXN0YXRpYyB2b2lkIHdlYktpdE1lZGlhQXVkaW9T
cmNTdGFydChXZWJLaXRNZWRpYVNyYyogc3JjKQotewotICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0
ZSogcHJpdiA9IHNyYy0+cHJpdjsKLQotICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwotICAgIGlm
ICghcHJpdi0+dXJpKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAiTm8gVVJJIHBy
b3ZpZGVkIik7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7Ci0gICAgICAgIHdlYktp
dE1lZGlhQXVkaW9TcmNTdG9wKHNyYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBH
U1RfT0JKRUNUX1VOTE9DSyhzcmMpOwotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU3RhcnRl
ZCByZXF1ZXN0Iik7CiB9CiAKIHN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRNZWRp
YVNyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5z
aXRpb24pCkBAIC0zNDQsMTMgKzE3NCw5IEBAIHN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3
ZWJLaXRNZWRpYVNyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdFN0CiAgICAg
V2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCiAgICAgc3dpdGNoICh0
cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6Ci0g
ICAgICAgIGlmICghcHJpdi0+c291cmNlVmlkZW8uYXBwc3JjICYmICFwcml2LT5zb3VyY2VBdWRp
by5hcHBzcmMpIHsKLSAgICAgICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShlbGVtZW50
LAotICAgICAgICAgICAgICAgIGdzdF9taXNzaW5nX2VsZW1lbnRfbWVzc2FnZV9uZXcoZWxlbWVu
dCwgImFwcHNyYyIpKTsKLSAgICAgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SKHNyYywgQ09SRSwg
TUlTU0lOR19QTFVHSU4sICgwKSwgKCJubyBhcHBzcmMiKSk7Ci0gICAgICAgICAgICByZXR1cm4g
R1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOwotICAgICAgICB9CisgICAgY2FzZSBHU1RfU1RBVEVf
Q0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKKyAgICAgICAgcHJpdi0+bm9Nb3JlUGFkcyA9IGZhbHNl
OworICAgICAgICB3ZWJLaXRNZWRpYVNyY0RvQXN5bmNTdGFydChzcmMpOwogICAgICAgICBicmVh
azsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKQEAgLTM1OSwzNyArMTg1LDE3IEBAIHN0
YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRNZWRpYVNyY0NoYW5nZVN0YXRlKEdzdEVs
ZW1lbnQqIGVsZW1lbnQsIEdzdFN0CiAgICAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MocGFyZW50
X2NsYXNzKS0+Y2hhbmdlX3N0YXRlKGVsZW1lbnQsIHRyYW5zaXRpb24pOwogICAgIGlmIChHX1VO
TElLRUxZKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpKSB7CiAgICAgICAgIEdTVF9E
RUJVR19PQkpFQ1Qoc3JjLCAiU3RhdGUgY2hhbmdlIGZhaWxlZCIpOworICAgICAgICB3ZWJLaXRN
ZWRpYVNyY0RvQXN5bmNEb25lKHNyYyk7CiAgICAgICAgIHJldHVybiByZXQ7CiAgICAgfQogCiAg
ICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CiAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZ
X1RPX1BBVVNFRDoKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSRUFEWS0+UEFVU0VE
Iik7Ci0gICAgICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwotCi0gICAgICAgIGdzdF9vYmplY3Rf
cmVmKHNyYyk7Ci0gICAgICAgIHByaXYtPnNvdXJjZVZpZGVvLnN0YXJ0LnNjaGVkdWxlKCJbV2Vi
S2l0XSB3ZWJLaXRNZWRpYVZpZGVvU3JjU3RhcnQiLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4oc3Rk
OjpiaW5kKHdlYktpdE1lZGlhVmlkZW9TcmNTdGFydCwgc3JjKSksIEdfUFJJT1JJVFlfREVGQVVM
VCwKLSAgICAgICAgICAgIFtzcmNdIHsgZ3N0X29iamVjdF91bnJlZihzcmMpOyB9KTsKLQotICAg
ICAgICBnc3Rfb2JqZWN0X3JlZihzcmMpOwotICAgICAgICBwcml2LT5zb3VyY2VBdWRpby5zdGFy
dC5zY2hlZHVsZSgiW1dlYktpdF0gd2ViS2l0TWVkaWFBdWRpb1NyY1N0YXJ0Iiwgc3RkOjpmdW5j
dGlvbjx2b2lkKCk+KHN0ZDo6YmluZCh3ZWJLaXRNZWRpYUF1ZGlvU3JjU3RhcnQsIHNyYykpLCBH
X1BSSU9SSVRZX0RFRkFVTFQsCi0gICAgICAgICAgICBbc3JjXSB7IGdzdF9vYmplY3RfdW5yZWYo
c3JjKTsgfSk7Ci0KLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKKyAgICAgICAgcmV0
ID0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQzsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHU1Rf
U1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChz
cmMsICJQQVVTRUQtPlJFQURZIik7Ci0gICAgICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwotCi0g
ICAgICAgIGdzdF9vYmplY3RfcmVmKHNyYyk7Ci0gICAgICAgIHByaXYtPnNvdXJjZVZpZGVvLnN0
b3Auc2NoZWR1bGUoIltXZWJLaXRdIHdlYktpdE1lZGlhVmlkZW9TcmNTdG9wIiwgc3RkOjpmdW5j
dGlvbjx2b2lkKCk+KHN0ZDo6YmluZCh3ZWJLaXRNZWRpYVZpZGVvU3JjU3RvcCwgc3JjKSksIEdf
UFJJT1JJVFlfREVGQVVMVCwKLSAgICAgICAgICAgIFtzcmNdIHsgZ3N0X29iamVjdF91bnJlZihz
cmMpOyB9KTsKLQotICAgICAgICBnc3Rfb2JqZWN0X3JlZihzcmMpOwotICAgICAgICBwcml2LT5z
b3VyY2VBdWRpby5zdG9wLnNjaGVkdWxlKCJbV2ViS2l0XSB3ZWJLaXRNZWRpYUF1ZGlvU3JjU3Rv
cCIsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPihzdGQ6OmJpbmQod2ViS2l0TWVkaWFBdWRpb1NyY1N0
b3AsIHNyYykpLCBHX1BSSU9SSVRZX0RFRkFVTFQsCi0gICAgICAgICAgICBbc3JjXSB7IGdzdF9v
YmplY3RfdW5yZWYoc3JjKTsgfSk7Ci0KLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsK
KyAgICAgICAgd2ViS2l0TWVkaWFTcmNEb0FzeW5jRG9uZShzcmMpOworICAgICAgICBwcml2LT5u
b01vcmVQYWRzID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAg
IGJyZWFrOwpAQCAtNDE5LDcgKzIyNSw3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRNZWRpYVNy
Y1F1ZXJ5V2l0aFBhcmVudChHc3RQYWQqIHBhZCwgR3N0T2JqZWN0KiBwYXJlbnQsIEdzCiAgICAg
fQogICAgIGNhc2UgR1NUX1FVRVJZX1VSSTogewogICAgICAgICBHU1RfT0JKRUNUX0xPQ0soc3Jj
KTsKLSAgICAgICAgZ3N0X3F1ZXJ5X3NldF91cmkocXVlcnksIHNyYy0+cHJpdi0+dXJpKTsKKyAg
ICAgICAgZ3N0X3F1ZXJ5X3NldF91cmkocXVlcnksIHNyYy0+cHJpdi0+bG9jYXRpb24pOwogICAg
ICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwogICAgICAgICByZXN1bHQgPSBUUlVFOwogICAg
ICAgICBicmVhazsKQEAgLTQ1NCw3ICsyNjAsNyBAQCBzdGF0aWMgZ2NoYXIqIHdlYktpdE1lZGlh
U3JjR2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIpCiAgICAgZ2NoYXIqIHJldDsKIAogICAg
IEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwotICAgIHJldCA9IGdfc3RyZHVwKHNyYy0+cHJpdi0+dXJp
KTsKKyAgICByZXQgPSBnX3N0cmR1cChzcmMtPnByaXYtPmxvY2F0aW9uKTsKICAgICBHU1RfT0JK
RUNUX1VOTE9DSyhzcmMpOwogICAgIHJldHVybiByZXQ7CiB9CkBAIC00NjMsMTQgKzI2OSwxNSBA
QCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0TWVkaWFTcmNTZXRVcmkoR3N0VVJJSGFuZGxlciogaGFu
ZGxlciwgY29uc3QgZ2NoYXIqIHVyaSwgRwogewogICAgIFdlYktpdE1lZGlhU3JjKiBzcmMgPSBX
RUJLSVRfTUVESUFfU1JDKGhhbmRsZXIpOwogICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJp
diA9IHNyYy0+cHJpdjsKKwogICAgIGlmIChHU1RfU1RBVEUoc3JjKSA+PSBHU1RfU1RBVEVfUEFV
U0VEKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAiVVJJIGNhbiBvbmx5IGJlIHNl
dCBpbiBzdGF0ZXMgPCBQQVVTRUQiKTsKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIAog
ICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwotICAgIGdfZnJlZShwcml2LT51cmkpOwotICAgIHBy
aXYtPnVyaSA9IDA7CisgICAgZ19mcmVlKHByaXYtPmxvY2F0aW9uKTsKKyAgICBwcml2LT5sb2Nh
dGlvbiA9IDA7CiAgICAgaWYgKCF1cmkpIHsKICAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3Jj
KTsKICAgICAgICAgcmV0dXJuIFRSVUU7CkBAIC00NzgsMTEgKzI4NSwxMCBAQCBzdGF0aWMgZ2Jv
b2xlYW4gd2ViS2l0TWVkaWFTcmNTZXRVcmkoR3N0VVJJSGFuZGxlciogaGFuZGxlciwgY29uc3Qg
Z2NoYXIqIHVyaSwgRwogCiAgICAgV2ViQ29yZTo6VVJMIHVybChXZWJDb3JlOjpVUkwoKSwgdXJp
KTsKIAotICAgIHByaXYtPnVyaSA9IGdfc3RyZHVwKHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKKyAgICBwcml2LT5sb2NhdGlvbiA9IGdfc3RyZHVwKHVybC5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpKTsKICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwogICAgIHJldHVybiBUUlVFOwogfQot
CiBzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY1VyaUhhbmRsZXJJbml0KGdwb2ludGVyIGdJZmFj
ZSwgZ3BvaW50ZXIpCiB7CiAgICAgR3N0VVJJSGFuZGxlckludGVyZmFjZSogaWZhY2UgPSAoR3N0
VVJJSGFuZGxlckludGVyZmFjZSAqKSBnSWZhY2U7CkBAIC00OTMsMjk2ICsyOTksMTY0IEBAIHN0
YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjVXJpSGFuZGxlckluaXQoZ3BvaW50ZXIgZ0lmYWNlLCBn
cG9pbnRlcikKICAgICBpZmFjZS0+c2V0X3VyaSA9IHdlYktpdE1lZGlhU3JjU2V0VXJpOwogfQog
Ci0vLyBhcHBzcmMgY2FsbGJhY2tzCi1zdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVZpZGVvU3JjTmVl
ZERhdGFNYWluQ2IoV2ViS2l0TWVkaWFTcmMqIHNyYykKK25hbWVzcGFjZSBXZWJDb3JlIHsKK01l
ZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyOjpNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lcihXZWJL
aXRNZWRpYVNyYyogc3JjKQorICAgIDogbV9zcmMoYWRvcHRHUmVmKHN0YXRpY19jYXN0PFdlYktp
dE1lZGlhU3JjKj4oZ3N0X29iamVjdF9yZWYoc3JjKSkpKQogewotICAgIFdlYktpdE1lZGlhU3Jj
UHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKLQotICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwot
ICAgIHByaXYtPnNvdXJjZVZpZGVvLnBhdXNlZCA9IEZBTFNFOwotICAgIEdTVF9PQkpFQ1RfVU5M
T0NLKHNyYyk7CiB9CiAKLXN0YXRpYyB2b2lkIHdlYktpdE1lZGlhQXVkaW9TcmNOZWVkRGF0YU1h
aW5DYihXZWJLaXRNZWRpYVNyYyogc3JjKQorTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXI6On5N
ZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lcigpCiB7Ci0gICAgV2ViS2l0TWVkaWFTcmNQcml2YXRl
KiBwcml2ID0gc3JjLT5wcml2OwotCi0gICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7Ci0gICAgcHJp
di0+c291cmNlQXVkaW8ucGF1c2VkID0gRkFMU0U7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0soc3Jj
KTsKIH0KIAotc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFWaWRlb1NyY05lZWREYXRhQ2IoR3N0QXBw
U3JjKiwgZ3VpbnQgbGVuZ3RoLCBncG9pbnRlciB1c2VyRGF0YSkKK01lZGlhU291cmNlUHJpdmF0
ZTo6QWRkU3RhdHVzIE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyOjphZGRTb3VyY2VCdWZmZXIo
UGFzc1JlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlPiBzb3VyY2VCdWZmZXJQcml2YXRlLCBjb25z
dCBDb250ZW50VHlwZSYpCiB7Ci0gICAgV2ViS2l0TWVkaWFTcmMqIHNyYyA9IFdFQktJVF9NRURJ
QV9TUkModXNlckRhdGEpOwotICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+
cHJpdjsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiTmVlZCBtb3JlIGRhdGE6ICV1Iiwg
bGVuZ3RoKTsKKyAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBtX3NyYy0+cHJpdjsK
IAotICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwotICAgIGlmIChwcml2LT5zb3VyY2VWaWRlby5u
ZWVkRGF0YS5pc1NjaGVkdWxlZCgpIHx8ICFwcml2LT5zb3VyY2VWaWRlby5wYXVzZWQpIHsKLSAg
ICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChw
cml2LT5ub01vcmVQYWRzKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QobV9zcmMuZ2V0KCks
ICJBZGRpbmcgbmV3IHNvdXJjZSBidWZmZXJzIGFmdGVyIGZpcnN0IGRhdGEgbm90IHN1cHBvcnRl
ZCB5ZXQiKTsKKyAgICAgICAgcmV0dXJuIE1lZGlhU291cmNlUHJpdmF0ZTo6Tm90U3VwcG9ydGVk
OwogICAgIH0KIAotICAgIGdzdF9vYmplY3RfcmVmKHNyYyk7Ci0gICAgcHJpdi0+c291cmNlVmlk
ZW8ubmVlZERhdGEuc2NoZWR1bGUoIltXZWJLaXRdIHdlYktpdE1lZGlhVmlkZW9TcmNOZWVkRGF0
YU1haW5DYiIsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPihzdGQ6OmJpbmQod2ViS2l0TWVkaWFWaWRl
b1NyY05lZWREYXRhTWFpbkNiLCBzcmMpKSwgR19QUklPUklUWV9ERUZBVUxULAotICAgICAgICBb
c3JjXSB7IGdzdF9vYmplY3RfdW5yZWYoc3JjKTsgfSk7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0so
c3JjKTsKLX0KKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fc3JjLmdldCgpLCAiU3RhdGUgJWQiLCBz
dGF0aWNfY2FzdDxpbnQ+KEdTVF9TVEFURShtX3NyYy5nZXQoKSkpKTsKIAotc3RhdGljIHZvaWQg
d2ViS2l0TWVkaWFBdWRpb1NyY05lZWREYXRhQ2IoR3N0QXBwU3JjKiwgZ3VpbnQgbGVuZ3RoLCBn
cG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBXZWJLaXRNZWRpYVNyYyogc3JjID0gV0VCS0lUX01F
RElBX1NSQyh1c2VyRGF0YSk7Ci0gICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gc3Jj
LT5wcml2OworICAgIEdTVF9PQkpFQ1RfTE9DSyhtX3NyYy5nZXQoKSk7CiAKLSAgICBHU1RfREVC
VUdfT0JKRUNUKHNyYywgIk5lZWQgbW9yZSBkYXRhOiAldSIsIGxlbmd0aCk7CisgICAgU291cmNl
KiBzb3VyY2UgPSBnX25ldzAoU291cmNlLCAxKTsKKyAgICBndWludCBudW1iZXJPZlNvdXJjZXMg
PSBnX2xpc3RfbGVuZ3RoKHByaXYtPnNvdXJjZXMpOworICAgIEdVbmlxdWVQdHI8Z2NoYXI+IHNy
Y05hbWUoZ19zdHJkdXBfcHJpbnRmKCJzcmMldSIsIG51bWJlck9mU291cmNlcykpOwogCi0gICAg
R1NUX09CSkVDVF9MT0NLKHNyYyk7Ci0gICAgaWYgKHByaXYtPnNvdXJjZUF1ZGlvLm5lZWREYXRh
LmlzU2NoZWR1bGVkKCkgfHwgIXByaXYtPnNvdXJjZUF1ZGlvLnBhdXNlZCkgewotICAgICAgICBH
U1RfT0JKRUNUX1VOTE9DSyhzcmMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIHNvdXJj
ZS0+c3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhcHBzcmMiLCBzcmNOYW1lLmdldCgp
KTsKKyAgICBzb3VyY2UtPnNvdXJjZUJ1ZmZlciA9IHNvdXJjZUJ1ZmZlclByaXZhdGUuZ2V0KCk7
CiAKLSAgICBnc3Rfb2JqZWN0X3JlZihzcmMpOwotICAgIHByaXYtPnNvdXJjZUF1ZGlvLm5lZWRE
YXRhLnNjaGVkdWxlKCJbV2ViS2l0XSB3ZWJLaXRNZWRpYUF1ZGlvU3JjTmVlZERhdGFNYWluQ2Ii
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4oc3RkOjpiaW5kKHdlYktpdE1lZGlhQXVkaW9TcmNOZWVk
RGF0YU1haW5DYiwgc3JjKSksIEdfUFJJT1JJVFlfREVGQVVMVCwKLSAgICAgICAgW3NyY10geyBn
c3Rfb2JqZWN0X3VucmVmKHNyYyk7IH0pOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7Ci19
CisgICAgR1VuaXF1ZVB0cjxnY2hhcj4gcGFkTmFtZShnX3N0cmR1cF9wcmludGYoInNyY18ldSIs
IG51bWJlck9mU291cmNlcykpOworICAgIHByaXYtPnNvdXJjZXMgPSBnX2xpc3RfcHJlcGVuZChw
cml2LT5zb3VyY2VzLCBzb3VyY2UpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG1fc3JjLmdldCgp
KTsKIAotc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFWaWRlb1NyY0Vub3VnaERhdGFNYWluQ2IoV2Vi
S2l0TWVkaWFTcmMqIHNyYykKLXsKLSAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBz
cmMtPnByaXY7CisgICAgcHJpdi0+aGF2ZUFwcHNyYyA9IHNvdXJjZS0+c3JjOwogCi0gICAgR1NU
X09CSkVDVF9MT0NLKHNyYyk7Ci0gICAgcHJpdi0+c291cmNlVmlkZW8ucGF1c2VkID0gVFJVRTsK
LSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwotfQorICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4o
bV9zcmMuZ2V0KCkpLCBzb3VyY2UtPnNyYyk7CisgICAgR1JlZlB0cjxHc3RQYWQ+IHBhZCA9IGFk
b3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChzb3VyY2UtPnNyYywgInNyYyIpKTsK
KyAgICBHUmVmUHRyPEdzdFBhZD4gZ2hvc3RQYWQgPSBhZG9wdEdSZWYoZ3N0X2dob3N0X3BhZF9u
ZXdfZnJvbV90ZW1wbGF0ZShwYWROYW1lLmdldCgpLCBwYWQuZ2V0KCksCisgICAgICAgIGdzdF9z
dGF0aWNfcGFkX3RlbXBsYXRlX2dldCgmc3JjVGVtcGxhdGUpKSk7CisgICAgZ3N0X3BhZF9zZXRf
cXVlcnlfZnVuY3Rpb24oZ2hvc3RQYWQuZ2V0KCksIHdlYktpdE1lZGlhU3JjUXVlcnlXaXRoUGFy
ZW50KTsKKyAgICBnc3RfcGFkX3NldF9hY3RpdmUoZ2hvc3RQYWQuZ2V0KCksIFRSVUUpOworICAg
IGdzdF9lbGVtZW50X2FkZF9wYWQoR1NUX0VMRU1FTlQobV9zcmMuZ2V0KCkpLCBnaG9zdFBhZC5s
ZWFrUmVmKCkpOwogCi1zdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYUF1ZGlvU3JjRW5vdWdoRGF0YU1h
aW5DYihXZWJLaXRNZWRpYVNyYyogc3JjKQotewotICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSog
cHJpdiA9IHNyYy0+cHJpdjsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50
KHNvdXJjZS0+c3JjKTsKIAotICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwotICAgIHByaXYtPnNv
dXJjZUF1ZGlvLnBhdXNlZCA9IFRSVUU7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKKyAg
ICByZXR1cm4gTWVkaWFTb3VyY2VQcml2YXRlOjpPazsKIH0KIAotc3RhdGljIHZvaWQgd2ViS2l0
TWVkaWFWaWRlb1NyY0Vub3VnaERhdGFDYihHc3RBcHBTcmMqLCBncG9pbnRlciB1c2VyRGF0YSkK
K3ZvaWQgTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXI6OmR1cmF0aW9uQ2hhbmdlZChjb25zdCBN
ZWRpYVRpbWUmIGR1cmF0aW9uKQogewotICAgIFdlYktpdE1lZGlhU3JjKiBzcmMgPSBXRUJLSVRf
TUVESUFfU1JDKHVzZXJEYXRhKTsKLSAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBz
cmMtPnByaXY7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIkhhdmUgZW5vdWdoIGRhdGEi
KTsKLQotICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwotICAgIGlmIChwcml2LT5zb3VyY2VWaWRl
by5lbm91Z2hEYXRhLmlzU2NoZWR1bGVkKCkgfHwgcHJpdi0+c291cmNlVmlkZW8ucGF1c2VkKSB7
Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gbV9zcmMtPnByaXY7CisgICAgR3N0
Q2xvY2tUaW1lIGdzdER1cmF0aW9uID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlKGR1cmF0aW9uLnRp
bWVWYWx1ZSgpLCBHU1RfU0VDT05ELCBkdXJhdGlvbi50aW1lU2NhbGUoKSk7CiAKLSAgICBnc3Rf
b2JqZWN0X3JlZihzcmMpOwotICAgIHByaXYtPnNvdXJjZVZpZGVvLmVub3VnaERhdGEuc2NoZWR1
bGUoIltXZWJLaXRdIHdlYktpdE1lZGlhVmlkZW9TcmNFbm91Z2hEYXRhTWFpbkNiIiwgc3RkOjpm
dW5jdGlvbjx2b2lkKCk+KHN0ZDo6YmluZCh3ZWJLaXRNZWRpYVZpZGVvU3JjRW5vdWdoRGF0YU1h
aW5DYiwgc3JjKSksIEdfUFJJT1JJVFlfREVGQVVMVCwKLSAgICAgICAgW3NyY10geyBnc3Rfb2Jq
ZWN0X3VucmVmKHNyYyk7IH0pOworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9zcmMuZ2V0KCksICJS
ZWNlaXZlZCBkdXJhdGlvbjogJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTKGdzdER1
cmF0aW9uKSk7CiAKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOworICAgIEdTVF9PQkpFQ1Rf
TE9DSyhtX3NyYy5nZXQoKSk7CisgICAgcHJpdi0+ZHVyYXRpb24gPSBnc3REdXJhdGlvbjsKKyAg
ICBHU1RfT0JKRUNUX1VOTE9DSyhtX3NyYy5nZXQoKSk7CisgICAgZ3N0X2VsZW1lbnRfcG9zdF9t
ZXNzYWdlKEdTVF9FTEVNRU5UKG1fc3JjLmdldCgpKSwgZ3N0X21lc3NhZ2VfbmV3X2R1cmF0aW9u
X2NoYW5nZWQoR1NUX09CSkVDVChtX3NyYy5nZXQoKSkpKTsKIH0KIAotc3RhdGljIHZvaWQgd2Vi
S2l0TWVkaWFBdWRpb1NyY0Vub3VnaERhdGFDYihHc3RBcHBTcmMqLCBncG9pbnRlciB1c2VyRGF0
YSkKK1NvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkFwcGVuZFJlc3VsdCBNZWRpYVNvdXJjZUNs
aWVudEdTdHJlYW1lcjo6YXBwZW5kKFBhc3NSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZT4gc291
cmNlQnVmZmVyUHJpdmF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVu
Z3RoKQogewotICAgIFdlYktpdE1lZGlhU3JjKiBzcmMgPSBXRUJLSVRfTUVESUFfU1JDKHVzZXJE
YXRhKTsKLSAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7Ci0KLSAg
ICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIkhhdmUgZW5vdWdoIGRhdGEiKTsKKyAgICBXZWJLaXRN
ZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBtX3NyYy0+cHJpdjsKKyAgICBHc3RGbG93UmV0dXJuIHJl
dCA9IEdTVF9GTE9XX09LOworICAgIEdzdEJ1ZmZlciogYnVmZmVyOworICAgIFNvdXJjZSogc291
cmNlID0gMDsKIAotICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwotICAgIGlmIChwcml2LT5zb3Vy
Y2VBdWRpby5lbm91Z2hEYXRhLmlzU2NoZWR1bGVkKCkgfHwgcHJpdi0+c291cmNlQXVkaW8ucGF1
c2VkKSB7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7Ci0gICAgICAgIHJldHVybjsK
KyAgICBpZiAoIXByaXYtPm5vTW9yZVBhZHMpIHsKKyAgICAgICAgcHJpdi0+bm9Nb3JlUGFkcyA9
IHRydWU7CisgICAgICAgIGdzdF9lbGVtZW50X25vX21vcmVfcGFkcyhHU1RfRUxFTUVOVChtX3Ny
Yy5nZXQoKSkpOworICAgICAgICB3ZWJLaXRNZWRpYVNyY0RvQXN5bmNEb25lKG1fc3JjLmdldCgp
KTsKICAgICB9CiAKLSAgICBnc3Rfb2JqZWN0X3JlZihzcmMpOwotICAgIHByaXYtPnNvdXJjZUF1
ZGlvLmVub3VnaERhdGEuc2NoZWR1bGUoIltXZWJLaXRdIHdlYktpdE1lZGlhQXVkaW9TcmNFbm91
Z2hEYXRhTWFpbkNiIiwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+KHN0ZDo6YmluZCh3ZWJLaXRNZWRp
YUF1ZGlvU3JjRW5vdWdoRGF0YU1haW5DYiwgc3JjKSksIEdfUFJJT1JJVFlfREVGQVVMVCwKLSAg
ICAgICAgW3NyY10geyBnc3Rfb2JqZWN0X3VucmVmKHNyYyk7IH0pOwotCi0gICAgR1NUX09CSkVD
VF9VTkxPQ0soc3JjKTsKLX0KLQotc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFWaWRlb1NyY1NlZWtN
YWluQ2IoV2ViS2l0TWVkaWFTcmMqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLQot
c3RhdGljIHZvaWQgd2ViS2l0TWVkaWFBdWRpb1NyY1NlZWtNYWluQ2IoV2ViS2l0TWVkaWFTcmMq
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRN
ZWRpYVZpZGVvU3JjU2Vla0RhdGFDYihHc3RBcHBTcmMqLCBndWludDY0IG9mZnNldCwgZ3BvaW50
ZXIgdXNlckRhdGEpCi17Ci0gICAgV2ViS2l0TWVkaWFTcmMqIHNyYyA9IFdFQktJVF9NRURJQV9T
UkModXNlckRhdGEpOwotICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJp
djsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2Vla2luZyB0byBvZmZzZXQ6ICUiIEdf
R1VJTlQ2NF9GT1JNQVQsIG9mZnNldCk7Ci0gICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7Ci0gICAg
aWYgKG9mZnNldCA9PSBwcml2LT5zb3VyY2VWaWRlby5vZmZzZXQgJiYgcHJpdi0+c291cmNlVmlk
ZW8ucmVxdWVzdGVkT2Zmc2V0ID09IHByaXYtPnNvdXJjZVZpZGVvLm9mZnNldCkgewotICAgICAg
ICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwotICAgICAgICByZXR1cm4gVFJVRTsKKyAgICBmb3Ig
KEdMaXN0KiBpdGVyID0gcHJpdi0+c291cmNlczsgaXRlcjsgaXRlciA9IGl0ZXItPm5leHQpIHsK
KyAgICAgICAgU291cmNlKiB0bXAgPSBzdGF0aWNfY2FzdDxTb3VyY2UqPihpdGVyLT5kYXRhKTsK
KyAgICAgICAgaWYgKHRtcC0+c291cmNlQnVmZmVyID09IHNvdXJjZUJ1ZmZlclByaXZhdGUuZ2V0
KCkpIHsKKyAgICAgICAgICAgIHNvdXJjZSA9IHRtcDsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKCFwcml2LT5zZWVrYWJsZSkgewotICAgICAgICBHU1Rf
T0JKRUNUX1VOTE9DSyhzcmMpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotICAgIGlm
IChvZmZzZXQgPiBwcml2LT5zb3VyY2VWaWRlby5zaXplKSB7Ci0gICAgICAgIEdTVF9PQkpFQ1Rf
VU5MT0NLKHNyYyk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9CisgICAgaWYgKCFzb3Vy
Y2UgfHwgIXNvdXJjZS0+c3JjKQorICAgICAgICByZXR1cm4gU291cmNlQnVmZmVyUHJpdmF0ZUNs
aWVudDo6UmVhZFN0cmVhbUZhaWxlZDsKIAotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiRG9p
bmcgcmFuZ2UtcmVxdWVzdCBzZWVrIik7Ci0gICAgcHJpdi0+c291cmNlVmlkZW8ucmVxdWVzdGVk
T2Zmc2V0ID0gb2Zmc2V0OworICAgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyhs
ZW5ndGgpOworICAgIGdzdF9idWZmZXJfZmlsbChidWZmZXIsIDAsIGRhdGEsIGxlbmd0aCk7CiAK
LSAgICBnc3Rfb2JqZWN0X3JlZihzcmMpOwotICAgIHByaXYtPnNvdXJjZVZpZGVvLnNlZWsuc2No
ZWR1bGUoIltXZWJLaXRdIHdlYktpdE1lZGlhVmlkZW9TcmNTZWVrTWFpbkNiIiwgc3RkOjpmdW5j
dGlvbjx2b2lkKCk+KHN0ZDo6YmluZCh3ZWJLaXRNZWRpYVZpZGVvU3JjU2Vla01haW5DYiwgc3Jj
KSksIEdfUFJJT1JJVFlfREVGQVVMVCwKLSAgICAgICAgW3NyY10geyBnc3Rfb2JqZWN0X3VucmVm
KHNyYyk7IH0pOworICAgIHJldCA9IGdzdF9hcHBfc3JjX3B1c2hfYnVmZmVyKEdTVF9BUFBfU1JD
KHNvdXJjZS0+c3JjKSwgYnVmZmVyKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fc3JjLmdldCgp
LCAicHVzaCBidWZmZXIgJWRcbiIsIHN0YXRpY19jYXN0PGludD4ocmV0KSk7CiAKLSAgICBHU1Rf
T0JKRUNUX1VOTE9DSyhzcmMpOworICAgIGlmIChyZXQgPT0gR1NUX0ZMT1dfT0spCisgICAgICAg
IHJldHVybiBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpBcHBlbmRTdWNjZWVkZWQ7CiAKLSAg
ICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6UmVh
ZFN0cmVhbUZhaWxlZDsKIH0KIAotc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQXVkaW9TcmNT
ZWVrRGF0YUNiKEdzdEFwcFNyYyosIGd1aW50NjQgb2Zmc2V0LCBncG9pbnRlciB1c2VyRGF0YSkK
K3ZvaWQgTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXI6Om1hcmtFbmRPZlN0cmVhbShNZWRpYVNv
dXJjZVByaXZhdGU6OkVuZE9mU3RyZWFtU3RhdHVzKQogewotICAgIFdlYktpdE1lZGlhU3JjKiBz
cmMgPSBXRUJLSVRfTUVESUFfU1JDKHVzZXJEYXRhKTsKLSAgICBXZWJLaXRNZWRpYVNyY1ByaXZh
dGUqIHByaXYgPSBzcmMtPnByaXY7CisgICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0g
bV9zcmMtPnByaXY7CiAKLSAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlNlZWtpbmcgdG8gb2Zm
c2V0OiAlIiBHX0dVSU5UNjRfRk9STUFULCBvZmZzZXQpOwotICAgIEdTVF9PQkpFQ1RfTE9DSyhz
cmMpOwotICAgIGlmIChvZmZzZXQgPT0gcHJpdi0+c291cmNlQXVkaW8ub2Zmc2V0ICYmIHByaXYt
PnNvdXJjZUF1ZGlvLnJlcXVlc3RlZE9mZnNldCA9PSBwcml2LT5zb3VyY2VBdWRpby5vZmZzZXQp
IHsKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKLSAgICAgICAgcmV0dXJuIFRSVUU7
Ci0gICAgfQorICAgIEdTVF9ERUJVR19PQkpFQ1QobV9zcmMuZ2V0KCksICJIYXZlIEVPUyIpOwog
Ci0gICAgaWYgKCFwcml2LT5zZWVrYWJsZSkgewotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhz
cmMpOwotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgaWYgKCFwcml2LT5ub01vcmVQYWRzKSB7
CisgICAgICAgIHByaXYtPm5vTW9yZVBhZHMgPSB0cnVlOworICAgICAgICBnc3RfZWxlbWVudF9u
b19tb3JlX3BhZHMoR1NUX0VMRU1FTlQobV9zcmMuZ2V0KCkpKTsKKyAgICAgICAgd2ViS2l0TWVk
aWFTcmNEb0FzeW5jRG9uZShtX3NyYy5nZXQoKSk7CiAgICAgfQotICAgIGlmIChvZmZzZXQgPiBw
cml2LT5zb3VyY2VBdWRpby5zaXplKSB7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7
Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUKHNy
YywgIkRvaW5nIHJhbmdlLXJlcXVlc3Qgc2VlayIpOwotICAgIHByaXYtPnNvdXJjZUF1ZGlvLnJl
cXVlc3RlZE9mZnNldCA9IG9mZnNldDsKLQotICAgIGdzdF9vYmplY3RfcmVmKHNyYyk7Ci0gICAg
cHJpdi0+c291cmNlQXVkaW8uc2Vlay5zY2hlZHVsZSgiW1dlYktpdF0gd2ViS2l0TWVkaWFBdWRp
b1NyY1NlZWtNYWluQ2IiLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4oc3RkOjpiaW5kKHdlYktpdE1l
ZGlhQXVkaW9TcmNTZWVrTWFpbkNiLCBzcmMpKSwgR19QUklPUklUWV9ERUZBVUxULAotICAgICAg
ICBbc3JjXSB7IGdzdF9vYmplY3RfdW5yZWYoc3JjKTsgfSk7Ci0KLSAgICBHU1RfT0JKRUNUX1VO
TE9DSyhzcmMpOwogCi0gICAgcmV0dXJuIFRSVUU7CisgICAgZm9yIChHTGlzdCogaXRlciA9IHBy
aXYtPnNvdXJjZXM7IGl0ZXI7IGl0ZXIgPSBpdGVyLT5uZXh0KSB7CisgICAgICAgIFNvdXJjZSog
c291cmNlID0gc3RhdGljX2Nhc3Q8U291cmNlKj4oaXRlci0+ZGF0YSk7CisgICAgICAgIGlmIChz
b3VyY2UtPnNyYykKKyAgICAgICAgICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0oR1NUX0FQ
UF9TUkMoc291cmNlLT5zcmMpKTsKKyAgICB9CiB9CiAKLXZvaWQgd2ViS2l0TWVkaWFTcmNTZXRN
ZWRpYVBsYXllcihXZWJLaXRNZWRpYVNyYyogc3JjLCBXZWJDb3JlOjpNZWRpYVBsYXllciogcGxh
eWVyKQordm9pZCBNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lcjo6cmVtb3ZlZEZyb21NZWRpYVNv
dXJjZShQYXNzUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGU+IHNvdXJjZUJ1ZmZlclByaXZhdGUp
CiB7Ci0gICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwotICAgIHBy
aXYtPnBsYXllciA9IHBsYXllcjsKLX0KKyAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYg
PSBtX3NyYy0+cHJpdjsKKyAgICBTb3VyY2UqIHNvdXJjZSA9IDA7CiAKLXZvaWQgd2ViS2l0TWVk
aWFTcmNTZXRQbGF5QmluKFdlYktpdE1lZGlhU3JjKiBzcmMsIEdzdEVsZW1lbnQqIHBsYXlCaW4p
Ci17Ci0gICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwotICAgIHBy
aXYtPnBsYXliaW4gPSBwbGF5QmluOwotfQorICAgIGZvciAoR0xpc3QqIGl0ZXIgPSBwcml2LT5z
b3VyY2VzOyBpdGVyOyBpdGVyID0gaXRlci0+bmV4dCkgeworICAgICAgICBTb3VyY2UqIHRtcCA9
IHN0YXRpY19jYXN0PFNvdXJjZSo+KGl0ZXItPmRhdGEpOworICAgICAgICBpZiAodG1wLT5zb3Vy
Y2VCdWZmZXIgPT0gc291cmNlQnVmZmVyUHJpdmF0ZS5nZXQoKSkgeworICAgICAgICAgICAgc291
cmNlID0gdG1wOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CiAKLU1lZGlh
U291cmNlQ2xpZW50R3N0cmVhbWVyOjpNZWRpYVNvdXJjZUNsaWVudEdzdHJlYW1lcihXZWJLaXRN
ZWRpYVNyYyogc3JjKQotICAgIDogbV9zcmMoc3RhdGljX2Nhc3Q8V2ViS2l0TWVkaWFTcmMqPihn
c3Rfb2JqZWN0X3JlZihzcmMpKSkKLXsKLX0KKyAgICBBU1NFUlQoc291cmNlICYmIHNvdXJjZS0+
c3JjKTsKIAotTWVkaWFTb3VyY2VDbGllbnRHc3RyZWFtZXI6On5NZWRpYVNvdXJjZUNsaWVudEdz
dHJlYW1lcigpCi17Ci0gICAgZ3N0X29iamVjdF91bnJlZihtX3NyYyk7CisgICAgZ3N0X2FwcF9z
cmNfZW5kX29mX3N0cmVhbShHU1RfQVBQX1NSQyhzb3VyY2UtPnNyYykpOwogfQogCi12b2lkIE1l
ZGlhU291cmNlQ2xpZW50R3N0cmVhbWVyOjpkaWRSZWNlaXZlRHVyYXRpb24oZG91YmxlIGR1cmF0
aW9uKQotewotICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IG1fc3JjLT5wcml2Owot
ICAgIEdTVF9ERUJVR19PQkpFQ1QobV9zcmMsICJSZWNlaXZlZCBkdXJhdGlvbjogJWxmIiwgZHVy
YXRpb24pOwotCi0gICAgR1NUX09CSkVDVF9MT0NLKG1fc3JjKTsKLSAgICBwcml2LT5kdXJhdGlv
biA9IGR1cmF0aW9uID49IDAuMCA/IHN0YXRpY19jYXN0PGdpbnQ2ND4oZHVyYXRpb24qR1NUX1NF
Q09ORCkgOiAwOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG1fc3JjKTsKLX0KK307CiAKLXZvaWQg
TWVkaWFTb3VyY2VDbGllbnRHc3RyZWFtZXI6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRh
dGEsIGludCBsZW5ndGgsIFN0cmluZyB0eXBlKQorbmFtZXNwYWNlIFdURiB7Cit0ZW1wbGF0ZSA8
PiBHUmVmUHRyPFdlYktpdE1lZGlhU3JjPiBhZG9wdEdSZWYoV2ViS2l0TWVkaWFTcmMqIHB0cikK
IHsKLSAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBtX3NyYy0+cHJpdjsKLSAgICBH
c3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcjsK
LQotICAgIGlmICh0eXBlLnN0YXJ0c1dpdGgoInZpZGVvIikpIHsKLSAgICAgICAgaWYgKHByaXYt
Pm5vTW9yZVBhZCA9PSBGQUxTRSAmJiBwcml2LT5zb3VyY2VWaWRlby5wYWRBZGRlZCA9PSBUUlVF
KSB7Ci0gICAgICAgICAgICBnc3RfZWxlbWVudF9ub19tb3JlX3BhZHMoR1NUX0VMRU1FTlQobV9z
cmMpKTsKLSAgICAgICAgICAgIHByaXYtPm5vTW9yZVBhZCA9IFRSVUU7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKHByaXYtPm5vTW9yZVBhZCA9PSBGQUxTRSAmJiBwcml2LT5zb3VyY2VWaWRlby5w
YWRBZGRlZCA9PSBGQUxTRSkgewotICAgICAgICAgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChHU1Rf
RUxFTUVOVChtX3NyYyksIHByaXYtPnNvdXJjZVZpZGVvLnNyY3BhZCk7Ci0gICAgICAgICAgICBw
cml2LT5zb3VyY2VWaWRlby5wYWRBZGRlZCA9IFRSVUU7Ci0gICAgICAgIH0KLSAgICAgICAgR1NU
X09CSkVDVF9MT0NLKG1fc3JjKTsKLSAgICAgICAgYnVmZmVyID0gV2ViQ29yZTo6Y3JlYXRlR3N0
QnVmZmVyRm9yRGF0YShkYXRhLCBsZW5ndGgpOwotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyht
X3NyYyk7Ci0KLSAgICAgICAgcmV0ID0gZ3N0X2FwcF9zcmNfcHVzaF9idWZmZXIoR1NUX0FQUF9T
UkMocHJpdi0+c291cmNlVmlkZW8uYXBwc3JjKSwgYnVmZmVyKTsKLSAgICB9IGVsc2UgaWYgKHR5
cGUuc3RhcnRzV2l0aCgiYXVkaW8iKSkgewotICAgICAgICBpZiAocHJpdi0+bm9Nb3JlUGFkID09
IEZBTFNFICYmIHByaXYtPnNvdXJjZUF1ZGlvLnBhZEFkZGVkID09IFRSVUUpIHsKLSAgICAgICAg
ICAgIGdzdF9lbGVtZW50X25vX21vcmVfcGFkcyhHU1RfRUxFTUVOVChtX3NyYykpOwotICAgICAg
ICAgICAgcHJpdi0+bm9Nb3JlUGFkID0gVFJVRTsKLSAgICAgICAgfQotICAgICAgICBpZiAocHJp
di0+bm9Nb3JlUGFkID09IEZBTFNFICYmIHByaXYtPnNvdXJjZUF1ZGlvLnBhZEFkZGVkID09IEZB
TFNFKSB7Ci0gICAgICAgICAgICBnc3RfZWxlbWVudF9hZGRfcGFkKEdTVF9FTEVNRU5UKG1fc3Jj
KSwgcHJpdi0+c291cmNlQXVkaW8uc3JjcGFkKTsKLSAgICAgICAgICAgIHByaXYtPnNvdXJjZUF1
ZGlvLnBhZEFkZGVkID0gVFJVRTsKLSAgICAgICAgfQotICAgICAgICBHU1RfT0JKRUNUX0xPQ0so
bV9zcmMpOwotICAgICAgICBidWZmZXIgPSBXZWJDb3JlOjpjcmVhdGVHc3RCdWZmZXJGb3JEYXRh
KGRhdGEsIGxlbmd0aCk7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG1fc3JjKTsKLQotICAg
ICAgICByZXQgPSBnc3RfYXBwX3NyY19wdXNoX2J1ZmZlcihHU1RfQVBQX1NSQyhwcml2LT5zb3Vy
Y2VBdWRpby5hcHBzcmMpLCBidWZmZXIpOwotICAgIH0KLQotICAgIGlmIChyZXQgIT0gR1NUX0ZM
T1dfT0sgJiYgcmV0ICE9IEdTVF9GTE9XX0VPUykKLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1Io
bV9zcmMsIENPUkUsIEZBSUxFRCwgKDApLCAoMCkpOworICAgIEFTU0VSVCghcHRyIHx8ICFnX29i
amVjdF9pc19mbG9hdGluZyhHX09CSkVDVChwdHIpKSk7CisgICAgcmV0dXJuIEdSZWZQdHI8V2Vi
S2l0TWVkaWFTcmM+KHB0ciwgR1JlZlB0ckFkb3B0KTsKIH0KIAotdm9pZCBNZWRpYVNvdXJjZUNs
aWVudEdzdHJlYW1lcjo6ZGlkRmluaXNoTG9hZGluZyhkb3VibGUpCit0ZW1wbGF0ZSA8PiBXZWJL
aXRNZWRpYVNyYyogcmVmR1B0cjxXZWJLaXRNZWRpYVNyYz4oV2ViS2l0TWVkaWFTcmMqIHB0cikK
IHsKLSAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBtX3NyYy0+cHJpdjsKKyAgICBp
ZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3JlZl9zaW5rKEdTVF9PQkpFQ1QocHRyKSk7CiAK
LSAgICBHU1RfREVCVUdfT0JKRUNUKG1fc3JjLCAiSGF2ZSBFT1MiKTsKLQotICAgIEdTVF9PQkpF
Q1RfTE9DSyhtX3NyYyk7Ci0gICAgaWYgKCFwcml2LT5zb3VyY2VWaWRlby5zZWVrLmlzQWN0aXZl
KCkpIHsKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sobV9zcmMpOwotICAgICAgICBnc3RfYXBw
X3NyY19lbmRfb2Zfc3RyZWFtKEdTVF9BUFBfU1JDKHByaXYtPnNvdXJjZVZpZGVvLmFwcHNyYykp
OwotICAgIH0gZWxzZQotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhtX3NyYyk7Ci0KLSAgICBH
U1RfT0JKRUNUX0xPQ0sobV9zcmMpOwotICAgIGlmICghcHJpdi0+c291cmNlQXVkaW8uc2Vlay5p
c0FjdGl2ZSgpKSB7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG1fc3JjKTsKLSAgICAgICAg
Z3N0X2FwcF9zcmNfZW5kX29mX3N0cmVhbShHU1RfQVBQX1NSQyhwcml2LT5zb3VyY2VBdWRpby5h
cHBzcmMpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sobV9zcmMpOwor
ICAgIHJldHVybiBwdHI7CiB9CiAKLXZvaWQgTWVkaWFTb3VyY2VDbGllbnRHc3RyZWFtZXI6OmRp
ZEZhaWwoKQordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8V2ViS2l0TWVkaWFTcmM+KFdlYktp
dE1lZGlhU3JjKiBwdHIpCiB7Ci0gICAgZ3N0X2FwcF9zcmNfZW5kX29mX3N0cmVhbShHU1RfQVBQ
X1NSQyhtX3NyYy0+cHJpdi0+c291cmNlVmlkZW8uYXBwc3JjKSk7Ci0gICAgZ3N0X2FwcF9zcmNf
ZW5kX29mX3N0cmVhbShHU1RfQVBQX1NSQyhtX3NyYy0+cHJpdi0+c291cmNlQXVkaW8uYXBwc3Jj
KSk7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihwdHIpOwogfQorfTsK
IAogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdE1lZGlh
U291cmNlR1N0cmVhbWVyLmgKaW5kZXggNzg4OTJjM2UzMzczZmRmYmMwYzU4YjBhMWJmYzU2OGJl
MWI5NzE1MC4uMjM0YTA4Y2ZlM2U4MDI2NDU3ZDgzODFiYTA2MTRkMzc2MTRmZDAxOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdE1l
ZGlhU291cmNlR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmgKQEAgLTIsNiArMiw3IEBA
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlh
bi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgogICogIENvcHlyaWdodCAoQykgMjAxMyBDb2xsYWJv
cmEgTHRkLgogICogIENvcHlyaWdodCAoQykgMjAxMyBPcmFuZ2UKKyAqICBDb3B5cmlnaHQgKEMp
IDIwMTQgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KICAqCiAg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKQEAgLTIyLDcgKzIzLDEyIEBACiAjZGVmaW5lIFdlYktpdE1lZGlhU291
cmNlR1N0cmVhbWVyX2gKICNpZiBFTkFCTEUoVklERU8pICYmIEVOQUJMRShNRURJQV9TT1VSQ0Up
ICYmIFVTRShHU1RSRUFNRVIpCiAKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCiAjaW5j
bHVkZSAiTWVkaWFQbGF5ZXIuaCIKKyNpbmNsdWRlICJNZWRpYVNvdXJjZS5oIgorI2luY2x1ZGUg
IlNvdXJjZUJ1ZmZlclByaXZhdGUuaCIKKyNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlQ2xp
ZW50LmgiCisKICNpbmNsdWRlIDxnc3QvZ3N0Lmg+CiAKIEdfQkVHSU5fREVDTFMKQEAgLTQ4LDI1
ICs1NCwzOCBAQCBzdHJ1Y3QgX1dlYktpdE1lZGlhU3JjQ2xhc3MgewogfTsKIAogR1R5cGUgd2Vi
a2l0X21lZGlhX3NyY19nZXRfdHlwZSh2b2lkKTsKLXZvaWQgd2ViS2l0TWVkaWFTcmNTZXRNZWRp
YVBsYXllcihXZWJLaXRNZWRpYVNyYyosIFdlYkNvcmU6Ok1lZGlhUGxheWVyKik7Ci12b2lkIHdl
YktpdE1lZGlhU3JjU2V0UGxheUJpbihXZWJLaXRNZWRpYVNyYyosIEdzdEVsZW1lbnQqKTsKIAog
R19FTkRfREVDTFMKIAotY2xhc3MgTWVkaWFTb3VyY2VDbGllbnRHc3RyZWFtZXI6IHB1YmxpYyBS
ZWZDb3VudGVkPE1lZGlhU291cmNlQ2xpZW50R3N0cmVhbWVyPiB7CituYW1lc3BhY2UgV1RGIHsK
K3RlbXBsYXRlPD4gR1JlZlB0cjxXZWJLaXRNZWRpYVNyYz4gYWRvcHRHUmVmKFdlYktpdE1lZGlh
U3JjKiBwdHIpOwordGVtcGxhdGU8PiBXZWJLaXRNZWRpYVNyYyogcmVmR1B0cjxXZWJLaXRNZWRp
YVNyYz4oV2ViS2l0TWVkaWFTcmMqIHB0cik7Cit0ZW1wbGF0ZTw+IHZvaWQgZGVyZWZHUHRyPFdl
YktpdE1lZGlhU3JjPihXZWJLaXRNZWRpYVNyYyogcHRyKTsKK307CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgQ29udGVudFR5cGU7CisKK2NsYXNzIE1lZGlhU291cmNlQ2xpZW50R1N0
cmVhbWVyOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lcj4gewog
ICAgIHB1YmxpYzoKLSAgICAgICAgTWVkaWFTb3VyY2VDbGllbnRHc3RyZWFtZXIoV2ViS2l0TWVk
aWFTcmMqKTsKLSAgICAgICAgfk1lZGlhU291cmNlQ2xpZW50R3N0cmVhbWVyKCk7CisgICAgICAg
IE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyKFdlYktpdE1lZGlhU3JjKik7CisgICAgICAgIHZp
cnR1YWwgfk1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyKCk7CisKKyAgICAgICAgLy8gRnJvbSBN
ZWRpYVNvdXJjZUdTdHJlYW1lcgorICAgICAgICBNZWRpYVNvdXJjZVByaXZhdGU6OkFkZFN0YXR1
cyBhZGRTb3VyY2VCdWZmZXIoUGFzc1JlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlPiwgY29uc3Qg
Q29udGVudFR5cGUmKTsKKyAgICAgICAgdm9pZCBkdXJhdGlvbkNoYW5nZWQoY29uc3QgTWVkaWFU
aW1lJik7CisgICAgICAgIHZvaWQgbWFya0VuZE9mU3RyZWFtKE1lZGlhU291cmNlUHJpdmF0ZTo6
RW5kT2ZTdHJlYW1TdGF0dXMpOwogCi0gICAgICAgIHZvaWQgZGlkUmVjZWl2ZUR1cmF0aW9uKGRv
dWJsZSk7Ci0gICAgICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCwgU3Ry
aW5nKTsKLSAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKGRvdWJsZSk7Ci0gICAgICAgIHZv
aWQgZGlkRmFpbCgpOworICAgICAgICAvLyBGcm9tIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFt
ZXIKKyAgICAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6QXBwZW5kUmVzdWx0IGFwcGVu
ZChQYXNzUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGU+LCBjb25zdCB1bnNpZ25lZCBjaGFyKiwg
dW5zaWduZWQpOworICAgICAgICB2b2lkIHJlbW92ZWRGcm9tTWVkaWFTb3VyY2UoUGFzc1JlZlB0
cjxTb3VyY2VCdWZmZXJQcml2YXRlPik7CiAKICAgICBwcml2YXRlOgotICAgICAgICBXZWJLaXRN
ZWRpYVNyYyogbV9zcmM7CisgICAgICAgIEdSZWZQdHI8V2ViS2l0TWVkaWFTcmM+IG1fc3JjOwog
fTsKIAorfTsKIAogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCiAjZW5kaWYKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAxM2Zl
YTUzZDFjOGQ0MzVkM2NhNDcxMjMwYjc0YzkxODE1ZjIyMGVhLi5kMjEzNjYwNDA3YWY1Yzc0ZWQy
ZDRjMDFhYzMyNGJkYzFhZmQwYmIzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTQtMTItMjMg
IFNlYmFzdGlhbiBEcsO2Z2UgIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgorCisgICAgICAg
IEVuYWJsZSBNZWRpYVNvdXJjZSB0ZXN0cyBmb3IgdGhlIEdUSyBwb3J0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzk0NDEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9UZXN0RXhw
ZWN0YXRpb25zOgorICAgICAgICBFbmFibGUgTWVkaWFTb3VyY2UgdGVzdHMgdGhhdCBhcmUgYWN0
dWFsbHkgc3VjY2VlZGluZyBmb3IKKyAgICAgICAgdGhlIEdUSyBwb3J0LgorCiAyMDE0LTEyLTA3
ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CiAKICAgICAgICAg
W1NvdXBdW0N1cmxdIEhUVFAgaGVhZGVyIHZhbHVlcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBsYXRp
bjEsIG5vdCBVVEYtOApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RF
eHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwpp
bmRleCA1Njg0YTIxODBjYTFhOTAxMDVmNjNlNjU2NTRhZTFkZDk5Y2RmNmQ4Li45YWI2ZjYyMmM0
NDY4MTgwNmJkYTcyNjk0YTc5YjU3NWI1MTQzNzFmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
dGsvVGVzdEV4cGVjdGF0aW9ucwpAQCAtMjE4LDggKzIxOCw1MyBAQCB3ZWJraXQub3JnL2IvNjE2
NjEgZWRpdGluZy9wYXN0ZWJvYXJkL2RyYWctZHJvcC1saXN0Lmh0bWwgWyBGYWlsdXJlIF0KIHdl
YmtpdC5vcmcvYi85Mjc0OSBmYXN0L2RvbS9OYXZpZ2F0b3JDb250ZW50VXRpbHMvaXMtcHJvdG9j
b2wtaGFuZGxlci1yZWdpc3RlcmVkLmh0bWwgWyBTa2lwIF0KIAogIyBUZXN0cyBmb3IgTWVkaWFT
b3VyY2UgQVBJLiBGZWF0dXJlIGlzIG5vdCB0b3RhbGx5IGZ1bmN0aW9uYWwuCi13ZWJraXQub3Jn
L2IvOTkwNjUgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UgWyBTa2lwIF0KLXdlYmtpdC5v
cmcvYi85OTA2NSBtZWRpYS9tZWRpYS1zb3VyY2UgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2
NSBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1hcHBlbmQtYnVmZmVy
Lmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBodHRwL3Rlc3RzL21lZGlhL21lZGlh
LXNvdXJjZS9tZWRpYXNvdXJjZS1hcHBlbmQtc3RyZWFtLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5v
cmcvYi85OTA2NSBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1hcHBl
bmR3aW5kb3cuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVk
aWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWJ1ZmZlcmVkLmh0bWwgWyBTa2lwIF0KK3dlYmtp
dC5vcmcvYi85OTA2NSBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1j
b25maWctY2hhbmdlLW1wNC1hLWJpdHJhdGUuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5
MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWNvbmZpZy1jaGFu
Z2UtbXA0LWF2LWF1ZGlvLWJpdHJhdGUuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5MDY1
IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWNvbmZpZy1jaGFuZ2Ut
bXA0LWF2LWZyYW1lc2l6ZS5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgaHR0cC90
ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtY29uZmlnLWNoYW5nZS1tcDQtYXYt
dmlkZW8tYml0cmF0ZS5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgaHR0cC90ZXN0
cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtY29uZmlnLWNoYW5nZS1tcDQtdi1iaXRy
YXRlLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBodHRwL3Rlc3RzL21lZGlhL21l
ZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jb25maWctY2hhbmdlLW1wNC12LWZyYW1lcmF0ZS5odG1s
IFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3Vy
Y2UvbWVkaWFzb3VyY2UtY29uZmlnLWNoYW5nZS1tcDQtdi1mcmFtZXNpemUuaHRtbCBbIFNraXAg
XQord2Via2l0Lm9yZy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlh
c291cmNlLWNvbmZpZy1jaGFuZ2Utd2VibS1hLWJpdHJhdGUuaHRtbCBbIFNraXAgXQord2Via2l0
Lm9yZy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWNv
bmZpZy1jaGFuZ2Utd2VibS1hdi1hdWRpby1iaXRyYXRlLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5v
cmcvYi85OTA2NSBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jb25m
aWctY2hhbmdlLXdlYm0tYXYtZnJhbWVzaXplLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85
OTA2NSBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jb25maWctY2hh
bmdlLXdlYm0tYXYtdmlkZW8tYml0cmF0ZS5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkw
NjUgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtY29uZmlnLWNoYW5n
ZS13ZWJtLXYtYml0cmF0ZS5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgaHR0cC90
ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtY29uZmlnLWNoYW5nZS13ZWJtLXYt
ZnJhbWVyYXRlLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBodHRwL3Rlc3RzL21l
ZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jb25maWctY2hhbmdlLXdlYm0tdi1mcmFtZXNp
emUuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVk
aWEtc291cmNlL21lZGlhc291cmNlLWR1cmF0aW9uLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcv
Yi85OTA2NSBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1nZXR2aWRl
b3BsYXliYWNrcXVhbGl0eS5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgaHR0cC90
ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtaXMtdHlwZS1zdXBwb3J0ZWQuaHRt
bCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291
cmNlL21lZGlhc291cmNlLXBsYXkuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5MDY1IGh0
dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLXBsYXktdGhlbi1zZWVrLWJh
Y2suaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVk
aWEtc291cmNlL21lZGlhc291cmNlLXJlZHVuZGFudC1zZWVrLmh0bWwgWyBTa2lwIF0KK3dlYmtp
dC5vcmcvYi85OTA2NSBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1y
ZW1vdmUuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEv
bWVkaWEtc291cmNlL21lZGlhc291cmNlLXNlZWstYmV5b25kLWR1cmF0aW9uLmh0bWwgWyBTa2lw
IF0KK3dlYmtpdC5vcmcvYi85OTA2NSBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRp
YXNvdXJjZS1zZWVrLWR1cmluZy1wZW5kaW5nLXNlZWsuaHRtbCBbIFNraXAgXQord2Via2l0Lm9y
Zy9iLzk5MDY1IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLXNvdXJj
ZWJ1ZmZlci1tb2RlLmh0bWwgWyBTa2lwIF0KKword2Via2l0Lm9yZy9iLzk5MDY1IG1lZGlhL21l
ZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtYXBwZW5kLWZhaWxlZC5odG1sIFsgU2tpcCBdCit3ZWJr
aXQub3JnL2IvOTkwNjUgbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1tdWx0aXBsZS1p
bml0aWFsaXphdGlvbi1zZWdtZW50cy5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUg
bWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1hcHBlbmQtbm9uc3luYy1zYW1wbGUtYWZ0
ZXItYWJvcnQuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5MDY1IG1lZGlhL21lZGlhLXNv
dXJjZS9tZWRpYS1zb3VyY2UtZHVwbGljYXRlLXNlZWtlZC5odG1sIFsgU2tpcCBdCit3ZWJraXQu
b3JnL2IvOTkwNjUgbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1jYW5wbGF5dGhyb3Vn
aC5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgbWVkaWEvbWVkaWEtc291cmNlL21l
ZGlhLXNvdXJjZS1kdXJhdGlvbi1hZnRlci1hcHBlbmQuaHRtbCBbIFNraXAgXQord2Via2l0Lm9y
Zy9iLzk5MDY1IG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtZW5kLW9mLXN0cmVhbS1i
dWZmZXJlZC5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgbWVkaWEvbWVkaWEtc291
cmNlL21lZGlhLXNvdXJjZS1lbmQtb2Ytc3RyZWFtLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcv
Yi85OTA2NSBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLWZ1ZGdlLWZhY3Rvci5odG1s
IFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNv
dXJjZS1tb25pdG9yLXNvdXJjZS1idWZmZXJzLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85
OTA2NSBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLW92ZXJsYXBwaW5nLWFwcGVuZC5o
dG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgbWVkaWEvbWVkaWEtc291cmNlL21lZGlh
LXNvdXJjZS1vdmVybGFwcGluZy1kZWNvZGV0aW1lLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcv
Yi85OTA2NSBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLXBsYXkuaHRtbCBbIFNraXAg
XQord2Via2l0Lm9yZy9iLzk5MDY1IG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtcmVt
b3ZlLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi85OTA2NSBtZWRpYS9tZWRpYS1zb3VyY2Uv
bWVkaWEtc291cmNlLXNlZWstY29tcGxldGUuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5
MDY1IG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtdHJhY2stZW5hYmxlZC5odG1sIFsg
U2tpcCBdCit3ZWJraXQub3JnL2IvOTkwNjUgbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJj
ZS10cmFja3MuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzk5MDY1IG1lZGlhL21lZGlhLXNv
dXJjZS9tZWRpYS1zb3VyY2UtdmlkZW8tcGxheWJhY2stcXVhbGl0eS5odG1sIFsgU2tpcCBdCiAK
ICMgRW5jcnlwdGVkIE1lZGlhIEV4dGVuc2lvbnMgYXJlIG5vdCBlbmFibGVkLgogd2Via2l0Lm9y
Zy9iLzk5MDI0IG1lZGlhL2VuY3J5cHRlZC1tZWRpYSBbIFNraXAgXQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>