<?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>195631</bug_id>
          
          <creation_ts>2019-03-12 10:57:27 -0700</creation_ts>
          <short_desc>[GStreamer] Rewrite HTTP source element using pushsrc base class</short_desc>
          <delta_ts>2019-03-18 03:35:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>189967</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Philippe Normand">pnormand</reporter>
          <assigned_to name="Philippe Normand">pnormand</assigned_to>
          <cc>calvaris</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1515515</commentid>
    <comment_count>0</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-03-12 10:57:27 -0700</bug_when>
    <thetext>If we want to use webkitwebsrc in adaptivedemux (HLS, DASH, etc) we need a source element that behaves like souphttpsrc, which is implemented using pushsrc. This rewrite might also fix some seek issues...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1515517</commentid>
    <comment_count>1</comment_count>
      <attachid>364407</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-03-12 11:01:28 -0700</bug_when>
    <thetext>Created attachment 364407
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1515519</commentid>
    <comment_count>2</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-03-12 11:02:20 -0700</bug_when>
    <thetext>The diff differs *a lot* from the current implementation. The review might be easier by looking directly at the new versionn of the cpp file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1515520</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-03-12 11:02:53 -0700</bug_when>
    <thetext>Attachment 364407 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:342:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 1 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1515970</commentid>
    <comment_count>4</comment_count>
      <attachid>364407</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2019-03-13 07:55:46 -0700</bug_when>
    <thetext>Comment on attachment 364407
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:87
&gt; +    bool headersReceived;

wereHeadersReceived

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:91
&gt; +    bool responseReceived;

wasResponseReceived

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:92
&gt; +    bool headersReceived;
&gt; +    Condition headersCondition;
&gt; +    Lock responseLock;
&gt; +
&gt; +    bool responseReceived;
&gt; +    Condition responseCondition;

These variables and their locks and conditions seem a bit unsorted, specially if you consider what seem to be random empty lines.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:101
&gt; +    bool haveEOS;

doesHaveEOS

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:102
&gt; +    bool flushing;

isFlushing

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:106
&gt; +    guint64 readPosition;
&gt; +    guint64 requestedPosition;
&gt; +    guint64 stopPosition;

uint64_t

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:112
&gt; +    bool seekable;

isSeekable

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:114
&gt; +    bool isSeeking;
&gt; +    bool wasSeeking;

\o/

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:122
&gt; +    guint64 queueSize;

uint64_t

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:171
&gt;      GstElementClass* eklass = GST_ELEMENT_CLASS(klass);
&gt; +    GstBaseSrcClass* baseSrcClass = GST_BASE_SRC_CLASS(klass);
&gt; +    GstPushSrcClass* pushSrcClass = GST_PUSH_SRC_CLASS(klass);

I think we should move this vars to the place they are first used.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:181
&gt; +        &quot;Sebastian DrÃ¶ge &lt;sebastian.droege@collabora.co.uk&gt;&quot;);

You&apos;re doing a substantial rewrite, I think you can take the ownership of this element, specially considering the outdated email address.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:246
&gt; +    priv-&gt;queueSize = 0;

You can probably initialize this and many other attributes with { } in the declaration.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:248
&gt; +    priv-&gt;wasSeeking = false;

Ditto

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:349
&gt; +        guint64 requestedPosition = priv-&gt;requestedPosition;

uint64_t

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:361
&gt; +        while (!priv-&gt;responseReceived) {
&gt; +            if (priv-&gt;flushing)
&gt; +                break;
&gt; +            priv-&gt;responseCondition.wait(priv-&gt;responseLock);
&gt; +        }

Can&apos;t we do something like this here or am I missing anything?

priv-&gt;responseCondition.wait(priv-&gt;responseLock, [priv] () { return priv-&gt;responseReceived || priv-&gt;flushing; });

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:377
&gt; +    bool lastNonEmptyBuffer = false;

I don&apos;t understand the meaning of this variable so I won&apos;t try to rename it my self but it should surely begin with is,should, etc.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:382
&gt; +        gsize available = gst_adapter_available_fast(priv-&gt;adapter.get());

size_t

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:395
&gt; +                isAdapterDrained = true;
&gt; +                break;

Nit: you can make the while (available &lt; size &amp;&amp; !isAdapterDrained) and avoid the break

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:550
&gt; +        GUniquePtr&lt;gchar&gt; val(g_strdup_printf(&quot;bytes=%&quot; G_GUINT64_FORMAT &quot;-&quot;, priv-&gt;requestedPosition));

char and val -&gt; formatedRange

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:569
&gt; +    Lock mutex;
&gt; +    Condition condition;
&gt; +    priv-&gt;notifier-&gt;notify(MainThreadSourceNotification::Start, [protector, request = WTFMove(request), condition = &amp;condition, mutex = &amp;mutex] {

I think it might be interesting to abstract this behind the notifier and have a notifyAndWait. That way you wouldn&apos;t need the mutex and the condition, you could handle those inside that method.

If you decide to do this, I would like to review again

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:605
&gt; +    priv-&gt;notifier-&gt;notify(MainThreadSourceNotification::Stop, [protector, keepAlive = priv-&gt;keepAlive, condition = &amp;condition, mutex = &amp;mutex] {

ditto

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:1010
&gt; +    guint64 newPosition = priv-&gt;readPosition + length;

uint64_t

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:1015
&gt; +    guint64 newSize = 0;

uint64_t</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516483</commentid>
    <comment_count>5</comment_count>
      <attachid>364407</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-03-14 04:56:24 -0700</bug_when>
    <thetext>Comment on attachment 364407
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:377
&gt;&gt; +    bool lastNonEmptyBuffer = false;
&gt; 
&gt; I don&apos;t understand the meaning of this variable so I won&apos;t try to rename it my self but it should surely begin with is,should, etc.

It means the adapter doesn&apos;t have enough data in store to fill a full buffer of basesrc block-size, so the next buffer taken from the adapter will drain the adapter and have a smaller size than the previous buffers. Actually I found a way to get rid of this var :)

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:569
&gt;&gt; +    priv-&gt;notifier-&gt;notify(MainThreadSourceNotification::Start, [protector, request = WTFMove(request), condition = &amp;condition, mutex = &amp;mutex] {
&gt; 
&gt; I think it might be interesting to abstract this behind the notifier and have a notifyAndWait. That way you wouldn&apos;t need the mutex and the condition, you could handle those inside that method.
&gt; 
&gt; If you decide to do this, I would like to review again

Will do</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516514</commentid>
    <comment_count>6</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-03-14 09:33:18 -0700</bug_when>
    <thetext>I found a few regressions when running the WPT harness... I&apos;ll upload a new patch soon hopefully.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517546</commentid>
    <comment_count>7</comment_count>
      <attachid>364970</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-03-17 11:30:17 -0700</bug_when>
    <thetext>Created attachment 364970
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517547</commentid>
    <comment_count>8</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-03-17 11:33:14 -0700</bug_when>
    <thetext>Attachment 364970 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:329:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 1 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517630</commentid>
    <comment_count>9</comment_count>
      <attachid>364970</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2019-03-18 02:28:48 -0700</bug_when>
    <thetext>Comment on attachment 364970
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/MainThreadNotifier.h:72
&gt; +        notify(notificationType, [functor = WTFMove(callbackFunctor), condition = &amp;condition, mutex = &amp;mutex] {

nit: isn&apos;t it enough with writing ..., &amp;condition, &amp;muter] ? Then they should be passed by reference.

&gt; Source/WebCore/platform/graphics/gstreamer/MainThreadNotifier.h:74
&gt; +            LockHolder holder(*mutex);

Nit: I don&apos;t think you need the * here (if you pass parameters as reference instead of pointer copy as you&apos;re doing above).

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:101
&gt; +    bool durationSet;

isDurationSet :)

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:371
&gt; +            if (available &amp;&amp; (available &lt; size))

nit: do you need the inner () ?

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:936
&gt; +        gst_structure_set(httpHeaders, &quot;uri&quot;, G_TYPE_STRING, priv-&gt;originalURI.data(),
&gt; +            &quot;http-status-code&quot;, G_TYPE_UINT, response.httpStatusCode(), nullptr);

Nit: this can probably be just one-line.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:951
&gt; +            bool ok = false;
&gt; +            uint64_t convertedValue = header.value.toUInt64(&amp;ok);
&gt; +            if (ok)
&gt; +                gst_structure_set(headers.get(), header.key.utf8().data(), G_TYPE_UINT64, convertedValue, nullptr);
&gt; +            else
&gt; +                gst_structure_set(headers.get(), header.key.utf8().data(), G_TYPE_STRING, header.value.utf8().data(), nullptr);

Why do you do this?

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:960
&gt; +        gst_element_post_message(GST_ELEMENT_CAST(src), gst_message_new_element(GST_OBJECT_CAST(src),
&gt; +            gst_structure_copy(httpHeaders)));

Nit: this can probably be just one-line.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:979
&gt; +    if (G_LIKELY (priv-&gt;requestedPosition == priv-&gt;readPosition))

I think we have LIKELY in WebKit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517637</commentid>
    <comment_count>10</comment_count>
      <attachid>364970</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-03-18 02:49:11 -0700</bug_when>
    <thetext>Comment on attachment 364970
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:951
&gt;&gt; +                gst_structure_set(headers.get(), header.key.utf8().data(), G_TYPE_STRING, header.value.utf8().data(), nullptr);
&gt; 
&gt; Why do you do this?

Because the player checks the content-length as an uint64, so I thought why not try to convert the fields that store numbers, for consistency.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517642</commentid>
    <comment_count>11</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-03-18 03:35:01 -0700</bug_when>
    <thetext>Committed r243058: &lt;https://trac.webkit.org/changeset/243058&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517643</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-03-18 03:35:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/48975084&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364407</attachid>
            <date>2019-03-12 11:01:28 -0700</date>
            <delta_ts>2019-03-14 09:33:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195631-20190312180126.patch</filename>
            <type>text/plain</type>
            <size>51824</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQyNzkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTk0YTM1OWJiN2MwODFi
NDM4ODY4NjczZjkwYWUzMTVhOTEzODRhNy4uYTc2ODYzZWFiOTA2MzA5YzJjMjc0MDJkNTUwMjY1
NDM3NzY4N2Y3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDE5LTAzLTEyICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBSZXdyaXRlIEhUVFAgc291cmNlIGVsZW1lbnQgdXNpbmcgcHVzaHNyYyBiYXNlIGNsYXNzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU2MzEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJZiB3ZSB3YW50
IHRvIHVzZSB3ZWJraXR3ZWJzcmMgaW4gYWRhcHRpdmVkZW11eCAoSExTLCBEQVNILCBldGMpCisg
ICAgICAgIHdlIG5lZWQgYSBzb3VyY2UgZWxlbWVudCB0aGF0IGJlaGF2ZXMgbGlrZSBzb3VwaHR0
cHNyYywgd2hpY2ggaXMKKyAgICAgICAgaW1wbGVtZW50ZWQgdXNpbmcgcHVzaHNyYy4gVGhpcyBy
ZXdyaXRlIG1pZ2h0IGFsc28gZml4IHNvbWUgc2VlaworICAgICAgICBpc3N1ZXMuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLCBleGlzdGluZyBodHRwL3Rlc3RzL21lZGlhIHRlc3RzIGNvdmVyIHRo
aXMgcGF0Y2guCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlTWVzc2FnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHA6CisgICAgICAgICh3
ZWJraXRfd2ViX3NyY19jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdFdlYlNyY1Jlc2V0KToK
KyAgICAgICAgKHdlYmtpdF93ZWJfc3JjX2luaXQpOgorICAgICAgICAod2ViS2l0V2ViU3JjQ3Jl
YXRlKToKKyAgICAgICAgKHdlYktpdFdlYlNyY1N0YXJ0KToKKyAgICAgICAgKHdlYktpdFdlYlNy
Y0Nsb3NlU2Vzc2lvbik6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTdG9wKToKKyAgICAgICAgKHdl
YktpdFdlYlNyY0dldFNpemUpOgorICAgICAgICAod2ViS2l0V2ViU3JjSXNTZWVrYWJsZSk6Cisg
ICAgICAgICh3ZWJLaXRXZWJTcmNEb1NlZWspOgorICAgICAgICAod2ViS2l0V2ViU3JjUXVlcnkp
OgorICAgICAgICAod2ViS2l0V2ViU3JjVW5Mb2NrKToKKyAgICAgICAgKHdlYktpdFdlYlNyY1Vu
TG9ja1N0b3ApOgorICAgICAgICAod2ViS2l0V2ViU3JjQ2hhbmdlU3RhdGUpOgorICAgICAgICAo
Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmNoZWNrVXBkYXRlQmxvY2tzaXplKToKKyAg
ICAgICAgKENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpyZXNwb25zZVJlY2VpdmVkKToK
KyAgICAgICAgKENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpkYXRhUmVjZWl2ZWQpOgor
ICAgICAgICAoQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmFjY2Vzc0NvbnRyb2xDaGVj
a0ZhaWxlZCk6CisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6bG9hZEZh
aWxlZCk6CisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6bG9hZEZpbmlz
aGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291
cmNlR1N0cmVhbWVyLmg6CisKIDIwMTktMDMtMTIgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFu
ZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHU3RyZWFtZXJdW3Y0bDJdIFN5bmNocm9ub3VzIHZp
ZGVvIHRleHR1cmUgZmx1c2hpbmcgc3VwcG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCA2YmRiYTAyMWNkOTAzMmQ1MjFhOTJiNjFmYTZk
MGM1N2Y2OTlhZjhmLi41ZWRiZGQzMzk5ZDY2ZjI2MjQyMThkNDYzYmJhMjM1MmNkNmY2MjhhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAt
MTE5Niw3ICsxMTk2LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRs
ZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAvLyBXZSBpZ25vcmUgc3RhdGUgY2hh
bmdlcyBmcm9tIGludGVybmFsIGVsZW1lbnRzLiBUaGV5IGFyZSBmb3J3YXJkZWQgdG8gcGxheWJp
bjIgYW55d2F5LgogICAgIGJvb2wgbWVzc2FnZVNvdXJjZUlzUGxheWJpbiA9IEdTVF9NRVNTQUdF
X1NSQyhtZXNzYWdlKSA9PSByZWludGVycHJldF9jYXN0PEdzdE9iamVjdCo+KG1fcGlwZWxpbmUu
Z2V0KCkpOwogCi0gICAgR1NUX0xPRygiTWVzc2FnZSAlcyByZWNlaXZlZCBmcm9tIGVsZW1lbnQg
JXMiLCBHU1RfTUVTU0FHRV9UWVBFX05BTUUobWVzc2FnZSksIEdTVF9NRVNTQUdFX1NSQ19OQU1F
KG1lc3NhZ2UpKTsKKyAgICBHU1RfTE9HX09CSkVDVChwaXBlbGluZSgpLCAiTWVzc2FnZSAlcyBy
ZWNlaXZlZCBmcm9tIGVsZW1lbnQgJXMiLCBHU1RfTUVTU0FHRV9UWVBFX05BTUUobWVzc2FnZSks
IEdTVF9NRVNTQUdFX1NSQ19OQU1FKG1lc3NhZ2UpKTsKICAgICBzd2l0Y2ggKEdTVF9NRVNTQUdF
X1RZUEUobWVzc2FnZSkpIHsKICAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOgogICAgICAgICBp
ZiAobV9yZXNldFBpcGVsaW5lIHx8ICFtX21pc3NpbmdQbHVnaW5DYWxsYmFja3MuaXNFbXB0eSgp
IHx8IG1fZXJyb3JPY2N1cmVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVh
bWVyLmNwcAppbmRleCA1MmFhODM2MzMzMDJiNDM5NzA0YjgxM2I1NTE0MzhjNTEwZTk5NDM0Li43
Mzk1ZWM2NTI4MGM3YTE5ZGE4OTdmYWViN2Q3MDVhZjRmMjM1ZGIyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0
cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9l
Z2VAY29sbGFib3JhLmNvLnVrPgogICogIENvcHlyaWdodCAoQykgMjAxMyBDb2xsYWJvcmEgTHRk
LgorICogIENvcHlyaWdodCAoQykgMjAxOSBJZ2FsaWEgUy5MLgogICoKICAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwpAQCAtMzIsOCArMzMsNyBAQAogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNs
dWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPGNzdGRpbnQ+Ci0jaW5jbHVkZSA8Z3N0
L2FwcC9nc3RhcHBzcmMuaD4KLSNpbmNsdWRlIDxnc3QvcGJ1dGlscy9taXNzaW5nLXBsdWdpbnMu
aD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTczLDE1ICs3MywxMCBAQCBwcml2
YXRlOgogZW51bSBNYWluVGhyZWFkU291cmNlTm90aWZpY2F0aW9uIHsKICAgICBTdGFydCA9IDEg
PDwgMCwKICAgICBTdG9wID0gMSA8PCAxLAotICAgIE5lZWREYXRhID0gMSA8PCAyLAotICAgIEVu
b3VnaERhdGEgPSAxIDw8IDMsCi0gICAgU2VlayA9IDEgPDwgNAogfTsKIAogI2RlZmluZSBXRUJL
SVRfV0VCX1NSQ19HRVRfUFJJVkFURShvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUo
KG9iaiksIFdFQktJVF9UWVBFX1dFQl9TUkMsIFdlYktpdFdlYlNyY1ByaXZhdGUpKQogc3RydWN0
IF9XZWJLaXRXZWJTcmNQcml2YXRlIHsKLSAgICBHc3RBcHBTcmMqIGFwcHNyYzsKLSAgICBHc3RQ
YWQqIHNyY3BhZDsKICAgICBDU3RyaW5nIG9yaWdpbmFsVVJJOwogICAgIENTdHJpbmcgcmVkaXJl
Y3RlZFVSSTsKICAgICBib29sIGtlZXBBbGl2ZTsKQEAgLTg5LDYgKzg0LDEzIEBAIHN0cnVjdCBf
V2ViS2l0V2ViU3JjUHJpdmF0ZSB7CiAgICAgYm9vbCBjb21wcmVzczsKICAgICBHVW5pcXVlUHRy
PGdjaGFyPiBodHRwTWV0aG9kOwogCisgICAgYm9vbCBoZWFkZXJzUmVjZWl2ZWQ7CisgICAgQ29u
ZGl0aW9uIGhlYWRlcnNDb25kaXRpb247CisgICAgTG9jayByZXNwb25zZUxvY2s7CisKKyAgICBi
b29sIHJlc3BvbnNlUmVjZWl2ZWQ7CisgICAgQ29uZGl0aW9uIHJlc3BvbnNlQ29uZGl0aW9uOwor
CiAgICAgV2ViQ29yZTo6TWVkaWFQbGF5ZXIqIHBsYXllcjsKIAogICAgIFJlZlB0cjxQbGF0Zm9y
bU1lZGlhUmVzb3VyY2VMb2FkZXI+IGxvYWRlcjsKQEAgLTk2LDE4ICs5OCwzMCBAQCBzdHJ1Y3Qg
X1dlYktpdFdlYlNyY1ByaXZhdGUgewogCiAgICAgYm9vbCBkaWRQYXNzQWNjZXNzQ29udHJvbENo
ZWNrOwogCi0gICAgZ3VpbnQ2NCBvZmZzZXQ7CisgICAgYm9vbCBoYXZlRU9TOworICAgIGJvb2wg
Zmx1c2hpbmc7CisKKyAgICBndWludDY0IHJlYWRQb3NpdGlvbjsKKyAgICBndWludDY0IHJlcXVl
c3RlZFBvc2l0aW9uOworICAgIGd1aW50NjQgc3RvcFBvc2l0aW9uOworCisgICAgYm9vbCBkdXJh
dGlvblNldDsKICAgICBib29sIGhhdmVTaXplOwogICAgIGd1aW50NjQgc2l6ZTsKLSAgICBnYm9v
bGVhbiBzZWVrYWJsZTsKLSAgICBib29sIHBhdXNlZDsKLSAgICBib29sIGlzU2Vla2luZzsKIAot
ICAgIGd1aW50NjQgcmVxdWVzdGVkT2Zmc2V0OworICAgIGJvb2wgc2Vla2FibGU7CisgICAgYm9v
bCBpc1NlZWtpbmc7CisgICAgYm9vbCB3YXNTZWVraW5nOwogCiAgICAgdWludDY0X3QgbWluaW11
bUJsb2Nrc2l6ZTsKIAogICAgIFJlZlB0cjxNYWluVGhyZWFkTm90aWZpZXI8TWFpblRocmVhZFNv
dXJjZU5vdGlmaWNhdGlvbj4+IG5vdGlmaWVyOworCisgICAgTG9jayBhZGFwdGVyTG9jazsKKyAg
ICBDb25kaXRpb24gYWRhcHRlckNvbmRpdGlvbjsKKyAgICBndWludDY0IHF1ZXVlU2l6ZTsKKyAg
ICBHUmVmUHRyPEdzdEFkYXB0ZXI+IGFkYXB0ZXI7CisgICAgR1JlZlB0cjxHc3RFdmVudD4gaHR0
cEhlYWRlcnNFdmVudDsKIH07CiAKIGVudW0gewpAQCAtMTIwLDEwICsxMzQsNyBAQCBlbnVtIHsK
ICAgICBQUk9QX01FVEhPRAogfTsKIAotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY1Rl
bXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUoInNyYyIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU1RfUEFE
X1NSQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdTVF9QQURfQUxXQVlTLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NUX1NUQVRJQ19DQVBT
X0FOWSk7CitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjVGVtcGxhdGUgPSBHU1RfU1RB
VElDX1BBRF9URU1QTEFURSgic3JjIiwgR1NUX1BBRF9TUkMsIEdTVF9QQURfQUxXQVlTLCBHU1Rf
U1RBVElDX0NBUFNfQU5ZKTsKIAogR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyh3ZWJraXRfd2Vi
X3NyY19kZWJ1Zyk7CiAjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2ViX3NyY19kZWJ1
ZwpAQCAtMTM1LDUwICsxNDYsMzkgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjRmluYWxpemUo
R09iamVjdCopOwogc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjU2V0UHJvcGVydHkoR09iamVjdCos
IGd1aW50IHByb3BlcnR5SUQsIGNvbnN0IEdWYWx1ZSosIEdQYXJhbVNwZWMqKTsKIHN0YXRpYyB2
b2lkIHdlYktpdFdlYlNyY0dldFByb3BlcnR5KEdPYmplY3QqLCBndWludCBwcm9wZXJ0eUlELCBH
VmFsdWUqLCBHUGFyYW1TcGVjKik7CiBzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gd2ViS2l0
V2ViU3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVudCosIEdzdFN0YXRlQ2hhbmdlKTsKLQotc3RhdGlj
IGdib29sZWFuIHdlYktpdFdlYlNyY1F1ZXJ5V2l0aFBhcmVudChHc3RQYWQqLCBHc3RPYmplY3Qq
LCBHc3RRdWVyeSopOwotCi1zdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNOZWVkRGF0YShXZWJLaXRX
ZWJTcmMqKTsKLXN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0Vub3VnaERhdGEoV2ViS2l0V2ViU3Jj
Kik7Ci1zdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU2VlayhXZWJLaXRXZWJTcmMqLCBndWlu
dDY0KTsKLQotc3RhdGljIEdzdEFwcFNyY0NhbGxiYWNrcyBhcHBzcmNDYWxsYmFja3MgPSB7Ci0g
ICAgLy8gbmVlZF9kYXRhCi0gICAgW10oR3N0QXBwU3JjKiwgZ3VpbnQsIGdwb2ludGVyIHVzZXJE
YXRhKSB7Ci0gICAgICAgIHdlYktpdFdlYlNyY05lZWREYXRhKFdFQktJVF9XRUJfU1JDKHVzZXJE
YXRhKSk7Ci0gICAgfSwKLSAgICAvLyBlbm91Z2hfZGF0YQotICAgIFtdKEdzdEFwcFNyYyosIGdw
b2ludGVyIHVzZXJEYXRhKSB7Ci0gICAgICAgIHdlYktpdFdlYlNyY0Vub3VnaERhdGEoV0VCS0lU
X1dFQl9TUkModXNlckRhdGEpKTsKLSAgICB9LAotICAgIC8vIHNlZWtfZGF0YQotICAgIFtdKEdz
dEFwcFNyYyosIGd1aW50NjQgb2Zmc2V0LCBncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xlYW4g
ewotICAgICAgICByZXR1cm4gd2ViS2l0V2ViU3JjU2VlayhXRUJLSVRfV0VCX1NSQyh1c2VyRGF0
YSksIG9mZnNldCk7Ci0gICAgfSwKLSAgICB7IG51bGxwdHIgfQotfTsKK3N0YXRpYyBHc3RGbG93
UmV0dXJuIHdlYktpdFdlYlNyY0NyZWF0ZShHc3RQdXNoU3JjKiwgR3N0QnVmZmVyKiopOworc3Rh
dGljIGdib29sZWFuIHdlYktpdFdlYlNyY1N0YXJ0KEdzdEJhc2VTcmMqKTsKK3N0YXRpYyBnYm9v
bGVhbiB3ZWJLaXRXZWJTcmNTdG9wKEdzdEJhc2VTcmMqKTsKK3N0YXRpYyBnYm9vbGVhbiB3ZWJL
aXRXZWJTcmNHZXRTaXplKEdzdEJhc2VTcmMqLCBndWludDY0KiBzaXplKTsKK3N0YXRpYyBnYm9v
bGVhbiB3ZWJLaXRXZWJTcmNJc1NlZWthYmxlKEdzdEJhc2VTcmMqKTsKK3N0YXRpYyBnYm9vbGVh
biB3ZWJLaXRXZWJTcmNEb1NlZWsoR3N0QmFzZVNyYyosIEdzdFNlZ21lbnQqKTsKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJLaXRXZWJTcmNRdWVyeShHc3RCYXNlU3JjKiwgR3N0UXVlcnkqKTsKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNVbkxvY2soR3N0QmFzZVNyYyopOworc3RhdGljIGdib29s
ZWFuIHdlYktpdFdlYlNyY1VuTG9ja1N0b3AoR3N0QmFzZVNyYyopOwogCiAjZGVmaW5lIHdlYmtp
dF93ZWJfc3JjX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKIC8vIFdlIHNwbGl0IHRoaXMgb3V0
IGludG8gYW5vdGhlciBtYWNybyB0byBhdm9pZCBhIGNoZWNrLXdlYmtpdC1zdHlsZSBlcnJvci4K
ICNkZWZpbmUgV0VCS0lUX1dFQl9TUkNfQ0FURUdPUllfSU5JVCBHU1RfREVCVUdfQ0FURUdPUllf
SU5JVCh3ZWJraXRfd2ViX3NyY19kZWJ1ZywgIndlYmtpdHdlYnNyYyIsIDAsICJ3ZWJzcmMgZWxl
bWVudCIpOwotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0V2ViU3JjLCB3ZWJraXRfd2Vi
X3NyYywgR1NUX1RZUEVfQklOLAotICAgICAgICAgICAgICAgICAgICAgICAgIEdfSU1QTEVNRU5U
X0lOVEVSRkFDRShHU1RfVFlQRV9VUklfSEFORExFUiwgd2ViS2l0V2ViU3JjVXJpSGFuZGxlcklu
aXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9XRUJfU1JDX0NBVEVHT1JZX0lO
SVQpOworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0V2ViU3JjLCB3ZWJraXRfd2ViX3Ny
YywgR1NUX1RZUEVfUFVTSF9TUkMsCisgICAgR19JTVBMRU1FTlRfSU5URVJGQUNFKEdTVF9UWVBF
X1VSSV9IQU5ETEVSLCB3ZWJLaXRXZWJTcmNVcmlIYW5kbGVySW5pdCk7CisgICAgV0VCS0lUX1dF
Ql9TUkNfQ0FURUdPUllfSU5JVCk7CiAKIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfc3JjX2NsYXNz
X2luaXQoV2ViS2l0V2ViU3JjQ2xhc3MqIGtsYXNzKQogewogICAgIEdPYmplY3RDbGFzcyogb2ts
YXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOwogICAgIEdzdEVsZW1lbnRDbGFzcyogZWtsYXNz
ID0gR1NUX0VMRU1FTlRfQ0xBU1Moa2xhc3MpOworICAgIEdzdEJhc2VTcmNDbGFzcyogYmFzZVNy
Y0NsYXNzID0gR1NUX0JBU0VfU1JDX0NMQVNTKGtsYXNzKTsKKyAgICBHc3RQdXNoU3JjQ2xhc3Mq
IHB1c2hTcmNDbGFzcyA9IEdTVF9QVVNIX1NSQ19DTEFTUyhrbGFzcyk7CiAKICAgICBva2xhc3Mt
PmRpc3Bvc2UgPSB3ZWJLaXRXZWJTcmNEaXNwb3NlOwogICAgIG9rbGFzcy0+ZmluYWxpemUgPSB3
ZWJLaXRXZWJTcmNGaW5hbGl6ZTsKICAgICBva2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYktpdFdl
YlNyY1NldFByb3BlcnR5OwogICAgIG9rbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2ViS2l0V2ViU3Jj
R2V0UHJvcGVydHk7CiAKLSAgICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlKGVr
bGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzdF9zdGF0aWNf
cGFkX3RlbXBsYXRlX2dldCgmc3JjVGVtcGxhdGUpKTsKKyAgICBnc3RfZWxlbWVudF9jbGFzc19h
ZGRfc3RhdGljX3BhZF90ZW1wbGF0ZShla2xhc3MsICZzcmNUZW1wbGF0ZSk7CisKICAgICBnc3Rf
ZWxlbWVudF9jbGFzc19zZXRfbWV0YWRhdGEoZWtsYXNzLCAiV2ViS2l0IFdlYiBzb3VyY2UgZWxl
bWVudCIsICJTb3VyY2UiLCAiSGFuZGxlcyBIVFRQL0hUVFBTIHVyaXMiLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNv
bGxhYm9yYS5jby51az4iKTsKKyAgICAgICAgIlNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5k
cm9lZ2VAY29sbGFib3JhLmNvLnVrPiIpOwogCiAgICAgLyogQWxsb3dzIHNldHRpbmcgdGhlIHVy
aSB1c2luZyB0aGUgJ2xvY2F0aW9uJyBwcm9wZXJ0eSwgd2hpY2ggaXMgdXNlZAogICAgICAqIGZv
ciBleGFtcGxlIGJ5IGdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkoKSAqLwpAQCAtMjA2LDExICsy
MDYsMzUgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl9zcmNfY2xhc3NfaW5pdChXZWJLaXRXZWJT
cmNDbGFzcyoga2xhc3MpCiAgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoIm1ldGhvZCIsICJt
ZXRob2QiLCAiVGhlIEhUVFAgbWV0aG9kIHRvIHVzZSAoZGVmYXVsdDogR0VUKSIsCiAgICAgICAg
ICAgICBudWxscHRyLCBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oR19QQVJBTV9SRUFEV1JJVEUg
fCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSkpOwogCi0gICAgZWtsYXNzLT5jaGFuZ2Vfc3RhdGUg
PSB3ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZTsKKyAgICBla2xhc3MtPmNoYW5nZV9zdGF0ZSA9IEdT
VF9ERUJVR19GVU5DUFRSKHdlYktpdFdlYlNyY0NoYW5nZVN0YXRlKTsKKworICAgIGJhc2VTcmND
bGFzcy0+c3RhcnQgPSBHU1RfREVCVUdfRlVOQ1BUUih3ZWJLaXRXZWJTcmNTdGFydCk7CisgICAg
YmFzZVNyY0NsYXNzLT5zdG9wID0gR1NUX0RFQlVHX0ZVTkNQVFIod2ViS2l0V2ViU3JjU3RvcCk7
CisgICAgYmFzZVNyY0NsYXNzLT51bmxvY2sgPSBHU1RfREVCVUdfRlVOQ1BUUih3ZWJLaXRXZWJT
cmNVbkxvY2spOworICAgIGJhc2VTcmNDbGFzcy0+dW5sb2NrX3N0b3AgPSBHU1RfREVCVUdfRlVO
Q1BUUih3ZWJLaXRXZWJTcmNVbkxvY2tTdG9wKTsKKyAgICBiYXNlU3JjQ2xhc3MtPmdldF9zaXpl
ID0gR1NUX0RFQlVHX0ZVTkNQVFIod2ViS2l0V2ViU3JjR2V0U2l6ZSk7CisgICAgYmFzZVNyY0Ns
YXNzLT5pc19zZWVrYWJsZSA9IEdTVF9ERUJVR19GVU5DUFRSKHdlYktpdFdlYlNyY0lzU2Vla2Fi
bGUpOworICAgIGJhc2VTcmNDbGFzcy0+ZG9fc2VlayA9IEdTVF9ERUJVR19GVU5DUFRSKHdlYktp
dFdlYlNyY0RvU2Vlayk7CisgICAgYmFzZVNyY0NsYXNzLT5xdWVyeSA9IEdTVF9ERUJVR19GVU5D
UFRSKHdlYktpdFdlYlNyY1F1ZXJ5KTsKKyAgICBwdXNoU3JjQ2xhc3MtPmNyZWF0ZSA9IEdTVF9E
RUJVR19GVU5DUFRSKHdlYktpdFdlYlNyY0NyZWF0ZSk7CiAKICAgICBnX3R5cGVfY2xhc3NfYWRk
X3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRXZWJTcmNQcml2YXRlKSk7CiB9CiAKKworc3Rh
dGljIHZvaWQgd2Via2l0V2ViU3JjUmVzZXQoV2ViS2l0V2ViU3JjKiBzcmMpCit7CisgICAgV2Vi
S2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XRUJfU1JDX0dFVF9QUklWQVRFKHNyYyk7
CisKKyAgICBwcml2LT5oYXZlU2l6ZSA9IGZhbHNlOworICAgIHByaXYtPmhlYWRlcnNSZWNlaXZl
ZCA9IGZhbHNlOworICAgIHByaXYtPnNlZWthYmxlID0gZmFsc2U7CisgICAgcHJpdi0+cmVhZFBv
c2l0aW9uID0gMDsKKyAgICBwcml2LT5yZXF1ZXN0ZWRQb3NpdGlvbiA9IDA7CisgICAgcHJpdi0+
c3RvcFBvc2l0aW9uID0gLTE7CisgICAgcHJpdi0+c2l6ZSA9IDA7Cit9CisKIHN0YXRpYyB2b2lk
IHdlYmtpdF93ZWJfc3JjX2luaXQoV2ViS2l0V2ViU3JjKiBzcmMpCiB7CiAgICAgV2ViS2l0V2Vi
U3JjUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XRUJfU1JDX0dFVF9QUklWQVRFKHNyYyk7CkBAIC0y
MTksNTQgKzI0MywxMyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3NyY19pbml0KFdlYktpdFdl
YlNyYyogc3JjKQogICAgIG5ldyAocHJpdikgV2ViS2l0V2ViU3JjUHJpdmF0ZSgpOwogCiAgICAg
cHJpdi0+bm90aWZpZXIgPSBNYWluVGhyZWFkTm90aWZpZXI8TWFpblRocmVhZFNvdXJjZU5vdGlm
aWNhdGlvbj46OmNyZWF0ZSgpOworICAgIHByaXYtPnF1ZXVlU2l6ZSA9IDA7CisgICAgcHJpdi0+
YWRhcHRlciA9IGFkb3B0R1JlZihnc3RfYWRhcHRlcl9uZXcoKSk7CisgICAgcHJpdi0+d2FzU2Vl
a2luZyA9IGZhbHNlOworICAgIHByaXYtPm1pbmltdW1CbG9ja3NpemUgPSBnc3RfYmFzZV9zcmNf
Z2V0X2Jsb2Nrc2l6ZShHU1RfQkFTRV9TUkNfQ0FTVChzcmMpKTsKIAotICAgIHByaXYtPmhhdmVT
aXplID0gRkFMU0U7Ci0gICAgcHJpdi0+c2l6ZSA9IDA7Ci0KLSAgICBwcml2LT5hcHBzcmMgPSBH
U1RfQVBQX1NSQyhnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImFwcHNyYyIsIG51bGxwdHIpKTsK
LSAgICBpZiAoIXByaXYtPmFwcHNyYykgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNyYywg
IkZhaWxlZCB0byBjcmVhdGUgYXBwc3JjIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBnc3RfYmluX2FkZChHU1RfQklOKHNyYyksIEdTVF9FTEVNRU5UKHByaXYtPmFwcHNyYykpOwot
Ci0gICAgR1JlZlB0cjxHc3RQYWQ+IHRhcmdldFBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9n
ZXRfc3RhdGljX3BhZChHU1RfRUxFTUVOVChwcml2LT5hcHBzcmMpLCAic3JjIikpOwotICAgIHBy
aXYtPnNyY3BhZCA9IHdlYmtpdEdzdEdob3N0UGFkRnJvbVN0YXRpY1RlbXBsYXRlKCZzcmNUZW1w
bGF0ZSwgInNyYyIsIHRhcmdldFBhZC5nZXQoKSk7Ci0KLSAgICBnc3RfZWxlbWVudF9hZGRfcGFk
KEdTVF9FTEVNRU5UKHNyYyksIHByaXYtPnNyY3BhZCk7Ci0KLSAgICBHU1RfT0JKRUNUX0ZMQUdf
U0VUKHByaXYtPnNyY3BhZCwgR1NUX1BBRF9GTEFHX05FRURfUEFSRU5UKTsKLSAgICBnc3RfcGFk
X3NldF9xdWVyeV9mdW5jdGlvbihwcml2LT5zcmNwYWQsIHdlYktpdFdlYlNyY1F1ZXJ5V2l0aFBh
cmVudCk7Ci0KLSAgICBnc3RfYXBwX3NyY19zZXRfY2FsbGJhY2tzKHByaXYtPmFwcHNyYywgJmFw
cHNyY0NhbGxiYWNrcywgc3JjLCBudWxscHRyKTsKLSAgICBnc3RfYXBwX3NyY19zZXRfZW1pdF9z
aWduYWxzKHByaXYtPmFwcHNyYywgRkFMU0UpOwotICAgIGdzdF9hcHBfc3JjX3NldF9zdHJlYW1f
dHlwZShwcml2LT5hcHBzcmMsIEdTVF9BUFBfU1RSRUFNX1RZUEVfU0VFS0FCTEUpOwotCi0gICAg
Ly8gNTEyayBpcyBhIGFiaXRyYXJ5IG51bWJlciBidXQgd2Ugc2hvdWxkIGNob29zZSBhIHZhbHVl
Ci0gICAgLy8gaGVyZSB0byBub3QgcGF1c2UvdW5wYXVzZSB0aGUgU291cE1lc3NhZ2UgdG9vIG9m
dGVuIGFuZAotICAgIC8vIHRvIG1ha2Ugc3VyZSB0aGVyZSdzIGFsd2F5cyBzb21lIGRhdGEgYXZh
aWxhYmxlIGZvcgotICAgIC8vIEdTdHJlYW1lciB0byBoYW5kbGUuCi0gICAgZ3N0X2FwcF9zcmNf
c2V0X21heF9ieXRlcyhwcml2LT5hcHBzcmMsIDUxMiAqIDEwMjQpOwotCi0gICAgLy8gRW1pdCB0
aGUgbmVlZC1kYXRhIHNpZ25hbCBpZiB0aGUgcXVldWUgY29udGFpbnMgbGVzcwotICAgIC8vIHRo
YW4gMjAlIG9mIGRhdGEuIFdpdGhvdXQgdGhpcyB0aGUgbmVlZC1kYXRhIHNpZ25hbAotICAgIC8v
IGlzIGVtaXR0ZWQgd2hlbiB0aGUgcXVldWUgaXMgZW1wdHksIHdlIHRoZW4gZGlzcGF0Y2gKLSAg
ICAvLyB0aGUgc291cCBtZXNzYWdlIHVucGF1c2luZyB0byB0aGUgbWFpbiBsb29wIGFuZCBmcm9t
Ci0gICAgLy8gdGhlcmUgdW5wYXVzZSB0aGUgc291cCBtZXNzYWdlLiBUaGlzIGFscmVhZHkgdGFr
ZXMKLSAgICAvLyBxdWl0ZSBzb21lIHRpbWUgYW5kIGxpYnNvdXAgZXZlbiBuZWVkcyBzb21lIG1v
cmUgdGltZQotICAgIC8vIHRvIGFjdHVhbGx5IHByb3ZpZGUgZGF0YSBhZ2Fpbi4gSWYgd2UgZG8g
YWxsIHRoaXMKLSAgICAvLyBhbHJlYWR5IGlmIHRoZSBxdWV1ZSBpcyAyMCUgZW1wdHksIGl0J3Mg
bXVjaCBtb3JlCi0gICAgLy8gbGlrZWx5IHRoYXQgbGlic291cCBhbHJlYWR5IHByb3ZpZGVzIG5l
dyBkYXRhIGJlZm9yZQotICAgIC8vIHRoZSBxdWV1ZSBpcyByZWFsbHkgZW1wdHkuCi0gICAgLy8g
VGhpcyBtaWdodCBuZWVkIHR3ZWFraW5nIGZvciBwb3J0cyBub3QgdXNpbmcgbGlic291cC4KLSAg
ICBnX29iamVjdF9zZXQocHJpdi0+YXBwc3JjLCAibWluLXBlcmNlbnQiLCAyMCwgbnVsbHB0cik7
Ci0KLSAgICBnc3RfYmFzZV9zcmNfc2V0X2F1dG9tYXRpY19lb3MoR1NUX0JBU0VfU1JDKHByaXYt
PmFwcHNyYyksIEZBTFNFKTsKLQotICAgIGdzdF9hcHBfc3JjX3NldF9jYXBzKHByaXYtPmFwcHNy
YywgbnVsbHB0cik7Ci0KLSAgICBwcml2LT5taW5pbXVtQmxvY2tzaXplID0gZ3N0X2Jhc2Vfc3Jj
X2dldF9ibG9ja3NpemUoR1NUX0JBU0VfU1JDX0NBU1QocHJpdi0+YXBwc3JjKSk7CisgICAgd2Vi
a2l0V2ViU3JjUmVzZXQoc3JjKTsKKyAgICBnc3RfYmFzZV9zcmNfc2V0X2F1dG9tYXRpY19lb3Mo
R1NUX0JBU0VfU1JDX0NBU1Qoc3JjKSwgRkFMU0UpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJLaXRX
ZWJTcmNEaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKQEAgLTM0Nyw0NiArMzMwLDExMiBAQCBzdGF0
aWMgdm9pZCB3ZWJLaXRXZWJTcmNHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHBy
b3BJRCwgR1ZhbHVlKiB2YWx1ZQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgd2ViS2l0V2ViU3Jj
U3RvcChXZWJLaXRXZWJTcmMqIHNyYykKK3N0YXRpYyBHc3RGbG93UmV0dXJuIHdlYktpdFdlYlNy
Y0NyZWF0ZShHc3RQdXNoU3JjKiBwdXNoU3JjLCBHc3RCdWZmZXIqKiBidWZmZXIpCiB7CisgICAg
R3N0QmFzZVNyYyogYmFzZVNyYyA9IEdTVF9CQVNFX1NSQ19DQVNUKHB1c2hTcmMpOworICAgIFdl
YktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMoYmFzZVNyYyk7CiAgICAgV2ViS2l0V2Vi
U3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAotICAgIGlmIChwcml2LT5yZXNvdXJjZSB8
fCAocHJpdi0+bG9hZGVyICYmICFwcml2LT5rZWVwQWxpdmUpKSB7Ci0gICAgICAgIEdSZWZQdHI8
V2ViS2l0V2ViU3JjPiBwcm90ZWN0b3IgPSBXVEY6OmVuc3VyZUdSZWYoc3JjKTsKLSAgICAgICAg
cHJpdi0+bm90aWZpZXItPmNhbmNlbFBlbmRpbmdOb3RpZmljYXRpb25zKE1haW5UaHJlYWRTb3Vy
Y2VOb3RpZmljYXRpb246Ok5lZWREYXRhIHwgTWFpblRocmVhZFNvdXJjZU5vdGlmaWNhdGlvbjo6
RW5vdWdoRGF0YSB8IE1haW5UaHJlYWRTb3VyY2VOb3RpZmljYXRpb246OlNlZWspOwotICAgICAg
ICBwcml2LT5ub3RpZmllci0+bm90aWZ5KE1haW5UaHJlYWRTb3VyY2VOb3RpZmljYXRpb246OlN0
b3AsIFtwcm90ZWN0b3IsIGtlZXBBbGl2ZSA9IHByaXYtPmtlZXBBbGl2ZV0gewotICAgICAgICAg
ICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHByb3RlY3Rvci0+cHJpdjsKKyAgICBHU1Rf
VFJBQ0VfT0JKRUNUKHNyYywgInJlYWRQb3NpdGlvbiA9ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBy
ZXF1ZXN0ZWRQb3NpdGlvbiA9ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHByaXYtPnJlYWRQb3NpdGlv
biwgcHJpdi0+cmVxdWVzdGVkUG9zaXRpb24pOwogCi0gICAgICAgICAgICBpZiAocHJpdi0+cmVz
b3VyY2UpIHsKLSAgICAgICAgICAgICAgICBwcml2LT5yZXNvdXJjZS0+c3RvcCgpOwotICAgICAg
ICAgICAgICAgIHByaXYtPnJlc291cmNlLT5zZXRDbGllbnQobnVsbHB0cik7Ci0gICAgICAgICAg
ICAgICAgcHJpdi0+cmVzb3VyY2UgPSBudWxscHRyOwotICAgICAgICAgICAgfQorICAgIGlmIChw
cml2LT5yZXF1ZXN0ZWRQb3NpdGlvbiAhPSBwcml2LT5yZWFkUG9zaXRpb24pIHsKKyAgICAgICAg
eworICAgICAgICAgICAgTG9ja0hvbGRlciBhZGFwdGVyTG9ja2VyKHByaXYtPmFkYXB0ZXJMb2Nr
KTsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2Vla2luZywgZmx1c2hpbmcg
YWRhcHRlciIpOworICAgICAgICAgICAgLy8gRGlzY2FyZCBhbGwgdGhlIGJ1ZmZlcnMgY29taW5n
IGJlZm9yZSB0aGUgcmVxdWVzdGVkIHNlZWsgcG9zaXRpb24uCisgICAgICAgICAgICBnc3RfYWRh
cHRlcl9mbHVzaChwcml2LT5hZGFwdGVyLmdldCgpLCBwcml2LT5xdWV1ZVNpemUpOworICAgICAg
ICAgICAgcHJpdi0+cXVldWVTaXplID0gMDsKKyAgICAgICAgfQorICAgICAgICBndWludDY0IHJl
cXVlc3RlZFBvc2l0aW9uID0gcHJpdi0+cmVxdWVzdGVkUG9zaXRpb247CisgICAgICAgIHdlYktp
dFdlYlNyY1N0b3AoYmFzZVNyYyk7CisgICAgICAgIHByaXYtPnJlcXVlc3RlZFBvc2l0aW9uID0g
cmVxdWVzdGVkUG9zaXRpb247CisgICAgICAgIHdlYktpdFdlYlNyY1N0YXJ0KGJhc2VTcmMpOwor
ICAgIH0KIAotICAgICAgICAgICAgaWYgKCFrZWVwQWxpdmUpCi0gICAgICAgICAgICAgICAgcHJp
di0+bG9hZGVyID0gbnVsbHB0cjsKLSAgICAgICAgfSk7CisgICAgeworICAgICAgICBMb2NrSG9s
ZGVyIGxvY2tlcihwcml2LT5yZXNwb25zZUxvY2spOworICAgICAgICB3aGlsZSAoIXByaXYtPnJl
c3BvbnNlUmVjZWl2ZWQpIHsKKyAgICAgICAgICAgIGlmIChwcml2LT5mbHVzaGluZykKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHByaXYtPnJlc3BvbnNlQ29uZGl0aW9uLndh
aXQocHJpdi0+cmVzcG9uc2VMb2NrKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGJvb2wgd2Fz
U2Vla2luZyA9IHN0ZDo6ZXhjaGFuZ2UocHJpdi0+aXNTZWVraW5nLCBmYWxzZSk7CisgICAgR1NU
X1RSQUNFX09CSkVDVChzcmMsICJmbHVzaGluZzogJXMsIGhhdmVFT1M6ICVzLCBxdWV1ZVNpemU6
ICUiIEdfR1NJWkVfRk9STUFULCBib29sRm9yUHJpbnRpbmcocHJpdi0+Zmx1c2hpbmcpLCBib29s
Rm9yUHJpbnRpbmcocHJpdi0+aGF2ZUVPUyksIHByaXYtPnF1ZXVlU2l6ZSk7CiAKLSAgICBwcml2
LT5wYXVzZWQgPSBmYWxzZTsKKyAgICBpZiAocHJpdi0+Zmx1c2hpbmcpIHsKKyAgICAgICAgR1NU
X0RFQlVHX09CSkVDVChzcmMsICJGbHVzaGluZyIpOworICAgICAgICByZXR1cm4gR1NUX0ZMT1df
RkxVU0hJTkc7CisgICAgfQogCi0gICAgcHJpdi0+b2Zmc2V0ID0gMDsKKyAgICBpZiAocHJpdi0+
aGF2ZUVPUykgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIkVPUyIpOworICAgICAg
ICByZXR1cm4gR1NUX0ZMT1dfRU9TOworICAgIH0KIAotICAgIGlmICghd2FzU2Vla2luZykgewot
ICAgICAgICBwcml2LT5yZXF1ZXN0ZWRPZmZzZXQgPSAwOwotICAgICAgICBwcml2LT5wbGF5ZXIg
PSBudWxscHRyOwotICAgICAgICBwcml2LT5zZWVrYWJsZSA9IEZBTFNFOworICAgIHVuc2lnbmVk
IHNpemUgPSBnc3RfYmFzZV9zcmNfZ2V0X2Jsb2Nrc2l6ZShiYXNlU3JjKTsKKyAgICBib29sIGxh
c3ROb25FbXB0eUJ1ZmZlciA9IGZhbHNlOworICAgIGJvb2wgaXNBZGFwdGVyRHJhaW5lZCA9IGZh
bHNlOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBhZGFwdGVyTG9ja2VyKHByaXYtPmFkYXB0
ZXJMb2NrKTsKKyAgICAgICAgdW5zaWduZWQgcmV0cmllcyA9IDA7CisgICAgICAgIGdzaXplIGF2
YWlsYWJsZSA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZV9mYXN0KHByaXYtPmFkYXB0ZXIuZ2V0KCkp
OworICAgICAgICB3aGlsZSAoYXZhaWxhYmxlIDwgc2l6ZSkgeworICAgICAgICAgICAgaWYgKGxh
c3ROb25FbXB0eUJ1ZmZlcikgeworICAgICAgICAgICAgICAgIHNpemUgPSBhdmFpbGFibGU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcml2LT5h
ZGFwdGVyQ29uZGl0aW9uLndhaXRGb3IocHJpdi0+YWRhcHRlckxvY2ssIFNlY29uZHMoMSkpOwor
ICAgICAgICAgICAgcmV0cmllcysrOworICAgICAgICAgICAgYXZhaWxhYmxlID0gZ3N0X2FkYXB0
ZXJfYXZhaWxhYmxlX2Zhc3QocHJpdi0+YWRhcHRlci5nZXQoKSk7CisgICAgICAgICAgICBpZiAo
YXZhaWxhYmxlICYmIChhdmFpbGFibGUgPCBzaXplKSkKKyAgICAgICAgICAgICAgICBsYXN0Tm9u
RW1wdHlCdWZmZXIgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBpZiAocmV0cmllcyA+IDMpIHsK
KyAgICAgICAgICAgICAgICBpc0FkYXB0ZXJEcmFpbmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChwcml2
LT5hcHBzcmMpIHsKLSAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X2NhcHMocHJpdi0+YXBwc3JjLCBu
dWxscHRyKTsKLSAgICAgICAgaWYgKCF3YXNTZWVraW5nKQotICAgICAgICAgICAgZ3N0X2FwcF9z
cmNfc2V0X3NpemUocHJpdi0+YXBwc3JjLCAtMSk7CisgICAgaWYgKGlzQWRhcHRlckRyYWluZWQp
IHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJBZGFwdGVyIHN0aWxsIGVtcHR5IGFm
dGVyIDMgc2Vjb25kcyBvZiB3YWl0aW5nLCBhc3N1bWluZyBFT1MiKTsKKyAgICAgICAgcmV0dXJu
IEdTVF9GTE9XX0VPUzsKICAgICB9CiAKLSAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlN0b3Bw
ZWQgcmVxdWVzdCIpOworICAgIGlmIChwcml2LT5oYXZlU2l6ZSAmJiAhcHJpdi0+ZHVyYXRpb25T
ZXQpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJTZXR0aW5nIGR1cmF0aW9uIHRv
ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHByaXYtPnNpemUpOworICAgICAgICBiYXNlU3JjLT5zZWdt
ZW50LmR1cmF0aW9uID0gcHJpdi0+c2l6ZTsKKyAgICAgICAgcHJpdi0+ZHVyYXRpb25TZXQgPSB0
cnVlOworICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlRfQ0FTVChz
cmMpLCBnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb25fY2hhbmdlZChHU1RfT0JKRUNUX0NBU1Qoc3Jj
KSkpOworICAgIH0KKworICAgIGlmIChwcml2LT5odHRwSGVhZGVyc0V2ZW50KQorICAgICAgICBn
c3RfcGFkX3B1c2hfZXZlbnQoR1NUX0JBU0VfU1JDX1BBRChiYXNlU3JjKSwgcHJpdi0+aHR0cEhl
YWRlcnNFdmVudC5sZWFrUmVmKCkpOworCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGFkYXB0
ZXJMb2NrZXIocHJpdi0+YWRhcHRlckxvY2spOworICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNy
YywgIlRha2luZyAldSBieXRlcyBmcm9tIGFkYXB0ZXIiLCBzaXplKTsKKyAgICAgICAgaWYgKHNp
emUpIHsKKyAgICAgICAgICAgICpidWZmZXIgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlcl9mYXN0
KHByaXYtPmFkYXB0ZXIuZ2V0KCksIHNpemUpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
KmJ1ZmZlcik7CisKKyAgICAgICAgICAgIHByaXYtPnF1ZXVlU2l6ZSAtPSBzaXplOworCisgICAg
ICAgICAgICBHU1RfQlVGRkVSX09GRlNFVCgqYnVmZmVyKSA9IGJhc2VTcmMtPnNlZ21lbnQucG9z
aXRpb247CisgICAgICAgICAgICBHU1RfQlVGRkVSX09GRlNFVF9FTkQoKmJ1ZmZlcikgPSBHU1Rf
QlVGRkVSX09GRlNFVCgqYnVmZmVyKSArIHNpemU7CisgICAgICAgICAgICBHU1RfVFJBQ0VfT0JK
RUNUKHNyYywgIkJ1ZmZlciBib3VuZHMgc2V0IHRvICUiIEdfR1VJTlQ2NF9GT1JNQVQgIi0lIiBH
X0dVSU5UNjRfRk9STUFULCBHU1RfQlVGRkVSX09GRlNFVCgqYnVmZmVyKSwgR1NUX0JVRkZFUl9P
RkZTRVRfRU5EKCpidWZmZXIpKTsKKyAgICAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAi
aGF2ZUVPUzogJXMsIHdhc1NlZWtpbmc6ICVzLCBzZWVraW5nOiAlcywgc2l6ZTogJXUiLCBib29s
Rm9yUHJpbnRpbmcocHJpdi0+aGF2ZUVPUyksIGJvb2xGb3JQcmludGluZyhwcml2LT53YXNTZWVr
aW5nKSwgYm9vbEZvclByaW50aW5nKHByaXYtPmlzU2Vla2luZyksIHNpemUpOworICAgICAgICAg
ICAgaWYgKHByaXYtPmhhdmVTaXplICYmIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCgqYnVmZmVyKSA+
PSBwcml2LT5zaXplKSB7CisgICAgICAgICAgICAgICAgaWYgKHByaXYtPndhc1NlZWtpbmcpCisg
ICAgICAgICAgICAgICAgICAgIHByaXYtPndhc1NlZWtpbmcgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHByaXYtPmhhdmVFT1MgPSB0cnVlOworICAg
ICAgICAgICAgfSBlbHNlIGlmIChwcml2LT53YXNTZWVraW5nKQorICAgICAgICAgICAgICAgIHBy
aXYtPndhc1NlZWtpbmcgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBH
U1RfRkxPV19PSzsKIH0KIAogc3RhdGljIGJvb2wgd2ViS2l0V2ViU3JjU2V0RXh0cmFIZWFkZXIo
R1F1YXJrIGZpZWxkSWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIGdwb2ludGVyIHVzZXJEYXRhKQpA
QCAtNDQwLDE3ICs0ODksMzAgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1Byb2Nlc3NF
eHRyYUhlYWRlcnMoR1F1YXJrIGZpZWxkSWQsIGNvbnN0IEdWYWx1ZSogdmEKICAgICByZXR1cm4g
d2ViS2l0V2ViU3JjU2V0RXh0cmFIZWFkZXIoZmllbGRJZCwgdmFsdWUsIHVzZXJEYXRhKTsKIH0K
IAotc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjU3RhcnQoV2ViS2l0V2ViU3JjKiBzcmMpCitzdGF0
aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU3RhcnQoR3N0QmFzZVNyYyogYmFzZVNyYykKIHsKKyAg
ICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKGJhc2VTcmMpOwogICAgIFdlYktp
dFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CiAgICAgQVNTRVJUKHByaXYtPnBsYXll
cik7CiAKKyAgICBwcml2LT5oZWFkZXJzUmVjZWl2ZWQgPSBmYWxzZTsKKyAgICBwcml2LT5yZXNw
b25zZVJlY2VpdmVkID0gZmFsc2U7CisgICAgcHJpdi0+ZHVyYXRpb25TZXQgPSBmYWxzZTsKKyAg
ICBwcml2LT5oYXZlRU9TID0gZmFsc2U7CisgICAgcHJpdi0+Zmx1c2hpbmcgPSBmYWxzZTsKKwog
ICAgIHByaXYtPmRpZFBhc3NBY2Nlc3NDb250cm9sQ2hlY2sgPSBmYWxzZTsKIAogICAgIGlmIChw
cml2LT5vcmlnaW5hbFVSSS5pc051bGwoKSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNy
YywgIk5vIFVSSSBwcm92aWRlZCIpOwotICAgICAgICB3ZWJLaXRXZWJTcmNTdG9wKHNyYyk7Ci0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgd2ViS2l0V2ViU3JjU3RvcChiYXNlU3JjKTsKKyAgICAg
ICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIGlmIChwcml2LT5yZXF1ZXN0ZWRQb3NpdGlv
biA9PSBwcml2LT5zdG9wUG9zaXRpb24pIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMs
ICJFbXB0eSBzZWdtZW50LCBzaWduYWxpbmcgRU9TIik7CisgICAgICAgIHByaXYtPmhhdmVFT1Mg
PSB0cnVlOworICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCiAgICAgR1NUX0RFQlVHX09C
SkVDVChzcmMsICJGZXRjaGluZyAlcyIsIHByaXYtPm9yaWdpbmFsVVJJLmRhdGEoKSk7CkBAIC00
ODQsMTYgKzU0NiwxNiBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNTdGFydChXZWJLaXRXZWJT
cmMqIHNyYykKICAgICAgICAgfHwgIWdfYXNjaWlfc3RyY2FzZWNtcCgidHJhaWxlcnMuYXBwbGUu
Y29tIiwgdXJsLmhvc3QoKS51dGY4KCkuZGF0YSgpKSkKICAgICAgICAgcmVxdWVzdC5zZXRIVFRQ
VXNlckFnZW50KCJRdWlja3RpbWUvNy42LjYiKTsKIAotICAgIGlmIChwcml2LT5yZXF1ZXN0ZWRP
ZmZzZXQpIHsKLSAgICAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gdmFsKGdfc3RyZHVwX3ByaW50Zigi
Ynl0ZXM9JSIgR19HVUlOVDY0X0ZPUk1BVCAiLSIsIHByaXYtPnJlcXVlc3RlZE9mZnNldCkpOwor
ICAgIGlmIChwcml2LT5yZXF1ZXN0ZWRQb3NpdGlvbikgeworICAgICAgICBHVW5pcXVlUHRyPGdj
aGFyPiB2YWwoZ19zdHJkdXBfcHJpbnRmKCJieXRlcz0lIiBHX0dVSU5UNjRfRk9STUFUICItIiwg
cHJpdi0+cmVxdWVzdGVkUG9zaXRpb24pKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMs
ICJSYW5nZSByZXF1ZXN0OiAlcyIsIHZhbC5nZXQoKSk7CiAgICAgICAgIHJlcXVlc3Quc2V0SFRU
UEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpSYW5nZSwgdmFsLmdldCgpKTsKICAgICB9Ci0g
ICAgcHJpdi0+b2Zmc2V0ID0gcHJpdi0+cmVxdWVzdGVkT2Zmc2V0OworICAgIHByaXYtPnJlYWRQ
b3NpdGlvbiA9IHByaXYtPnJlcXVlc3RlZFBvc2l0aW9uOwogCiAgICAgR1NUX0RFQlVHX09CSkVD
VChzcmMsICJQZXJzaXN0ZW50IGNvbm5lY3Rpb24gc3VwcG9ydCAlcyIsIHByaXYtPmtlZXBBbGl2
ZSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOwotICAgIGlmICghcHJpdi0+a2VlcEFsaXZlKSB7
CisgICAgaWYgKCFwcml2LT5rZWVwQWxpdmUpCiAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRl
ckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb25uZWN0aW9uLCAiY2xvc2UiKTsKLSAgICB9CiAKICAg
ICBpZiAocHJpdi0+ZXh0cmFIZWFkZXJzKQogICAgICAgICBnc3Rfc3RydWN0dXJlX2ZvcmVhY2go
cHJpdi0+ZXh0cmFIZWFkZXJzLmdldCgpLCB3ZWJLaXRXZWJTcmNQcm9jZXNzRXh0cmFIZWFkZXJz
LCAmcmVxdWVzdCk7CkBAIC01MDIsOSArNTY0LDEwIEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNy
Y1N0YXJ0KFdlYktpdFdlYlNyYyogc3JjKQogICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxk
KEhUVFBIZWFkZXJOYW1lOjpJY3lNZXRhZGF0YSwgIjEiKTsKIAogICAgIEdSZWZQdHI8V2ViS2l0
V2ViU3JjPiBwcm90ZWN0b3IgPSBXVEY6OmVuc3VyZUdSZWYoc3JjKTsKLSAgICBwcml2LT5ub3Rp
Zmllci0+bm90aWZ5KE1haW5UaHJlYWRTb3VyY2VOb3RpZmljYXRpb246OlN0YXJ0LCBbcHJvdGVj
dG9yLCByZXF1ZXN0ID0gV1RGTW92ZShyZXF1ZXN0KV0geworICAgIExvY2sgbXV0ZXg7CisgICAg
Q29uZGl0aW9uIGNvbmRpdGlvbjsKKyAgICBwcml2LT5ub3RpZmllci0+bm90aWZ5KE1haW5UaHJl
YWRTb3VyY2VOb3RpZmljYXRpb246OlN0YXJ0LCBbcHJvdGVjdG9yLCByZXF1ZXN0ID0gV1RGTW92
ZShyZXF1ZXN0KSwgY29uZGl0aW9uID0gJmNvbmRpdGlvbiwgbXV0ZXggPSAmbXV0ZXhdIHsKICAg
ICAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHByb3RlY3Rvci0+cHJpdjsKLQogICAg
ICAgICBpZiAoIXByaXYtPmxvYWRlcikKICAgICAgICAgICAgIHByaXYtPmxvYWRlciA9IHByaXYt
PnBsYXllci0+Y3JlYXRlUmVzb3VyY2VMb2FkZXIoKTsKIApAQCAtNTE4LDkwICs1ODEsMTg5IEBA
IHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1N0YXJ0KFdlYktpdFdlYlNyYyogc3JjKQogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChwcm90ZWN0b3IuZ2V0KCks
ICJGYWlsZWQgdG8gc2V0dXAgc3RyZWFtaW5nIGNsaWVudCIpOwogICAgICAgICAgICAgcHJpdi0+
bG9hZGVyID0gbnVsbHB0cjsKLSAgICAgICAgICAgIHdlYktpdFdlYlNyY1N0b3AocHJvdGVjdG9y
LmdldCgpKTsKICAgICAgICAgfQorICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcigqbXV0ZXgpOwor
ICAgICAgICBjb25kaXRpb24tPm5vdGlmeU9uZSgpOwogICAgIH0pOworCisgICAgaWYgKCFpc01h
aW5UaHJlYWQoKSkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIldhaXRpbmcgZm9y
IHJlc291cmNlIGxvYWRlciBzdGFydCIpOworICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihtdXRl
eCk7CisgICAgICAgIGNvbmRpdGlvbi53YWl0KG11dGV4KTsKKyAgICB9CisgICAgR1NUX0RFQlVH
X09CSkVDVChzcmMsICJSZXNvdXJjZSBsb2FkZXIgc3RhcnRlZCIpOworICAgIHJldHVybiBUUlVF
OwogfQogCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gd2ViS2l0V2ViU3JjQ2hhbmdlU3Rh
dGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKK3N0YXRp
YyB2b2lkIHdlYktpdFdlYlNyY0Nsb3NlU2Vzc2lvbihXZWJLaXRXZWJTcmMqIHNyYykKIHsKLSAg
ICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7Ci0g
ICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhlbGVtZW50KTsKICAgICBXZWJL
aXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OworICAgIEdSZWZQdHI8V2ViS2l0V2Vi
U3JjPiBwcm90ZWN0b3IgPSBXVEY6OmVuc3VyZUdSZWYoc3JjKTsKKyAgICBMb2NrIG11dGV4Owor
ICAgIENvbmRpdGlvbiBjb25kaXRpb247CiAKLSAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAg
ICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTlVMTF9UT19SRUFEWToKLSAgICAgICAgaWYgKCFwcml2
LT5hcHBzcmMpIHsKLSAgICAgICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShlbGVtZW50
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzdF9taXNzaW5nX2VsZW1l
bnRfbWVzc2FnZV9uZXcoZWxlbWVudCwgImFwcHNyYyIpKTsKLSAgICAgICAgICAgIEdTVF9FTEVN
RU5UX0VSUk9SKHNyYywgQ09SRSwgTUlTU0lOR19QTFVHSU4sIChudWxscHRyKSwgKCJubyBhcHBz
cmMiKSk7Ci0gICAgICAgICAgICByZXR1cm4gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOworICAg
IHByaXYtPm5vdGlmaWVyLT5ub3RpZnkoTWFpblRocmVhZFNvdXJjZU5vdGlmaWNhdGlvbjo6U3Rv
cCwgW3Byb3RlY3Rvciwga2VlcEFsaXZlID0gcHJpdi0+a2VlcEFsaXZlLCBjb25kaXRpb24gPSAm
Y29uZGl0aW9uLCBtdXRleCA9ICZtdXRleF0geworICAgICAgICBXZWJLaXRXZWJTcmNQcml2YXRl
KiBwcml2ID0gcHJvdGVjdG9yLT5wcml2OworCisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocHJv
dGVjdG9yLmdldCgpLCAiU3RvcHBpbmcgcmVzb3VyY2UgbG9hZGVyIik7CisKKyAgICAgICAgaWYg
KHByaXYtPnJlc291cmNlKSB7CisgICAgICAgICAgICBwcml2LT5yZXNvdXJjZS0+c3RvcCgpOwor
ICAgICAgICAgICAgcHJpdi0+cmVzb3VyY2UtPnNldENsaWVudChudWxscHRyKTsKKyAgICAgICAg
ICAgIHByaXYtPnJlc291cmNlID0gbnVsbHB0cjsKICAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CiAKLSAgICByZXQgPSBHU1RfRUxF
TUVOVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUoZWxlbWVudCwgdHJhbnNpdGlv
bik7Ci0gICAgaWYgKEdfVU5MSUtFTFkocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkp
IHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJTdGF0ZSBjaGFuZ2UgZmFpbGVkIik7
Ci0gICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIGlmICgha2VlcEFsaXZlKQorICAgICAgICAg
ICAgcHJpdi0+bG9hZGVyID0gbnVsbHB0cjsKKworICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcigq
bXV0ZXgpOworICAgICAgICBjb25kaXRpb24tPm5vdGlmeU9uZSgpOworICAgIH0pOworCisgICAg
aWYgKCFpc01haW5UaHJlYWQoKSkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIldh
aXRpbmcgZm9yIHJlc291cmNlIGxvYWRlciBzaHV0ZG93biIpOworICAgICAgICBMb2NrSG9sZGVy
IGhvbGRlcihtdXRleCk7CisgICAgICAgIGNvbmRpdGlvbi53YWl0KG11dGV4KTsKICAgICB9Cisg
ICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSZXNvdXJjZSBsb2FkZXIgc3RvcHBlZCIpOworfQor
CitzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU3RvcChHc3RCYXNlU3JjKiBiYXNlU3JjKQor
eworICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMoYmFzZVNyYyk7CisgICAg
V2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKworICAgIGlmIChwcml2LT5y
ZXNvdXJjZSB8fCAocHJpdi0+bG9hZGVyICYmICFwcml2LT5rZWVwQWxpdmUpKQorICAgICAgICB3
ZWJLaXRXZWJTcmNDbG9zZVNlc3Npb24oc3JjKTsKIAotICAgIHN3aXRjaCAodHJhbnNpdGlvbikg
ewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6CiAgICAgewotICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlJFQURZLT5QQVVTRUQiKTsKLSAgICAgICAgd2Vi
S2l0V2ViU3JjU3RhcnQoc3JjKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIExvY2tIb2xkZXIg
YWRhcHRlckxvY2tlcihwcml2LT5hZGFwdGVyTG9jayk7CisgICAgICAgIGdzdF9hZGFwdGVyX2Ns
ZWFyKHByaXYtPmFkYXB0ZXIuZ2V0KCkpOworICAgICAgICBwcml2LT5xdWV1ZVNpemUgPSAwOwog
ICAgIH0KLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgIHsK
LSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJQQVVTRUQtPlJFQURZIik7Ci0gICAgICAg
IHdlYktpdFdlYlNyY1N0b3Aoc3JjKTsKLSAgICAgICAgYnJlYWs7CisKKyAgICB3ZWJraXRXZWJT
cmNSZXNldChzcmMpOworICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU3RvcHBlZCByZXF1ZXN0
Iik7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNH
ZXRTaXplKEdzdEJhc2VTcmMqIGJhc2VTcmMsIGd1aW50NjQqIHNpemUpCit7CisgICAgV2ViS2l0
V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhiYXNlU3JjKTsKKyAgICBXZWJLaXRXZWJTcmNQ
cml2YXRlKiBwcml2ID0gc3JjLT5wcml2OworCisgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJo
YXZlU2l6ZTogJXMsIHNpemU6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIGJvb2xGb3JQcmludGluZyhw
cml2LT5oYXZlU2l6ZSksIHByaXYtPnNpemUpOworICAgIGlmIChwcml2LT5oYXZlU2l6ZSkgewor
ICAgICAgICAqc2l6ZSA9IHByaXYtPnNpemU7CisgICAgICAgIHJldHVybiBUUlVFOwogICAgIH0K
LSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKKworICAgIHJldHVybiBGQUxTRTsKK30KKwor
c3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY0lzU2Vla2FibGUoR3N0QmFzZVNyYyogYmFzZVNy
YykKK3sKKyAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKGJhc2VTcmMpOwor
CisgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJTZWVrYWJsZTogJXMiLCBib29sRm9yUHJpbnRp
bmcoc3JjLT5wcml2LT5zZWVrYWJsZSkpOworICAgIHJldHVybiBzcmMtPnByaXYtPnNlZWthYmxl
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjRG9TZWVrKEdzdEJhc2VTcmMqIGJh
c2VTcmMsIEdzdFNlZ21lbnQqIHNlZ21lbnQpCit7CisgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBX
RUJLSVRfV0VCX1NSQyhiYXNlU3JjKTsKKyAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0g
c3JjLT5wcml2OworICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPnJlc3BvbnNlTG9jayk7CisK
KyAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlNlZWsgc2VnbWVudDogKCUiIEdfR1VJTlQ2NF9G
T1JNQVQgIi0lIiBHX0dVSU5UNjRfRk9STUFUICIpIiwgc2VnbWVudC0+c3RhcnQsIHNlZ21lbnQt
PnN0b3ApOworICAgIGlmIChwcml2LT5yZWFkUG9zaXRpb24gPT0gc2VnbWVudC0+c3RhcnQgJiYg
cHJpdi0+cmVxdWVzdGVkUG9zaXRpb24gPT0gcHJpdi0+cmVhZFBvc2l0aW9uICYmIHByaXYtPnN0
b3BQb3NpdGlvbiA9PSBzZWdtZW50LT5zdG9wKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qo
c3JjLCAiU2VlayB0byBjdXJyZW50IHJlYWQvZW5kIHBvc2l0aW9uIGFuZCBubyBzZWVrIHBlbmRp
bmciKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CiAgICAgfQogCi0gICAgcmV0dXJuIHJldDsKKyAg
ICBpZiAocHJpdi0+aGVhZGVyc1JlY2VpdmVkICYmICFwcml2LT5zZWVrYWJsZSkgeworICAgICAg
ICBHU1RfV0FSTklOR19PQkpFQ1Qoc3JjLCAiTm90IHNlZWthYmxlIik7CisgICAgICAgIHJldHVy
biBGQUxTRTsKKyAgICB9CisKKyAgICBpZiAoc2VnbWVudC0+cmF0ZSA8IDAuMCB8fCBzZWdtZW50
LT5mb3JtYXQgIT0gR1NUX0ZPUk1BVF9CWVRFUykgeworICAgICAgICBHU1RfV0FSTklOR19PQkpF
Q1Qoc3JjLCAiSW52YWxpZCBzZWVrIHNlZ21lbnQiKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOwor
ICAgIH0KKworICAgIGlmIChwcml2LT5oYXZlU2l6ZSAmJiBzZWdtZW50LT5zdGFydCA+PSBwcml2
LT5zaXplKQorICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1Qoc3JjLCAiUG90ZW50aWFsbHkgc2Vl
a2luZyBiZWhpbmQgZW5kIG9mIGZpbGUsIG1pZ2h0IEVPUyBpbW1lZGlhdGVseSIpOworCisgICAg
cHJpdi0+aXNTZWVraW5nID0gdHJ1ZTsKKyAgICBwcml2LT5yZXF1ZXN0ZWRQb3NpdGlvbiA9IHNl
Z21lbnQtPnN0YXJ0OworICAgIHByaXYtPnN0b3BQb3NpdGlvbiA9IHNlZ21lbnQtPnN0b3A7Cisg
ICAgcmV0dXJuIFRSVUU7CiB9CiAKLXN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNRdWVyeVdp
dGhQYXJlbnQoR3N0UGFkKiBwYWQsIEdzdE9iamVjdCogcGFyZW50LCBHc3RRdWVyeSogcXVlcnkp
CitzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjUXVlcnkoR3N0QmFzZVNyYyogYmFzZVNyYywg
R3N0UXVlcnkqIHF1ZXJ5KQogewotICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9T
UkMoR1NUX0VMRU1FTlQocGFyZW50KSk7CisgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRf
V0VCX1NSQyhiYXNlU3JjKTsKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5w
cml2OwogICAgIGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOwogCi0gICAgc3dpdGNoIChHU1RfUVVF
UllfVFlQRShxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9VUkk6IHsKKyAgICBpZiAoR1NU
X1FVRVJZX1RZUEUocXVlcnkpID09IEdTVF9RVUVSWV9VUkkpIHsKICAgICAgICAgZ3N0X3F1ZXJ5
X3NldF91cmkocXVlcnksIHByaXYtPm9yaWdpbmFsVVJJLmRhdGEoKSk7CiAgICAgICAgIGlmICgh
cHJpdi0+cmVkaXJlY3RlZFVSSS5pc051bGwoKSkKICAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRf
dXJpX3JlZGlyZWN0aW9uKHF1ZXJ5LCBwcml2LT5yZWRpcmVjdGVkVVJJLmRhdGEoKSk7CiAgICAg
ICAgIHJlc3VsdCA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEdTVF9R
VUVSWV9TQ0hFRFVMSU5HOiB7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmVzdWx0ID0g
R1NUX0JBU0VfU1JDX0NMQVNTKHBhcmVudF9jbGFzcyktPnF1ZXJ5KGJhc2VTcmMsIHF1ZXJ5KTsK
KworICAgIGlmIChHU1RfUVVFUllfVFlQRShxdWVyeSkgPT0gR1NUX1FVRVJZX1NDSEVEVUxJTkcp
IHsKICAgICAgICAgR3N0U2NoZWR1bGluZ0ZsYWdzIGZsYWdzOwogICAgICAgICBpbnQgbWluU2l6
ZSwgbWF4U2l6ZSwgYWxpZ247CiAKICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3NjaGVkdWxpbmco
cXVlcnksICZmbGFncywgJm1pblNpemUsICZtYXhTaXplLCAmYWxpZ24pOwogICAgICAgICBnc3Rf
cXVlcnlfc2V0X3NjaGVkdWxpbmcocXVlcnksIHN0YXRpY19jYXN0PEdzdFNjaGVkdWxpbmdGbGFn
cz4oZmxhZ3MgfCBHU1RfU0NIRURVTElOR19GTEFHX0JBTkRXSURUSF9MSU1JVEVEKSwgbWluU2l6
ZSwgbWF4U2l6ZSwgYWxpZ24pOwotICAgICAgICByZXN1bHQgPSBUUlVFOwotICAgICAgICBicmVh
azsKICAgICB9Ci0gICAgZGVmYXVsdDogewotICAgICAgICBHUmVmUHRyPEdzdFBhZD4gdGFyZ2V0
ID0gYWRvcHRHUmVmKGdzdF9naG9zdF9wYWRfZ2V0X3RhcmdldChHU1RfR0hPU1RfUEFEX0NBU1Qo
cGFkKSkpOwogCi0gICAgICAgIC8vIEZvcndhcmQgdGhlIHF1ZXJ5IHRvIHRoZSBwcm94eSB0YXJn
ZXQgcGFkLgotICAgICAgICBpZiAodGFyZ2V0KQotICAgICAgICAgICAgcmVzdWx0ID0gZ3N0X3Bh
ZF9xdWVyeSh0YXJnZXQuZ2V0KCksIHF1ZXJ5KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitz
dGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjVW5Mb2NrKEdzdEJhc2VTcmMqIGJhc2VTcmMpCit7
CisgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhiYXNlU3JjKTsKKyAgICBM
b2NrSG9sZGVyIGxvY2tlcihzcmMtPnByaXYtPnJlc3BvbnNlTG9jayk7CisKKyAgICBHU1RfREVC
VUdfT0JKRUNUKHNyYywgIlVubG9jayIpOworICAgIHNyYy0+cHJpdi0+Zmx1c2hpbmcgPSB0cnVl
OworICAgIHNyYy0+cHJpdi0+cmVzcG9uc2VDb25kaXRpb24ubm90aWZ5T25lKCk7CisgICAgcmV0
dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNVbkxvY2tTdG9wKEdz
dEJhc2VTcmMqIGJhc2VTcmMpCit7CisgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VC
X1NSQyhiYXNlU3JjKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihzcmMtPnByaXYtPnJlc3BvbnNl
TG9jayk7CisgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJVbmxvY2sgc3RvcCIpOworICAgIHNy
Yy0+cHJpdi0+Zmx1c2hpbmcgPSBmYWxzZTsKKworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0
aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gd2ViS2l0V2ViU3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVu
dCogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKK3sKKyAgICBXZWJLaXRXZWJT
cmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKGVsZW1lbnQpOworCisjaWYgR1NUX0NIRUNLX1ZFUlNJ
T04oMSwgMTQsIDApCisgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsIGdzdF9zdGF0ZV9jaGFuZ2Vf
Z2V0X25hbWUodHJhbnNpdGlvbikpOworI2VuZGlmCisgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7
CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEw6CisgICAgICAgIHdlYktp
dFdlYlNyY0Nsb3NlU2Vzc2lvbihzcmMpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogog
ICAgICAgICBicmVhazsKLSAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBy
ZXR1cm4gR1NUX0VMRU1FTlRfQ0xBU1MocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlKGVsZW1l
bnQsIHRyYW5zaXRpb24pOwogfQogCiBzdGF0aWMgYm9vbCB1cmxIYXNTdXBwb3J0ZWRQcm90b2Nv
bChjb25zdCBVUkwmIHVybCkKQEAgLTY3Miw2MSArODM0LDYgQEAgc3RhdGljIHZvaWQgd2ViS2l0
V2ViU3JjVXJpSGFuZGxlckluaXQoZ3BvaW50ZXIgZ0lmYWNlLCBncG9pbnRlcikKICAgICBpZmFj
ZS0+c2V0X3VyaSA9IHdlYktpdFdlYlNyY1NldFVyaTsKIH0KIAotc3RhdGljIHZvaWQgd2ViS2l0
V2ViU3JjTmVlZERhdGEoV2ViS2l0V2ViU3JjKiBzcmMpCi17Ci0gICAgV2ViS2l0V2ViU3JjUHJp
dmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKLQotICAgIEdTVF9MT0dfT0JKRUNUKHNyYywgIk5lZWQg
bW9yZSBkYXRhIik7Ci0KLSAgICBpZiAoIXByaXYtPnBhdXNlZCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIHByaXYtPnBhdXNlZCA9IGZhbHNlOwotCi0gICAgR1JlZlB0cjxXZWJLaXRXZWJTcmM+IHBy
b3RlY3RvciA9IFdURjo6ZW5zdXJlR1JlZihzcmMpOwotICAgIHByaXYtPm5vdGlmaWVyLT5ub3Rp
ZnkoTWFpblRocmVhZFNvdXJjZU5vdGlmaWNhdGlvbjo6TmVlZERhdGEsIFtwcm90ZWN0b3JdIHsg
fSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0Vub3VnaERhdGEoV2ViS2l0V2ViU3Jj
KiBzcmMpCi17Ci0gICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKLQot
ICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiSGF2ZSBlbm91Z2ggZGF0YSIpOwotCi0gICAgaWYg
KHByaXYtPnBhdXNlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIHByaXYtPnBhdXNlZCA9IHRydWU7
Ci0KLSAgICBHUmVmUHRyPFdlYktpdFdlYlNyYz4gcHJvdGVjdG9yID0gV1RGOjplbnN1cmVHUmVm
KHNyYyk7Ci0gICAgcHJpdi0+bm90aWZpZXItPm5vdGlmeShNYWluVGhyZWFkU291cmNlTm90aWZp
Y2F0aW9uOjpFbm91Z2hEYXRhLCBbcHJvdGVjdG9yXSB7Ci0gICAgICAgIFdlYktpdFdlYlNyY1By
aXZhdGUqIHByaXYgPSBwcm90ZWN0b3ItPnByaXY7Ci0gICAgICAgIGlmIChwcml2LT5yZXNvdXJj
ZSkKLSAgICAgICAgICAgIHByaXYtPnJlc291cmNlLT5zdG9wKCk7Ci0gICAgfSk7Ci19Ci0KLXN0
YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNTZWVrKFdlYktpdFdlYlNyYyogc3JjLCBndWludDY0
IG9mZnNldCkKLXsKLSAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2Owot
Ci0gICAgaWYgKG9mZnNldCA9PSBwcml2LT5vZmZzZXQgJiYgcHJpdi0+cmVxdWVzdGVkT2Zmc2V0
ID09IHByaXYtPm9mZnNldCkKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0KLSAgICBpZiAoIXByaXYt
PnNlZWthYmxlKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICBwcml2LT5pc1NlZWtpbmcg
PSB0cnVlOwotICAgIHByaXYtPnJlcXVlc3RlZE9mZnNldCA9IG9mZnNldDsKLQotICAgIEdTVF9E
RUJVR19PQkpFQ1Qoc3JjLCAiU2Vla2luZyB0byBvZmZzZXQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQs
IHNyYy0+cHJpdi0+cmVxdWVzdGVkT2Zmc2V0KTsKLQotICAgIEdSZWZQdHI8V2ViS2l0V2ViU3Jj
PiBwcm90ZWN0b3IgPSBXVEY6OmVuc3VyZUdSZWYoc3JjKTsKLSAgICBwcml2LT5ub3RpZmllci0+
bm90aWZ5KE1haW5UaHJlYWRTb3VyY2VOb3RpZmljYXRpb246OlNlZWssIFtwcm90ZWN0b3JdIHsK
LSAgICAgICAgd2ViS2l0V2ViU3JjU3RvcChwcm90ZWN0b3IuZ2V0KCkpOwotICAgICAgICB3ZWJL
aXRXZWJTcmNTdGFydChwcm90ZWN0b3IuZ2V0KCkpOwotICAgIH0pOwotICAgIHJldHVybiBUUlVF
OwotfQotCiB2b2lkIHdlYktpdFdlYlNyY1NldE1lZGlhUGxheWVyKFdlYktpdFdlYlNyYyogc3Jj
LCBXZWJDb3JlOjpNZWRpYVBsYXllciogcGxheWVyKQogewogICAgIEFTU0VSVChwbGF5ZXIpOwpA
QCAtNzQ5LDEwICs4NTYsMTEgQEAgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6On5DYWNo
ZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudCgpID0gZGVmYXVsdDsKIHZvaWQgQ2FjaGVkUmVzb3Vy
Y2VTdHJlYW1pbmdDbGllbnQ6OmNoZWNrVXBkYXRlQmxvY2tzaXplKHVpbnQ2NF90IGJ5dGVzUmVh
ZCkKIHsKICAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKG1fc3JjLmdldCgp
KTsKKyAgICBHc3RCYXNlU3JjKiBiYXNlU3JjID0gR1NUX0JBU0VfU1JDX0NBU1Qoc3JjKTsKICAg
ICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCi0gICAgdWludDY0X3Qg
YmxvY2tzaXplID0gZ3N0X2Jhc2Vfc3JjX2dldF9ibG9ja3NpemUoR1NUX0JBU0VfU1JDX0NBU1Qo
cHJpdi0+YXBwc3JjKSk7Ci0gICAgR1NUX0xPR19PQkpFQ1Qoc3JjLCAiQ2hlY2tpbmcgdG8gdXBk
YXRlIGJsb2Nrc2l6ZS4gUmVhZDolIiBQUkl1NjQgIiBibG9ja3NpemU6JSIgUFJJdTY0LCBieXRl
c1JlYWQsIGJsb2Nrc2l6ZSk7CisgICAgdWludDY0X3QgYmxvY2tzaXplID0gZ3N0X2Jhc2Vfc3Jj
X2dldF9ibG9ja3NpemUoYmFzZVNyYyk7CisgICAgR1NUX0xPR19PQkpFQ1Qoc3JjLCAiQ2hlY2tp
bmcgdG8gdXBkYXRlIGJsb2Nrc2l6ZS4gUmVhZDogJSIgUFJJdTY0ICIsIGN1cnJlbnQgYmxvY2tz
aXplOiAlIiBQUkl1NjQsIGJ5dGVzUmVhZCwgYmxvY2tzaXplKTsKIAogICAgIGlmIChieXRlc1Jl
YWQgPj0gYmxvY2tzaXplICogc19ncm93QmxvY2tzaXplTGltaXQpIHsKICAgICAgICAgbV9yZWR1
Y2VCbG9ja3NpemVDb3VudCA9IDA7CkBAIC03NjEsNyArODY5LDcgQEAgdm9pZCBDYWNoZWRSZXNv
dXJjZVN0cmVhbWluZ0NsaWVudDo6Y2hlY2tVcGRhdGVCbG9ja3NpemUodWludDY0X3QgYnl0ZXNS
ZWFkKQogICAgICAgICBpZiAobV9pbmNyZWFzZUJsb2Nrc2l6ZUNvdW50ID49IHNfZ3Jvd0Jsb2Nr
c2l6ZUNvdW50KSB7CiAgICAgICAgICAgICBibG9ja3NpemUgKj0gc19ncm93QmxvY2tzaXplRmFj
dG9yOwogICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJJbmNyZWFzZWQgYmxvY2tz
aXplIHRvICUiIFBSSXU2NCwgYmxvY2tzaXplKTsKLSAgICAgICAgICAgIGdzdF9iYXNlX3NyY19z
ZXRfYmxvY2tzaXplKEdTVF9CQVNFX1NSQ19DQVNUKHByaXYtPmFwcHNyYyksIGJsb2Nrc2l6ZSk7
CisgICAgICAgICAgICBnc3RfYmFzZV9zcmNfc2V0X2Jsb2Nrc2l6ZShiYXNlU3JjLCBibG9ja3Np
emUpOwogICAgICAgICAgICAgbV9pbmNyZWFzZUJsb2Nrc2l6ZUNvdW50ID0gMDsKICAgICAgICAg
fQogICAgIH0gZWxzZSBpZiAoYnl0ZXNSZWFkIDwgYmxvY2tzaXplICogc19yZWR1Y2VCbG9ja3Np
emVMaW1pdCkgewpAQCAtNzcyLDcgKzg4MCw3IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1p
bmdDbGllbnQ6OmNoZWNrVXBkYXRlQmxvY2tzaXplKHVpbnQ2NF90IGJ5dGVzUmVhZCkKICAgICAg
ICAgICAgIGJsb2Nrc2l6ZSAqPSBzX3JlZHVjZUJsb2Nrc2l6ZUZhY3RvcjsKICAgICAgICAgICAg
IGJsb2Nrc2l6ZSA9IHN0ZDo6bWF4KGJsb2Nrc2l6ZSwgcHJpdi0+bWluaW11bUJsb2Nrc2l6ZSk7
CiAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIkRlY3JlYXNlZCBibG9ja3NpemUg
dG8gJSIgUFJJdTY0LCBibG9ja3NpemUpOwotICAgICAgICAgICAgZ3N0X2Jhc2Vfc3JjX3NldF9i
bG9ja3NpemUoR1NUX0JBU0VfU1JDX0NBU1QocHJpdi0+YXBwc3JjKSwgYmxvY2tzaXplKTsKKyAg
ICAgICAgICAgIGdzdF9iYXNlX3NyY19zZXRfYmxvY2tzaXplKGJhc2VTcmMsIGJsb2Nrc2l6ZSk7
CiAgICAgICAgICAgICBtX3JlZHVjZUJsb2Nrc2l6ZUNvdW50ID0gMDsKICAgICAgICAgfQogICAg
IH0gZWxzZSB7CkBAIC03OTgsNDggKzkwNiw0NCBAQCB2b2lkIENhY2hlZFJlc291cmNlU3RyZWFt
aW5nQ2xpZW50OjpyZXNwb25zZVJlY2VpdmVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNvbgog
CiAgICAgaWYgKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPj0gNDAwKSB7CiAgICAgICAgIEdT
VF9FTEVNRU5UX0VSUk9SKHNyYywgUkVTT1VSQ0UsIFJFQUQsICgiUmVjZWl2ZWQgJWQgSFRUUCBl
cnJvciBjb2RlIiwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSksIChudWxscHRyKSk7Ci0gICAg
ICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0ocHJpdi0+YXBwc3JjKTsKLSAgICAgICAgd2Vi
S2l0V2ViU3JjU3RvcChzcmMpOwotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoU2hv
dWxkQ29udGludWU6Ok5vKTsKLSAgICB9Ci0KLSAgICBpZiAocHJpdi0+aXNTZWVraW5nKSB7Ci0g
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2VlayBpbiBwcm9ncmVzcywgaWdub3Jpbmcg
cmVzcG9uc2UiKTsKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKFNob3VsZENvbnRp
bnVlOjpZZXMpOworICAgICAgICBwcml2LT5oYXZlRU9TID0gdHJ1ZTsKKyAgICAgICAgd2ViS2l0
V2ViU3JjU3RvcChHU1RfQkFTRV9TUkNfQ0FTVChzcmMpKTsKKyAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoU2hvdWxkQ29udGludWU6Ok5vKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmIChwcml2LT5yZXF1ZXN0ZWRPZmZzZXQpIHsKKyAgICBpZiAocHJpdi0+cmVxdWVzdGVkUG9z
aXRpb24pIHsKICAgICAgICAgLy8gU2Vla2luZyAuLi4gd2UgZXhwZWN0IGEgMjA2ID09IFBBUlRJ
QUxfQ09OVEVOVAogICAgICAgICBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA9PSAyMDAp
IHsKICAgICAgICAgICAgIC8vIFJhbmdlIHJlcXVlc3QgZGlkbid0IGhhdmUgYSByYW5nZWQgcmVz
cG9uc2U7IHJlc2V0dGluZyBvZmZzZXQuCi0gICAgICAgICAgICBwcml2LT5vZmZzZXQgPSAwOwor
ICAgICAgICAgICAgcHJpdi0+cmVhZFBvc2l0aW9uID0gMDsKICAgICAgICAgfSBlbHNlIGlmIChy
ZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpICE9IDIwNikgewogICAgICAgICAgICAgLy8gUmFuZ2Ug
cmVxdWVzdCBjb21wbGV0ZWx5IGZhaWxlZC4KICAgICAgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9S
KHNyYywgUkVTT1VSQ0UsIFJFQUQsICgiUmVjZWl2ZWQgdW5leHBlY3RlZCAlZCBIVFRQIHN0YXR1
cyBjb2RlIiwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSksIChudWxscHRyKSk7Ci0gICAgICAg
ICAgICBnc3RfYXBwX3NyY19lbmRfb2Zfc3RyZWFtKHByaXYtPmFwcHNyYyk7Ci0gICAgICAgICAg
ICB3ZWJLaXRXZWJTcmNTdG9wKHNyYyk7Ci0gICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhh
bmRsZXIoU2hvdWxkQ29udGludWU6Ok5vKTsKKyAgICAgICAgICAgIHByaXYtPmhhdmVFT1MgPSB0
cnVlOworICAgICAgICAgICAgd2ViS2l0V2ViU3JjU3RvcChHU1RfQkFTRV9TUkNfQ0FTVChzcmMp
KTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFNob3VsZENvbnRpbnVlOjpObyk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHNyYywgIlJhbmdlIHJlcXVlc3Qgc3VjY2VlZGVkIik7CisgICAgICAgICAgICBw
cml2LT5pc1NlZWtpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIHByaXYtPndhc1NlZWtpbmcgPSB0
cnVlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgbG9uZyBsb25nIGxlbmd0aCA9IHJlc3BvbnNl
LmV4cGVjdGVkQ29udGVudExlbmd0aCgpOwotICAgIGlmIChsZW5ndGggPiAwICYmIHByaXYtPnJl
cXVlc3RlZE9mZnNldCAmJiByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpID09IDIwNikKLSAgICAg
ICAgbGVuZ3RoICs9IHByaXYtPnJlcXVlc3RlZE9mZnNldDsKKyAgICBpZiAobGVuZ3RoID4gMCAm
JiBwcml2LT5yZXF1ZXN0ZWRQb3NpdGlvbiAmJiByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpID09
IDIwNikKKyAgICAgICAgbGVuZ3RoICs9IHByaXYtPnJlcXVlc3RlZFBvc2l0aW9uOwogCiAgICAg
cHJpdi0+c2Vla2FibGUgPSBsZW5ndGggPiAwICYmIGdfYXNjaWlfc3RyY2FzZWNtcCgibm9uZSIs
IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6QWNjZXB0UmFuZ2VzKS51
dGY4KCkuZGF0YSgpKTsKIAotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2l6ZTogJWxsZCwg
c2Vla2FibGU6ICVzIiwgbGVuZ3RoLCBwcml2LT5zZWVrYWJsZSA/ICJ5ZXMiIDogIm5vIik7Ci0g
ICAgLy8gbm90aWZ5IHNpemUvZHVyYXRpb24KKyAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlNp
emU6ICVsbGQsIHNlZWthYmxlOiAlcyIsIGxlbmd0aCwgYm9vbEZvclByaW50aW5nKHByaXYtPnNl
ZWthYmxlKSk7CiAgICAgaWYgKGxlbmd0aCA+IDApIHsKICAgICAgICAgaWYgKCFwcml2LT5oYXZl
U2l6ZSB8fCAoc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihwcml2LT5zaXplKSAhPSBsZW5ndGgpKSB7
Ci0gICAgICAgICAgICBwcml2LT5oYXZlU2l6ZSA9IFRSVUU7CisgICAgICAgICAgICBwcml2LT5o
YXZlU2l6ZSA9IHRydWU7CiAgICAgICAgICAgICBwcml2LT5zaXplID0gbGVuZ3RoOwotICAgICAg
ICAgICAgZ3N0X2FwcF9zcmNfc2V0X3NpemUocHJpdi0+YXBwc3JjLCBsZW5ndGgpOworICAgICAg
ICAgICAgcHJpdi0+ZHVyYXRpb25TZXQgPSBmYWxzZTsKICAgICAgICAgfQotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGdzdF9hcHBfc3JjX3NldF9zaXplKHByaXYtPmFwcHNyYywgLTEpOwotICAgICAg
ICBpZiAoIXByaXYtPnNlZWthYmxlKQotICAgICAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X3N0cmVh
bV90eXBlKHByaXYtPmFwcHNyYywgR1NUX0FQUF9TVFJFQU1fVFlQRV9TVFJFQU0pOwogICAgIH0K
IAogICAgIC8vIFNpZ25hbCB0byBkb3duc3RyZWFtIGlmIHRoaXMgaXMgYW4gSWNlY2FzdCBzdHJl
YW0uCkBAIC04NTQsMTE4ICs5NTgsODggQEAgdm9pZCBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0Ns
aWVudDo6cmVzcG9uc2VSZWNlaXZlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCBjb24KICAgICAg
ICAgICAgIFN0cmluZyBjb250ZW50VHlwZSA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQ
SGVhZGVyTmFtZTo6Q29udGVudFR5cGUpOwogICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChz
cmMsICJSZXNwb25zZSBDb250ZW50VHlwZTogJXMiLCBjb250ZW50VHlwZS51dGY4KCkuZGF0YSgp
KTsKICAgICAgICAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUoY2Fwcy5nZXQoKSwgImNvbnRlbnQt
dHlwZSIsIEdfVFlQRV9TVFJJTkcsIGNvbnRlbnRUeXBlLnV0ZjgoKS5kYXRhKCksIG51bGxwdHIp
OwotCi0gICAgICAgICAgICBnc3RfYXBwX3NyY19zZXRfc3RyZWFtX3R5cGUocHJpdi0+YXBwc3Jj
LCBHU1RfQVBQX1NUUkVBTV9UWVBFX1NUUkVBTSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBn
c3RfYXBwX3NyY19zZXRfY2Fwcyhwcml2LT5hcHBzcmMsIGNhcHMuZ2V0KCkpOwotCi0gICAgLy8g
RW1pdCBhIEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTV9TVElDS1kgZXZlbnQgYW5kIG1lc3Nh
Z2UgdG8gbGV0Ci0gICAgLy8gR1N0cmVhbWVyIGtub3cgYWJvdXQgdGhlIEhUVFAgaGVhZGVycyBz
ZW50IGFuZCByZWNlaXZlZC4KLSAgICBHc3RTdHJ1Y3R1cmUqIGh0dHBIZWFkZXJzID0gZ3N0X3N0
cnVjdHVyZV9uZXdfZW1wdHkoImh0dHAtaGVhZGVycyIpOwotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0
KGh0dHBIZWFkZXJzLCAidXJpIiwgR19UWVBFX1NUUklORywgcHJpdi0+b3JpZ2luYWxVUkkuZGF0
YSgpLAotICAgICAgICAiaHR0cC1zdGF0dXMtY29kZSIsIEdfVFlQRV9VSU5ULCByZXNwb25zZS5o
dHRwU3RhdHVzQ29kZSgpLCBudWxscHRyKTsKLSAgICBpZiAoIXByaXYtPnJlZGlyZWN0ZWRVUkku
aXNOdWxsKCkpCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGh0dHBIZWFkZXJzLCAicmVkaXJl
Y3Rpb24tdXJpIiwgR19UWVBFX1NUUklORywgcHJpdi0+cmVkaXJlY3RlZFVSSS5kYXRhKCksIG51
bGxwdHIpOwotICAgIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBoZWFkZXJzKGdzdF9zdHJ1Y3R1
cmVfbmV3X2VtcHR5KCJyZXF1ZXN0LWhlYWRlcnMiKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBo
ZWFkZXIgOiBtX3JlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygpKQotICAgICAgICBnc3Rfc3RydWN0
dXJlX3NldChoZWFkZXJzLmdldCgpLCBoZWFkZXIua2V5LnV0ZjgoKS5kYXRhKCksIEdfVFlQRV9T
VFJJTkcsIGhlYWRlci52YWx1ZS51dGY4KCkuZGF0YSgpLCBudWxscHRyKTsKLSAgICBHU1RfREVC
VUdfT0JKRUNUKHNyYywgIlJlcXVlc3QgaGVhZGVycyBnb2luZyBkb3duc3RyZWFtOiAlIiBHU1Rf
UFRSX0ZPUk1BVCwgaGVhZGVycy5nZXQoKSk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9zZXQoaHR0cEhl
YWRlcnMsICJyZXF1ZXN0LWhlYWRlcnMiLCBHU1RfVFlQRV9TVFJVQ1RVUkUsIGhlYWRlcnMuZ2V0
KCksIG51bGxwdHIpOwotICAgIGhlYWRlcnMucmVzZXQoZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHko
InJlc3BvbnNlLWhlYWRlcnMiKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiByZXNw
b25zZS5odHRwSGVhZGVyRmllbGRzKCkpCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGhlYWRl
cnMuZ2V0KCksIGhlYWRlci5rZXkudXRmOCgpLmRhdGEoKSwgR19UWVBFX1NUUklORywgaGVhZGVy
LnZhbHVlLnV0ZjgoKS5kYXRhKCksIG51bGxwdHIpOwotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGh0
dHBIZWFkZXJzLCAicmVzcG9uc2UtaGVhZGVycyIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgaGVhZGVy
cy5nZXQoKSwgbnVsbHB0cik7Ci0gICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSZXNwb25zZSBo
ZWFkZXJzIGdvaW5nIGRvd25zdHJlYW06ICUiIEdTVF9QVFJfRk9STUFULCBoZWFkZXJzLmdldCgp
KTsKLQotICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVF9DQVNUKHNyYyks
IGdzdF9tZXNzYWdlX25ld19lbGVtZW50KEdTVF9PQkpFQ1RfQ0FTVChzcmMpLAotICAgICAgICBn
c3Rfc3RydWN0dXJlX2NvcHkoaHR0cEhlYWRlcnMpKSk7Ci0gICAgZ3N0X3BhZF9wdXNoX2V2ZW50
KEdTVF9CQVNFX1NSQ19QQUQocHJpdi0+YXBwc3JjKSwgZ3N0X2V2ZW50X25ld19jdXN0b20oR1NU
X0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX1NUSUNLWSwgaHR0cEhlYWRlcnMpKTsKLSAgICAKKyAg
ICBpZiAoY2FwcykgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlNldCBjYXBzIHRv
ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzLmdldCgpKTsKKyAgICAgICAgZ3N0X2Jhc2Vfc3JjX3Nl
dF9jYXBzKEdTVF9CQVNFX1NSQ19DQVNUKHNyYyksIGNhcHMuZ2V0KCkpOworICAgIH0KKworICAg
IHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIocHJpdi0+cmVzcG9uc2VMb2NrKTsKKworICAg
ICAgICAvLyBFbWl0IGEgR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX1NUSUNLWSBldmVudCBh
bmQgbWVzc2FnZSB0byBsZXQKKyAgICAgICAgLy8gR1N0cmVhbWVyIGtub3cgYWJvdXQgdGhlIEhU
VFAgaGVhZGVycyBzZW50IGFuZCByZWNlaXZlZC4KKyAgICAgICAgR3N0U3RydWN0dXJlKiBodHRw
SGVhZGVycyA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCJodHRwLWhlYWRlcnMiKTsKKyAgICAg
ICAgZ3N0X3N0cnVjdHVyZV9zZXQoaHR0cEhlYWRlcnMsICJ1cmkiLCBHX1RZUEVfU1RSSU5HLCBw
cml2LT5vcmlnaW5hbFVSSS5kYXRhKCksCisgICAgICAgICAgICAiaHR0cC1zdGF0dXMtY29kZSIs
IEdfVFlQRV9VSU5ULCByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpLCBudWxscHRyKTsKKyAgICAg
ICAgaWYgKCFwcml2LT5yZWRpcmVjdGVkVVJJLmlzTnVsbCgpKQorICAgICAgICAgICAgZ3N0X3N0
cnVjdHVyZV9zZXQoaHR0cEhlYWRlcnMsICJyZWRpcmVjdGlvbi11cmkiLCBHX1RZUEVfU1RSSU5H
LCBwcml2LT5yZWRpcmVjdGVkVVJJLmRhdGEoKSwgbnVsbHB0cik7CisgICAgICAgIEdVbmlxdWVQ
dHI8R3N0U3RydWN0dXJlPiBoZWFkZXJzKGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCJyZXF1ZXN0
LWhlYWRlcnMiKSk7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgaGVhZGVyIDogbV9yZXF1ZXN0
Lmh0dHBIZWFkZXJGaWVsZHMoKSkKKyAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGhlYWRl
cnMuZ2V0KCksIGhlYWRlci5rZXkudXRmOCgpLmRhdGEoKSwgR19UWVBFX1NUUklORywgaGVhZGVy
LnZhbHVlLnV0ZjgoKS5kYXRhKCksIG51bGxwdHIpOworICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHNyYywgIlJlcXVlc3QgaGVhZGVycyBnb2luZyBkb3duc3RyZWFtOiAlIiBHU1RfUFRSX0ZPUk1B
VCwgaGVhZGVycy5nZXQoKSk7CisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGh0dHBIZWFkZXJz
LCAicmVxdWVzdC1oZWFkZXJzIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBoZWFkZXJzLmdldCgpLCBu
dWxscHRyKTsKKyAgICAgICAgaGVhZGVycy5yZXNldChnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgi
cmVzcG9uc2UtaGVhZGVycyIpKTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiBy
ZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkpCisgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3Nl
dChoZWFkZXJzLmdldCgpLCBoZWFkZXIua2V5LnV0ZjgoKS5kYXRhKCksIEdfVFlQRV9TVFJJTkcs
IGhlYWRlci52YWx1ZS51dGY4KCkuZGF0YSgpLCBudWxscHRyKTsKKyAgICAgICAgZ3N0X3N0cnVj
dHVyZV9zZXQoaGVhZGVycy5nZXQoKSwgaHR0cEhlYWRlck5hbWVTdHJpbmcoSFRUUEhlYWRlck5h
bWU6OkNvbnRlbnRMZW5ndGgpLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgR19UWVBFX0lOVCwg
bGVuZ3RoLCBudWxscHRyKTsKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaHR0cEhlYWRlcnMs
ICJyZXNwb25zZS1oZWFkZXJzIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBoZWFkZXJzLmdldCgpLCBu
dWxscHRyKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSZXNwb25zZSBoZWFkZXJz
IGdvaW5nIGRvd25zdHJlYW06ICUiIEdTVF9QVFJfRk9STUFULCBoZWFkZXJzLmdldCgpKTsKKwor
ICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlRfQ0FTVChzcmMpLCBn
c3RfbWVzc2FnZV9uZXdfZWxlbWVudChHU1RfT0JKRUNUX0NBU1Qoc3JjKSwKKyAgICAgICAgICAg
IGdzdF9zdHJ1Y3R1cmVfY29weShodHRwSGVhZGVycykpKTsKKworICAgICAgICBwcml2LT5odHRw
SGVhZGVyc0V2ZW50ID0gYWRvcHRHUmVmKGdzdF9ldmVudF9uZXdfY3VzdG9tKEdTVF9FVkVOVF9D
VVNUT01fRE9XTlNUUkVBTV9TVElDS1ksIGh0dHBIZWFkZXJzKSk7CisgICAgICAgIHByaXYtPmhl
YWRlcnNSZWNlaXZlZCA9IHRydWU7CisgICAgICAgIHByaXYtPmhlYWRlcnNDb25kaXRpb24ubm90
aWZ5T25lKCk7CisgICAgfQogICAgIGNvbXBsZXRpb25IYW5kbGVyKFNob3VsZENvbnRpbnVlOjpZ
ZXMpOwogfQogCiB2b2lkIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpkYXRhUmVjZWl2
ZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkK
IHsKICAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKG1fc3JjLmdldCgpKTsK
KyAgICBHc3RCYXNlU3JjKiBiYXNlU3JjID0gR1NUX0JBU0VfU1JDX0NBU1Qoc3JjKTsKICAgICBX
ZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCi0gICAgaWYgKHByaXYtPmlz
U2Vla2luZykgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlNlZWsgaW4gcHJvZ3Jl
c3MsIGlnbm9yaW5nIGRhdGEiKTsKLSAgICAgICAgcmV0dXJuOworICAgIEdTVF9MT0dfT0JKRUNU
KHNyYywgIkhhdmUgJWQgYnl0ZXMgb2YgZGF0YSIsIGxlbmd0aCk7CisgICAgTG9ja0hvbGRlciBs
b2NrZXIocHJpdi0+cmVzcG9uc2VMb2NrKTsKKworICAgIGd1aW50NjQgbmV3UG9zaXRpb24gPSBw
cml2LT5yZWFkUG9zaXRpb24gKyBsZW5ndGg7CisgICAgaWYgKEdfTElLRUxZIChwcml2LT5yZXF1
ZXN0ZWRQb3NpdGlvbiA9PSBwcml2LT5yZWFkUG9zaXRpb24pKQorICAgICAgICBwcml2LT5yZXF1
ZXN0ZWRQb3NpdGlvbiA9IG5ld1Bvc2l0aW9uOworICAgIHByaXYtPnJlYWRQb3NpdGlvbiA9IG5l
d1Bvc2l0aW9uOworCisgICAgZ3VpbnQ2NCBuZXdTaXplID0gMDsKKyAgICBpZiAocHJpdi0+aGF2
ZVNpemUgJiYgKG5ld1Bvc2l0aW9uID4gcHJpdi0+c2l6ZSkpIHsKKyAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChzcmMsICJHb3QgcG9zaXRpb24gcHJldmlvdXMgZXN0aW1hdGVkIGNvbnRlbnQgc2l6
ZSAoJSIgR19HSU5UNjRfRk9STUFUICIgPiAlIiBHX0dJTlQ2NF9GT1JNQVQgIikiLCBuZXdQb3Np
dGlvbiwgcHJpdi0+c2l6ZSk7CisgICAgICAgIG5ld1NpemUgPSBuZXdQb3NpdGlvbjsKKyAgICB9
IGVsc2UgaWYgKCFwcml2LT5oYXZlU2l6ZSkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNy
YywgIkdvdCBpbml0aWFsIHJlc3BvbnNlIHdpdGhvdXQgQ29udGVudC1MZW5ndGgsIGFzc3VtaW5n
IHJlc3BvbnNlIHNpemUgYXMgZHVyYXRpb24uIik7CisgICAgICAgIG5ld1NpemUgPSBsZW5ndGg7
CisgICAgICAgIHByaXYtPmhhdmVTaXplID0gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAocHJpdi0+
b2Zmc2V0IDwgcHJpdi0+cmVxdWVzdGVkT2Zmc2V0KSB7Ci0gICAgICAgIC8vIFJhbmdlIHJlcXVl
c3QgZmFpbGVkOyBzZWVraW5nIG1hbnVhbGx5LgotICAgICAgICBpZiAocHJpdi0+b2Zmc2V0ICsg
bGVuZ3RoIDw9IHByaXYtPnJlcXVlc3RlZE9mZnNldCkgewotICAgICAgICAgICAgLy8gRGlzY2Fy
ZCBhbGwgdGhlIGJ1ZmZlcnMgY29taW5nIGJlZm9yZSB0aGUgcmVxdWVzdGVkIHNlZWsgcG9zaXRp
b24uCi0gICAgICAgICAgICBwcml2LT5vZmZzZXQgKz0gbGVuZ3RoOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHByaXYtPm9mZnNldCArIGxlbmd0aCA+IHBy
aXYtPnJlcXVlc3RlZE9mZnNldCkgewotICAgICAgICAgICAgZ3VpbnQ2NCBvZmZzZXQgPSBwcml2
LT5yZXF1ZXN0ZWRPZmZzZXQgLSBwcml2LT5vZmZzZXQ7Ci0gICAgICAgICAgICBkYXRhICs9IG9m
ZnNldDsKLSAgICAgICAgICAgIGxlbmd0aCAtPSBvZmZzZXQ7Ci0gICAgICAgICAgICBwcml2LT5v
ZmZzZXQgPSBwcml2LT5yZXF1ZXN0ZWRPZmZzZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2
LT5yZXF1ZXN0ZWRPZmZzZXQgPSAwOworICAgIGlmIChuZXdTaXplKSB7CisgICAgICAgIHByaXYt
PnNpemUgPSBuZXdTaXplOworICAgICAgICBiYXNlU3JjLT5zZWdtZW50LmR1cmF0aW9uID0gcHJp
di0+c2l6ZTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKEdTVF9FTEVNRU5UX0NB
U1Qoc3JjKSwgZ3N0X21lc3NhZ2VfbmV3X2R1cmF0aW9uX2NoYW5nZWQoR1NUX09CSkVDVF9DQVNU
KHNyYykpKTsKICAgICB9CiAKICAgICBjaGVja1VwZGF0ZUJsb2Nrc2l6ZShsZW5ndGgpOwogCi0g
ICAgdWludDY0X3Qgc3RhcnRpbmdPZmZzZXQgPSBwcml2LT5vZmZzZXQ7Ci0KLSAgICBpZiAocHJp
di0+cmVxdWVzdGVkT2Zmc2V0ID09IHByaXYtPm9mZnNldCkKLSAgICAgICAgcHJpdi0+cmVxdWVz
dGVkT2Zmc2V0ICs9IGxlbmd0aDsKLSAgICBwcml2LT5vZmZzZXQgKz0gbGVuZ3RoOwotICAgIC8v
IHByaXYtPnNpemUgPT0gMCBpZiByZWNlaXZlZCBsZW5ndGggb24gZGlkUmVjZWl2ZVJlc3BvbnNl
IDwgMC4KLSAgICBpZiAocHJpdi0+c2l6ZSA+IDAgJiYgcHJpdi0+b2Zmc2V0ID4gcHJpdi0+c2l6
ZSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlVwZGF0aW5nIGludGVybmFsIHNp
emUgZnJvbSAlIiBHX0dVSU5UNjRfRk9STUFUICIgdG8gJSIgR19HVUlOVDY0X0ZPUk1BVCwgcHJp
di0+c2l6ZSwgcHJpdi0+b2Zmc2V0KTsKLSAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X3NpemUocHJp
di0+YXBwc3JjLCBwcml2LT5vZmZzZXQpOwotICAgICAgICBwcml2LT5zaXplID0gcHJpdi0+b2Zm
c2V0OwotICAgIH0KLQotICAgIC8vIE5vdyBzcGxpdCB0aGUgcmVjdidkIGJ1ZmZlciBpbnRvIGJ1
ZmZlcnMgdGhhdCBhcmUgb2YgYSBzaXplIGJhc2VzcmMgc3VnZ2VzdHMuIEl0IGlzIGltcG9ydGFu
dCBub3QKLSAgICAvLyB0byBwdXNoIGJ1ZmZlcnMgdGhhdCBhcmUgdG9vIGxhcmdlLCBvdGhlcndp
c2UgaW5jb3JyZWN0IGJ1ZmZlcmluZyBtZXNzYWdlcyBjYW4gYmUgc2VudCBmcm9tIHRoZQotICAg
IC8vIHBpcGVsaW5lLgotICAgIHVpbnQ2NF90IGJ1ZmZlclNpemUgPSBzdGF0aWNfY2FzdDx1aW50
NjRfdD4obGVuZ3RoKTsKLSAgICB1aW50NjRfdCBibG9ja1NpemUgPSBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oZ3N0X2Jhc2Vfc3JjX2dldF9ibG9ja3NpemUoR1NUX0JBU0VfU1JDX0NBU1QocHJpdi0+
YXBwc3JjKSkpOwotICAgIEdTVF9MT0dfT0JKRUNUKHNyYywgIlNwbGl0dGluZyB0aGUgcmVjZWl2
ZWQgYnVmZmVyIGludG8gJSIgUFJJdTY0ICIgYmxvY2tzIiwgYnVmZmVyU2l6ZSAvIGJsb2NrU2l6
ZSk7Ci0gICAgZm9yICh1aW50NjRfdCBjdXJyZW50T2Zmc2V0ID0gMDsgY3VycmVudE9mZnNldCA8
IGJ1ZmZlclNpemU7IGN1cnJlbnRPZmZzZXQgKz0gYmxvY2tTaXplKSB7Ci0gICAgICAgIHVpbnQ2
NF90IHN1YkJ1ZmZlck9mZnNldCA9IHN0YXJ0aW5nT2Zmc2V0ICsgY3VycmVudE9mZnNldDsKLSAg
ICAgICAgdWludDY0X3QgY3VycmVudE9mZnNldFNpemUgPSBzdGQ6Om1pbihibG9ja1NpemUsIGJ1
ZmZlclNpemUgLSBjdXJyZW50T2Zmc2V0KTsKLQotICAgICAgICBHc3RCdWZmZXIqIHN1YkJ1ZmZl
ciA9IGdzdF9idWZmZXJfbmV3X3dyYXBwZWQoZ19tZW1kdXAoZGF0YSArIGN1cnJlbnRPZmZzZXQs
IGN1cnJlbnRPZmZzZXRTaXplKSwgY3VycmVudE9mZnNldFNpemUpOwotICAgICAgICBpZiAoVU5M
SUtFTFkoIXN1YkJ1ZmZlcikpIHsKLSAgICAgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SKHNyYywg
Q09SRSwgRkFJTEVELCAoIkZhaWxlZCB0byBhbGxvY2F0ZSBzdWItYnVmZmVyIiksIChudWxscHRy
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIEdTVF9UUkFDRV9P
QkpFQ1Qoc3JjLCAiU3ViLWJ1ZmZlciBib3VuZHM6ICUiIFBSSXU2NCAiIC0tICUiIFBSSXU2NCwg
c3ViQnVmZmVyT2Zmc2V0LCBzdWJCdWZmZXJPZmZzZXQgKyBjdXJyZW50T2Zmc2V0U2l6ZSk7Ci0g
ICAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUKHN1YkJ1ZmZlcikgPSBzdWJCdWZmZXJPZmZzZXQ7Ci0g
ICAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUX0VORChzdWJCdWZmZXIpID0gc3ViQnVmZmVyT2Zmc2V0
ICsgY3VycmVudE9mZnNldFNpemU7CisgICAgaWYgKCFwcml2LT5yZXNwb25zZVJlY2VpdmVkKQor
ICAgICAgICBwcml2LT5yZXNwb25zZVJlY2VpdmVkID0gdHJ1ZTsKKyAgICBwcml2LT5yZXNwb25z
ZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKIAotICAgICAgICBpZiAocHJpdi0+aXNTZWVraW5nKSB7
Ci0gICAgICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgIlN0b3BwaW5nIGJ1ZmZlciBhcHBl
bmRzIGR1ZSB0byBzZWVrIik7Ci0gICAgICAgICAgICAvLyBBIHNlZWsgaGFzIGhhcHBlbmVkIGlu
IHRoZSBtaWRkbGUgb2YgdXMgYnJlYWtpbmcgdGhlCi0gICAgICAgICAgICAvLyBpbmNvbWluZyBk
YXRhIHVwIGZyb20gYSBwcmV2aW91cyByZXF1ZXN0LiBTdG9wIHB1c2hpbmcKLSAgICAgICAgICAg
IC8vIGJ1ZmZlcnMgdGhhdCBhcmUgbm93IGZyb20gdGhlIGluY29ycmVjdCBvZmZzZXQuCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEl0IG1heSBiZSB0ZW1wdGlu
ZyB0byB1c2UgYSBHc3RCdWZmZXJMaXN0IGhlcmUsIGJ1dCBub3RlCi0gICAgICAgIC8vIHRoYXQg
dGhlcmUgaXMgYSByYWNlIGNvbmRpdGlvbiBpbiBHc3REb3dubG9hZEJ1ZmZlciBkdXJpbmcKLSAg
ICAgICAgLy8gc2VlayBmbHVzaGVzIHRoYXQgY2FuIGNhdXNlIGRlY29kZXJzIHRvIHJlYWQgYXQg
aW5jb3JyZWN0Ci0gICAgICAgIC8vIG9mZnNldHMuCi0gICAgICAgIEdzdEZsb3dSZXR1cm4gcmV0
ID0gZ3N0X2FwcF9zcmNfcHVzaF9idWZmZXIocHJpdi0+YXBwc3JjLCBzdWJCdWZmZXIpOwotCi0g
ICAgICAgIGlmIChVTkxJS0VMWShyZXQgIT0gR1NUX0ZMT1dfT0sgJiYgcmV0ICE9IEdTVF9GTE9X
X0VPUyAmJiByZXQgIT0gR1NUX0ZMT1dfRkxVU0hJTkcpKSB7Ci0gICAgICAgICAgICBHU1RfRUxF
TUVOVF9FUlJPUihzcmMsIENPUkUsIEZBSUxFRCwgKG51bGxwdHIpLCAobnVsbHB0cikpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgYWRh
cHRlckxvY2tlcihwcml2LT5hZGFwdGVyTG9jayk7CisgICAgICAgIEdzdEJ1ZmZlciogYnVmZmVy
ID0gZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZChnX21lbWR1cChkYXRhLCBsZW5ndGgpLCBsZW5ndGgp
OworICAgICAgICBwcml2LT5xdWV1ZVNpemUgKz0gbGVuZ3RoOworICAgICAgICBnc3RfYWRhcHRl
cl9wdXNoKHByaXYtPmFkYXB0ZXIuZ2V0KCksIGJ1ZmZlcik7CisgICAgICAgIHByaXYtPmFkYXB0
ZXJDb25kaXRpb24ubm90aWZ5T25lKCk7CiAgICAgfQogfQogCkBAIC05NzMsOCArMTA0Nyw4IEBA
IHZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmFjY2Vzc0NvbnRyb2xDaGVja0Zh
aWxlZChQbGF0Zm9ybU1lZGlhUmVzb3VyCiB7CiAgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJL
SVRfV0VCX1NSQyhtX3NyYy5nZXQoKSk7CiAgICAgR1NUX0VMRU1FTlRfRVJST1Ioc3JjLCBSRVNP
VVJDRSwgUkVBRCwgKCIlcyIsIGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkudXRmOCgpLmRh
dGEoKSksIChudWxscHRyKSk7Ci0gICAgZ3N0X2FwcF9zcmNfZW5kX29mX3N0cmVhbShzcmMtPnBy
aXYtPmFwcHNyYyk7Ci0gICAgd2ViS2l0V2ViU3JjU3RvcChzcmMpOworICAgIHNyYy0+cHJpdi0+
aGF2ZUVPUyA9IHRydWU7CisgICAgd2ViS2l0V2ViU3JjU3RvcChHU1RfQkFTRV9TUkNfQ0FTVChz
cmMpKTsKIH0KIAogdm9pZCBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6bG9hZEZhaWxl
ZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKQEAg
LTk4Niw3ICsxMDYwLDcgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6bG9h
ZEZhaWxlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCBjb25zdCBSZXMKICAgICAgICAgR1NUX0VM
RU1FTlRfRVJST1Ioc3JjLCBSRVNPVVJDRSwgRkFJTEVELCAoIiVzIiwgZXJyb3IubG9jYWxpemVk
RGVzY3JpcHRpb24oKS51dGY4KCkuZGF0YSgpKSwgKG51bGxwdHIpKTsKICAgICB9CiAKLSAgICBn
c3RfYXBwX3NyY19lbmRfb2Zfc3RyZWFtKHNyYy0+cHJpdi0+YXBwc3JjKTsKKyAgICBzcmMtPnBy
aXYtPmhhdmVFT1MgPSB0cnVlOwogfQogCiB2b2lkIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xp
ZW50Ojpsb2FkRmluaXNoZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJikKQEAgLTk5NCwxMCArMTA2
OCw4IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmxvYWRGaW5pc2hlZChQ
bGF0Zm9ybU1lZGlhUmVzb3VyY2UmKQogICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dF
Ql9TUkMobV9zcmMuZ2V0KCkpOwogICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMt
PnByaXY7CiAKLSAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIkhhdmUgRU9TIik7Ci0KLSAgICBp
ZiAoIXByaXYtPmlzU2Vla2luZykKLSAgICAgICAgZ3N0X2FwcF9zcmNfZW5kX29mX3N0cmVhbShw
cml2LT5hcHBzcmMpOworICAgIGlmIChwcml2LT5pc1NlZWtpbmcgJiYgIXByaXYtPmZsdXNoaW5n
KQorICAgICAgICBwcml2LT5pc1NlZWtpbmcgPSBmYWxzZTsKIH0KIAogYm9vbCB3ZWJLaXRTcmNX
b3VsZFRhaW50T3JpZ2luKFdlYktpdFdlYlNyYyogc3JjLCBjb25zdCBTZWN1cml0eU9yaWdpbiYg
b3JpZ2luKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5oCmluZGV4IDM1
ZTUxYjMzZDcyYmNlNjYwYWZhM2JlNzliNDBlYzgwMGIyOGUyNTMuLmM4NmZiNTZhODJjZWE3Mzgw
NGM1YTZkOWI2M2EzZmVlOTVkNGM2NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNl
R1N0cmVhbWVyLmgKQEAgLTIwLDYgKzIwLDcgQEAKIAogI2lmIEVOQUJMRShWSURFTykgJiYgVVNF
KEdTVFJFQU1FUikKIAorI2luY2x1ZGUgPGdzdC9iYXNlL2dzdHB1c2hzcmMuaD4KICNpbmNsdWRl
IDxnc3QvZ3N0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQwLDEzICs0MSwxMyBAQCB0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViU3JjQ2xhc3MgICBXZWJLaXRXZWJTcmNDbGFzczsKIHR5
cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJTcmNQcml2YXRlIFdlYktpdFdlYlNyY1ByaXZhdGU7CiAK
IHN0cnVjdCBfV2ViS2l0V2ViU3JjIHsKLSAgICBHc3RCaW4gcGFyZW50OworICAgIEdzdFB1c2hT
cmMgcGFyZW50OwogCiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSAqcHJpdjsKIH07CiAKIHN0cnVj
dCBfV2ViS2l0V2ViU3JjQ2xhc3MgewotICAgIEdzdEJpbkNsYXNzIHBhcmVudENsYXNzOworICAg
IEdzdFB1c2hTcmNDbGFzcyBwYXJlbnRDbGFzczsKIH07CiAKIEdUeXBlIHdlYmtpdF93ZWJfc3Jj
X2dldF90eXBlKHZvaWQpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGMxMTA3NjRiNTU3MTg3NmY5ZmU0MWEyYzBhMTFhYjlj
ZjY2OTRlNTUuLmNjMzU0ODMxMTg3MGZhODA2NjU2OGZhNjA1YzM0Y2YxNjM3ZTMxYzAgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNSBAQAorMjAxOS0wMy0xMiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5k
QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl0gUmV3cml0ZSBIVFRQIHNvdXJjZSBl
bGVtZW50IHVzaW5nIHB1c2hzcmMgYmFzZSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NjMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9uczoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvaHR0cC90ZXN0cy9tZWRpYS9obHMvdmlkZW8tY29udHJv
bHMtbGl2ZS1zdHJlYW0tZXhwZWN0ZWQudHh0OgorICAgICAgICBVcGRhdGUgZXhwZWN0YXRpb25z
LCB0aG91Z2ggaXQncyBub3QgcmVhbGx5IHJlbGF0ZWQgd2l0aCB0aGlzCisgICAgICAgIHBhdGNo
LgorCiAyMDE5LTAzLTEyICBFbnJpcXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW01lZGlhXVtNU0VdIERvbid0IGVtaXQgdGltZVVwZGF0ZSBhZnRl
ciBwbGF5KCkgaWYgY3VycmVudFRpbWUgaGFzbid0IGNoYW5nZWQKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggZTE4NDgwMTlmOTlkMjFiM2YyOWI0MWMxNzhk
ZDMzOWM3MTc4ZWRhMi4uYmYyNjUwY2QzMmMxNDJmNzYyNDU1MzZhNjI0YTJhZDE1YmFhMTcyZSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTIyMDYsNyAr
MjIwNiw2IEBAIEJ1ZyhHVEspIGpxdWVyeS90cmF2ZXJzaW5nLmh0bWwgWyBQYXNzIFNsb3cgXQog
QnVnKEdUSykgdGFibGVzL21vemlsbGEvb3RoZXIvc2xhc2hsb2dvLmh0bWwgWyBQYXNzIFNsb3cg
XQogCiBCdWcoR1RLKSBodHRwL3Rlc3RzL21lZGlhL3ZpZGVvLXByZWxvYWQuaHRtbCBbIFBhc3Mg
U2xvdyBdCi13ZWJraXQub3JnL2IvMTQzOTg5IFsgUmVsZWFzZSBdIGh0dHAvdGVzdHMvbWVkaWEv
aGxzL3ZpZGVvLWNvbnRyb2xzLWxpdmUtc3RyZWFtLmh0bWwgWyBQYXNzIFNsb3cgRmFpbHVyZSBd
CiAKIHdlYmtpdC5vcmcvYi8xMTY5NTggaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Nsb3dtZXRhcmVk
aXJlY3QtYmFzaWMuaHRtbCBbIFBhc3MgU2xvdyBdCiB3ZWJraXQub3JnL2IvMTE2OTU4IGh0dHAv
dGVzdHMvbmF2aWdhdGlvbi9zbG93dGltZXJyZWRpcmVjdC1iYXNpYy5odG1sIFsgUGFzcyBTbG93
IF0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9odHRwL3Rlc3RzL21lZGlh
L2hscy92aWRlby1jb250cm9scy1saXZlLXN0cmVhbS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9ndGsvaHR0cC90ZXN0cy9tZWRpYS9obHMvdmlkZW8tY29udHJvbHMtbGl2ZS1z
dHJlYW0tZXhwZWN0ZWQudHh0CmluZGV4IGI3MWFhZDM5NjZiMzRlMjNjMTIwYTdhYzk0NGQ0ODlh
NzVlOWU2ZGMuLjQ1NzBhMmJjNDQ1ODBmZDRlNjM3ZDBmODY5Y2FhYmE2ZjA0MjBiYjkgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9odHRwL3Rlc3RzL21lZGlhL2hscy92aWRl
by1jb250cm9scy1saXZlLXN0cmVhbS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vZ3RrL2h0dHAvdGVzdHMvbWVkaWEvaGxzL3ZpZGVvLWNvbnRyb2xzLWxpdmUtc3RyZWFt
LWV4cGVjdGVkLnR4dApAQCAtMSwxMyArMSwxNCBAQAogCitFVkVOVChjYW5wbGF5dGhyb3VnaCkK
IEVWRU5UKHBsYXkpCiBFWFBFQ1RFRCAodmlkZW8uZHVyYXRpb24gPT0gJ0luZmluaXR5JykgT0sK
IC13ZWJraXQtbWVkaWEtdGV4dC10cmFjay1jb250YWluZXI6IGNsYXNzZXM6IFtoaWRkZW5dCiAt
d2Via2l0LW1lZGlhLWNvbnRyb2xzLWVuY2xvc3VyZTogY2xhc3NlczogW10KLS13ZWJraXQtbWVk
aWEtY29udHJvbHMtcGFuZWw6IGNsYXNzZXM6IFtwYXVzZWRdCistd2Via2l0LW1lZGlhLWNvbnRy
b2xzLXBhbmVsOiBjbGFzc2VzOiBbcGF1c2VkIHNob3ddCiAtd2Via2l0LW1lZGlhLWNvbnRyb2xz
LXBsYXktYnV0dG9uOiBjbGFzc2VzOiBbcGF1c2VkXQogLXdlYmtpdC1tZWRpYS1jb250cm9scy10
aW1lbGluZTogY2xhc3NlczogW10KIC13ZWJraXQtbWVkaWEtY29udHJvbHMtY3VycmVudC10aW1l
LWRpc3BsYXk6IGNsYXNzZXM6IFtob3VyLWxvbmctdGltZV0KLS13ZWJraXQtbWVkaWEtY29udHJv
bHMtdGltZS1yZW1haW5pbmctZGlzcGxheTogY2xhc3NlczogW2hpZGRlbiBob3VyLWxvbmctdGlt
ZV0KKy13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZS1yZW1haW5pbmctZGlzcGxheTogY2xhc3Nl
czogW2hvdXItbG9uZy10aW1lIGhpZGRlbl0KIC13ZWJraXQtbWVkaWEtY29udHJvbHMtdG9nZ2xl
LWNsb3NlZC1jYXB0aW9ucy1idXR0b246IGNsYXNzZXM6IFtoaWRkZW5dCiAtd2Via2l0LW1lZGlh
LWNvbnRyb2xzLWZ1bGxzY3JlZW4tYnV0dG9uOiBjbGFzc2VzOiBbXQogbm9uZTogY2xhc3Nlczog
W211dGUtYm94XQo=
</data>
<flag name="commit-queue"
          id="381050"
          type_id="3"
          status="-"
          setter="calvaris"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364970</attachid>
            <date>2019-03-17 11:30:17 -0700</date>
            <delta_ts>2019-03-18 02:28:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195631-20190317183015.patch</filename>
            <type>text/plain</type>
            <size>57630</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQzMDUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDcwYTJlN2NjOTdjMzgy
MzE3N2RmMGI3YTFiMTBiZTM5MjAwMmIxMC4uZGU2NGNhYWM5MmZkY2M3MmU2NjhlNzZjN2EyODI3
NGU5M2NiMWNkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDE5LTAzLTEyICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBSZXdyaXRlIEhUVFAgc291cmNlIGVsZW1lbnQgdXNpbmcgcHVzaHNyYyBiYXNlIGNsYXNzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU2MzEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJZiB3ZSB3YW50
IHRvIHVzZSB3ZWJraXR3ZWJzcmMgaW4gYWRhcHRpdmVkZW11eCAoSExTLCBEQVNILCBldGMpCisg
ICAgICAgIHdlIG5lZWQgYSBzb3VyY2UgZWxlbWVudCB0aGF0IGJlaGF2ZXMgbGlrZSBzb3VwaHR0
cHNyYywgd2hpY2ggaXMKKyAgICAgICAgaW1wbGVtZW50ZWQgdXNpbmcgcHVzaHNyYy4gVGhpcyBy
ZXdyaXRlIG1pZ2h0IGFsc28gZml4IHNvbWUgc2VlaworICAgICAgICBpc3N1ZXMuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLCBleGlzdGluZyBodHRwL3Rlc3RzL21lZGlhIHRlc3RzIGNvdmVyIHRo
aXMgcGF0Y2guCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlTWVzc2FnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHA6CisgICAgICAgICh3
ZWJraXRfd2ViX3NyY19jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdFdlYlNyY1Jlc2V0KToK
KyAgICAgICAgKHdlYmtpdF93ZWJfc3JjX2luaXQpOgorICAgICAgICAod2ViS2l0V2ViU3JjQ3Jl
YXRlKToKKyAgICAgICAgKHdlYktpdFdlYlNyY1N0YXJ0KToKKyAgICAgICAgKHdlYktpdFdlYlNy
Y0Nsb3NlU2Vzc2lvbik6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTdG9wKToKKyAgICAgICAgKHdl
YktpdFdlYlNyY0dldFNpemUpOgorICAgICAgICAod2ViS2l0V2ViU3JjSXNTZWVrYWJsZSk6Cisg
ICAgICAgICh3ZWJLaXRXZWJTcmNEb1NlZWspOgorICAgICAgICAod2ViS2l0V2ViU3JjUXVlcnkp
OgorICAgICAgICAod2ViS2l0V2ViU3JjVW5Mb2NrKToKKyAgICAgICAgKHdlYktpdFdlYlNyY1Vu
TG9ja1N0b3ApOgorICAgICAgICAod2ViS2l0V2ViU3JjQ2hhbmdlU3RhdGUpOgorICAgICAgICAo
Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmNoZWNrVXBkYXRlQmxvY2tzaXplKToKKyAg
ICAgICAgKENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpyZXNwb25zZVJlY2VpdmVkKToK
KyAgICAgICAgKENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpkYXRhUmVjZWl2ZWQpOgor
ICAgICAgICAoQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmFjY2Vzc0NvbnRyb2xDaGVj
a0ZhaWxlZCk6CisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6bG9hZEZh
aWxlZCk6CisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6bG9hZEZpbmlz
aGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291
cmNlR1N0cmVhbWVyLmg6CisKIDIwMTktMDMtMTcgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFw
cGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OOiAhdm0uaXNJbml0aWFsaXppbmdPYmplY3Qo
KSB2b2lkKiBKU0M6OnRyeUFsbG9jYXRlQ2VsbEhlbHBlcjxKU0M6OlN0cnVjdHVyZT4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01haW5UaHJlYWROb3RpZmllci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01haW5UaHJlYWROb3RpZmllci5oCmluZGV4IDVlYWRh
NjM5Yjk5MjkzZTJiYmEzZmQxN2M4MWUyODYzOGM1NWZmN2QuLmQwNzA1ODYxZmY2OTg3MDQ0ODAx
OWZkOGJmMjgwNjE1YzRjM2ExZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9NYWluVGhyZWFkTm90aWZpZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWFpblRocmVhZE5vdGlmaWVyLmgKQEAg
LTYzLDYgKzYzLDI0IEBAIHB1YmxpYzoKICAgICAgICAgfSk7CiAgICAgfQogCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRj4KKyAgICB2b2lkIG5vdGlmeUFuZFdhaXQoVCBub3RpZmljYXRpb25UeXBl
LCBGJiYgY2FsbGJhY2tGdW5jdG9yKQorICAgIHsKKyAgICAgICAgTG9jayBtdXRleDsKKyAgICAg
ICAgQ29uZGl0aW9uIGNvbmRpdGlvbjsKKworICAgICAgICBub3RpZnkobm90aWZpY2F0aW9uVHlw
ZSwgW2Z1bmN0b3IgPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3RvciksIGNvbmRpdGlvbiA9ICZjb25k
aXRpb24sIG11dGV4ID0gJm11dGV4XSB7CisgICAgICAgICAgICBmdW5jdG9yKCk7CisgICAgICAg
ICAgICBMb2NrSG9sZGVyIGhvbGRlcigqbXV0ZXgpOworICAgICAgICAgICAgY29uZGl0aW9uLT5u
b3RpZnlPbmUoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaWYgKCFpc01haW5UaHJlYWQoKSkg
eworICAgICAgICAgICAgTG9ja0hvbGRlciBob2xkZXIobXV0ZXgpOworICAgICAgICAgICAgY29u
ZGl0aW9uLndhaXQobXV0ZXgpOworICAgICAgICB9CisgICAgfQorCiAgICAgdm9pZCBjYW5jZWxQ
ZW5kaW5nTm90aWZpY2F0aW9ucyh1bnNpZ25lZCBtYXNrID0gMCkKICAgICB7CiAgICAgICAgIEFT
U0VSVChtX2lzVmFsaWQubG9hZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggNmJkYmEwMjFjZDkwMzJkNTIxYTkyYjYxZmE2ZDBjNTdm
Njk5YWY4Zi4uMTI4YTQ1ZmI1N2I5YmI1Y2M4NTQyZmU1YzBmMTM0MTA2ZTNjZjM5NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTUzMywx
MyArNTMzLDE3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZWVrKGNvbnN0
IE1lZGlhVGltZSYgbWVkaWFUaW1lKQogICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAi
W1NlZWtdIHNlZWsgYXR0ZW1wdCB0byAlcyIsIHRvU3RyaW5nKG1lZGlhVGltZSkudXRmOCgpLmRh
dGEoKSk7CiAKICAgICAvLyBBdm9pZCB1c2VsZXNzIHNlZWtpbmcuCi0gICAgaWYgKG1lZGlhVGlt
ZSA9PSBjdXJyZW50TWVkaWFUaW1lKCkpCisgICAgaWYgKG1lZGlhVGltZSA9PSBjdXJyZW50TWVk
aWFUaW1lKCkpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW1NlZWtd
IHNlZWsgdG8gRU9TIHBvc2l0aW9uIHVuaGFuZGxlZCIpOwogICAgICAgICByZXR1cm47CisgICAg
fQogCiAgICAgTWVkaWFUaW1lIHRpbWUgPSBzdGQ6Om1pbihtZWRpYVRpbWUsIGR1cmF0aW9uTWVk
aWFUaW1lKCkpOwogCi0gICAgaWYgKGlzTGl2ZVN0cmVhbSgpKQorICAgIGlmIChpc0xpdmVTdHJl
YW0oKSkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbU2Vla10gTGl2
ZSBzdHJlYW0gc2VlayB1bmhhbmRsZWQiKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAg
IEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiW1NlZWtdIHNlZWtpbmcgdG8gJXMiLCB0b1N0
cmluZyh0aW1lKS51dGY4KCkuZGF0YSgpKTsKIApAQCAtMTE5Niw3ICsxMjAwLDcgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVz
c2FnZSkKICAgICAvLyBXZSBpZ25vcmUgc3RhdGUgY2hhbmdlcyBmcm9tIGludGVybmFsIGVsZW1l
bnRzLiBUaGV5IGFyZSBmb3J3YXJkZWQgdG8gcGxheWJpbjIgYW55d2F5LgogICAgIGJvb2wgbWVz
c2FnZVNvdXJjZUlzUGxheWJpbiA9IEdTVF9NRVNTQUdFX1NSQyhtZXNzYWdlKSA9PSByZWludGVy
cHJldF9jYXN0PEdzdE9iamVjdCo+KG1fcGlwZWxpbmUuZ2V0KCkpOwogCi0gICAgR1NUX0xPRygi
TWVzc2FnZSAlcyByZWNlaXZlZCBmcm9tIGVsZW1lbnQgJXMiLCBHU1RfTUVTU0FHRV9UWVBFX05B
TUUobWVzc2FnZSksIEdTVF9NRVNTQUdFX1NSQ19OQU1FKG1lc3NhZ2UpKTsKKyAgICBHU1RfTE9H
X09CSkVDVChwaXBlbGluZSgpLCAiTWVzc2FnZSAlcyByZWNlaXZlZCBmcm9tIGVsZW1lbnQgJXMi
LCBHU1RfTUVTU0FHRV9UWVBFX05BTUUobWVzc2FnZSksIEdTVF9NRVNTQUdFX1NSQ19OQU1FKG1l
c3NhZ2UpKTsKICAgICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkpIHsKICAgICBj
YXNlIEdTVF9NRVNTQUdFX0VSUk9SOgogICAgICAgICBpZiAobV9yZXNldFBpcGVsaW5lIHx8ICFt
X21pc3NpbmdQbHVnaW5DYWxsYmFja3MuaXNFbXB0eSgpIHx8IG1fZXJyb3JPY2N1cmVkKQpAQCAt
MTM0MiwxNCArMTM0NiwzMiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFu
ZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgICAgICB9CiAjZW5kaWYKICAgICAg
ICAgZWxzZSBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJodHRwLWhlYWRl
cnMiKSkgewotICAgICAgICAgICAgR3N0U3RydWN0dXJlKiByZXNwb25zZUhlYWRlcnM7Ci0gICAg
ICAgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXQoc3RydWN0dXJlLCAicmVzcG9uc2UtaGVhZGVy
cyIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgJnJlc3BvbnNlSGVhZGVycywgbnVsbHB0cikpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkKHJlc3BvbnNlSGVhZGVy
cywgaHR0cEhlYWRlck5hbWVTdHJpbmcoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRMZW5ndGgpLnV0
ZjgoKS5kYXRhKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBl
bGluZSgpLCAiTGl2ZSBzdHJlYW0gZGV0ZWN0ZWQuIERpc2FibGluZyBvbi1kaXNrIGJ1ZmZlcmlu
ZyIpOworICAgICAgICAgICAgaWYgKGNvbnN0IGNoYXIqIHVyaSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0
X3N0cmluZyhzdHJ1Y3R1cmUsICJ1cmkiKSkgeworICAgICAgICAgICAgICAgIFVSTCB1cmwoVVJM
KCksIHVyaSk7CisgICAgICAgICAgICAgICAgaWYgKHVybCAhPSBtX3VybCkgeworICAgICAgICAg
ICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJJZ25vcmluZyBIVFRQIHJl
c3BvbnNlIGhlYWRlcnMgZm9yIG5vbi1tYWluIFVSSS4iKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgR1Vu
aXF1ZU91dFB0cjxHc3RTdHJ1Y3R1cmU+IHJlc3BvbnNlSGVhZGVyczsKKyAgICAgICAgICAgIGlm
IChnc3Rfc3RydWN0dXJlX2dldChzdHJ1Y3R1cmUsICJyZXNwb25zZS1oZWFkZXJzIiwgR1NUX1RZ
UEVfU1RSVUNUVVJFLCAmcmVzcG9uc2VIZWFkZXJzLm91dFB0cigpLCBudWxscHRyKSkgeworICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnRlbnRMZW5ndGhIZWFkZXJOYW1lID0gaHR0cEhl
YWRlck5hbWVTdHJpbmcoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRMZW5ndGgpLnV0ZjgoKS5kYXRh
KCk7CisgICAgICAgICAgICAgICAgdWludDY0X3QgY29udGVudExlbmd0aCA9IDA7CisgICAgICAg
ICAgICAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF91aW50NjQocmVzcG9uc2VIZWFkZXJzLmdl
dCgpLCBjb250ZW50TGVuZ3RoSGVhZGVyTmFtZSwgJmNvbnRlbnRMZW5ndGgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIHNvdXBodHRwc3JjIHNldHMgYSBzdHJpbmcgZm9yIENvbnRlbnQtTGVu
Z3RoLCBzbworICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgaXQgaGVyZSwgdW50aWwgd2Ug
cmVtb3ZlIHRoZSB3ZWJraXQrIHByb3RvY29sCisgICAgICAgICAgICAgICAgICAgIC8vIHByZWZp
eCBmcm9tIHdlYmtpdHdlYnNyYy4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnN0IGNoYXIq
IGNvbnRlbnRMZW5ndGhBc1N0cmluZyA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhyZXNwb25z
ZUhlYWRlcnMuZ2V0KCksIGNvbnRlbnRMZW5ndGhIZWFkZXJOYW1lKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGVudExlbmd0aCA9IGdfYXNjaWlfc3RydG91bGwoY29udGVudExlbmd0
aEFzU3RyaW5nLCBudWxscHRyLCAxMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29u
dGVudExlbmd0aCA9PSBHX01BWFVJTlQ2NCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZW50TGVuZ3RoID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIiVzIHN0cmVh
bSBkZXRlY3RlZCIsICFjb250ZW50TGVuZ3RoID8gIkxpdmUiIDogIk5vbi1saXZlIik7CisgICAg
ICAgICAgICAgICAgaWYgKCFjb250ZW50TGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgIG1f
aXNTdHJlYW1pbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBzZXREb3dubG9hZEJ1ZmZl
cmluZygpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJl
X2ZyZWUocmVzcG9uc2VIZWFkZXJzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlm
IChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImFkYXB0aXZlLXN0cmVhbWluZy1z
dGF0aXN0aWNzIikpIHsKICAgICAgICAgICAgIGlmIChXRUJLSVRfSVNfV0VCX1NSQyhtX3NvdXJj
ZS5nZXQoKSkpCkBAIC0xNjQ3LDkgKzE2NjksMTMgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmZpbGxUaW1lckZpcmVkKCkKIAogTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6bWF4TWVkaWFUaW1lU2Vla2FibGUoKSBjb25zdAogeworICAgIEdTVF9UUkFD
RV9PQkpFQ1QocGlwZWxpbmUoKSwgImVycm9yT2NjdXJlZDogJXMsIGlzTGl2ZVN0cmVhbTogJXMi
LCBib29sRm9yUHJpbnRpbmcobV9lcnJvck9jY3VyZWQpLCBib29sRm9yUHJpbnRpbmcoaXNMaXZl
U3RyZWFtKCkpKTsKICAgICBpZiAobV9lcnJvck9jY3VyZWQpCiAgICAgICAgIHJldHVybiBNZWRp
YVRpbWU6Onplcm9UaW1lKCk7CiAKKyAgICBpZiAoaXNMaXZlU3RyZWFtKCkpCisgICAgICAgIHJl
dHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7CisKICAgICBNZWRpYVRpbWUgZHVyYXRpb24gPSBk
dXJhdGlvbk1lZGlhVGltZSgpOwogICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIm1h
eE1lZGlhVGltZVNlZWthYmxlLCBkdXJhdGlvbjogJXMiLCB0b1N0cmluZyhkdXJhdGlvbikudXRm
OCgpLmRhdGEoKSk7CiAgICAgLy8gaW5maW5pdGUgZHVyYXRpb24gbWVhbnMgbGl2ZSBzdHJlYW0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9X
ZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKaW5kZXggNTJhYTgz
NjMzMzAyYjQzOTcwNGI4MTNiNTUxNDM4YzUxMGU5OTQzNC4uM2VjNTA2NzhkYzMyY2RiMDYxZTVl
ODBjYmQwMzRhNGE1OWI5ZDFhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdT
dHJlYW1lci5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxMCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4K
ICAqICBDb3B5cmlnaHQgKEMpIDIwMTMgQ29sbGFib3JhIEx0ZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMTkgSWdhbGlhIFMuTC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTMyLDggKzMzLDcgQEAK
ICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4u
aCIKICNpbmNsdWRlIDxjc3RkaW50PgotI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc3JjLmg+Ci0j
aW5jbHVkZSA8Z3N0L3BidXRpbHMvbWlzc2luZy1wbHVnaW5zLmg+CisjaW5jbHVkZSA8d3RmL0Nv
bmRpdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CkBAIC03Myw0MSArNzMsNDMgQEAgcHJpdmF0ZToKIGVudW0gTWFpblRocmVh
ZFNvdXJjZU5vdGlmaWNhdGlvbiB7CiAgICAgU3RhcnQgPSAxIDw8IDAsCiAgICAgU3RvcCA9IDEg
PDwgMSwKLSAgICBOZWVkRGF0YSA9IDEgPDwgMiwKLSAgICBFbm91Z2hEYXRhID0gMSA8PCAzLAot
ICAgIFNlZWsgPSAxIDw8IDQKIH07CiAKICNkZWZpbmUgV0VCS0lUX1dFQl9TUkNfR0VUX1BSSVZB
VEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9X
RUJfU1JDLCBXZWJLaXRXZWJTcmNQcml2YXRlKSkKIHN0cnVjdCBfV2ViS2l0V2ViU3JjUHJpdmF0
ZSB7Ci0gICAgR3N0QXBwU3JjKiBhcHBzcmM7Ci0gICAgR3N0UGFkKiBzcmNwYWQ7CiAgICAgQ1N0
cmluZyBvcmlnaW5hbFVSSTsKICAgICBDU3RyaW5nIHJlZGlyZWN0ZWRVUkk7CiAgICAgYm9vbCBr
ZWVwQWxpdmU7CiAgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IGV4dHJhSGVhZGVyczsKICAg
ICBib29sIGNvbXByZXNzOwogICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGh0dHBNZXRob2Q7Ci0KICAg
ICBXZWJDb3JlOjpNZWRpYVBsYXllciogcGxheWVyOwotCiAgICAgUmVmUHRyPFBsYXRmb3JtTWVk
aWFSZXNvdXJjZUxvYWRlcj4gbG9hZGVyOwogICAgIFJlZlB0cjxQbGF0Zm9ybU1lZGlhUmVzb3Vy
Y2U+IHJlc291cmNlOwotCisgICAgUmVmUHRyPE1haW5UaHJlYWROb3RpZmllcjxNYWluVGhyZWFk
U291cmNlTm90aWZpY2F0aW9uPj4gbm90aWZpZXI7CiAgICAgYm9vbCBkaWRQYXNzQWNjZXNzQ29u
dHJvbENoZWNrOwotCi0gICAgZ3VpbnQ2NCBvZmZzZXQ7CisgICAgYm9vbCB3ZXJlSGVhZGVyc1Jl
Y2VpdmVkOworICAgIENvbmRpdGlvbiBoZWFkZXJzQ29uZGl0aW9uOworICAgIExvY2sgcmVzcG9u
c2VMb2NrOworICAgIGJvb2wgd2FzUmVzcG9uc2VSZWNlaXZlZDsKKyAgICBDb25kaXRpb24gcmVz
cG9uc2VDb25kaXRpb247CisgICAgYm9vbCBkb2VzSGF2ZUVPUzsKKyAgICBib29sIGlzRmx1c2hp
bmcgeyBmYWxzZSB9OworICAgIHVpbnQ2NF90IHJlYWRQb3NpdGlvbjsKKyAgICB1aW50NjRfdCBy
ZXF1ZXN0ZWRQb3NpdGlvbjsKKyAgICB1aW50NjRfdCBzdG9wUG9zaXRpb247CisgICAgYm9vbCBk
dXJhdGlvblNldDsKICAgICBib29sIGhhdmVTaXplOwotICAgIGd1aW50NjQgc2l6ZTsKLSAgICBn
Ym9vbGVhbiBzZWVrYWJsZTsKLSAgICBib29sIHBhdXNlZDsKKyAgICB1aW50NjRfdCBzaXplOwor
ICAgIGJvb2wgaXNTZWVrYWJsZTsKICAgICBib29sIGlzU2Vla2luZzsKLQotICAgIGd1aW50NjQg
cmVxdWVzdGVkT2Zmc2V0OwotCisgICAgYm9vbCB3YXNTZWVraW5nIHsgZmFsc2UgfTsKICAgICB1
aW50NjRfdCBtaW5pbXVtQmxvY2tzaXplOwotCi0gICAgUmVmUHRyPE1haW5UaHJlYWROb3RpZmll
cjxNYWluVGhyZWFkU291cmNlTm90aWZpY2F0aW9uPj4gbm90aWZpZXI7CisgICAgTG9jayBhZGFw
dGVyTG9jazsKKyAgICBDb25kaXRpb24gYWRhcHRlckNvbmRpdGlvbjsKKyAgICB1aW50NjRfdCBx
dWV1ZVNpemUgeyAwIH07CisgICAgR1JlZlB0cjxHc3RBZGFwdGVyPiBhZGFwdGVyOworICAgIEdS
ZWZQdHI8R3N0RXZlbnQ+IGh0dHBIZWFkZXJzRXZlbnQ7CiB9OwogCiBlbnVtIHsKQEAgLTEyMCwx
MCArMTIyLDcgQEAgZW51bSB7CiAgICAgUFJPUF9NRVRIT0QKIH07CiAKLXN0YXRpYyBHc3RTdGF0
aWNQYWRUZW1wbGF0ZSBzcmNUZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJzcmMi
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR1NUX1BBRF9TUkMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU1RfUEFEX0FMV0FZUywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNy
Y1RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUoInNyYyIsIEdTVF9QQURfU1JDLCBH
U1RfUEFEX0FMV0FZUywgR1NUX1NUQVRJQ19DQVBTX0FOWSk7CiAKIEdTVF9ERUJVR19DQVRFR09S
WV9TVEFUSUMod2Via2l0X3dlYl9zcmNfZGVidWcpOwogI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQg
d2Via2l0X3dlYl9zcmNfZGVidWcKQEAgLTEzNSw1MCArMTM0LDM3IEBAIHN0YXRpYyB2b2lkIHdl
YktpdFdlYlNyY0ZpbmFsaXplKEdPYmplY3QqKTsKIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1Nl
dFByb3BlcnR5KEdPYmplY3QqLCBndWludCBwcm9wZXJ0eUlELCBjb25zdCBHVmFsdWUqLCBHUGFy
YW1TcGVjKik7CiBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNHZXRQcm9wZXJ0eShHT2JqZWN0Kiwg
Z3VpbnQgcHJvcGVydHlJRCwgR1ZhbHVlKiwgR1BhcmFtU3BlYyopOwogc3RhdGljIEdzdFN0YXRl
Q2hhbmdlUmV0dXJuIHdlYktpdFdlYlNyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqLCBHc3RTdGF0
ZUNoYW5nZSk7Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNRdWVyeVdpdGhQYXJlbnQo
R3N0UGFkKiwgR3N0T2JqZWN0KiwgR3N0UXVlcnkqKTsKLQotc3RhdGljIHZvaWQgd2ViS2l0V2Vi
U3JjTmVlZERhdGEoV2ViS2l0V2ViU3JjKik7Ci1zdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNFbm91
Z2hEYXRhKFdlYktpdFdlYlNyYyopOwotc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NlZWso
V2ViS2l0V2ViU3JjKiwgZ3VpbnQ2NCk7Ci0KLXN0YXRpYyBHc3RBcHBTcmNDYWxsYmFja3MgYXBw
c3JjQ2FsbGJhY2tzID0gewotICAgIC8vIG5lZWRfZGF0YQotICAgIFtdKEdzdEFwcFNyYyosIGd1
aW50LCBncG9pbnRlciB1c2VyRGF0YSkgewotICAgICAgICB3ZWJLaXRXZWJTcmNOZWVkRGF0YShX
RUJLSVRfV0VCX1NSQyh1c2VyRGF0YSkpOwotICAgIH0sCi0gICAgLy8gZW5vdWdoX2RhdGEKLSAg
ICBbXShHc3RBcHBTcmMqLCBncG9pbnRlciB1c2VyRGF0YSkgewotICAgICAgICB3ZWJLaXRXZWJT
cmNFbm91Z2hEYXRhKFdFQktJVF9XRUJfU1JDKHVzZXJEYXRhKSk7Ci0gICAgfSwKLSAgICAvLyBz
ZWVrX2RhdGEKLSAgICBbXShHc3RBcHBTcmMqLCBndWludDY0IG9mZnNldCwgZ3BvaW50ZXIgdXNl
ckRhdGEpIC0+IGdib29sZWFuIHsKLSAgICAgICAgcmV0dXJuIHdlYktpdFdlYlNyY1NlZWsoV0VC
S0lUX1dFQl9TUkModXNlckRhdGEpLCBvZmZzZXQpOwotICAgIH0sCi0gICAgeyBudWxscHRyIH0K
LX07CitzdGF0aWMgR3N0Rmxvd1JldHVybiB3ZWJLaXRXZWJTcmNDcmVhdGUoR3N0UHVzaFNyYyos
IEdzdEJ1ZmZlcioqKTsKK3N0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNTdGFydChHc3RCYXNl
U3JjKik7CitzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU3RvcChHc3RCYXNlU3JjKik7Citz
dGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjR2V0U2l6ZShHc3RCYXNlU3JjKiwgZ3VpbnQ2NCog
c2l6ZSk7CitzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjSXNTZWVrYWJsZShHc3RCYXNlU3Jj
Kik7CitzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjRG9TZWVrKEdzdEJhc2VTcmMqLCBHc3RT
ZWdtZW50Kik7CitzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjUXVlcnkoR3N0QmFzZVNyYyos
IEdzdFF1ZXJ5Kik7CitzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjVW5Mb2NrKEdzdEJhc2VT
cmMqKTsKK3N0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNVbkxvY2tTdG9wKEdzdEJhc2VTcmMq
KTsKIAogI2RlZmluZSB3ZWJraXRfd2ViX3NyY19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCiAv
LyBXZSBzcGxpdCB0aGlzIG91dCBpbnRvIGFub3RoZXIgbWFjcm8gdG8gYXZvaWQgYSBjaGVjay13
ZWJraXQtc3R5bGUgZXJyb3IuCiAjZGVmaW5lIFdFQktJVF9XRUJfU1JDX0NBVEVHT1JZX0lOSVQg
R1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X3dlYl9zcmNfZGVidWcsICJ3ZWJraXR3ZWJz
cmMiLCAwLCAid2Vic3JjIGVsZW1lbnQiKTsKLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktp
dFdlYlNyYywgd2Via2l0X3dlYl9zcmMsIEdTVF9UWVBFX0JJTiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoR1NUX1RZUEVfVVJJX0hBTkRMRVIsIHdlYktp
dFdlYlNyY1VyaUhhbmRsZXJJbml0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRf
V0VCX1NSQ19DQVRFR09SWV9JTklUKTsKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdFdl
YlNyYywgd2Via2l0X3dlYl9zcmMsIEdTVF9UWVBFX1BVU0hfU1JDLAorICAgIEdfSU1QTEVNRU5U
X0lOVEVSRkFDRShHU1RfVFlQRV9VUklfSEFORExFUiwgd2ViS2l0V2ViU3JjVXJpSGFuZGxlcklu
aXQpOworICAgIFdFQktJVF9XRUJfU1JDX0NBVEVHT1JZX0lOSVQpOwogCiBzdGF0aWMgdm9pZCB3
ZWJraXRfd2ViX3NyY19jbGFzc19pbml0KFdlYktpdFdlYlNyY0NsYXNzKiBrbGFzcykKIHsKICAg
ICBHT2JqZWN0Q2xhc3MqIG9rbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKLSAgICBHc3RF
bGVtZW50Q2xhc3MqIGVrbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTKGtsYXNzKTsKIAogICAgIG9r
bGFzcy0+ZGlzcG9zZSA9IHdlYktpdFdlYlNyY0Rpc3Bvc2U7CiAgICAgb2tsYXNzLT5maW5hbGl6
ZSA9IHdlYktpdFdlYlNyY0ZpbmFsaXplOwogICAgIG9rbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Vi
S2l0V2ViU3JjU2V0UHJvcGVydHk7CiAgICAgb2tsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJLaXRX
ZWJTcmNHZXRQcm9wZXJ0eTsKIAotICAgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxh
dGUoZWtsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3N0X3N0
YXRpY19wYWRfdGVtcGxhdGVfZ2V0KCZzcmNUZW1wbGF0ZSkpOworICAgIEdzdEVsZW1lbnRDbGFz
cyogZWtsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1Moa2xhc3MpOworICAgIGdzdF9lbGVtZW50X2Ns
YXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlKGVrbGFzcywgJnNyY1RlbXBsYXRlKTsKKwogICAg
IGdzdF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YShla2xhc3MsICJXZWJLaXQgV2ViIHNvdXJj
ZSBlbGVtZW50IiwgIlNvdXJjZSIsICJIYW5kbGVzIEhUVFAvSFRUUFMgdXJpcyIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIlNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9l
Z2VAY29sbGFib3JhLmNvLnVrPiIpOworICAgICAgICAiUGhpbGlwcGUgTm9ybWFuZCA8cGhpbG5A
aWdhbGlhLmNvbT4iKTsKIAogICAgIC8qIEFsbG93cyBzZXR0aW5nIHRoZSB1cmkgdXNpbmcgdGhl
ICdsb2NhdGlvbicgcHJvcGVydHksIHdoaWNoIGlzIHVzZWQKICAgICAgKiBmb3IgZXhhbXBsZSBi
eSBnc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpKCkgKi8KQEAgLTIwNiwxMSArMTkyLDM4IEBAIHN0
YXRpYyB2b2lkIHdlYmtpdF93ZWJfc3JjX2NsYXNzX2luaXQoV2ViS2l0V2ViU3JjQ2xhc3MqIGts
YXNzKQogICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJtZXRob2QiLCAibWV0aG9kIiwgIlRo
ZSBIVFRQIG1ldGhvZCB0byB1c2UgKGRlZmF1bHQ6IEdFVCkiLAogICAgICAgICAgICAgbnVsbHB0
ciwgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9T
VEFUSUNfU1RSSU5HUykpKTsKIAotICAgIGVrbGFzcy0+Y2hhbmdlX3N0YXRlID0gd2ViS2l0V2Vi
U3JjQ2hhbmdlU3RhdGU7CisgICAgZWtsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBHU1RfREVCVUdfRlVO
Q1BUUih3ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZSk7CisKKyAgICBHc3RCYXNlU3JjQ2xhc3MqIGJh
c2VTcmNDbGFzcyA9IEdTVF9CQVNFX1NSQ19DTEFTUyhrbGFzcyk7CisgICAgYmFzZVNyY0NsYXNz
LT5zdGFydCA9IEdTVF9ERUJVR19GVU5DUFRSKHdlYktpdFdlYlNyY1N0YXJ0KTsKKyAgICBiYXNl
U3JjQ2xhc3MtPnN0b3AgPSBHU1RfREVCVUdfRlVOQ1BUUih3ZWJLaXRXZWJTcmNTdG9wKTsKKyAg
ICBiYXNlU3JjQ2xhc3MtPnVubG9jayA9IEdTVF9ERUJVR19GVU5DUFRSKHdlYktpdFdlYlNyY1Vu
TG9jayk7CisgICAgYmFzZVNyY0NsYXNzLT51bmxvY2tfc3RvcCA9IEdTVF9ERUJVR19GVU5DUFRS
KHdlYktpdFdlYlNyY1VuTG9ja1N0b3ApOworICAgIGJhc2VTcmNDbGFzcy0+Z2V0X3NpemUgPSBH
U1RfREVCVUdfRlVOQ1BUUih3ZWJLaXRXZWJTcmNHZXRTaXplKTsKKyAgICBiYXNlU3JjQ2xhc3Mt
PmlzX3NlZWthYmxlID0gR1NUX0RFQlVHX0ZVTkNQVFIod2ViS2l0V2ViU3JjSXNTZWVrYWJsZSk7
CisgICAgYmFzZVNyY0NsYXNzLT5kb19zZWVrID0gR1NUX0RFQlVHX0ZVTkNQVFIod2ViS2l0V2Vi
U3JjRG9TZWVrKTsKKyAgICBiYXNlU3JjQ2xhc3MtPnF1ZXJ5ID0gR1NUX0RFQlVHX0ZVTkNQVFIo
d2ViS2l0V2ViU3JjUXVlcnkpOworCisgICAgR3N0UHVzaFNyY0NsYXNzKiBwdXNoU3JjQ2xhc3Mg
PSBHU1RfUFVTSF9TUkNfQ0xBU1Moa2xhc3MpOworICAgIHB1c2hTcmNDbGFzcy0+Y3JlYXRlID0g
R1NUX0RFQlVHX0ZVTkNQVFIod2ViS2l0V2ViU3JjQ3JlYXRlKTsKIAogICAgIGdfdHlwZV9jbGFz
c19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdFdlYlNyY1ByaXZhdGUpKTsKIH0KIAor
CitzdGF0aWMgdm9pZCB3ZWJraXRXZWJTcmNSZXNldChXZWJLaXRXZWJTcmMqIHNyYykKK3sKKyAg
ICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9TUkNfR0VUX1BSSVZBVEUo
c3JjKTsKKworICAgIHByaXYtPmhhdmVTaXplID0gZmFsc2U7CisgICAgcHJpdi0+d2VyZUhlYWRl
cnNSZWNlaXZlZCA9IGZhbHNlOworICAgIHByaXYtPmlzU2Vla2FibGUgPSBmYWxzZTsKKyAgICBw
cml2LT5yZWFkUG9zaXRpb24gPSAwOworICAgIHByaXYtPnJlcXVlc3RlZFBvc2l0aW9uID0gMDsK
KyAgICBwcml2LT5zdG9wUG9zaXRpb24gPSAtMTsKKyAgICBwcml2LT5zaXplID0gMDsKK30KKwog
c3RhdGljIHZvaWQgd2Via2l0X3dlYl9zcmNfaW5pdChXZWJLaXRXZWJTcmMqIHNyYykKIHsKICAg
ICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9TUkNfR0VUX1BSSVZBVEUo
c3JjKTsKQEAgLTIxOSw1NCArMjMyLDExIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfc3JjX2lu
aXQoV2ViS2l0V2ViU3JjKiBzcmMpCiAgICAgbmV3IChwcml2KSBXZWJLaXRXZWJTcmNQcml2YXRl
KCk7CiAKICAgICBwcml2LT5ub3RpZmllciA9IE1haW5UaHJlYWROb3RpZmllcjxNYWluVGhyZWFk
U291cmNlTm90aWZpY2F0aW9uPjo6Y3JlYXRlKCk7CisgICAgcHJpdi0+YWRhcHRlciA9IGFkb3B0
R1JlZihnc3RfYWRhcHRlcl9uZXcoKSk7CisgICAgcHJpdi0+bWluaW11bUJsb2Nrc2l6ZSA9IGdz
dF9iYXNlX3NyY19nZXRfYmxvY2tzaXplKEdTVF9CQVNFX1NSQ19DQVNUKHNyYykpOwogCi0gICAg
cHJpdi0+aGF2ZVNpemUgPSBGQUxTRTsKLSAgICBwcml2LT5zaXplID0gMDsKLQotICAgIHByaXYt
PmFwcHNyYyA9IEdTVF9BUFBfU1JDKGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXBwc3JjIiwg
bnVsbHB0cikpOwotICAgIGlmICghcHJpdi0+YXBwc3JjKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9P
QkpFQ1Qoc3JjLCAiRmFpbGVkIHRvIGNyZWF0ZSBhcHBzcmMiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4oc3JjKSwgR1NUX0VMRU1FTlQocHJpdi0+
YXBwc3JjKSk7Ci0KLSAgICBHUmVmUHRyPEdzdFBhZD4gdGFyZ2V0UGFkID0gYWRvcHRHUmVmKGdz
dF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKEdTVF9FTEVNRU5UKHByaXYtPmFwcHNyYyksICJzcmMi
KSk7Ci0gICAgcHJpdi0+c3JjcGFkID0gd2Via2l0R3N0R2hvc3RQYWRGcm9tU3RhdGljVGVtcGxh
dGUoJnNyY1RlbXBsYXRlLCAic3JjIiwgdGFyZ2V0UGFkLmdldCgpKTsKLQotICAgIGdzdF9lbGVt
ZW50X2FkZF9wYWQoR1NUX0VMRU1FTlQoc3JjKSwgcHJpdi0+c3JjcGFkKTsKLQotICAgIEdTVF9P
QkpFQ1RfRkxBR19TRVQocHJpdi0+c3JjcGFkLCBHU1RfUEFEX0ZMQUdfTkVFRF9QQVJFTlQpOwot
ICAgIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uKHByaXYtPnNyY3BhZCwgd2ViS2l0V2ViU3Jj
UXVlcnlXaXRoUGFyZW50KTsKLQotICAgIGdzdF9hcHBfc3JjX3NldF9jYWxsYmFja3MocHJpdi0+
YXBwc3JjLCAmYXBwc3JjQ2FsbGJhY2tzLCBzcmMsIG51bGxwdHIpOwotICAgIGdzdF9hcHBfc3Jj
X3NldF9lbWl0X3NpZ25hbHMocHJpdi0+YXBwc3JjLCBGQUxTRSk7Ci0gICAgZ3N0X2FwcF9zcmNf
c2V0X3N0cmVhbV90eXBlKHByaXYtPmFwcHNyYywgR1NUX0FQUF9TVFJFQU1fVFlQRV9TRUVLQUJM
RSk7Ci0KLSAgICAvLyA1MTJrIGlzIGEgYWJpdHJhcnkgbnVtYmVyIGJ1dCB3ZSBzaG91bGQgY2hv
b3NlIGEgdmFsdWUKLSAgICAvLyBoZXJlIHRvIG5vdCBwYXVzZS91bnBhdXNlIHRoZSBTb3VwTWVz
c2FnZSB0b28gb2Z0ZW4gYW5kCi0gICAgLy8gdG8gbWFrZSBzdXJlIHRoZXJlJ3MgYWx3YXlzIHNv
bWUgZGF0YSBhdmFpbGFibGUgZm9yCi0gICAgLy8gR1N0cmVhbWVyIHRvIGhhbmRsZS4KLSAgICBn
c3RfYXBwX3NyY19zZXRfbWF4X2J5dGVzKHByaXYtPmFwcHNyYywgNTEyICogMTAyNCk7Ci0KLSAg
ICAvLyBFbWl0IHRoZSBuZWVkLWRhdGEgc2lnbmFsIGlmIHRoZSBxdWV1ZSBjb250YWlucyBsZXNz
Ci0gICAgLy8gdGhhbiAyMCUgb2YgZGF0YS4gV2l0aG91dCB0aGlzIHRoZSBuZWVkLWRhdGEgc2ln
bmFsCi0gICAgLy8gaXMgZW1pdHRlZCB3aGVuIHRoZSBxdWV1ZSBpcyBlbXB0eSwgd2UgdGhlbiBk
aXNwYXRjaAotICAgIC8vIHRoZSBzb3VwIG1lc3NhZ2UgdW5wYXVzaW5nIHRvIHRoZSBtYWluIGxv
b3AgYW5kIGZyb20KLSAgICAvLyB0aGVyZSB1bnBhdXNlIHRoZSBzb3VwIG1lc3NhZ2UuIFRoaXMg
YWxyZWFkeSB0YWtlcwotICAgIC8vIHF1aXRlIHNvbWUgdGltZSBhbmQgbGlic291cCBldmVuIG5l
ZWRzIHNvbWUgbW9yZSB0aW1lCi0gICAgLy8gdG8gYWN0dWFsbHkgcHJvdmlkZSBkYXRhIGFnYWlu
LiBJZiB3ZSBkbyBhbGwgdGhpcwotICAgIC8vIGFscmVhZHkgaWYgdGhlIHF1ZXVlIGlzIDIwJSBl
bXB0eSwgaXQncyBtdWNoIG1vcmUKLSAgICAvLyBsaWtlbHkgdGhhdCBsaWJzb3VwIGFscmVhZHkg
cHJvdmlkZXMgbmV3IGRhdGEgYmVmb3JlCi0gICAgLy8gdGhlIHF1ZXVlIGlzIHJlYWxseSBlbXB0
eS4KLSAgICAvLyBUaGlzIG1pZ2h0IG5lZWQgdHdlYWtpbmcgZm9yIHBvcnRzIG5vdCB1c2luZyBs
aWJzb3VwLgotICAgIGdfb2JqZWN0X3NldChwcml2LT5hcHBzcmMsICJtaW4tcGVyY2VudCIsIDIw
LCBudWxscHRyKTsKLQotICAgIGdzdF9iYXNlX3NyY19zZXRfYXV0b21hdGljX2VvcyhHU1RfQkFT
RV9TUkMocHJpdi0+YXBwc3JjKSwgRkFMU0UpOwotCi0gICAgZ3N0X2FwcF9zcmNfc2V0X2NhcHMo
cHJpdi0+YXBwc3JjLCBudWxscHRyKTsKLQotICAgIHByaXYtPm1pbmltdW1CbG9ja3NpemUgPSBn
c3RfYmFzZV9zcmNfZ2V0X2Jsb2Nrc2l6ZShHU1RfQkFTRV9TUkNfQ0FTVChwcml2LT5hcHBzcmMp
KTsKKyAgICB3ZWJraXRXZWJTcmNSZXNldChzcmMpOworICAgIGdzdF9iYXNlX3NyY19zZXRfYXV0
b21hdGljX2VvcyhHU1RfQkFTRV9TUkNfQ0FTVChzcmMpLCBGQUxTRSk7CiB9CiAKIHN0YXRpYyB2
b2lkIHdlYktpdFdlYlNyY0Rpc3Bvc2UoR09iamVjdCogb2JqZWN0KQpAQCAtMzQ3LDQ2ICszMTcs
MTA0IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0dldFByb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcElELCBHVmFsdWUqIHZhbHVlCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCB3
ZWJLaXRXZWJTcmNTdG9wKFdlYktpdFdlYlNyYyogc3JjKQorc3RhdGljIEdzdEZsb3dSZXR1cm4g
d2ViS2l0V2ViU3JjQ3JlYXRlKEdzdFB1c2hTcmMqIHB1c2hTcmMsIEdzdEJ1ZmZlcioqIGJ1ZmZl
cikKIHsKKyAgICBHc3RCYXNlU3JjKiBiYXNlU3JjID0gR1NUX0JBU0VfU1JDX0NBU1QocHVzaFNy
Yyk7CisgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhiYXNlU3JjKTsKICAg
ICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCi0gICAgaWYgKHByaXYt
PnJlc291cmNlIHx8IChwcml2LT5sb2FkZXIgJiYgIXByaXYtPmtlZXBBbGl2ZSkpIHsKLSAgICAg
ICAgR1JlZlB0cjxXZWJLaXRXZWJTcmM+IHByb3RlY3RvciA9IFdURjo6ZW5zdXJlR1JlZihzcmMp
OwotICAgICAgICBwcml2LT5ub3RpZmllci0+Y2FuY2VsUGVuZGluZ05vdGlmaWNhdGlvbnMoTWFp
blRocmVhZFNvdXJjZU5vdGlmaWNhdGlvbjo6TmVlZERhdGEgfCBNYWluVGhyZWFkU291cmNlTm90
aWZpY2F0aW9uOjpFbm91Z2hEYXRhIHwgTWFpblRocmVhZFNvdXJjZU5vdGlmaWNhdGlvbjo6U2Vl
ayk7Ci0gICAgICAgIHByaXYtPm5vdGlmaWVyLT5ub3RpZnkoTWFpblRocmVhZFNvdXJjZU5vdGlm
aWNhdGlvbjo6U3RvcCwgW3Byb3RlY3Rvciwga2VlcEFsaXZlID0gcHJpdi0+a2VlcEFsaXZlXSB7
Ci0gICAgICAgICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gcHJvdGVjdG9yLT5wcml2
OworICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAicmVhZFBvc2l0aW9uID0gJSIgR19HVUlOVDY0
X0ZPUk1BVCAiIHJlcXVlc3RlZFBvc2l0aW9uID0gJSIgR19HVUlOVDY0X0ZPUk1BVCwgcHJpdi0+
cmVhZFBvc2l0aW9uLCBwcml2LT5yZXF1ZXN0ZWRQb3NpdGlvbik7CiAKLSAgICAgICAgICAgIGlm
IChwcml2LT5yZXNvdXJjZSkgewotICAgICAgICAgICAgICAgIHByaXYtPnJlc291cmNlLT5zdG9w
KCk7Ci0gICAgICAgICAgICAgICAgcHJpdi0+cmVzb3VyY2UtPnNldENsaWVudChudWxscHRyKTsK
LSAgICAgICAgICAgICAgICBwcml2LT5yZXNvdXJjZSA9IG51bGxwdHI7Ci0gICAgICAgICAgICB9
CisgICAgaWYgKHByaXYtPnJlcXVlc3RlZFBvc2l0aW9uICE9IHByaXYtPnJlYWRQb3NpdGlvbikg
eworICAgICAgICB7CisgICAgICAgICAgICBMb2NrSG9sZGVyIGFkYXB0ZXJMb2NrZXIocHJpdi0+
YWRhcHRlckxvY2spOworICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJTZWVraW5n
LCBmbHVzaGluZyBhZGFwdGVyIik7CisgICAgICAgICAgICAvLyBEaXNjYXJkIGFsbCB0aGUgYnVm
ZmVycyBjb21pbmcgYmVmb3JlIHRoZSByZXF1ZXN0ZWQgc2VlayBwb3NpdGlvbi4KKyAgICAgICAg
ICAgIGdzdF9hZGFwdGVyX2ZsdXNoKHByaXYtPmFkYXB0ZXIuZ2V0KCksIHByaXYtPnF1ZXVlU2l6
ZSk7CisgICAgICAgICAgICBwcml2LT5xdWV1ZVNpemUgPSAwOworICAgICAgICB9CisgICAgICAg
IHVpbnQ2NF90IHJlcXVlc3RlZFBvc2l0aW9uID0gcHJpdi0+cmVxdWVzdGVkUG9zaXRpb247Cisg
ICAgICAgIHdlYktpdFdlYlNyY1N0b3AoYmFzZVNyYyk7CisgICAgICAgIHByaXYtPnJlcXVlc3Rl
ZFBvc2l0aW9uID0gcmVxdWVzdGVkUG9zaXRpb247CisgICAgICAgIHdlYktpdFdlYlNyY1N0YXJ0
KGJhc2VTcmMpOworICAgIH0KIAotICAgICAgICAgICAgaWYgKCFrZWVwQWxpdmUpCi0gICAgICAg
ICAgICAgICAgcHJpdi0+bG9hZGVyID0gbnVsbHB0cjsKKyAgICB7CisgICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKHByaXYtPnJlc3BvbnNlTG9jayk7CisgICAgICAgIHByaXYtPnJlc3BvbnNlQ29u
ZGl0aW9uLndhaXQocHJpdi0+cmVzcG9uc2VMb2NrLCBbcHJpdl0gKCkgeworICAgICAgICAgICAg
cmV0dXJuIHByaXYtPndhc1Jlc3BvbnNlUmVjZWl2ZWQgfHwgcHJpdi0+aXNGbHVzaGluZzsKICAg
ICAgICAgfSk7CiAgICAgfQogCi0gICAgYm9vbCB3YXNTZWVraW5nID0gc3RkOjpleGNoYW5nZShw
cml2LT5pc1NlZWtpbmcsIGZhbHNlKTsKKyAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgImZsdXNo
aW5nOiAlcywgZG9lc0hhdmVFT1M6ICVzLCBxdWV1ZVNpemU6ICUiIEdfR1NJWkVfRk9STUFULCBi
b29sRm9yUHJpbnRpbmcocHJpdi0+aXNGbHVzaGluZyksIGJvb2xGb3JQcmludGluZyhwcml2LT5k
b2VzSGF2ZUVPUyksIHByaXYtPnF1ZXVlU2l6ZSk7CiAKLSAgICBwcml2LT5wYXVzZWQgPSBmYWxz
ZTsKKyAgICBpZiAocHJpdi0+aXNGbHVzaGluZykgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHNyYywgIkZsdXNoaW5nIik7CisgICAgICAgIHJldHVybiBHU1RfRkxPV19GTFVTSElORzsKKyAg
ICB9CiAKLSAgICBwcml2LT5vZmZzZXQgPSAwOworICAgIGlmIChwcml2LT5kb2VzSGF2ZUVPUykg
eworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIkVPUyIpOworICAgICAgICByZXR1cm4g
R1NUX0ZMT1dfRU9TOworICAgIH0KIAotICAgIGlmICghd2FzU2Vla2luZykgewotICAgICAgICBw
cml2LT5yZXF1ZXN0ZWRPZmZzZXQgPSAwOwotICAgICAgICBwcml2LT5wbGF5ZXIgPSBudWxscHRy
OwotICAgICAgICBwcml2LT5zZWVrYWJsZSA9IEZBTFNFOworICAgIHVuc2lnbmVkIHNpemUgPSBn
c3RfYmFzZV9zcmNfZ2V0X2Jsb2Nrc2l6ZShiYXNlU3JjKTsKKyAgICBib29sIGlzQWRhcHRlckRy
YWluZWQgPSBmYWxzZTsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgYWRhcHRlckxvY2tlcihw
cml2LT5hZGFwdGVyTG9jayk7CisgICAgICAgIHVuc2lnbmVkIHJldHJpZXMgPSAwOworICAgICAg
ICBzaXplX3QgYXZhaWxhYmxlID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlX2Zhc3QocHJpdi0+YWRh
cHRlci5nZXQoKSk7CisgICAgICAgIHdoaWxlIChhdmFpbGFibGUgPCBzaXplICYmICFpc0FkYXB0
ZXJEcmFpbmVkKSB7CisgICAgICAgICAgICBwcml2LT5hZGFwdGVyQ29uZGl0aW9uLndhaXRGb3Io
cHJpdi0+YWRhcHRlckxvY2ssIFNlY29uZHMoMSkpOworICAgICAgICAgICAgcmV0cmllcysrOwor
ICAgICAgICAgICAgYXZhaWxhYmxlID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlX2Zhc3QocHJpdi0+
YWRhcHRlci5nZXQoKSk7CisgICAgICAgICAgICBpZiAoYXZhaWxhYmxlICYmIChhdmFpbGFibGUg
PCBzaXplKSkKKyAgICAgICAgICAgICAgICBzaXplID0gYXZhaWxhYmxlOworICAgICAgICAgICAg
ZWxzZSBpZiAocmV0cmllcyA+IDMpCisgICAgICAgICAgICAgICAgaXNBZGFwdGVyRHJhaW5lZCA9
IHRydWU7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAocHJpdi0+YXBwc3JjKSB7Ci0gICAg
ICAgIGdzdF9hcHBfc3JjX3NldF9jYXBzKHByaXYtPmFwcHNyYywgbnVsbHB0cik7Ci0gICAgICAg
IGlmICghd2FzU2Vla2luZykKLSAgICAgICAgICAgIGdzdF9hcHBfc3JjX3NldF9zaXplKHByaXYt
PmFwcHNyYywgLTEpOworICAgIGlmIChpc0FkYXB0ZXJEcmFpbmVkKSB7CisgICAgICAgIEdTVF9E
RUJVR19PQkpFQ1Qoc3JjLCAiQWRhcHRlciBzdGlsbCBlbXB0eSBhZnRlciAzIHNlY29uZHMgb2Yg
d2FpdGluZywgYXNzdW1pbmcgRU9TIik7CisgICAgICAgIHJldHVybiBHU1RfRkxPV19FT1M7CiAg
ICAgfQogCi0gICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJTdG9wcGVkIHJlcXVlc3QiKTsKKyAg
ICBpZiAocHJpdi0+aGF2ZVNpemUgJiYgIXByaXYtPmR1cmF0aW9uU2V0KSB7CisgICAgICAgIEdT
VF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2V0dGluZyBkdXJhdGlvbiB0byAlIiBHX0dVSU5UNjRfRk9S
TUFULCBwcml2LT5zaXplKTsKKyAgICAgICAgYmFzZVNyYy0+c2VnbWVudC5kdXJhdGlvbiA9IHBy
aXYtPnNpemU7CisgICAgICAgIHByaXYtPmR1cmF0aW9uU2V0ID0gdHJ1ZTsKKyAgICAgICAgZ3N0
X2VsZW1lbnRfcG9zdF9tZXNzYWdlKEdTVF9FTEVNRU5UX0NBU1Qoc3JjKSwgZ3N0X21lc3NhZ2Vf
bmV3X2R1cmF0aW9uX2NoYW5nZWQoR1NUX09CSkVDVF9DQVNUKHNyYykpKTsKKyAgICB9CisKKyAg
ICBpZiAocHJpdi0+aHR0cEhlYWRlcnNFdmVudCkKKyAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50
KEdTVF9CQVNFX1NSQ19QQUQoYmFzZVNyYyksIHByaXYtPmh0dHBIZWFkZXJzRXZlbnQubGVha1Jl
ZigpKTsKKworICAgIHsKKyAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJUYWtpbmcgJXUg
Ynl0ZXMgZnJvbSBhZGFwdGVyIiwgc2l6ZSk7CisgICAgICAgIExvY2tIb2xkZXIgYWRhcHRlckxv
Y2tlcihwcml2LT5hZGFwdGVyTG9jayk7CisgICAgICAgIGlmIChzaXplKSB7CisgICAgICAgICAg
ICAqYnVmZmVyID0gZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXJfZmFzdChwcml2LT5hZGFwdGVyLmdl
dCgpLCBzaXplKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCpidWZmZXIpOworCisgICAg
ICAgICAgICBwcml2LT5xdWV1ZVNpemUgLT0gc2l6ZTsKKworICAgICAgICAgICAgR1NUX0JVRkZF
Ul9PRkZTRVQoKmJ1ZmZlcikgPSBiYXNlU3JjLT5zZWdtZW50LnBvc2l0aW9uOworICAgICAgICAg
ICAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EKCpidWZmZXIpID0gR1NUX0JVRkZFUl9PRkZTRVQoKmJ1
ZmZlcikgKyBzaXplOworICAgICAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJCdWZmZXIg
Ym91bmRzIHNldCB0byAlIiBHX0dVSU5UNjRfRk9STUFUICItJSIgR19HVUlOVDY0X0ZPUk1BVCwg
R1NUX0JVRkZFUl9PRkZTRVQoKmJ1ZmZlciksIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCgqYnVmZmVy
KSk7CisgICAgICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgImRvZXNIYXZlRU9TOiAlcywg
d2FzU2Vla2luZzogJXMsIHNlZWtpbmc6ICVzLCBzaXplOiAldSIsIGJvb2xGb3JQcmludGluZyhw
cml2LT5kb2VzSGF2ZUVPUyksIGJvb2xGb3JQcmludGluZyhwcml2LT53YXNTZWVraW5nKSwgYm9v
bEZvclByaW50aW5nKHByaXYtPmlzU2Vla2luZyksIHNpemUpOworICAgICAgICAgICAgaWYgKHBy
aXYtPmhhdmVTaXplICYmIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCgqYnVmZmVyKSA+PSBwcml2LT5z
aXplKSB7CisgICAgICAgICAgICAgICAgaWYgKHByaXYtPndhc1NlZWtpbmcpCisgICAgICAgICAg
ICAgICAgICAgIHByaXYtPndhc1NlZWtpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIHByaXYtPmRvZXNIYXZlRU9TID0gdHJ1ZTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAocHJpdi0+d2FzU2Vla2luZykKKyAgICAgICAgICAgICAgICBwcml2LT53
YXNTZWVraW5nID0gZmFsc2U7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgR1NUX0VSUk9S
X09CSkVDVChzcmMsICJFbXB0eSBhZGFwdGVyPyIpOworICAgIH0KKworICAgIHJldHVybiBHU1Rf
RkxPV19PSzsKIH0KIAogc3RhdGljIGJvb2wgd2ViS2l0V2ViU3JjU2V0RXh0cmFIZWFkZXIoR1F1
YXJrIGZpZWxkSWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIGdwb2ludGVyIHVzZXJEYXRhKQpAQCAt
NDQwLDE3ICs0NjgsMzAgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1Byb2Nlc3NFeHRy
YUhlYWRlcnMoR1F1YXJrIGZpZWxkSWQsIGNvbnN0IEdWYWx1ZSogdmEKICAgICByZXR1cm4gd2Vi
S2l0V2ViU3JjU2V0RXh0cmFIZWFkZXIoZmllbGRJZCwgdmFsdWUsIHVzZXJEYXRhKTsKIH0KIAot
c3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjU3RhcnQoV2ViS2l0V2ViU3JjKiBzcmMpCitzdGF0aWMg
Z2Jvb2xlYW4gd2ViS2l0V2ViU3JjU3RhcnQoR3N0QmFzZVNyYyogYmFzZVNyYykKIHsKKyAgICBX
ZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKGJhc2VTcmMpOwogICAgIFdlYktpdFdl
YlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CiAgICAgQVNTRVJUKHByaXYtPnBsYXllcik7
CiAKKyAgICBwcml2LT53ZXJlSGVhZGVyc1JlY2VpdmVkID0gZmFsc2U7CisgICAgcHJpdi0+d2Fz
UmVzcG9uc2VSZWNlaXZlZCA9IGZhbHNlOworICAgIHByaXYtPmR1cmF0aW9uU2V0ID0gZmFsc2U7
CisgICAgcHJpdi0+ZG9lc0hhdmVFT1MgPSBmYWxzZTsKKyAgICBwcml2LT5pc0ZsdXNoaW5nID0g
ZmFsc2U7CisKICAgICBwcml2LT5kaWRQYXNzQWNjZXNzQ29udHJvbENoZWNrID0gZmFsc2U7CiAK
ICAgICBpZiAocHJpdi0+b3JpZ2luYWxVUkkuaXNOdWxsKCkpIHsKICAgICAgICAgR1NUX0VSUk9S
X09CSkVDVChzcmMsICJObyBVUkkgcHJvdmlkZWQiKTsKLSAgICAgICAgd2ViS2l0V2ViU3JjU3Rv
cChzcmMpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHdlYktpdFdlYlNyY1N0b3AoYmFzZVNy
Yyk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBpZiAocHJpdi0+cmVxdWVz
dGVkUG9zaXRpb24gPT0gcHJpdi0+c3RvcFBvc2l0aW9uKSB7CisgICAgICAgIEdTVF9ERUJVR19P
QkpFQ1Qoc3JjLCAiRW1wdHkgc2VnbWVudCwgc2lnbmFsaW5nIEVPUyIpOworICAgICAgICBwcml2
LT5kb2VzSGF2ZUVPUyA9IHRydWU7CisgICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKICAg
ICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIkZldGNoaW5nICVzIiwgcHJpdi0+b3JpZ2luYWxVUkku
ZGF0YSgpKTsKQEAgLTQ4NCwxNiArNTI1LDE2IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1N0
YXJ0KFdlYktpdFdlYlNyYyogc3JjKQogICAgICAgICB8fCAhZ19hc2NpaV9zdHJjYXNlY21wKCJ0
cmFpbGVycy5hcHBsZS5jb20iLCB1cmwuaG9zdCgpLnV0ZjgoKS5kYXRhKCkpKQogICAgICAgICBy
ZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoIlF1aWNrdGltZS83LjYuNiIpOwogCi0gICAgaWYgKHBy
aXYtPnJlcXVlc3RlZE9mZnNldCkgewotICAgICAgICBHVW5pcXVlUHRyPGdjaGFyPiB2YWwoZ19z
dHJkdXBfcHJpbnRmKCJieXRlcz0lIiBHX0dVSU5UNjRfRk9STUFUICItIiwgcHJpdi0+cmVxdWVz
dGVkT2Zmc2V0KSk7Ci0gICAgICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFk
ZXJOYW1lOjpSYW5nZSwgdmFsLmdldCgpKTsKKyAgICBpZiAocHJpdi0+cmVxdWVzdGVkUG9zaXRp
b24pIHsKKyAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBmb3JtYXRlZFJhbmdlKGdfc3RyZHVwX3By
aW50ZigiYnl0ZXM9JSIgR19HVUlOVDY0X0ZPUk1BVCAiLSIsIHByaXYtPnJlcXVlc3RlZFBvc2l0
aW9uKSk7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUmFuZ2UgcmVxdWVzdDogJXMi
LCBmb3JtYXRlZFJhbmdlLmdldCgpKTsKKyAgICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmll
bGQoSFRUUEhlYWRlck5hbWU6OlJhbmdlLCBmb3JtYXRlZFJhbmdlLmdldCgpKTsKICAgICB9Ci0g
ICAgcHJpdi0+b2Zmc2V0ID0gcHJpdi0+cmVxdWVzdGVkT2Zmc2V0OworICAgIHByaXYtPnJlYWRQ
b3NpdGlvbiA9IHByaXYtPnJlcXVlc3RlZFBvc2l0aW9uOwogCiAgICAgR1NUX0RFQlVHX09CSkVD
VChzcmMsICJQZXJzaXN0ZW50IGNvbm5lY3Rpb24gc3VwcG9ydCAlcyIsIHByaXYtPmtlZXBBbGl2
ZSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOwotICAgIGlmICghcHJpdi0+a2VlcEFsaXZlKSB7
CisgICAgaWYgKCFwcml2LT5rZWVwQWxpdmUpCiAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRl
ckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb25uZWN0aW9uLCAiY2xvc2UiKTsKLSAgICB9CiAKICAg
ICBpZiAocHJpdi0+ZXh0cmFIZWFkZXJzKQogICAgICAgICBnc3Rfc3RydWN0dXJlX2ZvcmVhY2go
cHJpdi0+ZXh0cmFIZWFkZXJzLmdldCgpLCB3ZWJLaXRXZWJTcmNQcm9jZXNzRXh0cmFIZWFkZXJz
LCAmcmVxdWVzdCk7CkBAIC01MDIsOSArNTQzLDggQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViU3Jj
U3RhcnQoV2ViS2l0V2ViU3JjKiBzcmMpCiAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQo
SFRUUEhlYWRlck5hbWU6OkljeU1ldGFkYXRhLCAiMSIpOwogCiAgICAgR1JlZlB0cjxXZWJLaXRX
ZWJTcmM+IHByb3RlY3RvciA9IFdURjo6ZW5zdXJlR1JlZihzcmMpOwotICAgIHByaXYtPm5vdGlm
aWVyLT5ub3RpZnkoTWFpblRocmVhZFNvdXJjZU5vdGlmaWNhdGlvbjo6U3RhcnQsIFtwcm90ZWN0
b3IsIHJlcXVlc3QgPSBXVEZNb3ZlKHJlcXVlc3QpXSB7CisgICAgcHJpdi0+bm90aWZpZXItPm5v
dGlmeUFuZFdhaXQoTWFpblRocmVhZFNvdXJjZU5vdGlmaWNhdGlvbjo6U3RhcnQsIFtwcm90ZWN0
b3IsIHJlcXVlc3QgPSBXVEZNb3ZlKHJlcXVlc3QpXSB7CiAgICAgICAgIFdlYktpdFdlYlNyY1By
aXZhdGUqIHByaXYgPSBwcm90ZWN0b3ItPnByaXY7Ci0KICAgICAgICAgaWYgKCFwcml2LT5sb2Fk
ZXIpCiAgICAgICAgICAgICBwcml2LT5sb2FkZXIgPSBwcml2LT5wbGF5ZXItPmNyZWF0ZVJlc291
cmNlTG9hZGVyKCk7CiAKQEAgLTUxOCw5MCArNTU4LDE3MiBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRX
ZWJTcmNTdGFydChXZWJLaXRXZWJTcmMqIHNyYykKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIEdTVF9FUlJPUl9PQkpFQ1QocHJvdGVjdG9yLmdldCgpLCAiRmFpbGVkIHRvIHNldHVwIHN0
cmVhbWluZyBjbGllbnQiKTsKICAgICAgICAgICAgIHByaXYtPmxvYWRlciA9IG51bGxwdHI7Ci0g
ICAgICAgICAgICB3ZWJLaXRXZWJTcmNTdG9wKHByb3RlY3Rvci5nZXQoKSk7CiAgICAgICAgIH0K
ICAgICB9KTsKKworICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUmVzb3VyY2UgbG9hZGVyIHN0
YXJ0ZWQiKTsKKyAgICByZXR1cm4gVFJVRTsKIH0KIAotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0
dXJuIHdlYktpdFdlYlNyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdFN0YXRl
Q2hhbmdlIHRyYW5zaXRpb24pCitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNDbG9zZVNlc3Npb24o
V2ViS2l0V2ViU3JjKiBzcmMpCiB7Ci0gICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0ID0gR1NU
X1NUQVRFX0NIQU5HRV9TVUNDRVNTOwotICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dF
Ql9TUkMoZWxlbWVudCk7CiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJp
djsKKyAgICBHUmVmUHRyPFdlYktpdFdlYlNyYz4gcHJvdGVjdG9yID0gV1RGOjplbnN1cmVHUmVm
KHNyYyk7CiAKLSAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9D
SEFOR0VfTlVMTF9UT19SRUFEWToKLSAgICAgICAgaWYgKCFwcml2LT5hcHBzcmMpIHsKLSAgICAg
ICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShlbGVtZW50LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdzdF9taXNzaW5nX2VsZW1lbnRfbWVzc2FnZV9uZXcoZWxl
bWVudCwgImFwcHNyYyIpKTsKLSAgICAgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SKHNyYywgQ09S
RSwgTUlTU0lOR19QTFVHSU4sIChudWxscHRyKSwgKCJubyBhcHBzcmMiKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOworICAgIHByaXYtPm5vdGlmaWVyLT5u
b3RpZnlBbmRXYWl0KE1haW5UaHJlYWRTb3VyY2VOb3RpZmljYXRpb246OlN0b3AsIFtwcm90ZWN0
b3IsIGtlZXBBbGl2ZSA9IHByaXYtPmtlZXBBbGl2ZV0geworICAgICAgICBXZWJLaXRXZWJTcmNQ
cml2YXRlKiBwcml2ID0gcHJvdGVjdG9yLT5wcml2OworCisgICAgICAgIEdTVF9ERUJVR19PQkpF
Q1QocHJvdGVjdG9yLmdldCgpLCAiU3RvcHBpbmcgcmVzb3VyY2UgbG9hZGVyIik7CisKKyAgICAg
ICAgaWYgKHByaXYtPnJlc291cmNlKSB7CisgICAgICAgICAgICBwcml2LT5yZXNvdXJjZS0+c3Rv
cCgpOworICAgICAgICAgICAgcHJpdi0+cmVzb3VyY2UtPnNldENsaWVudChudWxscHRyKTsKKyAg
ICAgICAgICAgIHByaXYtPnJlc291cmNlID0gbnVsbHB0cjsKICAgICAgICAgfQotICAgICAgICBi
cmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoIWtlZXBB
bGl2ZSkKKyAgICAgICAgICAgIHByaXYtPmxvYWRlciA9IG51bGxwdHI7CisgICAgfSk7CisKKyAg
ICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlJlc291cmNlIGxvYWRlciBzdG9wcGVkIik7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNTdG9wKEdzdEJhc2VTcmMqIGJhc2VTcmMpCit7
CisgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhiYXNlU3JjKTsKKyAgICBX
ZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OworCisgICAgaWYgKHByaXYtPnJl
c291cmNlIHx8IChwcml2LT5sb2FkZXIgJiYgIXByaXYtPmtlZXBBbGl2ZSkpCisgICAgICAgIHdl
YktpdFdlYlNyY0Nsb3NlU2Vzc2lvbihzcmMpOworCisgICAgeworICAgICAgICBMb2NrSG9sZGVy
IGFkYXB0ZXJMb2NrZXIocHJpdi0+YWRhcHRlckxvY2spOworICAgICAgICBnc3RfYWRhcHRlcl9j
bGVhcihwcml2LT5hZGFwdGVyLmdldCgpKTsKKyAgICAgICAgcHJpdi0+cXVldWVTaXplID0gMDsK
ICAgICB9CiAKLSAgICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5jaGFu
Z2Vfc3RhdGUoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0gICAgaWYgKEdfVU5MSUtFTFkocmV0ID09
IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChz
cmMsICJTdGF0ZSBjaGFuZ2UgZmFpbGVkIik7Ci0gICAgICAgIHJldHVybiByZXQ7CisgICAgd2Vi
a2l0V2ViU3JjUmVzZXQoc3JjKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlN0b3BwZWQg
cmVxdWVzdCIpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0
V2ViU3JjR2V0U2l6ZShHc3RCYXNlU3JjKiBiYXNlU3JjLCBndWludDY0KiBzaXplKQoreworICAg
IFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMoYmFzZVNyYyk7CisgICAgV2ViS2l0
V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKworICAgIEdTVF9ERUJVR19PQkpFQ1Qo
c3JjLCAiaGF2ZVNpemU6ICVzLCBzaXplOiAlIiBHX0dVSU5UNjRfRk9STUFULCBib29sRm9yUHJp
bnRpbmcocHJpdi0+aGF2ZVNpemUpLCBwcml2LT5zaXplKTsKKyAgICBpZiAocHJpdi0+aGF2ZVNp
emUpIHsKKyAgICAgICAgKnNpemUgPSBwcml2LT5zaXplOworICAgICAgICByZXR1cm4gVFJVRTsK
ICAgICB9CiAKLSAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9D
SEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChz
cmMsICJSRUFEWS0+UEFVU0VEIik7Ci0gICAgICAgIHdlYktpdFdlYlNyY1N0YXJ0KHNyYyk7Ci0g
ICAgICAgIGJyZWFrOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29sZWFuIHdl
YktpdFdlYlNyY0lzU2Vla2FibGUoR3N0QmFzZVNyYyogYmFzZVNyYykKK3sKKyAgICBXZWJLaXRX
ZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKGJhc2VTcmMpOworCisgICAgR1NUX0RFQlVHX09C
SkVDVChzcmMsICJpc1NlZWthYmxlOiAlcyIsIGJvb2xGb3JQcmludGluZyhzcmMtPnByaXYtPmlz
U2Vla2FibGUpKTsKKyAgICByZXR1cm4gc3JjLT5wcml2LT5pc1NlZWthYmxlOworfQorCitzdGF0
aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjRG9TZWVrKEdzdEJhc2VTcmMqIGJhc2VTcmMsIEdzdFNl
Z21lbnQqIHNlZ21lbnQpCit7CisgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NS
QyhiYXNlU3JjKTsKKyAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2Owor
ICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPnJlc3BvbnNlTG9jayk7CisKKyAgICBHU1RfREVC
VUdfT0JKRUNUKHNyYywgIlNlZWsgc2VnbWVudDogKCUiIEdfR1VJTlQ2NF9GT1JNQVQgIi0lIiBH
X0dVSU5UNjRfRk9STUFUICIpIiwgc2VnbWVudC0+c3RhcnQsIHNlZ21lbnQtPnN0b3ApOworICAg
IGlmIChwcml2LT5yZWFkUG9zaXRpb24gPT0gc2VnbWVudC0+c3RhcnQgJiYgcHJpdi0+cmVxdWVz
dGVkUG9zaXRpb24gPT0gcHJpdi0+cmVhZFBvc2l0aW9uICYmIHByaXYtPnN0b3BQb3NpdGlvbiA9
PSBzZWdtZW50LT5zdG9wKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2VlayB0
byBjdXJyZW50IHJlYWQvZW5kIHBvc2l0aW9uIGFuZCBubyBzZWVrIHBlbmRpbmciKTsKKyAgICAg
ICAgcmV0dXJuIFRSVUU7CiAgICAgfQotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURf
VE9fUkVBRFk6Ci0gICAgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlBBVVNFRC0+
UkVBRFkiKTsKLSAgICAgICAgd2ViS2l0V2ViU3JjU3RvcChzcmMpOwotICAgICAgICBicmVhazsK
KworICAgIGlmIChwcml2LT53ZXJlSGVhZGVyc1JlY2VpdmVkICYmICFwcml2LT5pc1NlZWthYmxl
KSB7CisgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChzcmMsICJOb3Qgc2Vla2FibGUiKTsKKyAg
ICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsK
KworICAgIGlmIChzZWdtZW50LT5yYXRlIDwgMC4wIHx8IHNlZ21lbnQtPmZvcm1hdCAhPSBHU1Rf
Rk9STUFUX0JZVEVTKSB7CisgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChzcmMsICJJbnZhbGlk
IHNlZWsgc2VnbWVudCIpOworICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCi0gICAgcmV0
dXJuIHJldDsKKyAgICBpZiAocHJpdi0+aGF2ZVNpemUgJiYgc2VnbWVudC0+c3RhcnQgPj0gcHJp
di0+c2l6ZSkKKyAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKHNyYywgIlBvdGVudGlhbGx5IHNl
ZWtpbmcgYmVoaW5kIGVuZCBvZiBmaWxlLCBtaWdodCBFT1MgaW1tZWRpYXRlbHkiKTsKKworICAg
IHByaXYtPmlzU2Vla2luZyA9IHRydWU7CisgICAgcHJpdi0+cmVxdWVzdGVkUG9zaXRpb24gPSBz
ZWdtZW50LT5zdGFydDsKKyAgICBwcml2LT5zdG9wUG9zaXRpb24gPSBzZWdtZW50LT5zdG9wOwor
ICAgIHJldHVybiBUUlVFOwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjUXVlcnlX
aXRoUGFyZW50KEdzdFBhZCogcGFkLCBHc3RPYmplY3QqIHBhcmVudCwgR3N0UXVlcnkqIHF1ZXJ5
KQorc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1F1ZXJ5KEdzdEJhc2VTcmMqIGJhc2VTcmMs
IEdzdFF1ZXJ5KiBxdWVyeSkKIHsKLSAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJf
U1JDKEdTVF9FTEVNRU5UKHBhcmVudCkpOworICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lU
X1dFQl9TUkMoYmFzZVNyYyk7CiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+
cHJpdjsKICAgICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKIAotICAgIHN3aXRjaCAoR1NUX1FV
RVJZX1RZUEUocXVlcnkpKSB7Ci0gICAgY2FzZSBHU1RfUVVFUllfVVJJOiB7CisgICAgaWYgKEdT
VF9RVUVSWV9UWVBFKHF1ZXJ5KSA9PSBHU1RfUVVFUllfVVJJKSB7CiAgICAgICAgIGdzdF9xdWVy
eV9zZXRfdXJpKHF1ZXJ5LCBwcml2LT5vcmlnaW5hbFVSSS5kYXRhKCkpOwogICAgICAgICBpZiAo
IXByaXYtPnJlZGlyZWN0ZWRVUkkuaXNOdWxsKCkpCiAgICAgICAgICAgICBnc3RfcXVlcnlfc2V0
X3VyaV9yZWRpcmVjdGlvbihxdWVyeSwgcHJpdi0+cmVkaXJlY3RlZFVSSS5kYXRhKCkpOwogICAg
ICAgICByZXN1bHQgPSBUUlVFOwotICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHU1Rf
UVVFUllfU0NIRURVTElORzogeworCisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJlc3VsdCA9
IEdTVF9CQVNFX1NSQ19DTEFTUyhwYXJlbnRfY2xhc3MpLT5xdWVyeShiYXNlU3JjLCBxdWVyeSk7
CisKKyAgICBpZiAoR1NUX1FVRVJZX1RZUEUocXVlcnkpID09IEdTVF9RVUVSWV9TQ0hFRFVMSU5H
KSB7CiAgICAgICAgIEdzdFNjaGVkdWxpbmdGbGFncyBmbGFnczsKICAgICAgICAgaW50IG1pblNp
emUsIG1heFNpemUsIGFsaWduOwogCiAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9zY2hlZHVsaW5n
KHF1ZXJ5LCAmZmxhZ3MsICZtaW5TaXplLCAmbWF4U2l6ZSwgJmFsaWduKTsKICAgICAgICAgZ3N0
X3F1ZXJ5X3NldF9zY2hlZHVsaW5nKHF1ZXJ5LCBzdGF0aWNfY2FzdDxHc3RTY2hlZHVsaW5nRmxh
Z3M+KGZsYWdzIHwgR1NUX1NDSEVEVUxJTkdfRkxBR19CQU5EV0lEVEhfTElNSVRFRCksIG1pblNp
emUsIG1heFNpemUsIGFsaWduKTsKLSAgICAgICAgcmVzdWx0ID0gVFJVRTsKLSAgICAgICAgYnJl
YWs7CiAgICAgfQotICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHRhcmdl
dCA9IGFkb3B0R1JlZihnc3RfZ2hvc3RfcGFkX2dldF90YXJnZXQoR1NUX0dIT1NUX1BBRF9DQVNU
KHBhZCkpKTsKIAotICAgICAgICAvLyBGb3J3YXJkIHRoZSBxdWVyeSB0byB0aGUgcHJveHkgdGFy
Z2V0IHBhZC4KLSAgICAgICAgaWYgKHRhcmdldCkKLSAgICAgICAgICAgIHJlc3VsdCA9IGdzdF9w
YWRfcXVlcnkodGFyZ2V0LmdldCgpLCBxdWVyeSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
c3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1VuTG9jayhHc3RCYXNlU3JjKiBiYXNlU3JjKQor
eworICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMoYmFzZVNyYyk7CisgICAg
TG9ja0hvbGRlciBsb2NrZXIoc3JjLT5wcml2LT5yZXNwb25zZUxvY2spOworCisgICAgR1NUX0RF
QlVHX09CSkVDVChzcmMsICJVbmxvY2siKTsKKyAgICBzcmMtPnByaXYtPmlzRmx1c2hpbmcgPSB0
cnVlOworICAgIHNyYy0+cHJpdi0+cmVzcG9uc2VDb25kaXRpb24ubm90aWZ5T25lKCk7CisgICAg
cmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNVbkxvY2tTdG9w
KEdzdEJhc2VTcmMqIGJhc2VTcmMpCit7CisgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRf
V0VCX1NSQyhiYXNlU3JjKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihzcmMtPnByaXYtPnJlc3Bv
bnNlTG9jayk7CisgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJVbmxvY2sgc3RvcCIpOworICAg
IHNyYy0+cHJpdi0+aXNGbHVzaGluZyA9IGZhbHNlOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisK
K3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZShHc3RF
bGVtZW50KiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQoreworICAgIFdlYktp
dFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMoZWxlbWVudCk7CisKKyNpZiBHU1RfQ0hFQ0tf
VkVSU0lPTigxLCAxNCwgMCkKKyAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgZ3N0X3N0YXRlX2No
YW5nZV9nZXRfbmFtZSh0cmFuc2l0aW9uKSk7CisjZW5kaWYKKyAgICBzd2l0Y2ggKHRyYW5zaXRp
b24pIHsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTDoKKyAgICAgICAg
d2ViS2l0V2ViU3JjQ2xvc2VTZXNzaW9uKHNyYyk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CiAgICAgICAgIGJyZWFrOwotICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIHJldHVybiBHU1RfRUxFTUVOVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUo
ZWxlbWVudCwgdHJhbnNpdGlvbik7CiB9CiAKIHN0YXRpYyBib29sIHVybEhhc1N1cHBvcnRlZFBy
b3RvY29sKGNvbnN0IFVSTCYgdXJsKQpAQCAtNjcyLDYxICs3OTQsNiBAQCBzdGF0aWMgdm9pZCB3
ZWJLaXRXZWJTcmNVcmlIYW5kbGVySW5pdChncG9pbnRlciBnSWZhY2UsIGdwb2ludGVyKQogICAg
IGlmYWNlLT5zZXRfdXJpID0gd2ViS2l0V2ViU3JjU2V0VXJpOwogfQogCi1zdGF0aWMgdm9pZCB3
ZWJLaXRXZWJTcmNOZWVkRGF0YShXZWJLaXRXZWJTcmMqIHNyYykKLXsKLSAgICBXZWJLaXRXZWJT
cmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwotCi0gICAgR1NUX0xPR19PQkpFQ1Qoc3JjLCAi
TmVlZCBtb3JlIGRhdGEiKTsKLQotICAgIGlmICghcHJpdi0+cGF1c2VkKQotICAgICAgICByZXR1
cm47Ci0gICAgcHJpdi0+cGF1c2VkID0gZmFsc2U7Ci0KLSAgICBHUmVmUHRyPFdlYktpdFdlYlNy
Yz4gcHJvdGVjdG9yID0gV1RGOjplbnN1cmVHUmVmKHNyYyk7Ci0gICAgcHJpdi0+bm90aWZpZXIt
Pm5vdGlmeShNYWluVGhyZWFkU291cmNlTm90aWZpY2F0aW9uOjpOZWVkRGF0YSwgW3Byb3RlY3Rv
cl0geyB9KTsKLX0KLQotc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjRW5vdWdoRGF0YShXZWJLaXRX
ZWJTcmMqIHNyYykKLXsKLSAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2
OwotCi0gICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJIYXZlIGVub3VnaCBkYXRhIik7Ci0KLSAg
ICBpZiAocHJpdi0+cGF1c2VkKQotICAgICAgICByZXR1cm47Ci0gICAgcHJpdi0+cGF1c2VkID0g
dHJ1ZTsKLQotICAgIEdSZWZQdHI8V2ViS2l0V2ViU3JjPiBwcm90ZWN0b3IgPSBXVEY6OmVuc3Vy
ZUdSZWYoc3JjKTsKLSAgICBwcml2LT5ub3RpZmllci0+bm90aWZ5KE1haW5UaHJlYWRTb3VyY2VO
b3RpZmljYXRpb246OkVub3VnaERhdGEsIFtwcm90ZWN0b3JdIHsKLSAgICAgICAgV2ViS2l0V2Vi
U3JjUHJpdmF0ZSogcHJpdiA9IHByb3RlY3Rvci0+cHJpdjsKLSAgICAgICAgaWYgKHByaXYtPnJl
c291cmNlKQotICAgICAgICAgICAgcHJpdi0+cmVzb3VyY2UtPnN0b3AoKTsKLSAgICB9KTsKLX0K
LQotc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NlZWsoV2ViS2l0V2ViU3JjKiBzcmMsIGd1
aW50NjQgb2Zmc2V0KQotewotICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnBy
aXY7Ci0KLSAgICBpZiAob2Zmc2V0ID09IHByaXYtPm9mZnNldCAmJiBwcml2LT5yZXF1ZXN0ZWRP
ZmZzZXQgPT0gcHJpdi0+b2Zmc2V0KQotICAgICAgICByZXR1cm4gVFJVRTsKLQotICAgIGlmICgh
cHJpdi0+c2Vla2FibGUpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIHByaXYtPmlzU2Vl
a2luZyA9IHRydWU7Ci0gICAgcHJpdi0+cmVxdWVzdGVkT2Zmc2V0ID0gb2Zmc2V0OwotCi0gICAg
R1NUX0RFQlVHX09CSkVDVChzcmMsICJTZWVraW5nIHRvIG9mZnNldDogJSIgR19HVUlOVDY0X0ZP
Uk1BVCwgc3JjLT5wcml2LT5yZXF1ZXN0ZWRPZmZzZXQpOwotCi0gICAgR1JlZlB0cjxXZWJLaXRX
ZWJTcmM+IHByb3RlY3RvciA9IFdURjo6ZW5zdXJlR1JlZihzcmMpOwotICAgIHByaXYtPm5vdGlm
aWVyLT5ub3RpZnkoTWFpblRocmVhZFNvdXJjZU5vdGlmaWNhdGlvbjo6U2VlaywgW3Byb3RlY3Rv
cl0gewotICAgICAgICB3ZWJLaXRXZWJTcmNTdG9wKHByb3RlY3Rvci5nZXQoKSk7Ci0gICAgICAg
IHdlYktpdFdlYlNyY1N0YXJ0KHByb3RlY3Rvci5nZXQoKSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJu
IFRSVUU7Ci19Ci0KIHZvaWQgd2ViS2l0V2ViU3JjU2V0TWVkaWFQbGF5ZXIoV2ViS2l0V2ViU3Jj
KiBzcmMsIFdlYkNvcmU6Ok1lZGlhUGxheWVyKiBwbGF5ZXIpCiB7CiAgICAgQVNTRVJUKHBsYXll
cik7CkBAIC03NDksMTAgKzgxNiwxMSBAQCBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6
fkNhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50KCkgPSBkZWZhdWx0Owogdm9pZCBDYWNoZWRS
ZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6Y2hlY2tVcGRhdGVCbG9ja3NpemUodWludDY0X3QgYnl0
ZXNSZWFkKQogewogICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMobV9zcmMu
Z2V0KCkpOworICAgIEdzdEJhc2VTcmMqIGJhc2VTcmMgPSBHU1RfQkFTRV9TUkNfQ0FTVChzcmMp
OwogICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CiAKLSAgICB1aW50
NjRfdCBibG9ja3NpemUgPSBnc3RfYmFzZV9zcmNfZ2V0X2Jsb2Nrc2l6ZShHU1RfQkFTRV9TUkNf
Q0FTVChwcml2LT5hcHBzcmMpKTsKLSAgICBHU1RfTE9HX09CSkVDVChzcmMsICJDaGVja2luZyB0
byB1cGRhdGUgYmxvY2tzaXplLiBSZWFkOiUiIFBSSXU2NCAiIGJsb2Nrc2l6ZTolIiBQUkl1NjQs
IGJ5dGVzUmVhZCwgYmxvY2tzaXplKTsKKyAgICB1aW50NjRfdCBibG9ja3NpemUgPSBnc3RfYmFz
ZV9zcmNfZ2V0X2Jsb2Nrc2l6ZShiYXNlU3JjKTsKKyAgICBHU1RfTE9HX09CSkVDVChzcmMsICJD
aGVja2luZyB0byB1cGRhdGUgYmxvY2tzaXplLiBSZWFkOiAlIiBQUkl1NjQgIiwgY3VycmVudCBi
bG9ja3NpemU6ICUiIFBSSXU2NCwgYnl0ZXNSZWFkLCBibG9ja3NpemUpOwogCiAgICAgaWYgKGJ5
dGVzUmVhZCA+PSBibG9ja3NpemUgKiBzX2dyb3dCbG9ja3NpemVMaW1pdCkgewogICAgICAgICBt
X3JlZHVjZUJsb2Nrc2l6ZUNvdW50ID0gMDsKQEAgLTc2MSw3ICs4MjksNyBAQCB2b2lkIENhY2hl
ZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpjaGVja1VwZGF0ZUJsb2Nrc2l6ZSh1aW50NjRfdCBi
eXRlc1JlYWQpCiAgICAgICAgIGlmIChtX2luY3JlYXNlQmxvY2tzaXplQ291bnQgPj0gc19ncm93
QmxvY2tzaXplQ291bnQpIHsKICAgICAgICAgICAgIGJsb2Nrc2l6ZSAqPSBzX2dyb3dCbG9ja3Np
emVGYWN0b3I7CiAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIkluY3JlYXNlZCBi
bG9ja3NpemUgdG8gJSIgUFJJdTY0LCBibG9ja3NpemUpOwotICAgICAgICAgICAgZ3N0X2Jhc2Vf
c3JjX3NldF9ibG9ja3NpemUoR1NUX0JBU0VfU1JDX0NBU1QocHJpdi0+YXBwc3JjKSwgYmxvY2tz
aXplKTsKKyAgICAgICAgICAgIGdzdF9iYXNlX3NyY19zZXRfYmxvY2tzaXplKGJhc2VTcmMsIGJs
b2Nrc2l6ZSk7CiAgICAgICAgICAgICBtX2luY3JlYXNlQmxvY2tzaXplQ291bnQgPSAwOwogICAg
ICAgICB9CiAgICAgfSBlbHNlIGlmIChieXRlc1JlYWQgPCBibG9ja3NpemUgKiBzX3JlZHVjZUJs
b2Nrc2l6ZUxpbWl0KSB7CkBAIC03NzIsNyArODQwLDcgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZVN0
cmVhbWluZ0NsaWVudDo6Y2hlY2tVcGRhdGVCbG9ja3NpemUodWludDY0X3QgYnl0ZXNSZWFkKQog
ICAgICAgICAgICAgYmxvY2tzaXplICo9IHNfcmVkdWNlQmxvY2tzaXplRmFjdG9yOwogICAgICAg
ICAgICAgYmxvY2tzaXplID0gc3RkOjptYXgoYmxvY2tzaXplLCBwcml2LT5taW5pbXVtQmxvY2tz
aXplKTsKICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiRGVjcmVhc2VkIGJsb2Nr
c2l6ZSB0byAlIiBQUkl1NjQsIGJsb2Nrc2l6ZSk7Ci0gICAgICAgICAgICBnc3RfYmFzZV9zcmNf
c2V0X2Jsb2Nrc2l6ZShHU1RfQkFTRV9TUkNfQ0FTVChwcml2LT5hcHBzcmMpLCBibG9ja3NpemUp
OworICAgICAgICAgICAgZ3N0X2Jhc2Vfc3JjX3NldF9ibG9ja3NpemUoYmFzZVNyYywgYmxvY2tz
aXplKTsKICAgICAgICAgICAgIG1fcmVkdWNlQmxvY2tzaXplQ291bnQgPSAwOwogICAgICAgICB9
CiAgICAgfSBlbHNlIHsKQEAgLTc5OCw0OCArODY2LDQ0IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VT
dHJlYW1pbmdDbGllbnQ6OnJlc3BvbnNlUmVjZWl2ZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiwg
Y29uCiAKICAgICBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA+PSA0MDApIHsKICAgICAg
ICAgR1NUX0VMRU1FTlRfRVJST1Ioc3JjLCBSRVNPVVJDRSwgUkVBRCwgKCJSZWNlaXZlZCAlZCBI
VFRQIGVycm9yIGNvZGUiLCByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpKSwgKG51bGxwdHIpKTsK
LSAgICAgICAgZ3N0X2FwcF9zcmNfZW5kX29mX3N0cmVhbShwcml2LT5hcHBzcmMpOwotICAgICAg
ICB3ZWJLaXRXZWJTcmNTdG9wKHNyYyk7Ci0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxl
cihTaG91bGRDb250aW51ZTo6Tm8pOwotICAgIH0KLQotICAgIGlmIChwcml2LT5pc1NlZWtpbmcp
IHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJTZWVrIGluIHByb2dyZXNzLCBpZ25v
cmluZyByZXNwb25zZSIpOwotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoU2hvdWxk
Q29udGludWU6Olllcyk7CisgICAgICAgIHByaXYtPmRvZXNIYXZlRU9TID0gdHJ1ZTsKKyAgICAg
ICAgd2ViS2l0V2ViU3JjU3RvcChHU1RfQkFTRV9TUkNfQ0FTVChzcmMpKTsKKyAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoU2hvdWxkQ29udGludWU6Ok5vKTsKKyAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGlmIChwcml2LT5yZXF1ZXN0ZWRPZmZzZXQpIHsKKyAgICBpZiAocHJpdi0+cmVx
dWVzdGVkUG9zaXRpb24pIHsKICAgICAgICAgLy8gU2Vla2luZyAuLi4gd2UgZXhwZWN0IGEgMjA2
ID09IFBBUlRJQUxfQ09OVEVOVAogICAgICAgICBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUo
KSA9PSAyMDApIHsKICAgICAgICAgICAgIC8vIFJhbmdlIHJlcXVlc3QgZGlkbid0IGhhdmUgYSBy
YW5nZWQgcmVzcG9uc2U7IHJlc2V0dGluZyBvZmZzZXQuCi0gICAgICAgICAgICBwcml2LT5vZmZz
ZXQgPSAwOworICAgICAgICAgICAgcHJpdi0+cmVhZFBvc2l0aW9uID0gMDsKICAgICAgICAgfSBl
bHNlIGlmIChyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpICE9IDIwNikgewogICAgICAgICAgICAg
Ly8gUmFuZ2UgcmVxdWVzdCBjb21wbGV0ZWx5IGZhaWxlZC4KICAgICAgICAgICAgIEdTVF9FTEVN
RU5UX0VSUk9SKHNyYywgUkVTT1VSQ0UsIFJFQUQsICgiUmVjZWl2ZWQgdW5leHBlY3RlZCAlZCBI
VFRQIHN0YXR1cyBjb2RlIiwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSksIChudWxscHRyKSk7
Ci0gICAgICAgICAgICBnc3RfYXBwX3NyY19lbmRfb2Zfc3RyZWFtKHByaXYtPmFwcHNyYyk7Ci0g
ICAgICAgICAgICB3ZWJLaXRXZWJTcmNTdG9wKHNyYyk7Ci0gICAgICAgICAgICByZXR1cm4gY29t
cGxldGlvbkhhbmRsZXIoU2hvdWxkQ29udGludWU6Ok5vKTsKKyAgICAgICAgICAgIHByaXYtPmRv
ZXNIYXZlRU9TID0gdHJ1ZTsKKyAgICAgICAgICAgIHdlYktpdFdlYlNyY1N0b3AoR1NUX0JBU0Vf
U1JDX0NBU1Qoc3JjKSk7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTaG91bGRDb250
aW51ZTo6Tm8pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSYW5nZSByZXF1ZXN0IHN1Y2NlZWRlZCIpOwor
ICAgICAgICAgICAgcHJpdi0+aXNTZWVraW5nID0gZmFsc2U7CisgICAgICAgICAgICBwcml2LT53
YXNTZWVraW5nID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGxvbmcgbG9uZyBsZW5n
dGggPSByZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsKLSAgICBpZiAobGVuZ3RoID4g
MCAmJiBwcml2LT5yZXF1ZXN0ZWRPZmZzZXQgJiYgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA9
PSAyMDYpCi0gICAgICAgIGxlbmd0aCArPSBwcml2LT5yZXF1ZXN0ZWRPZmZzZXQ7CisgICAgaWYg
KGxlbmd0aCA+IDAgJiYgcHJpdi0+cmVxdWVzdGVkUG9zaXRpb24gJiYgcmVzcG9uc2UuaHR0cFN0
YXR1c0NvZGUoKSA9PSAyMDYpCisgICAgICAgIGxlbmd0aCArPSBwcml2LT5yZXF1ZXN0ZWRQb3Np
dGlvbjsKIAotICAgIHByaXYtPnNlZWthYmxlID0gbGVuZ3RoID4gMCAmJiBnX2FzY2lpX3N0cmNh
c2VjbXAoIm5vbmUiLCByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkFj
Y2VwdFJhbmdlcykudXRmOCgpLmRhdGEoKSk7CisgICAgcHJpdi0+aXNTZWVrYWJsZSA9IGxlbmd0
aCA+IDAgJiYgZ19hc2NpaV9zdHJjYXNlY21wKCJub25lIiwgcmVzcG9uc2UuaHR0cEhlYWRlckZp
ZWxkKEhUVFBIZWFkZXJOYW1lOjpBY2NlcHRSYW5nZXMpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAg
R1NUX0RFQlVHX09CSkVDVChzcmMsICJTaXplOiAlbGxkLCBzZWVrYWJsZTogJXMiLCBsZW5ndGgs
IHByaXYtPnNlZWthYmxlID8gInllcyIgOiAibm8iKTsKLSAgICAvLyBub3RpZnkgc2l6ZS9kdXJh
dGlvbgorICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2l6ZTogJWxsZCwgaXNTZWVrYWJsZTog
JXMiLCBsZW5ndGgsIGJvb2xGb3JQcmludGluZyhwcml2LT5pc1NlZWthYmxlKSk7CiAgICAgaWYg
KGxlbmd0aCA+IDApIHsKICAgICAgICAgaWYgKCFwcml2LT5oYXZlU2l6ZSB8fCAoc3RhdGljX2Nh
c3Q8bG9uZyBsb25nPihwcml2LT5zaXplKSAhPSBsZW5ndGgpKSB7Ci0gICAgICAgICAgICBwcml2
LT5oYXZlU2l6ZSA9IFRSVUU7CisgICAgICAgICAgICBwcml2LT5oYXZlU2l6ZSA9IHRydWU7CiAg
ICAgICAgICAgICBwcml2LT5zaXplID0gbGVuZ3RoOwotICAgICAgICAgICAgZ3N0X2FwcF9zcmNf
c2V0X3NpemUocHJpdi0+YXBwc3JjLCBsZW5ndGgpOworICAgICAgICAgICAgcHJpdi0+ZHVyYXRp
b25TZXQgPSBmYWxzZTsKICAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGdzdF9hcHBf
c3JjX3NldF9zaXplKHByaXYtPmFwcHNyYywgLTEpOwotICAgICAgICBpZiAoIXByaXYtPnNlZWth
YmxlKQotICAgICAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X3N0cmVhbV90eXBlKHByaXYtPmFwcHNy
YywgR1NUX0FQUF9TVFJFQU1fVFlQRV9TVFJFQU0pOwogICAgIH0KIAogICAgIC8vIFNpZ25hbCB0
byBkb3duc3RyZWFtIGlmIHRoaXMgaXMgYW4gSWNlY2FzdCBzdHJlYW0uCkBAIC04NTQsMTE4ICs5
MTgsOTYgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6cmVzcG9uc2VSZWNl
aXZlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCBjb24KICAgICAgICAgICAgIFN0cmluZyBjb250
ZW50VHlwZSA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVu
dFR5cGUpOwogICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSZXNwb25zZSBDb250
ZW50VHlwZTogJXMiLCBjb250ZW50VHlwZS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIGdz
dF9jYXBzX3NldF9zaW1wbGUoY2Fwcy5nZXQoKSwgImNvbnRlbnQtdHlwZSIsIEdfVFlQRV9TVFJJ
TkcsIGNvbnRlbnRUeXBlLnV0ZjgoKS5kYXRhKCksIG51bGxwdHIpOwotCi0gICAgICAgICAgICBn
c3RfYXBwX3NyY19zZXRfc3RyZWFtX3R5cGUocHJpdi0+YXBwc3JjLCBHU1RfQVBQX1NUUkVBTV9U
WVBFX1NUUkVBTSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBnc3RfYXBwX3NyY19zZXRfY2Fw
cyhwcml2LT5hcHBzcmMsIGNhcHMuZ2V0KCkpOwotCi0gICAgLy8gRW1pdCBhIEdTVF9FVkVOVF9D
VVNUT01fRE9XTlNUUkVBTV9TVElDS1kgZXZlbnQgYW5kIG1lc3NhZ2UgdG8gbGV0Ci0gICAgLy8g
R1N0cmVhbWVyIGtub3cgYWJvdXQgdGhlIEhUVFAgaGVhZGVycyBzZW50IGFuZCByZWNlaXZlZC4K
LSAgICBHc3RTdHJ1Y3R1cmUqIGh0dHBIZWFkZXJzID0gZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHko
Imh0dHAtaGVhZGVycyIpOwotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGh0dHBIZWFkZXJzLCAidXJp
IiwgR19UWVBFX1NUUklORywgcHJpdi0+b3JpZ2luYWxVUkkuZGF0YSgpLAotICAgICAgICAiaHR0
cC1zdGF0dXMtY29kZSIsIEdfVFlQRV9VSU5ULCByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpLCBu
dWxscHRyKTsKLSAgICBpZiAoIXByaXYtPnJlZGlyZWN0ZWRVUkkuaXNOdWxsKCkpCi0gICAgICAg
IGdzdF9zdHJ1Y3R1cmVfc2V0KGh0dHBIZWFkZXJzLCAicmVkaXJlY3Rpb24tdXJpIiwgR19UWVBF
X1NUUklORywgcHJpdi0+cmVkaXJlY3RlZFVSSS5kYXRhKCksIG51bGxwdHIpOwotICAgIEdVbmlx
dWVQdHI8R3N0U3RydWN0dXJlPiBoZWFkZXJzKGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCJyZXF1
ZXN0LWhlYWRlcnMiKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiBtX3JlcXVlc3Qu
aHR0cEhlYWRlckZpZWxkcygpKQotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChoZWFkZXJzLmdl
dCgpLCBoZWFkZXIua2V5LnV0ZjgoKS5kYXRhKCksIEdfVFlQRV9TVFJJTkcsIGhlYWRlci52YWx1
ZS51dGY4KCkuZGF0YSgpLCBudWxscHRyKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlJl
cXVlc3QgaGVhZGVycyBnb2luZyBkb3duc3RyZWFtOiAlIiBHU1RfUFRSX0ZPUk1BVCwgaGVhZGVy
cy5nZXQoKSk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9zZXQoaHR0cEhlYWRlcnMsICJyZXF1ZXN0LWhl
YWRlcnMiLCBHU1RfVFlQRV9TVFJVQ1RVUkUsIGhlYWRlcnMuZ2V0KCksIG51bGxwdHIpOwotICAg
IGhlYWRlcnMucmVzZXQoZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkoInJlc3BvbnNlLWhlYWRlcnMi
KSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiByZXNwb25zZS5odHRwSGVhZGVyRmll
bGRzKCkpCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGhlYWRlcnMuZ2V0KCksIGhlYWRlci5r
ZXkudXRmOCgpLmRhdGEoKSwgR19UWVBFX1NUUklORywgaGVhZGVyLnZhbHVlLnV0ZjgoKS5kYXRh
KCksIG51bGxwdHIpOwotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGh0dHBIZWFkZXJzLCAicmVzcG9u
c2UtaGVhZGVycyIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgaGVhZGVycy5nZXQoKSwgbnVsbHB0cik7
Ci0gICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSZXNwb25zZSBoZWFkZXJzIGdvaW5nIGRvd25z
dHJlYW06ICUiIEdTVF9QVFJfRk9STUFULCBoZWFkZXJzLmdldCgpKTsKLQotICAgIGdzdF9lbGVt
ZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVF9DQVNUKHNyYyksIGdzdF9tZXNzYWdlX25ld19l
bGVtZW50KEdTVF9PQkpFQ1RfQ0FTVChzcmMpLAotICAgICAgICBnc3Rfc3RydWN0dXJlX2NvcHko
aHR0cEhlYWRlcnMpKSk7Ci0gICAgZ3N0X3BhZF9wdXNoX2V2ZW50KEdTVF9CQVNFX1NSQ19QQUQo
cHJpdi0+YXBwc3JjKSwgZ3N0X2V2ZW50X25ld19jdXN0b20oR1NUX0VWRU5UX0NVU1RPTV9ET1dO
U1RSRUFNX1NUSUNLWSwgaHR0cEhlYWRlcnMpKTsKLSAgICAKKyAgICBpZiAoY2FwcykgeworICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlNldCBjYXBzIHRvICUiIEdTVF9QVFJfRk9STUFU
LCBjYXBzLmdldCgpKTsKKyAgICAgICAgZ3N0X2Jhc2Vfc3JjX3NldF9jYXBzKEdTVF9CQVNFX1NS
Q19DQVNUKHNyYyksIGNhcHMuZ2V0KCkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgTG9ja0hv
bGRlciBsb2NrZXIocHJpdi0+cmVzcG9uc2VMb2NrKTsKKworICAgICAgICAvLyBFbWl0IGEgR1NU
X0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX1NUSUNLWSBldmVudCBhbmQgbWVzc2FnZSB0byBsZXQK
KyAgICAgICAgLy8gR1N0cmVhbWVyIGtub3cgYWJvdXQgdGhlIEhUVFAgaGVhZGVycyBzZW50IGFu
ZCByZWNlaXZlZC4KKyAgICAgICAgR3N0U3RydWN0dXJlKiBodHRwSGVhZGVycyA9IGdzdF9zdHJ1
Y3R1cmVfbmV3X2VtcHR5KCJodHRwLWhlYWRlcnMiKTsKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9z
ZXQoaHR0cEhlYWRlcnMsICJ1cmkiLCBHX1RZUEVfU1RSSU5HLCBwcml2LT5vcmlnaW5hbFVSSS5k
YXRhKCksCisgICAgICAgICAgICAiaHR0cC1zdGF0dXMtY29kZSIsIEdfVFlQRV9VSU5ULCByZXNw
b25zZS5odHRwU3RhdHVzQ29kZSgpLCBudWxscHRyKTsKKyAgICAgICAgaWYgKCFwcml2LT5yZWRp
cmVjdGVkVVJJLmlzTnVsbCgpKQorICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaHR0cEhl
YWRlcnMsICJyZWRpcmVjdGlvbi11cmkiLCBHX1RZUEVfU1RSSU5HLCBwcml2LT5yZWRpcmVjdGVk
VVJJLmRhdGEoKSwgbnVsbHB0cik7CisgICAgICAgIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBo
ZWFkZXJzKGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCJyZXF1ZXN0LWhlYWRlcnMiKSk7CisgICAg
ICAgIGZvciAoY29uc3QgYXV0byYgaGVhZGVyIDogbV9yZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMo
KSkKKyAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGhlYWRlcnMuZ2V0KCksIGhlYWRlci5r
ZXkudXRmOCgpLmRhdGEoKSwgR19UWVBFX1NUUklORywgaGVhZGVyLnZhbHVlLnV0ZjgoKS5kYXRh
KCksIG51bGxwdHIpOworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlJlcXVlc3QgaGVh
ZGVycyBnb2luZyBkb3duc3RyZWFtOiAlIiBHU1RfUFRSX0ZPUk1BVCwgaGVhZGVycy5nZXQoKSk7
CisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGh0dHBIZWFkZXJzLCAicmVxdWVzdC1oZWFkZXJz
IiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBoZWFkZXJzLmdldCgpLCBudWxscHRyKTsKKyAgICAgICAg
aGVhZGVycy5yZXNldChnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgicmVzcG9uc2UtaGVhZGVycyIp
KTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiByZXNwb25zZS5odHRwSGVhZGVy
RmllbGRzKCkpIHsKKyAgICAgICAgICAgIGJvb2wgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgIHVp
bnQ2NF90IGNvbnZlcnRlZFZhbHVlID0gaGVhZGVyLnZhbHVlLnRvVUludDY0KCZvayk7CisgICAg
ICAgICAgICBpZiAob2spCisgICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaGVhZGVy
cy5nZXQoKSwgaGVhZGVyLmtleS51dGY4KCkuZGF0YSgpLCBHX1RZUEVfVUlOVDY0LCBjb252ZXJ0
ZWRWYWx1ZSwgbnVsbHB0cik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ3N0
X3N0cnVjdHVyZV9zZXQoaGVhZGVycy5nZXQoKSwgaGVhZGVyLmtleS51dGY4KCkuZGF0YSgpLCBH
X1RZUEVfU1RSSU5HLCBoZWFkZXIudmFsdWUudXRmOCgpLmRhdGEoKSwgbnVsbHB0cik7CisgICAg
ICAgIH0KKyAgICAgICAgYXV0byBjb250ZW50TGVuZ3RoRmllbGROYW1lKGh0dHBIZWFkZXJOYW1l
U3RyaW5nKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50TGVuZ3RoKS50b1N0cmluZygpKTsKKyAgICAg
ICAgaWYgKCFnc3Rfc3RydWN0dXJlX2hhc19maWVsZChoZWFkZXJzLmdldCgpLCBjb250ZW50TGVu
Z3RoRmllbGROYW1lLnV0ZjgoKS5kYXRhKCkpKQorICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9z
ZXQoaGVhZGVycy5nZXQoKSwgY29udGVudExlbmd0aEZpZWxkTmFtZS51dGY4KCkuZGF0YSgpLCBH
X1RZUEVfVUlOVDY0LCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obGVuZ3RoKSwgbnVsbHB0cik7Cisg
ICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGh0dHBIZWFkZXJzLCAicmVzcG9uc2UtaGVhZGVycyIs
IEdTVF9UWVBFX1NUUlVDVFVSRSwgaGVhZGVycy5nZXQoKSwgbnVsbHB0cik7CisgICAgICAgIEdT
VF9ERUJVR19PQkpFQ1Qoc3JjLCAiUmVzcG9uc2UgaGVhZGVycyBnb2luZyBkb3duc3RyZWFtOiAl
IiBHU1RfUFRSX0ZPUk1BVCwgaGVhZGVycy5nZXQoKSk7CisKKyAgICAgICAgZ3N0X2VsZW1lbnRf
cG9zdF9tZXNzYWdlKEdTVF9FTEVNRU5UX0NBU1Qoc3JjKSwgZ3N0X21lc3NhZ2VfbmV3X2VsZW1l
bnQoR1NUX09CSkVDVF9DQVNUKHNyYyksCisgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2NvcHko
aHR0cEhlYWRlcnMpKSk7CisKKyAgICAgICAgcHJpdi0+aHR0cEhlYWRlcnNFdmVudCA9IGFkb3B0
R1JlZihnc3RfZXZlbnRfbmV3X2N1c3RvbShHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU1fU1RJ
Q0tZLCBodHRwSGVhZGVycykpOworICAgICAgICBwcml2LT53ZXJlSGVhZGVyc1JlY2VpdmVkID0g
dHJ1ZTsKKyAgICAgICAgcHJpdi0+aGVhZGVyc0NvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICB9
CiAgICAgY29tcGxldGlvbkhhbmRsZXIoU2hvdWxkQ29udGludWU6Olllcyk7CiB9CiAKIHZvaWQg
Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmRhdGFSZWNlaXZlZChQbGF0Zm9ybU1lZGlh
UmVzb3VyY2UmLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogewogICAgIFdlYktpdFdl
YlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMobV9zcmMuZ2V0KCkpOworICAgIEdzdEJhc2VTcmMq
IGJhc2VTcmMgPSBHU1RfQkFTRV9TUkNfQ0FTVChzcmMpOwogICAgIFdlYktpdFdlYlNyY1ByaXZh
dGUqIHByaXYgPSBzcmMtPnByaXY7CiAKLSAgICBpZiAocHJpdi0+aXNTZWVraW5nKSB7Ci0gICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2VlayBpbiBwcm9ncmVzcywgaWdub3JpbmcgZGF0
YSIpOwotICAgICAgICByZXR1cm47CisgICAgR1NUX0xPR19PQkpFQ1Qoc3JjLCAiSGF2ZSAlZCBi
eXRlcyBvZiBkYXRhIiwgbGVuZ3RoKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihwcml2LT5yZXNw
b25zZUxvY2spOworCisgICAgdWludDY0X3QgbmV3UG9zaXRpb24gPSBwcml2LT5yZWFkUG9zaXRp
b24gKyBsZW5ndGg7CisgICAgaWYgKEdfTElLRUxZIChwcml2LT5yZXF1ZXN0ZWRQb3NpdGlvbiA9
PSBwcml2LT5yZWFkUG9zaXRpb24pKQorICAgICAgICBwcml2LT5yZXF1ZXN0ZWRQb3NpdGlvbiA9
IG5ld1Bvc2l0aW9uOworICAgIHByaXYtPnJlYWRQb3NpdGlvbiA9IG5ld1Bvc2l0aW9uOworCisg
ICAgdWludDY0X3QgbmV3U2l6ZSA9IDA7CisgICAgaWYgKHByaXYtPmhhdmVTaXplICYmIChuZXdQ
b3NpdGlvbiA+IHByaXYtPnNpemUpKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAi
R290IHBvc2l0aW9uIHByZXZpb3VzIGVzdGltYXRlZCBjb250ZW50IHNpemUgKCUiIEdfR0lOVDY0
X0ZPUk1BVCAiID4gJSIgR19HSU5UNjRfRk9STUFUICIpIiwgbmV3UG9zaXRpb24sIHByaXYtPnNp
emUpOworICAgICAgICBuZXdTaXplID0gbmV3UG9zaXRpb247CisgICAgfSBlbHNlIGlmICghcHJp
di0+aGF2ZVNpemUpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJHb3QgaW5pdGlh
bCByZXNwb25zZSB3aXRob3V0IENvbnRlbnQtTGVuZ3RoLCBhc3N1bWluZyByZXNwb25zZSBzaXpl
IGFzIGR1cmF0aW9uLiIpOworICAgICAgICBuZXdTaXplID0gbGVuZ3RoOworICAgICAgICBwcml2
LT5oYXZlU2l6ZSA9IHRydWU7CiAgICAgfQogCi0gICAgaWYgKHByaXYtPm9mZnNldCA8IHByaXYt
PnJlcXVlc3RlZE9mZnNldCkgewotICAgICAgICAvLyBSYW5nZSByZXF1ZXN0IGZhaWxlZDsgc2Vl
a2luZyBtYW51YWxseS4KLSAgICAgICAgaWYgKHByaXYtPm9mZnNldCArIGxlbmd0aCA8PSBwcml2
LT5yZXF1ZXN0ZWRPZmZzZXQpIHsKLSAgICAgICAgICAgIC8vIERpc2NhcmQgYWxsIHRoZSBidWZm
ZXJzIGNvbWluZyBiZWZvcmUgdGhlIHJlcXVlc3RlZCBzZWVrIHBvc2l0aW9uLgotICAgICAgICAg
ICAgcHJpdi0+b2Zmc2V0ICs9IGxlbmd0aDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChwcml2LT5vZmZzZXQgKyBsZW5ndGggPiBwcml2LT5yZXF1ZXN0ZWRP
ZmZzZXQpIHsKLSAgICAgICAgICAgIGd1aW50NjQgb2Zmc2V0ID0gcHJpdi0+cmVxdWVzdGVkT2Zm
c2V0IC0gcHJpdi0+b2Zmc2V0OwotICAgICAgICAgICAgZGF0YSArPSBvZmZzZXQ7Ci0gICAgICAg
ICAgICBsZW5ndGggLT0gb2Zmc2V0OwotICAgICAgICAgICAgcHJpdi0+b2Zmc2V0ID0gcHJpdi0+
cmVxdWVzdGVkT2Zmc2V0OwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdi0+cmVxdWVzdGVkT2Zm
c2V0ID0gMDsKKyAgICBpZiAobmV3U2l6ZSkgeworICAgICAgICBwcml2LT5zaXplID0gbmV3U2l6
ZTsKKyAgICAgICAgYmFzZVNyYy0+c2VnbWVudC5kdXJhdGlvbiA9IHByaXYtPnNpemU7CisgICAg
ICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVF9DQVNUKHNyYyksIGdzdF9t
ZXNzYWdlX25ld19kdXJhdGlvbl9jaGFuZ2VkKEdTVF9PQkpFQ1RfQ0FTVChzcmMpKSk7CiAgICAg
fQogCiAgICAgY2hlY2tVcGRhdGVCbG9ja3NpemUobGVuZ3RoKTsKIAotICAgIHVpbnQ2NF90IHN0
YXJ0aW5nT2Zmc2V0ID0gcHJpdi0+b2Zmc2V0OwotCi0gICAgaWYgKHByaXYtPnJlcXVlc3RlZE9m
ZnNldCA9PSBwcml2LT5vZmZzZXQpCi0gICAgICAgIHByaXYtPnJlcXVlc3RlZE9mZnNldCArPSBs
ZW5ndGg7Ci0gICAgcHJpdi0+b2Zmc2V0ICs9IGxlbmd0aDsKLSAgICAvLyBwcml2LT5zaXplID09
IDAgaWYgcmVjZWl2ZWQgbGVuZ3RoIG9uIGRpZFJlY2VpdmVSZXNwb25zZSA8IDAuCi0gICAgaWYg
KHByaXYtPnNpemUgPiAwICYmIHByaXYtPm9mZnNldCA+IHByaXYtPnNpemUpIHsKLSAgICAgICAg
R1NUX0RFQlVHX09CSkVDVChzcmMsICJVcGRhdGluZyBpbnRlcm5hbCBzaXplIGZyb20gJSIgR19H
VUlOVDY0X0ZPUk1BVCAiIHRvICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHByaXYtPnNpemUsIHByaXYt
Pm9mZnNldCk7Ci0gICAgICAgIGdzdF9hcHBfc3JjX3NldF9zaXplKHByaXYtPmFwcHNyYywgcHJp
di0+b2Zmc2V0KTsKLSAgICAgICAgcHJpdi0+c2l6ZSA9IHByaXYtPm9mZnNldDsKLSAgICB9Ci0K
LSAgICAvLyBOb3cgc3BsaXQgdGhlIHJlY3YnZCBidWZmZXIgaW50byBidWZmZXJzIHRoYXQgYXJl
IG9mIGEgc2l6ZSBiYXNlc3JjIHN1Z2dlc3RzLiBJdCBpcyBpbXBvcnRhbnQgbm90Ci0gICAgLy8g
dG8gcHVzaCBidWZmZXJzIHRoYXQgYXJlIHRvbyBsYXJnZSwgb3RoZXJ3aXNlIGluY29ycmVjdCBi
dWZmZXJpbmcgbWVzc2FnZXMgY2FuIGJlIHNlbnQgZnJvbSB0aGUKLSAgICAvLyBwaXBlbGluZS4K
LSAgICB1aW50NjRfdCBidWZmZXJTaXplID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxlbmd0aCk7
Ci0gICAgdWludDY0X3QgYmxvY2tTaXplID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGdzdF9iYXNl
X3NyY19nZXRfYmxvY2tzaXplKEdTVF9CQVNFX1NSQ19DQVNUKHByaXYtPmFwcHNyYykpKTsKLSAg
ICBHU1RfTE9HX09CSkVDVChzcmMsICJTcGxpdHRpbmcgdGhlIHJlY2VpdmVkIGJ1ZmZlciBpbnRv
ICUiIFBSSXU2NCAiIGJsb2NrcyIsIGJ1ZmZlclNpemUgLyBibG9ja1NpemUpOwotICAgIGZvciAo
dWludDY0X3QgY3VycmVudE9mZnNldCA9IDA7IGN1cnJlbnRPZmZzZXQgPCBidWZmZXJTaXplOyBj
dXJyZW50T2Zmc2V0ICs9IGJsb2NrU2l6ZSkgewotICAgICAgICB1aW50NjRfdCBzdWJCdWZmZXJP
ZmZzZXQgPSBzdGFydGluZ09mZnNldCArIGN1cnJlbnRPZmZzZXQ7Ci0gICAgICAgIHVpbnQ2NF90
IGN1cnJlbnRPZmZzZXRTaXplID0gc3RkOjptaW4oYmxvY2tTaXplLCBidWZmZXJTaXplIC0gY3Vy
cmVudE9mZnNldCk7Ci0KLSAgICAgICAgR3N0QnVmZmVyKiBzdWJCdWZmZXIgPSBnc3RfYnVmZmVy
X25ld193cmFwcGVkKGdfbWVtZHVwKGRhdGEgKyBjdXJyZW50T2Zmc2V0LCBjdXJyZW50T2Zmc2V0
U2l6ZSksIGN1cnJlbnRPZmZzZXRTaXplKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdWJCdWZm
ZXIpKSB7Ci0gICAgICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUihzcmMsIENPUkUsIEZBSUxFRCwg
KCJGYWlsZWQgdG8gYWxsb2NhdGUgc3ViLWJ1ZmZlciIpLCAobnVsbHB0cikpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgIlN1
Yi1idWZmZXIgYm91bmRzOiAlIiBQUkl1NjQgIiAtLSAlIiBQUkl1NjQsIHN1YkJ1ZmZlck9mZnNl
dCwgc3ViQnVmZmVyT2Zmc2V0ICsgY3VycmVudE9mZnNldFNpemUpOwotICAgICAgICBHU1RfQlVG
RkVSX09GRlNFVChzdWJCdWZmZXIpID0gc3ViQnVmZmVyT2Zmc2V0OwotICAgICAgICBHU1RfQlVG
RkVSX09GRlNFVF9FTkQoc3ViQnVmZmVyKSA9IHN1YkJ1ZmZlck9mZnNldCArIGN1cnJlbnRPZmZz
ZXRTaXplOworICAgIGlmICghcHJpdi0+d2FzUmVzcG9uc2VSZWNlaXZlZCkKKyAgICAgICAgcHJp
di0+d2FzUmVzcG9uc2VSZWNlaXZlZCA9IHRydWU7CisgICAgcHJpdi0+cmVzcG9uc2VDb25kaXRp
b24ubm90aWZ5T25lKCk7CiAKLSAgICAgICAgaWYgKHByaXYtPmlzU2Vla2luZykgewotICAgICAg
ICAgICAgR1NUX1RSQUNFX09CSkVDVChzcmMsICJTdG9wcGluZyBidWZmZXIgYXBwZW5kcyBkdWUg
dG8gc2VlayIpOwotICAgICAgICAgICAgLy8gQSBzZWVrIGhhcyBoYXBwZW5lZCBpbiB0aGUgbWlk
ZGxlIG9mIHVzIGJyZWFraW5nIHRoZQotICAgICAgICAgICAgLy8gaW5jb21pbmcgZGF0YSB1cCBm
cm9tIGEgcHJldmlvdXMgcmVxdWVzdC4gU3RvcCBwdXNoaW5nCi0gICAgICAgICAgICAvLyBidWZm
ZXJzIHRoYXQgYXJlIG5vdyBmcm9tIHRoZSBpbmNvcnJlY3Qgb2Zmc2V0LgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJdCBtYXkgYmUgdGVtcHRpbmcgdG8gdXNl
IGEgR3N0QnVmZmVyTGlzdCBoZXJlLCBidXQgbm90ZQotICAgICAgICAvLyB0aGF0IHRoZXJlIGlz
IGEgcmFjZSBjb25kaXRpb24gaW4gR3N0RG93bmxvYWRCdWZmZXIgZHVyaW5nCi0gICAgICAgIC8v
IHNlZWsgZmx1c2hlcyB0aGF0IGNhbiBjYXVzZSBkZWNvZGVycyB0byByZWFkIGF0IGluY29ycmVj
dAotICAgICAgICAvLyBvZmZzZXRzLgotICAgICAgICBHc3RGbG93UmV0dXJuIHJldCA9IGdzdF9h
cHBfc3JjX3B1c2hfYnVmZmVyKHByaXYtPmFwcHNyYywgc3ViQnVmZmVyKTsKLQotICAgICAgICBp
ZiAoVU5MSUtFTFkocmV0ICE9IEdTVF9GTE9XX09LICYmIHJldCAhPSBHU1RfRkxPV19FT1MgJiYg
cmV0ICE9IEdTVF9GTE9XX0ZMVVNISU5HKSkgewotICAgICAgICAgICAgR1NUX0VMRU1FTlRfRVJS
T1Ioc3JjLCBDT1JFLCBGQUlMRUQsIChudWxscHRyKSwgKG51bGxwdHIpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGFkYXB0ZXJMb2Nr
ZXIocHJpdi0+YWRhcHRlckxvY2spOworICAgICAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IGdzdF9i
dWZmZXJfbmV3X3dyYXBwZWQoZ19tZW1kdXAoZGF0YSwgbGVuZ3RoKSwgbGVuZ3RoKTsKKyAgICAg
ICAgcHJpdi0+cXVldWVTaXplICs9IGxlbmd0aDsKKyAgICAgICAgZ3N0X2FkYXB0ZXJfcHVzaChw
cml2LT5hZGFwdGVyLmdldCgpLCBidWZmZXIpOworICAgICAgICBwcml2LT5hZGFwdGVyQ29uZGl0
aW9uLm5vdGlmeU9uZSgpOwogICAgIH0KIH0KIApAQCAtOTczLDggKzEwMTUsOCBAQCB2b2lkIENh
Y2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjphY2Nlc3NDb250cm9sQ2hlY2tGYWlsZWQoUGxh
dGZvcm1NZWRpYVJlc291cgogewogICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9T
UkMobV9zcmMuZ2V0KCkpOwogICAgIEdTVF9FTEVNRU5UX0VSUk9SKHNyYywgUkVTT1VSQ0UsIFJF
QUQsICgiJXMiLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpLCAo
bnVsbHB0cikpOwotICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0oc3JjLT5wcml2LT5hcHBz
cmMpOwotICAgIHdlYktpdFdlYlNyY1N0b3Aoc3JjKTsKKyAgICBzcmMtPnByaXYtPmRvZXNIYXZl
RU9TID0gdHJ1ZTsKKyAgICB3ZWJLaXRXZWJTcmNTdG9wKEdTVF9CQVNFX1NSQ19DQVNUKHNyYykp
OwogfQogCiB2b2lkIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojpsb2FkRmFpbGVkKFBs
YXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQpAQCAtOTg2
LDcgKzEwMjgsNyBAQCB2b2lkIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojpsb2FkRmFp
bGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNvbnN0IFJlcwogICAgICAgICBHU1RfRUxFTUVO
VF9FUlJPUihzcmMsIFJFU09VUkNFLCBGQUlMRUQsICgiJXMiLCBlcnJvci5sb2NhbGl6ZWREZXNj
cmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpLCAobnVsbHB0cikpOwogICAgIH0KIAotICAgIGdzdF9h
cHBfc3JjX2VuZF9vZl9zdHJlYW0oc3JjLT5wcml2LT5hcHBzcmMpOworICAgIHNyYy0+cHJpdi0+
ZG9lc0hhdmVFT1MgPSB0cnVlOwogfQogCiB2b2lkIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xp
ZW50Ojpsb2FkRmluaXNoZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJikKQEAgLTk5NCwxMCArMTAz
Niw4IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmxvYWRGaW5pc2hlZChQ
bGF0Zm9ybU1lZGlhUmVzb3VyY2UmKQogICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dF
Ql9TUkMobV9zcmMuZ2V0KCkpOwogICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMt
PnByaXY7CiAKLSAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIkhhdmUgRU9TIik7Ci0KLSAgICBp
ZiAoIXByaXYtPmlzU2Vla2luZykKLSAgICAgICAgZ3N0X2FwcF9zcmNfZW5kX29mX3N0cmVhbShw
cml2LT5hcHBzcmMpOworICAgIGlmIChwcml2LT5pc1NlZWtpbmcgJiYgIXByaXYtPmlzRmx1c2hp
bmcpCisgICAgICAgIHByaXYtPmlzU2Vla2luZyA9IGZhbHNlOwogfQogCiBib29sIHdlYktpdFNy
Y1dvdWxkVGFpbnRPcmlnaW4oV2ViS2l0V2ViU3JjKiBzcmMsIGNvbnN0IFNlY3VyaXR5T3JpZ2lu
JiBvcmlnaW4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmgKaW5kZXgg
MzVlNTFiMzNkNzJiY2U2NjBhZmEzYmU3OWI0MGVjODAwYjI4ZTI1My4uYzg2ZmI1NmE4MmNlYTcz
ODA0YzVhNmQ5YjYzYTNmZWU5NWQ0YzY0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3Vy
Y2VHU3RyZWFtZXIuaApAQCAtMjAsNiArMjAsNyBAQAogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBV
U0UoR1NUUkVBTUVSKQogCisjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0cHVzaHNyYy5oPgogI2luY2x1
ZGUgPGdzdC9nc3QuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDAsMTMgKzQxLDEzIEBA
IHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJTcmNDbGFzcyAgIFdlYktpdFdlYlNyY0NsYXNzOwog
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlNyY1ByaXZhdGUgV2ViS2l0V2ViU3JjUHJpdmF0ZTsK
IAogc3RydWN0IF9XZWJLaXRXZWJTcmMgewotICAgIEdzdEJpbiBwYXJlbnQ7CisgICAgR3N0UHVz
aFNyYyBwYXJlbnQ7CiAKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlICpwcml2OwogfTsKIAogc3Ry
dWN0IF9XZWJLaXRXZWJTcmNDbGFzcyB7Ci0gICAgR3N0QmluQ2xhc3MgcGFyZW50Q2xhc3M7Cisg
ICAgR3N0UHVzaFNyY0NsYXNzIHBhcmVudENsYXNzOwogfTsKIAogR1R5cGUgd2Via2l0X3dlYl9z
cmNfZ2V0X3R5cGUodm9pZCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggOWY0NDA1NTA1YjU4ZjAyY2Q4NzFjOTY3ZDc3ZTU0
NGJiNTgyMDAzMy4uOGE5MjYzZjc0NjkzMDZhNTc5OWNjM2U4ZjY2NDQ5OWU5ODcyODM4YyAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE1IEBACisyMDE5LTAzLTEyICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1h
bmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBSZXdyaXRlIEhUVFAgc291cmNl
IGVsZW1lbnQgdXNpbmcgcHVzaHNyYyBiYXNlIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU2MzEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25z
OgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9odHRwL3Rlc3RzL21lZGlhL2hscy92aWRlby1jb250
cm9scy1saXZlLXN0cmVhbS1leHBlY3RlZC50eHQ6CisgICAgICAgIFVwZGF0ZSBleHBlY3RhdGlv
bnMsIHRob3VnaCBpdCdzIG5vdCByZWFsbHkgcmVsYXRlZCB3aXRoIHRoaXMKKyAgICAgICAgcGF0
Y2guCisKIDIwMTktMDMtMTYgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAg
ICAgICAgQWRkIGEgbmV3IE1lZGlhQ2FwYWJpbGl0aWVzRXh0ZW5zaW9uc0VuYWJsZWQgc2V0dGlu
ZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9tZWRpYS92aWRlby1wbGF5LXN0
YWxsLXNlZWstZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9tZWRpYS92aWRl
by1wbGF5LXN0YWxsLXNlZWstZXhwZWN0ZWQudHh0CmluZGV4IGI3YzgyMjU3ZDZhZmQ1N2U4Nzgy
NGQzNTE1MjQxMTY1ZDk4YzAwNjEuLmNiNzViODAxODU0ZTQ5YmRkN2UyYWU4NjcwYjdjYTEwNzBh
ZWJlNzggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbWVkaWEvdmlkZW8tcGxh
eS1zdGFsbC1zZWVrLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21l
ZGlhL3ZpZGVvLXBsYXktc3RhbGwtc2Vlay1leHBlY3RlZC50eHQKQEAgLTEsMyArMSw0IEBACisK
IFRlc3QgdGhhdCBwbGF5YmFjayBjYW4gYmUgcmVzdW1lZCBieSBzZWVraW5nIGJhY2t3YXJkcyBh
ZnRlciBsb2FkIHN0YWxscy4KIAogUlVOKHZpZGVvLnBsYXkoKSkKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggZGU3ODU0YzczNTQ4MGQ1OTU2ZTA3N2I2ZjRh
MjUzYjlkMDNkZjk0My4uMjEwMzMwY2IwNThjZTQyM2QxZmIwNzY5NTFlY2ZmMTI5MDMzZTE1YiAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTIyMDgsNyAr
MjIwOCw2IEBAIEJ1ZyhHVEspIGpxdWVyeS90cmF2ZXJzaW5nLmh0bWwgWyBQYXNzIFNsb3cgXQog
QnVnKEdUSykgdGFibGVzL21vemlsbGEvb3RoZXIvc2xhc2hsb2dvLmh0bWwgWyBQYXNzIFNsb3cg
XQogCiBCdWcoR1RLKSBodHRwL3Rlc3RzL21lZGlhL3ZpZGVvLXByZWxvYWQuaHRtbCBbIFBhc3Mg
U2xvdyBdCi13ZWJraXQub3JnL2IvMTQzOTg5IFsgUmVsZWFzZSBdIGh0dHAvdGVzdHMvbWVkaWEv
aGxzL3ZpZGVvLWNvbnRyb2xzLWxpdmUtc3RyZWFtLmh0bWwgWyBQYXNzIFNsb3cgRmFpbHVyZSBd
CiAKIHdlYmtpdC5vcmcvYi8xMTY5NTggaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Nsb3dtZXRhcmVk
aXJlY3QtYmFzaWMuaHRtbCBbIFBhc3MgU2xvdyBdCiB3ZWJraXQub3JnL2IvMTE2OTU4IGh0dHAv
dGVzdHMvbmF2aWdhdGlvbi9zbG93dGltZXJyZWRpcmVjdC1iYXNpYy5odG1sIFsgUGFzcyBTbG93
IF0KQEAgLTI3MzMsOCArMjczMiw2IEBAIHdlYmtpdC5vcmcvYi8xMjIwMjEgbWVkaWEvdmlkZW8t
Y29udHJvbHMtY2FwdGlvbnMtdHJhY2ttZW51Lmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcv
Yi8xMjMwOTcgbWVkaWEvdHJhY2svdHJhY2stdXNlci1wcmVmZXJlbmNlcy5odG1sIFsgU2tpcCBd
CiB3ZWJraXQub3JnL2IvMTIxOTk1IG1lZGlhL3ZpZGVvLWNvbnRyb2xzLWNhcHRpb25zLXRyYWNr
bWVudS1pbmNsdWRlcy1lbmFibGVkLXRyYWNrLmh0bWwgWyBGYWlsdXJlIF0KIAotQnVnKEdUSykg
aHR0cC90ZXN0cy9tZWRpYS92aWRlby1wbGF5LXN0YWxsLXNlZWsuaHRtbCBbIFNraXAgXQotCiBC
dWcoR1RLKSBodHRwL3Rlc3RzL21pc2MvYWNpZDMuaHRtbCBbIEZhaWx1cmUgXQogCiBCdWcoR1RL
KSBtZWRpYS92aWRlby1zaXplLWludHJpbnNpYy1zY2FsZS5odG1sIFsgRmFpbHVyZSBdCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvaHR0cC90ZXN0cy9tZWRpYS9obHMvdmlk
ZW8tY29udHJvbHMtbGl2ZS1zdHJlYW0tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vZ3RrL2h0dHAvdGVzdHMvbWVkaWEvaGxzL3ZpZGVvLWNvbnRyb2xzLWxpdmUtc3RyZWFtLWV4
cGVjdGVkLnR4dAppbmRleCBiNzFhYWQzOTY2YjM0ZTIzYzEyMGE3YWM5NDRkNDg5YTc1ZTllNmRj
Li40NTcwYTJiYzQ0NTgwZmQ0ZTYzN2QwZjg2OWNhYWJhNmYwNDIwYmI5IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvaHR0cC90ZXN0cy9tZWRpYS9obHMvdmlkZW8tY29udHJv
bHMtbGl2ZS1zdHJlYW0tZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0
ay9odHRwL3Rlc3RzL21lZGlhL2hscy92aWRlby1jb250cm9scy1saXZlLXN0cmVhbS1leHBlY3Rl
ZC50eHQKQEAgLTEsMTMgKzEsMTQgQEAKIAorRVZFTlQoY2FucGxheXRocm91Z2gpCiBFVkVOVChw
bGF5KQogRVhQRUNURUQgKHZpZGVvLmR1cmF0aW9uID09ICdJbmZpbml0eScpIE9LCiAtd2Via2l0
LW1lZGlhLXRleHQtdHJhY2stY29udGFpbmVyOiBjbGFzc2VzOiBbaGlkZGVuXQogLXdlYmtpdC1t
ZWRpYS1jb250cm9scy1lbmNsb3N1cmU6IGNsYXNzZXM6IFtdCi0td2Via2l0LW1lZGlhLWNvbnRy
b2xzLXBhbmVsOiBjbGFzc2VzOiBbcGF1c2VkXQorLXdlYmtpdC1tZWRpYS1jb250cm9scy1wYW5l
bDogY2xhc3NlczogW3BhdXNlZCBzaG93XQogLXdlYmtpdC1tZWRpYS1jb250cm9scy1wbGF5LWJ1
dHRvbjogY2xhc3NlczogW3BhdXNlZF0KIC13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZWxpbmU6
IGNsYXNzZXM6IFtdCiAtd2Via2l0LW1lZGlhLWNvbnRyb2xzLWN1cnJlbnQtdGltZS1kaXNwbGF5
OiBjbGFzc2VzOiBbaG91ci1sb25nLXRpbWVdCi0td2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWUt
cmVtYWluaW5nLWRpc3BsYXk6IGNsYXNzZXM6IFtoaWRkZW4gaG91ci1sb25nLXRpbWVdCistd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLXRpbWUtcmVtYWluaW5nLWRpc3BsYXk6IGNsYXNzZXM6IFtob3Vy
LWxvbmctdGltZSBoaWRkZW5dCiAtd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRvZ2dsZS1jbG9zZWQt
Y2FwdGlvbnMtYnV0dG9uOiBjbGFzc2VzOiBbaGlkZGVuXQogLXdlYmtpdC1tZWRpYS1jb250cm9s
cy1mdWxsc2NyZWVuLWJ1dHRvbjogY2xhc3NlczogW10KIG5vbmU6IGNsYXNzZXM6IFttdXRlLWJv
eF0K
</data>
<flag name="review"
          id="381446"
          type_id="1"
          status="+"
          setter="calvaris"
    />
    <flag name="commit-queue"
          id="381477"
          type_id="3"
          status="-"
          setter="calvaris"
    />
          </attachment>
      

    </bug>

</bugzilla>